@fnet/cli 0.45.3 → 0.45.4

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.
@@ -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"),n=require("yargs/helpers"),r=require("fs"),i=require("yaml"),s=require("shelljs"),c=require("@fnet/yaml"),l=require("@fnet/object-from-schema"),p=require("@flownet/lib-render-templates-dir"),d=require("node:fs"),m=require("node:path"),u=require("nunjucks"),f=require("redis"),g=require("@flownet/lib-is-redis-online"),y=require("nanoid"),w=require("@flownet/lib-atom-api-js"),h=require("axios"),b=require("qs"),_=require("lodash.merge"),v=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),x=require("@fnet/yargs-options-from-schema"),k=require("@fnet/shell"),D=require("semver"),A=require("node:os"),P=require("@node-red/util"),S=require("@flownet/lib-to-ios-app"),I=require("lodash.clonedeep"),E=require("@flownet/lib-to-macos-app"),$=require("@flownet/lib-to-electron"),T=require("@flownet/lib-to-webos"),O=require("@flownet/lib-to-nextjs"),C=require("@flownet/lib-to-docker"),M=require("form-data"),R=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-pick-npm-versions"),q=require("chalk");const L=f,N=g;const{Api:U}=w,z=h.default,B=b;const J=_,W=d,K=m,G=v;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,n=K.extname(a);return{file:o,ext:n,ts:".ts"===n||".tsx"===n,name:t}}const X=j;const Y=d,Z=m,Q=p;const V=u,ee=d,te=m,ae=v,oe=j;const ne=d,re=m,ie=p;const se=d,ce=m,le=u,pe=v;const de=d,me=m,ue=u,fe=x;const ge=d,ye=m,we=u;const he=d,be=m,_e=u;const ve=u,je=d,xe=m;const ke=s,De=a;const Ae=s;const Pe=s;const Se=s;const Ie=k,Ee=t;const $e=d,Te=m,Oe=D,Ce=k,Me=t;const Re=d,Fe=m,qe=D,Le=s,Ne=t;const Ue=d,ze=m,Be=A,Je=u,We=P,Ke=t;const Ge=r,He=a,Xe=t;const Ye=t,Ze=S,Qe=I,Ve=D;const et=t,tt=E,at=I,ot=D;const nt=t,rt=$,it=I,st=D;const ct=t,lt=T,pt=I,dt=D;const mt=t,ut=O,ft=I,gt=D;const yt=t,wt=C,ht=I,bt=D;const _t=d,vt=m,jt=D,xt=k,kt=t,Dt=h.default;const At=D,Pt=t,St=h.default;const It=D,Et=t,$t=h.default,Tt=r,Ot=k,Ct=M;const Mt=D,Rt=t,Ft=h.default,qt=r,Lt=k,Nt=M;const Ut=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:n})=>{await e({message:"Deploying it as gitlab project."});const r=t.projectDir;let i="fnet-to-gitlab";const s=o.params.config||"gitlab",c=await Ee({name:s,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${s}`);const{data:l}=c.data;i+=` --projectGroupId=${l.projectGroupId}`,i+=` --projectPath='${r}'`,i+=` --projectName='${o.params.name}'`,i+=` --projectBranch='${o.params.branch||"main"}'`,i+=` --gitlabHost='${l.gitlabHost}'`,i+=` --gitlabToken='${l.gitlabToken}'`,i+=` --gitlabUsername='${l.gitlabUsername}'`,i+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await Ie({cmd:i}),a.isDirty=!0)},zt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:n})=>{await e({message:"Deploying it as gcs package."});const r=t.projectDir,i=Te.resolve(r,"package.json"),s=$e.readFileSync(i),c=JSON.parse(s);c.name=o.params.name,c.version=Oe.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,$e.writeFileSync(i,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Me({name:o.config||"gcs",dir:t.projectDir});let d="fnet-files-to-gcs";d+=` --projectId='${p.env.GCS_PROJECT_ID}'`,d+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,d+=` --keyFilename='${Te.resolve(Te.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${r}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(d+=` --domain='${p.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(d+=" --dryRun"),await Ce({cmd:d}),$e.writeFileSync(i,s),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=c.version,await n({target:o,packageJSON:c}))},Bt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:n})=>{await t({message:"Deploying it as npm package."});const r=a.projectDir,i=Fe.resolve(r,"package.json"),s=Re.readFileSync(i),c=JSON.parse(s);c.name=n.params.name,c.version=qe.inc(n.params.version,"patch");const l=n.params.bin?.name||n.params.bin;!1!==n.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Re.writeFileSync(i,JSON.stringify(c,null,"\t"));const p=(await Ne({name:a.npmConfig||"npm",dir:a.projectDir}))?.data;if(Re.writeFileSync(Fe.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===n.dryRun)return;if(0!==Le.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");Re.writeFileSync(i,s),o.isDirty=!0,n.params.version=c.version},Jt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:n,buildId:r,packageDependencies:i,njEnv:s})=>{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"===n.deploy.template)d={atom:e,packageDependencies:i,red:{tab:{id:n.deploy.id||We.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${e.name}/${n.deploy.name||n.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(),...n.params?.inject,payload:"json"===n.params?.inject?.payloadType?`'${JSON.stringify(n.params?.inject?.payload)}'`:n.params?.inject?.payload},debug:{id:We.util.generateId()}}};else if("cronjob"===n.deploy.template){let t=n.params?.schedules?cloneDeep(n.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:i,red:{tab:{id:n.deploy.id||We.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${n.deploy.name||n.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"!==n.deploy.template)return;d={atom:e,packageDependencies:i,red:{tab:{id:n.deploy.id||We.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${n.deploy.name||n.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:n.params.method||"get",url:n.params.url},httpout:{id:We.util.generateId()},debug:{id:We.util.generateId()}}}}let m=Je.compile(Ue.readFileSync(ze.resolve(l,`deploy/node-red/${n.deploy.template}.yaml.njk`),"utf8"),s).render(d);if(Ue.writeFileSync(ze.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===n.dryRun)return;o.isDirty=!0;const u=(await Ke({name:a.redConfig||"red",dir:a.projectDir}))?.data,f=n.deploy.url||u.env.RED_URL,g={};if(!1!==n.deploy.auth&&(g.Authorization="Bearer "+atomAccessToken),n.deploy.id)!0===n.actions?.delete?(await axios({method:"DELETE",url:`${f}/flow/${n.deploy.id}`,headers:g}),delete n.actions.delete,delete n.deploy.id,n.enabled=!1):await axios({method:"PUT",url:`${f}/flow/${n.deploy.id}`,data:m,headers:g});else{const e=await axios({method:"POST",url:`${f}/flow`,data:m,headers:g});n.deploy.id=e.data.id}},Wt=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:n,deploymentProject:r,deploymentProjectTarget:i})=>{await a({message:"Deploying it as workflow lib."});const s=(await Xe({name:"atom",dir:o.projectDir}))?.data;let c,l,p,d=i.deploy.name.split("/");if(1===d.length)l=s.env.ATOM_LIBRARIES_ID,p=i.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:s.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===i.dryRun)return;if(r.isDirty=!0,i.deploy.id){if(c=await t.get({id:i.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;i.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=n,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},Kt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n})=>{a&&await a({message:"Deploying it as ios-app package."});const r=t?.config?await Ye({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=Ve.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=Qe(t.params);s.dependencies=Qe(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await Ze(c)}},Gt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n})=>{a&&await a({message:"Deploying it as macos-app package."});const r=t?.config?await et({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=ot.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=at(t.params);s.dependencies=at(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await tt(c)}},Ht=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n})=>{a&&await a({message:"Deploying it as electron package."});const r=t?.config?await nt({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=st.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=it(t.params);s.dependencies=it(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await rt(c)}},Xt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n})=>{a&&await a({message:"Deploying it as webos package."});const r=t?.config?await ct({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=dt.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=pt(t.params);s.dependencies=pt(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await lt(c)}},Yt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n})=>{a&&await a({message:"Deploying it as nextjs package."});const r=t?.config?await mt({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=gt.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=ft(t.params);s.dependencies=ft(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await ut(c)}},Zt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n})=>{a&&await a({message:"Deploying it as docker package."});const r=t?.config?await yt({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=bt.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=ht(t.params);s.dependencies=ht(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await wt(c)}},Qt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:n})=>{await e({message:"Deploying it as fnet package."});const r=t.projectDir,i=vt.resolve(r,"package.json"),s=_t.readFileSync(i),c=JSON.parse(s);c.name=o.params.name,c.version=jt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,_t.writeFileSync(i,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await kt({name:o.config||"fnet-package",dir:t.projectDir});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 f=await Dt({method:"POST",url:d,data:{username:m,password:u},headers:{"Content-Type":"application/json"}});const g=f.data?.access_token;if(!g)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='${r}'`,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(i,s),!0===o.dryRun)return;a.isDirty=!0,o.params.version=c.version;const w=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(f=await Dt({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}`}}),f.data?.error)throw new Error("Failed to publish fnet package.")},Vt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{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});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 s=`${i.env.ATOM_API_URL}/v1/auth/token`,c=i.env.ATOM_API_USERNAME,l=i.env.ATOM_API_PASSWORD;let p=await St({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);a.isDirty=!0,o.params.version=n;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await St({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 ${d}`}}),p.data?.error)throw new Error("Error publishing fnet form.")},ea=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{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});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 s=`${i.env.ATOM_API_URL}/v1/auth/token`,c=i.env.ATOM_API_USERNAME,l=i.env.ATOM_API_PASSWORD;let p=await $t({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);a.isDirty=!0,o.params.version=n;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await $t({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 ${d}`}}),p.data?.error)throw new Error("Error publishing fnet flow.");const u=p.data?.upload.id;let f="fnet-dir-zipper";f+=` --sourceDir='${t.project.projectDir}'`,f+=" -p=**/*",f+=" -g",f+=" --stdout_format=json";const g=await Ot({cmd:f});if(0!==g.code)throw new Error(g.stderr);const y=JSON.parse(g.stdout).path;let w=new Ct;w.append("file",Tt.createReadStream(y));const h=await $t.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(h.data?.error)throw new Error("Error uploading fnet flow.")},ta=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet node."});const n=Mt.inc(o.params.version,"patch"),{file:r,data:i}=await Rt({name:o.config||"fnet-node",dir:t.project.projectDir});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 s=`${i.env.ATOM_API_URL}/v1/auth/token`,c=i.env.ATOM_API_USERNAME,l=i.env.ATOM_API_PASSWORD;let p=await Ft({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);a.isDirty=!0,o.params.version=n;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await Ft({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 ${d}`}}),p.data?.error)throw new Error("Error publishing fnet node.");const u=p.data?.upload.id;let f="fnet-dir-zipper";f+=` --sourceDir='${t.project.projectDir}'`,f+=" -p=**/*",f+=" -g",f+=" --stdout_format=json";const g=await Lt({cmd:f});if(0!==g.code)throw new Error(g.stderr);const y=JSON.parse(g.stdout).path;let w=new Nt;w.append("file",qt.createReadStream(y));const h=await Ft.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(h.data?.error)throw new Error("Error uploading fnet node.")};const aa=d,oa=m,na=i,ra=s,ia=u,sa=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:ca}=y,la=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)}))}))}},pa=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),n=H({dir:K.resolve(o,"./app")});if(n.file){let e=await G({file:n.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:n.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.app_entry_uses_jsx=t,a.app_entry_is_ts=n.ts,a.app_entry_ext=n.ext}const r=H({dir:K.resolve(o,"./cli")});if(r.file){let e=await G({file:r.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:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.cli_entry_uses_jsx=t,a.cli_entry_is_ts=r.ts,a.cli_entry_ext=r.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 i=!0===a.app_has_entry||!0===a.src_uses_jsx,s=!0===a.cli_has_entry||!0===a.src_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:i}:a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:i,...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:s}:a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:s,...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:!0,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=a.babel_options||a.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},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.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,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},da=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"}),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"})),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.1"}),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.copy_enabled&&(a.push({package:"rollup-plugin-copy",version:"^3"}),a.push({package:"chokidar",version:"^3"}))},ma=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const n={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o,ts:Date.now()},r=a.templateDir,i=Z.resolve(a.projectDir,"src/app");Y.existsSync(i)||Y.mkdirSync(i,{recursive:!0}),await Q({pattern:["index.html.njk","index.js.njk"],dir:Z.resolve(r,"src/app"),outDir:i,context:n})},ua=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:n})=>{await n({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 r=a.find((e=>"react"===e.package)),i=a.find((e=>"react-dom"===e.package));r&&!i?a.push({package:"react-dom",version:r.version}):r&&i&&(i.version=r.version),r&&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 s=[];!0===e.doc.features.app.enabled&&s.push({file:te.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&s.push({file:te.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of s){const n=t.file;if(!ee.existsSync(n))throw new Error(`App file not found: ${n}`);const r=await ae({file:n,recursive:!0}),i=!0===e.doc.features.all_parsed_imports?r.all:r.required;for await(const e of i){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const n=(await oe({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?o:a).push({package:e.package,subpath:e.subpath,version:`^${n}`,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")},fa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const n={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o},r=a.templateDir,i=re.resolve(a.projectDir,"src/cli");ne.existsSync(i)||ne.mkdirSync(i,{recursive:!0}),await ie({pattern:["index.js.njk"],dir:re.resolve(r,"src/cli"),outDir:i,context:n})},ga=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const n={atom:e,packageDependencies:o},r=ce.resolve(a.projectDir,"src","default/index.js");if(!se.existsSync(r))throw new Error(`Entry file not found: ${r}`);const i=(await pe({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),s=e.doc.features.rollup_output,c=Object.keys(s);for(let e=0;e<c.length;e++){const t=s[c[e]];if(!0===t.browser&&i.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(i.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<i.length;e++){const a=i[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(i)}}const l=a.templateCommonDir;let p=le.compile(se.readFileSync(ce.resolve(l,"rollup.config.mjs.njk"),"utf8"),le.configure(l)).render(n);const d=a.projectDir;let m=ce.resolve(d,"rollup.config.mjs");se.writeFileSync(m,p,"utf8")},ya=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let n={};const r=e.doc.inputs||[],i=[],s=e.doc.input;s?n=await fe({schema:s}):r.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&i.push(e);const t={};e.type&&(t.type=e.type),e.default&&(t.default=e.default),e.choices&&(t.choices=e.choices),(e.describe||e.description)&&(t.describe=e.describe||e.description),e.alias&&(t.alias=e.alias),!0===e.required&&(t.required=!0),!0===e.hidden&&(t.hidden=!0),!0===e.array&&(t.array=!0),!0===e.normalize&&(t.normalize=!0),e.nargs&&(t.nargs=e.nargs),n[e.name]=t}));const c={options:n,imports:i,atom:e},l=a.templateDir,p=ue.compile(de.readFileSync(me.resolve(l,"src/default/to.yargs.js.njk"),"utf8"),o).render(c),d=a.projectDir,m=me.resolve(d,"src/default/to.yargs.js");de.writeFileSync(m,p,"utf8")},wa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const n={atom:e,packageDependencies:o},r=a.templateCommonDir,i=we.compile(ge.readFileSync(ye.resolve(r,".gitignore.njk"),"utf8"),we.configure(r)).render(n),s=a.projectDir,c=ye.resolve(s,".gitignore");ge.writeFileSync(c,i,"utf8")},ha=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const n={atom:e,packageDependencies:o},r=a.templateCommonDir,i=_e.compile(he.readFileSync(be.resolve(r,"tsconfig.json.njk"),"utf8"),_e.configure(r)).render(n),s=a.projectDir,c=be.resolve(s,"tsconfig.json");he.writeFileSync(c,i,"utf8")},ba=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const n="readme.md",r=`Creating ${n}`;if(await a({message:r}),t.project?.readme){const e={content:t.project.readme.doc.content},a=t.templateCommonDir,o=ve.compile(je.readFileSync(xe.resolve(a,`${n}.njk`),"utf8"),ve.configure(a)).render(e),r=t.projectDir,i=xe.resolve(r,`${n}`);je.writeFileSync(i,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:r,...i}=a.doc,s={content:r},c=t.templateCommonDir,l=ve.compile(je.readFileSync(xe.resolve(c,`${n}.njk`),"utf8"),ve.configure(c)).render(s),p=t.projectDir,d=xe.resolve(p,`${n}`);je.writeFileSync(d,l,"utf8")}},_a=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.")},va=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.")},ja=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.")},xa=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.")},ka=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:n,setInProgress:r,deploymentProject:i}=e;if(!0===n.enabled)if("lib"===n.name)await Wt({...e});else if("red"===n.name)await Jt({...e});else if("npm"===n.name)await Bt({...e});else if("gcs"===n.name)await zt({...e});else if("gitlab"===n.name)await Ut({...e});else if("fnet-package"===n.name)await Qt({...e});else if("fnet-form"===n.name)await Vt({...e});else if("fnet-node"===n.name)await ta({...e});else if("fnet-flow"===n.name)await ea({...e});else{let e;if("nextjs"===n.name?e=Yt:"webos"===n.name?e=Xt:"electron"===n.name?e=Ht:"docker"===n.name?e=Zt:"ios"===n.name?e=Kt:"macos"===n.name&&(e=Gt),!e)return;await e({atom:t,target:n,onProgress:r,projectDir:o.projectDir,dependencies:a}),i.isDirty=!0}},{Atom:Da}=w,Aa=R,Pa=t,Sa=v,Ia=F,Ea=q;var $a=class{#e;#t;#a;#o;#n;#r;#i;#s;#c;#l;#p;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new la,this.#t=e,this.#r=[],this.#i=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#r,packageDevDependencies:this.#i,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Da,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 sa(),this.#c=this.#t.buildId||ca(24),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#f=["all","deploy","build"].includes(this.#m),this.#g=["all","deploy"].includes(this.#m),this.#p=this.#t.protocol,this.#l="BUILD:"+this.#c,this.#d=(await Pa({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await pa(this.#y),await da(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.#s=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#s)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await Da.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"];aa.existsSync(e)&&aa.readdirSync(e).forEach((o=>{a.includes(o)||(t=ra.rm("-rf",oa.join(e,o)))}));let o=e;if(!aa.existsSync(o)&&(t=ra.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=oa.join(e,"src"),!aa.existsSync(o)&&(t=ra.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=oa.join(e,"src","default"),!aa.existsSync()&&(t=ra.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=ia.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.#n=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#r})}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],n=await this.findAtomLibrary({url:o.name});o.atom=n;const r=n.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));r?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=Aa({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 Da.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await Da.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Da.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=oa.resolve(this.#t.projectSrcDir,"index.js"),a=await Sa({file:t,recursive:!0}),o=e.doc.dependencies,n=!0===this.#a.doc.features.all_parsed_imports?a.all:a.required;for await(const e of n){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await Ia({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=oa.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=oa.relative(oa.join(this.#t.projectDir,"src","default"),e);if(!aa.existsSync(e)){aa.mkdirSync(oa.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",aa.writeFileSync(e,t,"utf8")}a.relativePath=t.split(oa.sep).join("/"),this.#a.typesDir=`./types/${oa.basename(o)}/src`}else{const e=oa.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;aa.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#n.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},t=this.#t.templateDir,a=ia.compile(aa.readFileSync(oa.resolve(t,oa.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,n=oa.resolve(o,oa.join("src","default","index.js"));aa.writeFileSync(n,a,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:a,...o}=this.#a.doc,n={content:na.stringify(o)},r=this.#t.templateDir,i=ia.compile(aa.readFileSync(oa.resolve(r,`${e}.njk`),"utf8"),this.#o).render(n),s=this.#t.projectDir,c=oa.resolve(s,`${e}`);aa.writeFileSync(c,i,"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 Da.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 Da.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,a=t.doc.targets||[];for(let e=0;e<a.length;e++){const o=a[e];await ka({...this.#y,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await Da.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await Da.update(o,{id:o.id})):o=await Da.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(Ea.blue(e)),await this._cache_set(this.#l,{status:"IN_PROGRESS",message:e})}async build(){try{this.#u&&(await this.createAtomLibFiles({libs:this.#n}),await this.createEngine(),await this.createProjectYaml(),await ba(this.#y),await ha(this.#y),await wa(this.#y),await ya(this.#y),await fa(this.#y),await ma(this.#y),await ga(this.#y),await ua(this.#y),await _a(this.#y),await va(this.#y),this.#f&&(await ja(this.#y),await xa(this.#y),this.#g&&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 Ta=d,Oa=m;var Ca=function({baseDir:e=__dirname}){let t=e;for(;t!==Oa.parse(t).root;){const e=Oa.join(t,"node_modules");if(Ta.existsSync(e))return e;t=Oa.dirname(t)}return null};const Ma=process.cwd(),{spawn:Ra}=e;t({name:["redis"],dir:Ma,optional:!0});const Fa=a,qa=o,{hideBin:La}=n,Na=r,Ua=i,za=s,Ba=c,Ja=t,Wa=l,Ka=p,Ga=$a,Ha=Ca({baseDir:__dirname}),Xa="win32"===process.platform?";":":";process.env.PATH=`${Fa.join(Ha,"/.bin")}${Xa}${process.env.PATH}`;let Ya=qa(La(process.argv)).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=Fa.resolve(Ha,"@fnet/cli-project-node/dist/template/project"),a=Fa.resolve(Ma,e.name);Na.existsSync(a)||Na.mkdirSync(a),await Ka({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=za.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(za.which("git")&&(o=za.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(za.which("code")&&e.vscode&&(o=za.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=Fa.resolve(Ha,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=Fa.basename(a),e.update){if(await Ka({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==za.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",alias:"m",default:"build",choices:["all","file","build","deploy","bpmn"]})),(async e=>{try{const t=await Qa(e),a=new Ga(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"})),(async e=>{try{const t=await Qa({...e,mode:"all"}),a=new Ga(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"})),(async e=>{try{const t=await Qa({...e,mode:"file"}),a=new Ga(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 Za(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 Qa(e),{projectDir:n}=t,r=process.argv.slice(3);Ra(a,[...o,...r],{cwd:n,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Qa(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Fa.resolve(Ha,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Fa.resolve(Ha,"./@fnet/cli-project-common/dist/template/default"),projectDir:Fa.resolve(Ma,`./.output/${e.id}`)};{const t=await async function(){const e=Fa.resolve(Ma,"node.yaml");if(!Na.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Na.readFileSync(e,"utf8"),{parsed:a}=await Ba({content:t}),o=Fa.dirname(e),n={libraryAtom:{doc:{...a},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},r=Fa.resolve(o,"node.devops.yaml");if(Na.existsSync(r)){const e=Na.readFileSync(r,"utf8"),t=Ua.parse(e);n.devops={filePath:r,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Na.writeFileSync(n.devops.filePath,Ua.stringify(n.devops.doc))}}}const i=Fa.resolve(o,"readme.md");if(Na.existsSync(i)){const e=Na.readFileSync(i,"utf8");n.readme={filePath:i,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return n}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Fa.resolve(Ha,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Fa.resolve(Ha,"./@fnet/cli-project-common/dist/template/default"),projectDir:Fa.resolve(t.projectDir,"./.workspace"),projectSrcDir:Fa.resolve(t.projectDir,"./src"),project:t}}}Ya=Ya.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Qa(e),{project:a}=t,{projectDir:o,projectFileParsed:n}=a,r=n.config;if(!r)throw new Error("Config schema not found in project file.");const i=await Wa({schema:r}),s=Fa.resolve(o,".fnet");Na.existsSync(s)||Na.mkdirSync(s);const c=Fa.resolve(s,`${e.name}.fnet`);Na.writeFileSync(c,Ua.stringify(i))}catch(e){console.error(e.message),process.exit(1)}})),Ya=Za(Ya,{bin:"npm"}),Ya=Za(Ya,{bin:"node"}),Ya=Za(Ya,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Ya=Za(Ya,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Ya=Za(Ya,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Ya=Za(Ya,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Ya=Za(Ya,{bin:"npx"}),Ya=Za(Ya,{bin:"cdk"}),Ya=Za(Ya,{bin:"aws"}),Ya=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 Qa(e),{projectDir:o}=t,n=e.config,r=await Ja({name:n,dir:o,transferEnv:!1,optional:!0}),i=r?.data?.env||void 0,s=e.command,c=process.argv.slice(5);Ra(s,[...a,...c],{cwd:o,stdio:"inherit",shell:!0,env:{...process.env,...i}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(Ya,{name:"with"}),Ya.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"),n=require("yargs/helpers"),r=require("fs"),i=require("yaml"),s=require("shelljs"),c=require("@fnet/yaml"),l=require("@fnet/object-from-schema"),p=require("@flownet/lib-render-templates-dir"),d=require("node:fs"),m=require("node:path"),u=require("nunjucks"),f=require("redis"),g=require("@flownet/lib-is-redis-online"),y=require("nanoid"),w=require("@flownet/lib-atom-api-js"),h=require("axios"),b=require("qs"),_=require("lodash.merge"),v=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),x=require("@fnet/yargs-options-from-schema"),k=require("@fnet/shell"),D=require("semver"),A=require("node:os"),P=require("@node-red/util"),S=require("@flownet/lib-to-ios-app"),I=require("lodash.clonedeep"),E=require("@flownet/lib-to-macos-app"),$=require("@flownet/lib-to-electron"),T=require("@flownet/lib-to-webos"),O=require("@flownet/lib-to-nextjs"),C=require("@flownet/lib-to-docker"),R=require("form-data"),M=require("@flownet/lib-parse-node-url"),q=require("@flownet/lib-pick-npm-versions"),F=require("chalk");const L=f,N=g;const{Api:U}=w,z=h.default,B=b;const J=_,W=d,K=m,G=v;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,n=K.extname(a);return{file:o,ext:n,ts:".ts"===n||".tsx"===n,name:t}}const X=j;const Y=d,Z=m,Q=p;const V=u,ee=d,te=m,ae=v,oe=j;const ne=d,re=m,ie=p;const se=d,ce=m,le=u,pe=v;const de=d,me=m,ue=u,fe=x;const ge=d,ye=m,we=u;const he=d,be=m,_e=u;const ve=u,je=d,xe=m;const ke=s,De=a;const Ae=s;const Pe=s;const Se=s;const Ie=k,Ee=t;const $e=d,Te=m,Oe=D,Ce=k,Re=t;const Me=d,qe=m,Fe=D,Le=s,Ne=t;const Ue=d,ze=m,Be=A,Je=u,We=P,Ke=t;const Ge=r,He=a,Xe=t;const Ye=t,Ze=S,Qe=I,Ve=D;const et=t,tt=E,at=I,ot=D;const nt=t,rt=$,it=I,st=D;const ct=t,lt=T,pt=I,dt=D;const mt=t,ut=O,ft=I,gt=D;const yt=t,wt=C,ht=I,bt=D;const _t=d,vt=m,jt=D,xt=k,kt=t,Dt=h.default;const At=D,Pt=t,St=h.default;const It=D,Et=t,$t=h.default,Tt=r,Ot=k,Ct=R;const Rt=D,Mt=t,qt=h.default,Ft=r,Lt=k,Nt=R;const Ut=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:n})=>{await e({message:"Deploying it as gitlab project."});const r=t.projectDir;let i="fnet-to-gitlab";const s=o.params.config||"gitlab",c=await Ee({name:s,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${s}`);const{data:l}=c.data;i+=` --projectGroupId=${l.projectGroupId}`,i+=` --projectPath='${r}'`,i+=` --projectName='${o.params.name}'`,i+=` --projectBranch='${o.params.branch||"main"}'`,i+=` --gitlabHost='${l.gitlabHost}'`,i+=` --gitlabToken='${l.gitlabToken}'`,i+=` --gitlabUsername='${l.gitlabUsername}'`,i+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await Ie({cmd:i}),a.isDirty=!0)},zt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:n})=>{await e({message:"Deploying it as gcs package."});const r=t.projectDir,i=Te.resolve(r,"package.json"),s=$e.readFileSync(i),c=JSON.parse(s);c.name=o.params.name,c.version=Oe.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,$e.writeFileSync(i,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Re({name:o.config||"gcs",dir:t.projectDir});let d="fnet-files-to-gcs";d+=` --projectId='${p.env.GCS_PROJECT_ID}'`,d+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,d+=` --keyFilename='${Te.resolve(Te.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${r}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(d+=` --domain='${p.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(d+=" --dryRun"),await Ce({cmd:d}),$e.writeFileSync(i,s),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=c.version,await n({target:o,packageJSON:c}))},Bt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:n})=>{await t({message:"Deploying it as npm package."});const r=a.projectDir,i=qe.resolve(r,"package.json"),s=Me.readFileSync(i),c=JSON.parse(s);c.name=n.params.name,c.version=Fe.inc(n.params.version,"patch");const l=n.params.bin?.name||n.params.bin;!1!==n.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Me.writeFileSync(i,JSON.stringify(c,null,"\t"));const p=(await Ne({name:a.npmConfig||"npm",dir:a.projectDir}))?.data;if(Me.writeFileSync(qe.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===n.dryRun)return;if(0!==Le.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");Me.writeFileSync(i,s),o.isDirty=!0,n.params.version=c.version},Jt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:n,buildId:r,packageDependencies:i,njEnv:s})=>{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"===n.deploy.template)d={atom:e,packageDependencies:i,red:{tab:{id:n.deploy.id||We.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${e.name}/${n.deploy.name||n.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(),...n.params?.inject,payload:"json"===n.params?.inject?.payloadType?`'${JSON.stringify(n.params?.inject?.payload)}'`:n.params?.inject?.payload},debug:{id:We.util.generateId()}}};else if("cronjob"===n.deploy.template){let t=n.params?.schedules?cloneDeep(n.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:i,red:{tab:{id:n.deploy.id||We.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${n.deploy.name||n.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"!==n.deploy.template)return;d={atom:e,packageDependencies:i,red:{tab:{id:n.deploy.id||We.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${n.deploy.name||n.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:n.params.method||"get",url:n.params.url},httpout:{id:We.util.generateId()},debug:{id:We.util.generateId()}}}}let m=Je.compile(Ue.readFileSync(ze.resolve(l,`deploy/node-red/${n.deploy.template}.yaml.njk`),"utf8"),s).render(d);if(Ue.writeFileSync(ze.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===n.dryRun)return;o.isDirty=!0;const u=(await Ke({name:a.redConfig||"red",dir:a.projectDir}))?.data,f=n.deploy.url||u.env.RED_URL,g={};if(!1!==n.deploy.auth&&(g.Authorization="Bearer "+atomAccessToken),n.deploy.id)!0===n.actions?.delete?(await axios({method:"DELETE",url:`${f}/flow/${n.deploy.id}`,headers:g}),delete n.actions.delete,delete n.deploy.id,n.enabled=!1):await axios({method:"PUT",url:`${f}/flow/${n.deploy.id}`,data:m,headers:g});else{const e=await axios({method:"POST",url:`${f}/flow`,data:m,headers:g});n.deploy.id=e.data.id}},Wt=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:n,deploymentProject:r,deploymentProjectTarget:i})=>{await a({message:"Deploying it as workflow lib."});const s=(await Xe({name:"atom",dir:o.projectDir}))?.data;let c,l,p,d=i.deploy.name.split("/");if(1===d.length)l=s.env.ATOM_LIBRARIES_ID,p=i.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:s.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===i.dryRun)return;if(r.isDirty=!0,i.deploy.id){if(c=await t.get({id:i.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;i.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=n,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},Kt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n})=>{a&&await a({message:"Deploying it as ios-app package."});const r=t?.config?await Ye({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=Ve.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=Qe(t.params);s.dependencies=Qe(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await Ze(c)}},Gt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n})=>{a&&await a({message:"Deploying it as macos-app package."});const r=t?.config?await et({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=ot.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=at(t.params);s.dependencies=at(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await tt(c)}},Ht=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n})=>{a&&await a({message:"Deploying it as electron package."});const r=t?.config?await nt({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=st.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=it(t.params);s.dependencies=it(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await rt(c)}},Xt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n})=>{a&&await a({message:"Deploying it as webos package."});const r=t?.config?await ct({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=dt.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=pt(t.params);s.dependencies=pt(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await lt(c)}},Yt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n})=>{a&&await a({message:"Deploying it as nextjs package."});const r=t?.config?await mt({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=gt.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=ft(t.params);s.dependencies=ft(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await ut(c)}},Zt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:n})=>{a&&await a({message:"Deploying it as docker package."});const r=t?.config?await yt({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=bt.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=ht(t.params);s.dependencies=ht(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await wt(c)}},Qt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:n})=>{await e({message:"Deploying it as fnet package."});const r=t.projectDir,i=vt.resolve(r,"package.json"),s=_t.readFileSync(i),c=JSON.parse(s);c.name=o.params.name,c.version=jt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,_t.writeFileSync(i,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await kt({name:o.config||"fnet-package",dir:t.projectDir});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 f=await Dt({method:"POST",url:d,data:{username:m,password:u},headers:{"Content-Type":"application/json"}});const g=f.data?.access_token;if(!g)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='${r}'`,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(i,s),!0===o.dryRun)return;a.isDirty=!0,o.params.version=c.version;const w=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(f=await Dt({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}`}}),f.data?.error)throw new Error("Failed to publish fnet package.")},Vt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{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});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 s=`${i.env.ATOM_API_URL}/v1/auth/token`,c=i.env.ATOM_API_USERNAME,l=i.env.ATOM_API_PASSWORD;let p=await St({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);a.isDirty=!0,o.params.version=n;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await St({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 ${d}`}}),p.data?.error)throw new Error("Error publishing fnet form.")},ea=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{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});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 s=`${i.env.ATOM_API_URL}/v1/auth/token`,c=i.env.ATOM_API_USERNAME,l=i.env.ATOM_API_PASSWORD;let p=await $t({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);a.isDirty=!0,o.params.version=n;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await $t({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 ${d}`}}),p.data?.error)throw new Error("Error publishing fnet flow.");const u=p.data?.upload.id;let f="fnet-dir-zipper";f+=` --sourceDir='${t.project.projectDir}'`,f+=" -p=**/*",f+=" -g",f+=" --stdout_format=json";const g=await Ot({cmd:f});if(0!==g.code)throw new Error(g.stderr);const y=JSON.parse(g.stdout).path;let w=new Ct;w.append("file",Tt.createReadStream(y));const h=await $t.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(h.data?.error)throw new Error("Error uploading fnet flow.")},ta=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{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});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 s=`${i.env.ATOM_API_URL}/v1/auth/token`,c=i.env.ATOM_API_USERNAME,l=i.env.ATOM_API_PASSWORD;let p=await qt({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);a.isDirty=!0,o.params.version=n;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await qt({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 ${d}`}}),p.data?.error)throw new Error("Error publishing fnet node.");const u=p.data?.upload.id;let f="fnet-dir-zipper";f+=` --sourceDir='${t.project.projectDir}'`,f+=" -p=**/*",f+=" -g",f+=" --stdout_format=json";const g=await Lt({cmd:f});if(0!==g.code)throw new Error(g.stderr);const y=JSON.parse(g.stdout).path;let w=new Nt;w.append("file",Ft.createReadStream(y));const h=await qt.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(h.data?.error)throw new Error("Error uploading fnet node.")};const aa=d,oa=m,na=i,ra=s,ia=u,sa=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:ca}=y,la=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)}))}))}},pa=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),n=H({dir:K.resolve(o,"./app")});if(n.file){let e=await G({file:n.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:n.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.app_entry_uses_jsx=t,a.app_entry_is_ts=n.ts,a.app_entry_ext=n.ext}const r=H({dir:K.resolve(o,"./cli")});if(r.file){let e=await G({file:r.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:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.cli_entry_uses_jsx=t,a.cli_entry_is_ts=r.ts,a.cli_entry_ext=r.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 i=!0===a.app_has_entry||!0===a.src_uses_jsx,s=!0===a.cli_has_entry||!0===a.src_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:i}:a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:i,...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:s}:a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:s,...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=a.babel_options||a.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},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.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,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},da=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"}),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"})),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.1"}),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.copy_enabled&&(a.push({package:"rollup-plugin-copy",version:"^3"}),a.push({package:"chokidar",version:"^3"}))},ma=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const n={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o,ts:Date.now()},r=a.templateDir,i=Z.resolve(a.projectDir,"src/app");Y.existsSync(i)||Y.mkdirSync(i,{recursive:!0}),await Q({pattern:["index.html.njk","index.js.njk"],dir:Z.resolve(r,"src/app"),outDir:i,context:n})},ua=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:n})=>{await n({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 r=a.find((e=>"react"===e.package)),i=a.find((e=>"react-dom"===e.package));r&&!i?a.push({package:"react-dom",version:r.version}):r&&i&&(i.version=r.version),r&&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 s=[];!0===e.doc.features.app.enabled&&s.push({file:te.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&s.push({file:te.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of s){const n=t.file;if(!ee.existsSync(n))throw new Error(`App file not found: ${n}`);const r=await ae({file:n,recursive:!0}),i=!0===e.doc.features.all_parsed_imports?r.all:r.required;for await(const e of i){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const n=(await oe({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?o:a).push({package:e.package,subpath:e.subpath,version:`^${n}`,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")},fa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const n={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o},r=a.templateDir,i=re.resolve(a.projectDir,"src/cli");ne.existsSync(i)||ne.mkdirSync(i,{recursive:!0}),await ie({pattern:["index.js.njk"],dir:re.resolve(r,"src/cli"),outDir:i,context:n})},ga=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const n={atom:e,packageDependencies:o},r=ce.resolve(a.projectDir,"src","default/index.js");if(!se.existsSync(r))throw new Error(`Entry file not found: ${r}`);const i=(await pe({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),s=e.doc.features.rollup_output,c=Object.keys(s);for(let e=0;e<c.length;e++){const t=s[c[e]];if(!0===t.browser&&i.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(i.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<i.length;e++){const a=i[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(i)}}const l=a.templateCommonDir;let p=le.compile(se.readFileSync(ce.resolve(l,"rollup.config.mjs.njk"),"utf8"),le.configure(l)).render(n);const d=a.projectDir;let m=ce.resolve(d,"rollup.config.mjs");se.writeFileSync(m,p,"utf8")},ya=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let n={};const r=e.doc.inputs||[],i=[],s=e.doc.input;s?n=await fe({schema:s}):r.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&i.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),n[e.name]=t}));const c={options:n,imports:i,atom:e},l=a.templateDir,p=ue.compile(de.readFileSync(me.resolve(l,"src/default/to.yargs.js.njk"),"utf8"),o).render(c),d=a.projectDir,m=me.resolve(d,"src/default/to.yargs.js");de.writeFileSync(m,p,"utf8")},wa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const n={atom:e,packageDependencies:o},r=a.templateCommonDir,i=we.compile(ge.readFileSync(ye.resolve(r,".gitignore.njk"),"utf8"),we.configure(r)).render(n),s=a.projectDir,c=ye.resolve(s,".gitignore");ge.writeFileSync(c,i,"utf8")},ha=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const n={atom:e,packageDependencies:o},r=a.templateCommonDir,i=_e.compile(he.readFileSync(be.resolve(r,"tsconfig.json.njk"),"utf8"),_e.configure(r)).render(n),s=a.projectDir,c=be.resolve(s,"tsconfig.json");he.writeFileSync(c,i,"utf8")},ba=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const n="readme.md",r=`Creating ${n}`;if(await a({message:r}),t.project?.readme){const e={content:t.project.readme.doc.content},a=t.templateCommonDir,o=ve.compile(je.readFileSync(xe.resolve(a,`${n}.njk`),"utf8"),ve.configure(a)).render(e),r=t.projectDir,i=xe.resolve(r,`${n}`);je.writeFileSync(i,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:r,...i}=a.doc,s={content:r},c=t.templateCommonDir,l=ve.compile(je.readFileSync(xe.resolve(c,`${n}.njk`),"utf8"),ve.configure(c)).render(s),p=t.projectDir,d=xe.resolve(p,`${n}`);je.writeFileSync(d,l,"utf8")}},_a=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.")},va=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.")},ja=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.")},xa=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.")},ka=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:n,setInProgress:r,deploymentProject:i}=e;if(!0===n.enabled)if("lib"===n.name)await Wt({...e});else if("red"===n.name)await Jt({...e});else if("npm"===n.name)await Bt({...e});else if("gcs"===n.name)await zt({...e});else if("gitlab"===n.name)await Ut({...e});else if("fnet-package"===n.name)await Qt({...e});else if("fnet-form"===n.name)await Vt({...e});else if("fnet-node"===n.name)await ta({...e});else if("fnet-flow"===n.name)await ea({...e});else{let e;if("nextjs"===n.name?e=Yt:"webos"===n.name?e=Xt:"electron"===n.name?e=Ht:"docker"===n.name?e=Zt:"ios"===n.name?e=Kt:"macos"===n.name&&(e=Gt),!e)return;await e({atom:t,target:n,onProgress:r,projectDir:o.projectDir,dependencies:a}),i.isDirty=!0}},{Atom:Da}=w,Aa=M,Pa=t,Sa=v,Ia=q,Ea=F;var $a=class{#e;#t;#a;#o;#n;#r;#i;#s;#c;#l;#p;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new la,this.#t=e,this.#r=[],this.#i=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#r,packageDevDependencies:this.#i,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Da,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 sa(),this.#c=this.#t.buildId||ca(24),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#f=["all","deploy","build"].includes(this.#m),this.#g=["all","deploy"].includes(this.#m),this.#p=this.#t.protocol,this.#l="BUILD:"+this.#c,this.#d=(await Pa({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await pa(this.#y),await da(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.#s=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#s)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await Da.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"];aa.existsSync(e)&&aa.readdirSync(e).forEach((o=>{a.includes(o)||(t=ra.rm("-rf",oa.join(e,o)))}));let o=e;if(!aa.existsSync(o)&&(t=ra.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=oa.join(e,"src"),!aa.existsSync(o)&&(t=ra.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=oa.join(e,"src","default"),!aa.existsSync()&&(t=ra.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=ia.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.#n=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#r})}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],n=await this.findAtomLibrary({url:o.name});o.atom=n;const r=n.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));r?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=Aa({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 Da.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await Da.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Da.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=oa.resolve(this.#t.projectSrcDir,"index.js"),a=await Sa({file:t,recursive:!0}),o=e.doc.dependencies,n=!0===this.#a.doc.features.all_parsed_imports?a.all:a.required;for await(const e of n){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await Ia({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=oa.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=oa.relative(oa.join(this.#t.projectDir,"src","default"),e);if(!aa.existsSync(e)){aa.mkdirSync(oa.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",aa.writeFileSync(e,t,"utf8")}a.relativePath=t.split(oa.sep).join("/"),this.#a.typesDir=`./types/${oa.basename(o)}/src`}else{const e=oa.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;aa.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#n.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},t=this.#t.templateDir,a=ia.compile(aa.readFileSync(oa.resolve(t,oa.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,n=oa.resolve(o,oa.join("src","default","index.js"));aa.writeFileSync(n,a,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:a,...o}=this.#a.doc,n={content:na.stringify(o)},r=this.#t.templateDir,i=ia.compile(aa.readFileSync(oa.resolve(r,`${e}.njk`),"utf8"),this.#o).render(n),s=this.#t.projectDir,c=oa.resolve(s,`${e}`);aa.writeFileSync(c,i,"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 Da.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 Da.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,a=t.doc.targets||[];for(let e=0;e<a.length;e++){const o=a[e];await ka({...this.#y,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await Da.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await Da.update(o,{id:o.id})):o=await Da.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(Ea.blue(e)),await this._cache_set(this.#l,{status:"IN_PROGRESS",message:e})}async build(){try{this.#u&&(await this.createAtomLibFiles({libs:this.#n}),await this.createEngine(),await this.createProjectYaml(),await ba(this.#y),await ha(this.#y),await wa(this.#y),await ya(this.#y),await fa(this.#y),await ma(this.#y),await ga(this.#y),await ua(this.#y),await _a(this.#y),await va(this.#y),this.#f&&(await ja(this.#y),await xa(this.#y),this.#g&&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 Ta=d,Oa=m;var Ca=function({baseDir:e=__dirname}){let t=e;for(;t!==Oa.parse(t).root;){const e=Oa.join(t,"node_modules");if(Ta.existsSync(e))return e;t=Oa.dirname(t)}return null};const Ra=process.cwd(),{spawn:Ma}=e;t({name:["redis"],dir:Ra,optional:!0});const qa=a,Fa=o,{hideBin:La}=n,Na=r,Ua=i,za=s,Ba=c,Ja=t,Wa=l,Ka=p,Ga=$a,Ha=Ca({baseDir:__dirname}),Xa="win32"===process.platform?";":":";process.env.PATH=`${qa.join(Ha,"/.bin")}${Xa}${process.env.PATH}`;let Ya=Fa(La(process.argv)).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=qa.resolve(Ha,"@fnet/cli-project-node/dist/template/project"),a=qa.resolve(Ra,e.name);Na.existsSync(a)||Na.mkdirSync(a),await Ka({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=za.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(za.which("git")&&(o=za.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(za.which("code")&&e.vscode&&(o=za.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=qa.resolve(Ha,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=qa.basename(a),e.update){if(await Ka({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==za.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",alias:"m",default:"build",choices:["all","file","build","deploy","bpmn"]})),(async e=>{try{const t=await Qa(e),a=new Ga(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"})),(async e=>{try{const t=await Qa({...e,mode:"all"}),a=new Ga(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"})),(async e=>{try{const t=await Qa({...e,mode:"file"}),a=new Ga(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 Za(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 Qa(e),{projectDir:n}=t,r=process.argv.slice(3);Ma(a,[...o,...r],{cwd:n,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Qa(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:qa.resolve(Ha,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:qa.resolve(Ha,"./@fnet/cli-project-common/dist/template/default"),projectDir:qa.resolve(Ra,`./.output/${e.id}`)};{const t=await async function(){const e=qa.resolve(Ra,"node.yaml");if(!Na.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Na.readFileSync(e,"utf8"),{parsed:a}=await Ba({content:t}),o=qa.dirname(e),n={libraryAtom:{doc:{...a},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},r=qa.resolve(o,"node.devops.yaml");if(Na.existsSync(r)){const e=Na.readFileSync(r,"utf8"),t=Ua.parse(e);n.devops={filePath:r,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Na.writeFileSync(n.devops.filePath,Ua.stringify(n.devops.doc))}}}const i=qa.resolve(o,"readme.md");if(Na.existsSync(i)){const e=Na.readFileSync(i,"utf8");n.readme={filePath:i,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return n}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:qa.resolve(Ha,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:qa.resolve(Ha,"./@fnet/cli-project-common/dist/template/default"),projectDir:qa.resolve(t.projectDir,"./.workspace"),projectSrcDir:qa.resolve(t.projectDir,"./src"),project:t}}}Ya=Ya.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Qa(e),{project:a}=t,{projectDir:o,projectFileParsed:n}=a,r=n.config;if(!r)throw new Error("Config schema not found in project file.");const i=await Wa({schema:r}),s=qa.resolve(o,".fnet");Na.existsSync(s)||Na.mkdirSync(s);const c=qa.resolve(s,`${e.name}.fnet`);Na.writeFileSync(c,Ua.stringify(i))}catch(e){console.error(e.message),process.exit(1)}})),Ya=Za(Ya,{bin:"npm"}),Ya=Za(Ya,{bin:"node"}),Ya=Za(Ya,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Ya=Za(Ya,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Ya=Za(Ya,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Ya=Za(Ya,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Ya=Za(Ya,{bin:"npx"}),Ya=Za(Ya,{bin:"cdk"}),Ya=Za(Ya,{bin:"aws"}),Ya=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 Qa(e),{projectDir:o}=t,n=e.config,r=await Ja({name:n,dir:o,transferEnv:!1,optional:!0}),i=r?.data?.env||void 0,s=e.command,c=process.argv.slice(5);Ma(s,[...a,...c],{cwd:o,stdio:"inherit",shell:!0,env:{...process.env,...i}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(Ya,{name:"with"}),Ya.demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e=require("child_process"),t=require("@fnet/config"),o=require("path"),n=require("yargs/yargs"),i=require("yargs/helpers"),a=require("fs"),r=require("yaml"),s=require("shelljs"),c=require("@fnet/yaml"),l=require("@fnet/object-from-schema"),p=require("@flownet/lib-render-templates-dir"),d=require("node:fs"),f=require("node:path"),m=require("nunjucks"),u=require("lodash.clonedeep"),h=require("isobject"),w=require("redis"),y=require("@flownet/lib-is-redis-online"),g=require("nanoid"),b=require("@flownet/lib-atom-api-js"),v=require("axios"),_=require("qs"),x=require("lodash.merge"),k=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),D=require("@fnet/yargs-options-from-schema"),P=require("@fnet/shell"),S=require("semver"),A=require("node:os"),T=require("@node-red/util"),E=require("@flownet/lib-to-ios-app"),$=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),O=require("@flownet/lib-to-webos"),C=require("@flownet/lib-to-nextjs"),N=require("@flownet/lib-to-docker"),M=require("form-data"),F=require("@flownet/lib-parse-node-url"),R=require("@flownet/lib-bpmn-from-flow"),q=require("@fnet/expression"),U=require("chalk"),B=require("lodash.pick"),L=require("lodash.omit");const z=w,J=y;const{Api:W}=b,K=v.default,G=_;const H=x,V=d,X=f,Y=k;function Z({dir:e,name:t="index"}){let o=X.resolve(e,`./${t}.tsx`);if(V.existsSync(o)||(o=X.resolve(e,`./${t}.ts`)),V.existsSync(o)||(o=X.resolve(e,`./${t}.jsx`)),V.existsSync(o)||(o=X.resolve(e,`./${t}.js`)),!V.existsSync(o))return{};const n=o,i=X.extname(o);return{file:n,ext:i,ts:".ts"===i||".tsx"===i,name:t}}const Q=j;const ee=d,te=f,oe=p;const ne=m,ie=d,ae=f,re=k,se=j;const ce=d,le=f,pe=p;const de=d,fe=f,me=m,ue=k;const he=d,we=f,ye=m,ge=D;const be=d,ve=f,_e=m;const xe=d,ke=f,je=m;const De=m,Pe=d,Se=f;const Ae=s,Te=o;const Ee=s;const $e=s;const Ie=s;const Oe=P,Ce=t;const Ne=d,Me=f,Fe=S,Re=P,qe=t;const Ue=d,Be=f,Le=S,ze=s,Je=t;const We=d,Ke=f,Ge=A,He=m,Ve=T,Xe=t;const Ye=a,Ze=o,Qe=t;const et=t,tt=E,ot=u,nt=S;const it=t,at=$,rt=u,st=S;const ct=t,lt=I,pt=u,dt=S;const ft=t,mt=O,ut=u,ht=S;const wt=t,yt=C,gt=u,bt=S;const vt=t,_t=N,xt=u,kt=S;const jt=d,Dt=f,Pt=S,St=P,At=t,Tt=v.default;const Et=S,$t=t,It=v.default;const Ot=S,Ct=t,Nt=v.default,Mt=a,Ft=P,Rt=M;const qt=S,Ut=t,Bt=v.default,Lt=a,zt=P,Jt=M;const Wt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const a=t.projectDir;let r="fnet-to-gitlab";const s=n.params.config||"gitlab",c=await Ce({name:s,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${s}`);const{data:l}=c.data;r+=` --projectGroupId=${l.projectGroupId}`,r+=` --projectPath='${a}'`,r+=` --projectName='${n.params.name}'`,r+=` --projectBranch='${n.params.branch||"main"}'`,r+=` --gitlabHost='${l.gitlabHost}'`,r+=` --gitlabToken='${l.gitlabToken}'`,r+=` --gitlabUsername='${l.gitlabUsername}'`,r+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==n.dryRun&&(await Oe({cmd:r}),o.isDirty=!0)},Kt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as gcs package."});const a=t.projectDir,r=Me.resolve(a,"package.json"),s=Ne.readFileSync(r),c=JSON.parse(s);c.name=n.params.name,c.version=Fe.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,Ne.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await qe({name:n.config||"gcs",dir:t.projectDir});let d="fnet-files-to-gcs";d+=` --projectId='${p.env.GCS_PROJECT_ID}'`,d+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,d+=` --keyFilename='${Me.resolve(Me.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${a}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(d+=` --domain='${p.env.DOMAIN}'`),!0!==n.dry_run&&!0!==n.params.dry_run||(d+=" --dryRun"),await Re({cmd:d}),Ne.writeFileSync(r,s),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=c.version,await i({target:n,packageJSON:c}))},Gt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as npm package."});const a=o.projectDir,r=Be.resolve(a,"package.json"),s=Ue.readFileSync(r),c=JSON.parse(s);c.name=i.params.name,c.version=Le.inc(i.params.version,"patch");const l=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Ue.writeFileSync(r,JSON.stringify(c,null,"\t"));const p=(await Je({name:o.npmConfig||"npm",dir:o.projectDir}))?.data;if(Ue.writeFileSync(Be.resolve(a,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==ze.exec("npm publish --access public",{cwd:a}).code)throw new Error("Couldnt publish to npm");Ue.writeFileSync(r,s),n.isDirty=!0,i.params.version=c.version},Ht=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a,packageDependencies:r,njEnv:s})=>{await t({message:"Deploying it as node-red flow."});const c=o.projectDir,l=o.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:r,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:r,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:r,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"),s).render(d);if(We.writeFileSync(Ke.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;n.isDirty=!0;const m=(await Xe({name:o.redConfig||"red",dir:o.projectDir}))?.data,u=i.deploy.url||m.env.RED_URL,h={};if(!1!==i.deploy.auth&&(h.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:h}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:f,headers:h});else{const e=await axios({method:"POST",url:`${u}/flow`,data:f,headers:h});i.deploy.id=e.data.id}},Vt=async({atom:e,Atom:t,setInProgress:o,context:n,packageDependencies:i,deploymentProject:a,deploymentProjectTarget:r})=>{await o({message:"Deploying it as workflow lib."});const s=(await Qe({name:"atom",dir:n.projectDir}))?.data;let c,l,p,d=r.deploy.name.split("/");if(1===d.length)l=s.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:s.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(a.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 f=n.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})},Xt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as ios-app package."});const a=t?.config?await et({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=nt.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=ot(t.params);s.dependencies=ot(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await tt(c)}},Yt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as macos-app package."});const a=t?.config?await it({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=st.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=rt(t.params);s.dependencies=rt(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await at(c)}},Zt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as electron package."});const a=t?.config?await ct({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=dt.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=pt(t.params);s.dependencies=pt(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await lt(c)}},Qt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as webos package."});const a=t?.config?await ft({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=ht.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=ut(t.params);s.dependencies=ut(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await mt(c)}},eo=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as nextjs package."});const a=t?.config?await wt({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=bt.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=gt(t.params);s.dependencies=gt(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await yt(c)}},to=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as docker package."});const a=t?.config?await vt({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=kt.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=xt(t.params);s.dependencies=xt(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await _t(c)}},oo=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as fnet package."});const a=t.projectDir,r=Dt.resolve(a,"package.json"),s=jt.readFileSync(r),c=JSON.parse(s);c.name=n.params.name,c.version=Pt.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,jt.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await At({name:n.config||"fnet-package",dir:t.projectDir});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 h=u.data?.access_token;if(!h)throw new Error(`Invalid access_token from ${d}`);let w="fnet-files-to-gcs";if(w+=` --projectId='${p.env.GCS_PROJECT_ID}'`,w+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,w+=` --keyFilename='${Dt.resolve(Dt.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,w+=` --dir='${a}'`,w+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",w+=` --destDir='${c.name}/${c.version}'`,w+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(w+=` --domain='${p.env.DOMAIN}'`),!0!==n.dry_run&&!0!==n.params.dry_run||(w+=" --dryRun"),await St({cmd:w}),jt.writeFileSync(r,s),!0===n.dryRun)return;o.isDirty=!0,n.params.version=c.version;const y=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(u=await Tt({method:"POST",url:y,data:{name:c.name,version:c.version,version_domain:p.env.DOMAIN,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`}}),u.data?.error)throw new Error("Failed to publish fnet package.")},no=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet form."});const i=Et.inc(n.params.version,"patch"),{file:a,data:r}=await $t({name:n.config||"fnet-form",dir:t.projectDir});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const s=`${r.env.ATOM_API_URL}/v1/auth/token`,c=r.env.ATOM_API_USERNAME,l=r.env.ATOM_API_PASSWORD;let p=await It({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);o.isDirty=!0,n.params.version=i;const f=`${r.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await It({method:"POST",url:f,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet form.")},io=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet flow."});const i=Ot.inc(n.params.version,"patch"),{file:a,data:r}=await Ct({name:n.config||"fnet-flow",dir:t.project.projectDir});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const s=`${r.env.ATOM_API_URL}/v1/auth/token`,c=r.env.ATOM_API_USERNAME,l=r.env.ATOM_API_PASSWORD;let p=await Nt({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);o.isDirty=!0,n.params.version=i;const f=`${r.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await Nt({method:"POST",url:f,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet flow.");const m=p.data?.upload.id;let u="fnet-dir-zipper";u+=` --sourceDir='${t.project.projectDir}'`,u+=" -p=**/*",u+=" -g",u+=" --stdout_format=json";const h=await Ft({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Rt;y.append("file",Mt.createReadStream(w));const g=await Nt.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${m}`,headers:{...y.getHeaders(),Authorization:`Bearer ${d}`},data:y});if(g.data?.error)throw new Error("Error uploading fnet flow.")},ao=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet node."});const i=qt.inc(n.params.version,"patch"),{file:a,data:r}=await Ut({name:n.config||"fnet-node",dir:t.project.projectDir});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const s=`${r.env.ATOM_API_URL}/v1/auth/token`,c=r.env.ATOM_API_USERNAME,l=r.env.ATOM_API_PASSWORD;let p=await Bt({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);o.isDirty=!0,n.params.version=i;const f=`${r.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await Bt({method:"POST",url:f,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet node.");const m=p.data?.upload.id;let u="fnet-dir-zipper";u+=` --sourceDir='${t.project.projectDir}'`,u+=" -p=**/*",u+=" -g",u+=" --stdout_format=json";const h=await zt({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Jt;y.append("file",Lt.createReadStream(w));const g=await Bt.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${m}`,headers:{...y.getHeaders(),Authorization:`Bearer ${d}`},data:y});if(g.data?.error)throw new Error("Error uploading fnet node.")};const ro=u;async function so({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||ro(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||ro(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await t({node:e}),o({node:e})}var co={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 o=t.filter((e=>e.hasOwnProperty("default")));if(o.length>1)throw new Error("Switch must have only one default");if(1===o.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 o=0;o<e.definition.switch.length;o++){let n=e.definition.switch[o],i=`${o}`;n.hasOwnProperty("default")&&(i="default",n=n.default);const a={name:n.condition||i,childs:[],parent:e,definition:n,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=so},resolve:so};const lo=q,po=co;var fo={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>lo({expression:e}))))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,o=Object.keys(t.definition),n=await Promise.all(o.map((e=>lo({expression:e})))),i=[],a=n.find((e=>"if"===e?.processor)),r=t.definition[a.expression];i.push({name:`${t.name}_if`,definition:r,processor:a}),delete t.definition[a.expression];const s=n.filter((e=>"elseif"===e?.processor));let c=0;for(const e of s){const o=t.definition[e.expression];i.push({name:`${t.name}_elseif_${c++}`,definition:o,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 po.init(e)}};const mo=u;async function uo({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||mo(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||mo(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var ho={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 o="try",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}if(e.definition.except){const o="except",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}e.resolve=uo},resolve:uo};const wo=u;async function yo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=wo(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],o=Object.keys(t)[0],a=t[o],r={key:await n(o),value:await n(a)};i.assign[e]=r}await t({node:e}),o({node:e})}var go={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=yo},resolve:yo};const bo=u,vo=B,_o=L;async function xo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||bo(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await t({node:e}),o({node:e})}var ko={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"],[o,n]=[vo(e.definition.for,t),_o(e.definition.for,t)];e.definition.for=o,e.definition.for.steps=[{[`${e.name}_step`]:n}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let o=0;o<e.definition.for.steps.length;o++){const n=e.definition.for.steps[o],i=Object.keys(n)[0],a={name:i,childs:[],parent:e,definition:n[i],index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=xo},resolve:xo};var jo={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){}};const Do=u;async function Po({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||Do(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var So={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=Po},resolve:Po};const Ao=u;async function To({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||Ao(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var Eo={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=To},resolve:To};const $o=u;async function Io({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||$o(e.definition);const i=e.context.transform;i.args&&(i.args=await n(i.args)),i.result&&(i.result=await n(i.result));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.call)),await t({node:e}),o({node:e})}var Oo={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call";for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],a={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=Io},resolve:Io};const Co=Oo;var No={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(e){const{node:t}=e,o="shell",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/shell",n.args="string"===i?{...n.args,cmd:n[o]}:n[o],delete n[o],await Co.init(e)}};const Mo=Oo;var Fo={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(e){const{node:t}=e,o="config",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/config",n.args="string"===i?{...n.args,name:n[o]}:n[o],delete n[o],await Mo.init(e)}};const Ro=Oo;var qo={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(e){const{node:t}=e,o="yaml",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/yaml",n.args="string"===i?{...n.args,file:n[o]}:n[o],delete n[o],await Ro.init(e)}};async function Uo({node:e}){e.context.next=e.childs[0]}var Bo={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const o=e.definition.steps||[];for await(const n of o){const o=Object.keys(n)[0],i={name:o,childs:[],parent:e,definition:n[o],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=Uo},resolve:Uo};const Lo=u;async function zo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Lo(e.definition);const i=e.context.transform;i.props&&(i.props=await n(i.props));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.form)),await t({node:e}),o({node:e})}var Jo={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form";for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],a={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=zo},resolve:zo};const Wo=u;async function Ko({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||Wo(e.definition),await t({node:e})}var Go={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Ko},resolve:Ko};const Ho=u;async function Vo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Ho(e.definition);const i=e.context.transform;i.next=await n(i.next),await t({node:e}),o({node:e})}var Xo={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Vo},resolve:Vo};const Yo=Oo;var Zo={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,o="prompt",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/prompt",n.args="string"===i?{...n.args,message:n[o]}:n[o],delete n[o],await Yo.init(e)}};const Qo=Oo;var en={hits:async function({node:e}){return e.definition.hasOwnProperty("html-script")},init:async function(e){const{node:t}=e,o="html-script",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@flownet/lib-load-browser-script-url",n.args="string"===i?{...n.args,src:n[o]}:n[o],delete n[o],await Qo.init(e)}};const tn=Oo;var on={hits:async function({node:e}){return e.definition.hasOwnProperty("html-link")},init:async function(e){const{node:t}=e,o="html-link",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@flownet/lib-load-browser-link-url",n.args="string"===i?{...n.args,src:n[o]}:n[o],delete n[o],await tn.init(e)}};const nn=d,an=f,rn=r,sn=s,cn=m,ln=u,pn=h,dn=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:fn}=g,mn=class{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(W.set_api_url(e.data.url),t)return W.set_req_token(t),void o(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),o(e.data.access_token)})).catch((e=>{W.set_req_token(),n(e)}))}))}},un=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const o=e.doc.features;o.project=o.project||{},o.project.format=o.project.format||o.project_format||"esm",o.project_format=o.project.format,o.dts_enabled=!0===o.dts||void 0!==o.dts&&!1!==o.dts,o.hasOwnProperty("all_parsed_imports")||(o.all_parsed_imports=!0);const n=X.resolve(t.project.projectDir),i=Z({dir:X.resolve(n,"./app")});if(i.file){let e=await Y({file:i.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.app_uses_jsx=t,o.app_has_entry=!0,e=await Y({file:i.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.app_entry_uses_jsx=t,o.app_entry_is_ts=i.ts,o.app_entry_ext=i.ext}const a=Z({dir:X.resolve(n,"./cli")});if(a.file){let e=await Y({file:a.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.cli_uses_jsx=t,o.cli_has_entry=!0,e=await Y({file:a.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.cli_entry_uses_jsx=t,o.cli_entry_is_ts=a.ts,o.cli_entry_ext=a.ext}if("workflow.lib"===e.type){const e=Z({dir:X.resolve(n,"./src")});if(e.file){let t=await Y({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.src_uses_jsx=n,o.src_has_entry=!0,t=await Y({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.src_entry_uses_jsx=n,o.src_entry_is_ts=e.ts,o.src_entry_ext=e.ext}}const r=!0===o.app_has_entry||!0===o.src_uses_jsx,s=!0===o.cli_has_entry||!0===o.src_uses_jsx;o.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===o.form||!0===o.form?.enabled,o.multiple_enabled=o.multiple_enabled||!0===o.multiple||!0===o.multiple?.enabled,!1===o.app?o.app={enabled:!1}:!0===o.app?o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:r}:o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:r,...o.app||{}},o.app.enabled=!0===o.app.enabled&&(!0===e.doc.features.form_enabled||!0===o.app.extend||!0===o.app.enabled),o.app.format=o.app.format||"esm",o.app.folder=o.app.folder||o.app.format||"default",!1===o.cli?o.cli={enabled:!1}:!0===o.cli?o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:s}:o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:s,...o.cli||{}},o.cli.enabled=!0===o.cli.enabled&&(!1===e.doc.features.form_enabled||!0===o.cli.extend||!0===o.cli.enabled),o.cli.format=o.cli.format||"esm",o.cli.folder=o.cli.folder||o.cli.folder||"esm",o.cli.node_options=o.cli.node?.options||o.cli.node_options||"";const c={cjs:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!0,string:!0},cjsx:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:o.form_enabled?"window":"global",babel:!0===o.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:o.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0,string:!0},umd:{format:"umd",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0}},l={};!0===o.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===o.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===o.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===o.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===o.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===o.app.enabled&&(o.app.dir=`./dist/app/${o.app.folder}`,c.app={format:o.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:o.app.dir,terser:!0,output_exports:!1===o.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:o.app.dir})),!0===o.cli.enabled&&(o.cli.dir=`./dist/cli/${o.cli.folder}`,c.cli={format:o.cli.format,context:"global",babel:!0===o.src_uses_jsx||!0===o.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:o.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===o.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${X.normalize(o.app.dir||".")}`,files:[X.normalize("./dist/**/*")],cors:!0,open:!1};o.babel_options=o.babel_options||o.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},o.browsersync_options=H(p,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=H({},o.replace_options||o.replace?.options||{}),o.terser_options=H({},o.terser_options||o.terser?.options||{}),o.css_options=H({},o.css_options||o.css?.options||{}),o.wasm_options=H({},o.wasm_options||o.wasm?.options||{}),o.copy_options=H(l,o.copy_options||o.copy?.options||{}),o.json_options=H({},o.json_options||o.json?.options||{}),o.image_options=H({},o.image_options||o.image?.options||{}),o.analyzer_options=H({summaryOnly:!0,limit:12},o.analyzer_options||o.analyzer?.options||{}),o.visualizer_options=H({},o.visualizer_options||o.visualizer?.options||{}),o.string_options=H({},o.string_options||o.string?.options||{}),o.rollup=o.rollup||{},o.rollup_output=H(c,o.rollup_output||o.rollup?.output||{}),o.string_enabled=!0===o.string||o.string&&!1!==o.string?.enabled,o.preact_enabled=!0===o.preact||o.preact&&!1!==o.preact?.enabled;const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==o.rollup[e]?(!0===o.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||o.babel_options,t.browsersync_options=H(o.browsersync_options,t.browsersync_options),t.replace_options=H(o.replace_options,t.replace_options),t.terser_options=H(o.terser_options,t.terser_options),t.css_options=H(o.css_options,t.css_options),t.wasm_options=H(o.wasm_options,t.wasm_options),t.copy_options=H(o.copy_options,t.copy_options),t.json_options=H(o.json_options,t.json_options),t.image_options=H(o.image_options,t.image_options),t.analyzer_options=H(o.analyzer_options,t.analyzer_options),t.visualizer_options=H(o.visualizer_options,t.visualizer_options),t.string_options=H(o.string_options,t.string_options),t.string=o.string_enabled&&t.string,o.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"),o.form_enabled&&(t.babel=!0)):t.enabled=!1)}o.babel_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browser_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browsersync_enabled=!1!==o.browsersync&&d.some((e=>!0===o.rollup_output[e].browsersync)),o.browsersync_enabled=o.browsersync_enabled&&o.app.enabled,o.wasm_enabled=!0===o.wasm||o.wasm&&!1!==o.wasm?.enabled,o.css_enabled=!0===o.css||o.css&&!1!==o.css?.enabled,o.json_enabled=!0===o.json||o.json&&!1!==o.json?.enabled,o.terser_enabled=!1!==o.terser,o.copy_enabled=o.app.enabled||o.copy_enabled||o.copy&&!1!==o.copy?.enabled,o.image_enabled=!0===o.image||o.image&&!1!==o.image?.enabled,o.analyzer_enabled=!0===o.analyzer||o.analyzer&&!1!==o.analyzer?.enabled,o.visualizer_enabled=!0===o.visualizer||o.visualizer&&!1!==o.visualizer?.enabled,o.dependency_auto_enabled=!1!==o.dependency_auto&&!1!==o.dependency_auto?.enabled,o.npm_install_flags=o.npm_install_flags||"",o.react_version=o.react_version||o.react?.version||18},hn=async({atom:e,packageDependencies:t,packageDevDependencies:o})=>{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 o="^18.2";o=`^${(await Q({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:o}),t.push({package:"react-dom",version:o}),"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"}),o.push({package:"@babel/core",version:"^7"}),o.push({package:"@rollup/plugin-commonjs",version:"^26"}),o.push({package:"@rollup/plugin-node-resolve",version:"^15"}),o.push({package:"@rollup/plugin-replace",version:"^5"}),o.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&o.push({package:"rollup-plugin-dts",version:"^6"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),o.push({package:"@rollup/plugin-alias",version:"^5"}),o.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6"}),o.push({package:"@babel/preset-env",version:"^7"}),o.push({package:"@babel/preset-react",version:"^7"})),o.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.browsersync_enabled&&o.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.1"}),e.doc.features.json_enabled&&o.push({package:"@rollup/plugin-json",version:"^6"}),e.doc.features.terser_enabled&&o.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&o.push({package:"@rollup/plugin-wasm",version:"^6"}),e.doc.features.image_enabled&&o.push({package:"@rollup/plugin-image",version:"^3"}),e.doc.features.analyzer_enabled&&o.push({package:"rollup-plugin-analyzer",version:"^3"}),e.doc.features.visualizer_enabled&&o.push({package:"rollup-plugin-visualizer",version:"^5"}),e.doc.features.string_enabled&&o.push({package:"rollup-plugin-string",version:"^3"}),e.doc.features.css_enabled){o.push({package:"rollup-plugin-postcss",version:"^4"}),o.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":o.push({package:"postcss-import",version:"^15"});break;case"postcss-url":o.push({package:"postcss-url",version:"^10"});break;case"postcss-preset-env":o.push({package:"postcss-preset-env",version:"^9"});break;case"autoprefixer":o.push({package:"autoprefixer",version:"^10"});break;case"cssnano":o.push({package:"cssnano",version:"^6"})}}))}e.doc.features.copy_enabled&&(o.push({package:"rollup-plugin-copy",version:"^3"}),o.push({package:"chokidar",version:"^3"}))},wn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n,ts:Date.now()},a=o.templateDir,r=te.resolve(o.projectDir,"src/app");ee.existsSync(r)||ee.mkdirSync(r,{recursive:!0}),await oe({pattern:["index.html.njk","index.js.njk"],dir:te.resolve(a,"src/app"),outDir:r,context:i})},yn=async({atom:e,context:t,packageDependencies:o,packageDevDependencies:n,setInProgress:i})=>{await i({message:"Creating package.json."});o.filter((e=>!0===e.dev)).forEach((e=>{n.find((t=>t.package===e.package))||n.push(e);const t=o.findIndex((t=>t.package===e.package));o.splice(t,1)}));const a=o.find((e=>"react"===e.package)),r=o.find((e=>"react-dom"===e.package));a&&!r?o.push({package:"react-dom",version:a.version}):a&&r&&(r.version=a.version),a&&e.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const s=[];!0===e.doc.features.app.enabled&&s.push({file:ae.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&s.push({file:ae.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of s){const i=t.file;if(!ie.existsSync(i))throw new Error(`App file not found: ${i}`);const a=await re({file:i,recursive:!0}),r=!0===e.doc.features.all_parsed_imports?a.all:a.required;for await(const e of r){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;if(n.find((t=>t.package===e.package)))continue;const i=(await se({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?n:o).push({package:e.package,subpath:e.subpath,version:`^${i}`,type:"npm"})}}const c={atom:e,packageDependencies:o,packageDevDependencies:n},l=t.templateCommonDir,p=ne.compile(ie.readFileSync(ae.resolve(l,"package.json.njk"),"utf8"),ne.configure(l)).render(c),d=t.projectDir,f=ae.resolve(d,"package.json");ie.writeFileSync(f,p,"utf8")},gn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n},a=o.templateDir,r=le.resolve(o.projectDir,"src/cli");ce.existsSync(r)||ce.mkdirSync(r,{recursive:!0}),await pe({pattern:["index.js.njk"],dir:le.resolve(a,"src/cli"),outDir:r,context:i})},bn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:n},a=fe.resolve(o.projectDir,"src","default/index.js");if(!de.existsSync(a))throw new Error(`Entry file not found: ${a}`);const r=(await ue({file:a,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),s=e.doc.features.rollup_output,c=Object.keys(s);for(let e=0;e<c.length;e++){const t=s[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 o=r[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(r)}}const l=o.templateCommonDir;let p=me.compile(de.readFileSync(fe.resolve(l,"rollup.config.mjs.njk"),"utf8"),me.configure(l)).render(i);const d=o.projectDir;let f=fe.resolve(d,"rollup.config.mjs");de.writeFileSync(f,p,"utf8")},vn=async({atom:e,setInProgress:t,context:o,njEnv:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let i={};const a=e.doc.inputs||[],r=[],s=e.doc.input;s?i=await ge({schema:s}):a.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&r.push(e);const t={};e.type&&(t.type=e.type),e.default&&(t.default=e.default),e.choices&&(t.choices=e.choices),(e.describe||e.description)&&(t.describe=e.describe||e.description),e.alias&&(t.alias=e.alias),!0===e.required&&(t.required=!0),!0===e.hidden&&(t.hidden=!0),!0===e.array&&(t.array=!0),!0===e.normalize&&(t.normalize=!0),e.nargs&&(t.nargs=e.nargs),i[e.name]=t}));const c={options:i,imports:r,atom:e},l=o.templateDir,p=ye.compile(he.readFileSync(we.resolve(l,"src/default/to.yargs.js.njk"),"utf8"),n).render(c),d=o.projectDir,f=we.resolve(d,"src/default/to.yargs.js");he.writeFileSync(f,p,"utf8")},_n=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},a=o.templateCommonDir,r=_e.compile(be.readFileSync(ve.resolve(a,".gitignore.njk"),"utf8"),_e.configure(a)).render(i),s=o.projectDir,c=ve.resolve(s,".gitignore");be.writeFileSync(c,r,"utf8")},xn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:n},a=o.templateCommonDir,r=je.compile(xe.readFileSync(ke.resolve(a,"tsconfig.json.njk"),"utf8"),je.configure(a)).render(i),s=o.projectDir,c=ke.resolve(s,"tsconfig.json");xe.writeFileSync(c,r,"utf8")},kn=async({atom:e,context:t,setInProgress:o,Atom:n})=>{const i="readme.md",a=`Creating ${i}`;if(await o({message:a}),t.project?.readme){const e={content:t.project.readme.doc.content},o=t.templateCommonDir,n=De.compile(Pe.readFileSync(Se.resolve(o,`${i}.njk`),"utf8"),De.configure(o)).render(e),a=t.projectDir,r=Se.resolve(a,`${i}`);Pe.writeFileSync(r,n,"utf8")}else if(e.id){const o=await n.first({type:"wiki",parent_id:e.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:a,...r}=o.doc,s={content:a},c=t.templateCommonDir,l=De.compile(Pe.readFileSync(Se.resolve(c,`${i}.njk`),"utf8"),De.configure(c)).render(s),p=t.projectDir,d=Se.resolve(p,`${i}`);Pe.writeFileSync(d,l,"utf8")}},jn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});let n=Te.join("src","**","*");if(0!==Ae.exec(`prettier --write ${n} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o}).code)throw new Error("Couldnt format files.")},Dn=async({atom:e,setInProgress:t,context:o})=>{if(!e.doc.features.dts_enabled)return;const n=o.projectDir;await t({message:"Creating .d.ts"});if(0!==Ee.exec("tsc",{cwd:n}).code)throw new Error("Couldnt create .d.ts files.")},Pn=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==$e.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},Sn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==Ie.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},An=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:a,deploymentProject:r}=e;if(!0===i.enabled)if("lib"===i.name)await Vt({...e});else if("red"===i.name)await Ht({...e});else if("npm"===i.name)await Gt({...e});else if("gcs"===i.name)await Kt({...e});else if("gitlab"===i.name)await Wt({...e});else if("fnet-package"===i.name)await oo({...e});else if("fnet-form"===i.name)await no({...e});else if("fnet-node"===i.name)await ao({...e});else if("fnet-flow"===i.name)await io({...e});else{let e;if("nextjs"===i.name?e=eo:"webos"===i.name?e=Qt:"electron"===i.name?e=Zt:"docker"===i.name?e=to:"ios"===i.name?e=Xt:"macos"===i.name&&(e=Yt),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:n.projectDir,dependencies:o}),r.isDirty=!0}},{Atom:Tn}=b,En=F,$n=j,In=R,On=t,Cn=k,Nn=q,Mn=c,Fn=U,Rn=fo,qn=ho,Un=go,Bn=ko,Ln=co,zn=jo,Jn=So,Wn=Eo,Kn=Oo,Gn=No,Hn=Fo,Vn=qo,Xn=Bo,Yn=Jo,Zn=Go,Qn=Xo,ei=Zo,ti=en,oi=on,ni=({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 o=e.parent;for(;o.parent;){const n=o.childs.find((e=>e.name===t.next));if(n){e.context.next=n;break}o=o.parent}}else{let t=e.parent,o=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(void 0!==t.blockAutoJumpToParent||void 0!==t.blockAutoJumpToSibling){if(t.blockAutoJumpToParent){const n=t.childs.find((e=>e.index===o));n&&(e.context.next=n);break}t.blockAutoJumpToParent||(o=t.index+1,t=t.parent)}else{const n=t.childs.find((e=>e.index===o));if(n){e.context.next=n;break}o=t.index+1,t=t.parent}}};var ii=class{#e;#t;#o;#n;#i;#a;#r;#s;#c;#l;#p;#d;#f;#m;#u;#h;#w;#y;#g;#b;#v;constructor(e){this.#e=new mn,this.#t=e,this.#a=[],this.#r=[],this.#s={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#b={packageDependencies:this.#a,packageDevDependencies:this.#r,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Tn,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#v={initNode:this.initNode.bind(this),cloneDeep:ln,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:ni,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await dn(),this.#p=this.#t.buildId||fn(24),this.#b.buildId=this.#p,this.#u=this.#t.mode,this.#h=["all","deploy","build","file"].includes(this.#u),this.#w=["all","deploy","build"].includes(this.#u),this.#y=["all","deploy"].includes(this.#u),this.#g=["all","deploy","build","file","bpmn"].includes(this.#u),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#m=(await On({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await un(this.#b),await hn(this.#b),await this.transformWorkflow({workflow:this.#n});const e=await this.initNodeTree({workflow:this.#n});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.#b.atomAccessToken=this.#c)}async initWorkflow(){const e=this.#t.id;this.#o=this.#t.project?.workflowAtom||await Tn.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await Mn({content:this.#o.doc.content})).parsed:this.#o.doc.content;let t=this.#o.doc.bundleName;t=t||(this.#o.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#o.doc.bundleName=t,this.#o.type=this.#o.type||"workflow",this.#b.atom=this.#o}async initDependencies(){this.#a.push({package:"get-value",version:"^3.0"}),this.#a.push({package:"set-value",version:"^4.1"}),this.#o.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"})}#_(e){console.log("filePath",e),nn.statSync(e).isDirectory()?(nn.readdirSync(e).forEach((t=>{const o=an.join(e,t);this.#_(o)})),nn.rmSync(e)):nn.unlinkSync(e)}#x(e,t){const o=nn.existsSync(e),n=o&&nn.statSync(e);o&&n.isDirectory()?(nn.mkdirSync(t,{recursive:!0}),nn.readdirSync(e).forEach((o=>{this.#x(an.join(e,o),an.join(t,o))}))):nn.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,o=["node_modules"];if(nn.existsSync(e)){const t=nn.readdirSync(e);for(const n of t)if(!o.includes(n)){const t=an.join(e,n);nn.rmSync(t,{recursive:!0})}}nn.existsSync(e)||nn.mkdirSync(e,{recursive:!0});const n=an.join(e,"src");nn.existsSync(n)||nn.mkdirSync(n,{recursive:!0});const i=an.join(n,"core");this.#x(t,i);const a=an.join(n,"default","blocks");nn.existsSync(a)||nn.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=cn.configure(e,{watch:!1,dev:!0}),this.#b.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,o]=Object.entries(e)[0];if(o.hasOwnProperty("onerror")){const{onerror:n,...i}=o;e[t]={try:i,except:n}}if(e[t].hasOwnProperty("steps")){const o=e[t].steps;if(!Array.isArray(o))throw new Error("Steps must be an array.");e[t].steps=o.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),o={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#o}};t.forEach((t=>{const n={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:o,definition:e[t],index:o.childs.length,depth:o.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};o.childs.push(n)}));for await(const e of o.childs)await this.initNode({node:e});return o}async initNode({node:e}){const t={...this.#v,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await qn.hits(t))await qn.init(t);else if(await Bn.hits(t))await Bn.init(t);else if(await Ln.hits(t))await Ln.init(t);else if(await Rn.hits(t))await Rn.init(t);else if(await zn.hits(t))await zn.init(t);else if(await Un.hits(t))await Un.init(t);else if(await Jn.hits(t))await Jn.init(t);else if(await Wn.hits(t))await Wn.init(t);else if(await Kn.hits(t))await Kn.init(t);else if(await Gn.hits(t))await Gn.init(t);else if(await Hn.hits(t))await Hn.init(t);else if(await Vn.hits(t))await Vn.init(t);else if(await ti.hits(t))await ti.init(t);else if(await oi.hits(t))await oi.init(t);else if(await Yn.hits(t))await Yn.init(t);else if(await Zn.hits(t))await Zn.init(t);else if(await ei.hits(t))await ei.init(t);else if(await Xn.hits(t))await Xn.init(t);else{if(!await Qn.hits(t))throw new Error("Undefined step type.");await Qn.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const o of e.childs)await this.initNodeIndex({node:o,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const o=an.join(e.parent.indexKey,e.name);e.indexKey=o,t[o]=e;const n=[];let i=e;for(;i?.parent;)n.push(i.index),i=i.parent;n.reverse(),e.codeKey=`B_${n.join("_")}_${e.type}`,e.pathKey=`${n.join(".")}`,e.typeId=fn(24);for await(const o of e.childs)await this.initNodeIndex({node:o,index:t})}async initNodeCalls({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"call"===n.type&&o.push(n)}return e.context.calls=o,o}async initNodeCallLibs({root:e}){const t=[],o=e.context.calls;for await(const e of o){const o=e.definition.call,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.call,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"form"===n.type&&o.push(n)}return e.context.forms=o,o}async initNodeFormLibs({root:e}){const t=[],o=e.context.forms;for await(const e of o){const o=e.definition.form,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.form,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const o=e.filter((e=>"atom"===e.type));for(let e=0;e<o.length;e++){const n=o[e],i=await this.findAtomLibrary({url:n.name});n.atom=i;const a=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));a?.forEach((e=>{const o=t.find((t=>t.package===e.package));o?"string"==typeof e.path?(o.path||[]).some((t=>t===e.path))||(o.path=o.path||[],o.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(o.path||[]).some((t=>t===e))||(o.path=o.path||[],o.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=En({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#f),"ac:"===t.protocol){const o=t.pathname.split("/");if(1===o.length)return await Tn.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await Tn.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Tn.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=an.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await Cn({file:e,recursive:!0}),i=!0===this.#o.doc.features.all_parsed_imports?n.all:n.required;for await(const e of i){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=(await $n({name:e.package,groupBy:{minor:!0}}))[0][0];o.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:o},protocol:t.protocol}}if("npm:"===t.protocol){const e=(await $n({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=ln(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const o=t.params[e];if("string"==typeof o)t.params[e]={key:o,hasDefault:!1};else{const n=Object.keys(o)[0];t.params[e]={key:n,hasDefault:!0,default:o[n]}}}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.#v,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.#o.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const o=t[e].atom,n=this.#t.projectDir;if("local:"===o.protocol){const e=an.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=an.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!nn.existsSync(e)){nn.mkdirSync(an.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",nn.writeFileSync(e,t,"utf8")}o.relativePath=t.split(an.sep).join("/"),this.#o.typesDir=`./types/${an.basename(n)}/src`}else if("npm:"===o.protocol)o.relativePath=o.name;else{const e=`${n}/src/libs/${o.id}.js`,t=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;nn.writeFileSync(an.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=cn.compile(nn.readFileSync(an.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=an.resolve(n,"src/default/index.js");nn.writeFileSync(i,o,"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,o=cn.compile(nn.readFileSync(an.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=an.resolve(n,`src/default/${e.codeKey}.js`);nn.writeFileSync(i,o,"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.#s[e.type];if(t)return t;const o=this.#t.templateDir;return t=cn.compile(nn.readFileSync(an.resolve(o,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#i),this.#s[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,o=`${e.codeKey}.js`,n=an.resolve(t,`src/default/blocks/${o}`);nn.writeFileSync(n,e.context.render,"utf8"),e.context.fileName=o,e.context.filePath=n}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(pn(e)){const t=Object.keys(e);for(let o=0;o<t.length;o++)e[t[o]]=await this.transformValue(e[t[o]])}else if("string"==typeof e){const t=await Nn({expression:e});if(t){const{processor:o,statement:n}=t;switch(o){case"v":e=`$::v.${n}::`;break;case"e":e=`$::${n}::`;break;case"m":e=`$::closure.module['${n}']::`;break;case"f":e=`$::closure.form.${n}::`;break;case"for":e=`$::caller.for.${n}::`}}}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:o,...n}=this.#o.doc,i={content:rn.stringify(n)},a=this.#t.templateDir,r=cn.compile(nn.readFileSync(an.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),s=this.#t.projectDir,c=an.resolve(s,`${e}`);nn.writeFileSync(c,r,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:rn.stringify(this.#n)},n=this.#t.templateDir,i=cn.compile(nn.readFileSync(an.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),a=this.#t.projectDir,r=an.resolve(a,`${e}`);nn.writeFileSync(r,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=sn.exec("prettier --write .",{cwd:an.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 o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&await o.save()}}else if(this.#o.id){const e=await Tn.list({type:"workflow.deploy",parent_id:this.#o.id});for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&(o=await Tn.update(o,{id:o.id}))}}}async deployProject(e){const{deploymentProject:t}=e,o=t.doc.targets;for(let e=0;e<o.length;e++){const n=o[e];await An({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await Tn.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await Tn.update(n,{id:n.id})):n=await Tn.create({parent_id:this.#m.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:o.version}]}})}async setInProgress({message:e}){console.log(Fn.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#g&&!this.#h)return await this.createNetwork();try{const e=this.#g?await In({root:this.#l}):void 0;if(this.#h){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#g){const t=this.#t.project?.projectDir||this.#t.projectDir;nn.writeFileSync(an.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 kn(this.#b),await xn(this.#b),await _n(this.#b),await vn(this.#b),await gn(this.#b),await wn(this.#b),await bn(this.#b),await yn(this.#b),await jn(this.#b),await Dn(this.#b),this.#w&&(await Pn(this.#b),await Sn(this.#b),this.#y&&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 In({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 ai=d,ri=f;var si=function({baseDir:e=__dirname}){let t=e;for(;t!==ri.parse(t).root;){const e=ri.join(t,"node_modules");if(ai.existsSync(e))return e;t=ri.dirname(t)}return null};const ci=process.cwd(),{spawn:li}=e;t({name:["redis"],dir:ci,optional:!0});const pi=o,di=n,{hideBin:fi}=i,mi=a,ui=r,hi=s,wi=c,yi=t,gi=l,bi=p,vi=ii,_i=si({baseDir:__dirname}),xi="win32"===process.platform?";":":";process.env.PATH=`${pi.join(_i,"/.bin")}${xi}${process.env.PATH}`;let ki=di(fi(process.argv)).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=pi.resolve(_i,"./@fnet/cli-project-flow/dist/template/project"),o=pi.resolve(ci,e.name);mi.existsSync(o)||mi.mkdirSync(o),await bi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0});let n=hi.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(hi.which("git")&&(n=hi.exec("git init",{cwd:o}),0!==n.code))throw new Error("Failed to initialize git.");if(hi.which("code")&&e.vscode&&(n=hi.exec(`cd ${o} && code .`),0!==n.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=pi.resolve(_i,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd();if(e.name=pi.basename(o),e.update){if(await bi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0}),0!==hi.exec("fnet build",{cwd:o}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",alias:"m",default:"build",choices:["all","file","build","deploy","bpmn"]})),(async e=>{try{const t=await Di(e),o=new vi(t);await o.init(),await o.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"})),(async e=>{try{const t=await Di({...e,mode:"all"}),o=new vi(t);await o.init(),await o.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"})),(async e=>{try{const t=await Di({...e,mode:"file"}),o=new vi(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function ji(e,{name:t,bin:o,preArgs:n=[]}){return e.command(`${t||o} [commands..]`,`${o} ${n.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Di(e),{projectDir:i}=t,a=process.argv.slice(3);li(o,[...n,...a],{cwd:i,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Di(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:pi.resolve(ci,`./.output/${e.id}`),templateDir:pi.resolve(_i,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:pi.resolve(_i,"./@fnet/cli-project-common/dist/template/default"),coreDir:pi.resolve(_i,"./@fnet/cli-project-flow/dist/template/core")}}{const t=await async function(){const e=pi.resolve(ci,"flow.yaml");if(!mi.existsSync(e))throw new Error("flow.yaml file not found in current directory.");const t=mi.readFileSync(e,"utf8"),{parsed:o}=await wi({content:t}),n=pi.dirname(e),i=o.main||"flow.main.yaml";let a=pi.resolve(n,i);if(!mi.existsSync(a)&&(a=pi.resolve(n,i+".yaml"),!mi.existsSync(a)))throw new Error(`${i} file not found in ${a}.`);const r=mi.readFileSync(a,"utf8"),{parsed:s}=await wi({content:r}),c={workflowAtom:{doc:{...o,"content-type":"yaml",content:r}},projectDir:n,projectFilePath:e,projectFileContent:t,projectFileParsed:o,projectMainFilePath:a,projectMainFileContent:r,projectMainFileParsed:s},l=pi.resolve(n,"flow.devops.yaml");if(mi.existsSync(l)){const e=mi.readFileSync(l,"utf8"),t=ui.parse(e);c.devops={filePath:l,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{mi.writeFileSync(c.devops.filePath,ui.stringify(c.devops.doc))}}}const p=pi.resolve(n,"readme.md");if(mi.existsSync(p)){const e=mi.readFileSync(p,"utf8");c.readme={filePath:p,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return c}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:pi.resolve(_i,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:pi.resolve(_i,"./@fnet/cli-project-common/dist/template/default"),coreDir:pi.resolve(_i,"./@fnet/cli-project-flow/dist/template/core"),projectDir:pi.resolve(t.projectDir,"./.workspace"),projectSrcDir:pi.resolve(t.projectDir,"./src"),project:t}}}ki=ki.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Di(e),{project:o}=t,{projectDir:n,projectFileParsed:i}=o,a=i.config;if(!a)throw new Error("Config schema not found in project file.");const r=await gi({schema:a}),s=pi.resolve(n,".fnet");mi.existsSync(s)||mi.mkdirSync(s);const c=pi.resolve(s,`${e.name}.fnet`);mi.writeFileSync(c,ui.stringify(r))}catch(e){console.error(e.message),process.exit(1)}})),ki=ji(ki,{bin:"npm"}),ki=ji(ki,{bin:"node"}),ki=ji(ki,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),ki=ji(ki,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),ki=ji(ki,{name:"app",bin:"npm",preArgs:["run","app","--"]}),ki=ji(ki,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),ki=ji(ki,{bin:"npx"}),ki=ji(ki,{bin:"cdk"}),ki=ji(ki,{bin:"aws"}),ki=function(e,{name:t,preArgs:o=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Di(e),{projectDir:n}=t,i=e.config,a=await yi({name:i,dir:n,transferEnv:!1,optional:!0}),r=a?.data?.env||void 0,s=e.command,c=process.argv.slice(5);li(s,[...o,...c],{cwd:n,stdio:"inherit",shell:!0,env:{...process.env,...r}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(ki,{name:"with"}),ki.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"),o=require("path"),n=require("yargs/yargs"),i=require("yargs/helpers"),a=require("fs"),s=require("yaml"),r=require("shelljs"),c=require("@fnet/yaml"),l=require("@fnet/object-from-schema"),p=require("@flownet/lib-render-templates-dir"),d=require("node:fs"),f=require("node:path"),m=require("nunjucks"),u=require("lodash.clonedeep"),h=require("isobject"),w=require("redis"),y=require("@flownet/lib-is-redis-online"),g=require("nanoid"),b=require("@flownet/lib-atom-api-js"),v=require("axios"),_=require("qs"),x=require("lodash.merge"),k=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),D=require("@fnet/yargs-options-from-schema"),P=require("@fnet/shell"),S=require("semver"),A=require("node:os"),T=require("@node-red/util"),E=require("@flownet/lib-to-ios-app"),$=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),O=require("@flownet/lib-to-webos"),C=require("@flownet/lib-to-nextjs"),N=require("@flownet/lib-to-docker"),M=require("form-data"),R=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-bpmn-from-flow"),q=require("@fnet/expression"),U=require("chalk"),B=require("lodash.pick"),L=require("lodash.omit");const z=w,J=y;const{Api:W}=b,K=v.default,G=_;const H=x,V=d,X=f,Y=k;function Z({dir:e,name:t="index"}){let o=X.resolve(e,`./${t}.tsx`);if(V.existsSync(o)||(o=X.resolve(e,`./${t}.ts`)),V.existsSync(o)||(o=X.resolve(e,`./${t}.jsx`)),V.existsSync(o)||(o=X.resolve(e,`./${t}.js`)),!V.existsSync(o))return{};const n=o,i=X.extname(o);return{file:n,ext:i,ts:".ts"===i||".tsx"===i,name:t}}const Q=j;const ee=d,te=f,oe=p;const ne=m,ie=d,ae=f,se=k,re=j;const ce=d,le=f,pe=p;const de=d,fe=f,me=m,ue=k;const he=d,we=f,ye=m,ge=D;const be=d,ve=f,_e=m;const xe=d,ke=f,je=m;const De=m,Pe=d,Se=f;const Ae=r,Te=o;const Ee=r;const $e=r;const Ie=r;const Oe=P,Ce=t;const Ne=d,Me=f,Re=S,Fe=P,qe=t;const Ue=d,Be=f,Le=S,ze=r,Je=t;const We=d,Ke=f,Ge=A,He=m,Ve=T,Xe=t;const Ye=a,Ze=o,Qe=t;const et=t,tt=E,ot=u,nt=S;const it=t,at=$,st=u,rt=S;const ct=t,lt=I,pt=u,dt=S;const ft=t,mt=O,ut=u,ht=S;const wt=t,yt=C,gt=u,bt=S;const vt=t,_t=N,xt=u,kt=S;const jt=d,Dt=f,Pt=S,St=P,At=t,Tt=v.default;const Et=S,$t=t,It=v.default;const Ot=S,Ct=t,Nt=v.default,Mt=a,Rt=P,Ft=M;const qt=S,Ut=t,Bt=v.default,Lt=a,zt=P,Jt=M;const Wt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const a=t.projectDir;let s="fnet-to-gitlab";const r=n.params.config||"gitlab",c=await Ce({name:r,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;s+=` --projectGroupId=${l.projectGroupId}`,s+=` --projectPath='${a}'`,s+=` --projectName='${n.params.name}'`,s+=` --projectBranch='${n.params.branch||"main"}'`,s+=` --gitlabHost='${l.gitlabHost}'`,s+=` --gitlabToken='${l.gitlabToken}'`,s+=` --gitlabUsername='${l.gitlabUsername}'`,s+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==n.dryRun&&(await Oe({cmd:s}),o.isDirty=!0)},Kt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as gcs package."});const a=t.projectDir,s=Me.resolve(a,"package.json"),r=Ne.readFileSync(s),c=JSON.parse(r);c.name=n.params.name,c.version=Re.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,Ne.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await qe({name:n.config||"gcs",dir:t.projectDir});let d="fnet-files-to-gcs";d+=` --projectId='${p.env.GCS_PROJECT_ID}'`,d+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,d+=` --keyFilename='${Me.resolve(Me.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${a}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(d+=` --domain='${p.env.DOMAIN}'`),!0!==n.dry_run&&!0!==n.params.dry_run||(d+=" --dryRun"),await Fe({cmd:d}),Ne.writeFileSync(s,r),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=c.version,await i({target:n,packageJSON:c}))},Gt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as npm package."});const a=o.projectDir,s=Be.resolve(a,"package.json"),r=Ue.readFileSync(s),c=JSON.parse(r);c.name=i.params.name,c.version=Le.inc(i.params.version,"patch");const l=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Ue.writeFileSync(s,JSON.stringify(c,null,"\t"));const p=(await Je({name:o.npmConfig||"npm",dir:o.projectDir}))?.data;if(Ue.writeFileSync(Be.resolve(a,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==ze.exec("npm publish --access public",{cwd:a}).code)throw new Error("Couldnt publish to npm");Ue.writeFileSync(s,r),n.isDirty=!0,i.params.version=c.version},Ht=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a,packageDependencies:s,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=o.projectDir,l=o.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;n.isDirty=!0;const m=(await Xe({name:o.redConfig||"red",dir:o.projectDir}))?.data,u=i.deploy.url||m.env.RED_URL,h={};if(!1!==i.deploy.auth&&(h.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:h}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:f,headers:h});else{const e=await axios({method:"POST",url:`${u}/flow`,data:f,headers:h});i.deploy.id=e.data.id}},Vt=async({atom:e,Atom:t,setInProgress:o,context:n,packageDependencies:i,deploymentProject:a,deploymentProjectTarget:s})=>{await o({message:"Deploying it as workflow lib."});const r=(await Qe({name:"atom",dir:n.projectDir}))?.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=n.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})},Xt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as ios-app package."});const a=t?.config?await et({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,s=nt.inc(t.params.version||"0.1.0","patch");t.params.version=s;const r=ot(t.params);r.dependencies=ot(i);const c={atom:e,params:r,config:a?.config,src:n,dest:n};return{deployer:await tt(c)}},Yt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as macos-app package."});const a=t?.config?await it({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,s=rt.inc(t.params.version||"0.1.0","patch");t.params.version=s;const r=st(t.params);r.dependencies=st(i);const c={atom:e,params:r,config:a?.config,src:n,dest:n};return{deployer:await at(c)}},Zt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as electron package."});const a=t?.config?await ct({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,s=dt.inc(t.params.version||"0.1.0","patch");t.params.version=s;const r=pt(t.params);r.dependencies=pt(i);const c={atom:e,params:r,config:a?.config,src:n,dest:n};return{deployer:await lt(c)}},Qt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as webos package."});const a=t?.config?await ft({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,s=ht.inc(t.params.version||"0.1.0","patch");t.params.version=s;const r=ut(t.params);r.dependencies=ut(i);const c={atom:e,params:r,config:a?.config,src:n,dest:n};return{deployer:await mt(c)}},eo=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as nextjs package."});const a=t?.config?await wt({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,s=bt.inc(t.params.version||"0.1.0","patch");t.params.version=s;const r=gt(t.params);r.dependencies=gt(i);const c={atom:e,params:r,config:a?.config,src:n,dest:n};return{deployer:await yt(c)}},to=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as docker package."});const a=t?.config?await vt({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,s=kt.inc(t.params.version||"0.1.0","patch");t.params.version=s;const r=xt(t.params);r.dependencies=xt(i);const c={atom:e,params:r,config:a?.config,src:n,dest:n};return{deployer:await _t(c)}},oo=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager: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=n.params.name,c.version=Pt.inc(n.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:n.config||"fnet-package",dir:t.projectDir});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 h=u.data?.access_token;if(!h)throw new Error(`Invalid access_token from ${d}`);let w="fnet-files-to-gcs";if(w+=` --projectId='${p.env.GCS_PROJECT_ID}'`,w+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,w+=` --keyFilename='${Dt.resolve(Dt.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,w+=` --dir='${a}'`,w+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",w+=` --destDir='${c.name}/${c.version}'`,w+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(w+=` --domain='${p.env.DOMAIN}'`),!0!==n.dry_run&&!0!==n.params.dry_run||(w+=" --dryRun"),await St({cmd:w}),jt.writeFileSync(s,r),!0===n.dryRun)return;o.isDirty=!0,n.params.version=c.version;const y=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(u=await Tt({method:"POST",url:y,data:{name:c.name,version:c.version,version_domain:p.env.DOMAIN,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`}}),u.data?.error)throw new Error("Failed to publish fnet package.")},no=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet form."});const i=Et.inc(n.params.version,"patch"),{file:a,data:s}=await $t({name:n.config||"fnet-form",dir:t.projectDir});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const r=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await It({method:"POST",url:r,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${r}`);o.isDirty=!0,n.params.version=i;const f=`${s.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await It({method:"POST",url:f,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet form.")},io=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet flow."});const i=Ot.inc(n.params.version,"patch"),{file:a,data:s}=await Ct({name:n.config||"fnet-flow",dir:t.project.projectDir});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const r=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await Nt({method:"POST",url:r,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${r}`);o.isDirty=!0,n.params.version=i;const f=`${s.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await Nt({method:"POST",url:f,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet flow.");const m=p.data?.upload.id;let u="fnet-dir-zipper";u+=` --sourceDir='${t.project.projectDir}'`,u+=" -p=**/*",u+=" -g",u+=" --stdout_format=json";const h=await Rt({cmd:u});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 g=await Nt.request({method:"POST",maxBodyLength:1/0,url:`${s.env.ATOM_API_URL}/v1/service/upload/single/${m}`,headers:{...y.getHeaders(),Authorization:`Bearer ${d}`},data:y});if(g.data?.error)throw new Error("Error uploading fnet flow.")},ao=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet node."});const i=qt.inc(n.params.version,"patch"),{file:a,data:s}=await Ut({name:n.config||"fnet-node",dir:t.project.projectDir});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const r=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await Bt({method:"POST",url:r,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${r}`);o.isDirty=!0,n.params.version=i;const f=`${s.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await Bt({method:"POST",url:f,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet node.");const m=p.data?.upload.id;let u="fnet-dir-zipper";u+=` --sourceDir='${t.project.projectDir}'`,u+=" -p=**/*",u+=" -g",u+=" --stdout_format=json";const h=await zt({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Jt;y.append("file",Lt.createReadStream(w));const g=await Bt.request({method:"POST",maxBodyLength:1/0,url:`${s.env.ATOM_API_URL}/v1/service/upload/single/${m}`,headers:{...y.getHeaders(),Authorization:`Bearer ${d}`},data:y});if(g.data?.error)throw new Error("Error uploading fnet node.")};const so=u;async function ro({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||so(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||so(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await t({node:e}),o({node:e})}var co={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 o=t.filter((e=>e.hasOwnProperty("default")));if(o.length>1)throw new Error("Switch must have only one default");if(1===o.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 o=0;o<e.definition.switch.length;o++){let n=e.definition.switch[o],i=`${o}`;n.hasOwnProperty("default")&&(i="default",n=n.default);const a={name:n.condition||i,childs:[],parent:e,definition:n,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=ro},resolve:ro};const lo=q,po=co;var fo={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>lo({expression:e}))))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,o=Object.keys(t.definition),n=await Promise.all(o.map((e=>lo({expression:e})))),i=[],a=n.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=n.filter((e=>"elseif"===e?.processor));let c=0;for(const e of r){const o=t.definition[e.expression];i.push({name:`${t.name}_elseif_${c++}`,definition:o,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 po.init(e)}};const mo=u;async function uo({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||mo(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||mo(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var ho={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 o="try",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}if(e.definition.except){const o="except",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}e.resolve=uo},resolve:uo};const wo=u;async function yo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=wo(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],o=Object.keys(t)[0],a=t[o],s={key:await n(o),value:await n(a)};i.assign[e]=s}await t({node:e}),o({node:e})}var go={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=yo},resolve:yo};const bo=u,vo=B,_o=L;async function xo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||bo(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await t({node:e}),o({node:e})}var ko={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"],[o,n]=[vo(e.definition.for,t),_o(e.definition.for,t)];e.definition.for=o,e.definition.for.steps=[{[`${e.name}_step`]:n}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let o=0;o<e.definition.for.steps.length;o++){const n=e.definition.for.steps[o],i=Object.keys(n)[0],a={name:i,childs:[],parent:e,definition:n[i],index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=xo},resolve:xo};var jo={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){}};const Do=u;async function Po({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||Do(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var So={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=Po},resolve:Po};const Ao=u;async function To({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||Ao(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var Eo={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=To},resolve:To};const $o=u;async function Io({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||$o(e.definition);const i=e.context.transform;i.args&&(i.args=await n(i.args)),i.result&&(i.result=await n(i.result));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.call)),await t({node:e}),o({node:e})}var Oo={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call";for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],a={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=Io},resolve:Io};const Co=Oo;var No={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(e){const{node:t}=e,o="shell",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/shell",n.args="string"===i?{...n.args,cmd:n[o]}:n[o],delete n[o],await Co.init(e)}};const Mo=Oo;var Ro={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(e){const{node:t}=e,o="config",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/config",n.args="string"===i?{...n.args,name:n[o]}:n[o],delete n[o],await Mo.init(e)}};const Fo=Oo;var qo={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(e){const{node:t}=e,o="yaml",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/yaml",n.args="string"===i?{...n.args,file:n[o]}:n[o],delete n[o],await Fo.init(e)}};async function Uo({node:e}){e.context.next=e.childs[0]}var Bo={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const o=e.definition.steps||[];for await(const n of o){const o=Object.keys(n)[0],i={name:o,childs:[],parent:e,definition:n[o],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=Uo},resolve:Uo};const Lo=u;async function zo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Lo(e.definition);const i=e.context.transform;i.props&&(i.props=await n(i.props));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.form)),await t({node:e}),o({node:e})}var Jo={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form";for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],a={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=zo},resolve:zo};const Wo=u;async function Ko({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||Wo(e.definition),await t({node:e})}var Go={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Ko},resolve:Ko};const Ho=u;async function Vo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Ho(e.definition);const i=e.context.transform;i.next=await n(i.next),await t({node:e}),o({node:e})}var Xo={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Vo},resolve:Vo};const Yo=Oo;var Zo={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,o="prompt",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/prompt",n.args="string"===i?{...n.args,message:n[o]}:n[o],delete n[o],await Yo.init(e)}};const Qo=Oo;var en={hits:async function({node:e}){return e.definition.hasOwnProperty("html-script")},init:async function(e){const{node:t}=e,o="html-script",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@flownet/lib-load-browser-script-url",n.args="string"===i?{...n.args,src:n[o]}:n[o],delete n[o],await Qo.init(e)}};const tn=Oo;var on={hits:async function({node:e}){return e.definition.hasOwnProperty("html-link")},init:async function(e){const{node:t}=e,o="html-link",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@flownet/lib-load-browser-link-url",n.args="string"===i?{...n.args,src:n[o]}:n[o],delete n[o],await tn.init(e)}};const nn=d,an=f,sn=s,rn=r,cn=m,ln=u,pn=h,dn=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:fn}=g,mn=class{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(W.set_api_url(e.data.url),t)return W.set_req_token(t),void o(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),o(e.data.access_token)})).catch((e=>{W.set_req_token(),n(e)}))}))}},un=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const o=e.doc.features;o.project=o.project||{},o.project.format=o.project.format||o.project_format||"esm",o.project_format=o.project.format,o.dts_enabled=!0===o.dts||void 0!==o.dts&&!1!==o.dts,o.hasOwnProperty("all_parsed_imports")||(o.all_parsed_imports=!0);const n=X.resolve(t.project.projectDir),i=Z({dir:X.resolve(n,"./app")});if(i.file){let e=await Y({file:i.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.app_uses_jsx=t,o.app_has_entry=!0,e=await Y({file:i.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.app_entry_uses_jsx=t,o.app_entry_is_ts=i.ts,o.app_entry_ext=i.ext}const a=Z({dir:X.resolve(n,"./cli")});if(a.file){let e=await Y({file:a.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.cli_uses_jsx=t,o.cli_has_entry=!0,e=await Y({file:a.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.cli_entry_uses_jsx=t,o.cli_entry_is_ts=a.ts,o.cli_entry_ext=a.ext}if("workflow.lib"===e.type){const e=Z({dir:X.resolve(n,"./src")});if(e.file){let t=await Y({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.src_uses_jsx=n,o.src_has_entry=!0,t=await Y({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.src_entry_uses_jsx=n,o.src_entry_is_ts=e.ts,o.src_entry_ext=e.ext}}const s=!0===o.app_has_entry||!0===o.src_uses_jsx,r=!0===o.cli_has_entry||!0===o.src_uses_jsx;o.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===o.form||!0===o.form?.enabled,o.multiple_enabled=o.multiple_enabled||!0===o.multiple||!0===o.multiple?.enabled,!1===o.app?o.app={enabled:!1}:!0===o.app?o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:s}:o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:s,...o.app||{}},o.app.enabled=!0===o.app.enabled&&(!0===e.doc.features.form_enabled||!0===o.app.extend||!0===o.app.enabled),o.app.format=o.app.format||"esm",o.app.folder=o.app.folder||o.app.format||"default",!1===o.cli?o.cli={enabled:!1}:!0===o.cli?o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r}:o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r,...o.cli||{}},o.cli.enabled=!0===o.cli.enabled&&(!1===e.doc.features.form_enabled||!0===o.cli.extend||!0===o.cli.enabled),o.cli.format=o.cli.format||"esm",o.cli.folder=o.cli.folder||o.cli.folder||"esm",o.cli.node_options=o.cli.node?.options||o.cli.node_options||"";const c={cjs:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!0,string:!0},cjsx:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:o.form_enabled?"window":"global",babel:!0===o.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:o.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==o.iife,terser:!0,string:!0},umd:{format:"umd",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0}},l={};!0===o.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===o.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===o.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===o.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===o.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===o.app.enabled&&(o.app.dir=`./dist/app/${o.app.folder}`,c.app={format:o.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:o.app.dir,terser:!0,output_exports:!1===o.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:o.app.dir})),!0===o.cli.enabled&&(o.cli.dir=`./dist/cli/${o.cli.folder}`,c.cli={format:o.cli.format,context:"global",babel:!0===o.src_uses_jsx||!0===o.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:o.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===o.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${X.normalize(o.app.dir||".")}`,files:[X.normalize("./dist/**/*")],cors:!0,open:!1};o.babel_options=o.babel_options||o.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},o.browsersync_options=H(p,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=H({},o.replace_options||o.replace?.options||{}),o.terser_options=H({},o.terser_options||o.terser?.options||{}),o.css_options=H({},o.css_options||o.css?.options||{}),o.wasm_options=H({},o.wasm_options||o.wasm?.options||{}),o.copy_options=H(l,o.copy_options||o.copy?.options||{}),o.json_options=H({},o.json_options||o.json?.options||{}),o.image_options=H({},o.image_options||o.image?.options||{}),o.analyzer_options=H({summaryOnly:!0,limit:12},o.analyzer_options||o.analyzer?.options||{}),o.visualizer_options=H({},o.visualizer_options||o.visualizer?.options||{}),o.string_options=H({},o.string_options||o.string?.options||{}),o.rollup=o.rollup||{},o.rollup_output=H(c,o.rollup_output||o.rollup?.output||{}),o.string_enabled=!0===o.string||o.string&&!1!==o.string?.enabled,o.preact_enabled=!0===o.preact||o.preact&&!1!==o.preact?.enabled;const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==o.rollup[e]?(!0===o.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||o.babel_options,t.browsersync_options=H(o.browsersync_options,t.browsersync_options),t.replace_options=H(o.replace_options,t.replace_options),t.terser_options=H(o.terser_options,t.terser_options),t.css_options=H(o.css_options,t.css_options),t.wasm_options=H(o.wasm_options,t.wasm_options),t.copy_options=H(o.copy_options,t.copy_options),t.json_options=H(o.json_options,t.json_options),t.image_options=H(o.image_options,t.image_options),t.analyzer_options=H(o.analyzer_options,t.analyzer_options),t.visualizer_options=H(o.visualizer_options,t.visualizer_options),t.string_options=H(o.string_options,t.string_options),t.string=o.string_enabled&&t.string,o.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"),o.form_enabled&&(t.babel=!0)):t.enabled=!1)}o.babel_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browser_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browsersync_enabled=!1!==o.browsersync&&d.some((e=>!0===o.rollup_output[e].browsersync)),o.browsersync_enabled=o.browsersync_enabled&&o.app.enabled,o.wasm_enabled=!0===o.wasm||o.wasm&&!1!==o.wasm?.enabled,o.css_enabled=!0===o.css||o.css&&!1!==o.css?.enabled,o.json_enabled=!0===o.json||o.json&&!1!==o.json?.enabled,o.terser_enabled=!1!==o.terser,o.copy_enabled=o.app.enabled||o.copy_enabled||o.copy&&!1!==o.copy?.enabled,o.image_enabled=!0===o.image||o.image&&!1!==o.image?.enabled,o.analyzer_enabled=!0===o.analyzer||o.analyzer&&!1!==o.analyzer?.enabled,o.visualizer_enabled=!0===o.visualizer||o.visualizer&&!1!==o.visualizer?.enabled,o.dependency_auto_enabled=!1!==o.dependency_auto&&!1!==o.dependency_auto?.enabled,o.npm_install_flags=o.npm_install_flags||"",o.react_version=o.react_version||o.react?.version||18},hn=async({atom:e,packageDependencies:t,packageDevDependencies:o})=>{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 o="^18.2";o=`^${(await Q({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:o}),t.push({package:"react-dom",version:o}),"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"}),o.push({package:"@babel/core",version:"^7"}),o.push({package:"@rollup/plugin-commonjs",version:"^26"}),o.push({package:"@rollup/plugin-node-resolve",version:"^15"}),o.push({package:"@rollup/plugin-replace",version:"^5"}),o.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&o.push({package:"rollup-plugin-dts",version:"^6"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),o.push({package:"@rollup/plugin-alias",version:"^5"}),o.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6"}),o.push({package:"@babel/preset-env",version:"^7"}),o.push({package:"@babel/preset-react",version:"^7"})),o.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.browsersync_enabled&&o.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.1"}),e.doc.features.json_enabled&&o.push({package:"@rollup/plugin-json",version:"^6"}),e.doc.features.terser_enabled&&o.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&o.push({package:"@rollup/plugin-wasm",version:"^6"}),e.doc.features.image_enabled&&o.push({package:"@rollup/plugin-image",version:"^3"}),e.doc.features.analyzer_enabled&&o.push({package:"rollup-plugin-analyzer",version:"^3"}),e.doc.features.visualizer_enabled&&o.push({package:"rollup-plugin-visualizer",version:"^5"}),e.doc.features.string_enabled&&o.push({package:"rollup-plugin-string",version:"^3"}),e.doc.features.css_enabled){o.push({package:"rollup-plugin-postcss",version:"^4"}),o.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":o.push({package:"postcss-import",version:"^15"});break;case"postcss-url":o.push({package:"postcss-url",version:"^10"});break;case"postcss-preset-env":o.push({package:"postcss-preset-env",version:"^9"});break;case"autoprefixer":o.push({package:"autoprefixer",version:"^10"});break;case"cssnano":o.push({package:"cssnano",version:"^6"})}}))}e.doc.features.copy_enabled&&(o.push({package:"rollup-plugin-copy",version:"^3"}),o.push({package:"chokidar",version:"^3"}))},wn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n,ts:Date.now()},a=o.templateDir,s=te.resolve(o.projectDir,"src/app");ee.existsSync(s)||ee.mkdirSync(s,{recursive:!0}),await oe({pattern:["index.html.njk","index.js.njk"],dir:te.resolve(a,"src/app"),outDir:s,context:i})},yn=async({atom:e,context:t,packageDependencies:o,packageDevDependencies:n,setInProgress:i})=>{await i({message:"Creating package.json."});o.filter((e=>!0===e.dev)).forEach((e=>{n.find((t=>t.package===e.package))||n.push(e);const t=o.findIndex((t=>t.package===e.package));o.splice(t,1)}));const a=o.find((e=>"react"===e.package)),s=o.find((e=>"react-dom"===e.package));a&&!s?o.push({package:"react-dom",version:a.version}):a&&s&&(s.version=a.version),a&&e.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const 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(o.find((t=>t.package===e.package)))continue;if(n.find((t=>t.package===e.package)))continue;const i=(await re({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?n:o).push({package:e.package,subpath:e.subpath,version:`^${i}`,type:"npm"})}}const c={atom:e,packageDependencies:o,packageDevDependencies:n},l=t.templateCommonDir,p=ne.compile(ie.readFileSync(ae.resolve(l,"package.json.njk"),"utf8"),ne.configure(l)).render(c),d=t.projectDir,f=ae.resolve(d,"package.json");ie.writeFileSync(f,p,"utf8")},gn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n},a=o.templateDir,s=le.resolve(o.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})},bn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:n},a=fe.resolve(o.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 o=s[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(s)}}const l=o.templateCommonDir;let p=me.compile(de.readFileSync(fe.resolve(l,"rollup.config.mjs.njk"),"utf8"),me.configure(l)).render(i);const d=o.projectDir;let f=fe.resolve(d,"rollup.config.mjs");de.writeFileSync(f,p,"utf8")},vn=async({atom:e,setInProgress:t,context:o,njEnv:n})=>{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;r?i=await ge({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}));const c={options:i,imports:s,atom:e},l=o.templateDir,p=ye.compile(he.readFileSync(we.resolve(l,"src/default/to.yargs.js.njk"),"utf8"),n).render(c),d=o.projectDir,f=we.resolve(d,"src/default/to.yargs.js");he.writeFileSync(f,p,"utf8")},_n=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},a=o.templateCommonDir,s=_e.compile(be.readFileSync(ve.resolve(a,".gitignore.njk"),"utf8"),_e.configure(a)).render(i),r=o.projectDir,c=ve.resolve(r,".gitignore");be.writeFileSync(c,s,"utf8")},xn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:n},a=o.templateCommonDir,s=je.compile(xe.readFileSync(ke.resolve(a,"tsconfig.json.njk"),"utf8"),je.configure(a)).render(i),r=o.projectDir,c=ke.resolve(r,"tsconfig.json");xe.writeFileSync(c,s,"utf8")},kn=async({atom:e,context:t,setInProgress:o,Atom:n})=>{const i="readme.md",a=`Creating ${i}`;if(await o({message:a}),t.project?.readme){const e={content:t.project.readme.doc.content},o=t.templateCommonDir,n=De.compile(Pe.readFileSync(Se.resolve(o,`${i}.njk`),"utf8"),De.configure(o)).render(e),a=t.projectDir,s=Se.resolve(a,`${i}`);Pe.writeFileSync(s,n,"utf8")}else if(e.id){const o=await n.first({type:"wiki",parent_id:e.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:a,...s}=o.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")}},jn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});let n=Te.join("src","**","*");if(0!==Ae.exec(`prettier --write ${n} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o}).code)throw new Error("Couldnt format files.")},Dn=async({atom:e,setInProgress:t,context:o})=>{if(!e.doc.features.dts_enabled)return;const n=o.projectDir;await t({message:"Creating .d.ts"});if(0!==Ee.exec("tsc",{cwd:n}).code)throw new Error("Couldnt create .d.ts files.")},Pn=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==$e.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},Sn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==Ie.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},An=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:a,deploymentProject:s}=e;if(!0===i.enabled)if("lib"===i.name)await Vt({...e});else if("red"===i.name)await Ht({...e});else if("npm"===i.name)await Gt({...e});else if("gcs"===i.name)await Kt({...e});else if("gitlab"===i.name)await Wt({...e});else if("fnet-package"===i.name)await oo({...e});else if("fnet-form"===i.name)await no({...e});else if("fnet-node"===i.name)await ao({...e});else if("fnet-flow"===i.name)await io({...e});else{let e;if("nextjs"===i.name?e=eo:"webos"===i.name?e=Qt:"electron"===i.name?e=Zt:"docker"===i.name?e=to:"ios"===i.name?e=Xt:"macos"===i.name&&(e=Yt),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:n.projectDir,dependencies:o}),s.isDirty=!0}},{Atom:Tn}=b,En=R,$n=j,In=F,On=t,Cn=k,Nn=q,Mn=c,Rn=U,Fn=fo,qn=ho,Un=go,Bn=ko,Ln=co,zn=jo,Jn=So,Wn=Eo,Kn=Oo,Gn=No,Hn=Ro,Vn=qo,Xn=Bo,Yn=Jo,Zn=Go,Qn=Xo,ei=Zo,ti=en,oi=on,ni=({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 o=e.parent;for(;o.parent;){const n=o.childs.find((e=>e.name===t.next));if(n){e.context.next=n;break}o=o.parent}}else{let t=e.parent,o=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(void 0!==t.blockAutoJumpToParent||void 0!==t.blockAutoJumpToSibling){if(t.blockAutoJumpToParent){const n=t.childs.find((e=>e.index===o));n&&(e.context.next=n);break}t.blockAutoJumpToParent||(o=t.index+1,t=t.parent)}else{const n=t.childs.find((e=>e.index===o));if(n){e.context.next=n;break}o=t.index+1,t=t.parent}}};var ii=class{#e;#t;#o;#n;#i;#a;#s;#r;#c;#l;#p;#d;#f;#m;#u;#h;#w;#y;#g;#b;#v;constructor(e){this.#e=new mn,this.#t=e,this.#a=[],this.#s=[],this.#r={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#b={packageDependencies:this.#a,packageDevDependencies:this.#s,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Tn,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#v={initNode:this.initNode.bind(this),cloneDeep:ln,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:ni,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await dn(),this.#p=this.#t.buildId||fn(24),this.#b.buildId=this.#p,this.#u=this.#t.mode,this.#h=["all","deploy","build","file"].includes(this.#u),this.#w=["all","deploy","build"].includes(this.#u),this.#y=["all","deploy"].includes(this.#u),this.#g=["all","deploy","build","file","bpmn"].includes(this.#u),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#m=(await On({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await un(this.#b),await hn(this.#b),await this.transformWorkflow({workflow:this.#n});const e=await this.initNodeTree({workflow:this.#n});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.#b.atomAccessToken=this.#c)}async initWorkflow(){const e=this.#t.id;this.#o=this.#t.project?.workflowAtom||await Tn.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await Mn({content:this.#o.doc.content})).parsed:this.#o.doc.content;let t=this.#o.doc.bundleName;t=t||(this.#o.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#o.doc.bundleName=t,this.#o.type=this.#o.type||"workflow",this.#b.atom=this.#o}async initDependencies(){this.#a.push({package:"get-value",version:"^3.0"}),this.#a.push({package:"set-value",version:"^4.1"}),this.#o.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"})}#_(e){console.log("filePath",e),nn.statSync(e).isDirectory()?(nn.readdirSync(e).forEach((t=>{const o=an.join(e,t);this.#_(o)})),nn.rmSync(e)):nn.unlinkSync(e)}#x(e,t){const o=nn.existsSync(e),n=o&&nn.statSync(e);o&&n.isDirectory()?(nn.mkdirSync(t,{recursive:!0}),nn.readdirSync(e).forEach((o=>{this.#x(an.join(e,o),an.join(t,o))}))):nn.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,o=["node_modules"];if(nn.existsSync(e)){const t=nn.readdirSync(e);for(const n of t)if(!o.includes(n)){const t=an.join(e,n);nn.rmSync(t,{recursive:!0})}}nn.existsSync(e)||nn.mkdirSync(e,{recursive:!0});const n=an.join(e,"src");nn.existsSync(n)||nn.mkdirSync(n,{recursive:!0});const i=an.join(n,"core");this.#x(t,i);const a=an.join(n,"default","blocks");nn.existsSync(a)||nn.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=cn.configure(e,{watch:!1,dev:!0}),this.#b.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,o]=Object.entries(e)[0];if(o.hasOwnProperty("onerror")){const{onerror:n,...i}=o;e[t]={try:i,except:n}}if(e[t].hasOwnProperty("steps")){const o=e[t].steps;if(!Array.isArray(o))throw new Error("Steps must be an array.");e[t].steps=o.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),o={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#o}};t.forEach((t=>{const n={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:o,definition:e[t],index:o.childs.length,depth:o.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};o.childs.push(n)}));for await(const e of o.childs)await this.initNode({node:e});return o}async initNode({node:e}){const t={...this.#v,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await qn.hits(t))await qn.init(t);else if(await Bn.hits(t))await Bn.init(t);else if(await Ln.hits(t))await Ln.init(t);else if(await Fn.hits(t))await Fn.init(t);else if(await zn.hits(t))await zn.init(t);else if(await Un.hits(t))await Un.init(t);else if(await Jn.hits(t))await Jn.init(t);else if(await Wn.hits(t))await Wn.init(t);else if(await Kn.hits(t))await Kn.init(t);else if(await Gn.hits(t))await Gn.init(t);else if(await Hn.hits(t))await Hn.init(t);else if(await Vn.hits(t))await Vn.init(t);else if(await ti.hits(t))await ti.init(t);else if(await oi.hits(t))await oi.init(t);else if(await Yn.hits(t))await Yn.init(t);else if(await Zn.hits(t))await Zn.init(t);else if(await ei.hits(t))await ei.init(t);else if(await Xn.hits(t))await Xn.init(t);else{if(!await Qn.hits(t))throw new Error("Undefined step type.");await Qn.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const o of e.childs)await this.initNodeIndex({node:o,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const o=an.join(e.parent.indexKey,e.name);e.indexKey=o,t[o]=e;const n=[];let i=e;for(;i?.parent;)n.push(i.index),i=i.parent;n.reverse(),e.codeKey=`B_${n.join("_")}_${e.type}`,e.pathKey=`${n.join(".")}`,e.typeId=fn(24);for await(const o of e.childs)await this.initNodeIndex({node:o,index:t})}async initNodeCalls({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"call"===n.type&&o.push(n)}return e.context.calls=o,o}async initNodeCallLibs({root:e}){const t=[],o=e.context.calls;for await(const e of o){const o=e.definition.call,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.call,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"form"===n.type&&o.push(n)}return e.context.forms=o,o}async initNodeFormLibs({root:e}){const t=[],o=e.context.forms;for await(const e of o){const o=e.definition.form,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.form,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const o=e.filter((e=>"atom"===e.type));for(let e=0;e<o.length;e++){const n=o[e],i=await this.findAtomLibrary({url:n.name});n.atom=i;const a=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));a?.forEach((e=>{const o=t.find((t=>t.package===e.package));o?"string"==typeof e.path?(o.path||[]).some((t=>t===e.path))||(o.path=o.path||[],o.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(o.path||[]).some((t=>t===e))||(o.path=o.path||[],o.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=En({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#f),"ac:"===t.protocol){const o=t.pathname.split("/");if(1===o.length)return await Tn.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await Tn.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Tn.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=an.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await Cn({file:e,recursive:!0}),i=!0===this.#o.doc.features.all_parsed_imports?n.all:n.required;for await(const e of i){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=(await $n({name:e.package,groupBy:{minor:!0}}))[0][0];o.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:o},protocol:t.protocol}}if("npm:"===t.protocol){const e=(await $n({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=ln(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const o=t.params[e];if("string"==typeof o)t.params[e]={key:o,hasDefault:!1};else{const n=Object.keys(o)[0];t.params[e]={key:n,hasDefault:!0,default:o[n]}}}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.#v,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.#o.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const o=t[e].atom,n=this.#t.projectDir;if("local:"===o.protocol){const e=an.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=an.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!nn.existsSync(e)){nn.mkdirSync(an.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",nn.writeFileSync(e,t,"utf8")}o.relativePath=t.split(an.sep).join("/"),this.#o.typesDir=`./types/${an.basename(n)}/src`}else if("npm:"===o.protocol)o.relativePath=o.name;else{const e=`${n}/src/libs/${o.id}.js`,t=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;nn.writeFileSync(an.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=cn.compile(nn.readFileSync(an.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=an.resolve(n,"src/default/index.js");nn.writeFileSync(i,o,"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,o=cn.compile(nn.readFileSync(an.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=an.resolve(n,`src/default/${e.codeKey}.js`);nn.writeFileSync(i,o,"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 o=this.#t.templateDir;return t=cn.compile(nn.readFileSync(an.resolve(o,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#i),this.#r[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,o=`${e.codeKey}.js`,n=an.resolve(t,`src/default/blocks/${o}`);nn.writeFileSync(n,e.context.render,"utf8"),e.context.fileName=o,e.context.filePath=n}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(pn(e)){const t=Object.keys(e);for(let o=0;o<t.length;o++)e[t[o]]=await this.transformValue(e[t[o]])}else if("string"==typeof e){const t=await Nn({expression:e});if(t){const{processor:o,statement:n}=t;switch(o){case"v":e=`$::v.${n}::`;break;case"e":e=`$::${n}::`;break;case"m":e=`$::closure.module['${n}']::`;break;case"f":e=`$::closure.form.${n}::`;break;case"for":e=`$::caller.for.${n}::`}}}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:o,...n}=this.#o.doc,i={content:sn.stringify(n)},a=this.#t.templateDir,s=cn.compile(nn.readFileSync(an.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=an.resolve(r,`${e}`);nn.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:sn.stringify(this.#n)},n=this.#t.templateDir,i=cn.compile(nn.readFileSync(an.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),a=this.#t.projectDir,s=an.resolve(a,`${e}`);nn.writeFileSync(s,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=rn.exec("prettier --write .",{cwd:an.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 o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&await o.save()}}else if(this.#o.id){const e=await Tn.list({type:"workflow.deploy",parent_id:this.#o.id});for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&(o=await Tn.update(o,{id:o.id}))}}}async deployProject(e){const{deploymentProject:t}=e,o=t.doc.targets;for(let e=0;e<o.length;e++){const n=o[e];await An({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await Tn.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await Tn.update(n,{id:n.id})):n=await Tn.create({parent_id:this.#m.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:o.version}]}})}async setInProgress({message:e}){console.log(Rn.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#g&&!this.#h)return await this.createNetwork();try{const e=this.#g?await In({root:this.#l}):void 0;if(this.#h){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#g){const t=this.#t.project?.projectDir||this.#t.projectDir;nn.writeFileSync(an.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 kn(this.#b),await xn(this.#b),await _n(this.#b),await vn(this.#b),await gn(this.#b),await wn(this.#b),await bn(this.#b),await yn(this.#b),await jn(this.#b),await Dn(this.#b),this.#w&&(await Pn(this.#b),await Sn(this.#b),this.#y&&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 In({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 ai=d,si=f;var ri=function({baseDir:e=__dirname}){let t=e;for(;t!==si.parse(t).root;){const e=si.join(t,"node_modules");if(ai.existsSync(e))return e;t=si.dirname(t)}return null};const ci=process.cwd(),{spawn:li}=e;t({name:["redis"],dir:ci,optional:!0});const pi=o,di=n,{hideBin:fi}=i,mi=a,ui=s,hi=r,wi=c,yi=t,gi=l,bi=p,vi=ii,_i=ri({baseDir:__dirname}),xi="win32"===process.platform?";":":";process.env.PATH=`${pi.join(_i,"/.bin")}${xi}${process.env.PATH}`;let ki=di(fi(process.argv)).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=pi.resolve(_i,"./@fnet/cli-project-flow/dist/template/project"),o=pi.resolve(ci,e.name);mi.existsSync(o)||mi.mkdirSync(o),await bi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0});let n=hi.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(hi.which("git")&&(n=hi.exec("git init",{cwd:o}),0!==n.code))throw new Error("Failed to initialize git.");if(hi.which("code")&&e.vscode&&(n=hi.exec(`cd ${o} && code .`),0!==n.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=pi.resolve(_i,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd();if(e.name=pi.basename(o),e.update){if(await bi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0}),0!==hi.exec("fnet build",{cwd:o}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",alias:"m",default:"build",choices:["all","file","build","deploy","bpmn"]})),(async e=>{try{const t=await Di(e),o=new vi(t);await o.init(),await o.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"})),(async e=>{try{const t=await Di({...e,mode:"all"}),o=new vi(t);await o.init(),await o.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"})),(async e=>{try{const t=await Di({...e,mode:"file"}),o=new vi(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function ji(e,{name:t,bin:o,preArgs:n=[]}){return e.command(`${t||o} [commands..]`,`${o} ${n.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Di(e),{projectDir:i}=t,a=process.argv.slice(3);li(o,[...n,...a],{cwd:i,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Di(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:pi.resolve(ci,`./.output/${e.id}`),templateDir:pi.resolve(_i,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:pi.resolve(_i,"./@fnet/cli-project-common/dist/template/default"),coreDir:pi.resolve(_i,"./@fnet/cli-project-flow/dist/template/core")}}{const t=await async function(){const e=pi.resolve(ci,"flow.yaml");if(!mi.existsSync(e))throw new Error("flow.yaml file not found in current directory.");const t=mi.readFileSync(e,"utf8"),{parsed:o}=await wi({content:t}),n=pi.dirname(e),i=o.main||"flow.main.yaml";let a=pi.resolve(n,i);if(!mi.existsSync(a)&&(a=pi.resolve(n,i+".yaml"),!mi.existsSync(a)))throw new Error(`${i} file not found in ${a}.`);const s=mi.readFileSync(a,"utf8"),{parsed:r}=await wi({content:s}),c={workflowAtom:{doc:{...o,"content-type":"yaml",content:s}},projectDir:n,projectFilePath:e,projectFileContent:t,projectFileParsed:o,projectMainFilePath:a,projectMainFileContent:s,projectMainFileParsed:r},l=pi.resolve(n,"flow.devops.yaml");if(mi.existsSync(l)){const e=mi.readFileSync(l,"utf8"),t=ui.parse(e);c.devops={filePath:l,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{mi.writeFileSync(c.devops.filePath,ui.stringify(c.devops.doc))}}}const p=pi.resolve(n,"readme.md");if(mi.existsSync(p)){const e=mi.readFileSync(p,"utf8");c.readme={filePath:p,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return c}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:pi.resolve(_i,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:pi.resolve(_i,"./@fnet/cli-project-common/dist/template/default"),coreDir:pi.resolve(_i,"./@fnet/cli-project-flow/dist/template/core"),projectDir:pi.resolve(t.projectDir,"./.workspace"),projectSrcDir:pi.resolve(t.projectDir,"./src"),project:t}}}ki=ki.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Di(e),{project:o}=t,{projectDir:n,projectFileParsed:i}=o,a=i.config;if(!a)throw new Error("Config schema not found in project file.");const s=await gi({schema:a}),r=pi.resolve(n,".fnet");mi.existsSync(r)||mi.mkdirSync(r);const c=pi.resolve(r,`${e.name}.fnet`);mi.writeFileSync(c,ui.stringify(s))}catch(e){console.error(e.message),process.exit(1)}})),ki=ji(ki,{bin:"npm"}),ki=ji(ki,{bin:"node"}),ki=ji(ki,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),ki=ji(ki,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),ki=ji(ki,{name:"app",bin:"npm",preArgs:["run","app","--"]}),ki=ji(ki,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),ki=ji(ki,{bin:"npx"}),ki=ji(ki,{bin:"cdk"}),ki=ji(ki,{bin:"aws"}),ki=function(e,{name:t,preArgs:o=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Di(e),{projectDir:n}=t,i=e.config,a=await yi({name:i,dir:n,transferEnv:!1,optional:!0}),s=a?.data?.env||void 0,r=e.command,c=process.argv.slice(5);li(r,[...o,...c],{cwd:n,stdio:"inherit",shell:!0,env:{...process.env,...s}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(ki,{name:"with"}),ki.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.45.3",
3
+ "version": "0.45.4",
4
4
  "files": [
5
5
  "dist"
6
6
  ],