@fnet/cli 0.39.5 → 0.40.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"),r=require("yargs/helpers"),n=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"),_=require("axios"),b=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("@flownet/lib-to-macos-app"),$=require("@flownet/lib-to-electron"),T=require("@flownet/lib-to-webos"),O=require("@flownet/lib-to-nextjs"),C=require("lodash.clonedeep"),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=_.default,J=b;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,r=G.extname(a);return{file:o,ext:r,ts:".ts"===r||".tsx"===r,name:t}}const Y=x;const Z=d,Q=m,V=p;const ee=f,te=d,ae=m,oe=j,re=x;const ne=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 _e=d,be=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=n,Xe=a,Ye=t;const Ze=I;const Qe=E;const Ve=$,et=t;const tt=T;const at=O,ot=C,rt=v,nt=A,it=m;const st=M,ct=C,lt=v,pt=A,dt=m,mt=t;const ut=d,ft=m,gt=A,yt=D,wt=t,ht=_.default;const _t=A,bt=t,vt=_.default;const jt=A,xt=t,kt=_.default,Dt=n,At=D,Pt=R;const St=A,It=t,Et=_.default,$t=n,Tt=D,Ot=R;const Ct=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:r})=>{await e({message:"Deploying it as gitlab project."});const n=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='${n}'`,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)},Mt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:r})=>{await e({message:"Deploying it as gcs package."});const n=t.projectDir,i=Oe.resolve(n,"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='${n}'`,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 r({target:o,packageJSON:c}))},Rt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r})=>{await t({message:"Deploying it as npm package."});const n=a.projectDir,i=Fe.resolve(n,"package.json"),s=qe.readFileSync(i),c=JSON.parse(s);c.name=r.params.name,c.version=Le.inc(r.params.version,"patch");const l=r.params.bin?.name||r.params.bin;!1!==r.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(n,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===r.dryRun)return;if(0!==Ne.exec("npm publish --access public",{cwd:n}).code)throw new Error("Couldnt publish to npm");qe.writeFileSync(i,s),o.isDirty=!0,r.params.version=c.version},qt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:n,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"===r.deploy.template)d={atom:e,packageDependencies:i,red:{tab:{id:r.deploy.id||Ke.util.generateId(),label:`${p}/${e.id?e.id:Je.hostname()}/${e.name}/${r.deploy.name||r.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(),...r.params?.inject,payload:"json"===r.params?.inject?.payloadType?`'${JSON.stringify(r.params?.inject?.payload)}'`:r.params?.inject?.payload},debug:{id:Ke.util.generateId()}}};else if("cronjob"===r.deploy.template){let t=r.params?.schedules?cloneDeep(r.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:i,red:{tab:{id:r.deploy.id||Ke.util.generateId(),label:`${p}/${e.id?e.id:Je.hostname()}/${r.deploy.name||r.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"!==r.deploy.template)return;d={atom:e,packageDependencies:i,red:{tab:{id:r.deploy.id||Ke.util.generateId(),label:`${p}/${e.id?e.id:Je.hostname()}/${r.deploy.name||r.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:r.params.method||"get",url:r.params.url},httpout:{id:Ke.util.generateId()},debug:{id:Ke.util.generateId()}}}}let m=We.compile(ze.readFileSync(Be.resolve(l,`deploy/node-red/${r.deploy.template}.yaml.njk`),"utf8"),s).render(d);if(ze.writeFileSync(Be.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===r.dryRun)return;o.isDirty=!0;const u=(await Ge({name:a.redConfig||"red",dir:a.projectDir}))?.data,f=r.deploy.url||u.env.RED_URL,g={};if(!1!==r.deploy.auth&&(g.Authorization="Bearer "+atomAccessToken),r.deploy.id)!0===r.actions?.delete?(await axios({method:"DELETE",url:`${f}/flow/${r.deploy.id}`,headers:g}),delete r.actions.delete,delete r.deploy.id,r.enabled=!1):await axios({method:"PUT",url:`${f}/flow/${r.deploy.id}`,data:m,headers:g});else{const e=await axios({method:"POST",url:`${f}/flow`,data:m,headers:g});r.deploy.id=e.data.id}},Ft=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:r,deploymentProject:n,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(n.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=r,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},Lt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:n,registerToPackageManager:i})=>{await t({message:"Deploying it as ios app package."});const s=a.projectDir;if(!0===r.dryRun)return;const c={projectDir:s,dest:s,atom:e,params:r.params};await Ze(c),o.isDirty=!0},Nt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:n})=>{await t({message:"Deploying it as macos app package."});const i=a.projectDir;if(!0===r.dryRun)return;const s={projectDir:i,dest:i,atom:e,params:r.params};await Qe(s),o.isDirty=!0},Ut=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:n})=>{await t({message:"Deploying it as electron package."});const i=a.projectDir;if(!0===r.dryRun)return;const s=r?.config?await et({name:r.config,dir:a.projectDir,optional:!0}):void 0,c={atom:e,params:r.params,config:s?.config,src:i,dest:i};await Ve(c),o.isDirty=!0},zt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r})=>{await t({message:"Deploying it as webos package."});const n=a.projectDir;if(!0===r.dryRun)return;const i={src:n,dest:n,atom:e,params:r.params};await tt(i),o.isDirty=!0},Bt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as nextjs package."});t.params=rt({name:"nextjs-app",version:"0.1.0"},t.params);const n=nt.inc(t.params.version,"patch");t.params.version=n;const i=ot(t);i.params.dependencies=ot(r);const s={atom:e,target:i.params,projectDir:o,renderDir:it.resolve(o,"nextjs")};return{deployer:await at(s)}},Jt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as docker package."});const n=t?.config?await mt({name:t.config,dir:o,optional:!0}):void 0;t.params=lt({},t.params);const i=pt.inc(t.params.version,"patch");t.params.version=i;const s=ct(t);s.params.dependencies=ct(r);const c={atom:e,target:s.params,config:n?.config,projectDir:o,renderDir:dt.resolve(o,t.dir||"docker")};return{deployer:await st(c)}},Wt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:r})=>{await e({message:"Deploying it as fnet package."});const n=t.projectDir,i=ft.resolve(n,"package.json"),s=ut.readFileSync(i),c=JSON.parse(s);c.name=o.params.name,c.version=gt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,ut.writeFileSync(i,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await wt({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 ht({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='${ft.resolve(ft.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,y+=` --dir='${n}'`,y+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",y+=` --destDir='${c.name}/${c.version}'`,y+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(y+=` --domain='${p.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(y+=" --dryRun"),await yt({cmd:y}),ut.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 ht({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.")},Kt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet form."});const r=_t.inc(o.params.version,"patch"),{file:n,data:i}=await bt({name:o.config||"fnet-form",dir:t.projectDir});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${n}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${n}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${n}`);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 vt({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=r;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await vt({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.")},Gt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet flow."});const r=jt.inc(o.params.version,"patch"),{file:n,data:i}=await xt({name:o.config||"fnet-flow",dir:t.project.projectDir});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${n}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${n}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${n}`);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 kt({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=r;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await kt({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 At({cmd:f});if(0!==g.code)throw new Error(g.stderr);const y=JSON.parse(g.stdout).path;let w=new Pt;w.append("file",Dt.createReadStream(y));const h=await kt.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.")},Ht=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet node."});const r=St.inc(o.params.version,"patch"),{file:n,data:i}=await It({name:o.config||"fnet-node",dir:t.project.projectDir});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${n}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${n}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${n}`);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 Et({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=r;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await Et({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 Tt({cmd:f});if(0!==g.code)throw new Error(g.stderr);const y=JSON.parse(g.stdout).path;let w=new Ot;w.append("file",$t.createReadStream(y));const h=await Et.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 Xt=d,Yt=m,Zt=u,Qt=s,Vt=f,ea=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:ta}=w,aa=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)}))}))}},oa=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||!1!==a.dts?.enabled,a.hasOwnProperty("all_parsed_imports")||(a.all_parsed_imports=!0);const o=G.resolve(t.project.projectDir),r=X({dir:G.resolve(o,"./app")});if(r.file){let e=await H({file:r.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:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.app_entry_uses_jsx=t,a.app_entry_is_ts=r.ts,a.app_entry_ext=r.ext}const n=X({dir:G.resolve(o,"./cli")});if(n.file){let e=await H({file:n.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.cli_uses_jsx=t,a.cli_has_entry=!0,e=await H({file:n.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.cli_entry_uses_jsx=t,a.cli_entry_is_ts=n.ts,a.cli_entry_ext=n.ext}if("workflow.lib"===e.type){const e=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:!1,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:!1,string:!0}},l={};!0===a.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,babel_options:{targets:{chrome:"79"}}}),!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:!1,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=!0===a.terser||a.terser&&!1!==a.terser?.enabled,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},ra=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"}))},na=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const r={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o,ts:Date.now()},n=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(n,"src/app"),outDir:i,context:r})},ia=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:r})=>{await r({message:"Creating package.json."});a.filter((e=>!0===e.dev)).forEach((e=>{o.find((t=>t.package===e.package))||o.push(e);const t=a.findIndex((t=>t.package===e.package));a.splice(t,1)}));const n=a.find((e=>"react"===e.package)),i=a.find((e=>"react-dom"===e.package));n&&!i?a.push({package:"react-dom",version:n.version}):n&&i&&(i.version=n.version),n&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const s=[];!0===e.doc.features.app.enabled&&s.push(ae.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&s.push(ae.resolve(t.projectDir,"src/cli/index.js"));for await(const t of s){const r=t;if(!te.existsSync(r))throw new Error(`App file not found: ${r}`);const n=await oe({file:r,recursive:!0}),i=!0===e.doc.features.all_parsed_imports?n.all:n.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 t=(await re({name:e.package,groupBy:{minor:!0}}))[0][0];o.push({package:e.package,subpath:e.subpath,version:`^${t}`,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")},sa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const r={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o},n=a.templateDir,i=ie.resolve(a.projectDir,"src/cli");ne.existsSync(i)||ne.mkdirSync(i,{recursive:!0}),await se({pattern:["index.js.njk"],dir:ie.resolve(n,"src/cli"),outDir:i,context:r})},ca=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const r={atom:e,packageDependencies:o},n=le.resolve(a.projectDir,"src","default/index.js");if(!ce.existsSync(n))throw new Error(`Entry file not found: ${n}`);const i=(await de({file:n,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(r);const d=a.projectDir;let m=le.resolve(d,"rollup.config.mjs");ce.writeFileSync(m,p,"utf8")},la=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let r={};const n=e.doc.inputs||[],i=[],s=e.doc.input;s?r=await ge({schema:s}):n.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),r[e.name]=t}));const c={options:r,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")},pa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const r={atom:e,packageDependencies:o},n=a.templateCommonDir,i=he.compile(ye.readFileSync(we.resolve(n,".gitignore.njk"),"utf8"),he.configure(n)).render(r),s=a.projectDir,c=we.resolve(s,".gitignore");ye.writeFileSync(c,i,"utf8")},da=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const r={atom:e,packageDependencies:o},n=a.templateCommonDir,i=ve.compile(_e.readFileSync(be.resolve(n,"tsconfig.json.njk"),"utf8"),ve.configure(n)).render(r),s=a.projectDir,c=be.resolve(s,"tsconfig.json");_e.writeFileSync(c,i,"utf8")},ma=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const r="readme.md",n=`Creating ${r}`;if(await a({message:n}),t.project?.readme){const e={content:t.project.readme.doc.content},a=t.templateCommonDir,o=je.compile(xe.readFileSync(ke.resolve(a,`${r}.njk`),"utf8"),je.configure(a)).render(e),n=t.projectDir,i=ke.resolve(n,`${r}`);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:n,...i}=a.doc,s={content:n},c=t.templateCommonDir,l=je.compile(xe.readFileSync(ke.resolve(c,`${r}.njk`),"utf8"),je.configure(c)).render(s),p=t.projectDir,d=ke.resolve(p,`${r}`);xe.writeFileSync(d,l,"utf8")}},ua=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.")},fa=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.")},ga=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.")},ya=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.")},wa=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:r,setInProgress:n}=e;if(!0===r.enabled)if("lib"===r.name)await Ft({...e});else if("red"===r.name)await qt({...e});else if("npm"===r.name)await Rt({...e});else if("gcs"===r.name)await Mt({...e});else if("gitlab"===r.name)await Ct({...e});else if("macos-app"===r.name)await Nt({...e});else if("ios-app"===r.name)await Lt({...e});else if("electron"===r.name)await Ut({...e});else if("webos"===r.name)await zt({...e});else if("fnet-package"===r.name)await Wt({...e});else if("fnet-form"===r.name)await Kt({...e});else if("fnet-node"===r.name)await Ht({...e});else if("fnet-flow"===r.name)await Gt({...e});else{let e;if("nextjs"===r.name?e=Bt:"docker"===r.name&&(e=Jt),!e)return;await e({atom:t,target:r,onProgress:n,projectDir:o.projectDir,dependencies:a})}},{Atom:ha}=h,_a=q,ba=t,va=j,ja=F,xa=L;var ka=class{#e;#t;#a;#o;#r;#n;#i;#s;#c;#l;#p;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new aa,this.#t=e,this.#n=[],this.#i=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#n,packageDevDependencies:this.#i,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:ha,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 ea(),this.#c=this.#t.buildId||ta(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 ba({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 oa(this.#y),await ra(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 ha.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"];Xt.existsSync(e)&&Xt.readdirSync(e).forEach((o=>{a.includes(o)||(t=Qt.rm("-rf",Yt.join(e,o)))}));let o=e;if(!Xt.existsSync(o)&&(t=Qt.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=Yt.join(e,"src"),!Xt.existsSync(o)&&(t=Qt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=Yt.join(e,"src","default"),!Xt.existsSync()&&(t=Qt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Vt.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.#r=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#n})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],r=await this.findAtomLibrary({url:o.name});o.atom=r;const n=r.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));n?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=_a({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 ha.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await ha.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await ha.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=Yt.resolve(this.#t.projectSrcDir,"index.js"),a=await va({file:t,recursive:!0}),o=e.doc.dependencies,r=!0===this.#a.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;const t=await ja({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=Yt.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=Yt.relative(Yt.join(this.#t.projectDir,"src","default"),e);if(!Xt.existsSync(e)){Xt.mkdirSync(Yt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Xt.writeFileSync(e,t,"utf8")}a.relativePath=t.split(Yt.sep).join("/"),this.#a.typesDir=`./types/${Yt.basename(o)}/src`}else{const e=Yt.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Xt.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#r.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},t=this.#t.templateDir,a=Vt.compile(Xt.readFileSync(Yt.resolve(t,Yt.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,r=Yt.resolve(o,Yt.join("src","default","index.js"));Xt.writeFileSync(r,a,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:a,...o}=this.#a.doc,r={content:Zt.dump(o)},n=this.#t.templateDir,i=Vt.compile(Xt.readFileSync(Yt.resolve(n,`${e}.njk`),"utf8"),this.#o).render(r),s=this.#t.projectDir,c=Yt.resolve(s,`${e}`);Xt.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 ha.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 ha.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 wa({...this.#y,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await ha.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await ha.update(o,{id:o.id})):o=await ha.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(xa.blue(e)),await this._cache_set(this.#l,{status:"IN_PROGRESS",message:e})}async build(){try{this.#u&&(await this.createAtomLibFiles({libs:this.#r}),await this.createEngine(),await this.createProjectYaml(),await ma(this.#y),await da(this.#y),await pa(this.#y),await la(this.#y),await sa(this.#y),await na(this.#y),await ca(this.#y),await ia(this.#y),await ua(this.#y),await fa(this.#y),this.#f&&(await ga(this.#y),await ya(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 Da=d,Aa=m;var Pa=function({baseDir:e=__dirname}){let t=e;for(;t!==Aa.parse(t).root;){const e=Aa.join(t,"node_modules");if(Da.existsSync(e))return e;t=Aa.dirname(t)}return null};const Sa=process.cwd(),{spawn:Ia}=e;t({name:["redis"],dir:Sa,optional:!0});const Ea=a,$a=o,{hideBin:Ta}=r,Oa=n,Ca=i,Ma=s,Ra=c,qa=t,Fa=l,La=p,Na=ka,Ua=Pa({baseDir:__dirname}),za="win32"===process.platform?";":":";process.env.PATH=`${Ea.join(Ua,"/.bin")}${za}${process.env.PATH}`;let Ba=$a(Ta(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=Ea.resolve(Ua,"@fnet/cli-project-node/dist/template/project"),a=Ea.resolve(Sa,e.name);Oa.existsSync(a)||Oa.mkdirSync(a),await La({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=Ma.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Ma.which("git")&&(o=Ma.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(Ma.which("code")&&e.vscode&&(o=Ma.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=Ea.resolve(Ua,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=Ea.basename(a),e.update){if(await La({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==Ma.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 Wa(e),a=new Na(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 Wa({...e,mode:"all"}),a=new Na(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 Wa({...e,mode:"file"}),a=new Na(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 Ja(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 Wa(e),{projectDir:r}=t,n=process.argv.slice(3);Ia(a,[...o,...n],{cwd:r,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Wa(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Ea.resolve(Ua,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Ea.resolve(Ua,"./@fnet/cli-project-common/dist/template/default"),projectDir:Ea.resolve(Sa,`./.output/${e.id}`)};{const t=await async function(){const e=Ea.resolve(Sa,"node.yaml");if(!Oa.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Oa.readFileSync(e,"utf8"),{parsed:a}=await Ra({content:t}),o=Ea.dirname(e),r={libraryAtom:{doc:{...a},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},n=Ea.resolve(o,"node.devops.yaml");if(Oa.existsSync(n)){const e=Oa.readFileSync(n,"utf8"),t=Ca.parse(e);r.devops={filePath:n,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Oa.writeFileSync(r.devops.filePath,Ca.stringify(r.devops.doc))}}}const i=Ea.resolve(o,"readme.md");if(Oa.existsSync(i)){const e=Oa.readFileSync(i,"utf8");r.readme={filePath:i,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return r}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Ea.resolve(Ua,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Ea.resolve(Ua,"./@fnet/cli-project-common/dist/template/default"),projectDir:Ea.resolve(t.projectDir,"./.workspace"),projectSrcDir:Ea.resolve(t.projectDir,"./src"),project:t}}}Ba=Ba.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Wa(e),{project:a}=t,{projectDir:o,projectFileParsed:r}=a,n=r.config;if(!n)throw new Error("Config schema not found in project file.");const i=await Fa({schema:n}),s=Ea.resolve(o,".fnet");Oa.existsSync(s)||Oa.mkdirSync(s);const c=Ea.resolve(s,`${e.name}.fnet`);Oa.writeFileSync(c,Ca.stringify(i))}catch(e){console.error(e.message),process.exit(1)}})),Ba=Ja(Ba,{bin:"npm"}),Ba=Ja(Ba,{bin:"node"}),Ba=Ja(Ba,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Ba=Ja(Ba,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Ba=Ja(Ba,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Ba=Ja(Ba,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Ba=Ja(Ba,{bin:"npx"}),Ba=Ja(Ba,{bin:"cdk"}),Ba=Ja(Ba,{bin:"aws"}),Ba=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 Wa(e),{projectDir:o}=t,r=e.config,n=await qa({name:r,dir:o,transferEnv:!1,optional:!0}),i=n?.data?.env||void 0,s=e.command,c=process.argv.slice(5);Ia(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)}}))}(Ba,{name:"with"}),Ba.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"),r=require("yargs/helpers"),n=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("@flownet/lib-to-macos-app"),$=require("@flownet/lib-to-electron"),T=require("lodash.clonedeep"),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,r=G.extname(a);return{file:o,ext:r,ts:".ts"===r||".tsx"===r,name:t}}const Y=x;const Z=d,Q=m,V=p;const ee=f,te=d,ae=m,oe=j,re=x;const ne=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=n,Xe=a,Ye=t;const Ze=I;const Qe=E;const Ve=t,et=$,tt=T,at=A;const ot=t,rt=O,nt=T,it=A;const st=t,ct=C,lt=T,pt=A;const dt=t,mt=M,ut=T,ft=A;const gt=d,yt=m,wt=A,ht=D,bt=t,_t=b.default;const vt=A,jt=t,xt=b.default;const kt=A,Dt=t,At=b.default,Pt=n,St=D,It=R;const Et=A,$t=t,Tt=b.default,Ot=n,Ct=D,Mt=R;const Rt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:r})=>{await e({message:"Deploying it as gitlab project."});const n=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='${n}'`,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)},qt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:r})=>{await e({message:"Deploying it as gcs package."});const n=t.projectDir,i=Oe.resolve(n,"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='${n}'`,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 r({target:o,packageJSON:c}))},Ft=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r})=>{await t({message:"Deploying it as npm package."});const n=a.projectDir,i=Fe.resolve(n,"package.json"),s=qe.readFileSync(i),c=JSON.parse(s);c.name=r.params.name,c.version=Le.inc(r.params.version,"patch");const l=r.params.bin?.name||r.params.bin;!1!==r.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(n,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===r.dryRun)return;if(0!==Ne.exec("npm publish --access public",{cwd:n}).code)throw new Error("Couldnt publish to npm");qe.writeFileSync(i,s),o.isDirty=!0,r.params.version=c.version},Lt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:n,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"===r.deploy.template)d={atom:e,packageDependencies:i,red:{tab:{id:r.deploy.id||Ke.util.generateId(),label:`${p}/${e.id?e.id:Je.hostname()}/${e.name}/${r.deploy.name||r.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(),...r.params?.inject,payload:"json"===r.params?.inject?.payloadType?`'${JSON.stringify(r.params?.inject?.payload)}'`:r.params?.inject?.payload},debug:{id:Ke.util.generateId()}}};else if("cronjob"===r.deploy.template){let t=r.params?.schedules?cloneDeep(r.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:i,red:{tab:{id:r.deploy.id||Ke.util.generateId(),label:`${p}/${e.id?e.id:Je.hostname()}/${r.deploy.name||r.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"!==r.deploy.template)return;d={atom:e,packageDependencies:i,red:{tab:{id:r.deploy.id||Ke.util.generateId(),label:`${p}/${e.id?e.id:Je.hostname()}/${r.deploy.name||r.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:r.params.method||"get",url:r.params.url},httpout:{id:Ke.util.generateId()},debug:{id:Ke.util.generateId()}}}}let m=We.compile(ze.readFileSync(Be.resolve(l,`deploy/node-red/${r.deploy.template}.yaml.njk`),"utf8"),s).render(d);if(ze.writeFileSync(Be.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===r.dryRun)return;o.isDirty=!0;const u=(await Ge({name:a.redConfig||"red",dir:a.projectDir}))?.data,f=r.deploy.url||u.env.RED_URL,g={};if(!1!==r.deploy.auth&&(g.Authorization="Bearer "+atomAccessToken),r.deploy.id)!0===r.actions?.delete?(await axios({method:"DELETE",url:`${f}/flow/${r.deploy.id}`,headers:g}),delete r.actions.delete,delete r.deploy.id,r.enabled=!1):await axios({method:"PUT",url:`${f}/flow/${r.deploy.id}`,data:m,headers:g});else{const e=await axios({method:"POST",url:`${f}/flow`,data:m,headers:g});r.deploy.id=e.data.id}},Nt=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:r,deploymentProject:n,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(n.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=r,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},Ut=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:n,registerToPackageManager:i})=>{await t({message:"Deploying it as ios app package."});const s=a.projectDir;if(!0===r.dryRun)return;const c={projectDir:s,dest:s,atom:e,params:r.params};await Ze(c),o.isDirty=!0},zt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:n})=>{await t({message:"Deploying it as macos app package."});const i=a.projectDir;if(!0===r.dryRun)return;const s={projectDir:i,dest:i,atom:e,params:r.params};await Qe(s),o.isDirty=!0},Bt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as electron package."});const n=t?.config?await Ve({name:t.config,dir:o,optional:!0}):void 0,i=at.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=tt(t.params);s.dependencies=tt(r);const c={atom:e,params:s,config:n?.config,src:o,dest:o};return{deployer:await et(c)}},Jt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as webos package."});const n=t?.config?await ot({name:t.config,dir:o,optional:!0}):void 0,i=it.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=nt(t.params);s.dependencies=nt(r);const c={atom:e,params:s,config:n?.config,src:o,dest:o};return{deployer:await rt(c)}},Wt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as nextjs package."});const n=t?.config?await st({name:t.config,dir:o,optional:!0}):void 0,i=pt.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=lt(t.params);s.dependencies=lt(r);const c={atom:e,params:s,config:n?.config,src:o,dest:o};return{deployer:await ct(c)}},Kt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as docker package."});const n=t?.config?await dt({name:t.config,dir:o,optional:!0}):void 0,i=ft.inc(t.params.version||"0.1.0","patch");t.params.version=i;const s=ut(t.params);s.dependencies=ut(r);const c={atom:e,params:s,config:n?.config,src:o,dest:o};return{deployer:await mt(c)}},Gt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:r})=>{await e({message:"Deploying it as fnet package."});const n=t.projectDir,i=yt.resolve(n,"package.json"),s=gt.readFileSync(i),c=JSON.parse(s);c.name=o.params.name,c.version=wt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,gt.writeFileSync(i,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await bt({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 _t({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='${yt.resolve(yt.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,y+=` --dir='${n}'`,y+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",y+=` --destDir='${c.name}/${c.version}'`,y+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(y+=` --domain='${p.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(y+=" --dryRun"),await ht({cmd:y}),gt.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 _t({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.")},Ht=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet form."});const r=vt.inc(o.params.version,"patch"),{file:n,data:i}=await jt({name:o.config||"fnet-form",dir:t.projectDir});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${n}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${n}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${n}`);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 xt({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=r;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await xt({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.")},Xt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet flow."});const r=kt.inc(o.params.version,"patch"),{file:n,data:i}=await Dt({name:o.config||"fnet-flow",dir:t.project.projectDir});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${n}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${n}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${n}`);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 At({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=r;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await At({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 St({cmd:f});if(0!==g.code)throw new Error(g.stderr);const y=JSON.parse(g.stdout).path;let w=new It;w.append("file",Pt.createReadStream(y));const h=await At.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.")},Yt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet node."});const r=Et.inc(o.params.version,"patch"),{file:n,data:i}=await $t({name:o.config||"fnet-node",dir:t.project.projectDir});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${n}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${n}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${n}`);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=r;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-node/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 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 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 node.")};const Zt=d,Qt=m,Vt=u,ea=s,ta=f,aa=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:oa}=w,ra=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)}))}))}},na=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||!1!==a.dts?.enabled,a.hasOwnProperty("all_parsed_imports")||(a.all_parsed_imports=!0);const o=G.resolve(t.project.projectDir),r=X({dir:G.resolve(o,"./app")});if(r.file){let e=await H({file:r.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:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.app_entry_uses_jsx=t,a.app_entry_is_ts=r.ts,a.app_entry_ext=r.ext}const n=X({dir:G.resolve(o,"./cli")});if(n.file){let e=await H({file:n.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.cli_uses_jsx=t,a.cli_has_entry=!0,e=await H({file:n.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.cli_entry_uses_jsx=t,a.cli_entry_is_ts=n.ts,a.cli_entry_ext=n.ext}if("workflow.lib"===e.type){const e=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:!1,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:!1,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.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:!1,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=!0===a.terser||a.terser&&!1!==a.terser?.enabled,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},ia=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"}))},sa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const r={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o,ts:Date.now()},n=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(n,"src/app"),outDir:i,context:r})},ca=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:r})=>{await r({message:"Creating package.json."});a.filter((e=>!0===e.dev)).forEach((e=>{o.find((t=>t.package===e.package))||o.push(e);const t=a.findIndex((t=>t.package===e.package));a.splice(t,1)}));const n=a.find((e=>"react"===e.package)),i=a.find((e=>"react-dom"===e.package));n&&!i?a.push({package:"react-dom",version:n.version}):n&&i&&(i.version=n.version),n&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const s=[];!0===e.doc.features.app.enabled&&s.push(ae.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&s.push(ae.resolve(t.projectDir,"src/cli/index.js"));for await(const t of s){const r=t;if(!te.existsSync(r))throw new Error(`App file not found: ${r}`);const n=await oe({file:r,recursive:!0}),i=!0===e.doc.features.all_parsed_imports?n.all:n.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 t=(await re({name:e.package,groupBy:{minor:!0}}))[0][0];o.push({package:e.package,subpath:e.subpath,version:`^${t}`,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")},la=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const r={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o},n=a.templateDir,i=ie.resolve(a.projectDir,"src/cli");ne.existsSync(i)||ne.mkdirSync(i,{recursive:!0}),await se({pattern:["index.js.njk"],dir:ie.resolve(n,"src/cli"),outDir:i,context:r})},pa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const r={atom:e,packageDependencies:o},n=le.resolve(a.projectDir,"src","default/index.js");if(!ce.existsSync(n))throw new Error(`Entry file not found: ${n}`);const i=(await de({file:n,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(r);const d=a.projectDir;let m=le.resolve(d,"rollup.config.mjs");ce.writeFileSync(m,p,"utf8")},da=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let r={};const n=e.doc.inputs||[],i=[],s=e.doc.input;s?r=await ge({schema:s}):n.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),r[e.name]=t}));const c={options:r,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")},ma=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const r={atom:e,packageDependencies:o},n=a.templateCommonDir,i=he.compile(ye.readFileSync(we.resolve(n,".gitignore.njk"),"utf8"),he.configure(n)).render(r),s=a.projectDir,c=we.resolve(s,".gitignore");ye.writeFileSync(c,i,"utf8")},ua=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const r={atom:e,packageDependencies:o},n=a.templateCommonDir,i=ve.compile(be.readFileSync(_e.resolve(n,"tsconfig.json.njk"),"utf8"),ve.configure(n)).render(r),s=a.projectDir,c=_e.resolve(s,"tsconfig.json");be.writeFileSync(c,i,"utf8")},fa=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const r="readme.md",n=`Creating ${r}`;if(await a({message:n}),t.project?.readme){const e={content:t.project.readme.doc.content},a=t.templateCommonDir,o=je.compile(xe.readFileSync(ke.resolve(a,`${r}.njk`),"utf8"),je.configure(a)).render(e),n=t.projectDir,i=ke.resolve(n,`${r}`);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:n,...i}=a.doc,s={content:n},c=t.templateCommonDir,l=je.compile(xe.readFileSync(ke.resolve(c,`${r}.njk`),"utf8"),je.configure(c)).render(s),p=t.projectDir,d=ke.resolve(p,`${r}`);xe.writeFileSync(d,l,"utf8")}},ga=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.")},ya=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.")},wa=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.")},ha=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.")},ba=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:r,setInProgress:n,deploymentProject:i}=e;if(!0===r.enabled)if("lib"===r.name)await Nt({...e});else if("red"===r.name)await Lt({...e});else if("npm"===r.name)await Ft({...e});else if("gcs"===r.name)await qt({...e});else if("gitlab"===r.name)await Rt({...e});else if("macos-app"===r.name)await zt({...e});else if("ios-app"===r.name)await Ut({...e});else if("fnet-package"===r.name)await Gt({...e});else if("fnet-form"===r.name)await Ht({...e});else if("fnet-node"===r.name)await Yt({...e});else if("fnet-flow"===r.name)await Xt({...e});else{let e;if("nextjs"===r.name?e=Wt:"webos"===r.name?e=Jt:"electron"===r.name?e=Bt:"docker"===r.name&&(e=Kt),!e)return;await e({atom:t,target:r,onProgress:n,projectDir:o.projectDir,dependencies:a}),i.isDirty=!0}},{Atom:_a}=h,va=q,ja=t,xa=j,ka=F,Da=L;var Aa=class{#e;#t;#a;#o;#r;#n;#i;#s;#c;#l;#p;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new ra,this.#t=e,this.#n=[],this.#i=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#n,packageDevDependencies:this.#i,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:_a,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 aa(),this.#c=this.#t.buildId||oa(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 ja({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 na(this.#y),await ia(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 _a.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"];Zt.existsSync(e)&&Zt.readdirSync(e).forEach((o=>{a.includes(o)||(t=ea.rm("-rf",Qt.join(e,o)))}));let o=e;if(!Zt.existsSync(o)&&(t=ea.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=Qt.join(e,"src"),!Zt.existsSync(o)&&(t=ea.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=Qt.join(e,"src","default"),!Zt.existsSync()&&(t=ea.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=ta.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.#r=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#n})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],r=await this.findAtomLibrary({url:o.name});o.atom=r;const n=r.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));n?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=va({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 _a.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await _a.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await _a.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=Qt.resolve(this.#t.projectSrcDir,"index.js"),a=await xa({file:t,recursive:!0}),o=e.doc.dependencies,r=!0===this.#a.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;const t=await ka({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=Qt.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=Qt.relative(Qt.join(this.#t.projectDir,"src","default"),e);if(!Zt.existsSync(e)){Zt.mkdirSync(Qt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Zt.writeFileSync(e,t,"utf8")}a.relativePath=t.split(Qt.sep).join("/"),this.#a.typesDir=`./types/${Qt.basename(o)}/src`}else{const e=Qt.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Zt.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#r.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},t=this.#t.templateDir,a=ta.compile(Zt.readFileSync(Qt.resolve(t,Qt.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,r=Qt.resolve(o,Qt.join("src","default","index.js"));Zt.writeFileSync(r,a,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:a,...o}=this.#a.doc,r={content:Vt.dump(o)},n=this.#t.templateDir,i=ta.compile(Zt.readFileSync(Qt.resolve(n,`${e}.njk`),"utf8"),this.#o).render(r),s=this.#t.projectDir,c=Qt.resolve(s,`${e}`);Zt.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 _a.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 _a.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 ba({...this.#y,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await _a.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await _a.update(o,{id:o.id})):o=await _a.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(Da.blue(e)),await this._cache_set(this.#l,{status:"IN_PROGRESS",message:e})}async build(){try{this.#u&&(await this.createAtomLibFiles({libs:this.#r}),await this.createEngine(),await this.createProjectYaml(),await fa(this.#y),await ua(this.#y),await ma(this.#y),await da(this.#y),await la(this.#y),await sa(this.#y),await pa(this.#y),await ca(this.#y),await ga(this.#y),await ya(this.#y),this.#f&&(await wa(this.#y),await ha(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 Pa=d,Sa=m;var Ia=function({baseDir:e=__dirname}){let t=e;for(;t!==Sa.parse(t).root;){const e=Sa.join(t,"node_modules");if(Pa.existsSync(e))return e;t=Sa.dirname(t)}return null};const Ea=process.cwd(),{spawn:$a}=e;t({name:["redis"],dir:Ea,optional:!0});const Ta=a,Oa=o,{hideBin:Ca}=r,Ma=n,Ra=i,qa=s,Fa=c,La=t,Na=l,Ua=p,za=Aa,Ba=Ia({baseDir:__dirname}),Ja="win32"===process.platform?";":":";process.env.PATH=`${Ta.join(Ba,"/.bin")}${Ja}${process.env.PATH}`;let Wa=Oa(Ca(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=Ta.resolve(Ba,"@fnet/cli-project-node/dist/template/project"),a=Ta.resolve(Ea,e.name);Ma.existsSync(a)||Ma.mkdirSync(a),await Ua({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=qa.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(qa.which("git")&&(o=qa.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(qa.which("code")&&e.vscode&&(o=qa.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=Ta.resolve(Ba,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=Ta.basename(a),e.update){if(await Ua({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==qa.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 Ga(e),a=new za(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await Ga({...e,mode:"all"}),a=new za(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await Ga({...e,mode:"file"}),a=new za(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function Ka(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 Ga(e),{projectDir:r}=t,n=process.argv.slice(3);$a(a,[...o,...n],{cwd:r,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Ga(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Ta.resolve(Ba,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Ta.resolve(Ba,"./@fnet/cli-project-common/dist/template/default"),projectDir:Ta.resolve(Ea,`./.output/${e.id}`)};{const t=await async function(){const e=Ta.resolve(Ea,"node.yaml");if(!Ma.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Ma.readFileSync(e,"utf8"),{parsed:a}=await Fa({content:t}),o=Ta.dirname(e),r={libraryAtom:{doc:{...a},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},n=Ta.resolve(o,"node.devops.yaml");if(Ma.existsSync(n)){const e=Ma.readFileSync(n,"utf8"),t=Ra.parse(e);r.devops={filePath:n,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Ma.writeFileSync(r.devops.filePath,Ra.stringify(r.devops.doc))}}}const i=Ta.resolve(o,"readme.md");if(Ma.existsSync(i)){const e=Ma.readFileSync(i,"utf8");r.readme={filePath:i,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return r}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Ta.resolve(Ba,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Ta.resolve(Ba,"./@fnet/cli-project-common/dist/template/default"),projectDir:Ta.resolve(t.projectDir,"./.workspace"),projectSrcDir:Ta.resolve(t.projectDir,"./src"),project:t}}}Wa=Wa.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Ga(e),{project:a}=t,{projectDir:o,projectFileParsed:r}=a,n=r.config;if(!n)throw new Error("Config schema not found in project file.");const i=await Na({schema:n}),s=Ta.resolve(o,".fnet");Ma.existsSync(s)||Ma.mkdirSync(s);const c=Ta.resolve(s,`${e.name}.fnet`);Ma.writeFileSync(c,Ra.stringify(i))}catch(e){console.error(e.message),process.exit(1)}})),Wa=Ka(Wa,{bin:"npm"}),Wa=Ka(Wa,{bin:"node"}),Wa=Ka(Wa,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Wa=Ka(Wa,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Wa=Ka(Wa,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Wa=Ka(Wa,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Wa=Ka(Wa,{bin:"npx"}),Wa=Ka(Wa,{bin:"cdk"}),Wa=Ka(Wa,{bin:"aws"}),Wa=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 Ga(e),{projectDir:o}=t,r=e.config,n=await La({name:r,dir:o,transferEnv:!1,optional:!0}),i=n?.data?.env||void 0,s=e.command,c=process.argv.slice(5);$a(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)}}))}(Wa,{name:"with"}),Wa.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"),A=require("@fnet/shell"),S=require("semver"),T=require("node:os"),E=require("@node-red/util"),I=require("@flownet/lib-to-ios-app"),$=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,Ae=d,Se=f;const Te=s,Ee=o;const Ie=s;const $e=s;const Oe=s;const Ce=A,Ne=t;const Me=d,Fe=f,Re=S,qe=A,Ue=t;const Be=d,Le=f,ze=S,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=I;const ot=$;const nt=O,it=t;const at=C;const rt=N,st=h,ct=k,lt=S,pt=f;const dt=M,ft=h,mt=k,ut=S,ht=f,wt=t;const yt=d,gt=f,bt=S,vt=A,_t=t,xt=_.default;const kt=S,jt=t,Dt=_.default;const Pt=S,At=t,St=_.default,Tt=a,Et=A,It=F;const $t=S,Ot=t,Ct=_.default,Nt=a,Mt=A,Ft=F;const Rt=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)},qt=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}))},Ut=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},Bt=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}},Lt=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})},zt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a,registerToPackageManager:r})=>{await t({message:"Deploying it as ios app package."});const s=o.projectDir;if(!0===i.dryRun)return;const c={projectDir:s,dest:s,atom:e,params:i.params};await tt(c),n.isDirty=!0},Jt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a})=>{await t({message:"Deploying it as macos app package."});const r=o.projectDir;if(!0===i.dryRun)return;const s={projectDir:r,dest:r,atom:e,params:i.params};await ot(s),n.isDirty=!0},Wt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a})=>{await t({message:"Deploying it as electron package."});const r=o.projectDir;if(!0===i.dryRun)return;const s=i?.config?await it({name:i.config,dir:o.projectDir,optional:!0}):void 0,c={atom:e,params:i.params,config:s?.config,src:r,dest:r};await nt(c),n.isDirty=!0},Kt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as webos package."});const a=o.projectDir;if(!0===i.dryRun)return;const r={src:a,dest:a,atom:e,params:i.params};await at(r),n.isDirty=!0},Gt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as nextjs package."});t.params=ct({name:"nextjs-app",version:"0.1.0"},t.params);const a=lt.inc(t.params.version,"patch");t.params.version=a;const r=st(t);r.params.dependencies=st(i);const s={atom:e,target:r.params,projectDir:n,renderDir:pt.resolve(n,"nextjs")};return{deployer:await rt(s)}},Ht=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 wt({name:t.config,dir:n,optional:!0}):void 0;t.params=mt({},t.params);const r=ut.inc(t.params.version,"patch");t.params.version=r;const s=ft(t);s.params.dependencies=ft(i);const c={atom:e,target:s.params,config:a?.config,projectDir:n,renderDir:ht.resolve(n,t.dir||"docker")};return{deployer:await dt(c)}},Vt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as fnet package."});const a=t.projectDir,r=gt.resolve(a,"package.json"),s=yt.readFileSync(r),c=JSON.parse(s);c.name=n.params.name,c.version=bt.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,yt.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await _t({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 xt({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='${gt.resolve(gt.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 vt({cmd:w}),yt.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 xt({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.")},Xt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet form."});const i=kt.inc(n.params.version,"patch"),{file:a,data:r}=await jt({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 Dt({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 Dt({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.")},Yt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet flow."});const i=Pt.inc(n.params.version,"patch"),{file:a,data:r}=await At({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 St({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);o.isDirty=!0,n.params.version=i;const f=`${r.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await St({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 Et({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new It;y.append("file",Tt.createReadStream(w));const g=await St.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.")},Zt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet node."});const i=$t.inc(n.params.version,"patch"),{file:a,data:r}=await Ot({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 Ct({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 Ct({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 Mt({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Ft;y.append("file",Nt.createReadStream(w));const g=await Ct.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 Qt=h;async function eo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Qt(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||Qt(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await t({node:e}),o({node:e})}var to={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=eo},resolve:eo};const oo=U,no=to;var io={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>oo({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=>oo({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 no.init(e)}};const ao=h;async function ro({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||ao(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||ao(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var so={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=ro},resolve:ro};const co=h;async function lo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=co(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 po={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=lo},resolve:lo};const fo=h,mo=L,uo=z;async function ho({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||fo(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await t({node:e}),o({node:e})}var wo={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]=[mo(e.definition.for,t),uo(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=ho},resolve:ho};var yo={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 go=h;async function bo({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||go(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var vo={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=bo},resolve:bo};const _o=h;async function xo({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||_o(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var ko={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=xo},resolve:xo};const jo=h;async function Do({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||jo(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 Po={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=Do},resolve:Do};const Ao=Po;var So={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 Ao.init(e)}};const To=Po;var Eo={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 To.init(e)}};const Io=Po;var $o={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 Io.init(e)}};async function Oo({node:e}){e.context.next=e.childs[0]}var Co={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=Oo},resolve:Oo};const No=h;async function Mo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||No(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 Fo={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=Mo},resolve:Mo};const Ro=h;async function qo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||Ro(e.definition),await t({node:e})}var Uo={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=qo},resolve:qo};const Bo=h;async function Lo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Bo(e.definition);const i=e.context.transform;i.next=await n(i.next),await t({node:e}),o({node:e})}var zo={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Lo},resolve:Lo};const Jo=Po;var Wo={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 Jo.init(e)}};const Ko=Po;var Go={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 Ko.init(e)}};const Ho=Po;var Vo={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 Ho.init(e)}};const Xo=d,Yo=f,Zo=m,Qo=s,en=u,tn=h,on=w,nn=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:an}=b,rn=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)}))}))}},sn=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||!1!==o.dts?.enabled,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:!1,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:!1,string:!0}},l={};!0===o.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,babel_options:{targets:{chrome:"79"}}}),!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:!1,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=!0===o.terser||o.terser&&!1!==o.terser?.enabled,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},cn=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"}))},ln=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})},pn=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(re.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&s.push(re.resolve(t.projectDir,"src/cli/index.js"));for await(const t of s){const i=t;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 t=(await ce({name:e.package,groupBy:{minor:!0}}))[0][0];n.push({package:e.package,subpath:e.subpath,version:`^${t}`,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")},dn=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})},fn=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")},mn=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")},un=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")},hn=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")},wn=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(Ae.readFileSync(Se.resolve(o,`${i}.njk`),"utf8"),Pe.configure(o)).render(e),a=t.projectDir,r=Se.resolve(a,`${i}`);Ae.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(Ae.readFileSync(Se.resolve(c,`${i}.njk`),"utf8"),Pe.configure(c)).render(s),p=t.projectDir,d=Se.resolve(p,`${i}`);Ae.writeFileSync(d,l,"utf8")}},yn=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.")},gn=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!==Ie.exec("tsc",{cwd:n}).code)throw new Error("Couldnt create .d.ts files.")},bn=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==$e.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},vn=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.")},_n=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:a}=e;if(!0===i.enabled)if("lib"===i.name)await Lt({...e});else if("red"===i.name)await Bt({...e});else if("npm"===i.name)await Ut({...e});else if("gcs"===i.name)await qt({...e});else if("gitlab"===i.name)await Rt({...e});else if("macos-app"===i.name)await Jt({...e});else if("ios-app"===i.name)await zt({...e});else if("electron"===i.name)await Wt({...e});else if("webos"===i.name)await Kt({...e});else if("fnet-package"===i.name)await Vt({...e});else if("fnet-form"===i.name)await Xt({...e});else if("fnet-node"===i.name)await Zt({...e});else if("fnet-flow"===i.name)await Yt({...e});else{let e;if("nextjs"===i.name?e=Gt:"docker"===i.name&&(e=Ht),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:n.projectDir,dependencies:o})}},{Atom:xn}=v,kn=R,jn=D,Dn=q,Pn=t,An=j,Sn=U,Tn=c,En=B,In=io,$n=so,On=po,Cn=wo,Nn=to,Mn=yo,Fn=vo,Rn=ko,qn=Po,Un=So,Bn=Eo,Ln=$o,zn=Co,Jn=Fo,Wn=Uo,Kn=zo,Gn=Wo,Hn=Go,Vn=Vo,Xn=({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 Yn=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 rn,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:xn,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#v={initNode:this.initNode.bind(this),cloneDeep:tn,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Xn,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 nn(),this.#p=this.#t.buildId||an(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 Pn({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await sn(this.#b),await cn(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 xn.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await Tn({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){Xo.statSync(e).isDirectory()?(Xo.readdirSync(e).forEach((t=>{const o=Yo.join(e,t);this.#_(o)})),Xo.rmdirSync(e)):Xo.unlinkSync(e)}#x(e,t){const o=Xo.existsSync(e),n=o&&Xo.statSync(e);o&&n.isDirectory()?(Xo.mkdirSync(t,{recursive:!0}),Xo.readdirSync(e).forEach((o=>{this.#x(Yo.join(e,o),Yo.join(t,o))}))):Xo.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,o=["node_modules"];if(Xo.existsSync(e)){const t=Xo.readdirSync(e);for(const n of t)if(!o.includes(n)){const t=Yo.join(e,n);this.#_(t)}}Xo.existsSync(e)||Xo.mkdirSync(e,{recursive:!0});const n=Yo.join(e,"src");Xo.existsSync(n)||Xo.mkdirSync(n,{recursive:!0});const i=Yo.join(n,"core");this.#x(t,i);const a=Yo.join(n,"default","blocks");Xo.existsSync(a)||Xo.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=en.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 $n.hits(t))await $n.init(t);else if(await Cn.hits(t))await Cn.init(t);else if(await Nn.hits(t))await Nn.init(t);else if(await In.hits(t))await In.init(t);else if(await Mn.hits(t))await Mn.init(t);else if(await On.hits(t))await On.init(t);else if(await Fn.hits(t))await Fn.init(t);else if(await Rn.hits(t))await Rn.init(t);else if(await qn.hits(t))await qn.init(t);else if(await Un.hits(t))await Un.init(t);else if(await Bn.hits(t))await Bn.init(t);else if(await Ln.hits(t))await Ln.init(t);else if(await Hn.hits(t))await Hn.init(t);else if(await Vn.hits(t))await Vn.init(t);else if(await Jn.hits(t))await Jn.init(t);else if(await Wn.hits(t))await Wn.init(t);else if(await Gn.hits(t))await Gn.init(t);else if(await zn.hits(t))await zn.init(t);else{if(!await Kn.hits(t))throw new Error("Undefined step type.");await Kn.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=Yo.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=an(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=kn({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 xn.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await xn.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await xn.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=Yo.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await An({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 jn({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 jn({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=tn(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=Yo.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=Yo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!Xo.existsSync(e)){Xo.mkdirSync(Yo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Xo.writeFileSync(e,t,"utf8")}o.relativePath=t.split(Yo.sep).join("/"),this.#o.typesDir=`./types/${Yo.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;Xo.writeFileSync(Yo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=en.compile(Xo.readFileSync(Yo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=Yo.resolve(n,"src/default/index.js");Xo.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=en.compile(Xo.readFileSync(Yo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=Yo.resolve(n,`src/default/${e.codeKey}.js`);Xo.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=en.compile(Xo.readFileSync(Yo.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=Yo.resolve(t,`src/default/blocks/${o}`);Xo.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(on(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 Sn({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:Zo.dump(n)},a=this.#t.templateDir,r=en.compile(Xo.readFileSync(Yo.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),s=this.#t.projectDir,c=Yo.resolve(s,`${e}`);Xo.writeFileSync(c,r,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:Zo.dump(this.#n)},n=this.#t.templateDir,i=en.compile(Xo.readFileSync(Yo.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),a=this.#t.projectDir,r=Yo.resolve(a,`${e}`);Xo.writeFileSync(r,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=Qo.exec("prettier --write .",{cwd:Yo.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 xn.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 xn.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 _n({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await xn.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await xn.update(n,{id:n.id})):n=await xn.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(En.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 Dn({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;Xo.writeFileSync(Yo.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 wn(this.#b),await hn(this.#b),await un(this.#b),await mn(this.#b),await dn(this.#b),await ln(this.#b),await fn(this.#b),await pn(this.#b),await yn(this.#b),await gn(this.#b),this.#w&&(await bn(this.#b),await vn(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 Dn({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 Zn=d,Qn=f;var ei=function({baseDir:e=__dirname}){let t=e;for(;t!==Qn.parse(t).root;){const e=Qn.join(t,"node_modules");if(Zn.existsSync(e))return e;t=Qn.dirname(t)}return null};const ti=process.cwd(),{spawn:oi}=e;t({name:["redis"],dir:ti,optional:!0});const ni=o,ii=n,{hideBin:ai}=i,ri=a,si=r,ci=s,li=c,pi=t,di=l,fi=p,mi=Yn,ui=ei({baseDir:__dirname}),hi="win32"===process.platform?";":":";process.env.PATH=`${ni.join(ui,"/.bin")}${hi}${process.env.PATH}`;let wi=ii(ai(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=ni.resolve(ui,"./@fnet/cli-project-flow/dist/template/project"),o=ni.resolve(ti,e.name);ri.existsSync(o)||ri.mkdirSync(o),await fi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0});let n=ci.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(ci.which("git")&&(n=ci.exec("git init",{cwd:o}),0!==n.code))throw new Error("Failed to initialize git.");if(ci.which("code")&&e.vscode&&(n=ci.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=ni.resolve(ui,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd();if(e.name=ni.basename(o),e.update){if(await fi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0}),0!==ci.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 gi(e),o=new mi(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 gi({...e,mode:"all"}),o=new mi(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 gi({...e,mode:"file"}),o=new mi(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 yi(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 gi(e),{projectDir:i}=t,a=process.argv.slice(3);oi(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 gi(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:ni.resolve(ti,`./.output/${e.id}`),templateDir:ni.resolve(ui,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:ni.resolve(ui,"./@fnet/cli-project-common/dist/template/default"),coreDir:ni.resolve(ui,"./@fnet/cli-project-flow/dist/template/core")}}{const t=await async function(){const e=ni.resolve(ti,"flow.yaml");if(!ri.existsSync(e))throw new Error("flow.yaml file not found in current directory.");const t=ri.readFileSync(e,"utf8"),{parsed:o}=await li({content:t}),n=ni.dirname(e),i=o.main||"flow.main.yaml";let a=ni.resolve(n,i);if(!ri.existsSync(a)&&(a=ni.resolve(n,i+".yaml"),!ri.existsSync(a)))throw new Error(`${i} file not found in ${a}.`);const r=ri.readFileSync(a,"utf8"),{parsed:s}=await li({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=ni.resolve(n,"flow.devops.yaml");if(ri.existsSync(l)){const e=ri.readFileSync(l,"utf8"),t=si.parse(e);c.devops={filePath:l,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{ri.writeFileSync(c.devops.filePath,si.stringify(c.devops.doc))}}}const p=ni.resolve(n,"readme.md");if(ri.existsSync(p)){const e=ri.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:ni.resolve(ui,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:ni.resolve(ui,"./@fnet/cli-project-common/dist/template/default"),coreDir:ni.resolve(ui,"./@fnet/cli-project-flow/dist/template/core"),projectDir:ni.resolve(t.projectDir,"./.workspace"),projectSrcDir:ni.resolve(t.projectDir,"./src"),project:t}}}wi=wi.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await gi(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 di({schema:a}),s=ni.resolve(n,".fnet");ri.existsSync(s)||ri.mkdirSync(s);const c=ni.resolve(s,`${e.name}.fnet`);ri.writeFileSync(c,si.stringify(r))}catch(e){console.error(e.message),process.exit(1)}})),wi=yi(wi,{bin:"npm"}),wi=yi(wi,{bin:"node"}),wi=yi(wi,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),wi=yi(wi,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),wi=yi(wi,{name:"app",bin:"npm",preArgs:["run","app","--"]}),wi=yi(wi,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),wi=yi(wi,{bin:"npx"}),wi=yi(wi,{bin:"cdk"}),wi=yi(wi,{bin:"aws"}),wi=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 gi(e),{projectDir:n}=t,i=e.config,a=await pi({name:i,dir:n,transferEnv:!1,optional:!0}),r=a?.data?.env||void 0,s=e.command,c=process.argv.slice(5);oi(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)}}))}(wi,{name:"with"}),wi.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"),I=require("@flownet/lib-to-ios-app"),$=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 Ie=s;const $e=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=I;const ot=$;const nt=t,it=O,at=h,rt=A;const st=t,ct=C,lt=h,pt=A;const dt=t,ft=N,mt=h,ut=A;const ht=t,wt=M,yt=h,gt=A;const bt=d,vt=f,_t=A,xt=S,kt=t,jt=_.default;const Dt=A,Pt=t,St=_.default;const At=A,Tt=t,Et=_.default,It=a,$t=S,Ot=F;const Ct=A,Nt=t,Mt=_.default,Ft=a,Rt=S,qt=F;const Ut=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)},Bt=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}))},Lt=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},zt=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}},Jt=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})},Wt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a,registerToPackageManager:r})=>{await t({message:"Deploying it as ios app package."});const s=o.projectDir;if(!0===i.dryRun)return;const c={projectDir:s,dest:s,atom:e,params:i.params};await tt(c),n.isDirty=!0},Kt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a})=>{await t({message:"Deploying it as macos app package."});const r=o.projectDir;if(!0===i.dryRun)return;const s={projectDir:r,dest:r,atom:e,params:i.params};await ot(s),n.isDirty=!0},Gt=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 nt({name:t.config,dir:n,optional:!0}):void 0,r=rt.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=at(t.params);s.dependencies=at(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await it(c)}},Ht=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 st({name:t.config,dir:n,optional:!0}):void 0,r=pt.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=lt(t.params);s.dependencies=lt(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await ct(c)}},Vt=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 dt({name:t.config,dir:n,optional:!0}):void 0,r=ut.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=mt(t.params);s.dependencies=mt(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await ft(c)}},Xt=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 ht({name:t.config,dir:n,optional:!0}):void 0,r=gt.inc(t.params.version||"0.1.0","patch");t.params.version=r;const s=yt(t.params);s.dependencies=yt(i);const c={atom:e,params:s,config:a?.config,src:n,dest:n};return{deployer:await wt(c)}},Yt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as fnet package."});const a=t.projectDir,r=vt.resolve(a,"package.json"),s=bt.readFileSync(r),c=JSON.parse(s);c.name=n.params.name,c.version=_t.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,bt.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await kt({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 jt({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='${vt.resolve(vt.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 xt({cmd:w}),bt.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 jt({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.")},Zt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet form."});const i=Dt.inc(n.params.version,"patch"),{file:a,data:r}=await Pt({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 St({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);o.isDirty=!0,n.params.version=i;const f=`${r.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await St({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.")},Qt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet flow."});const i=At.inc(n.params.version,"patch"),{file:a,data:r}=await Tt({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 Et({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 Et({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 $t({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Ot;y.append("file",It.createReadStream(w));const g=await Et.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.")},eo=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet node."});const i=Ct.inc(n.params.version,"patch"),{file:a,data:r}=await Nt({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 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-node/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 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 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 node.")};const to=h;async function oo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||to(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||to(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await t({node:e}),o({node:e})}var no={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=oo},resolve:oo};const io=U,ao=no;var ro={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>io({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=>io({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 ao.init(e)}};const so=h;async function co({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||so(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||so(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var lo={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=co},resolve:co};const po=h;async function fo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=po(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 mo={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=fo},resolve:fo};const uo=h,ho=L,wo=z;async function yo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||uo(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await t({node:e}),o({node:e})}var go={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]=[ho(e.definition.for,t),wo(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=yo},resolve:yo};var bo={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 vo=h;async function _o({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||vo(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var xo={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=_o},resolve:_o};const ko=h;async function jo({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||ko(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var Do={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=jo},resolve:jo};const Po=h;async function So({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Po(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 Ao={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=So},resolve:So};const To=Ao;var Eo={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 To.init(e)}};const Io=Ao;var $o={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 Io.init(e)}};const Oo=Ao;var Co={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 Oo.init(e)}};async function No({node:e}){e.context.next=e.childs[0]}var Mo={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=No},resolve:No};const Fo=h;async function Ro({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Fo(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 qo={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=Ro},resolve:Ro};const Uo=h;async function Bo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||Uo(e.definition),await t({node:e})}var Lo={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",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.next=await n(i.next),await t({node:e}),o({node:e})}var Wo={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Jo},resolve:Jo};const Ko=Ao;var Go={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 Ko.init(e)}};const Ho=Ao;var Vo={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 Ho.init(e)}};const Xo=Ao;var Yo={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 Xo.init(e)}};const Zo=d,Qo=f,en=m,tn=s,on=u,nn=h,an=w,rn=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:sn}=b,cn=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)}))}))}},ln=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||!1!==o.dts?.enabled,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:!1,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:!1,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.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:!1,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=!0===o.terser||o.terser&&!1!==o.terser?.enabled,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},pn=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"}))},dn=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})},fn=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(re.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&s.push(re.resolve(t.projectDir,"src/cli/index.js"));for await(const t of s){const i=t;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 t=(await ce({name:e.package,groupBy:{minor:!0}}))[0][0];n.push({package:e.package,subpath:e.subpath,version:`^${t}`,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")},mn=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})},un=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")},hn=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")},wn=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")},yn=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")},gn=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")}},bn=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.")},vn=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!==Ie.exec("tsc",{cwd:n}).code)throw new Error("Couldnt create .d.ts files.")},_n=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==$e.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},xn=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.")},kn=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 Jt({...e});else if("red"===i.name)await zt({...e});else if("npm"===i.name)await Lt({...e});else if("gcs"===i.name)await Bt({...e});else if("gitlab"===i.name)await Ut({...e});else if("macos-app"===i.name)await Kt({...e});else if("ios-app"===i.name)await Wt({...e});else if("fnet-package"===i.name)await Yt({...e});else if("fnet-form"===i.name)await Zt({...e});else if("fnet-node"===i.name)await eo({...e});else if("fnet-flow"===i.name)await Qt({...e});else{let e;if("nextjs"===i.name?e=Vt:"webos"===i.name?e=Ht:"electron"===i.name?e=Gt:"docker"===i.name&&(e=Xt),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:n.projectDir,dependencies:o}),r.isDirty=!0}},{Atom:jn}=v,Dn=R,Pn=D,Sn=q,An=t,Tn=j,En=U,In=c,$n=B,On=ro,Cn=lo,Nn=mo,Mn=go,Fn=no,Rn=bo,qn=xo,Un=Do,Bn=Ao,Ln=Eo,zn=$o,Jn=Co,Wn=Mo,Kn=qo,Gn=Lo,Hn=Wo,Vn=Go,Xn=Vo,Yn=Yo,Zn=({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 Qn=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 cn,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:jn,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#v={initNode:this.initNode.bind(this),cloneDeep:nn,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Zn,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 rn(),this.#p=this.#t.buildId||sn(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 An({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await ln(this.#b),await pn(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 jn.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await In({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),Zo.statSync(e).isDirectory()?(Zo.readdirSync(e).forEach((t=>{const o=Qo.join(e,t);this.#_(o)})),Zo.rmSync(e)):Zo.unlinkSync(e)}#x(e,t){const o=Zo.existsSync(e),n=o&&Zo.statSync(e);o&&n.isDirectory()?(Zo.mkdirSync(t,{recursive:!0}),Zo.readdirSync(e).forEach((o=>{this.#x(Qo.join(e,o),Qo.join(t,o))}))):Zo.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,o=["node_modules"];if(Zo.existsSync(e)){const t=Zo.readdirSync(e);for(const n of t)if(!o.includes(n)){const t=Qo.join(e,n);Zo.rmSync(t,{recursive:!0})}}Zo.existsSync(e)||Zo.mkdirSync(e,{recursive:!0});const n=Qo.join(e,"src");Zo.existsSync(n)||Zo.mkdirSync(n,{recursive:!0});const i=Qo.join(n,"core");this.#x(t,i);const a=Qo.join(n,"default","blocks");Zo.existsSync(a)||Zo.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=on.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 Cn.hits(t))await Cn.init(t);else if(await Mn.hits(t))await Mn.init(t);else if(await Fn.hits(t))await Fn.init(t);else if(await On.hits(t))await On.init(t);else if(await Rn.hits(t))await Rn.init(t);else if(await Nn.hits(t))await Nn.init(t);else if(await qn.hits(t))await qn.init(t);else if(await Un.hits(t))await Un.init(t);else if(await Bn.hits(t))await Bn.init(t);else if(await Ln.hits(t))await Ln.init(t);else if(await zn.hits(t))await zn.init(t);else if(await Jn.hits(t))await Jn.init(t);else if(await Xn.hits(t))await Xn.init(t);else if(await Yn.hits(t))await Yn.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 Vn.hits(t))await Vn.init(t);else if(await Wn.hits(t))await Wn.init(t);else{if(!await Hn.hits(t))throw new Error("Undefined step type.");await Hn.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=Qo.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=sn(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=Dn({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 jn.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await jn.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await jn.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=Qo.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await Tn({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 Pn({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 Pn({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=nn(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=Qo.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=Qo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!Zo.existsSync(e)){Zo.mkdirSync(Qo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Zo.writeFileSync(e,t,"utf8")}o.relativePath=t.split(Qo.sep).join("/"),this.#o.typesDir=`./types/${Qo.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;Zo.writeFileSync(Qo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=on.compile(Zo.readFileSync(Qo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=Qo.resolve(n,"src/default/index.js");Zo.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=on.compile(Zo.readFileSync(Qo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=Qo.resolve(n,`src/default/${e.codeKey}.js`);Zo.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=on.compile(Zo.readFileSync(Qo.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=Qo.resolve(t,`src/default/blocks/${o}`);Zo.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(an(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 En({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:en.dump(n)},a=this.#t.templateDir,r=on.compile(Zo.readFileSync(Qo.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),s=this.#t.projectDir,c=Qo.resolve(s,`${e}`);Zo.writeFileSync(c,r,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:en.dump(this.#n)},n=this.#t.templateDir,i=on.compile(Zo.readFileSync(Qo.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),a=this.#t.projectDir,r=Qo.resolve(a,`${e}`);Zo.writeFileSync(r,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=tn.exec("prettier --write .",{cwd:Qo.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 jn.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 jn.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 kn({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await jn.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await jn.update(n,{id:n.id})):n=await jn.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($n.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 Sn({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;Zo.writeFileSync(Qo.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 gn(this.#b),await yn(this.#b),await wn(this.#b),await hn(this.#b),await mn(this.#b),await dn(this.#b),await un(this.#b),await fn(this.#b),await bn(this.#b),await vn(this.#b),this.#w&&(await _n(this.#b),await xn(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 Sn({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 ei=d,ti=f;var oi=function({baseDir:e=__dirname}){let t=e;for(;t!==ti.parse(t).root;){const e=ti.join(t,"node_modules");if(ei.existsSync(e))return e;t=ti.dirname(t)}return null};const ni=process.cwd(),{spawn:ii}=e;t({name:["redis"],dir:ni,optional:!0});const ai=o,ri=n,{hideBin:si}=i,ci=a,li=r,pi=s,di=c,fi=t,mi=l,ui=p,hi=Qn,wi=oi({baseDir:__dirname}),yi="win32"===process.platform?";":":";process.env.PATH=`${ai.join(wi,"/.bin")}${yi}${process.env.PATH}`;let gi=ri(si(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=ai.resolve(wi,"./@fnet/cli-project-flow/dist/template/project"),o=ai.resolve(ni,e.name);ci.existsSync(o)||ci.mkdirSync(o),await ui({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0});let n=pi.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(pi.which("git")&&(n=pi.exec("git init",{cwd:o}),0!==n.code))throw new Error("Failed to initialize git.");if(pi.which("code")&&e.vscode&&(n=pi.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=ai.resolve(wi,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd();if(e.name=ai.basename(o),e.update){if(await ui({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0}),0!==pi.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 vi(e),o=new hi(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 vi({...e,mode:"all"}),o=new hi(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 vi({...e,mode:"file"}),o=new hi(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 bi(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 vi(e),{projectDir:i}=t,a=process.argv.slice(3);ii(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 vi(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:ai.resolve(ni,`./.output/${e.id}`),templateDir:ai.resolve(wi,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:ai.resolve(wi,"./@fnet/cli-project-common/dist/template/default"),coreDir:ai.resolve(wi,"./@fnet/cli-project-flow/dist/template/core")}}{const t=await async function(){const e=ai.resolve(ni,"flow.yaml");if(!ci.existsSync(e))throw new Error("flow.yaml file not found in current directory.");const t=ci.readFileSync(e,"utf8"),{parsed:o}=await di({content:t}),n=ai.dirname(e),i=o.main||"flow.main.yaml";let a=ai.resolve(n,i);if(!ci.existsSync(a)&&(a=ai.resolve(n,i+".yaml"),!ci.existsSync(a)))throw new Error(`${i} file not found in ${a}.`);const r=ci.readFileSync(a,"utf8"),{parsed:s}=await di({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=ai.resolve(n,"flow.devops.yaml");if(ci.existsSync(l)){const e=ci.readFileSync(l,"utf8"),t=li.parse(e);c.devops={filePath:l,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{ci.writeFileSync(c.devops.filePath,li.stringify(c.devops.doc))}}}const p=ai.resolve(n,"readme.md");if(ci.existsSync(p)){const e=ci.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:ai.resolve(wi,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:ai.resolve(wi,"./@fnet/cli-project-common/dist/template/default"),coreDir:ai.resolve(wi,"./@fnet/cli-project-flow/dist/template/core"),projectDir:ai.resolve(t.projectDir,"./.workspace"),projectSrcDir:ai.resolve(t.projectDir,"./src"),project:t}}}gi=gi.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await vi(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 mi({schema:a}),s=ai.resolve(n,".fnet");ci.existsSync(s)||ci.mkdirSync(s);const c=ai.resolve(s,`${e.name}.fnet`);ci.writeFileSync(c,li.stringify(r))}catch(e){console.error(e.message),process.exit(1)}})),gi=bi(gi,{bin:"npm"}),gi=bi(gi,{bin:"node"}),gi=bi(gi,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),gi=bi(gi,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),gi=bi(gi,{name:"app",bin:"npm",preArgs:["run","app","--"]}),gi=bi(gi,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),gi=bi(gi,{bin:"npx"}),gi=bi(gi,{bin:"cdk"}),gi=bi(gi,{bin:"aws"}),gi=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 vi(e),{projectDir:n}=t,i=e.config,a=await fi({name:i,dir:n,transferEnv:!1,optional:!0}),r=a?.data?.env||void 0,s=e.command,c=process.argv.slice(5);ii(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)}}))}(gi,{name:"with"}),gi.demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e,t,i=require("@fnet/config"),s=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),c=require("path"),d=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),p=require("keycloak-connect"),f=require("qs");function w(){if(t)return e;t=1;const i=s,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=i.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}}var _,b,m,y,k={name:"@fnet/cli",version:"0.39.5",files:["dist"],scripts:{start:"node src/index.js",build:"rollup --config --bundleConfigAsCjs",deploy:"npm install && npm run build && npm publish --access public",watch:"rollup --config --watch --sourcemap --bundleConfigAsCjs --environment DEVELOPMENT"},repository:{type:"git",url:"git+https://gitlab.com/fnetai/cli.git"},license:"MIT",dependencies:{"@flownet/lib-atom-api-js":"^0.1.10","@flownet/lib-bpmn-from-flow":"^0.1.8","@flownet/lib-is-redis-online":"^0.1.13","@flownet/lib-list-npm-versions":"^0.1.31","@flownet/lib-parse-imports-js":"^0.3.1","@flownet/lib-parse-node-url":"^0.1.16","@flownet/lib-pick-npm-versions":"^0.1.12","@flownet/lib-render-templates-dir":"^0.1.12","@flownet/lib-to-docker":"^0.1.13","@flownet/lib-to-electron":"^0.2.1","@flownet/lib-to-gitlab":"^0.1.21","@flownet/lib-to-ios-app":"^0.2.6","@flownet/lib-to-macos-app":"^0.2.4","@flownet/lib-to-nextjs":"^0.1.12","@flownet/lib-to-webos":"^0.2.10","@fnet/cli-project-common":"^0.1.26","@fnet/cli-project-flow":"^0.1.9","@fnet/cli-project-node":"^0.1.12","@fnet/config":"^0.2.8","@fnet/dir-zipper":"^0.1.5","@fnet/expression":"^0.1.16","@fnet/files-to-gcs":"^0.3.6","@fnet/object-from-schema":"^0.1.2","@fnet/shell":"^0.1.13","@fnet/yaml":"^0.1.12","@fnet/yargs-options-from-schema":"^0.1.1","@node-red/util":"^4.0.2",axios:"^1.5.0",chalk:"^4.1.2",cors:"^2.8.5",express:"^4.18.2","express-session":"^1.17.3","form-data":"^4.0.0","get-value":"^3.0.1",helmet:"^7.1.0",isobject:"^4.0.0","js-yaml":"^4.1.0","keycloak-connect":"^25.0.5","lodash.clonedeep":"^4.5.0","lodash.merge":"^4.6.2","lodash.omit":"^4.5.0","lodash.pick":"^3.1.0",minimist:"^1.2.8",nanoid:"^3.3.6",nunjucks:"^3.2.4",prettier:"^3.0.3",qs:"^6.11.2",redis:"^4.6.10","request-ip":"^3.3.0",semver:"^7.5.4",serve:"^14.2.3","set-value":"^4.1.0",shelljs:"^0.8.5",typescript:"^5.2.2",yaml:"^2.3.2",yargs:"^17.7.2"},bin:{fnet:"dist/builder/wf-cli.js",flib:"dist/builder/lib-cli.js",fsrv:"dist/index.js",fnode:"dist/builder/lib-cli.js"},devDependencies:{"@rollup/plugin-commonjs":"^26.0.1","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.1","@rollup/plugin-replace":"^5.0.2","@rollup/plugin-terser":"^0.4.3",rollup:"^4.9.6"}};const g=process.cwd(),j=i;(async function(){await j({name:["server","redis"],dir:g,optional:!0});const e=await w()();if(!e)throw new Error("Redis is offline.");const t=k,i=n,s=o,r=l,v=function(){if(b)return _;b=1;const e=n,t=c,i=d,{nanoid:s}=a;return _=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/workflow/builder/create",this._buildHandler.bind(this)),t.post("/workflow/builder/status",this._statusHandler.bind(this)),t.post("/workflow/builder/network",this._networkHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,i){await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_networkHandler(e,t){this._network({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const i=e.body.id;if(!i)throw new Error("Build Id is not defined.");const s="BUILD:"+i;this._cache_get(s).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=all`;return i.exec(o,{async:!0,cwd:this.#e}),{id:n}}async _network(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=bpmn`;i.exec(o,{cwd:this.#e});const l="BUILD:"+n;return await this._cache_get(l)}}}(),E=function(){if(y)return m;y=1;const e=n,t=c,i=d,{nanoid:s}=a;return m=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/library/builder/create",this._buildHandler.bind(this)),t.post("/library/builder/status",this._statusHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,i){await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const i=e.body.id;if(!i)throw new Error("Build Id is not defined.");const s="BUILD:"+i;this._cache_get(s).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Library Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/lib-cli.js")} build --id=${r} --buildId=${n} --mode=all}`;return i.exec(o,{async:!0,cwd:this.#e}),{id:n}}}}(),x=u,q=h,S=new(0,q.MemoryStore),I=new p({store:S}),R=i(),T=f;R.set("query parser",(function(e){return T.parse(e,{depth:12})})),R.use(q({secret:process.env.SESSION_SECRET,resave:!1,saveUninitialized:!0,store:S})),R.use(r()),R.use(s()),R.use(i.json({limit:"1024kb"})),R.get("/healthz",(function(e,t){t.sendStatus(200)})),R.use(x.mw()),R.use(I.middleware()),new v({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),new E({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),R.listen(process.env.HTTP_PORT||8080),console.log(`[${t.version}] ${t.name} started.`)})().catch((e=>{console.error(e.message),process.exit(1)})),module.exports={};
2
+ "use strict";var e,t,i=require("@fnet/config"),s=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),c=require("path"),d=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),p=require("keycloak-connect"),f=require("qs");function w(){if(t)return e;t=1;const i=s,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=i.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}}var _,b,m,y,k={name:"@fnet/cli",version:"0.40.0",files:["dist"],scripts:{start:"node src/index.js",build:"rollup --config --bundleConfigAsCjs",deploy:"npm install && npm run build && npm publish --access public",watch:"rollup --config --watch --sourcemap --bundleConfigAsCjs --environment DEVELOPMENT"},repository:{type:"git",url:"git+https://gitlab.com/fnetai/cli.git"},license:"MIT",dependencies:{"@flownet/lib-atom-api-js":"^0.1.10","@flownet/lib-bpmn-from-flow":"^0.1.8","@flownet/lib-is-redis-online":"^0.1.13","@flownet/lib-list-npm-versions":"^0.1.31","@flownet/lib-parse-imports-js":"^0.3.1","@flownet/lib-parse-node-url":"^0.1.16","@flownet/lib-pick-npm-versions":"^0.1.12","@flownet/lib-render-templates-dir":"^0.1.12","@flownet/lib-to-docker":"^0.1.13","@flownet/lib-to-electron":"^0.2.7","@flownet/lib-to-gitlab":"^0.1.21","@flownet/lib-to-ios-app":"^0.2.6","@flownet/lib-to-macos-app":"^0.2.4","@flownet/lib-to-nextjs":"^0.2.2","@flownet/lib-to-webos":"^0.2.15","@fnet/cli-project-common":"^0.1.26","@fnet/cli-project-flow":"^0.1.9","@fnet/cli-project-node":"^0.1.12","@fnet/config":"^0.2.8","@fnet/dir-zipper":"^0.1.5","@fnet/expression":"^0.1.16","@fnet/files-to-gcs":"^0.3.6","@fnet/object-from-schema":"^0.1.2","@fnet/shell":"^0.1.13","@fnet/yaml":"^0.1.12","@fnet/yargs-options-from-schema":"^0.1.1","@node-red/util":"^4.0.2",axios:"^1.5.0",chalk:"^4.1.2",cors:"^2.8.5",express:"^4.18.2","express-session":"^1.17.3","form-data":"^4.0.0","get-value":"^3.0.1",helmet:"^7.1.0",isobject:"^4.0.0","js-yaml":"^4.1.0","keycloak-connect":"^25.0.5","lodash.clonedeep":"^4.5.0","lodash.merge":"^4.6.2","lodash.omit":"^4.5.0","lodash.pick":"^3.1.0",minimist:"^1.2.8",nanoid:"^3.3.6",nunjucks:"^3.2.4",prettier:"^3.0.3",qs:"^6.11.2",redis:"^4.6.10","request-ip":"^3.3.0",semver:"^7.5.4",serve:"^14.2.3","set-value":"^4.1.0",shelljs:"^0.8.5",typescript:"^5.2.2",yaml:"^2.3.2",yargs:"^17.7.2"},bin:{fnet:"dist/builder/wf-cli.js",flib:"dist/builder/lib-cli.js",fsrv:"dist/index.js",fnode:"dist/builder/lib-cli.js"},devDependencies:{"@rollup/plugin-commonjs":"^26.0.1","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.1","@rollup/plugin-replace":"^5.0.2","@rollup/plugin-terser":"^0.4.3",rollup:"^4.9.6"}};const g=process.cwd(),j=i;(async function(){await j({name:["server","redis"],dir:g,optional:!0});const e=await w()();if(!e)throw new Error("Redis is offline.");const t=k,i=n,s=o,r=l,v=function(){if(b)return _;b=1;const e=n,t=c,i=d,{nanoid:s}=a;return _=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/workflow/builder/create",this._buildHandler.bind(this)),t.post("/workflow/builder/status",this._statusHandler.bind(this)),t.post("/workflow/builder/network",this._networkHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,i){await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_networkHandler(e,t){this._network({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const i=e.body.id;if(!i)throw new Error("Build Id is not defined.");const s="BUILD:"+i;this._cache_get(s).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=all`;return i.exec(o,{async:!0,cwd:this.#e}),{id:n}}async _network(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=bpmn`;i.exec(o,{cwd:this.#e});const l="BUILD:"+n;return await this._cache_get(l)}}}(),E=function(){if(y)return m;y=1;const e=n,t=c,i=d,{nanoid:s}=a;return m=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/library/builder/create",this._buildHandler.bind(this)),t.post("/library/builder/status",this._statusHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,i){await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const i=e.body.id;if(!i)throw new Error("Build Id is not defined.");const s="BUILD:"+i;this._cache_get(s).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Library Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/lib-cli.js")} build --id=${r} --buildId=${n} --mode=all}`;return i.exec(o,{async:!0,cwd:this.#e}),{id:n}}}}(),x=u,q=h,S=new(0,q.MemoryStore),I=new p({store:S}),R=i(),T=f;R.set("query parser",(function(e){return T.parse(e,{depth:12})})),R.use(q({secret:process.env.SESSION_SECRET,resave:!1,saveUninitialized:!0,store:S})),R.use(r()),R.use(s()),R.use(i.json({limit:"1024kb"})),R.get("/healthz",(function(e,t){t.sendStatus(200)})),R.use(x.mw()),R.use(I.middleware()),new v({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),new E({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),R.listen(process.env.HTTP_PORT||8080),console.log(`[${t.version}] ${t.name} started.`)})().catch((e=>{console.error(e.message),process.exit(1)})),module.exports={};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fnet/cli",
3
- "version": "0.39.5",
3
+ "version": "0.40.0",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -25,12 +25,12 @@
25
25
  "@flownet/lib-pick-npm-versions": "^0.1.12",
26
26
  "@flownet/lib-render-templates-dir": "^0.1.12",
27
27
  "@flownet/lib-to-docker": "^0.1.13",
28
- "@flownet/lib-to-electron": "^0.2.1",
28
+ "@flownet/lib-to-electron": "^0.2.7",
29
29
  "@flownet/lib-to-gitlab": "^0.1.21",
30
30
  "@flownet/lib-to-ios-app": "^0.2.6",
31
31
  "@flownet/lib-to-macos-app": "^0.2.4",
32
- "@flownet/lib-to-nextjs": "^0.1.12",
33
- "@flownet/lib-to-webos": "^0.2.10",
32
+ "@flownet/lib-to-nextjs": "^0.2.2",
33
+ "@flownet/lib-to-webos": "^0.2.15",
34
34
  "@fnet/cli-project-common": "^0.1.26",
35
35
  "@fnet/cli-project-flow": "^0.1.9",
36
36
  "@fnet/cli-project-node": "^0.1.12",