@fnet/cli 0.44.0 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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("js-yaml"),f=require("nunjucks"),g=require("redis"),y=require("@flownet/lib-is-redis-online"),w=require("nanoid"),h=require("@flownet/lib-atom-api-js"),b=require("axios"),_=require("qs"),v=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),x=require("@flownet/lib-list-npm-versions"),k=require("@fnet/yargs-options-from-schema"),D=require("@fnet/shell"),A=require("semver"),P=require("node:os"),S=require("@node-red/util"),I=require("@flownet/lib-to-ios-app"),E=require("lodash.clonedeep"),$=require("@flownet/lib-to-macos-app"),T=require("@flownet/lib-to-electron"),O=require("@flownet/lib-to-webos"),C=require("@flownet/lib-to-nextjs"),M=require("@flownet/lib-to-docker"),R=require("form-data"),q=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-pick-npm-versions"),L=require("chalk");const N=g,U=y;const{Api:z}=h,B=b.default,J=_;const W=v,K=d,G=m,H=j;function X({dir:e,name:t="index"}){let a=G.resolve(e,`./${t}.tsx`);if(K.existsSync(a)||(a=G.resolve(e,`./${t}.ts`)),K.existsSync(a)||(a=G.resolve(e,`./${t}.jsx`)),K.existsSync(a)||(a=G.resolve(e,`./${t}.js`)),!K.existsSync(a))return{};const o=a,n=G.extname(a);return{file:o,ext:n,ts:".ts"===n||".tsx"===n,name:t}}const Y=x;const Z=d,Q=m,V=p;const ee=f,te=d,ae=m,oe=j,ne=x;const re=d,ie=m,se=p;const ce=d,le=m,pe=f,de=j;const me=d,ue=m,fe=f,ge=k;const ye=d,we=m,he=f;const be=d,_e=m,ve=f;const je=f,xe=d,ke=m;const De=s,Ae=a;const Pe=s;const Se=s;const Ie=s;const Ee=D,$e=t;const Te=d,Oe=m,Ce=A,Me=D,Re=t;const qe=d,Fe=m,Le=A,Ne=s,Ue=t;const ze=d,Be=m,Je=P,We=f,Ke=S,Ge=t;const He=r,Xe=a,Ye=t;const Ze=t,Qe=I,Ve=E,et=A;const tt=t,at=$,ot=E,nt=A;const rt=t,it=T,st=E,ct=A;const lt=t,pt=O,dt=E,mt=A;const ut=t,ft=C,gt=E,yt=A;const wt=t,ht=M,bt=E,_t=A;const vt=d,jt=m,xt=A,kt=D,Dt=t,At=b.default;const Pt=A,St=t,It=b.default;const Et=A,$t=t,Tt=b.default,Ot=r,Ct=D,Mt=R;const Rt=A,qt=t,Ft=b.default,Lt=r,Nt=D,Ut=R;const zt=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 $e({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 Ee({cmd:i}),a.isDirty=!0)},Bt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:n})=>{await e({message:"Deploying it as gcs package."});const r=t.projectDir,i=Oe.resolve(r,"package.json"),s=Te.readFileSync(i),c=JSON.parse(s);c.name=o.params.name,c.version=Ce.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,Te.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='${Oe.resolve(Oe.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 Me({cmd:d}),Te.writeFileSync(i,s),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=c.version,await n({target:o,packageJSON:c}))},Jt=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=qe.readFileSync(i),c=JSON.parse(s);c.name=n.params.name,c.version=Le.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 ."},qe.writeFileSync(i,JSON.stringify(c,null,"\t"));const p=(await Ue({name:a.npmConfig||"npm",dir:a.projectDir}))?.data;if(qe.writeFileSync(Fe.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===n.dryRun)return;if(0!==Ne.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");qe.writeFileSync(i,s),o.isDirty=!0,n.params.version=c.version},Wt=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||Ke.util.generateId(),label:`${p}/${e.id?e.id:Je.hostname()}/${e.name}/${n.deploy.name||n.deploy.template}`},function:{id:Ke.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Be.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Ke.util.generateId(),...n.params?.inject,payload:"json"===n.params?.inject?.payloadType?`'${JSON.stringify(n.params?.inject?.payload)}'`:n.params?.inject?.payload},debug:{id:Ke.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||Ke.util.generateId(),label:`${p}/${e.id?e.id:Je.hostname()}/${n.deploy.name||n.deploy.template}`},function:{id:Ke.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Be.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Ke.util.generateId(),schedules:t},debug:{id:Ke.util.generateId()}}}}else{if("http"!==n.deploy.template)return;d={atom:e,packageDependencies:i,red:{tab:{id:n.deploy.id||Ke.util.generateId(),label:`${p}/${e.id?e.id:Je.hostname()}/${n.deploy.name||n.deploy.template}`},function:{id:Ke.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Be.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Ke.util.generateId(),method:n.params.method||"get",url:n.params.url},httpout:{id:Ke.util.generateId()},debug:{id:Ke.util.generateId()}}}}let m=We.compile(ze.readFileSync(Be.resolve(l,`deploy/node-red/${n.deploy.template}.yaml.njk`),"utf8"),s).render(d);if(ze.writeFileSync(Be.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===n.dryRun)return;o.isDirty=!0;const u=(await Ge({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}},Kt=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 Ye({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:He.readFileSync(Xe.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:He.readFileSync(Xe.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:He.readFileSync(Xe.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})},Gt=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 Ze({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=et.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=Ve(t.params);s.dependencies=Ve(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await Qe(c)}},Ht=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 tt({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=nt.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=ot(t.params);s.dependencies=ot(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await at(c)}},Xt=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 rt({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=ct.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=st(t.params);s.dependencies=st(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await it(c)}},Yt=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 lt({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=mt.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=dt(t.params);s.dependencies=dt(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await pt(c)}},Zt=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 ut({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=yt.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=gt(t.params);s.dependencies=gt(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await ft(c)}},Qt=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 wt({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=_t.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=bt(t.params);s.dependencies=bt(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await ht(c)}},Vt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:n})=>{await e({message:"Deploying it as fnet package."});const r=t.projectDir,i=jt.resolve(r,"package.json"),s=vt.readFileSync(i),c=JSON.parse(s);c.name=o.params.name,c.version=xt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,vt.writeFileSync(i,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Dt({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 At({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='${jt.resolve(jt.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 kt({cmd:y}),vt.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 At({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.")},ea=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet form."});const n=Pt.inc(o.params.version,"patch"),{file:r,data:i}=await St({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 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}`);a.isDirty=!0,o.params.version=n;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await It({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet form.")},ta=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet flow."});const n=Et.inc(o.params.version,"patch"),{file:r,data:i}=await $t({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 Tt({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 Tt({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 Ct({cmd:f});if(0!==g.code)throw new Error(g.stderr);const y=JSON.parse(g.stdout).path;let w=new Mt;w.append("file",Ot.createReadStream(y));const h=await Tt.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.")},aa=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 qt({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 Nt({cmd:f});if(0!==g.code)throw new Error(g.stderr);const y=JSON.parse(g.stdout).path;let w=new Ut;w.append("file",Lt.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 oa=d,na=m,ra=u,ia=s,sa=f,ca=async()=>{if(!await U({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=N.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:la}=w,pa=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(z.set_api_url(e.data.url),t)return z.set_req_token(t),void a(t);B({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:J.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{z.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{z.set_req_token(),o(e)}))}))}},da=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=G.resolve(t.project.projectDir),n=X({dir:G.resolve(o,"./app")});if(n.file){let e=await H({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 H({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=X({dir:G.resolve(o,"./cli")});if(r.file){let e=await H({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 H({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=X({dir:G.resolve(o,"./src")});if(e.file){let t=await H({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 H({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:`${G.normalize(a.app.dir||".")}`,files:[G.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=W(p,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=W({},a.replace_options||a.replace?.options||{}),a.terser_options=W({},a.terser_options||a.terser?.options||{}),a.css_options=W({},a.css_options||a.css?.options||{}),a.wasm_options=W({},a.wasm_options||a.wasm?.options||{}),a.copy_options=W(l,a.copy_options||a.copy?.options||{}),a.json_options=W({},a.json_options||a.json?.options||{}),a.image_options=W({},a.image_options||a.image?.options||{}),a.analyzer_options=W({summaryOnly:!0,limit:12},a.analyzer_options||a.analyzer?.options||{}),a.visualizer_options=W({},a.visualizer_options||a.visualizer?.options||{}),a.string_options=W({},a.string_options||a.string?.options||{}),a.rollup=a.rollup||{},a.rollup_output=W(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=W(a.browsersync_options,t.browsersync_options),t.replace_options=W(a.replace_options,t.replace_options),t.terser_options=W(a.terser_options,t.terser_options),t.css_options=W(a.css_options,t.css_options),t.wasm_options=W(a.wasm_options,t.wasm_options),t.copy_options=W(a.copy_options,t.copy_options),t.json_options=W(a.json_options,t.json_options),t.image_options=W(a.image_options,t.image_options),t.analyzer_options=W(a.analyzer_options,t.analyzer_options),t.visualizer_options=W(a.visualizer_options,t.visualizer_options),t.string_options=W(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},ma=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 Y({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"}),a.push({package:"rollup-plugin-delete",version:"^2"}),e.doc.features.dts_enabled&&a.push({package:"rollup-plugin-dts",version:"^6"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),a.push({package:"@rollup/plugin-alias",version:"^5"}),a.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6"}),a.push({package:"@babel/preset-env",version:"^7"}),a.push({package:"@babel/preset-react",version:"^7"})),e.doc.features.browsersync_enabled&&a.push({package:"rollup-plugin-browsersync",version:"^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"}))},ua=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=Q.resolve(a.projectDir,"src/app");Z.existsSync(i)||Z.mkdirSync(i,{recursive:!0}),await V({pattern:["index.html.njk","index.js.njk"],dir:Q.resolve(r,"src/app"),outDir:i,context:n})},fa=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: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 n=t.file;if(!te.existsSync(n))throw new Error(`App file not found: ${n}`);const r=await oe({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 ne({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=ee.compile(te.readFileSync(ae.resolve(l,"package.json.njk"),"utf8"),ee.configure(l)).render(c),d=t.projectDir,m=ae.resolve(d,"package.json");te.writeFileSync(m,p,"utf8")},ga=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=ie.resolve(a.projectDir,"src/cli");re.existsSync(i)||re.mkdirSync(i,{recursive:!0}),await se({pattern:["index.js.njk"],dir:ie.resolve(r,"src/cli"),outDir:i,context:n})},ya=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const n={atom:e,packageDependencies:o},r=le.resolve(a.projectDir,"src","default/index.js");if(!ce.existsSync(r))throw new Error(`Entry file not found: ${r}`);const i=(await de({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=pe.compile(ce.readFileSync(le.resolve(l,"rollup.config.mjs.njk"),"utf8"),pe.configure(l)).render(n);const d=a.projectDir;let m=le.resolve(d,"rollup.config.mjs");ce.writeFileSync(m,p,"utf8")},wa=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 ge({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=fe.compile(me.readFileSync(ue.resolve(l,"src/default/to.yargs.js.njk"),"utf8"),o).render(c),d=a.projectDir,m=ue.resolve(d,"src/default/to.yargs.js");me.writeFileSync(m,p,"utf8")},ha=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const n={atom:e,packageDependencies:o},r=a.templateCommonDir,i=he.compile(ye.readFileSync(we.resolve(r,".gitignore.njk"),"utf8"),he.configure(r)).render(n),s=a.projectDir,c=we.resolve(s,".gitignore");ye.writeFileSync(c,i,"utf8")},ba=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=ve.compile(be.readFileSync(_e.resolve(r,"tsconfig.json.njk"),"utf8"),ve.configure(r)).render(n),s=a.projectDir,c=_e.resolve(s,"tsconfig.json");be.writeFileSync(c,i,"utf8")},_a=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=je.compile(xe.readFileSync(ke.resolve(a,`${n}.njk`),"utf8"),je.configure(a)).render(e),r=t.projectDir,i=ke.resolve(r,`${n}`);xe.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=je.compile(xe.readFileSync(ke.resolve(c,`${n}.njk`),"utf8"),je.configure(c)).render(s),p=t.projectDir,d=ke.resolve(p,`${n}`);xe.writeFileSync(d,l,"utf8")}},va=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=Ae.join("src","**","*");if(0!==De.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},ja=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!==Pe.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},xa=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==Se.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},ka=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==Ie.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},Da=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 Kt({...e});else if("red"===n.name)await Wt({...e});else if("npm"===n.name)await Jt({...e});else if("gcs"===n.name)await Bt({...e});else if("gitlab"===n.name)await zt({...e});else if("fnet-package"===n.name)await Vt({...e});else if("fnet-form"===n.name)await ea({...e});else if("fnet-node"===n.name)await aa({...e});else if("fnet-flow"===n.name)await ta({...e});else{let e;if("nextjs"===n.name?e=Zt:"webos"===n.name?e=Yt:"electron"===n.name?e=Xt:"docker"===n.name?e=Qt:"ios"===n.name?e=Gt:"macos"===n.name&&(e=Ht),!e)return;await e({atom:t,target:n,onProgress:r,projectDir:o.projectDir,dependencies:a}),i.isDirty=!0}},{Atom:Aa}=h,Pa=q,Sa=t,Ia=j,Ea=F,$a=L;var Ta=class{#e;#t;#a;#o;#n;#r;#i;#s;#c;#l;#p;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new pa,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:Aa,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 ca(),this.#c=this.#t.buildId||la(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 Sa({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 da(this.#y),await ma(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 Aa.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"];oa.existsSync(e)&&oa.readdirSync(e).forEach((o=>{a.includes(o)||(t=ia.rm("-rf",na.join(e,o)))}));let o=e;if(!oa.existsSync(o)&&(t=ia.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=na.join(e,"src"),!oa.existsSync(o)&&(t=ia.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=na.join(e,"src","default"),!oa.existsSync()&&(t=ia.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=sa.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=Pa({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 Aa.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await Aa.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Aa.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=na.resolve(this.#t.projectSrcDir,"index.js"),a=await Ia({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 Ea({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=na.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=na.relative(na.join(this.#t.projectDir,"src","default"),e);if(!oa.existsSync(e)){oa.mkdirSync(na.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",oa.writeFileSync(e,t,"utf8")}a.relativePath=t.split(na.sep).join("/"),this.#a.typesDir=`./types/${na.basename(o)}/src`}else{const e=na.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;oa.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=sa.compile(oa.readFileSync(na.resolve(t,na.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,n=na.resolve(o,na.join("src","default","index.js"));oa.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:ra.dump(o)},r=this.#t.templateDir,i=sa.compile(oa.readFileSync(na.resolve(r,`${e}.njk`),"utf8"),this.#o).render(n),s=this.#t.projectDir,c=na.resolve(s,`${e}`);oa.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 Aa.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 Aa.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 Da({...this.#y,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await Aa.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await Aa.update(o,{id:o.id})):o=await Aa.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($a.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 _a(this.#y),await ba(this.#y),await ha(this.#y),await wa(this.#y),await ga(this.#y),await ua(this.#y),await ya(this.#y),await fa(this.#y),await va(this.#y),await ja(this.#y),this.#f&&(await xa(this.#y),await ka(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 Oa=d,Ca=m;var Ma=function({baseDir:e=__dirname}){let t=e;for(;t!==Ca.parse(t).root;){const e=Ca.join(t,"node_modules");if(Oa.existsSync(e))return e;t=Ca.dirname(t)}return null};const Ra=process.cwd(),{spawn:qa}=e;t({name:["redis"],dir:Ra,optional:!0});const Fa=a,La=o,{hideBin:Na}=n,Ua=r,za=i,Ba=s,Ja=c,Wa=t,Ka=l,Ga=p,Ha=Ta,Xa=Ma({baseDir:__dirname}),Ya="win32"===process.platform?";":":";process.env.PATH=`${Fa.join(Xa,"/.bin")}${Ya}${process.env.PATH}`;let Za=La(Na(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(Xa,"@fnet/cli-project-node/dist/template/project"),a=Fa.resolve(Ra,e.name);Ua.existsSync(a)||Ua.mkdirSync(a),await Ga({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=Ba.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Ba.which("git")&&(o=Ba.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(Ba.which("code")&&e.vscode&&(o=Ba.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(Xa,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=Fa.basename(a),e.update){if(await Ga({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==Ba.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 Va(e),a=new Ha(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 Va({...e,mode:"all"}),a=new Ha(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 Va({...e,mode:"file"}),a=new Ha(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 Qa(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 Va(e),{projectDir:n}=t,r=process.argv.slice(3);qa(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 Va(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Fa.resolve(Xa,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Fa.resolve(Xa,"./@fnet/cli-project-common/dist/template/default"),projectDir:Fa.resolve(Ra,`./.output/${e.id}`)};{const t=await async function(){const e=Fa.resolve(Ra,"node.yaml");if(!Ua.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Ua.readFileSync(e,"utf8"),{parsed:a}=await Ja({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(Ua.existsSync(r)){const e=Ua.readFileSync(r,"utf8"),t=za.parse(e);n.devops={filePath:r,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Ua.writeFileSync(n.devops.filePath,za.stringify(n.devops.doc))}}}const i=Fa.resolve(o,"readme.md");if(Ua.existsSync(i)){const e=Ua.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(Xa,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Fa.resolve(Xa,"./@fnet/cli-project-common/dist/template/default"),projectDir:Fa.resolve(t.projectDir,"./.workspace"),projectSrcDir:Fa.resolve(t.projectDir,"./src"),project:t}}}Za=Za.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Va(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 Ka({schema:r}),s=Fa.resolve(o,".fnet");Ua.existsSync(s)||Ua.mkdirSync(s);const c=Fa.resolve(s,`${e.name}.fnet`);Ua.writeFileSync(c,za.stringify(i))}catch(e){console.error(e.message),process.exit(1)}})),Za=Qa(Za,{bin:"npm"}),Za=Qa(Za,{bin:"node"}),Za=Qa(Za,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Za=Qa(Za,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Za=Qa(Za,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Za=Qa(Za,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Za=Qa(Za,{bin:"npx"}),Za=Qa(Za,{bin:"cdk"}),Za=Qa(Za,{bin:"aws"}),Za=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 Va(e),{projectDir:o}=t,n=e.config,r=await Wa({name:n,dir:o,transferEnv:!1,optional:!0}),i=r?.data?.env||void 0,s=e.command,c=process.argv.slice(5);qa(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)}}))}(Za,{name:"with"}),Za.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("js-yaml"),f=require("nunjucks"),g=require("redis"),y=require("@flownet/lib-is-redis-online"),w=require("nanoid"),h=require("@flownet/lib-atom-api-js"),b=require("axios"),_=require("qs"),v=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),x=require("@flownet/lib-list-npm-versions"),k=require("@fnet/yargs-options-from-schema"),D=require("@fnet/shell"),A=require("semver"),P=require("node:os"),S=require("@node-red/util"),I=require("@flownet/lib-to-ios-app"),E=require("lodash.clonedeep"),$=require("@flownet/lib-to-macos-app"),T=require("@flownet/lib-to-electron"),O=require("@flownet/lib-to-webos"),C=require("@flownet/lib-to-nextjs"),M=require("@flownet/lib-to-docker"),R=require("form-data"),q=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-pick-npm-versions"),L=require("chalk");const N=g,U=y;const{Api:z}=h,B=b.default,J=_;const W=v,K=d,G=m,H=j;function X({dir:e,name:t="index"}){let a=G.resolve(e,`./${t}.tsx`);if(K.existsSync(a)||(a=G.resolve(e,`./${t}.ts`)),K.existsSync(a)||(a=G.resolve(e,`./${t}.jsx`)),K.existsSync(a)||(a=G.resolve(e,`./${t}.js`)),!K.existsSync(a))return{};const o=a,n=G.extname(a);return{file:o,ext:n,ts:".ts"===n||".tsx"===n,name:t}}const Y=x;const Z=d,Q=m,V=p;const ee=f,te=d,ae=m,oe=j,ne=x;const re=d,ie=m,se=p;const ce=d,le=m,pe=f,de=j;const me=d,ue=m,fe=f,ge=k;const ye=d,we=m,he=f;const be=d,_e=m,ve=f;const je=f,xe=d,ke=m;const De=s,Ae=a;const Pe=s;const Se=s;const Ie=s;const Ee=D,$e=t;const Te=d,Oe=m,Ce=A,Me=D,Re=t;const qe=d,Fe=m,Le=A,Ne=s,Ue=t;const ze=d,Be=m,Je=P,We=f,Ke=S,Ge=t;const He=r,Xe=a,Ye=t;const Ze=t,Qe=I,Ve=E,et=A;const tt=t,at=$,ot=E,nt=A;const rt=t,it=T,st=E,ct=A;const lt=t,pt=O,dt=E,mt=A;const ut=t,ft=C,gt=E,yt=A;const wt=t,ht=M,bt=E,_t=A;const vt=d,jt=m,xt=A,kt=D,Dt=t,At=b.default;const Pt=A,St=t,It=b.default;const Et=A,$t=t,Tt=b.default,Ot=r,Ct=D,Mt=R;const Rt=A,qt=t,Ft=b.default,Lt=r,Nt=D,Ut=R;const zt=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 $e({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 Ee({cmd:i}),a.isDirty=!0)},Bt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:n})=>{await e({message:"Deploying it as gcs package."});const r=t.projectDir,i=Oe.resolve(r,"package.json"),s=Te.readFileSync(i),c=JSON.parse(s);c.name=o.params.name,c.version=Ce.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,Te.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='${Oe.resolve(Oe.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 Me({cmd:d}),Te.writeFileSync(i,s),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=c.version,await n({target:o,packageJSON:c}))},Jt=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=qe.readFileSync(i),c=JSON.parse(s);c.name=n.params.name,c.version=Le.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 ."},qe.writeFileSync(i,JSON.stringify(c,null,"\t"));const p=(await Ue({name:a.npmConfig||"npm",dir:a.projectDir}))?.data;if(qe.writeFileSync(Fe.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===n.dryRun)return;if(0!==Ne.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");qe.writeFileSync(i,s),o.isDirty=!0,n.params.version=c.version},Wt=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||Ke.util.generateId(),label:`${p}/${e.id?e.id:Je.hostname()}/${e.name}/${n.deploy.name||n.deploy.template}`},function:{id:Ke.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Be.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Ke.util.generateId(),...n.params?.inject,payload:"json"===n.params?.inject?.payloadType?`'${JSON.stringify(n.params?.inject?.payload)}'`:n.params?.inject?.payload},debug:{id:Ke.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||Ke.util.generateId(),label:`${p}/${e.id?e.id:Je.hostname()}/${n.deploy.name||n.deploy.template}`},function:{id:Ke.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Be.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Ke.util.generateId(),schedules:t},debug:{id:Ke.util.generateId()}}}}else{if("http"!==n.deploy.template)return;d={atom:e,packageDependencies:i,red:{tab:{id:n.deploy.id||Ke.util.generateId(),label:`${p}/${e.id?e.id:Je.hostname()}/${n.deploy.name||n.deploy.template}`},function:{id:Ke.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Be.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Ke.util.generateId(),method:n.params.method||"get",url:n.params.url},httpout:{id:Ke.util.generateId()},debug:{id:Ke.util.generateId()}}}}let m=We.compile(ze.readFileSync(Be.resolve(l,`deploy/node-red/${n.deploy.template}.yaml.njk`),"utf8"),s).render(d);if(ze.writeFileSync(Be.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===n.dryRun)return;o.isDirty=!0;const u=(await Ge({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}},Kt=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 Ye({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:He.readFileSync(Xe.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:He.readFileSync(Xe.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:He.readFileSync(Xe.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})},Gt=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 Ze({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=et.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=Ve(t.params);s.dependencies=Ve(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await Qe(c)}},Ht=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 tt({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=nt.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=ot(t.params);s.dependencies=ot(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await at(c)}},Xt=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 rt({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=ct.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=st(t.params);s.dependencies=st(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await it(c)}},Yt=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 lt({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=mt.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=dt(t.params);s.dependencies=dt(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await pt(c)}},Zt=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 ut({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=yt.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=gt(t.params);s.dependencies=gt(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await ft(c)}},Qt=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 wt({name:t.config,dir:o,optional:!0,transferEnv:!1}):void 0,i=_t.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=bt(t.params);s.dependencies=bt(n);const c={atom:e,params:s,config:r?.config,src:o,dest:o};return{deployer:await ht(c)}},Vt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:n})=>{await e({message:"Deploying it as fnet package."});const r=t.projectDir,i=jt.resolve(r,"package.json"),s=vt.readFileSync(i),c=JSON.parse(s);c.name=o.params.name,c.version=xt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,vt.writeFileSync(i,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Dt({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 At({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='${jt.resolve(jt.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 kt({cmd:y}),vt.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 At({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.")},ea=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet form."});const n=Pt.inc(o.params.version,"patch"),{file:r,data:i}=await St({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 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}`);a.isDirty=!0,o.params.version=n;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await It({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet form.")},ta=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet flow."});const n=Et.inc(o.params.version,"patch"),{file:r,data:i}=await $t({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 Tt({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 Tt({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 Ct({cmd:f});if(0!==g.code)throw new Error(g.stderr);const y=JSON.parse(g.stdout).path;let w=new Mt;w.append("file",Ot.createReadStream(y));const h=await Tt.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.")},aa=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 qt({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 Nt({cmd:f});if(0!==g.code)throw new Error(g.stderr);const y=JSON.parse(g.stdout).path;let w=new Ut;w.append("file",Lt.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 oa=d,na=m,ra=u,ia=s,sa=f,ca=async()=>{if(!await U({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=N.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:la}=w,pa=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(z.set_api_url(e.data.url),t)return z.set_req_token(t),void a(t);B({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:J.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{z.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{z.set_req_token(),o(e)}))}))}},da=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=G.resolve(t.project.projectDir),n=X({dir:G.resolve(o,"./app")});if(n.file){let e=await H({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 H({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=X({dir:G.resolve(o,"./cli")});if(r.file){let e=await H({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 H({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=X({dir:G.resolve(o,"./src")});if(e.file){let t=await H({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 H({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:`${G.normalize(a.app.dir||".")}`,files:[G.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=W(p,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=W({},a.replace_options||a.replace?.options||{}),a.terser_options=W({},a.terser_options||a.terser?.options||{}),a.css_options=W({},a.css_options||a.css?.options||{}),a.wasm_options=W({},a.wasm_options||a.wasm?.options||{}),a.copy_options=W(l,a.copy_options||a.copy?.options||{}),a.json_options=W({},a.json_options||a.json?.options||{}),a.image_options=W({},a.image_options||a.image?.options||{}),a.analyzer_options=W({summaryOnly:!0,limit:12},a.analyzer_options||a.analyzer?.options||{}),a.visualizer_options=W({},a.visualizer_options||a.visualizer?.options||{}),a.string_options=W({},a.string_options||a.string?.options||{}),a.rollup=a.rollup||{},a.rollup_output=W(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=W(a.browsersync_options,t.browsersync_options),t.replace_options=W(a.replace_options,t.replace_options),t.terser_options=W(a.terser_options,t.terser_options),t.css_options=W(a.css_options,t.css_options),t.wasm_options=W(a.wasm_options,t.wasm_options),t.copy_options=W(a.copy_options,t.copy_options),t.json_options=W(a.json_options,t.json_options),t.image_options=W(a.image_options,t.image_options),t.analyzer_options=W(a.analyzer_options,t.analyzer_options),t.visualizer_options=W(a.visualizer_options,t.visualizer_options),t.string_options=W(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},ma=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 Y({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"}))},ua=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=Q.resolve(a.projectDir,"src/app");Z.existsSync(i)||Z.mkdirSync(i,{recursive:!0}),await V({pattern:["index.html.njk","index.js.njk"],dir:Q.resolve(r,"src/app"),outDir:i,context:n})},fa=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: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 n=t.file;if(!te.existsSync(n))throw new Error(`App file not found: ${n}`);const r=await oe({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 ne({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=ee.compile(te.readFileSync(ae.resolve(l,"package.json.njk"),"utf8"),ee.configure(l)).render(c),d=t.projectDir,m=ae.resolve(d,"package.json");te.writeFileSync(m,p,"utf8")},ga=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=ie.resolve(a.projectDir,"src/cli");re.existsSync(i)||re.mkdirSync(i,{recursive:!0}),await se({pattern:["index.js.njk"],dir:ie.resolve(r,"src/cli"),outDir:i,context:n})},ya=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const n={atom:e,packageDependencies:o},r=le.resolve(a.projectDir,"src","default/index.js");if(!ce.existsSync(r))throw new Error(`Entry file not found: ${r}`);const i=(await de({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=pe.compile(ce.readFileSync(le.resolve(l,"rollup.config.mjs.njk"),"utf8"),pe.configure(l)).render(n);const d=a.projectDir;let m=le.resolve(d,"rollup.config.mjs");ce.writeFileSync(m,p,"utf8")},wa=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 ge({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=fe.compile(me.readFileSync(ue.resolve(l,"src/default/to.yargs.js.njk"),"utf8"),o).render(c),d=a.projectDir,m=ue.resolve(d,"src/default/to.yargs.js");me.writeFileSync(m,p,"utf8")},ha=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const n={atom:e,packageDependencies:o},r=a.templateCommonDir,i=he.compile(ye.readFileSync(we.resolve(r,".gitignore.njk"),"utf8"),he.configure(r)).render(n),s=a.projectDir,c=we.resolve(s,".gitignore");ye.writeFileSync(c,i,"utf8")},ba=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=ve.compile(be.readFileSync(_e.resolve(r,"tsconfig.json.njk"),"utf8"),ve.configure(r)).render(n),s=a.projectDir,c=_e.resolve(s,"tsconfig.json");be.writeFileSync(c,i,"utf8")},_a=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=je.compile(xe.readFileSync(ke.resolve(a,`${n}.njk`),"utf8"),je.configure(a)).render(e),r=t.projectDir,i=ke.resolve(r,`${n}`);xe.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=je.compile(xe.readFileSync(ke.resolve(c,`${n}.njk`),"utf8"),je.configure(c)).render(s),p=t.projectDir,d=ke.resolve(p,`${n}`);xe.writeFileSync(d,l,"utf8")}},va=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=Ae.join("src","**","*");if(0!==De.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},ja=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!==Pe.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},xa=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==Se.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},ka=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==Ie.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},Da=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 Kt({...e});else if("red"===n.name)await Wt({...e});else if("npm"===n.name)await Jt({...e});else if("gcs"===n.name)await Bt({...e});else if("gitlab"===n.name)await zt({...e});else if("fnet-package"===n.name)await Vt({...e});else if("fnet-form"===n.name)await ea({...e});else if("fnet-node"===n.name)await aa({...e});else if("fnet-flow"===n.name)await ta({...e});else{let e;if("nextjs"===n.name?e=Zt:"webos"===n.name?e=Yt:"electron"===n.name?e=Xt:"docker"===n.name?e=Qt:"ios"===n.name?e=Gt:"macos"===n.name&&(e=Ht),!e)return;await e({atom:t,target:n,onProgress:r,projectDir:o.projectDir,dependencies:a}),i.isDirty=!0}},{Atom:Aa}=h,Pa=q,Sa=t,Ia=j,Ea=F,$a=L;var Ta=class{#e;#t;#a;#o;#n;#r;#i;#s;#c;#l;#p;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new pa,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:Aa,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 ca(),this.#c=this.#t.buildId||la(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 Sa({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 da(this.#y),await ma(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 Aa.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"];oa.existsSync(e)&&oa.readdirSync(e).forEach((o=>{a.includes(o)||(t=ia.rm("-rf",na.join(e,o)))}));let o=e;if(!oa.existsSync(o)&&(t=ia.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=na.join(e,"src"),!oa.existsSync(o)&&(t=ia.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=na.join(e,"src","default"),!oa.existsSync()&&(t=ia.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=sa.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=Pa({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 Aa.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await Aa.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Aa.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=na.resolve(this.#t.projectSrcDir,"index.js"),a=await Ia({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 Ea({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=na.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=na.relative(na.join(this.#t.projectDir,"src","default"),e);if(!oa.existsSync(e)){oa.mkdirSync(na.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",oa.writeFileSync(e,t,"utf8")}a.relativePath=t.split(na.sep).join("/"),this.#a.typesDir=`./types/${na.basename(o)}/src`}else{const e=na.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;oa.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=sa.compile(oa.readFileSync(na.resolve(t,na.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,n=na.resolve(o,na.join("src","default","index.js"));oa.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:ra.dump(o)},r=this.#t.templateDir,i=sa.compile(oa.readFileSync(na.resolve(r,`${e}.njk`),"utf8"),this.#o).render(n),s=this.#t.projectDir,c=na.resolve(s,`${e}`);oa.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 Aa.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 Aa.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 Da({...this.#y,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await Aa.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await Aa.update(o,{id:o.id})):o=await Aa.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($a.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 _a(this.#y),await ba(this.#y),await ha(this.#y),await wa(this.#y),await ga(this.#y),await ua(this.#y),await ya(this.#y),await fa(this.#y),await va(this.#y),await ja(this.#y),this.#f&&(await xa(this.#y),await ka(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 Oa=d,Ca=m;var Ma=function({baseDir:e=__dirname}){let t=e;for(;t!==Ca.parse(t).root;){const e=Ca.join(t,"node_modules");if(Oa.existsSync(e))return e;t=Ca.dirname(t)}return null};const Ra=process.cwd(),{spawn:qa}=e;t({name:["redis"],dir:Ra,optional:!0});const Fa=a,La=o,{hideBin:Na}=n,Ua=r,za=i,Ba=s,Ja=c,Wa=t,Ka=l,Ga=p,Ha=Ta,Xa=Ma({baseDir:__dirname}),Ya="win32"===process.platform?";":":";process.env.PATH=`${Fa.join(Xa,"/.bin")}${Ya}${process.env.PATH}`;let Za=La(Na(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(Xa,"@fnet/cli-project-node/dist/template/project"),a=Fa.resolve(Ra,e.name);Ua.existsSync(a)||Ua.mkdirSync(a),await Ga({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=Ba.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Ba.which("git")&&(o=Ba.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(Ba.which("code")&&e.vscode&&(o=Ba.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(Xa,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=Fa.basename(a),e.update){if(await Ga({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==Ba.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 Va(e),a=new Ha(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 Va({...e,mode:"all"}),a=new Ha(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 Va({...e,mode:"file"}),a=new Ha(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 Qa(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 Va(e),{projectDir:n}=t,r=process.argv.slice(3);qa(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 Va(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Fa.resolve(Xa,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Fa.resolve(Xa,"./@fnet/cli-project-common/dist/template/default"),projectDir:Fa.resolve(Ra,`./.output/${e.id}`)};{const t=await async function(){const e=Fa.resolve(Ra,"node.yaml");if(!Ua.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Ua.readFileSync(e,"utf8"),{parsed:a}=await Ja({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(Ua.existsSync(r)){const e=Ua.readFileSync(r,"utf8"),t=za.parse(e);n.devops={filePath:r,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Ua.writeFileSync(n.devops.filePath,za.stringify(n.devops.doc))}}}const i=Fa.resolve(o,"readme.md");if(Ua.existsSync(i)){const e=Ua.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(Xa,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Fa.resolve(Xa,"./@fnet/cli-project-common/dist/template/default"),projectDir:Fa.resolve(t.projectDir,"./.workspace"),projectSrcDir:Fa.resolve(t.projectDir,"./src"),project:t}}}Za=Za.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Va(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 Ka({schema:r}),s=Fa.resolve(o,".fnet");Ua.existsSync(s)||Ua.mkdirSync(s);const c=Fa.resolve(s,`${e.name}.fnet`);Ua.writeFileSync(c,za.stringify(i))}catch(e){console.error(e.message),process.exit(1)}})),Za=Qa(Za,{bin:"npm"}),Za=Qa(Za,{bin:"node"}),Za=Qa(Za,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Za=Qa(Za,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Za=Qa(Za,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Za=Qa(Za,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Za=Qa(Za,{bin:"npx"}),Za=Qa(Za,{bin:"cdk"}),Za=Qa(Za,{bin:"aws"}),Za=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 Va(e),{projectDir:o}=t,n=e.config,r=await Wa({name:n,dir:o,transferEnv:!1,optional:!0}),i=r?.data?.env||void 0,s=e.command,c=process.argv.slice(5);qa(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)}}))}(Za,{name:"with"}),Za.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("js-yaml"),u=require("nunjucks"),h=require("lodash.clonedeep"),w=require("isobject"),y=require("redis"),g=require("@flownet/lib-is-redis-online"),b=require("nanoid"),v=require("@flownet/lib-atom-api-js"),_=require("axios"),x=require("qs"),k=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),D=require("@flownet/lib-list-npm-versions"),P=require("@fnet/yargs-options-from-schema"),S=require("@fnet/shell"),A=require("semver"),T=require("node:os"),E=require("@node-red/util"),$=require("@flownet/lib-to-ios-app"),I=require("@flownet/lib-to-macos-app"),O=require("@flownet/lib-to-electron"),C=require("@flownet/lib-to-webos"),N=require("@flownet/lib-to-nextjs"),M=require("@flownet/lib-to-docker"),F=require("form-data"),R=require("@flownet/lib-parse-node-url"),q=require("@flownet/lib-bpmn-from-flow"),U=require("@fnet/expression"),B=require("chalk"),L=require("lodash.pick"),z=require("lodash.omit");const J=y,W=g;const{Api:K}=v,G=_.default,H=x;const V=k,X=d,Y=f,Z=j;function Q({dir:e,name:t="index"}){let o=Y.resolve(e,`./${t}.tsx`);if(X.existsSync(o)||(o=Y.resolve(e,`./${t}.ts`)),X.existsSync(o)||(o=Y.resolve(e,`./${t}.jsx`)),X.existsSync(o)||(o=Y.resolve(e,`./${t}.js`)),!X.existsSync(o))return{};const n=o,i=Y.extname(o);return{file:n,ext:i,ts:".ts"===i||".tsx"===i,name:t}}const ee=D;const te=d,oe=f,ne=p;const ie=u,ae=d,re=f,se=j,ce=D;const le=d,pe=f,de=p;const fe=d,me=f,ue=u,he=j;const we=d,ye=f,ge=u,be=P;const ve=d,_e=f,xe=u;const ke=d,je=f,De=u;const Pe=u,Se=d,Ae=f;const Te=s,Ee=o;const $e=s;const Ie=s;const Oe=s;const Ce=S,Ne=t;const Me=d,Fe=f,Re=A,qe=S,Ue=t;const Be=d,Le=f,ze=A,Je=s,We=t;const Ke=d,Ge=f,He=T,Ve=u,Xe=E,Ye=t;const Ze=a,Qe=o,et=t;const tt=t,ot=$,nt=h,it=A;const at=t,rt=I,st=h,ct=A;const lt=t,pt=O,dt=h,ft=A;const mt=t,ut=C,ht=h,wt=A;const yt=t,gt=N,bt=h,vt=A;const _t=t,xt=M,kt=h,jt=A;const Dt=d,Pt=f,St=A,At=S,Tt=t,Et=_.default;const $t=A,It=t,Ot=_.default;const Ct=A,Nt=t,Mt=_.default,Ft=a,Rt=S,qt=F;const Ut=A,Bt=t,Lt=_.default,zt=a,Jt=S,Wt=F;const Kt=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 Ne({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 Ce({cmd:r}),o.isDirty=!0)},Gt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as gcs package."});const a=t.projectDir,r=Fe.resolve(a,"package.json"),s=Me.readFileSync(r),c=JSON.parse(s);c.name=n.params.name,c.version=Re.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,Me.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Ue({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='${Fe.resolve(Fe.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 qe({cmd:d}),Me.writeFileSync(r,s),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=c.version,await i({target:n,packageJSON:c}))},Ht=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as npm package."});const a=o.projectDir,r=Le.resolve(a,"package.json"),s=Be.readFileSync(r),c=JSON.parse(s);c.name=i.params.name,c.version=ze.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 ."},Be.writeFileSync(r,JSON.stringify(c,null,"\t"));const p=(await We({name:o.npmConfig||"npm",dir:o.projectDir}))?.data;if(Be.writeFileSync(Le.resolve(a,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==Je.exec("npm publish --access public",{cwd:a}).code)throw new Error("Couldnt publish to npm");Be.writeFileSync(r,s),n.isDirty=!0,i.params.version=c.version},Vt=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||Xe.util.generateId(),label:`${p}/${e.id?e.id:He.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Xe.util.generateId(),name:e.doc.name,initialize:{content:Ke.readFileSync(Ge.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Xe.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Xe.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||Xe.util.generateId(),label:`${p}/${e.id?e.id:He.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Xe.util.generateId(),name:e.doc.name,initialize:{content:Ke.readFileSync(Ge.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Xe.util.generateId(),schedules:t},debug:{id:Xe.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:i.deploy.id||Xe.util.generateId(),label:`${p}/${e.id?e.id:He.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Xe.util.generateId(),name:e.doc.name,initialize:{content:Ke.readFileSync(Ge.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Xe.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Xe.util.generateId()},debug:{id:Xe.util.generateId()}}}}let f=Ve.compile(Ke.readFileSync(Ge.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),s).render(d);if(Ke.writeFileSync(Ge.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;n.isDirty=!0;const m=(await Ye({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}},Xt=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 et({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:Ze.readFileSync(Qe.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Ze.readFileSync(Qe.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Ze.readFileSync(Qe.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})},Yt=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 tt({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=it.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=nt(t.params);s.dependencies=nt(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await ot(c)}},Zt=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 at({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=ct.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=st(t.params);s.dependencies=st(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await rt(c)}},Qt=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 lt({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=ft.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=dt(t.params);s.dependencies=dt(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await pt(c)}},eo=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 mt({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=wt.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=ht(t.params);s.dependencies=ht(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await ut(c)}},to=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 yt({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=vt.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=bt(t.params);s.dependencies=bt(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await gt(c)}},oo=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 _t({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=jt.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=kt(t.params);s.dependencies=kt(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await xt(c)}},no=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as fnet package."});const a=t.projectDir,r=Pt.resolve(a,"package.json"),s=Dt.readFileSync(r),c=JSON.parse(s);c.name=n.params.name,c.version=St.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,Dt.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Tt({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 Et({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='${Pt.resolve(Pt.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 At({cmd:w}),Dt.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 Et({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.")},io=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet form."});const i=$t.inc(n.params.version,"patch"),{file:a,data:r}=await It({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 Ot({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 Ot({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.")},ao=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet flow."});const i=Ct.inc(n.params.version,"patch"),{file:a,data:r}=await Nt({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 Mt({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 Mt({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 qt;y.append("file",Ft.createReadStream(w));const g=await Mt.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.")},ro=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet node."});const i=Ut.inc(n.params.version,"patch"),{file:a,data:r}=await Bt({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 Lt({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 Lt({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 Jt({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Wt;y.append("file",zt.createReadStream(w));const g=await Lt.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 so=h;async function co({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 lo={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=co},resolve:co};const po=U,fo=lo;var mo={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>po({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=>po({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 fo.init(e)}};const uo=h;async function ho({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||uo(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||uo(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var wo={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=ho},resolve:ho};const yo=h;async function go({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=yo(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 bo={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=go},resolve:go};const vo=h,_o=L,xo=z;async function ko({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||vo(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await t({node:e}),o({node:e})}var jo={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]=[_o(e.definition.for,t),xo(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=ko},resolve:ko};var Do={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 Po=h;async function So({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||Po(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var Ao={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=So},resolve:So};const To=h;async function Eo({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||To(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var $o={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=Eo},resolve:Eo};const Io=h;async function Oo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Io(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 Co={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=Oo},resolve:Oo};const No=Co;var Mo={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 No.init(e)}};const Fo=Co;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 Fo.init(e)}};const qo=Co;var Uo={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 qo.init(e)}};async function Bo({node:e}){e.context.next=e.childs[0]}var Lo={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=Bo},resolve:Bo};const zo=h;async function Jo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||zo(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 Wo={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=Jo},resolve:Jo};const Ko=h;async function Go({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||Ko(e.definition),await t({node:e})}var Ho={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Go},resolve:Go};const Vo=h;async function Xo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Vo(e.definition);const i=e.context.transform;i.next=await n(i.next),await t({node:e}),o({node:e})}var Yo={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Xo},resolve:Xo};const Zo=Co;var Qo={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 Zo.init(e)}};const en=Co;var tn={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 en.init(e)}};const on=Co;var nn={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 on.init(e)}};const an=d,rn=f,sn=m,cn=s,ln=u,pn=h,dn=w,fn=async()=>{if(!await W({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=J.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:mn}=b,un=class{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(K.set_api_url(e.data.url),t)return K.set_req_token(t),void o(t);G({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:H.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{K.set_req_token(e.data.access_token),o(e.data.access_token)})).catch((e=>{K.set_req_token(),n(e)}))}))}},hn=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=Y.resolve(t.project.projectDir),i=Q({dir:Y.resolve(n,"./app")});if(i.file){let e=await Z({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 Z({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=Q({dir:Y.resolve(n,"./cli")});if(a.file){let e=await Z({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 Z({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=Q({dir:Y.resolve(n,"./src")});if(e.file){let t=await Z({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 Z({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:`${Y.normalize(o.app.dir||".")}`,files:[Y.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=V(p,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=V({},o.replace_options||o.replace?.options||{}),o.terser_options=V({},o.terser_options||o.terser?.options||{}),o.css_options=V({},o.css_options||o.css?.options||{}),o.wasm_options=V({},o.wasm_options||o.wasm?.options||{}),o.copy_options=V(l,o.copy_options||o.copy?.options||{}),o.json_options=V({},o.json_options||o.json?.options||{}),o.image_options=V({},o.image_options||o.image?.options||{}),o.analyzer_options=V({summaryOnly:!0,limit:12},o.analyzer_options||o.analyzer?.options||{}),o.visualizer_options=V({},o.visualizer_options||o.visualizer?.options||{}),o.string_options=V({},o.string_options||o.string?.options||{}),o.rollup=o.rollup||{},o.rollup_output=V(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=V(o.browsersync_options,t.browsersync_options),t.replace_options=V(o.replace_options,t.replace_options),t.terser_options=V(o.terser_options,t.terser_options),t.css_options=V(o.css_options,t.css_options),t.wasm_options=V(o.wasm_options,t.wasm_options),t.copy_options=V(o.copy_options,t.copy_options),t.json_options=V(o.json_options,t.json_options),t.image_options=V(o.image_options,t.image_options),t.analyzer_options=V(o.analyzer_options,t.analyzer_options),t.visualizer_options=V(o.visualizer_options,t.visualizer_options),t.string_options=V(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},wn=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 ee({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"}),o.push({package:"rollup-plugin-delete",version:"^2"}),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"})),e.doc.features.browsersync_enabled&&o.push({package:"rollup-plugin-browsersync",version:"^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"}))},yn=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=oe.resolve(o.projectDir,"src/app");te.existsSync(r)||te.mkdirSync(r,{recursive:!0}),await ne({pattern:["index.html.njk","index.js.njk"],dir:oe.resolve(a,"src/app"),outDir:r,context:i})},gn=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:re.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&s.push({file:re.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(!ae.existsSync(i))throw new Error(`App file not found: ${i}`);const a=await se({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 ce({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=ie.compile(ae.readFileSync(re.resolve(l,"package.json.njk"),"utf8"),ie.configure(l)).render(c),d=t.projectDir,f=re.resolve(d,"package.json");ae.writeFileSync(f,p,"utf8")},bn=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=pe.resolve(o.projectDir,"src/cli");le.existsSync(r)||le.mkdirSync(r,{recursive:!0}),await de({pattern:["index.js.njk"],dir:pe.resolve(a,"src/cli"),outDir:r,context:i})},vn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:n},a=me.resolve(o.projectDir,"src","default/index.js");if(!fe.existsSync(a))throw new Error(`Entry file not found: ${a}`);const r=(await he({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=ue.compile(fe.readFileSync(me.resolve(l,"rollup.config.mjs.njk"),"utf8"),ue.configure(l)).render(i);const d=o.projectDir;let f=me.resolve(d,"rollup.config.mjs");fe.writeFileSync(f,p,"utf8")},_n=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 be({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=ge.compile(we.readFileSync(ye.resolve(l,"src/default/to.yargs.js.njk"),"utf8"),n).render(c),d=o.projectDir,f=ye.resolve(d,"src/default/to.yargs.js");we.writeFileSync(f,p,"utf8")},xn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},a=o.templateCommonDir,r=xe.compile(ve.readFileSync(_e.resolve(a,".gitignore.njk"),"utf8"),xe.configure(a)).render(i),s=o.projectDir,c=_e.resolve(s,".gitignore");ve.writeFileSync(c,r,"utf8")},kn=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=De.compile(ke.readFileSync(je.resolve(a,"tsconfig.json.njk"),"utf8"),De.configure(a)).render(i),s=o.projectDir,c=je.resolve(s,"tsconfig.json");ke.writeFileSync(c,r,"utf8")},jn=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=Pe.compile(Se.readFileSync(Ae.resolve(o,`${i}.njk`),"utf8"),Pe.configure(o)).render(e),a=t.projectDir,r=Ae.resolve(a,`${i}`);Se.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=Pe.compile(Se.readFileSync(Ae.resolve(c,`${i}.njk`),"utf8"),Pe.configure(c)).render(s),p=t.projectDir,d=Ae.resolve(p,`${i}`);Se.writeFileSync(d,l,"utf8")}},Dn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});let n=Ee.join("src","**","*");if(0!==Te.exec(`prettier --write ${n} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o}).code)throw new Error("Couldnt format files.")},Pn=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!==$e.exec("tsc",{cwd:n}).code)throw new Error("Couldnt create .d.ts files.")},Sn=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==Ie.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},An=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==Oe.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},Tn=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 Xt({...e});else if("red"===i.name)await Vt({...e});else if("npm"===i.name)await Ht({...e});else if("gcs"===i.name)await Gt({...e});else if("gitlab"===i.name)await Kt({...e});else if("fnet-package"===i.name)await no({...e});else if("fnet-form"===i.name)await io({...e});else if("fnet-node"===i.name)await ro({...e});else if("fnet-flow"===i.name)await ao({...e});else{let e;if("nextjs"===i.name?e=to:"webos"===i.name?e=eo:"electron"===i.name?e=Qt:"docker"===i.name?e=oo:"ios"===i.name?e=Yt:"macos"===i.name&&(e=Zt),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:n.projectDir,dependencies:o}),r.isDirty=!0}},{Atom:En}=v,$n=R,In=D,On=q,Cn=t,Nn=j,Mn=U,Fn=c,Rn=B,qn=mo,Un=wo,Bn=bo,Ln=jo,zn=lo,Jn=Do,Wn=Ao,Kn=$o,Gn=Co,Hn=Mo,Vn=Ro,Xn=Uo,Yn=Lo,Zn=Wo,Qn=Ho,ei=Yo,ti=Qo,oi=tn,ni=nn,ii=({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 ai=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 un,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:En,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#v={initNode:this.initNode.bind(this),cloneDeep:pn,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:ii,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 fn(),this.#p=this.#t.buildId||mn(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 Cn({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await hn(this.#b),await wn(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 En.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await Fn({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),an.statSync(e).isDirectory()?(an.readdirSync(e).forEach((t=>{const o=rn.join(e,t);this.#_(o)})),an.rmSync(e)):an.unlinkSync(e)}#x(e,t){const o=an.existsSync(e),n=o&&an.statSync(e);o&&n.isDirectory()?(an.mkdirSync(t,{recursive:!0}),an.readdirSync(e).forEach((o=>{this.#x(rn.join(e,o),rn.join(t,o))}))):an.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,o=["node_modules"];if(an.existsSync(e)){const t=an.readdirSync(e);for(const n of t)if(!o.includes(n)){const t=rn.join(e,n);an.rmSync(t,{recursive:!0})}}an.existsSync(e)||an.mkdirSync(e,{recursive:!0});const n=rn.join(e,"src");an.existsSync(n)||an.mkdirSync(n,{recursive:!0});const i=rn.join(n,"core");this.#x(t,i);const a=rn.join(n,"default","blocks");an.existsSync(a)||an.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=ln.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 Un.hits(t))await Un.init(t);else if(await Ln.hits(t))await Ln.init(t);else if(await zn.hits(t))await zn.init(t);else if(await qn.hits(t))await qn.init(t);else if(await Jn.hits(t))await Jn.init(t);else if(await Bn.hits(t))await Bn.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 Xn.hits(t))await Xn.init(t);else if(await oi.hits(t))await oi.init(t);else if(await ni.hits(t))await ni.init(t);else if(await Zn.hits(t))await Zn.init(t);else if(await Qn.hits(t))await Qn.init(t);else if(await ti.hits(t))await ti.init(t);else if(await Yn.hits(t))await Yn.init(t);else{if(!await ei.hits(t))throw new Error("Undefined step type.");await ei.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=rn.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=mn(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=$n({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 En.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await En.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await En.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=rn.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await Nn({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 In({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 In({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=pn(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=rn.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=rn.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!an.existsSync(e)){an.mkdirSync(rn.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",an.writeFileSync(e,t,"utf8")}o.relativePath=t.split(rn.sep).join("/"),this.#o.typesDir=`./types/${rn.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;an.writeFileSync(rn.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=ln.compile(an.readFileSync(rn.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=rn.resolve(n,"src/default/index.js");an.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=ln.compile(an.readFileSync(rn.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=rn.resolve(n,`src/default/${e.codeKey}.js`);an.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=ln.compile(an.readFileSync(rn.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=rn.resolve(t,`src/default/blocks/${o}`);an.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(dn(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 Mn({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.dump(n)},a=this.#t.templateDir,r=ln.compile(an.readFileSync(rn.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),s=this.#t.projectDir,c=rn.resolve(s,`${e}`);an.writeFileSync(c,r,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:sn.dump(this.#n)},n=this.#t.templateDir,i=ln.compile(an.readFileSync(rn.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),a=this.#t.projectDir,r=rn.resolve(a,`${e}`);an.writeFileSync(r,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=cn.exec("prettier --write .",{cwd:rn.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 En.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 En.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 Tn({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await En.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await En.update(n,{id:n.id})):n=await En.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 On({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;an.writeFileSync(rn.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 jn(this.#b),await kn(this.#b),await xn(this.#b),await _n(this.#b),await bn(this.#b),await yn(this.#b),await vn(this.#b),await gn(this.#b),await Dn(this.#b),await Pn(this.#b),this.#w&&(await Sn(this.#b),await An(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 On({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 ri=d,si=f;var ci=function({baseDir:e=__dirname}){let t=e;for(;t!==si.parse(t).root;){const e=si.join(t,"node_modules");if(ri.existsSync(e))return e;t=si.dirname(t)}return null};const li=process.cwd(),{spawn:pi}=e;t({name:["redis"],dir:li,optional:!0});const di=o,fi=n,{hideBin:mi}=i,ui=a,hi=r,wi=s,yi=c,gi=t,bi=l,vi=p,_i=ai,xi=ci({baseDir:__dirname}),ki="win32"===process.platform?";":":";process.env.PATH=`${di.join(xi,"/.bin")}${ki}${process.env.PATH}`;let ji=fi(mi(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=di.resolve(xi,"./@fnet/cli-project-flow/dist/template/project"),o=di.resolve(li,e.name);ui.existsSync(o)||ui.mkdirSync(o),await vi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0});let n=wi.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(wi.which("git")&&(n=wi.exec("git init",{cwd:o}),0!==n.code))throw new Error("Failed to initialize git.");if(wi.which("code")&&e.vscode&&(n=wi.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=di.resolve(xi,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd();if(e.name=di.basename(o),e.update){if(await vi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0}),0!==wi.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 Pi(e),o=new _i(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 Pi({...e,mode:"all"}),o=new _i(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 Pi({...e,mode:"file"}),o=new _i(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 Di(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 Pi(e),{projectDir:i}=t,a=process.argv.slice(3);pi(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 Pi(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:di.resolve(li,`./.output/${e.id}`),templateDir:di.resolve(xi,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:di.resolve(xi,"./@fnet/cli-project-common/dist/template/default"),coreDir:di.resolve(xi,"./@fnet/cli-project-flow/dist/template/core")}}{const t=await async function(){const e=di.resolve(li,"flow.yaml");if(!ui.existsSync(e))throw new Error("flow.yaml file not found in current directory.");const t=ui.readFileSync(e,"utf8"),{parsed:o}=await yi({content:t}),n=di.dirname(e),i=o.main||"flow.main.yaml";let a=di.resolve(n,i);if(!ui.existsSync(a)&&(a=di.resolve(n,i+".yaml"),!ui.existsSync(a)))throw new Error(`${i} file not found in ${a}.`);const r=ui.readFileSync(a,"utf8"),{parsed:s}=await yi({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=di.resolve(n,"flow.devops.yaml");if(ui.existsSync(l)){const e=ui.readFileSync(l,"utf8"),t=hi.parse(e);c.devops={filePath:l,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{ui.writeFileSync(c.devops.filePath,hi.stringify(c.devops.doc))}}}const p=di.resolve(n,"readme.md");if(ui.existsSync(p)){const e=ui.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:di.resolve(xi,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:di.resolve(xi,"./@fnet/cli-project-common/dist/template/default"),coreDir:di.resolve(xi,"./@fnet/cli-project-flow/dist/template/core"),projectDir:di.resolve(t.projectDir,"./.workspace"),projectSrcDir:di.resolve(t.projectDir,"./src"),project:t}}}ji=ji.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Pi(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 bi({schema:a}),s=di.resolve(n,".fnet");ui.existsSync(s)||ui.mkdirSync(s);const c=di.resolve(s,`${e.name}.fnet`);ui.writeFileSync(c,hi.stringify(r))}catch(e){console.error(e.message),process.exit(1)}})),ji=Di(ji,{bin:"npm"}),ji=Di(ji,{bin:"node"}),ji=Di(ji,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),ji=Di(ji,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),ji=Di(ji,{name:"app",bin:"npm",preArgs:["run","app","--"]}),ji=Di(ji,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),ji=Di(ji,{bin:"npx"}),ji=Di(ji,{bin:"cdk"}),ji=Di(ji,{bin:"aws"}),ji=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 Pi(e),{projectDir:n}=t,i=e.config,a=await gi({name:i,dir:n,transferEnv:!1,optional:!0}),r=a?.data?.env||void 0,s=e.command,c=process.argv.slice(5);pi(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)}}))}(ji,{name:"with"}),ji.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"),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("js-yaml"),u=require("nunjucks"),h=require("lodash.clonedeep"),w=require("isobject"),y=require("redis"),g=require("@flownet/lib-is-redis-online"),b=require("nanoid"),v=require("@flownet/lib-atom-api-js"),_=require("axios"),x=require("qs"),k=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),D=require("@flownet/lib-list-npm-versions"),P=require("@fnet/yargs-options-from-schema"),S=require("@fnet/shell"),A=require("semver"),T=require("node:os"),E=require("@node-red/util"),$=require("@flownet/lib-to-ios-app"),I=require("@flownet/lib-to-macos-app"),O=require("@flownet/lib-to-electron"),C=require("@flownet/lib-to-webos"),N=require("@flownet/lib-to-nextjs"),M=require("@flownet/lib-to-docker"),F=require("form-data"),R=require("@flownet/lib-parse-node-url"),q=require("@flownet/lib-bpmn-from-flow"),U=require("@fnet/expression"),B=require("chalk"),L=require("lodash.pick"),z=require("lodash.omit");const J=y,W=g;const{Api:K}=v,G=_.default,H=x;const V=k,X=d,Y=f,Z=j;function Q({dir:e,name:t="index"}){let o=Y.resolve(e,`./${t}.tsx`);if(X.existsSync(o)||(o=Y.resolve(e,`./${t}.ts`)),X.existsSync(o)||(o=Y.resolve(e,`./${t}.jsx`)),X.existsSync(o)||(o=Y.resolve(e,`./${t}.js`)),!X.existsSync(o))return{};const n=o,i=Y.extname(o);return{file:n,ext:i,ts:".ts"===i||".tsx"===i,name:t}}const ee=D;const te=d,oe=f,ne=p;const ie=u,ae=d,re=f,se=j,ce=D;const le=d,pe=f,de=p;const fe=d,me=f,ue=u,he=j;const we=d,ye=f,ge=u,be=P;const ve=d,_e=f,xe=u;const ke=d,je=f,De=u;const Pe=u,Se=d,Ae=f;const Te=s,Ee=o;const $e=s;const Ie=s;const Oe=s;const Ce=S,Ne=t;const Me=d,Fe=f,Re=A,qe=S,Ue=t;const Be=d,Le=f,ze=A,Je=s,We=t;const Ke=d,Ge=f,He=T,Ve=u,Xe=E,Ye=t;const Ze=a,Qe=o,et=t;const tt=t,ot=$,nt=h,it=A;const at=t,rt=I,st=h,ct=A;const lt=t,pt=O,dt=h,ft=A;const mt=t,ut=C,ht=h,wt=A;const yt=t,gt=N,bt=h,vt=A;const _t=t,xt=M,kt=h,jt=A;const Dt=d,Pt=f,St=A,At=S,Tt=t,Et=_.default;const $t=A,It=t,Ot=_.default;const Ct=A,Nt=t,Mt=_.default,Ft=a,Rt=S,qt=F;const Ut=A,Bt=t,Lt=_.default,zt=a,Jt=S,Wt=F;const Kt=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 Ne({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 Ce({cmd:r}),o.isDirty=!0)},Gt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as gcs package."});const a=t.projectDir,r=Fe.resolve(a,"package.json"),s=Me.readFileSync(r),c=JSON.parse(s);c.name=n.params.name,c.version=Re.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,Me.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Ue({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='${Fe.resolve(Fe.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 qe({cmd:d}),Me.writeFileSync(r,s),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=c.version,await i({target:n,packageJSON:c}))},Ht=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as npm package."});const a=o.projectDir,r=Le.resolve(a,"package.json"),s=Be.readFileSync(r),c=JSON.parse(s);c.name=i.params.name,c.version=ze.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 ."},Be.writeFileSync(r,JSON.stringify(c,null,"\t"));const p=(await We({name:o.npmConfig||"npm",dir:o.projectDir}))?.data;if(Be.writeFileSync(Le.resolve(a,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==Je.exec("npm publish --access public",{cwd:a}).code)throw new Error("Couldnt publish to npm");Be.writeFileSync(r,s),n.isDirty=!0,i.params.version=c.version},Vt=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||Xe.util.generateId(),label:`${p}/${e.id?e.id:He.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Xe.util.generateId(),name:e.doc.name,initialize:{content:Ke.readFileSync(Ge.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Xe.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Xe.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||Xe.util.generateId(),label:`${p}/${e.id?e.id:He.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Xe.util.generateId(),name:e.doc.name,initialize:{content:Ke.readFileSync(Ge.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Xe.util.generateId(),schedules:t},debug:{id:Xe.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:i.deploy.id||Xe.util.generateId(),label:`${p}/${e.id?e.id:He.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Xe.util.generateId(),name:e.doc.name,initialize:{content:Ke.readFileSync(Ge.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Xe.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Xe.util.generateId()},debug:{id:Xe.util.generateId()}}}}let f=Ve.compile(Ke.readFileSync(Ge.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),s).render(d);if(Ke.writeFileSync(Ge.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;n.isDirty=!0;const m=(await Ye({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}},Xt=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 et({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:Ze.readFileSync(Qe.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Ze.readFileSync(Qe.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Ze.readFileSync(Qe.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})},Yt=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 tt({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=it.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=nt(t.params);s.dependencies=nt(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await ot(c)}},Zt=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 at({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=ct.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=st(t.params);s.dependencies=st(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await rt(c)}},Qt=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 lt({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=ft.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=dt(t.params);s.dependencies=dt(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await pt(c)}},eo=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 mt({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=wt.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=ht(t.params);s.dependencies=ht(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await ut(c)}},to=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 yt({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=vt.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=bt(t.params);s.dependencies=bt(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await gt(c)}},oo=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 _t({name:t.config,dir:n,optional:!0,transferEnv:!1}):void 0,r=jt.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=kt(t.params);s.dependencies=kt(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await xt(c)}},no=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as fnet package."});const a=t.projectDir,r=Pt.resolve(a,"package.json"),s=Dt.readFileSync(r),c=JSON.parse(s);c.name=n.params.name,c.version=St.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,Dt.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Tt({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 Et({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='${Pt.resolve(Pt.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 At({cmd:w}),Dt.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 Et({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.")},io=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet form."});const i=$t.inc(n.params.version,"patch"),{file:a,data:r}=await It({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 Ot({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 Ot({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.")},ao=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet flow."});const i=Ct.inc(n.params.version,"patch"),{file:a,data:r}=await Nt({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 Mt({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 Mt({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 qt;y.append("file",Ft.createReadStream(w));const g=await Mt.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.")},ro=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet node."});const i=Ut.inc(n.params.version,"patch"),{file:a,data:r}=await Bt({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 Lt({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 Lt({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 Jt({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Wt;y.append("file",zt.createReadStream(w));const g=await Lt.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 so=h;async function co({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 lo={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=co},resolve:co};const po=U,fo=lo;var mo={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>po({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=>po({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 fo.init(e)}};const uo=h;async function ho({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||uo(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||uo(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var wo={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=ho},resolve:ho};const yo=h;async function go({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=yo(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 bo={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=go},resolve:go};const vo=h,_o=L,xo=z;async function ko({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||vo(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await t({node:e}),o({node:e})}var jo={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]=[_o(e.definition.for,t),xo(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=ko},resolve:ko};var Do={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 Po=h;async function So({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||Po(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var Ao={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=So},resolve:So};const To=h;async function Eo({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||To(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var $o={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=Eo},resolve:Eo};const Io=h;async function Oo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Io(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 Co={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=Oo},resolve:Oo};const No=Co;var Mo={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 No.init(e)}};const Fo=Co;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 Fo.init(e)}};const qo=Co;var Uo={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 qo.init(e)}};async function Bo({node:e}){e.context.next=e.childs[0]}var Lo={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=Bo},resolve:Bo};const zo=h;async function Jo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||zo(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 Wo={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=Jo},resolve:Jo};const Ko=h;async function Go({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||Ko(e.definition),await t({node:e})}var Ho={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Go},resolve:Go};const Vo=h;async function Xo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Vo(e.definition);const i=e.context.transform;i.next=await n(i.next),await t({node:e}),o({node:e})}var Yo={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Xo},resolve:Xo};const Zo=Co;var Qo={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 Zo.init(e)}};const en=Co;var tn={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 en.init(e)}};const on=Co;var nn={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 on.init(e)}};const an=d,rn=f,sn=m,cn=s,ln=u,pn=h,dn=w,fn=async()=>{if(!await W({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=J.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:mn}=b,un=class{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(K.set_api_url(e.data.url),t)return K.set_req_token(t),void o(t);G({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:H.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{K.set_req_token(e.data.access_token),o(e.data.access_token)})).catch((e=>{K.set_req_token(),n(e)}))}))}},hn=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=Y.resolve(t.project.projectDir),i=Q({dir:Y.resolve(n,"./app")});if(i.file){let e=await Z({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 Z({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=Q({dir:Y.resolve(n,"./cli")});if(a.file){let e=await Z({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 Z({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=Q({dir:Y.resolve(n,"./src")});if(e.file){let t=await Z({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 Z({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:`${Y.normalize(o.app.dir||".")}`,files:[Y.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=V(p,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=V({},o.replace_options||o.replace?.options||{}),o.terser_options=V({},o.terser_options||o.terser?.options||{}),o.css_options=V({},o.css_options||o.css?.options||{}),o.wasm_options=V({},o.wasm_options||o.wasm?.options||{}),o.copy_options=V(l,o.copy_options||o.copy?.options||{}),o.json_options=V({},o.json_options||o.json?.options||{}),o.image_options=V({},o.image_options||o.image?.options||{}),o.analyzer_options=V({summaryOnly:!0,limit:12},o.analyzer_options||o.analyzer?.options||{}),o.visualizer_options=V({},o.visualizer_options||o.visualizer?.options||{}),o.string_options=V({},o.string_options||o.string?.options||{}),o.rollup=o.rollup||{},o.rollup_output=V(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=V(o.browsersync_options,t.browsersync_options),t.replace_options=V(o.replace_options,t.replace_options),t.terser_options=V(o.terser_options,t.terser_options),t.css_options=V(o.css_options,t.css_options),t.wasm_options=V(o.wasm_options,t.wasm_options),t.copy_options=V(o.copy_options,t.copy_options),t.json_options=V(o.json_options,t.json_options),t.image_options=V(o.image_options,t.image_options),t.analyzer_options=V(o.analyzer_options,t.analyzer_options),t.visualizer_options=V(o.visualizer_options,t.visualizer_options),t.string_options=V(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},wn=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 ee({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"}))},yn=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=oe.resolve(o.projectDir,"src/app");te.existsSync(r)||te.mkdirSync(r,{recursive:!0}),await ne({pattern:["index.html.njk","index.js.njk"],dir:oe.resolve(a,"src/app"),outDir:r,context:i})},gn=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:re.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&s.push({file:re.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(!ae.existsSync(i))throw new Error(`App file not found: ${i}`);const a=await se({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 ce({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=ie.compile(ae.readFileSync(re.resolve(l,"package.json.njk"),"utf8"),ie.configure(l)).render(c),d=t.projectDir,f=re.resolve(d,"package.json");ae.writeFileSync(f,p,"utf8")},bn=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=pe.resolve(o.projectDir,"src/cli");le.existsSync(r)||le.mkdirSync(r,{recursive:!0}),await de({pattern:["index.js.njk"],dir:pe.resolve(a,"src/cli"),outDir:r,context:i})},vn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:n},a=me.resolve(o.projectDir,"src","default/index.js");if(!fe.existsSync(a))throw new Error(`Entry file not found: ${a}`);const r=(await he({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=ue.compile(fe.readFileSync(me.resolve(l,"rollup.config.mjs.njk"),"utf8"),ue.configure(l)).render(i);const d=o.projectDir;let f=me.resolve(d,"rollup.config.mjs");fe.writeFileSync(f,p,"utf8")},_n=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 be({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=ge.compile(we.readFileSync(ye.resolve(l,"src/default/to.yargs.js.njk"),"utf8"),n).render(c),d=o.projectDir,f=ye.resolve(d,"src/default/to.yargs.js");we.writeFileSync(f,p,"utf8")},xn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},a=o.templateCommonDir,r=xe.compile(ve.readFileSync(_e.resolve(a,".gitignore.njk"),"utf8"),xe.configure(a)).render(i),s=o.projectDir,c=_e.resolve(s,".gitignore");ve.writeFileSync(c,r,"utf8")},kn=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=De.compile(ke.readFileSync(je.resolve(a,"tsconfig.json.njk"),"utf8"),De.configure(a)).render(i),s=o.projectDir,c=je.resolve(s,"tsconfig.json");ke.writeFileSync(c,r,"utf8")},jn=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=Pe.compile(Se.readFileSync(Ae.resolve(o,`${i}.njk`),"utf8"),Pe.configure(o)).render(e),a=t.projectDir,r=Ae.resolve(a,`${i}`);Se.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=Pe.compile(Se.readFileSync(Ae.resolve(c,`${i}.njk`),"utf8"),Pe.configure(c)).render(s),p=t.projectDir,d=Ae.resolve(p,`${i}`);Se.writeFileSync(d,l,"utf8")}},Dn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});let n=Ee.join("src","**","*");if(0!==Te.exec(`prettier --write ${n} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o}).code)throw new Error("Couldnt format files.")},Pn=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!==$e.exec("tsc",{cwd:n}).code)throw new Error("Couldnt create .d.ts files.")},Sn=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==Ie.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},An=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==Oe.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},Tn=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 Xt({...e});else if("red"===i.name)await Vt({...e});else if("npm"===i.name)await Ht({...e});else if("gcs"===i.name)await Gt({...e});else if("gitlab"===i.name)await Kt({...e});else if("fnet-package"===i.name)await no({...e});else if("fnet-form"===i.name)await io({...e});else if("fnet-node"===i.name)await ro({...e});else if("fnet-flow"===i.name)await ao({...e});else{let e;if("nextjs"===i.name?e=to:"webos"===i.name?e=eo:"electron"===i.name?e=Qt:"docker"===i.name?e=oo:"ios"===i.name?e=Yt:"macos"===i.name&&(e=Zt),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:n.projectDir,dependencies:o}),r.isDirty=!0}},{Atom:En}=v,$n=R,In=D,On=q,Cn=t,Nn=j,Mn=U,Fn=c,Rn=B,qn=mo,Un=wo,Bn=bo,Ln=jo,zn=lo,Jn=Do,Wn=Ao,Kn=$o,Gn=Co,Hn=Mo,Vn=Ro,Xn=Uo,Yn=Lo,Zn=Wo,Qn=Ho,ei=Yo,ti=Qo,oi=tn,ni=nn,ii=({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 ai=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 un,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:En,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#v={initNode:this.initNode.bind(this),cloneDeep:pn,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:ii,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 fn(),this.#p=this.#t.buildId||mn(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 Cn({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await hn(this.#b),await wn(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 En.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await Fn({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),an.statSync(e).isDirectory()?(an.readdirSync(e).forEach((t=>{const o=rn.join(e,t);this.#_(o)})),an.rmSync(e)):an.unlinkSync(e)}#x(e,t){const o=an.existsSync(e),n=o&&an.statSync(e);o&&n.isDirectory()?(an.mkdirSync(t,{recursive:!0}),an.readdirSync(e).forEach((o=>{this.#x(rn.join(e,o),rn.join(t,o))}))):an.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,o=["node_modules"];if(an.existsSync(e)){const t=an.readdirSync(e);for(const n of t)if(!o.includes(n)){const t=rn.join(e,n);an.rmSync(t,{recursive:!0})}}an.existsSync(e)||an.mkdirSync(e,{recursive:!0});const n=rn.join(e,"src");an.existsSync(n)||an.mkdirSync(n,{recursive:!0});const i=rn.join(n,"core");this.#x(t,i);const a=rn.join(n,"default","blocks");an.existsSync(a)||an.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=ln.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 Un.hits(t))await Un.init(t);else if(await Ln.hits(t))await Ln.init(t);else if(await zn.hits(t))await zn.init(t);else if(await qn.hits(t))await qn.init(t);else if(await Jn.hits(t))await Jn.init(t);else if(await Bn.hits(t))await Bn.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 Xn.hits(t))await Xn.init(t);else if(await oi.hits(t))await oi.init(t);else if(await ni.hits(t))await ni.init(t);else if(await Zn.hits(t))await Zn.init(t);else if(await Qn.hits(t))await Qn.init(t);else if(await ti.hits(t))await ti.init(t);else if(await Yn.hits(t))await Yn.init(t);else{if(!await ei.hits(t))throw new Error("Undefined step type.");await ei.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=rn.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=mn(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=$n({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 En.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await En.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await En.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=rn.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await Nn({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 In({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 In({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=pn(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=rn.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=rn.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!an.existsSync(e)){an.mkdirSync(rn.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",an.writeFileSync(e,t,"utf8")}o.relativePath=t.split(rn.sep).join("/"),this.#o.typesDir=`./types/${rn.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;an.writeFileSync(rn.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=ln.compile(an.readFileSync(rn.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=rn.resolve(n,"src/default/index.js");an.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=ln.compile(an.readFileSync(rn.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=rn.resolve(n,`src/default/${e.codeKey}.js`);an.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=ln.compile(an.readFileSync(rn.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=rn.resolve(t,`src/default/blocks/${o}`);an.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(dn(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 Mn({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.dump(n)},a=this.#t.templateDir,r=ln.compile(an.readFileSync(rn.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),s=this.#t.projectDir,c=rn.resolve(s,`${e}`);an.writeFileSync(c,r,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:sn.dump(this.#n)},n=this.#t.templateDir,i=ln.compile(an.readFileSync(rn.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),a=this.#t.projectDir,r=rn.resolve(a,`${e}`);an.writeFileSync(r,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=cn.exec("prettier --write .",{cwd:rn.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 En.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 En.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 Tn({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await En.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await En.update(n,{id:n.id})):n=await En.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 On({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;an.writeFileSync(rn.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 jn(this.#b),await kn(this.#b),await xn(this.#b),await _n(this.#b),await bn(this.#b),await yn(this.#b),await vn(this.#b),await gn(this.#b),await Dn(this.#b),await Pn(this.#b),this.#w&&(await Sn(this.#b),await An(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 On({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 ri=d,si=f;var ci=function({baseDir:e=__dirname}){let t=e;for(;t!==si.parse(t).root;){const e=si.join(t,"node_modules");if(ri.existsSync(e))return e;t=si.dirname(t)}return null};const li=process.cwd(),{spawn:pi}=e;t({name:["redis"],dir:li,optional:!0});const di=o,fi=n,{hideBin:mi}=i,ui=a,hi=r,wi=s,yi=c,gi=t,bi=l,vi=p,_i=ai,xi=ci({baseDir:__dirname}),ki="win32"===process.platform?";":":";process.env.PATH=`${di.join(xi,"/.bin")}${ki}${process.env.PATH}`;let ji=fi(mi(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=di.resolve(xi,"./@fnet/cli-project-flow/dist/template/project"),o=di.resolve(li,e.name);ui.existsSync(o)||ui.mkdirSync(o),await vi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0});let n=wi.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(wi.which("git")&&(n=wi.exec("git init",{cwd:o}),0!==n.code))throw new Error("Failed to initialize git.");if(wi.which("code")&&e.vscode&&(n=wi.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=di.resolve(xi,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd();if(e.name=di.basename(o),e.update){if(await vi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0}),0!==wi.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 Pi(e),o=new _i(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 Pi({...e,mode:"all"}),o=new _i(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 Pi({...e,mode:"file"}),o=new _i(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 Di(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 Pi(e),{projectDir:i}=t,a=process.argv.slice(3);pi(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 Pi(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:di.resolve(li,`./.output/${e.id}`),templateDir:di.resolve(xi,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:di.resolve(xi,"./@fnet/cli-project-common/dist/template/default"),coreDir:di.resolve(xi,"./@fnet/cli-project-flow/dist/template/core")}}{const t=await async function(){const e=di.resolve(li,"flow.yaml");if(!ui.existsSync(e))throw new Error("flow.yaml file not found in current directory.");const t=ui.readFileSync(e,"utf8"),{parsed:o}=await yi({content:t}),n=di.dirname(e),i=o.main||"flow.main.yaml";let a=di.resolve(n,i);if(!ui.existsSync(a)&&(a=di.resolve(n,i+".yaml"),!ui.existsSync(a)))throw new Error(`${i} file not found in ${a}.`);const r=ui.readFileSync(a,"utf8"),{parsed:s}=await yi({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=di.resolve(n,"flow.devops.yaml");if(ui.existsSync(l)){const e=ui.readFileSync(l,"utf8"),t=hi.parse(e);c.devops={filePath:l,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{ui.writeFileSync(c.devops.filePath,hi.stringify(c.devops.doc))}}}const p=di.resolve(n,"readme.md");if(ui.existsSync(p)){const e=ui.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:di.resolve(xi,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:di.resolve(xi,"./@fnet/cli-project-common/dist/template/default"),coreDir:di.resolve(xi,"./@fnet/cli-project-flow/dist/template/core"),projectDir:di.resolve(t.projectDir,"./.workspace"),projectSrcDir:di.resolve(t.projectDir,"./src"),project:t}}}ji=ji.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Pi(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 bi({schema:a}),s=di.resolve(n,".fnet");ui.existsSync(s)||ui.mkdirSync(s);const c=di.resolve(s,`${e.name}.fnet`);ui.writeFileSync(c,hi.stringify(r))}catch(e){console.error(e.message),process.exit(1)}})),ji=Di(ji,{bin:"npm"}),ji=Di(ji,{bin:"node"}),ji=Di(ji,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),ji=Di(ji,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),ji=Di(ji,{name:"app",bin:"npm",preArgs:["run","app","--"]}),ji=Di(ji,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),ji=Di(ji,{bin:"npx"}),ji=Di(ji,{bin:"cdk"}),ji=Di(ji,{bin:"aws"}),ji=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 Pi(e),{projectDir:n}=t,i=e.config,a=await gi({name:i,dir:n,transferEnv:!1,optional:!0}),r=a?.data?.env||void 0,s=e.command,c=process.argv.slice(5);pi(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)}}))}(ji,{name:"with"}),ji.demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@fnet/cli",
3
- "version": "0.44.0",
3
+ "version": "0.45.0",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
7
7
  "contributors": [
8
8
  {
9
9
  "name": "Gultekin Boyraz",
10
- "email": "gultekinboyraz@gmail.com"
10
+ "email": "gultekinboyraz@gmail.com",
11
+ "url": "https://gitlab.com/fnetai"
11
12
  }
12
13
  ],
13
14
  "scripts": {