@fnet/cli 0.55.0 → 0.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builder/lib-cli.js +1 -1
- package/dist/builder/wf-cli.js +1 -1
- package/package.json +2 -2
- package/readme.md +1 -121
package/dist/builder/lib-cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("child_process"),t=require("@fnet/config"),a=require("path"),o=require("yargs/yargs"),s=require("fs"),n=require("yaml"),r=require("shelljs"),i=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),m=require("nunjucks"),u=require("redis"),g=require("@flownet/lib-is-redis-online"),f=require("nanoid"),y=require("@flownet/lib-atom-api-js"),h=require("axios"),w=require("qs"),b=require("lodash.merge"),_=require("@flownet/lib-parse-imports-js"),v=require("@flownet/lib-list-npm-versions"),j=require("@fnet/yargs-options-from-schema"),x=require("@fnet/shell"),k=require("semver"),D=require("node:os"),A=require("@node-red/util"),P=require("@flownet/lib-to-ios-app"),S=require("lodash.clonedeep"),I=require("@flownet/lib-to-macos-app"),E=require("@flownet/lib-to-electron"),T=require("@flownet/lib-to-webos"),$=require("@flownet/lib-to-nextjs"),O=require("@flownet/lib-to-docker"),C=require("form-data"),R=require("@fnet/to-rust"),M=require("@flownet/lib-parse-node-url"),q=require("@flownet/lib-pick-npm-versions"),F=require("chalk");const L=u,N=g;const{Api:U}=y,z=h.default,B=w;const J=b,W=p,K=d,G=_;function H({dir:e,name:t="index"}){let a=K.resolve(e,`./${t}.tsx`);if(W.existsSync(a)||(a=K.resolve(e,`./${t}.ts`)),W.existsSync(a)||(a=K.resolve(e,`./${t}.jsx`)),W.existsSync(a)||(a=K.resolve(e,`./${t}.js`)),!W.existsSync(a))return{};const o=a,s=K.extname(a);return{file:o,ext:s,ts:".ts"===s||".tsx"===s,name:t}}const X=v;const Y=p,Z=d,Q=l;const V=m,ee=p,te=d,ae=_,oe=v;const se=p,ne=d,re=l;const ie=p,ce=d,le=m,pe=_;const de=p,me=d,ue=m,ge=j;const fe=p,ye=d,he=m;const we=p,be=d,_e=m;const ve=m,je=p,xe=d;const ke=r,De=a;const Ae=r;const Pe=r;const Se=r;const Ie=x,Ee=t;const Te=p,$e=d,Oe=k,Ce=x,Re=t;const Me=p,qe=d,Fe=k,Le=r,Ne=t;const Ue=p,ze=d,Be=D,Je=m,We=A,Ke=t;const Ge=s,He=a,Xe=t;const Ye=t,Ze=P,Qe=S,Ve=k;const et=t,tt=I,at=S,ot=k;const st=t,nt=E,rt=S,it=k;const ct=t,lt=T,pt=S,dt=k;const mt=t,ut=$,gt=S,ft=k;const yt=t,ht=O,wt=S,bt=k;const _t=p,vt=d,jt=k,xt=x,kt=t,Dt=h.default;const At=k,Pt=t,St=h.default;const It=k,Et=t,Tt=h.default,$t=s,Ot=x,Ct=C;const Rt=k,Mt=t,qt=h.default,Ft=s,Lt=x,Nt=C;const Ut=t,zt=R,Bt=S,Jt=k;const Wt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:s})=>{await e({message:"Deploying it as gitlab project."});const n=t.projectDir;let r="fnet-to-gitlab";const i=o.params.config||"gitlab",c=await Ee({name:i,dir:t.projectDir,tags:t.tags});if(!c)throw new Error(`Couldnt load config ${i}`);const{data:l}=c.data;r+=` --projectGroupId=${l.projectGroupId}`,r+=` --projectPath='${n}'`,r+=` --projectName='${o.params.name}'`,r+=` --projectBranch='${o.params.branch||"main"}'`,r+=` --gitlabHost='${l.gitlabHost}'`,r+=` --gitlabToken='${l.gitlabToken}'`,r+=` --gitlabUsername='${l.gitlabUsername}'`,r+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await Ie({cmd:r}),a.isDirty=!0)},Kt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:s,yamlTarget:n})=>{await e({message:"Deploying it as gcs package."});const r=t.projectDir,i=$e.resolve(r,"package.json"),c=Te.readFileSync(i),l=JSON.parse(c);l.name=o.params.name,l.version=Oe.inc(o.params.version,"patch"),delete l.scripts,delete l.devDependencies,Te.writeFileSync(i,JSON.stringify(l,null,"\t"));const{file:p,data:d}=await Re({name:o.config||"gcs",dir:t.projectDir,tags:t.tags});let m="fnet-files-to-gcs";m+=` --projectId='${d.env.GCS_PROJECT_ID}'`,m+=` --bucketName='${d.env.GCS_BUCKET_NAME}'`,m+=` --keyFilename='${$e.resolve($e.dirname(p),d.env.GCS_UPLOADER_KEY_FILE)}'`,m+=` --dir='${r}'`,m+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",m+=` --destDir='${l.name}/${l.version}'`,m+=" --metadata.cacheControl='public, max-age=31536000, immutable'",d.env.DOMAIN&&(m+=` --domain='${d.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(m+=" --dryRun"),await Ce({cmd:m}),Te.writeFileSync(i,c),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=l.version,n.get("params").set("version",l.version),await s({target:o,packageJSON:l}))},Gt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,yamlTarget:n})=>{await t({message:"Deploying it as npm package."});const r=a.projectDir,i=qe.resolve(r,"package.json"),c=Me.readFileSync(i),l=JSON.parse(c);l.name=s.params.name,l.version=Fe.inc(s.params.version,"patch");const p=s.params.bin?.name||s.params.bin;!1!==s.params.bin?.enabled&&p&&"string"==typeof p&&(l.bin={[p]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete l.scripts,delete l.devDependencies,l.scripts={serve:"npx serve ."},Me.writeFileSync(i,JSON.stringify(l,null,"\t"));const d=(await Ne({name:a.npmConfig||"npm",dir:a.projectDir,tags:a.tags}))?.data;if(Me.writeFileSync(qe.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==Le.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");Me.writeFileSync(i,c),o.isDirty=!0,s.params.version=l.version,n.get("params").set("version",l.version)},Ht=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:n,packageDependencies:r,njEnv:i})=>{await t({message:"Deploying it as node-red flow."});const c=a.projectDir,l=a.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===s.deploy.template)d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||We.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:We.util.generateId(),name:e.doc.name,initialize:{content:Ue.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:We.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:We.util.generateId()}}};else if("cronjob"===s.deploy.template){let t=s.params?.schedules?cloneDeep(s.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||We.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:We.util.generateId(),name:e.doc.name,initialize:{content:Ue.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:We.util.generateId(),schedules:t},debug:{id:We.util.generateId()}}}}else{if("http"!==s.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||We.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:We.util.generateId(),name:e.doc.name,initialize:{content:Ue.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:We.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:We.util.generateId()},debug:{id:We.util.generateId()}}}}let m=Je.compile(Ue.readFileSync(ze.resolve(l,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(Ue.writeFileSync(ze.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=(await Ke({name:a.redConfig||"red",dir:a.projectDir,tags:a.tags}))?.data,g=s.deploy.url||u.env.RED_URL,f={};if(!1!==s.deploy.auth&&(f.Authorization="Bearer "+atomAccessToken),s.deploy.id)!0===s.actions?.delete?(await axios({method:"DELETE",url:`${g}/flow/${s.deploy.id}`,headers:f}),delete s.actions.delete,delete s.deploy.id,s.enabled=!1):await axios({method:"PUT",url:`${g}/flow/${s.deploy.id}`,data:m,headers:f});else{const e=await axios({method:"POST",url:`${g}/flow`,data:m,headers:f});s.deploy.id=e.data.id}},Xt=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:s,deploymentProject:n,deploymentProjectTarget:r})=>{await a({message:"Deploying it as workflow lib."});const i=(await Xe({name:"atom",dir:o.projectDir,tags:o.tags}))?.data;let c,l,p,d=r.deploy.name.split("/");if(1===d.length)l=i.env.ATOM_LIBRARIES_ID,p=r.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:i.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===r.dryRun)return;if(n.isDirty=!0,r.deploy.id){if(c=await t.get({id:r.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;r.deploy.id=c.id}const m=o.projectDir;c.doc.contents=[{content:Ge.readFileSync(He.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Ge.readFileSync(He.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Ge.readFileSync(He.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=s,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},Yt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as ios-app package."});const i=t?.config?await Ye({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Ve.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const l=Qe(t.params);l.dependencies=Qe(s);const p={atom:e,params:l,config:i?.config,src:o,dest:o};return{deployer:await Ze(p)}},Zt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as macos-app package."});const i=t?.config?await et({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=ot.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const l=at(t.params);l.dependencies=at(s);const p={atom:e,params:l,config:i?.config,src:o,dest:o};return{deployer:await tt(p)}},Qt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as electron package."});const i=t?.config?await st({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=it.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const l=rt(t.params);l.dependencies=rt(s);const p={atom:e,params:l,config:i?.config,src:o,dest:o};return{deployer:await nt(p)}},Vt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as webos package."});const i=t?.config?await ct({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=dt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const l=pt(t.params);l.dependencies=pt(s);const p={atom:e,params:l,config:i?.config,src:o,dest:o};return{deployer:await lt(p)}},ea=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as nextjs package."});const i=t?.config?await mt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=ft.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const l=gt(t.params);l.dependencies=gt(s);const p={atom:e,params:l,config:i?.config,src:o,dest:o};return{deployer:await ut(p)}},ta=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as docker package."});const i=t?.config?await yt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=bt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const l=wt(t.params);l.dependencies=wt(s);const p={atom:e,params:l,config:i?.config,src:o,dest:o};return{deployer:await ht(p)}},aa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet package."});const n=t.projectDir,r=vt.resolve(n,"package.json"),i=_t.readFileSync(r),c=JSON.parse(i);c.name=o.params.name,c.version=jt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,_t.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await kt({name:o.config||"fnet-package",dir:t.projectDir,tags:t.tags});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const d=`${p.env.ATOM_API_URL}/v1/auth/token`,m=p.env.ATOM_API_USERNAME,u=p.env.ATOM_API_PASSWORD;let g=await Dt({method:"POST",url:d,data:{username:m,password:u},headers:{"Content-Type":"application/json"}});const f=g.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${d}`);let y="fnet-files-to-gcs";if(y+=` --projectId='${p.env.GCS_PROJECT_ID}'`,y+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,y+=` --keyFilename='${vt.resolve(vt.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,y+=` --dir='${n}'`,y+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",y+=` --destDir='${c.name}/${c.version}'`,y+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(y+=` --domain='${p.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(y+=" --dryRun"),await xt({cmd:y}),_t.writeFileSync(r,i),!0===o.dryRun)return;a.isDirty=!0,o.params.version=c.version,s.get("params").set("version",c.version);const h=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(g=await Dt({method:"POST",url:h,data:{name:c.name,version:c.version,version_domain:p.env.DOMAIN,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),g.data?.error)throw new Error("Failed to publish fnet package.")},oa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet form."});const n=At.inc(o.params.version,"patch"),{file:r,data:i}=await Pt({name:o.config||"fnet-form",dir:t.projectDir,tags:t.tags});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const c=`${i.env.ATOM_API_URL}/v1/auth/token`,l=i.env.ATOM_API_USERNAME,p=i.env.ATOM_API_PASSWORD;let d=await St({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const m=d.data?.access_token;if(!m)throw new Error(`Invalid access_token from ${c}`);a.isDirty=!0,o.params.version=n,s.get("params").set("version",n);const u=`${i.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(d=await St({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`}}),d.data?.error)throw new Error("Error publishing fnet form.")},sa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet flow."});const n=It.inc(o.params.version,"patch"),{file:r,data:i}=await Et({name:o.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const c=`${i.env.ATOM_API_URL}/v1/auth/token`,l=i.env.ATOM_API_USERNAME,p=i.env.ATOM_API_PASSWORD;let d=await Tt({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const m=d.data?.access_token;if(!m)throw new Error(`Invalid access_token from ${c}`);a.isDirty=!0,o.params.version=n,s.get("params").set("version",n);const u=`${i.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(d=await Tt({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`}}),d.data?.error)throw new Error("Error publishing fnet flow.");const g=d.data?.upload.id;let f="fnet-dir-zipper";f+=` --sourceDir='${t.project.projectDir}'`,f+=" -p=**/*",f+=" -g",f+=" --stdout_format=json";const y=await Ot({cmd:f});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new Ct;w.append("file",$t.createReadStream(h));const b=await Tt.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${g}`,headers:{...w.getHeaders(),Authorization:`Bearer ${m}`},data:w});if(b.data?.error)throw new Error("Error uploading fnet flow.")},na=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet node."});const n=Rt.inc(o.params.version,"patch"),{file:r,data:i}=await Mt({name:o.config||"fnet-node",dir:t.project.projectDir,tags:t.tags});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const c=`${i.env.ATOM_API_URL}/v1/auth/token`,l=i.env.ATOM_API_USERNAME,p=i.env.ATOM_API_PASSWORD;let d=await qt({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const m=d.data?.access_token;if(!m)throw new Error(`Invalid access_token from ${c}`);a.isDirty=!0,o.params.version=n,s.get("params").set("version",n);const u=`${i.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(d=await qt({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`}}),d.data?.error)throw new Error("Error publishing fnet node.");const g=d.data?.upload.id;let f="fnet-dir-zipper";f+=` --sourceDir='${t.project.projectDir}'`,f+=" -p=**/*",f+=" -g",f+=" --stdout_format=json";const y=await Lt({cmd:f});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new Nt;w.append("file",Ft.createReadStream(h));const b=await qt.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${g}`,headers:{...w.getHeaders(),Authorization:`Bearer ${m}`},data:w});if(b.data?.error)throw new Error("Error uploading fnet node.")},ra=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as Rust package."});const i=t?.config?await Ut({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Jt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const l=Bt(t.params);l.dependencies=Bt(s);const p={atom:e,params:l,config:i?.config,src:o,dest:o};return{deployer:await zt(p)}};const ia=p,ca=d,la=n,pa=r,da=m,ma=async()=>{if(!await N({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=L.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:ua}=f,ga=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(U.set_api_url(e.data.url),t)return U.set_req_token(t),void a(t);z({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:B.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{U.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{U.set_req_token(),o(e)}))}))}},fa=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const a=e.doc.features;a.project=a.project||{},a.project.format=a.project.format||a.project_format||"esm",a.project_format=a.project.format,a.dts_enabled=!0===a.dts||void 0!==a.dts&&!1!==a.dts,a.hasOwnProperty("all_parsed_imports")||(a.all_parsed_imports=!0);const o=K.resolve(t.project.projectDir),s=H({dir:K.resolve(o,"./app")});if(s.file){let e=await G({file:s.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.app_uses_jsx=t,a.app_has_entry=!0,e=await G({file:s.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.app_entry_uses_jsx=t,a.app_entry_is_ts=s.ts,a.app_entry_ext=s.ext}const n=H({dir:K.resolve(o,"./cli")});if(n.file){let e=await G({file:n.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.cli_uses_jsx=t,a.cli_has_entry=!0,e=await G({file:n.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.cli_entry_uses_jsx=t,a.cli_entry_is_ts=n.ts,a.cli_entry_ext=n.ext}if("workflow.lib"===e.type){const e=H({dir:K.resolve(o,"./src")});if(e.file){let t=await G({file:e.file,recursive:!0}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.src_uses_jsx=o,a.src_has_entry=!0,t=await G({file:e.file}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.src_entry_uses_jsx=o,a.src_entry_is_ts=e.ts,a.src_entry_ext=e.ext}}const r=!0===a.app_entry_uses_jsx,i=!0===a.cli_entry_uses_jsx;a.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===a.form||!0===a.form?.enabled,a.multiple_enabled=a.multiple_enabled||!0===a.multiple||!0===a.multiple?.enabled,!1===a.app?a.app={enabled:!1}:!0===a.app?a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:r}:a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:r,...a.app||{}},a.app.enabled=!0===a.app.enabled&&(!0===e.doc.features.form_enabled||!0===a.app.extend||!0===a.app.enabled),a.app.format=a.app.format||"esm",a.app.folder=a.app.folder||a.app.format||"default",!1===a.cli?a.cli={enabled:!1}:!0===a.cli?a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:i}:a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:i,...a.cli||{}},a.cli.enabled=!0===a.cli.enabled&&(!1===e.doc.features.form_enabled||!0===a.cli.extend||!0===a.cli.enabled),a.cli.format=a.cli.format||"esm",a.cli.folder=a.cli.folder||a.cli.folder||"esm",a.cli.node_options=a.cli.node?.options||a.cli.node_options||"";const c={cjs:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!0,string:!0},cjsx:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0,string:!0},esmx:{format:"esm",browser:!0,babel:!0,context:a.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==a.iife,terser:!0,string:!0},umd:{format:"umd",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0}},l={};!0===a.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",babel_options:{targets:{chrome:"79"}}}),!0===a.electron&&(c.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===a.nextjs&&(c.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===a.ios&&(c.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===a.macos&&(c.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===a.app.enabled&&(a.app.dir=`./dist/app/${a.app.folder}`,c.app={format:a.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:a.app.dir,terser:!0,output_exports:!1===a.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:a.app.dir})),!0===a.cli.enabled&&(a.cli.dir=`./dist/cli/${a.cli.folder}`,c.cli={format:a.cli.format,context:"global",babel:!0===a.src_uses_jsx||!0===a.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:a.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===a.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${K.normalize(a.app.dir||".")}`,files:[K.normalize("./dist/**/*")],cors:!0,open:!1};a.babel_options=J({targets:{browsers:"last 9 versions, not dead",node:"18"}},a.babel_options||a.babel?.options),a.browsersync_options=J(p,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=J({},a.replace_options||a.replace?.options||{}),a.terser_options=J({},a.terser_options||a.terser?.options||{}),a.css_options=J({},a.css_options||a.css?.options||{}),a.wasm_options=J({},a.wasm_options||a.wasm?.options||{}),a.copy_options=J(l,a.copy_options||a.copy?.options||{}),a.json_options=J({},a.json_options||a.json?.options||{}),a.image_options=J({},a.image_options||a.image?.options||{}),a.analyzer_options=J({summaryOnly:!0,limit:12},a.analyzer_options||a.analyzer?.options||{}),a.visualizer_options=J({},a.visualizer_options||a.visualizer?.options||{}),a.string_options=J({},a.string_options||a.string?.options||{}),a.nunjucks_options=J({},a.nunjucks_options||a.nunjucks?.options||{}),Reflect.has(a.browsersync_options,"proxy")&&delete a.browsersync_options.server,a.rollup=a.rollup||{},a.rollup_output=J(c,a.rollup_output||a.rollup?.output||{}),a.string_enabled=!0===a.string||a.string&&!1!==a.string?.enabled,a.preact_enabled=!0===a.preact||a.preact&&!1!==a.preact?.enabled;const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==a.rollup[e]?(!0===a.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||a.babel_options,t.browsersync_options=J(a.browsersync_options,t.browsersync_options),t.replace_options=J(a.replace_options,t.replace_options),t.terser_options=J(a.terser_options,t.terser_options),t.css_options=J(a.css_options,t.css_options),t.wasm_options=J(a.wasm_options,t.wasm_options),t.copy_options=J(a.copy_options,t.copy_options),t.json_options=J(a.json_options,t.json_options),t.image_options=J(a.image_options,t.image_options),t.analyzer_options=J(a.analyzer_options,t.analyzer_options),t.visualizer_options=J(a.visualizer_options,t.visualizer_options),t.string_options=J(a.string_options,t.string_options),t.string=a.string_enabled&&t.string,t.nunjucks_options=J(a.nunjucks_options,t.nunjucks_options),a.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),a.form_enabled&&(t.babel=!0)):t.enabled=!1)}a.babel_enabled=d.some((e=>!0===a.rollup_output[e].babel)),a.browser_enabled=d.some((e=>!0===a.rollup_output[e].babel)),a.browsersync_enabled=!1!==a.browsersync&&d.some((e=>!0===a.rollup_output[e].browsersync)),a.browsersync_enabled=a.browsersync_enabled&&a.app.enabled,a.wasm_enabled=!0===a.wasm||a.wasm&&!1!==a.wasm?.enabled,a.css_enabled=!0===a.css||a.css&&!1!==a.css?.enabled,a.json_enabled=!0===a.json||a.json&&!1!==a.json?.enabled,a.terser_enabled=!1!==a.terser,a.copy_enabled=a.app.enabled||a.copy_enabled||a.copy&&!1!==a.copy?.enabled,a.image_enabled=!0===a.image||a.image&&!1!==a.image?.enabled,a.analyzer_enabled=!0===a.analyzer||a.analyzer&&!1!==a.analyzer?.enabled,a.visualizer_enabled=!0===a.visualizer||a.visualizer&&!1!==a.visualizer?.enabled,a.dependency_auto_enabled=!1!==a.dependency_auto&&!1!==a.dependency_auto?.enabled,a.npm_install_flags=a.npm_install_flags||"",a.react_version=a.react_version||a.react?.version||18,a.polyfill_enabled=!0===a.polyfill||a.polyfill&&!1!==a.polyfill?.enabled,a.nunjucks_enabled=!0===a.nunjucks||a.nunjucks&&!1!==a.nunjucks?.enabled},ya=async({atom:e,packageDependencies:t,packageDevDependencies:a})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";a=`^${(await X({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"yargs",version:"^17"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.19"})),a.push({package:"@babel/core",version:"^7"}),a.push({package:"@rollup/plugin-commonjs",version:"^26"}),a.push({package:"@rollup/plugin-node-resolve",version:"^15"}),a.push({package:"@rollup/plugin-replace",version:"^5"}),a.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&a.push({package:"rollup-plugin-dts",version:"^6"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),a.push({package:"@rollup/plugin-alias",version:"^5"}),a.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6"}),a.push({package:"@babel/preset-env",version:"^7"}),a.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.plugins?.forEach((e=>{switch(e[0]){case"proposal-decorators":a.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"proposal-class-properties":a.push({package:"@babel/plugin-proposal-class-properties",version:"^7"})}}))),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.nunjucks_enabled&&a.push({package:"@fnet/rollup-plugin-nunjucks",version:"0.1.3"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.4"}),e.doc.features.json_enabled&&a.push({package:"@rollup/plugin-json",version:"^6"}),e.doc.features.terser_enabled&&a.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&a.push({package:"@rollup/plugin-wasm",version:"^6"}),e.doc.features.image_enabled&&a.push({package:"@rollup/plugin-image",version:"^3"}),e.doc.features.analyzer_enabled&&a.push({package:"rollup-plugin-analyzer",version:"^3"}),e.doc.features.visualizer_enabled&&a.push({package:"rollup-plugin-visualizer",version:"^5"}),e.doc.features.string_enabled&&a.push({package:"rollup-plugin-string",version:"^3"}),e.doc.features.css_enabled){a.push({package:"rollup-plugin-postcss",version:"^4"}),a.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":a.push({package:"postcss-import",version:"^15"});break;case"postcss-url":a.push({package:"postcss-url",version:"^10"});break;case"postcss-preset-env":a.push({package:"postcss-preset-env",version:"^9"});break;case"autoprefixer":a.push({package:"autoprefixer",version:"^10"});break;case"cssnano":a.push({package:"cssnano",version:"^6"})}}))}e.doc.features.polyfill_enabled&&a.push({package:"rollup-plugin-node-polyfills",version:"^0.2"}),e.doc.features.copy_enabled&&(a.push({package:"rollup-plugin-copy",version:"^3"}),a.push({package:"chokidar",version:"^3"}))},ha=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const s={atom:e,packageDependencies:o,ts:Date.now()},n=a.templateDir,r=Z.resolve(a.projectDir,"src/app");Y.existsSync(r)||Y.mkdirSync(r,{recursive:!0}),await Q({pattern:["index.html.njk","index.js.njk"],dir:Z.resolve(n,"src/app"),outDir:r,context:s})},wa=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:s})=>{await s({message:"Creating package.json."});a.filter((e=>!0===e.dev)).forEach((e=>{o.find((t=>t.package===e.package))||o.push(e);const t=a.findIndex((t=>t.package===e.package));a.splice(t,1)}));const n=a.find((e=>"react"===e.package)),r=a.find((e=>"react-dom"===e.package));n&&!r?a.push({package:"react-dom",version:n.version}):n&&r&&(r.version=n.version),n&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const i=[];!0===e.doc.features.app.enabled&&i.push({file:te.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&i.push({file:te.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of i){const s=t.file;if(!ee.existsSync(s))throw new Error(`App file not found: ${s}`);const n=await ae({file:s,recursive:!0}),r=!0===e.doc.features.all_parsed_imports?n.all:n.required;for await(const e of r){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const s=(await oe({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?o:a).push({package:e.package,subpath:e.subpath,version:`^${s}`,type:"npm"})}}const c={atom:e,packageDependencies:a,packageDevDependencies:o},l=t.templateCommonDir,p=V.compile(ee.readFileSync(te.resolve(l,"package.json.njk"),"utf8"),V.configure(l)).render(c),d=t.projectDir,m=te.resolve(d,"package.json");ee.writeFileSync(m,p,"utf8")},ba=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const s={atom:e,packageDependencies:o},n=a.templateDir,r=ne.resolve(a.projectDir,"src/cli");se.existsSync(r)||se.mkdirSync(r,{recursive:!0}),await re({pattern:["index.js.njk"],dir:ne.resolve(n,"src/cli"),outDir:r,context:s})},_a=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},n=ce.resolve(a.projectDir,"src","default/index.js");if(!ie.existsSync(n))throw new Error(`Entry file not found: ${n}`);const r=(await pe({file:n,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),i=e.doc.features.rollup_output,c=Object.keys(i);for(let e=0;e<c.length;e++){const t=i[c[e]];if(!0===t.browser&&r.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(r.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<r.length;e++){const a=r[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(r)}}const l=a.templateCommonDir;let p=le.compile(ie.readFileSync(ce.resolve(l,"rollup.config.mjs.njk"),"utf8"),le.configure(l)).render(s);const d=a.projectDir;let m=ce.resolve(d,"rollup.config.mjs");ie.writeFileSync(m,p,"utf8")},va=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let s={};const n=e.doc.inputs||[],r=[],i=e.doc.input;if(i?s=await ge({schema:i}):n.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&r.push(e);const t={};Reflect.has(e,"type")&&(t.type=e.type),Reflect.has(e,"default")&&(t.default=e.default),Reflect.has(e,"choices")&&(t.choices=e.choices),(Reflect.has(e,"describe")||Reflect.has(e,"description"))&&(t.describe=e.describe||e.description),Reflect.has(e,"alias")&&(t.alias=e.alias),Reflect.has(e,"required")&&!0===e.required&&(t.required=!0),Reflect.has(e,"hidden")&&!0===e.hidden&&(t.hidden=!0),Reflect.has(e,"array")&&!0===e.array&&(t.array=!0),Reflect.has(e,"normalize")&&!0===e.normalize&&(t.normalize=!0),Reflect.has(e,"nargs")&&(t.nargs=e.nargs),s[e.name]=t})),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const t=e.doc.features.cli.fargs,a={type:"string",describe:"Config name to load args",hidden:!1},o={type:"array",describe:"Tags to filter the config",hidden:!1};Reflect.has(t,"default")&&(a.default=t.default),(Reflect.has(t,"describe")||Reflect.has(t,"description"))&&(a.describe=t.describe||t.description),Reflect.has(t,"choices")&&(a.choices=t.choices),s.fargs=a,s.ftag=o}const c={options:s,imports:r,atom:e},l=a.templateDir,p=ue.compile(de.readFileSync(me.resolve(l,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=a.projectDir,m=me.resolve(d,"src/default/to.args.js");de.writeFileSync(m,p,"utf8")},ja=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},n=a.templateCommonDir,r=he.compile(fe.readFileSync(ye.resolve(n,".gitignore.njk"),"utf8"),he.configure(n)).render(s),i=a.projectDir,c=ye.resolve(i,".gitignore");fe.writeFileSync(c,r,"utf8")},xa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const s={atom:e,packageDependencies:o},n=a.templateCommonDir,r=_e.compile(we.readFileSync(be.resolve(n,"tsconfig.json.njk"),"utf8"),_e.configure(n)).render(s),i=a.projectDir,c=be.resolve(i,"tsconfig.json");we.writeFileSync(c,r,"utf8")},ka=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const s="readme.md",n=`Creating ${s}`;if(await a({message:n}),t.project?.readme){const e={content:t.project.readme.doc.content},a=t.templateCommonDir,o=ve.compile(je.readFileSync(xe.resolve(a,`${s}.njk`),"utf8"),ve.configure(a)).render(e),n=t.projectDir,r=xe.resolve(n,`${s}`);je.writeFileSync(r,o,"utf8")}else if(e.id){const a=await o.first({type:"wiki",parent_id:e.id});if(!a||"markdown"!==a.doc?.["content-type"])return;const{content:n,...r}=a.doc,i={content:n},c=t.templateCommonDir,l=ve.compile(je.readFileSync(xe.resolve(c,`${s}.njk`),"utf8"),ve.configure(c)).render(i),p=t.projectDir,d=xe.resolve(p,`${s}`);je.writeFileSync(d,l,"utf8")}},Da=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=De.join("src","**","*");if(0!==ke.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},Aa=async({atom:e,setInProgress:t,context:a})=>{if(!e.doc.features.dts_enabled)return;const o=a.projectDir;await t({message:"Creating .d.ts"});if(0!==Ae.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},Pa=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==Pe.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},Sa=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==Se.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},Ia=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:s,setInProgress:n,deploymentProject:r,yamlTarget:i}=e;if(!0===s.enabled)if("lib"===s.name)await Xt({...e});else if("red"===s.name)await Ht({...e});else if("npm"===s.name)await Gt({...e});else if("gcs"===s.name)await Kt({...e});else if("gitlab"===s.name)await Wt({...e});else if("fnet-package"===s.name)await aa({...e});else if("fnet-form"===s.name)await oa({...e});else if("fnet-node"===s.name)await na({...e});else if("fnet-flow"===s.name)await sa({...e});else{let e;if("nextjs"===s.name?e=ea:"webos"===s.name?e=Vt:"electron"===s.name?e=Qt:"docker"===s.name?e=ta:"ios"===s.name?e=Yt:"macos"===s.name?e=Zt:"rust"===s.name&&(e=ra),!e)return;await e({atom:t,target:s,onProgress:n,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:i}),r.isDirty=!0}},{Atom:Ea}=y,Ta=M,$a=t,Oa=_,Ca=q,Ra=F;var Ma=class{#e;#t;#a;#o;#s;#n;#r;#i;#c;#l;#p;#d;#m;#u;#g;#f;#y;constructor(e){this.#e=new ga,this.#t=e,this.#n=[],this.#r=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#n,packageDevDependencies:this.#r,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Ea,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,a){this._redis_client&&await this._redis_client.SETEX(e,a||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await ma(),this.#c=this.#t.buildId||ua(24),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#g=["all","deploy","build"].includes(this.#m),this.#f=["all","deploy"].includes(this.#m),this.#p=this.#t.protocol,this.#l="BUILD:"+this.#c,this.#d=(await $a({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await fa(this.#y),await ya(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#i=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#i)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await Ea.get({id:e});let t=this.#a.doc.bundleName;t=t||(this.#a.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#a.doc.bundleName=t,this.#a.type=this.#a.type||"workflow.lib",this.#y.atom=this.#a}async initLibraryDir(){const e=this.#t.projectDir;let t;const a=["node_modules"];ia.existsSync(e)&&ia.readdirSync(e).forEach((o=>{a.includes(o)||(t=pa.rm("-rf",ca.join(e,o)))}));let o=e;if(!ia.existsSync(o)&&(t=pa.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=ca.join(e,"src"),!ia.existsSync(o)&&(t=pa.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=ca.join(e,"src","default"),!ia.existsSync()&&(t=pa.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=da.configure(e,{watch:!1,dev:!0}),this.#y.njEnv=this.#o}async initLibs(){const e=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id}];this.#s=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#n})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],s=await this.findAtomLibrary({url:o.name});o.atom=s;const n=s.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));n?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=Ta({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#p),"ac:"===t.protocol){const a=t.pathname.split("/");if(1===a.length)return await Ea.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await Ea.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Ea.first({where:{name:a[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===t.protocol){const e=this.#a;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=ca.resolve(this.#t.projectSrcDir,"index.js"),a=await Oa({file:t,recursive:!0}),o=e.doc.dependencies,s=!0===this.#a.doc.features.all_parsed_imports?a.all:a.required;for await(const e of s){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await Ca({name:e.package,count:1});o.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:e}){await this.setInProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const t=e.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const a=t[e].atom,o=this.#t.projectDir;if("local:"===a.protocol){const e=ca.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=ca.relative(ca.join(this.#t.projectDir,"src","default"),e);if(!ia.existsSync(e)){ia.mkdirSync(ca.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",ia.writeFileSync(e,t,"utf8")}a.relativePath=t.split(ca.sep).join("/"),this.#a.typesDir=`./types/${ca.basename(o)}/src`}else{const e=ca.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;ia.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#s.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},t=this.#t.templateDir,a=da.compile(ia.readFileSync(ca.resolve(t,ca.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=ca.resolve(o,ca.join("src","default","index.js"));ia.writeFileSync(s,a,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:a,...o}=this.#a.doc,s={content:la.stringify(o)},n=this.#t.templateDir,r=da.compile(ia.readFileSync(ca.resolve(n,`${e}.njk`),"utf8"),this.#o).render(s),i=this.#t.projectDir,c=ca.resolve(i,`${e}`);ia.writeFileSync(c,r,"utf8")}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&await a.save()}}else if(this.#a.id){const e=await Ea.list({type:"library.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&(a=await Ea.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:a}=t,o=a.get("targets")||[],s=t.doc.targets||[];for(let e=0;e<s.length;e++){const a=s[e],n=o.items[e];await Ia({...this.#y,deploymentProject:t,deploymentProjectTarget:a,yamlTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await Ea.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await Ea.update(o,{id:o.id})):o=await Ea.create({parent_id:this.#d.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:a.version}]}})}async setInProgress({message:e}){console.log(Ra.blue(e)),await this._cache_set(this.#l,{status:"IN_PROGRESS",message:e})}async build(){try{this.#u&&(await this.createAtomLibFiles({libs:this.#s}),await this.createEngine(),await this.createProjectYaml(),await ka(this.#y),await xa(this.#y),await ja(this.#y),await va(this.#y),await ba(this.#y),await ha(this.#y),await _a(this.#y),await wa(this.#y),await Da(this.#y),await Aa(this.#y),this.#g&&(await Pa(this.#y),await Sa(this.#y),this.#f&&await this.deploy())),await this._cache_set(this.#l,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e.message||e}),console.log(e),e}}};const qa=p,Fa=d;var La=function({baseDir:e=__dirname}){let t=e;for(;t!==Fa.parse(t).root;){const e=Fa.join(t,"node_modules");if(qa.existsSync(e))return e;t=Fa.dirname(t)}return null};const Na=process.cwd(),{spawn:Ua}=e;t({name:["redis"],dir:Na,optional:!0});const za=a,Ba=o,Ja=s,Wa=n,Ka=r,Ga=i,Ha=t,Xa=c,Ya=l,Za=Ma,Qa=La({baseDir:__dirname}),Va="win32"===process.platform?";":":";process.env.PATH=`${za.join(Qa,"/.bin")}${Va}${process.env.PATH}`;let eo=Ba(process.argv.slice(2)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0}).option("vscode",{type:"boolean",default:!0,alias:"vs"})),(async e=>{try{const t=za.resolve(Qa,"@fnet/cli-project-node/dist/template/project"),a=za.resolve(Na,e.name);Ja.existsSync(a)||Ja.mkdirSync(a),await Ya({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=Ka.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Ka.which("git")&&(o=Ka.exec("git init --initial-branch=main",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(Ka.which("code")&&e.vscode&&(o=Ka.exec(`cd ${a} && code .`),0!==o.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=za.resolve(Qa,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=za.basename(a),e.update){if(await Ya({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==Ka.exec("fnode build",{cwd:a}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await ao(e),a=new Za(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await ao({...e,mode:"all"}),a=new Za(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await ao({...e,mode:"file"}),a=new Za(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function to(e,{name:t,bin:a,preArgs:o=[]}){return e.command(`${t||a} [commands..]`,`${a} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ao(e),{projectDir:s}=t,n=process.argv.slice(3);Ua(a,[...o,...n],{cwd:s,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function ao(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:za.resolve(Qa,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:za.resolve(Qa,"./@fnet/cli-project-common/dist/template/default"),projectDir:za.resolve(Na,`./.output/${e.id}`),tags:e.ftag};{const t=await async function({tags:e}){const t=za.resolve(Na,"node.yaml");if(!Ja.existsSync(t))throw new Error("node.yaml file not found in current directory.");const{raw:a,parsed:o}=await Ga({file:t,tags:e}),s=za.dirname(t),n={libraryAtom:{doc:{...o},fileName:"index"},projectDir:s,projectFilePath:t,projectFileContent:a,projectFileParsed:o},r=za.resolve(s,"node.devops.yaml");if(Ja.existsSync(r)){const{raw:t,parsed:a}=await Ga({file:r,tags:e}),o=Wa.parseDocument(t);n.devops={filePath:r,fileContent:t,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{Ja.writeFileSync(n.devops.filePath,o.toString())}}}const i=za.resolve(s,"readme.md");if(Ja.existsSync(i)){const e=Ja.readFileSync(i,"utf8");n.readme={filePath:i,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return n}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:za.resolve(Qa,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:za.resolve(Qa,"./@fnet/cli-project-common/dist/template/default"),projectDir:za.resolve(t.projectDir,"./.workspace"),projectSrcDir:za.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}eo=eo.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await ao(e),{project:a}=t,{projectDir:o,projectFileParsed:s}=a,n=s.input;if(!n)throw new Error("Config schema not found in project file.");const r=await Xa({schema:n,format:"yaml"}),i=za.resolve(o,".fnet");Ja.existsSync(i)||Ja.mkdirSync(i);const c=za.resolve(i,`${e.name}.fnet`);Ja.writeFileSync(c,r)}catch(e){console.error(e.message),process.exit(1)}})),eo=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await ao(e),{project:a}=t,{projectDir:o,projectFileParsed:s}=a,n=s.input;if(!n)throw new Error("Config schema not found in project file.");const r=za.resolve(o,".fnet"),i=za.resolve(r,`${e.name}.fnet`),c=await Xa({schema:n,format:"yaml",ref:i});Ja.existsSync(r)||Ja.mkdirSync(r),Ja.writeFileSync(i,c)}catch(e){console.error(e.message),process.exit(1)}}))}(eo),eo=to(eo,{bin:"npm"}),eo=to(eo,{bin:"node"}),eo=to(eo,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),eo=to(eo,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),eo=to(eo,{name:"app",bin:"npm",preArgs:["run","app","--"]}),eo=to(eo,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),eo=to(eo,{bin:"npx"}),eo=to(eo,{bin:"cdk"}),eo=to(eo,{bin:"aws"}),eo=function(e,{name:t,preArgs:a=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await ao(e),{projectDir:o}=t,s=e.config,n=await Ha({name:s,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),r=n?.data?.env||void 0,i=e.command,c=process.argv.slice(5);Ua(i,[...a,...c],{cwd:o,stdio:"inherit",shell:!0,env:{...process.env,...r}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(eo,{name:"with"}),eo.demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
|
|
2
|
+
"use strict";var e=require("child_process"),t=require("@fnet/config"),a=require("path"),o=require("yargs/yargs"),s=require("fs"),n=require("yaml"),r=require("shelljs"),i=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),m=require("nunjucks"),u=require("redis"),g=require("@flownet/lib-is-redis-online"),f=require("nanoid"),y=require("@flownet/lib-atom-api-js"),h=require("axios"),w=require("qs"),b=require("lodash.merge"),_=require("@flownet/lib-parse-imports-js"),v=require("@flownet/lib-list-npm-versions"),j=require("@fnet/yargs-options-from-schema"),x=require("@fnet/shell"),k=require("semver"),D=require("node:os"),A=require("@node-red/util"),S=require("@flownet/lib-to-ios-app"),P=require("lodash.clonedeep"),I=require("@flownet/lib-to-macos-app"),E=require("@flownet/lib-to-electron"),T=require("@flownet/lib-to-webos"),$=require("@flownet/lib-to-nextjs"),O=require("@flownet/lib-to-docker"),C=require("form-data"),R=require("@fnet/to-rust"),M=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-pick-npm-versions"),q=require("chalk");const L=u,N=g;const{Api:U}=y,z=h.default,B=w;const J=b,W=p,K=d,G=_;function H({dir:e,name:t="index"}){let a=K.resolve(e,`./${t}.tsx`);if(W.existsSync(a)||(a=K.resolve(e,`./${t}.ts`)),W.existsSync(a)||(a=K.resolve(e,`./${t}.jsx`)),W.existsSync(a)||(a=K.resolve(e,`./${t}.js`)),!W.existsSync(a))return{};const o=a,s=K.extname(a);return{file:o,ext:s,ts:".ts"===s||".tsx"===s,name:t}}const X=v;const Y=p,Z=d,Q=l;const V=m,ee=p,te=d,ae=_,oe=v;const se=p,ne=d,re=l;const ie=p,ce=d,le=m,pe=_;const de=p,me=d,ue=m,ge=j;const fe=p,ye=d,he=m;const we=p,be=d,_e=m;const ve=m,je=p,xe=d;const ke=r,De=a;const Ae=r;const Se=r;const Pe=r;const Ie=x,Ee=t;const Te=p,$e=d,Oe=k,Ce=x,Re=t;const Me=p,Fe=d,qe=k,Le=r,Ne=t;const Ue=p,ze=d,Be=D,Je=m,We=A,Ke=t;const Ge=s,He=a,Xe=t;const Ye=t,Ze=S,Qe=P,Ve=k;const et=t,tt=I,at=P,ot=k;const st=t,nt=E,rt=P,it=k;const ct=t,lt=T,pt=P,dt=k;const mt=t,ut=$,gt=P,ft=k;const yt=t,ht=O,wt=P,bt=k;const _t=p,vt=d,jt=k,xt=x,kt=t,Dt=h.default;const At=k,St=t,Pt=h.default;const It=k,Et=t,Tt=h.default,$t=s,Ot=x,Ct=C;const Rt=k,Mt=t,Ft=h.default,qt=s,Lt=x,Nt=C;const Ut=t,zt=R,Bt=P,Jt=k;const Wt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:s})=>{await e({message:"Deploying it as gitlab project."});const n=t.projectDir;let r="fnet-to-gitlab";const i=o.params.config||"gitlab",c=await Ee({name:i,dir:t.projectDir,tags:t.tags});if(!c)throw new Error(`Couldnt load config ${i}`);const{data:l}=c.data;r+=` --projectGroupId=${l.projectGroupId}`,r+=` --projectPath='${n}'`,r+=` --projectName='${o.params.name}'`,r+=` --projectBranch='${o.params.branch||"main"}'`,r+=` --gitlabHost='${l.gitlabHost}'`,r+=` --gitlabToken='${l.gitlabToken}'`,r+=` --gitlabUsername='${l.gitlabUsername}'`,r+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await Ie({cmd:r}),a.isDirty=!0)},Kt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:s,yamlTarget:n})=>{await e({message:"Deploying it as gcs package."});const r=t.projectDir,i=$e.resolve(r,"package.json"),c=Te.readFileSync(i),l=JSON.parse(c);l.name=o.params.name,l.version=Oe.inc(o.params.version,"patch"),delete l.scripts,delete l.devDependencies,Te.writeFileSync(i,JSON.stringify(l,null,"\t"));const{file:p,data:d}=await Re({name:o.config||"gcs",dir:t.projectDir,tags:t.tags});let m="fnet-files-to-gcs";m+=` --projectId='${d.env.GCS_PROJECT_ID}'`,m+=` --bucketName='${d.env.GCS_BUCKET_NAME}'`,m+=` --keyFilename='${$e.resolve($e.dirname(p),d.env.GCS_UPLOADER_KEY_FILE)}'`,m+=` --dir='${r}'`,m+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",m+=` --destDir='${l.name}/${l.version}'`,m+=" --metadata.cacheControl='public, max-age=31536000, immutable'",d.env.DOMAIN&&(m+=` --domain='${d.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(m+=" --dryRun"),await Ce({cmd:m}),Te.writeFileSync(i,c),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=l.version,n.get("params").set("version",l.version),await s({target:o,packageJSON:l}))},Gt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,yamlTarget:n})=>{await t({message:"Deploying it as npm package."});const r=a.projectDir,i=Fe.resolve(r,"package.json"),c=Me.readFileSync(i),l=JSON.parse(c);l.name=s.params.name,l.version=qe.inc(s.params.version,"patch");const p=s.params.bin?.name||s.params.bin;!1!==s.params.bin?.enabled&&p&&"string"==typeof p&&(l.bin={[p]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete l.scripts,delete l.devDependencies,l.scripts={serve:"npx serve ."},Me.writeFileSync(i,JSON.stringify(l,null,"\t"));const d=(await Ne({name:a.npmConfig||"npm",dir:a.projectDir,tags:a.tags}))?.data;if(Me.writeFileSync(Fe.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==Le.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");Me.writeFileSync(i,c),o.isDirty=!0,s.params.version=l.version,n.get("params").set("version",l.version)},Ht=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:n,packageDependencies:r,njEnv:i})=>{await t({message:"Deploying it as node-red flow."});const c=a.projectDir,l=a.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===s.deploy.template)d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||We.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:We.util.generateId(),name:e.doc.name,initialize:{content:Ue.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:We.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:We.util.generateId()}}};else if("cronjob"===s.deploy.template){let t=s.params?.schedules?cloneDeep(s.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||We.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:We.util.generateId(),name:e.doc.name,initialize:{content:Ue.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:We.util.generateId(),schedules:t},debug:{id:We.util.generateId()}}}}else{if("http"!==s.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||We.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:We.util.generateId(),name:e.doc.name,initialize:{content:Ue.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:We.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:We.util.generateId()},debug:{id:We.util.generateId()}}}}let m=Je.compile(Ue.readFileSync(ze.resolve(l,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(Ue.writeFileSync(ze.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=(await Ke({name:a.redConfig||"red",dir:a.projectDir,tags:a.tags}))?.data,g=s.deploy.url||u.env.RED_URL,f={};if(!1!==s.deploy.auth&&(f.Authorization="Bearer "+atomAccessToken),s.deploy.id)!0===s.actions?.delete?(await axios({method:"DELETE",url:`${g}/flow/${s.deploy.id}`,headers:f}),delete s.actions.delete,delete s.deploy.id,s.enabled=!1):await axios({method:"PUT",url:`${g}/flow/${s.deploy.id}`,data:m,headers:f});else{const e=await axios({method:"POST",url:`${g}/flow`,data:m,headers:f});s.deploy.id=e.data.id}},Xt=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:s,deploymentProject:n,deploymentProjectTarget:r})=>{await a({message:"Deploying it as workflow lib."});const i=(await Xe({name:"atom",dir:o.projectDir,tags:o.tags}))?.data;let c,l,p,d=r.deploy.name.split("/");if(1===d.length)l=i.env.ATOM_LIBRARIES_ID,p=r.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:i.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===r.dryRun)return;if(n.isDirty=!0,r.deploy.id){if(c=await t.get({id:r.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;r.deploy.id=c.id}const m=o.projectDir;c.doc.contents=[{content:Ge.readFileSync(He.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Ge.readFileSync(He.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Ge.readFileSync(He.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=s,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},Yt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as ios-app package."});const i=t?.config?await Ye({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Ve.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const l=Qe(t.params);l.dependencies=Qe(s);const p={atom:e,params:l,config:i?.config,src:o,dest:o};return{deployer:await Ze(p)}},Zt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as macos-app package."});const i=t?.config?await et({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=ot.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const l=at(t.params);l.dependencies=at(s);const p={atom:e,params:l,config:i?.config,src:o,dest:o};return{deployer:await tt(p)}},Qt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as electron package."});const i=t?.config?await st({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=it.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const l=rt(t.params);l.dependencies=rt(s);const p={atom:e,params:l,config:i?.config,src:o,dest:o};return{deployer:await nt(p)}},Vt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as webos package."});const i=t?.config?await ct({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=dt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const l=pt(t.params);l.dependencies=pt(s);const p={atom:e,params:l,config:i?.config,src:o,dest:o};return{deployer:await lt(p)}},ea=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as nextjs package."});const i=t?.config?await mt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=ft.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const l=gt(t.params);l.dependencies=gt(s);const p={atom:e,params:l,config:i?.config,src:o,dest:o};return{deployer:await ut(p)}},ta=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as docker package."});const i=t?.config?await yt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=bt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const l=wt(t.params);l.dependencies=wt(s);const p={atom:e,params:l,config:i?.config,src:o,dest:o};return{deployer:await ht(p)}},aa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet package."});const n=t.projectDir,r=vt.resolve(n,"package.json"),i=_t.readFileSync(r),c=JSON.parse(i);c.name=o.params.name,c.version=jt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,_t.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await kt({name:o.config||"fnet-package",dir:t.projectDir,tags:t.tags});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const d=`${p.env.ATOM_API_URL}/v1/auth/token`,m=p.env.ATOM_API_USERNAME,u=p.env.ATOM_API_PASSWORD;let g=await Dt({method:"POST",url:d,data:{username:m,password:u},headers:{"Content-Type":"application/json"}});const f=g.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${d}`);let y="fnet-files-to-gcs";if(y+=` --projectId='${p.env.GCS_PROJECT_ID}'`,y+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,y+=` --keyFilename='${vt.resolve(vt.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,y+=` --dir='${n}'`,y+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",y+=` --destDir='${c.name}/${c.version}'`,y+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(y+=` --domain='${p.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(y+=" --dryRun"),await xt({cmd:y}),_t.writeFileSync(r,i),!0===o.dryRun)return;a.isDirty=!0,o.params.version=c.version,s.get("params").set("version",c.version);const h=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(g=await Dt({method:"POST",url:h,data:{name:c.name,version:c.version,version_domain:p.env.DOMAIN,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),g.data?.error)throw new Error("Failed to publish fnet package.")},oa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet form."});const n=At.inc(o.params.version,"patch"),{file:r,data:i}=await St({name:o.config||"fnet-form",dir:t.projectDir,tags:t.tags});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const c=`${i.env.ATOM_API_URL}/v1/auth/token`,l=i.env.ATOM_API_USERNAME,p=i.env.ATOM_API_PASSWORD;let d=await Pt({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const m=d.data?.access_token;if(!m)throw new Error(`Invalid access_token from ${c}`);a.isDirty=!0,o.params.version=n,s.get("params").set("version",n);const u=`${i.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(d=await Pt({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`}}),d.data?.error)throw new Error("Error publishing fnet form.")},sa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet flow."});const n=It.inc(o.params.version,"patch"),{file:r,data:i}=await Et({name:o.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const c=`${i.env.ATOM_API_URL}/v1/auth/token`,l=i.env.ATOM_API_USERNAME,p=i.env.ATOM_API_PASSWORD;let d=await Tt({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const m=d.data?.access_token;if(!m)throw new Error(`Invalid access_token from ${c}`);a.isDirty=!0,o.params.version=n,s.get("params").set("version",n);const u=`${i.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(d=await Tt({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`}}),d.data?.error)throw new Error("Error publishing fnet flow.");const g=d.data?.upload.id;let f="fnet-dir-zipper";f+=` --sourceDir='${t.project.projectDir}'`,f+=" -p=**/*",f+=" -g",f+=" --stdout_format=json";const y=await Ot({cmd:f});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new Ct;w.append("file",$t.createReadStream(h));const b=await Tt.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${g}`,headers:{...w.getHeaders(),Authorization:`Bearer ${m}`},data:w});if(b.data?.error)throw new Error("Error uploading fnet flow.")},na=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet node."});const n=Rt.inc(o.params.version,"patch"),{file:r,data:i}=await Mt({name:o.config||"fnet-node",dir:t.project.projectDir,tags:t.tags});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const c=`${i.env.ATOM_API_URL}/v1/auth/token`,l=i.env.ATOM_API_USERNAME,p=i.env.ATOM_API_PASSWORD;let d=await Ft({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const m=d.data?.access_token;if(!m)throw new Error(`Invalid access_token from ${c}`);a.isDirty=!0,o.params.version=n,s.get("params").set("version",n);const u=`${i.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(d=await Ft({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`}}),d.data?.error)throw new Error("Error publishing fnet node.");const g=d.data?.upload.id;let f="fnet-dir-zipper";f+=` --sourceDir='${t.project.projectDir}'`,f+=" -p=**/*",f+=" -g",f+=" --stdout_format=json";const y=await Lt({cmd:f});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new Nt;w.append("file",qt.createReadStream(h));const b=await Ft.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${g}`,headers:{...w.getHeaders(),Authorization:`Bearer ${m}`},data:w});if(b.data?.error)throw new Error("Error uploading fnet node.")},ra=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as Rust package."});const i=t?.config?await Ut({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Jt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const l=Bt(t.params);l.dependencies=Bt(s);const p={atom:e,params:l,config:i?.config,src:o,dest:o};return{deployer:await zt(p)}};const ia=p,ca=d,la=n,pa=r,da=m,ma=async()=>{if(!await N({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=L.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:ua}=f,ga=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(U.set_api_url(e.data.url),t)return U.set_req_token(t),void a(t);z({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:B.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{U.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{U.set_req_token(),o(e)}))}))}},fa=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const a=e.doc.features;a.project=a.project||{},a.project.format=a.project.format||a.project_format||"esm",a.project_format=a.project.format,a.dts_enabled=!0===a.dts||void 0!==a.dts&&!1!==a.dts,a.hasOwnProperty("all_parsed_imports")||(a.all_parsed_imports=!0);const o=K.resolve(t.project.projectDir),s=H({dir:K.resolve(o,"./app")});if(s.file){let e=await G({file:s.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.app_uses_jsx=t,a.app_has_entry=!0,e=await G({file:s.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.app_entry_uses_jsx=t,a.app_entry_is_ts=s.ts,a.app_entry_ext=s.ext}const n=H({dir:K.resolve(o,"./cli")});if(n.file){let e=await G({file:n.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.cli_uses_jsx=t,a.cli_has_entry=!0,e=await G({file:n.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.cli_entry_uses_jsx=t,a.cli_entry_is_ts=n.ts,a.cli_entry_ext=n.ext}if("workflow.lib"===e.type){const e=H({dir:K.resolve(o,"./src")});if(e.file){let t=await G({file:e.file,recursive:!0}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.src_uses_jsx=o,a.src_has_entry=!0,t=await G({file:e.file}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.src_entry_uses_jsx=o,a.src_entry_is_ts=e.ts,a.src_entry_ext=e.ext}}const r=!0===a.app_entry_uses_jsx,i=!0===a.cli_entry_uses_jsx;a.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===a.form||!0===a.form?.enabled,a.multiple_enabled=a.multiple_enabled||!0===a.multiple||!0===a.multiple?.enabled,!1===a.app?a.app={enabled:!1}:!0===a.app?a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:r}:a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:r,...a.app||{}},a.app.enabled=!0===a.app.enabled&&(!0===e.doc.features.form_enabled||!0===a.app.extend||!0===a.app.enabled),a.app.format=a.app.format||"esm",a.app.folder=a.app.folder||a.app.format||"default",!1===a.cli?a.cli={enabled:!1}:!0===a.cli?a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:i}:a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:i,...a.cli||{}},a.cli.enabled=!0===a.cli.enabled&&(!1===e.doc.features.form_enabled||!0===a.cli.extend||!0===a.cli.enabled),a.cli.format=a.cli.format||"esm",a.cli.folder=a.cli.folder||a.cli.folder||"esm",a.cli.node_options=a.cli.node?.options||a.cli.node_options||"";const c={cjs:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!0,string:!0},cjsx:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0,string:!0},esmx:{format:"esm",browser:!0,babel:!0,context:a.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==a.iife,terser:!0,string:!0},umd:{format:"umd",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0}},l={};!0===a.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",babel_options:{targets:{chrome:"79"}}}),!0===a.electron&&(c.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===a.nextjs&&(c.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===a.ios&&(c.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===a.macos&&(c.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===a.app.enabled&&(a.app.dir=`./dist/app/${a.app.folder}`,c.app={format:a.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:a.app.dir,terser:!0,output_exports:!1===a.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:a.app.dir})),!0===a.cli.enabled&&(a.cli.dir=`./dist/cli/${a.cli.folder}`,c.cli={format:a.cli.format,context:"global",babel:!0===a.src_uses_jsx||!0===a.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:a.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===a.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${K.normalize(a.app.dir||".")}`,files:[K.normalize("./dist/**/*")],cors:!0,open:!1};a.babel_options=J({targets:{browsers:"last 9 versions, not dead",node:"18"}},a.babel_options||a.babel?.options),a.browsersync_options=J(p,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=J({},a.replace_options||a.replace?.options||{}),a.terser_options=J({},a.terser_options||a.terser?.options||{}),a.css_options=J({},a.css_options||a.css?.options||{}),a.wasm_options=J({},a.wasm_options||a.wasm?.options||{}),a.copy_options=J(l,a.copy_options||a.copy?.options||{}),a.json_options=J({},a.json_options||a.json?.options||{}),a.image_options=J({},a.image_options||a.image?.options||{}),a.analyzer_options=J({summaryOnly:!0,limit:12},a.analyzer_options||a.analyzer?.options||{}),a.visualizer_options=J({},a.visualizer_options||a.visualizer?.options||{}),a.string_options=J({},a.string_options||a.string?.options||{}),a.nunjucks_options=J({},a.nunjucks_options||a.nunjucks?.options||{}),Reflect.has(a.browsersync_options,"proxy")&&delete a.browsersync_options.server,a.rollup=a.rollup||{},a.rollup_output=J(c,a.rollup_output||a.rollup?.output||{}),a.string_enabled=!0===a.string||a.string&&!1!==a.string?.enabled,a.preact_enabled=!0===a.preact||a.preact&&!1!==a.preact?.enabled;const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==a.rollup[e]?(!0===a.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||a.babel_options,t.browsersync_options=J(a.browsersync_options,t.browsersync_options),t.replace_options=J(a.replace_options,t.replace_options),t.terser_options=J(a.terser_options,t.terser_options),t.css_options=J(a.css_options,t.css_options),t.wasm_options=J(a.wasm_options,t.wasm_options),t.copy_options=J(a.copy_options,t.copy_options),t.json_options=J(a.json_options,t.json_options),t.image_options=J(a.image_options,t.image_options),t.analyzer_options=J(a.analyzer_options,t.analyzer_options),t.visualizer_options=J(a.visualizer_options,t.visualizer_options),t.string_options=J(a.string_options,t.string_options),t.string=a.string_enabled&&t.string,t.nunjucks_options=J(a.nunjucks_options,t.nunjucks_options),a.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),a.form_enabled&&(t.babel=!0)):t.enabled=!1)}a.babel_enabled=d.some((e=>!0===a.rollup_output[e].babel)),a.browser_enabled=d.some((e=>!0===a.rollup_output[e].babel)),a.browsersync_enabled=!1!==a.browsersync&&d.some((e=>!0===a.rollup_output[e].browsersync)),a.browsersync_enabled=a.browsersync_enabled&&a.app.enabled,a.wasm_enabled=!0===a.wasm||a.wasm&&!1!==a.wasm?.enabled,a.css_enabled=!0===a.css||a.css&&!1!==a.css?.enabled,a.json_enabled=!0===a.json||a.json&&!1!==a.json?.enabled,a.terser_enabled=!1!==a.terser,a.copy_enabled=a.app.enabled||a.copy_enabled||a.copy&&!1!==a.copy?.enabled,a.image_enabled=!0===a.image||a.image&&!1!==a.image?.enabled,a.analyzer_enabled=!0===a.analyzer||a.analyzer&&!1!==a.analyzer?.enabled,a.visualizer_enabled=!0===a.visualizer||a.visualizer&&!1!==a.visualizer?.enabled,a.dependency_auto_enabled=!1!==a.dependency_auto&&!1!==a.dependency_auto?.enabled,a.npm_install_flags=a.npm_install_flags||"",a.react_version=a.react_version||a.react?.version||18,a.polyfill_enabled=!0===a.polyfill||a.polyfill&&!1!==a.polyfill?.enabled,a.nunjucks_enabled=!0===a.nunjucks||a.nunjucks&&!1!==a.nunjucks?.enabled},ya=async({atom:e,packageDependencies:t,packageDevDependencies:a})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";a=`^${(await X({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"yargs",version:"^17"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.19"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&t.push({package:"@flownet/lib-render-templates-dir",version:"0.1.17"}),a.push({package:"@babel/core",version:"^7"}),a.push({package:"@rollup/plugin-commonjs",version:"^26"}),a.push({package:"@rollup/plugin-node-resolve",version:"^15"}),a.push({package:"@rollup/plugin-replace",version:"^5"}),a.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&a.push({package:"rollup-plugin-dts",version:"^6"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),a.push({package:"@rollup/plugin-alias",version:"^5"}),a.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6"}),a.push({package:"@babel/preset-env",version:"^7"}),a.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.plugins?.forEach((e=>{switch(e[0]){case"proposal-decorators":a.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"proposal-class-properties":a.push({package:"@babel/plugin-proposal-class-properties",version:"^7"})}}))),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.nunjucks_enabled&&a.push({package:"@fnet/rollup-plugin-nunjucks",version:"0.1.3"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.4"}),e.doc.features.json_enabled&&a.push({package:"@rollup/plugin-json",version:"^6"}),e.doc.features.terser_enabled&&a.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&a.push({package:"@rollup/plugin-wasm",version:"^6"}),e.doc.features.image_enabled&&a.push({package:"@rollup/plugin-image",version:"^3"}),e.doc.features.analyzer_enabled&&a.push({package:"rollup-plugin-analyzer",version:"^3"}),e.doc.features.visualizer_enabled&&a.push({package:"rollup-plugin-visualizer",version:"^5"}),e.doc.features.string_enabled&&a.push({package:"rollup-plugin-string",version:"^3"}),e.doc.features.css_enabled){a.push({package:"rollup-plugin-postcss",version:"^4"}),a.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":a.push({package:"postcss-import",version:"^15"});break;case"postcss-url":a.push({package:"postcss-url",version:"^10"});break;case"postcss-preset-env":a.push({package:"postcss-preset-env",version:"^9"});break;case"autoprefixer":a.push({package:"autoprefixer",version:"^10"});break;case"cssnano":a.push({package:"cssnano",version:"^6"})}}))}e.doc.features.polyfill_enabled&&a.push({package:"rollup-plugin-node-polyfills",version:"^0.2"}),e.doc.features.copy_enabled&&(a.push({package:"rollup-plugin-copy",version:"^3"}),a.push({package:"chokidar",version:"^3"}))},ha=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const s={atom:e,packageDependencies:o,ts:Date.now()},n=a.templateDir,r=Z.resolve(a.projectDir,"src/app");Y.existsSync(r)||Y.mkdirSync(r,{recursive:!0}),await Q({pattern:["index.html.njk","index.js.njk"],dir:Z.resolve(n,"src/app"),outDir:r,context:s})},wa=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:s})=>{await s({message:"Creating package.json."});a.filter((e=>!0===e.dev)).forEach((e=>{o.find((t=>t.package===e.package))||o.push(e);const t=a.findIndex((t=>t.package===e.package));a.splice(t,1)}));const n=a.find((e=>"react"===e.package)),r=a.find((e=>"react-dom"===e.package));n&&!r?a.push({package:"react-dom",version:n.version}):n&&r&&(r.version=n.version),n&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const i=[];!0===e.doc.features.app.enabled&&i.push({file:te.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&i.push({file:te.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of i){const s=t.file;if(!ee.existsSync(s))throw new Error(`App file not found: ${s}`);const n=await ae({file:s,recursive:!0}),r=!0===e.doc.features.all_parsed_imports?n.all:n.required;for await(const e of r){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const s=(await oe({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?o:a).push({package:e.package,subpath:e.subpath,version:`^${s}`,type:"npm"})}}const c={atom:e,packageDependencies:a,packageDevDependencies:o},l=t.templateCommonDir,p=V.compile(ee.readFileSync(te.resolve(l,"package.json.njk"),"utf8"),V.configure(l)).render(c),d=t.projectDir,m=te.resolve(d,"package.json");ee.writeFileSync(m,p,"utf8")},ba=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const s={atom:e,packageDependencies:o},n=a.templateDir,r=ne.resolve(a.projectDir,"src/cli");se.existsSync(r)||se.mkdirSync(r,{recursive:!0}),await re({pattern:["index.js.njk"],dir:ne.resolve(n,"src/cli"),outDir:r,context:s})},_a=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},n=ce.resolve(a.projectDir,"src","default/index.js");if(!ie.existsSync(n))throw new Error(`Entry file not found: ${n}`);const r=(await pe({file:n,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),i=e.doc.features.rollup_output,c=Object.keys(i);for(let e=0;e<c.length;e++){const t=i[c[e]];if(!0===t.browser&&r.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(r.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<r.length;e++){const a=r[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(r)}}const l=a.templateCommonDir;let p=le.compile(ie.readFileSync(ce.resolve(l,"rollup.config.mjs.njk"),"utf8"),le.configure(l)).render(s);const d=a.projectDir;let m=ce.resolve(d,"rollup.config.mjs");ie.writeFileSync(m,p,"utf8")},va=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let s={};const n=e.doc.inputs||[],r=[],i=e.doc.input;if(i?s=await ge({schema:i}):n.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&r.push(e);const t={};Reflect.has(e,"type")&&(t.type=e.type),Reflect.has(e,"default")&&(t.default=e.default),Reflect.has(e,"choices")&&(t.choices=e.choices),(Reflect.has(e,"describe")||Reflect.has(e,"description"))&&(t.describe=e.describe||e.description),Reflect.has(e,"alias")&&(t.alias=e.alias),Reflect.has(e,"required")&&!0===e.required&&(t.required=!0),Reflect.has(e,"hidden")&&!0===e.hidden&&(t.hidden=!0),Reflect.has(e,"array")&&!0===e.array&&(t.array=!0),Reflect.has(e,"normalize")&&!0===e.normalize&&(t.normalize=!0),Reflect.has(e,"nargs")&&(t.nargs=e.nargs),s[e.name]=t})),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const t=e.doc.features.cli.fargs,a={type:"string",describe:"Config name to load args",hidden:!1},o={type:"array",describe:"Tags to filter the config",hidden:!1};Reflect.has(t,"default")&&(a.default=t.default),(Reflect.has(t,"describe")||Reflect.has(t,"description"))&&(a.describe=t.describe||t.description),Reflect.has(t,"choices")&&(a.choices=t.choices),s.fargs=a,s.ftag=o}const c={options:s,imports:r,atom:e},l=a.templateDir,p=ue.compile(de.readFileSync(me.resolve(l,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=a.projectDir,m=me.resolve(d,"src/default/to.args.js");de.writeFileSync(m,p,"utf8")},ja=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},n=a.templateCommonDir,r=he.compile(fe.readFileSync(ye.resolve(n,".gitignore.njk"),"utf8"),he.configure(n)).render(s),i=a.projectDir,c=ye.resolve(i,".gitignore");fe.writeFileSync(c,r,"utf8")},xa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const s={atom:e,packageDependencies:o},n=a.templateCommonDir,r=_e.compile(we.readFileSync(be.resolve(n,"tsconfig.json.njk"),"utf8"),_e.configure(n)).render(s),i=a.projectDir,c=be.resolve(i,"tsconfig.json");we.writeFileSync(c,r,"utf8")},ka=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const s="readme.md",n=`Creating ${s}`;if(await a({message:n}),t.project?.readme){const e={content:t.project.readme.doc.content},a=t.templateCommonDir,o=ve.compile(je.readFileSync(xe.resolve(a,`${s}.njk`),"utf8"),ve.configure(a)).render(e),n=t.projectDir,r=xe.resolve(n,`${s}`);je.writeFileSync(r,o,"utf8")}else if(e.id){const a=await o.first({type:"wiki",parent_id:e.id});if(!a||"markdown"!==a.doc?.["content-type"])return;const{content:n,...r}=a.doc,i={content:n},c=t.templateCommonDir,l=ve.compile(je.readFileSync(xe.resolve(c,`${s}.njk`),"utf8"),ve.configure(c)).render(i),p=t.projectDir,d=xe.resolve(p,`${s}`);je.writeFileSync(d,l,"utf8")}},Da=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=De.join("src","**","*");if(0!==ke.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},Aa=async({atom:e,setInProgress:t,context:a})=>{if(!e.doc.features.dts_enabled)return;const o=a.projectDir;await t({message:"Creating .d.ts"});if(0!==Ae.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},Sa=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==Se.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},Pa=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==Pe.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},Ia=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:s,setInProgress:n,deploymentProject:r,yamlTarget:i}=e;if(!0===s.enabled)if("lib"===s.name)await Xt({...e});else if("red"===s.name)await Ht({...e});else if("npm"===s.name)await Gt({...e});else if("gcs"===s.name)await Kt({...e});else if("gitlab"===s.name)await Wt({...e});else if("fnet-package"===s.name)await aa({...e});else if("fnet-form"===s.name)await oa({...e});else if("fnet-node"===s.name)await na({...e});else if("fnet-flow"===s.name)await sa({...e});else{let e;if("nextjs"===s.name?e=ea:"webos"===s.name?e=Vt:"electron"===s.name?e=Qt:"docker"===s.name?e=ta:"ios"===s.name?e=Yt:"macos"===s.name?e=Zt:"rust"===s.name&&(e=ra),!e)return;await e({atom:t,target:s,onProgress:n,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:i}),r.isDirty=!0}},{Atom:Ea}=y,Ta=M,$a=t,Oa=_,Ca=F,Ra=q;var Ma=class{#e;#t;#a;#o;#s;#n;#r;#i;#c;#l;#p;#d;#m;#u;#g;#f;#y;constructor(e){this.#e=new ga,this.#t=e,this.#n=[],this.#r=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#n,packageDevDependencies:this.#r,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Ea,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,a){this._redis_client&&await this._redis_client.SETEX(e,a||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await ma(),this.#c=this.#t.buildId||ua(24),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#g=["all","deploy","build"].includes(this.#m),this.#f=["all","deploy"].includes(this.#m),this.#p=this.#t.protocol,this.#l="BUILD:"+this.#c,this.#d=(await $a({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await fa(this.#y),await ya(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#i=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#i)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await Ea.get({id:e});let t=this.#a.doc.bundleName;t=t||(this.#a.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#a.doc.bundleName=t,this.#a.type=this.#a.type||"workflow.lib",this.#y.atom=this.#a}async initLibraryDir(){const e=this.#t.projectDir;let t;const a=["node_modules"];ia.existsSync(e)&&ia.readdirSync(e).forEach((o=>{a.includes(o)||(t=pa.rm("-rf",ca.join(e,o)))}));let o=e;if(!ia.existsSync(o)&&(t=pa.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=ca.join(e,"src"),!ia.existsSync(o)&&(t=pa.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=ca.join(e,"src","default"),!ia.existsSync()&&(t=pa.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=da.configure(e,{watch:!1,dev:!0}),this.#y.njEnv=this.#o}async initLibs(){const e=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id}];this.#s=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#n})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],s=await this.findAtomLibrary({url:o.name});o.atom=s;const n=s.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));n?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=Ta({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#p),"ac:"===t.protocol){const a=t.pathname.split("/");if(1===a.length)return await Ea.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await Ea.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Ea.first({where:{name:a[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===t.protocol){const e=this.#a;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=ca.resolve(this.#t.projectSrcDir,"index.js"),a=await Oa({file:t,recursive:!0}),o=e.doc.dependencies,s=!0===this.#a.doc.features.all_parsed_imports?a.all:a.required;for await(const e of s){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await Ca({name:e.package,count:1});o.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:e}){await this.setInProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const t=e.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const a=t[e].atom,o=this.#t.projectDir;if("local:"===a.protocol){const e=ca.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=ca.relative(ca.join(this.#t.projectDir,"src","default"),e);if(!ia.existsSync(e)){ia.mkdirSync(ca.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",ia.writeFileSync(e,t,"utf8")}a.relativePath=t.split(ca.sep).join("/"),this.#a.typesDir=`./types/${ca.basename(o)}/src`}else{const e=ca.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;ia.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#s.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},t=this.#t.templateDir,a=da.compile(ia.readFileSync(ca.resolve(t,ca.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=ca.resolve(o,ca.join("src","default","index.js"));ia.writeFileSync(s,a,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:a,...o}=this.#a.doc,s={content:la.stringify(o)},n=this.#t.templateDir,r=da.compile(ia.readFileSync(ca.resolve(n,`${e}.njk`),"utf8"),this.#o).render(s),i=this.#t.projectDir,c=ca.resolve(i,`${e}`);ia.writeFileSync(c,r,"utf8")}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&await a.save()}}else if(this.#a.id){const e=await Ea.list({type:"library.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&(a=await Ea.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:a}=t,o=a.get("targets")||[],s=t.doc.targets||[];for(let e=0;e<s.length;e++){const a=s[e],n=o.items[e];await Ia({...this.#y,deploymentProject:t,deploymentProjectTarget:a,yamlTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await Ea.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await Ea.update(o,{id:o.id})):o=await Ea.create({parent_id:this.#d.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:a.version}]}})}async setInProgress({message:e}){console.log(Ra.blue(e)),await this._cache_set(this.#l,{status:"IN_PROGRESS",message:e})}async build(){try{this.#u&&(await this.createAtomLibFiles({libs:this.#s}),await this.createEngine(),await this.createProjectYaml(),await ka(this.#y),await xa(this.#y),await ja(this.#y),await va(this.#y),await ba(this.#y),await ha(this.#y),await _a(this.#y),await wa(this.#y),await Da(this.#y),await Aa(this.#y),this.#g&&(await Sa(this.#y),await Pa(this.#y),this.#f&&await this.deploy())),await this._cache_set(this.#l,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e.message||e}),console.log(e),e}}};const Fa=p,qa=d;var La=function({baseDir:e=__dirname}){let t=e;for(;t!==qa.parse(t).root;){const e=qa.join(t,"node_modules");if(Fa.existsSync(e))return e;t=qa.dirname(t)}return null};const Na=process.cwd(),{spawn:Ua}=e;t({name:["redis"],dir:Na,optional:!0});const za=a,Ba=o,Ja=s,Wa=n,Ka=r,Ga=i,Ha=t,Xa=c,Ya=l,Za=Ma,Qa=La({baseDir:__dirname}),Va="win32"===process.platform?";":":";process.env.PATH=`${za.join(Qa,"/.bin")}${Va}${process.env.PATH}`;let eo=Ba(process.argv.slice(2)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0}).option("vscode",{type:"boolean",default:!0,alias:"vs"})),(async e=>{try{const t=za.resolve(Qa,"@fnet/cli-project-node/dist/template/project"),a=za.resolve(Na,e.name);Ja.existsSync(a)||Ja.mkdirSync(a),await Ya({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=Ka.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Ka.which("git")&&(o=Ka.exec("git init --initial-branch=main",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(Ka.which("code")&&e.vscode&&(o=Ka.exec(`cd ${a} && code .`),0!==o.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=za.resolve(Qa,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=za.basename(a),e.update){if(await Ya({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==Ka.exec("fnode build",{cwd:a}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await ao(e),a=new Za(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await ao({...e,mode:"all"}),a=new Za(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await ao({...e,mode:"file"}),a=new Za(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function to(e,{name:t,bin:a,preArgs:o=[]}){return e.command(`${t||a} [commands..]`,`${a} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ao(e),{projectDir:s}=t,n=process.argv.slice(3);Ua(a,[...o,...n],{cwd:s,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function ao(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:za.resolve(Qa,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:za.resolve(Qa,"./@fnet/cli-project-common/dist/template/default"),projectDir:za.resolve(Na,`./.output/${e.id}`),tags:e.ftag};{const t=await async function({tags:e}){const t=za.resolve(Na,"node.yaml");if(!Ja.existsSync(t))throw new Error("node.yaml file not found in current directory.");const{raw:a,parsed:o}=await Ga({file:t,tags:e}),s=za.dirname(t),n={libraryAtom:{doc:{...o},fileName:"index"},projectDir:s,projectFilePath:t,projectFileContent:a,projectFileParsed:o};let r=za.resolve(s,"fnet/targets.yaml");if(!Ja.existsSync(r)&&(r=za.resolve(s,"node.devops.yaml"),Ja.existsSync(r))){const e=za.resolve(s,"fnet");Ja.existsSync(e)||Ja.mkdirSync(e),Ja.copyFileSync(r,za.resolve(s,"fnet/targets.yaml")),Ja.unlinkSync(r)}if(Ja.existsSync(r)){const{raw:t,parsed:a}=await Ga({file:r,tags:e}),o=Wa.parseDocument(t);n.devops={filePath:r,fileContent:t,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{Ja.writeFileSync(n.devops.filePath,o.toString())}}}const i=za.resolve(s,"readme.md");if(Ja.existsSync(i)){const e=Ja.readFileSync(i,"utf8");n.readme={filePath:i,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return n}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:za.resolve(Qa,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:za.resolve(Qa,"./@fnet/cli-project-common/dist/template/default"),projectDir:za.resolve(t.projectDir,"./.workspace"),projectSrcDir:za.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}eo=eo.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await ao(e),{project:a}=t,{projectDir:o,projectFileParsed:s}=a,n=s.input;if(!n)throw new Error("Config schema not found in project file.");const r=await Xa({schema:n,format:"yaml"}),i=za.resolve(o,".fnet");Ja.existsSync(i)||Ja.mkdirSync(i);const c=za.resolve(i,`${e.name}.fnet`);Ja.writeFileSync(c,r)}catch(e){console.error(e.message),process.exit(1)}})),eo=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await ao(e),{project:a}=t,{projectDir:o,projectFileParsed:s}=a,n=s.input;if(!n)throw new Error("Config schema not found in project file.");const r=za.resolve(o,".fnet"),i=za.resolve(r,`${e.name}.fnet`),c=await Xa({schema:n,format:"yaml",ref:i});Ja.existsSync(r)||Ja.mkdirSync(r),Ja.writeFileSync(i,c)}catch(e){console.error(e.message),process.exit(1)}}))}(eo),eo=to(eo,{bin:"npm"}),eo=to(eo,{bin:"node"}),eo=to(eo,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),eo=to(eo,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),eo=to(eo,{name:"app",bin:"npm",preArgs:["run","app","--"]}),eo=to(eo,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),eo=to(eo,{bin:"npx"}),eo=to(eo,{bin:"cdk"}),eo=to(eo,{bin:"aws"}),eo=function(e,{name:t,preArgs:a=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await ao(e),{projectDir:o}=t,s=e.config,n=await Ha({name:s,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),r=n?.data?.env||void 0,i=e.command,c=process.argv.slice(5);Ua(i,[...a,...c],{cwd:o,stdio:"inherit",shell:!0,env:{...process.env,...r}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(eo,{name:"with"}),eo.demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
|
package/dist/builder/wf-cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("child_process"),t=require("@fnet/config"),n=require("path"),o=require("yargs/yargs"),i=require("fs"),a=require("yaml"),s=require("shelljs"),r=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),f=require("nunjucks"),m=require("lodash.clonedeep"),u=require("isobject"),g=require("redis"),h=require("@flownet/lib-is-redis-online"),w=require("nanoid"),y=require("@flownet/lib-atom-api-js"),v=require("axios"),b=require("qs"),x=require("lodash.merge"),_=require("@flownet/lib-parse-imports-js"),k=require("@flownet/lib-list-npm-versions"),j=require("@fnet/yargs-options-from-schema"),D=require("@fnet/shell"),P=require("semver"),S=require("node:os"),A=require("@node-red/util"),T=require("@flownet/lib-to-ios-app"),E=require("@flownet/lib-to-macos-app"),$=require("@flownet/lib-to-electron"),I=require("@flownet/lib-to-webos"),O=require("@flownet/lib-to-nextjs"),C=require("@flownet/lib-to-docker"),N=require("form-data"),M=require("@fnet/to-rust"),R=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-bpmn-from-flow"),q=require("@fnet/expression"),U=require("chalk"),L=require("lodash.pick"),B=require("lodash.omit");const z=g,J=h;const{Api:W}=y,K=v.default,G=b;const H=x,V=p,X=d,Y=_;function Z({dir:e,name:t="index"}){let n=X.resolve(e,`./${t}.tsx`);if(V.existsSync(n)||(n=X.resolve(e,`./${t}.ts`)),V.existsSync(n)||(n=X.resolve(e,`./${t}.jsx`)),V.existsSync(n)||(n=X.resolve(e,`./${t}.js`)),!V.existsSync(n))return{};const o=n,i=X.extname(n);return{file:o,ext:i,ts:".ts"===i||".tsx"===i,name:t}}const Q=k;const ee=p,te=d,ne=l;const oe=f,ie=p,ae=d,se=_,re=k;const ce=p,le=d,pe=l;const de=p,fe=d,me=f,ue=_;const ge=p,he=d,we=f,ye=j;const ve=p,be=d,xe=f;const _e=p,ke=d,je=f;const De=f,Pe=p,Se=d;const Ae=s,Te=n;const Ee=s;const $e=s;const Ie=s;const Oe=D,Ce=t;const Ne=p,Me=d,Re=P,Fe=D,qe=t;const Ue=p,Le=d,Be=P,ze=s,Je=t;const We=p,Ke=d,Ge=S,He=f,Ve=A,Xe=t;const Ye=i,Ze=n,Qe=t;const et=t,tt=T,nt=m,ot=P;const it=t,at=E,st=m,rt=P;const ct=t,lt=$,pt=m,dt=P;const ft=t,mt=I,ut=m,gt=P;const ht=t,wt=O,yt=m,vt=P;const bt=t,xt=C,_t=m,kt=P;const jt=p,Dt=d,Pt=P,St=D,At=t,Tt=v.default;const Et=P,$t=t,It=v.default;const Ot=P,Ct=t,Nt=v.default,Mt=i,Rt=D,Ft=N;const qt=P,Ut=t,Lt=v.default,Bt=i,zt=D,Jt=N;const Wt=t,Kt=M,Gt=m,Ht=P;const Vt=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const a=t.projectDir;let s="fnet-to-gitlab";const r=o.params.config||"gitlab",c=await Ce({name:r,dir:t.projectDir,tags:t.tags});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;s+=` --projectGroupId=${l.projectGroupId}`,s+=` --projectPath='${a}'`,s+=` --projectName='${o.params.name}'`,s+=` --projectBranch='${o.params.branch||"main"}'`,s+=` --gitlabHost='${l.gitlabHost}'`,s+=` --gitlabToken='${l.gitlabToken}'`,s+=` --gitlabUsername='${l.gitlabUsername}'`,s+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await Oe({cmd:s}),n.isDirty=!0)},Xt=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,registerToPackageManager:i,yamlTarget:a})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,r=Me.resolve(s,"package.json"),c=Ne.readFileSync(r),l=JSON.parse(c);l.name=o.params.name,l.version=Re.inc(o.params.version,"patch"),delete l.scripts,delete l.devDependencies,Ne.writeFileSync(r,JSON.stringify(l,null,"\t"));const{file:p,data:d}=await qe({name:o.config||"gcs",dir:t.projectDir,tags:t.tags});let f="fnet-files-to-gcs";f+=` --projectId='${d.env.GCS_PROJECT_ID}'`,f+=` --bucketName='${d.env.GCS_BUCKET_NAME}'`,f+=` --keyFilename='${Me.resolve(Me.dirname(p),d.env.GCS_UPLOADER_KEY_FILE)}'`,f+=` --dir='${s}'`,f+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",f+=` --destDir='${l.name}/${l.version}'`,f+=" --metadata.cacheControl='public, max-age=31536000, immutable'",d.env.DOMAIN&&(f+=` --domain='${d.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(f+=" --dryRun"),await Fe({cmd:f}),Ne.writeFileSync(r,c),!0!==o.dryRun&&(n.isDirty=!0,o.params.version=l.version,a.get("params").set("version",l.version),await i({target:o,packageJSON:l}))},Yt=async({atom:e,setInProgress:t,context:n,deploymentProject:o,deploymentProjectTarget:i,yamlTarget:a})=>{await t({message:"Deploying it as npm package."});const s=n.projectDir,r=Le.resolve(s,"package.json"),c=Ue.readFileSync(r),l=JSON.parse(c);l.name=i.params.name,l.version=Be.inc(i.params.version,"patch");const p=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&p&&"string"==typeof p&&(l.bin={[p]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete l.scripts,delete l.devDependencies,l.scripts={serve:"npx serve ."},Ue.writeFileSync(r,JSON.stringify(l,null,"\t"));const d=(await Je({name:n.npmConfig||"npm",dir:n.projectDir,tags:n.tags}))?.data;if(Ue.writeFileSync(Le.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==ze.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");Ue.writeFileSync(r,c),o.isDirty=!0,i.params.version=l.version,a.get("params").set("version",l.version)},Zt=async({atom:e,setInProgress:t,context:n,deploymentProject:o,deploymentProjectTarget:i,buildId:a,packageDependencies:s,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=n.projectDir,l=n.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Ve.util.generateId(),label:`${p}/${e.id?e.id:Ge.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Ve.util.generateId(),name:e.doc.name,initialize:{content:We.readFileSync(Ke.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Ve.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Ve.util.generateId()}}};else if("cronjob"===i.deploy.template){let t=i.params?.schedules?cloneDeep(i.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Ve.util.generateId(),label:`${p}/${e.id?e.id:Ge.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Ve.util.generateId(),name:e.doc.name,initialize:{content:We.readFileSync(Ke.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Ve.util.generateId(),schedules:t},debug:{id:Ve.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Ve.util.generateId(),label:`${p}/${e.id?e.id:Ge.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Ve.util.generateId(),name:e.doc.name,initialize:{content:We.readFileSync(Ke.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Ve.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Ve.util.generateId()},debug:{id:Ve.util.generateId()}}}}let f=He.compile(We.readFileSync(Ke.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(We.writeFileSync(Ke.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;o.isDirty=!0;const m=(await Xe({name:n.redConfig||"red",dir:n.projectDir,tags:n.tags}))?.data,u=i.deploy.url||m.env.RED_URL,g={};if(!1!==i.deploy.auth&&(g.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:g}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:f,headers:g});else{const e=await axios({method:"POST",url:`${u}/flow`,data:f,headers:g});i.deploy.id=e.data.id}},Qt=async({atom:e,Atom:t,setInProgress:n,context:o,packageDependencies:i,deploymentProject:a,deploymentProjectTarget:s})=>{await n({message:"Deploying it as workflow lib."});const r=(await Qe({name:"atom",dir:o.projectDir,tags:o.tags}))?.data;let c,l,p,d=s.deploy.name.split("/");if(1===d.length)l=r.env.ATOM_LIBRARIES_ID,p=s.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:r.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===s.dryRun)return;if(a.isDirty=!0,s.deploy.id){if(c=await t.get({id:s.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;s.deploy.id=c.id}const f=o.projectDir;c.doc.contents=[{content:Ye.readFileSync(Ze.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Ye.readFileSync(Ze.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Ye.readFileSync(Ze.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=i,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},en=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as ios-app package."});const r=t?.config?await et({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=ot.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=nt(t.params);l.dependencies=nt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await tt(p)}},tn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as macos-app package."});const r=t?.config?await it({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=rt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=st(t.params);l.dependencies=st(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await at(p)}},nn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as electron package."});const r=t?.config?await ct({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=dt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=pt(t.params);l.dependencies=pt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await lt(p)}},on=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as webos package."});const r=t?.config?await ft({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=gt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=ut(t.params);l.dependencies=ut(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await mt(p)}},an=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as nextjs package."});const r=t?.config?await ht({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=vt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=yt(t.params);l.dependencies=yt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await wt(p)}},sn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as docker package."});const r=t?.config?await bt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=kt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=_t(t.params);l.dependencies=_t(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await xt(p)}},rn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet package."});const a=t.projectDir,s=Dt.resolve(a,"package.json"),r=jt.readFileSync(s),c=JSON.parse(r);c.name=o.params.name,c.version=Pt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,jt.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await At({name:o.config||"fnet-package",dir:t.projectDir,tags:t.tags});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const d=`${p.env.ATOM_API_URL}/v1/auth/token`,f=p.env.ATOM_API_USERNAME,m=p.env.ATOM_API_PASSWORD;let u=await Tt({method:"POST",url:d,data:{username:f,password:m},headers:{"Content-Type":"application/json"}});const g=u.data?.access_token;if(!g)throw new Error(`Invalid access_token from ${d}`);let h="fnet-files-to-gcs";if(h+=` --projectId='${p.env.GCS_PROJECT_ID}'`,h+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,h+=` --keyFilename='${Dt.resolve(Dt.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,h+=` --dir='${a}'`,h+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",h+=` --destDir='${c.name}/${c.version}'`,h+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(h+=` --domain='${p.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(h+=" --dryRun"),await St({cmd:h}),jt.writeFileSync(s,r),!0===o.dryRun)return;n.isDirty=!0,o.params.version=c.version,i.get("params").set("version",c.version);const w=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(u=await Tt({method:"POST",url:w,data:{name:c.name,version:c.version,version_domain:p.env.DOMAIN,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${g}`}}),u.data?.error)throw new Error("Failed to publish fnet package.")},cn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet form."});const a=Et.inc(o.params.version,"patch"),{file:s,data:r}=await $t({name:o.config||"fnet-form",dir:t.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const c=`${r.env.ATOM_API_URL}/v1/auth/token`,l=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let d=await It({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const f=d.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${c}`);n.isDirty=!0,o.params.version=a,i.get("params").set("version",a);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(d=await It({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),d.data?.error)throw new Error("Error publishing fnet form.")},ln=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet flow."});const a=Ot.inc(o.params.version,"patch"),{file:s,data:r}=await Ct({name:o.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const c=`${r.env.ATOM_API_URL}/v1/auth/token`,l=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let d=await Nt({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const f=d.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${c}`);n.isDirty=!0,o.params.version=a,i.get("params").set("version",a);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(d=await Nt({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),d.data?.error)throw new Error("Error publishing fnet flow.");const u=d.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const h=await Rt({cmd:g});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Ft;y.append("file",Mt.createReadStream(w));const v=await Nt.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...y.getHeaders(),Authorization:`Bearer ${f}`},data:y});if(v.data?.error)throw new Error("Error uploading fnet flow.")},pn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet node."});const a=qt.inc(o.params.version,"patch"),{file:s,data:r}=await Ut({name:o.config||"fnet-node",dir:t.project.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const c=`${r.env.ATOM_API_URL}/v1/auth/token`,l=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let d=await Lt({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const f=d.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${c}`);n.isDirty=!0,o.params.version=a,i.get("params").set("version",a);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(d=await Lt({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),d.data?.error)throw new Error("Error publishing fnet node.");const u=d.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const h=await zt({cmd:g});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Jt;y.append("file",Bt.createReadStream(w));const v=await Lt.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...y.getHeaders(),Authorization:`Bearer ${f}`},data:y});if(v.data?.error)throw new Error("Error uploading fnet node.")},dn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as Rust package."});const r=t?.config?await Wt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Ht.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=Gt(t.params);l.dependencies=Gt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Kt(p)}};const fn=m;async function mn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||fn(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||fn(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await o(t.definition.condition));await t({node:e}),n({node:e})}var un={hits:async function({node:e}){if(!e.definition.hasOwnProperty("switch"))return!1;const t=e.definition.switch||[];if(!t.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===t.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const n=t.filter((e=>e.hasOwnProperty("default")));if(n.length>1)throw new Error("Switch must have only one default");if(1===n.length&&!t[t.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");return!0},init:async function({node:e,initNode:t}){e.type="switch",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let n=0;n<e.definition.switch.length;n++){let o=e.definition.switch[n],i=`${n}`;o.hasOwnProperty("default")&&(i="default",o=o.default);const a={name:o.condition||i,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=mn},resolve:mn};const gn=q,hn=un;var wn={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>gn({expression:e}))))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,n=Object.keys(t.definition),o=await Promise.all(n.map((e=>gn({expression:e})))),i=[],a=o.find((e=>"if"===e?.processor)),s=t.definition[a.expression];i.push({name:`${t.name}_if`,definition:s,processor:a}),delete t.definition[a.expression];const r=o.filter((e=>"elseif"===e?.processor));let c=0;for(const e of r){const n=t.definition[e.expression];i.push({name:`${t.name}_elseif_${c++}`,definition:n,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of i)t.definition.switch.push({condition:e.processor.statement,...e.definition});await hn.init(e)}};const yn=m;async function vn({node:e,resolveTypeCommon:t,resolveNextBlock:n}){if(e.context.transform=e.context.transform||yn(e.definition),e.context.transform,e.context.try=e.childs.find((e=>"try"===e.name)),e.context.except=e.childs.find((e=>"except"===e.name)),e.context.except){const t=e.context.except;t.context.transform=t.context.transform||yn(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),n({node:e})}var bn={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:t}){if(e.type="tryexcept",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const n="try",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}if(e.definition.except){const n="except",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}e.resolve=vn},resolve:vn};const xn=m;async function _n({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=xn(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],n=Object.keys(t)[0],a=t[n],s={key:await o(n),value:await o(a)};i.assign[e]=s}await t({node:e}),n({node:e})}var kn={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=_n},resolve:_n};const jn=m,Dn=L,Pn=B;async function Sn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||jn(e.definition);e.context.transform.for.in=await o(e.definition.for.in),await t({node:e}),n({node:e})}var An={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[n,o]=[Dn(e.definition.for,t),Pn(e.definition.for,t)];e.definition.for=n,e.definition.for.steps=[{[`${e.name}_step`]:o}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let n=0;n<e.definition.for.steps.length;n++){const o=e.definition.for.steps[n],i=Object.keys(o)[0],a={name:i,childs:[],parent:e,definition:o[i],index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=Sn},resolve:Sn};var Tn={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){}};const En=m;async function $n({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||En(e.definition);const o=e.context.transform;o.raise=await n(o.raise),await t({node:e})}var In={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=$n},resolve:$n};const On=m;async function Cn({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||On(e.definition);const o=e.context.transform;o.return=await n(o.return),await t({node:e})}var Nn={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=Cn},resolve:Cn};const Mn=m;async function Rn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Mn(e.definition);const i=e.context.transform;i.args&&(i.args=await o(i.args)),i.result&&(i.result=await o(i.result));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.call)),await t({node:e}),n({node:e})}var Fn={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call";for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],i=Object.keys(o)[0],a={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=Rn},resolve:Rn};const qn=Fn;var Un={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(e){const{node:t}=e,n="shell",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/shell",o.args="string"===i?{...o.args,cmd:o[n]}:o[n],delete o[n],await qn.init(e)}};const Ln=Fn;var Bn={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(e){const{node:t}=e,n="config",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/config",o.args="string"===i?{...o.args,name:o[n]}:o[n],delete o[n],await Ln.init(e)}};const zn=Fn;var Jn={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(e){const{node:t}=e,n="yaml",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/yaml",o.args="string"===i?{...o.args,file:o[n]}:o[n],delete o[n],await zn.init(e)}};async function Wn({node:e}){e.context.next=e.childs[0]}var Kn={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const n=e.definition.steps||[];for await(const o of n){const n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=Wn},resolve:Wn};const Gn=m;async function Hn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Gn(e.definition);const i=e.context.transform;i.props&&(i.props=await o(i.props));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.form)),await t({node:e}),n({node:e})}var Vn={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form";for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],i=Object.keys(o)[0],a={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=Hn},resolve:Hn};const Xn=m;async function Yn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){e.context.transform=e.context.transform||Xn(e.definition),await t({node:e})}var Zn={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Yn},resolve:Yn};const Qn=m;async function eo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Qn(e.definition);const i=e.context.transform;i.next=await o(i.next),await t({node:e}),n({node:e})}var to={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=eo},resolve:eo};const no=Fn;var oo={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,n="prompt",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/prompt",o.args="string"===i?{...o.args,message:o[n]}:o[n],delete o[n],await no.init(e)}};const io=Fn;var ao={hits:async function({node:e}){return e.definition.hasOwnProperty("html-script")},init:async function(e){const{node:t}=e,n="html-script",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@flownet/lib-load-browser-script-url",o.args="string"===i?{...o.args,src:o[n]}:o[n],delete o[n],await io.init(e)}};const so=Fn;var ro={hits:async function({node:e}){return e.definition.hasOwnProperty("html-link")},init:async function(e){const{node:t}=e,n="html-link",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@flownet/lib-load-browser-link-url",o.args="string"===i?{...o.args,src:o[n]}:o[n],delete o[n],await so.init(e)}};const co=p,lo=d,po=a,fo=s,mo=f,uo=m,go=u,ho=async()=>{if(!await J({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=z.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:wo}=w,yo=class{init({config:e,accessToken:t}){return new Promise(((n,o)=>{if(W.set_api_url(e.data.url),t)return W.set_req_token(t),void n(t);K({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:G.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{W.set_req_token(e.data.access_token),n(e.data.access_token)})).catch((e=>{W.set_req_token(),o(e)}))}))}},vo=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const n=e.doc.features;n.project=n.project||{},n.project.format=n.project.format||n.project_format||"esm",n.project_format=n.project.format,n.dts_enabled=!0===n.dts||void 0!==n.dts&&!1!==n.dts,n.hasOwnProperty("all_parsed_imports")||(n.all_parsed_imports=!0);const o=X.resolve(t.project.projectDir),i=Z({dir:X.resolve(o,"./app")});if(i.file){let e=await Y({file:i.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));n.app_uses_jsx=t,n.app_has_entry=!0,e=await Y({file:i.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),n.app_entry_uses_jsx=t,n.app_entry_is_ts=i.ts,n.app_entry_ext=i.ext}const a=Z({dir:X.resolve(o,"./cli")});if(a.file){let e=await Y({file:a.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));n.cli_uses_jsx=t,n.cli_has_entry=!0,e=await Y({file:a.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),n.cli_entry_uses_jsx=t,n.cli_entry_is_ts=a.ts,n.cli_entry_ext=a.ext}if("workflow.lib"===e.type){const e=Z({dir:X.resolve(o,"./src")});if(e.file){let t=await Y({file:e.file,recursive:!0}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));n.src_uses_jsx=o,n.src_has_entry=!0,t=await Y({file:e.file}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),n.src_entry_uses_jsx=o,n.src_entry_is_ts=e.ts,n.src_entry_ext=e.ext}}const s=!0===n.app_entry_uses_jsx,r=!0===n.cli_entry_uses_jsx;n.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===n.form||!0===n.form?.enabled,n.multiple_enabled=n.multiple_enabled||!0===n.multiple||!0===n.multiple?.enabled,!1===n.app?n.app={enabled:!1}:!0===n.app?n.app={enabled:!0,extend:!0===n.app_has_entry,export:!0,react:s}:n.app={enabled:!0,extend:!0===n.app_has_entry,export:!0,react:s,...n.app||{}},n.app.enabled=!0===n.app.enabled&&(!0===e.doc.features.form_enabled||!0===n.app.extend||!0===n.app.enabled),n.app.format=n.app.format||"esm",n.app.folder=n.app.folder||n.app.format||"default",!1===n.cli?n.cli={enabled:!1}:!0===n.cli?n.cli={enabled:!0,extend:!0===n.cli_has_entry,export:!0,react:r}:n.cli={enabled:!0,extend:!0===n.cli_has_entry,export:!0,react:r,...n.cli||{}},n.cli.enabled=!0===n.cli.enabled&&(!1===e.doc.features.form_enabled||!0===n.cli.extend||!0===n.cli.enabled),n.cli.format=n.cli.format||"esm",n.cli.folder=n.cli.folder||n.cli.folder||"esm",n.cli.node_options=n.cli.node?.options||n.cli.node_options||"";const c={cjs:{format:"cjs",context:n.form_enabled?"window":"global",babel:!0===n.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!0,string:!0},cjsx:{format:"cjs",context:n.form_enabled?"window":"global",babel:!0===n.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:n.form_enabled?"window":"global",babel:!0===n.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0,string:!0},esmx:{format:"esm",browser:!0,babel:!0,context:n.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:n.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==n.iife,terser:!0,string:!0},umd:{format:"umd",context:n.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0}},l={};!0===n.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",babel_options:{targets:{chrome:"79"}}}),!0===n.electron&&(c.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===n.nextjs&&(c.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===n.ios&&(c.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===n.macos&&(c.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===n.app.enabled&&(n.app.dir=`./dist/app/${n.app.folder}`,c.app={format:n.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:n.app.dir,terser:!0,output_exports:!1===n.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:n.app.dir})),!0===n.cli.enabled&&(n.cli.dir=`./dist/cli/${n.cli.folder}`,c.cli={format:n.cli.format,context:"global",babel:!0===n.src_uses_jsx||!0===n.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:n.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===n.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${X.normalize(n.app.dir||".")}`,files:[X.normalize("./dist/**/*")],cors:!0,open:!1};n.babel_options=H({targets:{browsers:"last 9 versions, not dead",node:"18"}},n.babel_options||n.babel?.options),n.browsersync_options=H(p,n.browsersync_options||n.browsersync?.options||{}),n.replace_options=H({},n.replace_options||n.replace?.options||{}),n.terser_options=H({},n.terser_options||n.terser?.options||{}),n.css_options=H({},n.css_options||n.css?.options||{}),n.wasm_options=H({},n.wasm_options||n.wasm?.options||{}),n.copy_options=H(l,n.copy_options||n.copy?.options||{}),n.json_options=H({},n.json_options||n.json?.options||{}),n.image_options=H({},n.image_options||n.image?.options||{}),n.analyzer_options=H({summaryOnly:!0,limit:12},n.analyzer_options||n.analyzer?.options||{}),n.visualizer_options=H({},n.visualizer_options||n.visualizer?.options||{}),n.string_options=H({},n.string_options||n.string?.options||{}),n.nunjucks_options=H({},n.nunjucks_options||n.nunjucks?.options||{}),Reflect.has(n.browsersync_options,"proxy")&&delete n.browsersync_options.server,n.rollup=n.rollup||{},n.rollup_output=H(c,n.rollup_output||n.rollup?.output||{}),n.string_enabled=!0===n.string||n.string&&!1!==n.string?.enabled,n.preact_enabled=!0===n.preact||n.preact&&!1!==n.preact?.enabled;const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==n.rollup[e]?(!0===n.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||n.babel_options,t.browsersync_options=H(n.browsersync_options,t.browsersync_options),t.replace_options=H(n.replace_options,t.replace_options),t.terser_options=H(n.terser_options,t.terser_options),t.css_options=H(n.css_options,t.css_options),t.wasm_options=H(n.wasm_options,t.wasm_options),t.copy_options=H(n.copy_options,t.copy_options),t.json_options=H(n.json_options,t.json_options),t.image_options=H(n.image_options,t.image_options),t.analyzer_options=H(n.analyzer_options,t.analyzer_options),t.visualizer_options=H(n.visualizer_options,t.visualizer_options),t.string_options=H(n.string_options,t.string_options),t.string=n.string_enabled&&t.string,t.nunjucks_options=H(n.nunjucks_options,t.nunjucks_options),n.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),n.form_enabled&&(t.babel=!0)):t.enabled=!1)}n.babel_enabled=d.some((e=>!0===n.rollup_output[e].babel)),n.browser_enabled=d.some((e=>!0===n.rollup_output[e].babel)),n.browsersync_enabled=!1!==n.browsersync&&d.some((e=>!0===n.rollup_output[e].browsersync)),n.browsersync_enabled=n.browsersync_enabled&&n.app.enabled,n.wasm_enabled=!0===n.wasm||n.wasm&&!1!==n.wasm?.enabled,n.css_enabled=!0===n.css||n.css&&!1!==n.css?.enabled,n.json_enabled=!0===n.json||n.json&&!1!==n.json?.enabled,n.terser_enabled=!1!==n.terser,n.copy_enabled=n.app.enabled||n.copy_enabled||n.copy&&!1!==n.copy?.enabled,n.image_enabled=!0===n.image||n.image&&!1!==n.image?.enabled,n.analyzer_enabled=!0===n.analyzer||n.analyzer&&!1!==n.analyzer?.enabled,n.visualizer_enabled=!0===n.visualizer||n.visualizer&&!1!==n.visualizer?.enabled,n.dependency_auto_enabled=!1!==n.dependency_auto&&!1!==n.dependency_auto?.enabled,n.npm_install_flags=n.npm_install_flags||"",n.react_version=n.react_version||n.react?.version||18,n.polyfill_enabled=!0===n.polyfill||n.polyfill&&!1!==n.polyfill?.enabled,n.nunjucks_enabled=!0===n.nunjucks||n.nunjucks&&!1!==n.nunjucks?.enabled},bo=async({atom:e,packageDependencies:t,packageDevDependencies:n})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let n="^18.2";n=`^${(await Q({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:n}),t.push({package:"react-dom",version:n}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"yargs",version:"^17"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.19"})),n.push({package:"@babel/core",version:"^7"}),n.push({package:"@rollup/plugin-commonjs",version:"^26"}),n.push({package:"@rollup/plugin-node-resolve",version:"^15"}),n.push({package:"@rollup/plugin-replace",version:"^5"}),n.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&n.push({package:"rollup-plugin-dts",version:"^6"}),n.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),n.push({package:"@rollup/plugin-alias",version:"^5"}),n.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(n.push({package:"@rollup/plugin-babel",version:"^6"}),n.push({package:"@babel/preset-env",version:"^7"}),n.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.plugins?.forEach((e=>{switch(e[0]){case"proposal-decorators":n.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"proposal-class-properties":n.push({package:"@babel/plugin-proposal-class-properties",version:"^7"})}}))),n.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.nunjucks_enabled&&n.push({package:"@fnet/rollup-plugin-nunjucks",version:"0.1.3"}),e.doc.features.browsersync_enabled&&n.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.4"}),e.doc.features.json_enabled&&n.push({package:"@rollup/plugin-json",version:"^6"}),e.doc.features.terser_enabled&&n.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&n.push({package:"@rollup/plugin-wasm",version:"^6"}),e.doc.features.image_enabled&&n.push({package:"@rollup/plugin-image",version:"^3"}),e.doc.features.analyzer_enabled&&n.push({package:"rollup-plugin-analyzer",version:"^3"}),e.doc.features.visualizer_enabled&&n.push({package:"rollup-plugin-visualizer",version:"^5"}),e.doc.features.string_enabled&&n.push({package:"rollup-plugin-string",version:"^3"}),e.doc.features.css_enabled){n.push({package:"rollup-plugin-postcss",version:"^4"}),n.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":n.push({package:"postcss-import",version:"^15"});break;case"postcss-url":n.push({package:"postcss-url",version:"^10"});break;case"postcss-preset-env":n.push({package:"postcss-preset-env",version:"^9"});break;case"autoprefixer":n.push({package:"autoprefixer",version:"^10"});break;case"cssnano":n.push({package:"cssnano",version:"^6"})}}))}e.doc.features.polyfill_enabled&&n.push({package:"rollup-plugin-node-polyfills",version:"^0.2"}),e.doc.features.copy_enabled&&(n.push({package:"rollup-plugin-copy",version:"^3"}),n.push({package:"chokidar",version:"^3"}))},xo=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const i={atom:e,packageDependencies:o,ts:Date.now()},a=n.templateDir,s=te.resolve(n.projectDir,"src/app");ee.existsSync(s)||ee.mkdirSync(s,{recursive:!0}),await ne({pattern:["index.html.njk","index.js.njk"],dir:te.resolve(a,"src/app"),outDir:s,context:i})},_o=async({atom:e,context:t,packageDependencies:n,packageDevDependencies:o,setInProgress:i})=>{await i({message:"Creating package.json."});n.filter((e=>!0===e.dev)).forEach((e=>{o.find((t=>t.package===e.package))||o.push(e);const t=n.findIndex((t=>t.package===e.package));n.splice(t,1)}));const a=n.find((e=>"react"===e.package)),s=n.find((e=>"react-dom"===e.package));a&&!s?n.push({package:"react-dom",version:a.version}):a&&s&&(s.version=a.version),a&&e.doc.features.react_version>=17&&(n.find((e=>"@emotion/react"===e.package))||n.push({package:"@emotion/react",version:"^11"}),n.find((e=>"@emotion/styled"===e.package))||n.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push({file:ae.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&r.push({file:ae.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of r){const i=t.file;if(!ie.existsSync(i))throw new Error(`App file not found: ${i}`);const a=await se({file:i,recursive:!0}),s=!0===e.doc.features.all_parsed_imports?a.all:a.required;for await(const e of s){if("npm"!==e.type)continue;if(n.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const i=(await re({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?o:n).push({package:e.package,subpath:e.subpath,version:`^${i}`,type:"npm"})}}const c={atom:e,packageDependencies:n,packageDevDependencies:o},l=t.templateCommonDir,p=oe.compile(ie.readFileSync(ae.resolve(l,"package.json.njk"),"utf8"),oe.configure(l)).render(c),d=t.projectDir,f=ae.resolve(d,"package.json");ie.writeFileSync(f,p,"utf8")},ko=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={atom:e,packageDependencies:o},a=n.templateDir,s=le.resolve(n.projectDir,"src/cli");ce.existsSync(s)||ce.mkdirSync(s,{recursive:!0}),await pe({pattern:["index.js.njk"],dir:le.resolve(a,"src/cli"),outDir:s,context:i})},jo=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:o},a=fe.resolve(n.projectDir,"src","default/index.js");if(!de.existsSync(a))throw new Error(`Entry file not found: ${a}`);const s=(await ue({file:a,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&s.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(s.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<s.length;e++){const n=s[e];t.alias.entries[n]=`node:${n}`,t.alias.entries[`node:${n}`]=n}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(s)}}const l=n.templateCommonDir;let p=me.compile(de.readFileSync(fe.resolve(l,"rollup.config.mjs.njk"),"utf8"),me.configure(l)).render(i);const d=n.projectDir;let f=fe.resolve(d,"rollup.config.mjs");de.writeFileSync(f,p,"utf8")},Do=async({atom:e,setInProgress:t,context:n,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let i={};const a=e.doc.inputs||[],s=[],r=e.doc.input;if(r?i=await ye({schema:r}):a.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&s.push(e);const t={};Reflect.has(e,"type")&&(t.type=e.type),Reflect.has(e,"default")&&(t.default=e.default),Reflect.has(e,"choices")&&(t.choices=e.choices),(Reflect.has(e,"describe")||Reflect.has(e,"description"))&&(t.describe=e.describe||e.description),Reflect.has(e,"alias")&&(t.alias=e.alias),Reflect.has(e,"required")&&!0===e.required&&(t.required=!0),Reflect.has(e,"hidden")&&!0===e.hidden&&(t.hidden=!0),Reflect.has(e,"array")&&!0===e.array&&(t.array=!0),Reflect.has(e,"normalize")&&!0===e.normalize&&(t.normalize=!0),Reflect.has(e,"nargs")&&(t.nargs=e.nargs),i[e.name]=t})),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const t=e.doc.features.cli.fargs,n={type:"string",describe:"Config name to load args",hidden:!1},o={type:"array",describe:"Tags to filter the config",hidden:!1};Reflect.has(t,"default")&&(n.default=t.default),(Reflect.has(t,"describe")||Reflect.has(t,"description"))&&(n.describe=t.describe||t.description),Reflect.has(t,"choices")&&(n.choices=t.choices),i.fargs=n,i.ftag=o}const c={options:i,imports:s,atom:e},l=n.templateDir,p=we.compile(ge.readFileSync(he.resolve(l,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=n.projectDir,f=he.resolve(d,"src/default/to.args.js");ge.writeFileSync(f,p,"utf8")},Po=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:o},a=n.templateCommonDir,s=xe.compile(ve.readFileSync(be.resolve(a,".gitignore.njk"),"utf8"),xe.configure(a)).render(i),r=n.projectDir,c=be.resolve(r,".gitignore");ve.writeFileSync(c,s,"utf8")},So=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:o},a=n.templateCommonDir,s=je.compile(_e.readFileSync(ke.resolve(a,"tsconfig.json.njk"),"utf8"),je.configure(a)).render(i),r=n.projectDir,c=ke.resolve(r,"tsconfig.json");_e.writeFileSync(c,s,"utf8")},Ao=async({atom:e,context:t,setInProgress:n,Atom:o})=>{const i="readme.md",a=`Creating ${i}`;if(await n({message:a}),t.project?.readme){const e={content:t.project.readme.doc.content},n=t.templateCommonDir,o=De.compile(Pe.readFileSync(Se.resolve(n,`${i}.njk`),"utf8"),De.configure(n)).render(e),a=t.projectDir,s=Se.resolve(a,`${i}`);Pe.writeFileSync(s,o,"utf8")}else if(e.id){const n=await o.first({type:"wiki",parent_id:e.id});if(!n||"markdown"!==n.doc?.["content-type"])return;const{content:a,...s}=n.doc,r={content:a},c=t.templateCommonDir,l=De.compile(Pe.readFileSync(Se.resolve(c,`${i}.njk`),"utf8"),De.configure(c)).render(r),p=t.projectDir,d=Se.resolve(p,`${i}`);Pe.writeFileSync(d,l,"utf8")}},To=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Prettifiying source files."});let o=Te.join("src","**","*");if(0!==Ae.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n}).code)throw new Error("Couldnt format files.")},Eo=async({atom:e,setInProgress:t,context:n})=>{if(!e.doc.features.dts_enabled)return;const o=n.projectDir;await t({message:"Creating .d.ts"});if(0!==Ee.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},$o=async({setInProgress:e,atom:t,context:n})=>{const o=n.projectDir;await e({message:"Installing npm packages."});if(0!==$e.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},Io=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Building main project."});if(0!==Ie.exec("npm run build",{cwd:n}).code)throw new Error("Couldnt build project.")},Oo=async e=>{const{atom:t,packageDependencies:n,context:o,deploymentProjectTarget:i,setInProgress:a,deploymentProject:s,yamlTarget:r}=e;if(!0===i.enabled)if("lib"===i.name)await Qt({...e});else if("red"===i.name)await Zt({...e});else if("npm"===i.name)await Yt({...e});else if("gcs"===i.name)await Xt({...e});else if("gitlab"===i.name)await Vt({...e});else if("fnet-package"===i.name)await rn({...e});else if("fnet-form"===i.name)await cn({...e});else if("fnet-node"===i.name)await pn({...e});else if("fnet-flow"===i.name)await ln({...e});else{let e;if("nextjs"===i.name?e=an:"webos"===i.name?e=on:"electron"===i.name?e=nn:"docker"===i.name?e=sn:"ios"===i.name?e=en:"macos"===i.name?e=tn:"rust"===i.name&&(e=dn),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),s.isDirty=!0}},{Atom:Co}=y,No=R,Mo=k,Ro=F,Fo=t,qo=_,Uo=q,Lo=r,Bo=U,zo=wn,Jo=bn,Wo=kn,Ko=An,Go=un,Ho=Tn,Vo=In,Xo=Nn,Yo=Fn,Zo=Un,Qo=Bn,ei=Jn,ti=Kn,ni=Vn,oi=Zn,ii=to,ai=oo,si=ao,ri=ro,ci=({node:e})=>{const t=e.definition;if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let n=e.parent;for(;n.parent;){const o=n.childs.find((e=>e.name===t.next));if(o){e.context.next=o;break}n=n.parent}}else{let t=e.parent,n=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(void 0!==t.blockAutoJumpToParent||void 0!==t.blockAutoJumpToSibling){if(t.blockAutoJumpToParent){const o=t.childs.find((e=>e.index===n));o&&(e.context.next=o);break}t.blockAutoJumpToParent||(n=t.index+1,t=t.parent)}else{const o=t.childs.find((e=>e.index===n));if(o){e.context.next=o;break}n=t.index+1,t=t.parent}}};var li=class{#e;#t;#n;#o;#i;#a;#s;#r;#c;#l;#p;#d;#f;#m;#u;#g;#h;#w;#y;#v;#b;constructor(e){this.#e=new yo,this.#t=e,this.#a=[],this.#s=[],this.#r={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#v={packageDependencies:this.#a,packageDevDependencies:this.#s,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Co,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#b={initNode:this.initNode.bind(this),cloneDeep:uo,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:ci,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,n){this._redis_client&&await this._redis_client.SETEX(e,n||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await ho(),this.#p=this.#t.buildId||wo(24),this.#v.buildId=this.#p,this.#u=this.#t.mode,this.#g=["all","deploy","build","file"].includes(this.#u),this.#h=["all","deploy","build"].includes(this.#u),this.#w=["all","deploy"].includes(this.#u),this.#y=["all","deploy","build","file","bpmn"].includes(this.#u),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#m=(await Fo({optional:!0,name:"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await vo(this.#v),await bo(this.#v),await this.transformWorkflow({workflow:this.#o});const e=await this.initNodeTree({workflow:this.#o});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#a}),await this.resolveNodeTree({root:e}),this.#l=e}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#c=await this.#e.init({config:this.#m}),this.#v.atomAccessToken=this.#c)}async initWorkflow(){const e=this.#t.id;this.#n=this.#t.project?.workflowAtom||await Co.get({id:e}),this.#o="string"==typeof this.#n.doc.content?(await Lo({content:this.#n.doc.content})).parsed:this.#n.doc.content;let t=this.#n.doc.bundleName;t=t||(this.#n.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#n.doc.bundleName=t,this.#n.type=this.#n.type||"workflow",this.#v.atom=this.#n}async initDependencies(){this.#a.push({package:"get-value",version:"^3.0"}),this.#a.push({package:"set-value",version:"^4.1"}),this.#n.doc.features.form_enabled?(this.#a.push({package:"react",version:"^18.2"}),this.#a.push({package:"react-dom",version:"^18.2"}),this.#a.push({package:"@flownet/react-app",version:"^0.1"}),this.#a.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#a.push({package:"yargs",version:"^17"}),this.#a.push({package:"chalk",version:"^4"})}#x(e){console.log("filePath",e),co.statSync(e).isDirectory()?(co.readdirSync(e).forEach((t=>{const n=lo.join(e,t);this.#x(n)})),co.rmSync(e)):co.unlinkSync(e)}#_(e,t){const n=co.existsSync(e),o=n&&co.statSync(e);n&&o.isDirectory()?(co.mkdirSync(t,{recursive:!0}),co.readdirSync(e).forEach((n=>{this.#_(lo.join(e,n),lo.join(t,n))}))):co.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,n=["node_modules"];if(co.existsSync(e)){const t=co.readdirSync(e);for(const o of t)if(!n.includes(o)){const t=lo.join(e,o);co.rmSync(t,{recursive:!0})}}co.existsSync(e)||co.mkdirSync(e,{recursive:!0});const o=lo.join(e,"src");co.existsSync(o)||co.mkdirSync(o,{recursive:!0});const i=lo.join(o,"core");this.#_(t,i);const a=lo.join(o,"default","blocks");co.existsSync(a)||co.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=mo.configure(e,{watch:!1,dev:!0}),this.#v.njEnv=this.#i}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,n]=Object.entries(e)[0];if(n.hasOwnProperty("onerror")){const{onerror:o,...i}=n;e[t]={try:i,except:o}}if(e[t].hasOwnProperty("steps")){const n=e[t].steps;if(!Array.isArray(n))throw new Error("Steps must be an array.");e[t].steps=n.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),n={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#n}};t.forEach((t=>{const o={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:n,definition:e[t],index:n.childs.length,depth:n.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};n.childs.push(o)}));for await(const e of n.childs)await this.initNode({node:e});return n}async initNode({node:e}){const t={...this.#b,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await Jo.hits(t))await Jo.init(t);else if(await Ko.hits(t))await Ko.init(t);else if(await Go.hits(t))await Go.init(t);else if(await zo.hits(t))await zo.init(t);else if(await Ho.hits(t))await Ho.init(t);else if(await Wo.hits(t))await Wo.init(t);else if(await Vo.hits(t))await Vo.init(t);else if(await Xo.hits(t))await Xo.init(t);else if(await Yo.hits(t))await Yo.init(t);else if(await Zo.hits(t))await Zo.init(t);else if(await Qo.hits(t))await Qo.init(t);else if(await ei.hits(t))await ei.init(t);else if(await si.hits(t))await si.init(t);else if(await ri.hits(t))await ri.init(t);else if(await ni.hits(t))await ni.init(t);else if(await oi.hits(t))await oi.init(t);else if(await ai.hits(t))await ai.init(t);else if(await ti.hits(t))await ti.init(t);else{if(!await ii.hits(t))throw new Error("Undefined step type.");await ii.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const n of e.childs)await this.initNodeIndex({node:n,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const n=lo.join(e.parent.indexKey,e.name);e.indexKey=n,t[n]=e;const o=[];let i=e;for(;i?.parent;)o.push(i.index),i=i.parent;o.reverse(),e.codeKey=`B_${o.join("_")}_${e.type}`,e.pathKey=`${o.join(".")}`,e.typeId=wo(24);for await(const n of e.childs)await this.initNodeIndex({node:n,index:t})}async initNodeCalls({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"call"===o.type&&n.push(o)}return e.context.calls=n,n}async initNodeCallLibs({root:e}){const t=[],n=e.context.calls;for await(const e of n){const n=e.definition.call,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.call,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"form"===o.type&&n.push(o)}return e.context.forms=n,n}async initNodeFormLibs({root:e}){const t=[],n=e.context.forms;for await(const e of n){const n=e.definition.form,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.form,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const n=e.filter((e=>"atom"===e.type));for(let e=0;e<n.length;e++){const o=n[e],i=await this.findAtomLibrary({url:o.name});o.atom=i;const a=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));a?.forEach((e=>{const n=t.find((t=>t.package===e.package));n?"string"==typeof e.path?(n.path||[]).some((t=>t===e.path))||(n.path=n.path||[],n.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(n.path||[]).some((t=>t===e))||(n.path=n.path||[],n.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=No({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#f),"ac:"===t.protocol){const n=t.pathname.split("/");if(1===n.length)return await Co.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===n.length){const e=await Co.first({where:{name:n[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Co.first({where:{name:n[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=lo.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),n=[],o=await qo({file:e,recursive:!0}),i=!0===this.#n.doc.features.all_parsed_imports?o.all:o.required;for await(const e of i){if("npm"!==e.type)continue;if(n.find((t=>t.package===e.package)))continue;const t=(await Mo({name:e.package,groupBy:{minor:!0}}))[0][0];n.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:n},protocol:t.protocol}}if("npm:"===t.protocol){const e=(await Mo({name:t.pathname,groupBy:{minor:!0}}))[0][0];return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:[{package:t.pathname,version:`^${e}`,type:"npm"}]},protocol:t.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=uo(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const n=t.params[e];if("string"==typeof n)t.params[e]={key:n,hasDefault:!1};else{const o=Object.keys(n)[0];t.params[e]={key:o,hasDefault:!0,default:n[o]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#b,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:e}){await this.setInProgress({message:"Creating external lib files."}),this.#n.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const n=t[e].atom,o=this.#t.projectDir;if("local:"===n.protocol){const e=lo.resolve(this.#t.projectSrcDir,`${n.fileName||n.name}.js`),t=lo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!co.existsSync(e)){co.mkdirSync(lo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",co.writeFileSync(e,t,"utf8")}n.relativePath=t.split(lo.sep).join("/"),this.#n.typesDir=`./types/${lo.basename(o)}/src`}else if("npm:"===n.protocol)n.relativePath=n.name;else{const e=`${o}/src/libs/${n.id}.js`,t=n.doc.contents?.find((e=>"esm"===e.format))||n.doc;co.writeFileSync(lo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,n=mo.compile(co.readFileSync(lo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),o=this.#t.projectDir,i=lo.resolve(o,"src/default/index.js");co.writeFileSync(i,n,"utf8")}async createNodeTree({root:e}){await this.setInProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:e}){const t=this.#t.templateDir,n=mo.compile(co.readFileSync(lo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),o=this.#t.projectDir,i=lo.resolve(o,`src/default/${e.codeKey}.js`);co.writeFileSync(i,n,"utf8");for await(const t of e.childs)await this.createType({node:t})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:e}){let t=this.#r[e.type];if(t)return t;const n=this.#t.templateDir;return t=mo.compile(co.readFileSync(lo.resolve(n,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#i),this.#r[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,n=`${e.codeKey}.js`,o=lo.resolve(t,`src/default/blocks/${n}`);co.writeFileSync(o,e.context.render,"utf8"),e.context.fileName=n,e.context.filePath=o}async transformExpression(e){let t=await this.transformValue(e);return t=JSON.stringify(t),t=this.replaceSpecialPattern(t),t}async transformValue(e){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=await this.transformValue(e[t]);else if(go(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++)e[t[n]]=await this.transformValue(e[t[n]])}else if("string"==typeof e){const t=await Uo({expression:e});if(t){const{processor:n,statement:o}=t;switch(n){case"v":e=`$::v.${o}::`;break;case"e":e=`$::${o}::`;break;case"m":e=`$::closure.module['${o}']::`;break;case"f":e=`$::closure.form.${o}::`;break;case"for":e=`$::caller.for.${o}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const e="flow.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:n,...o}=this.#n.doc,i={content:po.stringify(o)},a=this.#t.templateDir,s=mo.compile(co.readFileSync(lo.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=lo.resolve(r,`${e}`);co.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const n={content:po.stringify(this.#o)},o=this.#t.templateDir,i=mo.compile(co.readFileSync(lo.resolve(o,`${e}.njk`),"utf8"),this.#i).render(n),a=this.#t.projectDir,s=lo.resolve(a,`${e}`);co.writeFileSync(s,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=fo.exec("prettier --write .",{cwd:lo.resolve(e,"src")});if(0!==t.code)throw new Error(t.stderr)}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&await n.save()}}else if(this.#n.id){const e=await Co.list({type:"workflow.deploy",parent_id:this.#n.id});for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&(n=await Co.update(n,{id:n.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:n}=t,o=n.get("targets")||[],i=t.doc.targets||[];for(let e=0;e<i.length;e++){const n=i[e],a=o.items[e];await Oo({...this.#v,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:a})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#t.id)return;let o=await Co.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await Co.update(o,{id:o.id})):o=await Co.create({parent_id:this.#m.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:n.version}]}})}async setInProgress({message:e}){console.log(Bo.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#y&&!this.#g)return await this.createNetwork();try{const e=this.#y?await Ro({root:this.#l}):void 0;if(this.#g){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#y){const t=this.#t.project?.projectDir||this.#t.projectDir;co.writeFileSync(lo.resolve(t,"./flow.bpmn"),e.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#l}),await this.createEngine({root:this.#l}),await this.createNodeTree({root:this.#l}),await this.createProjectYaml(),await this.createProjectMainYaml(),await Ao(this.#v),await So(this.#v),await Po(this.#v),await Do(this.#v),await ko(this.#v),await xo(this.#v),await jo(this.#v),await _o(this.#v),await To(this.#v),await Eo(this.#v),this.#h&&(await $o(this.#v),await Io(this.#v),this.#w&&await this.deploy())}await this._cache_set(this.#d,{status:"COMPLETED",data:{network:e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await Ro({root:this.#l});await this._cache_set(this.#d,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}};const pi=p,di=d;var fi=function({baseDir:e=__dirname}){let t=e;for(;t!==di.parse(t).root;){const e=di.join(t,"node_modules");if(pi.existsSync(e))return e;t=di.dirname(t)}return null};const mi=process.cwd(),{spawn:ui}=e;t({name:["redis"],dir:mi,optional:!0});const gi=n,hi=o,wi=i,yi=a,vi=s,bi=r,xi=t,_i=c,ki=l,ji=li,Di=fi({baseDir:__dirname}),Pi="win32"===process.platform?";":":";process.env.PATH=`${gi.join(Di,"/.bin")}${Pi}${process.env.PATH}`;let Si=hi(process.argv.slice(2)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"}).option("vscode",{type:"boolean",default:!0,alias:"vs"})),(async e=>{try{const t=gi.resolve(Di,"./@fnet/cli-project-flow/dist/template/project"),n=gi.resolve(mi,e.name);wi.existsSync(n)||wi.mkdirSync(n),await ki({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0});let o=vi.exec("fnet build",{cwd:n});if(0!==o.code)throw new Error("Failed to build project.");if(vi.which("git")&&(o=vi.exec("git init --initial-branch=main",{cwd:n}),0!==o.code))throw new Error("Failed to initialize git.");if(vi.which("code")&&e.vscode&&(o=vi.exec(`cd ${n} && code .`),0!==o.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=gi.resolve(Di,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd();if(e.name=gi.basename(n),e.update){if(await ki({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0}),0!==vi.exec("fnet build",{cwd:n}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await Ti(e),n=new ji(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Ti({...e,mode:"all"}),n=new ji(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Ti({...e,mode:"file"}),n=new ji(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function Ai(e,{name:t,bin:n,preArgs:o=[]}){return e.command(`${t||n} [commands..]`,`${n} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ti(e),{projectDir:i}=t,a=process.argv.slice(3);ui(n,[...o,...a],{cwd:i,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Ti(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:gi.resolve(mi,`./.output/${e.id}`),templateDir:gi.resolve(Di,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:gi.resolve(Di,"./@fnet/cli-project-common/dist/template/default"),coreDir:gi.resolve(Di,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=gi.resolve(mi,"flow.yaml");if(!wi.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const{raw:n,parsed:o}=await bi({file:t,tags:e}),i=gi.dirname(t),a=o.main||"flow.main.yaml";let s=gi.resolve(i,a);if(!wi.existsSync(s)&&(s=gi.resolve(i,a+".yaml"),!wi.existsSync(s)))throw new Error(`${a} file not found in ${s}.`);const{raw:r,parsed:c}=await bi({file:s,tags:e}),l={workflowAtom:{doc:{...o,"content-type":"yaml",content:r}},projectDir:i,projectFilePath:t,projectFileContent:n,projectFileParsed:o,projectMainFilePath:s,projectMainFileContent:r,projectMainFileParsed:c},p=gi.resolve(i,"flow.devops.yaml");if(wi.existsSync(p)){const{raw:t,parsed:n}=await bi({file:p,tags:e}),o=yi.parseDocument(t);l.devops={filePath:p,fileContent:t,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{wi.writeFileSync(l.devops.filePath,o.toString())}}}const d=gi.resolve(i,"readme.md");if(wi.existsSync(d)){const e=wi.readFileSync(d,"utf8");l.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:gi.resolve(Di,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:gi.resolve(Di,"./@fnet/cli-project-common/dist/template/default"),coreDir:gi.resolve(Di,"./@fnet/cli-project-flow/dist/template/core"),projectDir:gi.resolve(t.projectDir,"./.workspace"),projectSrcDir:gi.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}Si=Si.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Ti(e),{project:n}=t,{projectDir:o,projectFileParsed:i}=n,a=i.input;if(!a)throw new Error("Config schema not found in project file.");const s=await _i({schema:a,format:"yaml"}),r=gi.resolve(o,".fnet");wi.existsSync(r)||wi.mkdirSync(r);const c=gi.resolve(r,`${e.name}.fnet`);wi.writeFileSync(c,s)}catch(e){console.error(e.message),process.exit(1)}})),Si=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Ti(e),{project:n}=t,{projectDir:o,projectFileParsed:i}=n,a=i.input;if(!a)throw new Error("Config schema not found in project file.");const s=gi.resolve(o,".fnet"),r=gi.resolve(s,`${e.name}.fnet`),c=await _i({schema:a,format:"yaml",ref:r});wi.existsSync(s)||wi.mkdirSync(s),wi.writeFileSync(r,c)}catch(e){console.error(e.message),process.exit(1)}}))}(Si),Si=Ai(Si,{bin:"npm"}),Si=Ai(Si,{bin:"node"}),Si=Ai(Si,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Si=Ai(Si,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Si=Ai(Si,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Si=Ai(Si,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Si=Ai(Si,{bin:"npx"}),Si=Ai(Si,{bin:"cdk"}),Si=Ai(Si,{bin:"aws"}),Si=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Ti(e),{projectDir:o}=t,i=e.config,a=await xi({name:i,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),s=a?.data?.env||void 0,r=e.command,c=process.argv.slice(5);ui(r,[...n,...c],{cwd:o,stdio:"inherit",shell:!0,env:{...process.env,...s}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(Si,{name:"with"}),Si.demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
|
|
2
|
+
"use strict";var e=require("child_process"),t=require("@fnet/config"),n=require("path"),o=require("yargs/yargs"),i=require("fs"),a=require("yaml"),s=require("shelljs"),r=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),f=require("nunjucks"),m=require("lodash.clonedeep"),u=require("isobject"),g=require("redis"),h=require("@flownet/lib-is-redis-online"),w=require("nanoid"),y=require("@flownet/lib-atom-api-js"),v=require("axios"),b=require("qs"),x=require("lodash.merge"),_=require("@flownet/lib-parse-imports-js"),k=require("@flownet/lib-list-npm-versions"),j=require("@fnet/yargs-options-from-schema"),D=require("@fnet/shell"),P=require("semver"),S=require("node:os"),A=require("@node-red/util"),T=require("@flownet/lib-to-ios-app"),E=require("@flownet/lib-to-macos-app"),$=require("@flownet/lib-to-electron"),I=require("@flownet/lib-to-webos"),O=require("@flownet/lib-to-nextjs"),C=require("@flownet/lib-to-docker"),N=require("form-data"),M=require("@fnet/to-rust"),R=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-bpmn-from-flow"),q=require("@fnet/expression"),U=require("chalk"),L=require("lodash.pick"),B=require("lodash.omit");const z=g,J=h;const{Api:W}=y,K=v.default,G=b;const H=x,V=p,X=d,Y=_;function Z({dir:e,name:t="index"}){let n=X.resolve(e,`./${t}.tsx`);if(V.existsSync(n)||(n=X.resolve(e,`./${t}.ts`)),V.existsSync(n)||(n=X.resolve(e,`./${t}.jsx`)),V.existsSync(n)||(n=X.resolve(e,`./${t}.js`)),!V.existsSync(n))return{};const o=n,i=X.extname(n);return{file:o,ext:i,ts:".ts"===i||".tsx"===i,name:t}}const Q=k;const ee=p,te=d,ne=l;const oe=f,ie=p,ae=d,se=_,re=k;const ce=p,le=d,pe=l;const de=p,fe=d,me=f,ue=_;const ge=p,he=d,we=f,ye=j;const ve=p,be=d,xe=f;const _e=p,ke=d,je=f;const De=f,Pe=p,Se=d;const Ae=s,Te=n;const Ee=s;const $e=s;const Ie=s;const Oe=D,Ce=t;const Ne=p,Me=d,Re=P,Fe=D,qe=t;const Ue=p,Le=d,Be=P,ze=s,Je=t;const We=p,Ke=d,Ge=S,He=f,Ve=A,Xe=t;const Ye=i,Ze=n,Qe=t;const et=t,tt=T,nt=m,ot=P;const it=t,at=E,st=m,rt=P;const ct=t,lt=$,pt=m,dt=P;const ft=t,mt=I,ut=m,gt=P;const ht=t,wt=O,yt=m,vt=P;const bt=t,xt=C,_t=m,kt=P;const jt=p,Dt=d,Pt=P,St=D,At=t,Tt=v.default;const Et=P,$t=t,It=v.default;const Ot=P,Ct=t,Nt=v.default,Mt=i,Rt=D,Ft=N;const qt=P,Ut=t,Lt=v.default,Bt=i,zt=D,Jt=N;const Wt=t,Kt=M,Gt=m,Ht=P;const Vt=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const a=t.projectDir;let s="fnet-to-gitlab";const r=o.params.config||"gitlab",c=await Ce({name:r,dir:t.projectDir,tags:t.tags});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;s+=` --projectGroupId=${l.projectGroupId}`,s+=` --projectPath='${a}'`,s+=` --projectName='${o.params.name}'`,s+=` --projectBranch='${o.params.branch||"main"}'`,s+=` --gitlabHost='${l.gitlabHost}'`,s+=` --gitlabToken='${l.gitlabToken}'`,s+=` --gitlabUsername='${l.gitlabUsername}'`,s+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await Oe({cmd:s}),n.isDirty=!0)},Xt=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,registerToPackageManager:i,yamlTarget:a})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,r=Me.resolve(s,"package.json"),c=Ne.readFileSync(r),l=JSON.parse(c);l.name=o.params.name,l.version=Re.inc(o.params.version,"patch"),delete l.scripts,delete l.devDependencies,Ne.writeFileSync(r,JSON.stringify(l,null,"\t"));const{file:p,data:d}=await qe({name:o.config||"gcs",dir:t.projectDir,tags:t.tags});let f="fnet-files-to-gcs";f+=` --projectId='${d.env.GCS_PROJECT_ID}'`,f+=` --bucketName='${d.env.GCS_BUCKET_NAME}'`,f+=` --keyFilename='${Me.resolve(Me.dirname(p),d.env.GCS_UPLOADER_KEY_FILE)}'`,f+=` --dir='${s}'`,f+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",f+=` --destDir='${l.name}/${l.version}'`,f+=" --metadata.cacheControl='public, max-age=31536000, immutable'",d.env.DOMAIN&&(f+=` --domain='${d.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(f+=" --dryRun"),await Fe({cmd:f}),Ne.writeFileSync(r,c),!0!==o.dryRun&&(n.isDirty=!0,o.params.version=l.version,a.get("params").set("version",l.version),await i({target:o,packageJSON:l}))},Yt=async({atom:e,setInProgress:t,context:n,deploymentProject:o,deploymentProjectTarget:i,yamlTarget:a})=>{await t({message:"Deploying it as npm package."});const s=n.projectDir,r=Le.resolve(s,"package.json"),c=Ue.readFileSync(r),l=JSON.parse(c);l.name=i.params.name,l.version=Be.inc(i.params.version,"patch");const p=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&p&&"string"==typeof p&&(l.bin={[p]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete l.scripts,delete l.devDependencies,l.scripts={serve:"npx serve ."},Ue.writeFileSync(r,JSON.stringify(l,null,"\t"));const d=(await Je({name:n.npmConfig||"npm",dir:n.projectDir,tags:n.tags}))?.data;if(Ue.writeFileSync(Le.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==ze.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");Ue.writeFileSync(r,c),o.isDirty=!0,i.params.version=l.version,a.get("params").set("version",l.version)},Zt=async({atom:e,setInProgress:t,context:n,deploymentProject:o,deploymentProjectTarget:i,buildId:a,packageDependencies:s,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=n.projectDir,l=n.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Ve.util.generateId(),label:`${p}/${e.id?e.id:Ge.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Ve.util.generateId(),name:e.doc.name,initialize:{content:We.readFileSync(Ke.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Ve.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Ve.util.generateId()}}};else if("cronjob"===i.deploy.template){let t=i.params?.schedules?cloneDeep(i.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Ve.util.generateId(),label:`${p}/${e.id?e.id:Ge.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Ve.util.generateId(),name:e.doc.name,initialize:{content:We.readFileSync(Ke.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Ve.util.generateId(),schedules:t},debug:{id:Ve.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Ve.util.generateId(),label:`${p}/${e.id?e.id:Ge.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Ve.util.generateId(),name:e.doc.name,initialize:{content:We.readFileSync(Ke.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Ve.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Ve.util.generateId()},debug:{id:Ve.util.generateId()}}}}let f=He.compile(We.readFileSync(Ke.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(We.writeFileSync(Ke.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;o.isDirty=!0;const m=(await Xe({name:n.redConfig||"red",dir:n.projectDir,tags:n.tags}))?.data,u=i.deploy.url||m.env.RED_URL,g={};if(!1!==i.deploy.auth&&(g.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:g}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:f,headers:g});else{const e=await axios({method:"POST",url:`${u}/flow`,data:f,headers:g});i.deploy.id=e.data.id}},Qt=async({atom:e,Atom:t,setInProgress:n,context:o,packageDependencies:i,deploymentProject:a,deploymentProjectTarget:s})=>{await n({message:"Deploying it as workflow lib."});const r=(await Qe({name:"atom",dir:o.projectDir,tags:o.tags}))?.data;let c,l,p,d=s.deploy.name.split("/");if(1===d.length)l=r.env.ATOM_LIBRARIES_ID,p=s.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:r.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===s.dryRun)return;if(a.isDirty=!0,s.deploy.id){if(c=await t.get({id:s.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;s.deploy.id=c.id}const f=o.projectDir;c.doc.contents=[{content:Ye.readFileSync(Ze.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Ye.readFileSync(Ze.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Ye.readFileSync(Ze.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=i,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},en=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as ios-app package."});const r=t?.config?await et({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=ot.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=nt(t.params);l.dependencies=nt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await tt(p)}},tn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as macos-app package."});const r=t?.config?await it({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=rt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=st(t.params);l.dependencies=st(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await at(p)}},nn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as electron package."});const r=t?.config?await ct({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=dt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=pt(t.params);l.dependencies=pt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await lt(p)}},on=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as webos package."});const r=t?.config?await ft({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=gt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=ut(t.params);l.dependencies=ut(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await mt(p)}},an=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as nextjs package."});const r=t?.config?await ht({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=vt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=yt(t.params);l.dependencies=yt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await wt(p)}},sn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as docker package."});const r=t?.config?await bt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=kt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=_t(t.params);l.dependencies=_t(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await xt(p)}},rn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet package."});const a=t.projectDir,s=Dt.resolve(a,"package.json"),r=jt.readFileSync(s),c=JSON.parse(r);c.name=o.params.name,c.version=Pt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,jt.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await At({name:o.config||"fnet-package",dir:t.projectDir,tags:t.tags});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const d=`${p.env.ATOM_API_URL}/v1/auth/token`,f=p.env.ATOM_API_USERNAME,m=p.env.ATOM_API_PASSWORD;let u=await Tt({method:"POST",url:d,data:{username:f,password:m},headers:{"Content-Type":"application/json"}});const g=u.data?.access_token;if(!g)throw new Error(`Invalid access_token from ${d}`);let h="fnet-files-to-gcs";if(h+=` --projectId='${p.env.GCS_PROJECT_ID}'`,h+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,h+=` --keyFilename='${Dt.resolve(Dt.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,h+=` --dir='${a}'`,h+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",h+=` --destDir='${c.name}/${c.version}'`,h+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(h+=` --domain='${p.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(h+=" --dryRun"),await St({cmd:h}),jt.writeFileSync(s,r),!0===o.dryRun)return;n.isDirty=!0,o.params.version=c.version,i.get("params").set("version",c.version);const w=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(u=await Tt({method:"POST",url:w,data:{name:c.name,version:c.version,version_domain:p.env.DOMAIN,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${g}`}}),u.data?.error)throw new Error("Failed to publish fnet package.")},cn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet form."});const a=Et.inc(o.params.version,"patch"),{file:s,data:r}=await $t({name:o.config||"fnet-form",dir:t.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const c=`${r.env.ATOM_API_URL}/v1/auth/token`,l=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let d=await It({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const f=d.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${c}`);n.isDirty=!0,o.params.version=a,i.get("params").set("version",a);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(d=await It({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),d.data?.error)throw new Error("Error publishing fnet form.")},ln=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet flow."});const a=Ot.inc(o.params.version,"patch"),{file:s,data:r}=await Ct({name:o.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const c=`${r.env.ATOM_API_URL}/v1/auth/token`,l=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let d=await Nt({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const f=d.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${c}`);n.isDirty=!0,o.params.version=a,i.get("params").set("version",a);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(d=await Nt({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),d.data?.error)throw new Error("Error publishing fnet flow.");const u=d.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const h=await Rt({cmd:g});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Ft;y.append("file",Mt.createReadStream(w));const v=await Nt.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...y.getHeaders(),Authorization:`Bearer ${f}`},data:y});if(v.data?.error)throw new Error("Error uploading fnet flow.")},pn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet node."});const a=qt.inc(o.params.version,"patch"),{file:s,data:r}=await Ut({name:o.config||"fnet-node",dir:t.project.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const c=`${r.env.ATOM_API_URL}/v1/auth/token`,l=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let d=await Lt({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const f=d.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${c}`);n.isDirty=!0,o.params.version=a,i.get("params").set("version",a);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(d=await Lt({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),d.data?.error)throw new Error("Error publishing fnet node.");const u=d.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const h=await zt({cmd:g});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Jt;y.append("file",Bt.createReadStream(w));const v=await Lt.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...y.getHeaders(),Authorization:`Bearer ${f}`},data:y});if(v.data?.error)throw new Error("Error uploading fnet node.")},dn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as Rust package."});const r=t?.config?await Wt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Ht.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=Gt(t.params);l.dependencies=Gt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Kt(p)}};const fn=m;async function mn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||fn(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||fn(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await o(t.definition.condition));await t({node:e}),n({node:e})}var un={hits:async function({node:e}){if(!e.definition.hasOwnProperty("switch"))return!1;const t=e.definition.switch||[];if(!t.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===t.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const n=t.filter((e=>e.hasOwnProperty("default")));if(n.length>1)throw new Error("Switch must have only one default");if(1===n.length&&!t[t.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");return!0},init:async function({node:e,initNode:t}){e.type="switch",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let n=0;n<e.definition.switch.length;n++){let o=e.definition.switch[n],i=`${n}`;o.hasOwnProperty("default")&&(i="default",o=o.default);const a={name:o.condition||i,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=mn},resolve:mn};const gn=q,hn=un;var wn={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>gn({expression:e}))))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,n=Object.keys(t.definition),o=await Promise.all(n.map((e=>gn({expression:e})))),i=[],a=o.find((e=>"if"===e?.processor)),s=t.definition[a.expression];i.push({name:`${t.name}_if`,definition:s,processor:a}),delete t.definition[a.expression];const r=o.filter((e=>"elseif"===e?.processor));let c=0;for(const e of r){const n=t.definition[e.expression];i.push({name:`${t.name}_elseif_${c++}`,definition:n,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of i)t.definition.switch.push({condition:e.processor.statement,...e.definition});await hn.init(e)}};const yn=m;async function vn({node:e,resolveTypeCommon:t,resolveNextBlock:n}){if(e.context.transform=e.context.transform||yn(e.definition),e.context.transform,e.context.try=e.childs.find((e=>"try"===e.name)),e.context.except=e.childs.find((e=>"except"===e.name)),e.context.except){const t=e.context.except;t.context.transform=t.context.transform||yn(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),n({node:e})}var bn={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:t}){if(e.type="tryexcept",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const n="try",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}if(e.definition.except){const n="except",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}e.resolve=vn},resolve:vn};const xn=m;async function _n({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=xn(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],n=Object.keys(t)[0],a=t[n],s={key:await o(n),value:await o(a)};i.assign[e]=s}await t({node:e}),n({node:e})}var kn={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=_n},resolve:_n};const jn=m,Dn=L,Pn=B;async function Sn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||jn(e.definition);e.context.transform.for.in=await o(e.definition.for.in),await t({node:e}),n({node:e})}var An={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[n,o]=[Dn(e.definition.for,t),Pn(e.definition.for,t)];e.definition.for=n,e.definition.for.steps=[{[`${e.name}_step`]:o}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let n=0;n<e.definition.for.steps.length;n++){const o=e.definition.for.steps[n],i=Object.keys(o)[0],a={name:i,childs:[],parent:e,definition:o[i],index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=Sn},resolve:Sn};var Tn={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){}};const En=m;async function $n({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||En(e.definition);const o=e.context.transform;o.raise=await n(o.raise),await t({node:e})}var In={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=$n},resolve:$n};const On=m;async function Cn({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||On(e.definition);const o=e.context.transform;o.return=await n(o.return),await t({node:e})}var Nn={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=Cn},resolve:Cn};const Mn=m;async function Rn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Mn(e.definition);const i=e.context.transform;i.args&&(i.args=await o(i.args)),i.result&&(i.result=await o(i.result));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.call)),await t({node:e}),n({node:e})}var Fn={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call";for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],i=Object.keys(o)[0],a={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=Rn},resolve:Rn};const qn=Fn;var Un={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(e){const{node:t}=e,n="shell",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/shell",o.args="string"===i?{...o.args,cmd:o[n]}:o[n],delete o[n],await qn.init(e)}};const Ln=Fn;var Bn={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(e){const{node:t}=e,n="config",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/config",o.args="string"===i?{...o.args,name:o[n]}:o[n],delete o[n],await Ln.init(e)}};const zn=Fn;var Jn={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(e){const{node:t}=e,n="yaml",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/yaml",o.args="string"===i?{...o.args,file:o[n]}:o[n],delete o[n],await zn.init(e)}};async function Wn({node:e}){e.context.next=e.childs[0]}var Kn={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const n=e.definition.steps||[];for await(const o of n){const n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=Wn},resolve:Wn};const Gn=m;async function Hn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Gn(e.definition);const i=e.context.transform;i.props&&(i.props=await o(i.props));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.form)),await t({node:e}),n({node:e})}var Vn={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form";for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],i=Object.keys(o)[0],a={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=Hn},resolve:Hn};const Xn=m;async function Yn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){e.context.transform=e.context.transform||Xn(e.definition),await t({node:e})}var Zn={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Yn},resolve:Yn};const Qn=m;async function eo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Qn(e.definition);const i=e.context.transform;i.next=await o(i.next),await t({node:e}),n({node:e})}var to={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=eo},resolve:eo};const no=Fn;var oo={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,n="prompt",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/prompt",o.args="string"===i?{...o.args,message:o[n]}:o[n],delete o[n],await no.init(e)}};const io=Fn;var ao={hits:async function({node:e}){return e.definition.hasOwnProperty("html-script")},init:async function(e){const{node:t}=e,n="html-script",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@flownet/lib-load-browser-script-url",o.args="string"===i?{...o.args,src:o[n]}:o[n],delete o[n],await io.init(e)}};const so=Fn;var ro={hits:async function({node:e}){return e.definition.hasOwnProperty("html-link")},init:async function(e){const{node:t}=e,n="html-link",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@flownet/lib-load-browser-link-url",o.args="string"===i?{...o.args,src:o[n]}:o[n],delete o[n],await so.init(e)}};const co=p,lo=d,po=a,fo=s,mo=f,uo=m,go=u,ho=async()=>{if(!await J({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=z.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:wo}=w,yo=class{init({config:e,accessToken:t}){return new Promise(((n,o)=>{if(W.set_api_url(e.data.url),t)return W.set_req_token(t),void n(t);K({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:G.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{W.set_req_token(e.data.access_token),n(e.data.access_token)})).catch((e=>{W.set_req_token(),o(e)}))}))}},vo=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const n=e.doc.features;n.project=n.project||{},n.project.format=n.project.format||n.project_format||"esm",n.project_format=n.project.format,n.dts_enabled=!0===n.dts||void 0!==n.dts&&!1!==n.dts,n.hasOwnProperty("all_parsed_imports")||(n.all_parsed_imports=!0);const o=X.resolve(t.project.projectDir),i=Z({dir:X.resolve(o,"./app")});if(i.file){let e=await Y({file:i.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));n.app_uses_jsx=t,n.app_has_entry=!0,e=await Y({file:i.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),n.app_entry_uses_jsx=t,n.app_entry_is_ts=i.ts,n.app_entry_ext=i.ext}const a=Z({dir:X.resolve(o,"./cli")});if(a.file){let e=await Y({file:a.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));n.cli_uses_jsx=t,n.cli_has_entry=!0,e=await Y({file:a.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),n.cli_entry_uses_jsx=t,n.cli_entry_is_ts=a.ts,n.cli_entry_ext=a.ext}if("workflow.lib"===e.type){const e=Z({dir:X.resolve(o,"./src")});if(e.file){let t=await Y({file:e.file,recursive:!0}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));n.src_uses_jsx=o,n.src_has_entry=!0,t=await Y({file:e.file}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),n.src_entry_uses_jsx=o,n.src_entry_is_ts=e.ts,n.src_entry_ext=e.ext}}const s=!0===n.app_entry_uses_jsx,r=!0===n.cli_entry_uses_jsx;n.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===n.form||!0===n.form?.enabled,n.multiple_enabled=n.multiple_enabled||!0===n.multiple||!0===n.multiple?.enabled,!1===n.app?n.app={enabled:!1}:!0===n.app?n.app={enabled:!0,extend:!0===n.app_has_entry,export:!0,react:s}:n.app={enabled:!0,extend:!0===n.app_has_entry,export:!0,react:s,...n.app||{}},n.app.enabled=!0===n.app.enabled&&(!0===e.doc.features.form_enabled||!0===n.app.extend||!0===n.app.enabled),n.app.format=n.app.format||"esm",n.app.folder=n.app.folder||n.app.format||"default",!1===n.cli?n.cli={enabled:!1}:!0===n.cli?n.cli={enabled:!0,extend:!0===n.cli_has_entry,export:!0,react:r}:n.cli={enabled:!0,extend:!0===n.cli_has_entry,export:!0,react:r,...n.cli||{}},n.cli.enabled=!0===n.cli.enabled&&(!1===e.doc.features.form_enabled||!0===n.cli.extend||!0===n.cli.enabled),n.cli.format=n.cli.format||"esm",n.cli.folder=n.cli.folder||n.cli.folder||"esm",n.cli.node_options=n.cli.node?.options||n.cli.node_options||"";const c={cjs:{format:"cjs",context:n.form_enabled?"window":"global",babel:!0===n.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!0,string:!0},cjsx:{format:"cjs",context:n.form_enabled?"window":"global",babel:!0===n.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:n.form_enabled?"window":"global",babel:!0===n.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0,string:!0},esmx:{format:"esm",browser:!0,babel:!0,context:n.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:n.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==n.iife,terser:!0,string:!0},umd:{format:"umd",context:n.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0}},l={};!0===n.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",babel_options:{targets:{chrome:"79"}}}),!0===n.electron&&(c.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===n.nextjs&&(c.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===n.ios&&(c.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===n.macos&&(c.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===n.app.enabled&&(n.app.dir=`./dist/app/${n.app.folder}`,c.app={format:n.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:n.app.dir,terser:!0,output_exports:!1===n.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:n.app.dir})),!0===n.cli.enabled&&(n.cli.dir=`./dist/cli/${n.cli.folder}`,c.cli={format:n.cli.format,context:"global",babel:!0===n.src_uses_jsx||!0===n.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:n.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===n.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${X.normalize(n.app.dir||".")}`,files:[X.normalize("./dist/**/*")],cors:!0,open:!1};n.babel_options=H({targets:{browsers:"last 9 versions, not dead",node:"18"}},n.babel_options||n.babel?.options),n.browsersync_options=H(p,n.browsersync_options||n.browsersync?.options||{}),n.replace_options=H({},n.replace_options||n.replace?.options||{}),n.terser_options=H({},n.terser_options||n.terser?.options||{}),n.css_options=H({},n.css_options||n.css?.options||{}),n.wasm_options=H({},n.wasm_options||n.wasm?.options||{}),n.copy_options=H(l,n.copy_options||n.copy?.options||{}),n.json_options=H({},n.json_options||n.json?.options||{}),n.image_options=H({},n.image_options||n.image?.options||{}),n.analyzer_options=H({summaryOnly:!0,limit:12},n.analyzer_options||n.analyzer?.options||{}),n.visualizer_options=H({},n.visualizer_options||n.visualizer?.options||{}),n.string_options=H({},n.string_options||n.string?.options||{}),n.nunjucks_options=H({},n.nunjucks_options||n.nunjucks?.options||{}),Reflect.has(n.browsersync_options,"proxy")&&delete n.browsersync_options.server,n.rollup=n.rollup||{},n.rollup_output=H(c,n.rollup_output||n.rollup?.output||{}),n.string_enabled=!0===n.string||n.string&&!1!==n.string?.enabled,n.preact_enabled=!0===n.preact||n.preact&&!1!==n.preact?.enabled;const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==n.rollup[e]?(!0===n.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||n.babel_options,t.browsersync_options=H(n.browsersync_options,t.browsersync_options),t.replace_options=H(n.replace_options,t.replace_options),t.terser_options=H(n.terser_options,t.terser_options),t.css_options=H(n.css_options,t.css_options),t.wasm_options=H(n.wasm_options,t.wasm_options),t.copy_options=H(n.copy_options,t.copy_options),t.json_options=H(n.json_options,t.json_options),t.image_options=H(n.image_options,t.image_options),t.analyzer_options=H(n.analyzer_options,t.analyzer_options),t.visualizer_options=H(n.visualizer_options,t.visualizer_options),t.string_options=H(n.string_options,t.string_options),t.string=n.string_enabled&&t.string,t.nunjucks_options=H(n.nunjucks_options,t.nunjucks_options),n.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),n.form_enabled&&(t.babel=!0)):t.enabled=!1)}n.babel_enabled=d.some((e=>!0===n.rollup_output[e].babel)),n.browser_enabled=d.some((e=>!0===n.rollup_output[e].babel)),n.browsersync_enabled=!1!==n.browsersync&&d.some((e=>!0===n.rollup_output[e].browsersync)),n.browsersync_enabled=n.browsersync_enabled&&n.app.enabled,n.wasm_enabled=!0===n.wasm||n.wasm&&!1!==n.wasm?.enabled,n.css_enabled=!0===n.css||n.css&&!1!==n.css?.enabled,n.json_enabled=!0===n.json||n.json&&!1!==n.json?.enabled,n.terser_enabled=!1!==n.terser,n.copy_enabled=n.app.enabled||n.copy_enabled||n.copy&&!1!==n.copy?.enabled,n.image_enabled=!0===n.image||n.image&&!1!==n.image?.enabled,n.analyzer_enabled=!0===n.analyzer||n.analyzer&&!1!==n.analyzer?.enabled,n.visualizer_enabled=!0===n.visualizer||n.visualizer&&!1!==n.visualizer?.enabled,n.dependency_auto_enabled=!1!==n.dependency_auto&&!1!==n.dependency_auto?.enabled,n.npm_install_flags=n.npm_install_flags||"",n.react_version=n.react_version||n.react?.version||18,n.polyfill_enabled=!0===n.polyfill||n.polyfill&&!1!==n.polyfill?.enabled,n.nunjucks_enabled=!0===n.nunjucks||n.nunjucks&&!1!==n.nunjucks?.enabled},bo=async({atom:e,packageDependencies:t,packageDevDependencies:n})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let n="^18.2";n=`^${(await Q({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:n}),t.push({package:"react-dom",version:n}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"yargs",version:"^17"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.19"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&t.push({package:"@flownet/lib-render-templates-dir",version:"0.1.17"}),n.push({package:"@babel/core",version:"^7"}),n.push({package:"@rollup/plugin-commonjs",version:"^26"}),n.push({package:"@rollup/plugin-node-resolve",version:"^15"}),n.push({package:"@rollup/plugin-replace",version:"^5"}),n.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&n.push({package:"rollup-plugin-dts",version:"^6"}),n.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),n.push({package:"@rollup/plugin-alias",version:"^5"}),n.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(n.push({package:"@rollup/plugin-babel",version:"^6"}),n.push({package:"@babel/preset-env",version:"^7"}),n.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.plugins?.forEach((e=>{switch(e[0]){case"proposal-decorators":n.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"proposal-class-properties":n.push({package:"@babel/plugin-proposal-class-properties",version:"^7"})}}))),n.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.nunjucks_enabled&&n.push({package:"@fnet/rollup-plugin-nunjucks",version:"0.1.3"}),e.doc.features.browsersync_enabled&&n.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.4"}),e.doc.features.json_enabled&&n.push({package:"@rollup/plugin-json",version:"^6"}),e.doc.features.terser_enabled&&n.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&n.push({package:"@rollup/plugin-wasm",version:"^6"}),e.doc.features.image_enabled&&n.push({package:"@rollup/plugin-image",version:"^3"}),e.doc.features.analyzer_enabled&&n.push({package:"rollup-plugin-analyzer",version:"^3"}),e.doc.features.visualizer_enabled&&n.push({package:"rollup-plugin-visualizer",version:"^5"}),e.doc.features.string_enabled&&n.push({package:"rollup-plugin-string",version:"^3"}),e.doc.features.css_enabled){n.push({package:"rollup-plugin-postcss",version:"^4"}),n.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":n.push({package:"postcss-import",version:"^15"});break;case"postcss-url":n.push({package:"postcss-url",version:"^10"});break;case"postcss-preset-env":n.push({package:"postcss-preset-env",version:"^9"});break;case"autoprefixer":n.push({package:"autoprefixer",version:"^10"});break;case"cssnano":n.push({package:"cssnano",version:"^6"})}}))}e.doc.features.polyfill_enabled&&n.push({package:"rollup-plugin-node-polyfills",version:"^0.2"}),e.doc.features.copy_enabled&&(n.push({package:"rollup-plugin-copy",version:"^3"}),n.push({package:"chokidar",version:"^3"}))},xo=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const i={atom:e,packageDependencies:o,ts:Date.now()},a=n.templateDir,s=te.resolve(n.projectDir,"src/app");ee.existsSync(s)||ee.mkdirSync(s,{recursive:!0}),await ne({pattern:["index.html.njk","index.js.njk"],dir:te.resolve(a,"src/app"),outDir:s,context:i})},_o=async({atom:e,context:t,packageDependencies:n,packageDevDependencies:o,setInProgress:i})=>{await i({message:"Creating package.json."});n.filter((e=>!0===e.dev)).forEach((e=>{o.find((t=>t.package===e.package))||o.push(e);const t=n.findIndex((t=>t.package===e.package));n.splice(t,1)}));const a=n.find((e=>"react"===e.package)),s=n.find((e=>"react-dom"===e.package));a&&!s?n.push({package:"react-dom",version:a.version}):a&&s&&(s.version=a.version),a&&e.doc.features.react_version>=17&&(n.find((e=>"@emotion/react"===e.package))||n.push({package:"@emotion/react",version:"^11"}),n.find((e=>"@emotion/styled"===e.package))||n.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push({file:ae.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&r.push({file:ae.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of r){const i=t.file;if(!ie.existsSync(i))throw new Error(`App file not found: ${i}`);const a=await se({file:i,recursive:!0}),s=!0===e.doc.features.all_parsed_imports?a.all:a.required;for await(const e of s){if("npm"!==e.type)continue;if(n.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const i=(await re({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?o:n).push({package:e.package,subpath:e.subpath,version:`^${i}`,type:"npm"})}}const c={atom:e,packageDependencies:n,packageDevDependencies:o},l=t.templateCommonDir,p=oe.compile(ie.readFileSync(ae.resolve(l,"package.json.njk"),"utf8"),oe.configure(l)).render(c),d=t.projectDir,f=ae.resolve(d,"package.json");ie.writeFileSync(f,p,"utf8")},ko=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={atom:e,packageDependencies:o},a=n.templateDir,s=le.resolve(n.projectDir,"src/cli");ce.existsSync(s)||ce.mkdirSync(s,{recursive:!0}),await pe({pattern:["index.js.njk"],dir:le.resolve(a,"src/cli"),outDir:s,context:i})},jo=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:o},a=fe.resolve(n.projectDir,"src","default/index.js");if(!de.existsSync(a))throw new Error(`Entry file not found: ${a}`);const s=(await ue({file:a,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&s.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(s.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<s.length;e++){const n=s[e];t.alias.entries[n]=`node:${n}`,t.alias.entries[`node:${n}`]=n}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(s)}}const l=n.templateCommonDir;let p=me.compile(de.readFileSync(fe.resolve(l,"rollup.config.mjs.njk"),"utf8"),me.configure(l)).render(i);const d=n.projectDir;let f=fe.resolve(d,"rollup.config.mjs");de.writeFileSync(f,p,"utf8")},Do=async({atom:e,setInProgress:t,context:n,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let i={};const a=e.doc.inputs||[],s=[],r=e.doc.input;if(r?i=await ye({schema:r}):a.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&s.push(e);const t={};Reflect.has(e,"type")&&(t.type=e.type),Reflect.has(e,"default")&&(t.default=e.default),Reflect.has(e,"choices")&&(t.choices=e.choices),(Reflect.has(e,"describe")||Reflect.has(e,"description"))&&(t.describe=e.describe||e.description),Reflect.has(e,"alias")&&(t.alias=e.alias),Reflect.has(e,"required")&&!0===e.required&&(t.required=!0),Reflect.has(e,"hidden")&&!0===e.hidden&&(t.hidden=!0),Reflect.has(e,"array")&&!0===e.array&&(t.array=!0),Reflect.has(e,"normalize")&&!0===e.normalize&&(t.normalize=!0),Reflect.has(e,"nargs")&&(t.nargs=e.nargs),i[e.name]=t})),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const t=e.doc.features.cli.fargs,n={type:"string",describe:"Config name to load args",hidden:!1},o={type:"array",describe:"Tags to filter the config",hidden:!1};Reflect.has(t,"default")&&(n.default=t.default),(Reflect.has(t,"describe")||Reflect.has(t,"description"))&&(n.describe=t.describe||t.description),Reflect.has(t,"choices")&&(n.choices=t.choices),i.fargs=n,i.ftag=o}const c={options:i,imports:s,atom:e},l=n.templateDir,p=we.compile(ge.readFileSync(he.resolve(l,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=n.projectDir,f=he.resolve(d,"src/default/to.args.js");ge.writeFileSync(f,p,"utf8")},Po=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:o},a=n.templateCommonDir,s=xe.compile(ve.readFileSync(be.resolve(a,".gitignore.njk"),"utf8"),xe.configure(a)).render(i),r=n.projectDir,c=be.resolve(r,".gitignore");ve.writeFileSync(c,s,"utf8")},So=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:o},a=n.templateCommonDir,s=je.compile(_e.readFileSync(ke.resolve(a,"tsconfig.json.njk"),"utf8"),je.configure(a)).render(i),r=n.projectDir,c=ke.resolve(r,"tsconfig.json");_e.writeFileSync(c,s,"utf8")},Ao=async({atom:e,context:t,setInProgress:n,Atom:o})=>{const i="readme.md",a=`Creating ${i}`;if(await n({message:a}),t.project?.readme){const e={content:t.project.readme.doc.content},n=t.templateCommonDir,o=De.compile(Pe.readFileSync(Se.resolve(n,`${i}.njk`),"utf8"),De.configure(n)).render(e),a=t.projectDir,s=Se.resolve(a,`${i}`);Pe.writeFileSync(s,o,"utf8")}else if(e.id){const n=await o.first({type:"wiki",parent_id:e.id});if(!n||"markdown"!==n.doc?.["content-type"])return;const{content:a,...s}=n.doc,r={content:a},c=t.templateCommonDir,l=De.compile(Pe.readFileSync(Se.resolve(c,`${i}.njk`),"utf8"),De.configure(c)).render(r),p=t.projectDir,d=Se.resolve(p,`${i}`);Pe.writeFileSync(d,l,"utf8")}},To=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Prettifiying source files."});let o=Te.join("src","**","*");if(0!==Ae.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n}).code)throw new Error("Couldnt format files.")},Eo=async({atom:e,setInProgress:t,context:n})=>{if(!e.doc.features.dts_enabled)return;const o=n.projectDir;await t({message:"Creating .d.ts"});if(0!==Ee.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},$o=async({setInProgress:e,atom:t,context:n})=>{const o=n.projectDir;await e({message:"Installing npm packages."});if(0!==$e.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},Io=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Building main project."});if(0!==Ie.exec("npm run build",{cwd:n}).code)throw new Error("Couldnt build project.")},Oo=async e=>{const{atom:t,packageDependencies:n,context:o,deploymentProjectTarget:i,setInProgress:a,deploymentProject:s,yamlTarget:r}=e;if(!0===i.enabled)if("lib"===i.name)await Qt({...e});else if("red"===i.name)await Zt({...e});else if("npm"===i.name)await Yt({...e});else if("gcs"===i.name)await Xt({...e});else if("gitlab"===i.name)await Vt({...e});else if("fnet-package"===i.name)await rn({...e});else if("fnet-form"===i.name)await cn({...e});else if("fnet-node"===i.name)await pn({...e});else if("fnet-flow"===i.name)await ln({...e});else{let e;if("nextjs"===i.name?e=an:"webos"===i.name?e=on:"electron"===i.name?e=nn:"docker"===i.name?e=sn:"ios"===i.name?e=en:"macos"===i.name?e=tn:"rust"===i.name&&(e=dn),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),s.isDirty=!0}},{Atom:Co}=y,No=R,Mo=k,Ro=F,Fo=t,qo=_,Uo=q,Lo=r,Bo=U,zo=wn,Jo=bn,Wo=kn,Ko=An,Go=un,Ho=Tn,Vo=In,Xo=Nn,Yo=Fn,Zo=Un,Qo=Bn,ei=Jn,ti=Kn,ni=Vn,oi=Zn,ii=to,ai=oo,si=ao,ri=ro,ci=({node:e})=>{const t=e.definition;if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let n=e.parent;for(;n.parent;){const o=n.childs.find((e=>e.name===t.next));if(o){e.context.next=o;break}n=n.parent}}else{let t=e.parent,n=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(void 0!==t.blockAutoJumpToParent||void 0!==t.blockAutoJumpToSibling){if(t.blockAutoJumpToParent){const o=t.childs.find((e=>e.index===n));o&&(e.context.next=o);break}t.blockAutoJumpToParent||(n=t.index+1,t=t.parent)}else{const o=t.childs.find((e=>e.index===n));if(o){e.context.next=o;break}n=t.index+1,t=t.parent}}};var li=class{#e;#t;#n;#o;#i;#a;#s;#r;#c;#l;#p;#d;#f;#m;#u;#g;#h;#w;#y;#v;#b;constructor(e){this.#e=new yo,this.#t=e,this.#a=[],this.#s=[],this.#r={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#v={packageDependencies:this.#a,packageDevDependencies:this.#s,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Co,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#b={initNode:this.initNode.bind(this),cloneDeep:uo,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:ci,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,n){this._redis_client&&await this._redis_client.SETEX(e,n||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await ho(),this.#p=this.#t.buildId||wo(24),this.#v.buildId=this.#p,this.#u=this.#t.mode,this.#g=["all","deploy","build","file"].includes(this.#u),this.#h=["all","deploy","build"].includes(this.#u),this.#w=["all","deploy"].includes(this.#u),this.#y=["all","deploy","build","file","bpmn"].includes(this.#u),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#m=(await Fo({optional:!0,name:"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await vo(this.#v),await bo(this.#v),await this.transformWorkflow({workflow:this.#o});const e=await this.initNodeTree({workflow:this.#o});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#a}),await this.resolveNodeTree({root:e}),this.#l=e}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#c=await this.#e.init({config:this.#m}),this.#v.atomAccessToken=this.#c)}async initWorkflow(){const e=this.#t.id;this.#n=this.#t.project?.workflowAtom||await Co.get({id:e}),this.#o="string"==typeof this.#n.doc.content?(await Lo({content:this.#n.doc.content})).parsed:this.#n.doc.content;let t=this.#n.doc.bundleName;t=t||(this.#n.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#n.doc.bundleName=t,this.#n.type=this.#n.type||"workflow",this.#v.atom=this.#n}async initDependencies(){this.#a.push({package:"get-value",version:"^3.0"}),this.#a.push({package:"set-value",version:"^4.1"}),this.#n.doc.features.form_enabled?(this.#a.push({package:"react",version:"^18.2"}),this.#a.push({package:"react-dom",version:"^18.2"}),this.#a.push({package:"@flownet/react-app",version:"^0.1"}),this.#a.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#a.push({package:"yargs",version:"^17"}),this.#a.push({package:"chalk",version:"^4"})}#x(e){console.log("filePath",e),co.statSync(e).isDirectory()?(co.readdirSync(e).forEach((t=>{const n=lo.join(e,t);this.#x(n)})),co.rmSync(e)):co.unlinkSync(e)}#_(e,t){const n=co.existsSync(e),o=n&&co.statSync(e);n&&o.isDirectory()?(co.mkdirSync(t,{recursive:!0}),co.readdirSync(e).forEach((n=>{this.#_(lo.join(e,n),lo.join(t,n))}))):co.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,n=["node_modules"];if(co.existsSync(e)){const t=co.readdirSync(e);for(const o of t)if(!n.includes(o)){const t=lo.join(e,o);co.rmSync(t,{recursive:!0})}}co.existsSync(e)||co.mkdirSync(e,{recursive:!0});const o=lo.join(e,"src");co.existsSync(o)||co.mkdirSync(o,{recursive:!0});const i=lo.join(o,"core");this.#_(t,i);const a=lo.join(o,"default","blocks");co.existsSync(a)||co.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=mo.configure(e,{watch:!1,dev:!0}),this.#v.njEnv=this.#i}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,n]=Object.entries(e)[0];if(n.hasOwnProperty("onerror")){const{onerror:o,...i}=n;e[t]={try:i,except:o}}if(e[t].hasOwnProperty("steps")){const n=e[t].steps;if(!Array.isArray(n))throw new Error("Steps must be an array.");e[t].steps=n.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),n={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#n}};t.forEach((t=>{const o={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:n,definition:e[t],index:n.childs.length,depth:n.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};n.childs.push(o)}));for await(const e of n.childs)await this.initNode({node:e});return n}async initNode({node:e}){const t={...this.#b,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await Jo.hits(t))await Jo.init(t);else if(await Ko.hits(t))await Ko.init(t);else if(await Go.hits(t))await Go.init(t);else if(await zo.hits(t))await zo.init(t);else if(await Ho.hits(t))await Ho.init(t);else if(await Wo.hits(t))await Wo.init(t);else if(await Vo.hits(t))await Vo.init(t);else if(await Xo.hits(t))await Xo.init(t);else if(await Yo.hits(t))await Yo.init(t);else if(await Zo.hits(t))await Zo.init(t);else if(await Qo.hits(t))await Qo.init(t);else if(await ei.hits(t))await ei.init(t);else if(await si.hits(t))await si.init(t);else if(await ri.hits(t))await ri.init(t);else if(await ni.hits(t))await ni.init(t);else if(await oi.hits(t))await oi.init(t);else if(await ai.hits(t))await ai.init(t);else if(await ti.hits(t))await ti.init(t);else{if(!await ii.hits(t))throw new Error("Undefined step type.");await ii.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const n of e.childs)await this.initNodeIndex({node:n,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const n=lo.join(e.parent.indexKey,e.name);e.indexKey=n,t[n]=e;const o=[];let i=e;for(;i?.parent;)o.push(i.index),i=i.parent;o.reverse(),e.codeKey=`B_${o.join("_")}_${e.type}`,e.pathKey=`${o.join(".")}`,e.typeId=wo(24);for await(const n of e.childs)await this.initNodeIndex({node:n,index:t})}async initNodeCalls({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"call"===o.type&&n.push(o)}return e.context.calls=n,n}async initNodeCallLibs({root:e}){const t=[],n=e.context.calls;for await(const e of n){const n=e.definition.call,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.call,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"form"===o.type&&n.push(o)}return e.context.forms=n,n}async initNodeFormLibs({root:e}){const t=[],n=e.context.forms;for await(const e of n){const n=e.definition.form,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.form,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const n=e.filter((e=>"atom"===e.type));for(let e=0;e<n.length;e++){const o=n[e],i=await this.findAtomLibrary({url:o.name});o.atom=i;const a=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));a?.forEach((e=>{const n=t.find((t=>t.package===e.package));n?"string"==typeof e.path?(n.path||[]).some((t=>t===e.path))||(n.path=n.path||[],n.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(n.path||[]).some((t=>t===e))||(n.path=n.path||[],n.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=No({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#f),"ac:"===t.protocol){const n=t.pathname.split("/");if(1===n.length)return await Co.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===n.length){const e=await Co.first({where:{name:n[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Co.first({where:{name:n[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=lo.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),n=[],o=await qo({file:e,recursive:!0}),i=!0===this.#n.doc.features.all_parsed_imports?o.all:o.required;for await(const e of i){if("npm"!==e.type)continue;if(n.find((t=>t.package===e.package)))continue;const t=(await Mo({name:e.package,groupBy:{minor:!0}}))[0][0];n.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:n},protocol:t.protocol}}if("npm:"===t.protocol){const e=(await Mo({name:t.pathname,groupBy:{minor:!0}}))[0][0];return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:[{package:t.pathname,version:`^${e}`,type:"npm"}]},protocol:t.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=uo(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const n=t.params[e];if("string"==typeof n)t.params[e]={key:n,hasDefault:!1};else{const o=Object.keys(n)[0];t.params[e]={key:o,hasDefault:!0,default:n[o]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#b,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:e}){await this.setInProgress({message:"Creating external lib files."}),this.#n.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const n=t[e].atom,o=this.#t.projectDir;if("local:"===n.protocol){const e=lo.resolve(this.#t.projectSrcDir,`${n.fileName||n.name}.js`),t=lo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!co.existsSync(e)){co.mkdirSync(lo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",co.writeFileSync(e,t,"utf8")}n.relativePath=t.split(lo.sep).join("/"),this.#n.typesDir=`./types/${lo.basename(o)}/src`}else if("npm:"===n.protocol)n.relativePath=n.name;else{const e=`${o}/src/libs/${n.id}.js`,t=n.doc.contents?.find((e=>"esm"===e.format))||n.doc;co.writeFileSync(lo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,n=mo.compile(co.readFileSync(lo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),o=this.#t.projectDir,i=lo.resolve(o,"src/default/index.js");co.writeFileSync(i,n,"utf8")}async createNodeTree({root:e}){await this.setInProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:e}){const t=this.#t.templateDir,n=mo.compile(co.readFileSync(lo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),o=this.#t.projectDir,i=lo.resolve(o,`src/default/${e.codeKey}.js`);co.writeFileSync(i,n,"utf8");for await(const t of e.childs)await this.createType({node:t})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:e}){let t=this.#r[e.type];if(t)return t;const n=this.#t.templateDir;return t=mo.compile(co.readFileSync(lo.resolve(n,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#i),this.#r[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,n=`${e.codeKey}.js`,o=lo.resolve(t,`src/default/blocks/${n}`);co.writeFileSync(o,e.context.render,"utf8"),e.context.fileName=n,e.context.filePath=o}async transformExpression(e){let t=await this.transformValue(e);return t=JSON.stringify(t),t=this.replaceSpecialPattern(t),t}async transformValue(e){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=await this.transformValue(e[t]);else if(go(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++)e[t[n]]=await this.transformValue(e[t[n]])}else if("string"==typeof e){const t=await Uo({expression:e});if(t){const{processor:n,statement:o}=t;switch(n){case"v":e=`$::v.${o}::`;break;case"e":e=`$::${o}::`;break;case"m":e=`$::closure.module['${o}']::`;break;case"f":e=`$::closure.form.${o}::`;break;case"for":e=`$::caller.for.${o}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const e="flow.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:n,...o}=this.#n.doc,i={content:po.stringify(o)},a=this.#t.templateDir,s=mo.compile(co.readFileSync(lo.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=lo.resolve(r,`${e}`);co.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const n={content:po.stringify(this.#o)},o=this.#t.templateDir,i=mo.compile(co.readFileSync(lo.resolve(o,`${e}.njk`),"utf8"),this.#i).render(n),a=this.#t.projectDir,s=lo.resolve(a,`${e}`);co.writeFileSync(s,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=fo.exec("prettier --write .",{cwd:lo.resolve(e,"src")});if(0!==t.code)throw new Error(t.stderr)}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&await n.save()}}else if(this.#n.id){const e=await Co.list({type:"workflow.deploy",parent_id:this.#n.id});for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&(n=await Co.update(n,{id:n.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:n}=t,o=n.get("targets")||[],i=t.doc.targets||[];for(let e=0;e<i.length;e++){const n=i[e],a=o.items[e];await Oo({...this.#v,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:a})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#t.id)return;let o=await Co.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await Co.update(o,{id:o.id})):o=await Co.create({parent_id:this.#m.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:n.version}]}})}async setInProgress({message:e}){console.log(Bo.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#y&&!this.#g)return await this.createNetwork();try{const e=this.#y?await Ro({root:this.#l}):void 0;if(this.#g){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#y){const t=this.#t.project?.projectDir||this.#t.projectDir;co.writeFileSync(lo.resolve(t,"./flow.bpmn"),e.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#l}),await this.createEngine({root:this.#l}),await this.createNodeTree({root:this.#l}),await this.createProjectYaml(),await this.createProjectMainYaml(),await Ao(this.#v),await So(this.#v),await Po(this.#v),await Do(this.#v),await ko(this.#v),await xo(this.#v),await jo(this.#v),await _o(this.#v),await To(this.#v),await Eo(this.#v),this.#h&&(await $o(this.#v),await Io(this.#v),this.#w&&await this.deploy())}await this._cache_set(this.#d,{status:"COMPLETED",data:{network:e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await Ro({root:this.#l});await this._cache_set(this.#d,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}};const pi=p,di=d;var fi=function({baseDir:e=__dirname}){let t=e;for(;t!==di.parse(t).root;){const e=di.join(t,"node_modules");if(pi.existsSync(e))return e;t=di.dirname(t)}return null};const mi=process.cwd(),{spawn:ui}=e;t({name:["redis"],dir:mi,optional:!0});const gi=n,hi=o,wi=i,yi=a,vi=s,bi=r,xi=t,_i=c,ki=l,ji=li,Di=fi({baseDir:__dirname}),Pi="win32"===process.platform?";":":";process.env.PATH=`${gi.join(Di,"/.bin")}${Pi}${process.env.PATH}`;let Si=hi(process.argv.slice(2)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"}).option("vscode",{type:"boolean",default:!0,alias:"vs"})),(async e=>{try{const t=gi.resolve(Di,"./@fnet/cli-project-flow/dist/template/project"),n=gi.resolve(mi,e.name);wi.existsSync(n)||wi.mkdirSync(n),await ki({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0});let o=vi.exec("fnet build",{cwd:n});if(0!==o.code)throw new Error("Failed to build project.");if(vi.which("git")&&(o=vi.exec("git init --initial-branch=main",{cwd:n}),0!==o.code))throw new Error("Failed to initialize git.");if(vi.which("code")&&e.vscode&&(o=vi.exec(`cd ${n} && code .`),0!==o.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=gi.resolve(Di,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd();if(e.name=gi.basename(n),e.update){if(await ki({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0}),0!==vi.exec("fnet build",{cwd:n}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await Ti(e),n=new ji(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Ti({...e,mode:"all"}),n=new ji(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Ti({...e,mode:"file"}),n=new ji(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function Ai(e,{name:t,bin:n,preArgs:o=[]}){return e.command(`${t||n} [commands..]`,`${n} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ti(e),{projectDir:i}=t,a=process.argv.slice(3);ui(n,[...o,...a],{cwd:i,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Ti(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:gi.resolve(mi,`./.output/${e.id}`),templateDir:gi.resolve(Di,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:gi.resolve(Di,"./@fnet/cli-project-common/dist/template/default"),coreDir:gi.resolve(Di,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=gi.resolve(mi,"flow.yaml");if(!wi.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const{raw:n,parsed:o}=await bi({file:t,tags:e}),i=gi.dirname(t),a=o.main||"flow.main.yaml";let s=gi.resolve(i,a);if(!wi.existsSync(s)&&(s=gi.resolve(i,a+".yaml"),!wi.existsSync(s)))throw new Error(`${a} file not found in ${s}.`);const{raw:r,parsed:c}=await bi({file:s,tags:e}),l={workflowAtom:{doc:{...o,"content-type":"yaml",content:r}},projectDir:i,projectFilePath:t,projectFileContent:n,projectFileParsed:o,projectMainFilePath:s,projectMainFileContent:r,projectMainFileParsed:c};let p=gi.resolve(i,"fnet/targets.yaml");if(!wi.existsSync(p)&&(p=gi.resolve(i,"fnet.devops.yaml"),wi.existsSync(p))){const e=gi.resolve(i,"fnet");wi.existsSync(e)||wi.mkdirSync(e),wi.copyFileSync(p,gi.resolve(i,"fnet/targets.yaml")),wi.unlinkSync(p)}if(wi.existsSync(p)){const{raw:t,parsed:n}=await bi({file:p,tags:e}),o=yi.parseDocument(t);l.devops={filePath:p,fileContent:t,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{wi.writeFileSync(l.devops.filePath,o.toString())}}}const d=gi.resolve(i,"readme.md");if(wi.existsSync(d)){const e=wi.readFileSync(d,"utf8");l.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:gi.resolve(Di,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:gi.resolve(Di,"./@fnet/cli-project-common/dist/template/default"),coreDir:gi.resolve(Di,"./@fnet/cli-project-flow/dist/template/core"),projectDir:gi.resolve(t.projectDir,"./.workspace"),projectSrcDir:gi.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}Si=Si.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Ti(e),{project:n}=t,{projectDir:o,projectFileParsed:i}=n,a=i.input;if(!a)throw new Error("Config schema not found in project file.");const s=await _i({schema:a,format:"yaml"}),r=gi.resolve(o,".fnet");wi.existsSync(r)||wi.mkdirSync(r);const c=gi.resolve(r,`${e.name}.fnet`);wi.writeFileSync(c,s)}catch(e){console.error(e.message),process.exit(1)}})),Si=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Ti(e),{project:n}=t,{projectDir:o,projectFileParsed:i}=n,a=i.input;if(!a)throw new Error("Config schema not found in project file.");const s=gi.resolve(o,".fnet"),r=gi.resolve(s,`${e.name}.fnet`),c=await _i({schema:a,format:"yaml",ref:r});wi.existsSync(s)||wi.mkdirSync(s),wi.writeFileSync(r,c)}catch(e){console.error(e.message),process.exit(1)}}))}(Si),Si=Ai(Si,{bin:"npm"}),Si=Ai(Si,{bin:"node"}),Si=Ai(Si,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Si=Ai(Si,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Si=Ai(Si,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Si=Ai(Si,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Si=Ai(Si,{bin:"npx"}),Si=Ai(Si,{bin:"cdk"}),Si=Ai(Si,{bin:"aws"}),Si=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Ti(e),{projectDir:o}=t,i=e.config,a=await xi({name:i,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),s=a?.data?.env||void 0,r=e.command,c=process.argv.slice(5);ui(r,[...n,...c],{cwd:o,stdio:"inherit",shell:!0,env:{...process.env,...s}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(Si,{name:"with"}),Si.demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fnet/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.56.0",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist"
|
|
6
6
|
],
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"@flownet/lib-to-macos-app": "^0.3.1",
|
|
33
33
|
"@flownet/lib-to-nextjs": "^0.3.1",
|
|
34
34
|
"@flownet/lib-to-webos": "^0.3.1",
|
|
35
|
-
"@fnet/cli-project-common": "^0.1
|
|
35
|
+
"@fnet/cli-project-common": "^0.2.1",
|
|
36
36
|
"@fnet/cli-project-flow": "^0.2.1",
|
|
37
37
|
"@fnet/cli-project-node": "^0.2.2",
|
|
38
38
|
"@fnet/config": "^0.2.8",
|
package/readme.md
CHANGED
|
@@ -47,124 +47,4 @@ fnode watch
|
|
|
47
47
|
For Flow:
|
|
48
48
|
```bash
|
|
49
49
|
fnet watch
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Deploying the Project
|
|
53
|
-
|
|
54
|
-
Ensure respective `node.devops.yaml` (for Flow Node) or `flow.devops.yaml` (for Flow) has the correct deployment configurations.
|
|
55
|
-
|
|
56
|
-
### Configuration for NPM Deployment
|
|
57
|
-
|
|
58
|
-
**Structure for devops.yaml:**
|
|
59
|
-
|
|
60
|
-
```yaml
|
|
61
|
-
targets:
|
|
62
|
-
- name: npm
|
|
63
|
-
enabled: true
|
|
64
|
-
params:
|
|
65
|
-
name: "NPM_PACKAGE_NAME"
|
|
66
|
-
version: "NPM_VERSION"
|
|
67
|
-
```
|
|
68
|
-
Replace placeholders with desired npm package name and version.
|
|
69
|
-
|
|
70
|
-
For deployment:
|
|
71
|
-
|
|
72
|
-
For Flow Node:
|
|
73
|
-
```bash
|
|
74
|
-
fnode deploy
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
For Flow:
|
|
78
|
-
```bash
|
|
79
|
-
fnet deploy
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
**NPM Configuration File:**
|
|
83
|
-
|
|
84
|
-
The CLI checks for `npm.fnet` under the first `.fnet` directory (in the project root, parent directory, or user's home). The file format:
|
|
85
|
-
|
|
86
|
-
```yaml
|
|
87
|
-
version: 1
|
|
88
|
-
type: fnet.config
|
|
89
|
-
env:
|
|
90
|
-
NPM_TOKEN: "YOUR_NPM_TOKEN"
|
|
91
|
-
```
|
|
92
|
-
Replace `YOUR_NPM_TOKEN` with your npm token for deployment authentication.
|
|
93
|
-
|
|
94
|
-
### Configuration for GCS Deployment
|
|
95
|
-
|
|
96
|
-
The `@fnet/cli` also facilitates deploying build packages directly to a Google Cloud Storage bucket.
|
|
97
|
-
|
|
98
|
-
To deploy to a Google Cloud Storage bucket, add a new target named `gcs` under the `targets` section in your `devops.yaml`:
|
|
99
|
-
|
|
100
|
-
```yaml
|
|
101
|
-
targets:
|
|
102
|
-
...
|
|
103
|
-
- name: gcs
|
|
104
|
-
enabled: true
|
|
105
|
-
params:
|
|
106
|
-
name: "@flownet/lib-1"
|
|
107
|
-
version: 0.1.2
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
Replace the placeholders with your package name and version accordingly.
|
|
111
|
-
|
|
112
|
-
### GCS Configuration File:
|
|
113
|
-
|
|
114
|
-
For GCS deployment, the CLI looks for a `gcs.fnet` file under the first `.fnet` directory (either in the project root, parent directory, or user's home directory). The expected format of this file is:
|
|
115
|
-
|
|
116
|
-
```yaml
|
|
117
|
-
version: 1
|
|
118
|
-
type: fnet.config
|
|
119
|
-
env:
|
|
120
|
-
GCS_PROJECT_ID: "YOUR_PROJECT_ID"
|
|
121
|
-
GCS_BUCKET_NAME: "YOUR_BUCKET_NAME"
|
|
122
|
-
GCS_UPLOADER_KEY_FILE: "PATH_TO_YOUR_SERVICE_ACCOUNT_KEY_JSON"
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
Make sure to replace the placeholders with the appropriate values:
|
|
126
|
-
|
|
127
|
-
- `YOUR_PROJECT_ID`: Your Google Cloud project ID.
|
|
128
|
-
- `YOUR_BUCKET_NAME`: The name of the GCS bucket where you want to deploy.
|
|
129
|
-
- `PATH_TO_YOUR_SERVICE_ACCOUNT_KEY_JSON`: Path to the service account key in JSON format, which has the necessary permissions to upload files to the specified bucket.
|
|
130
|
-
|
|
131
|
-
### Configuration for GitLab Deployment
|
|
132
|
-
|
|
133
|
-
With the `@fnet/cli`, you can also deploy the contents of the `.workspace` directory directly to GitLab.
|
|
134
|
-
|
|
135
|
-
To deploy to GitLab, introduce a new target named `gitlab` under the `targets` section in your `devops.yaml`:
|
|
136
|
-
|
|
137
|
-
```yaml
|
|
138
|
-
targets:
|
|
139
|
-
...
|
|
140
|
-
- name: gitlab
|
|
141
|
-
enabled: true
|
|
142
|
-
params:
|
|
143
|
-
name: PROJECT-NAME
|
|
144
|
-
branch: BRANCH-NAME
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
Replace `PROJECT-NAME` with the name of your GitLab project and `BRANCH-NAME` with the branch where you want to deploy the contents.
|
|
148
|
-
|
|
149
|
-
### GitLab Configuration File:
|
|
150
|
-
|
|
151
|
-
For the GitLab deployment, the CLI searches for a `gitlab.fnet` file under the first `.fnet` directory (either in the project root, parent directory, or user's home directory). The expected format for this file is:
|
|
152
|
-
|
|
153
|
-
```yaml
|
|
154
|
-
version: 1
|
|
155
|
-
type: fnet.config
|
|
156
|
-
data:
|
|
157
|
-
projectGroupId: "YOUR_PROJECT_GROUP_ID"
|
|
158
|
-
gitlabHost: "YOUR_GITLAB_HOST"
|
|
159
|
-
gitlabToken: "YOUR_GITLAB_TOKEN"
|
|
160
|
-
gitlabUsername: "YOUR_USERNAME"
|
|
161
|
-
gitlabUserEmail: "YOUR_EMAIL"
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
Make sure to replace the placeholders with the appropriate values:
|
|
165
|
-
|
|
166
|
-
- `YOUR_PROJECT_GROUP_ID`: The ID of your GitLab project group.
|
|
167
|
-
- `YOUR_GITLAB_HOST`: The hostname of your GitLab instance (e.g., "gitlab.com" for GitLab's public instance).
|
|
168
|
-
- `YOUR_GITLAB_TOKEN`: Your GitLab personal access token.
|
|
169
|
-
- `YOUR_USERNAME`: Your GitLab username.
|
|
170
|
-
- `YOUR_EMAIL`: The email associated with your GitLab account.
|
|
50
|
+
```
|