@fnet/cli 0.35.1 → 0.36.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builder/lib-cli.js +1 -1
- package/dist/builder/wf-cli.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/builder/lib-cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("child_process"),t=require("@fnet/config"),a=require("path"),o=require("yargs/yargs"),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=n,G=a,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=$;const et=T;const tt=O,at=C,ot=v,rt=A,nt=m;const it=M,st=C,ct=v,lt=A,pt=m;const dt=d,mt=m,ut=A,ft=D,gt=t,yt=_.default;const wt=A,ht=t,_t=_.default;const bt=A,vt=t,jt=_.default,xt=n,kt=D,Dt=R;const At=A,Pt=t,St=_.default,It=n,Et=D,$t=R;const Tt=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)},Ot=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}))},Ct=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},Mt=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}},Rt=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})},qt=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},Ft=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},Lt=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={src:i,dest:i,atom:e,params:r.params};await Ve(s),o.isDirty=!0},Nt=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 et(i),o.isDirty=!0},Ut=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as nextjs package."});t.params=ot({name:"nextjs-app",version:"0.1.0"},t.params);const n=rt.inc(t.params.version,"patch");t.params.version=n;const i=at(t);i.params.dependencies=at(r);const s={atom:e,target:i.params,projectDir:o,renderDir:nt.resolve(o,"nextjs")};return{deployer:await tt(s)}},zt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as docker package."});t.params=ct({},t.params);const n=lt.inc(t.params.version,"patch");t.params.version=n;const i=st(t);i.params.dependencies=st(r);const s={atom:e,target:i.params,projectDir:o,renderDir:pt.resolve(o,"docker")};return{deployer:await it(s)}},Bt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:r})=>{await e({message:"Deploying it as fnet package."});const n=t.projectDir,i=mt.resolve(n,"package.json"),s=dt.readFileSync(i),c=JSON.parse(s);c.name=o.params.name,c.version=ut.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,dt.writeFileSync(i,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await gt({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 yt({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='${mt.resolve(mt.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 ft({cmd:y}),dt.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 yt({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.")},Jt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet form."});const r=wt.inc(o.params.version,"patch"),{file:n,data:i}=await ht({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 _t({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);a.isDirty=!0,o.params.version=r;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await _t({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet form.")},Wt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet flow."});const r=bt.inc(o.params.version,"patch"),{file:n,data:i}=await vt({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 jt({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 jt({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 kt({cmd:f});if(0!==g.code)throw new Error(g.stderr);const y=JSON.parse(g.stdout).path;let w=new Dt;w.append("file",xt.createReadStream(y));const h=await jt.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.")},Kt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet node."});const r=At.inc(o.params.version,"patch"),{file:n,data:i}=await Pt({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 St({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);a.isDirty=!0,o.params.version=r;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await St({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet 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 Et({cmd:f});if(0!==g.code)throw new Error(g.stderr);const y=JSON.parse(g.stdout).path;let w=new $t;w.append("file",It.createReadStream(y));const h=await St.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 Gt=d,Ht=m,Xt=u,Yt=s,Zt=f,Qt=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:Vt}=w,ea=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)}))}))}},ta=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const a=e.doc.features;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";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;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.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},aa=async({atom:e,packageDependencies:t,packageDevDependencies:a})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),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(!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),a.push({package:"@babel/core",version:"^7.23"}),a.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),a.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),a.push({package:"@rollup/plugin-replace",version:"^5.0"}),a.push({package:"rollup",version:"^4.9"}),a.push({package:"rollup-plugin-delete",version:"^2.0"}),a.push({package:"rollup-plugin-dts",version:"^6.0"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),a.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6.0"}),a.push({package:"@babel/preset-env",version:"7.23"}),a.push({package:"@babel/preset-react",version:"7.23"})),e.doc.features.browsersync_enabled&&a.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&a.push({package:"@rollup/plugin-json",version:"^6.0"}),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.1"}),e.doc.features.image_enabled&&a.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.analyzer_enabled&&a.push({package:"rollup-plugin-analyzer",version:"^3.3"}),e.doc.features.visualizer_enabled&&a.push({package:"rollup-plugin-visualizer",version:"^5.9"}),e.doc.features.string_enabled&&a.push({package:"rollup-plugin-string",version:"^3.0"}),e.doc.features.css_enabled){a.push({package:"rollup-plugin-postcss",version:"4.0"}),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.1"});break;case"postcss-url":a.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":a.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":a.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":a.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&a.push({package:"rollup-plugin-copy",version:"^3.5"})},oa=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})},ra=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")},na=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})},ia=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,p=pe.compile(ce.readFileSync(le.resolve(l,"rollup.config.js.njk"),"utf8"),pe.configure(l)).render(r),d=a.projectDir,m=le.resolve(d,"rollup.config.js");ce.writeFileSync(m,p,"utf8")},sa=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")},ca=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")},la=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")},pa=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")}},da=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,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},ma=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Creating .d.ts"});if(0!==Pe.exec("tsc",{cwd:a}).code)throw new Error("Couldnt create .d.ts files.")},ua=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.")},fa=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.")},ga=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:r,setInProgress:n}=e;if(!0===r.enabled)if("lib"===r.name)await Rt({...e});else if("red"===r.name)await Mt({...e});else if("npm"===r.name)await Ct({...e});else if("gcs"===r.name)await Ot({...e});else if("gitlab"===r.name)await Tt({...e});else if("macos-app"===r.name)await Ft({...e});else if("ios-app"===r.name)await qt({...e});else if("electron"===r.name)await Lt({...e});else if("webos"===r.name)await Nt({...e});else if("fnet-package"===r.name)await Bt({...e});else if("fnet-form"===r.name)await Jt({...e});else if("fnet-node"===r.name)await Kt({...e});else if("fnet-flow"===r.name)await Wt({...e});else{let e;if("nextjs"===r.name?e=Ut:"docker"===r.name&&(e=zt),!e)return;await e({atom:t,target:r,onProgress:n,projectDir:o.projectDir,dependencies:a})}},{Atom:ya}=h,wa=q,ha=t,_a=j,ba=F,va=L;var ja=class{#e;#t;#a;#o;#r;#n;#i;#s;#c;#l;#p;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new ea,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:ya,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 Qt(),this.#c=this.#t.buildId||Vt(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 ha({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 ta(this.#y),await aa(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 ya.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"];Gt.existsSync(e)&&Gt.readdirSync(e).forEach((o=>{a.includes(o)||(t=Yt.rm("-rf",Ht.join(e,o)))}));let o=e;if(!Gt.existsSync(o)&&(t=Yt.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=Ht.join(e,"src"),!Gt.existsSync(o)&&(t=Yt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=Ht.join(e,"src","default"),!Gt.existsSync()&&(t=Yt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Zt.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=wa({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 ya.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await ya.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await ya.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=Ht.resolve(this.#t.projectSrcDir,"index.js"),a=await _a({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 ba({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=Ht.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=Ht.relative(Ht.join(this.#t.projectDir,"src","default"),e);if(!Gt.existsSync(e)){Gt.mkdirSync(Ht.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Gt.writeFileSync(e,t,"utf8")}a.relativePath=t.split(Ht.sep).join("/"),this.#a.typesDir=`./types/${Ht.basename(o)}/src`}else{const e=Ht.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Gt.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=Zt.compile(Gt.readFileSync(Ht.resolve(t,Ht.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,r=Ht.resolve(o,Ht.join("src","default","index.js"));Gt.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:Xt.dump(o)},n=this.#t.templateDir,i=Zt.compile(Gt.readFileSync(Ht.resolve(n,`${e}.njk`),"utf8"),this.#o).render(r),s=this.#t.projectDir,c=Ht.resolve(s,`${e}`);Gt.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 ya.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 ya.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 ga({...this.#y,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await ya.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await ya.update(o,{id:o.id})):o=await ya.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(va.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 pa(this.#y),await la(this.#y),await ca(this.#y),await sa(this.#y),await na(this.#y),await oa(this.#y),await ia(this.#y),await ra(this.#y),await da(this.#y),await ma(this.#y),this.#f&&(await ua(this.#y),await fa(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 xa=d,ka=m;var Da=function({baseDir:e=__dirname}){let t=e;for(;t!==ka.parse(t).root;){const e=ka.join(t,"node_modules");if(xa.existsSync(e))return e;t=ka.dirname(t)}return null};const Aa=process.cwd(),{spawn:Pa}=e;t({name:["redis"],dir:Aa,optional:!0});const Sa=a,Ia=o,{hideBin:Ea}=r,$a=n,Ta=i,Oa=s,Ca=c,Ma=t,Ra=l,qa=p,Fa=ja,La=Da({baseDir:__dirname}),Na="win32"===process.platform?";":":";process.env.PATH=`${Sa.join(La,"/.bin")}${Na}${process.env.PATH}`;let Ua=Ia(Ea(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=Sa.resolve(La,"@fnet/cli-project-node/dist/template/project"),a=Sa.resolve(Aa,e.name);$a.existsSync(a)||$a.mkdirSync(a),await qa({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=Oa.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Oa.which("git")&&(o=Oa.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(Oa.which("code")&&e.vscode&&(o=Oa.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=Sa.resolve(La,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=Sa.basename(a),e.update){if(await qa({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==Oa.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 Ba(e),a=new Fa(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 Ba({...e,mode:"all"}),a=new Fa(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 Ba({...e,mode:"file"}),a=new Fa(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function za(e,{name:t,bin:a,preArgs:o=[]}){return e.command(`${t||a} [commands..]`,`${a} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ba(e),{projectDir:r}=t,n=process.argv.slice(3);Pa(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 Ba(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Sa.resolve(La,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Sa.resolve(La,"./@fnet/cli-project-common/dist/template/default"),projectDir:Sa.resolve(Aa,`./.output/${e.id}`),coreDir:Sa.resolve(La,"./@fnet/cli-project-node/dist/template/core")};{const t=await async function(){const e=Sa.resolve(Aa,"node.yaml");if(!$a.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=$a.readFileSync(e,"utf8"),{parsed:a}=await Ca({content:t}),o=Sa.dirname(e),r={libraryAtom:{doc:{...a},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},n=Sa.resolve(o,"node.devops.yaml");if($a.existsSync(n)){const e=$a.readFileSync(n,"utf8"),t=Ta.parse(e);r.devops={filePath:n,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{$a.writeFileSync(r.devops.filePath,Ta.stringify(r.devops.doc))}}}const i=Sa.resolve(o,"readme.md");if($a.existsSync(i)){const e=$a.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:Sa.resolve(La,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Sa.resolve(La,"./@fnet/cli-project-common/dist/template/default"),coreDir:Sa.resolve(La,"./@fnet/cli-project-node/dist/template/core"),projectDir:Sa.resolve(t.projectDir,"./.workspace"),projectSrcDir:Sa.resolve(t.projectDir,"./src"),project:t}}}Ua=Ua.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Ba(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 Ra({schema:n}),s=Sa.resolve(o,".fnet");$a.existsSync(s)||$a.mkdirSync(s);const c=Sa.resolve(s,`${e.name}.fnet`);$a.writeFileSync(c,Ta.stringify(i))}catch(e){console.error(e.message),process.exit(1)}})),Ua=za(Ua,{bin:"npm"}),Ua=za(Ua,{bin:"node"}),Ua=za(Ua,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Ua=za(Ua,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Ua=za(Ua,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Ua=za(Ua,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Ua=za(Ua,{bin:"npx"}),Ua=za(Ua,{bin:"cdk"}),Ua=za(Ua,{bin:"aws"}),Ua=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 Ba(e),{projectDir:o}=t,r=e.config,n=await Ma({name:r,dir:o,transferEnv:!1,optional:!0}),i=n?.data?.env||void 0,s=e.command,c=process.argv.slice(5);Pa(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)}}))}(Ua,{name:"with"}),Ua.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("@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=b.default,J=_;const W=v,K=n,G=a,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=$;const et=T;const tt=O,at=C,ot=v,rt=A,nt=m;const it=M,st=C,ct=v,lt=A,pt=m;const dt=d,mt=m,ut=A,ft=D,gt=t,yt=b.default;const wt=A,ht=t,bt=b.default;const _t=A,vt=t,jt=b.default,xt=n,kt=D,Dt=R;const At=A,Pt=t,St=b.default,It=n,Et=D,$t=R;const Tt=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)},Ot=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}))},Ct=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},Mt=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}},Rt=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})},qt=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},Ft=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},Lt=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={src:i,dest:i,atom:e,params:r.params};await Ve(s),o.isDirty=!0},Nt=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 et(i),o.isDirty=!0},Ut=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as nextjs package."});t.params=ot({name:"nextjs-app",version:"0.1.0"},t.params);const n=rt.inc(t.params.version,"patch");t.params.version=n;const i=at(t);i.params.dependencies=at(r);const s={atom:e,target:i.params,projectDir:o,renderDir:nt.resolve(o,"nextjs")};return{deployer:await tt(s)}},zt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as docker package."});t.params=ct({},t.params);const n=lt.inc(t.params.version,"patch");t.params.version=n;const i=st(t);i.params.dependencies=st(r);const s={atom:e,target:i.params,projectDir:o,renderDir:pt.resolve(o,"docker")};return{deployer:await it(s)}},Bt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:r})=>{await e({message:"Deploying it as fnet package."});const n=t.projectDir,i=mt.resolve(n,"package.json"),s=dt.readFileSync(i),c=JSON.parse(s);c.name=o.params.name,c.version=ut.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,dt.writeFileSync(i,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await gt({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 yt({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='${mt.resolve(mt.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 ft({cmd:y}),dt.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 yt({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.")},Jt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet form."});const r=wt.inc(o.params.version,"patch"),{file:n,data:i}=await ht({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 bt({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);a.isDirty=!0,o.params.version=r;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await bt({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.")},Wt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet flow."});const r=_t.inc(o.params.version,"patch"),{file:n,data:i}=await vt({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 jt({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 jt({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 kt({cmd:f});if(0!==g.code)throw new Error(g.stderr);const y=JSON.parse(g.stdout).path;let w=new Dt;w.append("file",xt.createReadStream(y));const h=await jt.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.")},Kt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet node."});const r=At.inc(o.params.version,"patch"),{file:n,data:i}=await Pt({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 St({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);a.isDirty=!0,o.params.version=r;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await St({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet 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 Et({cmd:f});if(0!==g.code)throw new Error(g.stderr);const y=JSON.parse(g.stdout).path;let w=new $t;w.append("file",It.createReadStream(y));const h=await St.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 Gt=d,Ht=m,Xt=u,Yt=s,Zt=f,Qt=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:Vt}=w,ea=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)}))}))}},ta=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const a=e.doc.features;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";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},aa=async({atom:e,packageDependencies:t,packageDevDependencies:a})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),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.19"}),!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),a.push({package:"@babel/core",version:"^7.23"}),a.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),a.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),a.push({package:"@rollup/plugin-replace",version:"^5.0"}),a.push({package:"rollup",version:"^4.9"}),a.push({package:"rollup-plugin-delete",version:"^2.0"}),a.push({package:"rollup-plugin-dts",version:"^6.0"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),a.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6.0"}),a.push({package:"@babel/preset-env",version:"7.23"}),a.push({package:"@babel/preset-react",version:"7.23"})),e.doc.features.browsersync_enabled&&a.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&a.push({package:"@rollup/plugin-json",version:"^6.0"}),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.1"}),e.doc.features.image_enabled&&a.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.analyzer_enabled&&a.push({package:"rollup-plugin-analyzer",version:"^3.3"}),e.doc.features.visualizer_enabled&&a.push({package:"rollup-plugin-visualizer",version:"^5.9"}),e.doc.features.string_enabled&&a.push({package:"rollup-plugin-string",version:"^3.0"}),e.doc.features.css_enabled){a.push({package:"rollup-plugin-postcss",version:"4.0"}),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.1"});break;case"postcss-url":a.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":a.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":a.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":a.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&a.push({package:"rollup-plugin-copy",version:"^3.5"})},oa=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})},ra=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")},na=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})},ia=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,p=pe.compile(ce.readFileSync(le.resolve(l,"rollup.config.js.njk"),"utf8"),pe.configure(l)).render(r),d=a.projectDir,m=le.resolve(d,"rollup.config.js");ce.writeFileSync(m,p,"utf8")},sa=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")},ca=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")},la=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")},pa=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")}},da=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,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},ma=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Creating .d.ts"});if(0!==Pe.exec("tsc",{cwd:a}).code)throw new Error("Couldnt create .d.ts files.")},ua=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.")},fa=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.")},ga=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:r,setInProgress:n}=e;if(!0===r.enabled)if("lib"===r.name)await Rt({...e});else if("red"===r.name)await Mt({...e});else if("npm"===r.name)await Ct({...e});else if("gcs"===r.name)await Ot({...e});else if("gitlab"===r.name)await Tt({...e});else if("macos-app"===r.name)await Ft({...e});else if("ios-app"===r.name)await qt({...e});else if("electron"===r.name)await Lt({...e});else if("webos"===r.name)await Nt({...e});else if("fnet-package"===r.name)await Bt({...e});else if("fnet-form"===r.name)await Jt({...e});else if("fnet-node"===r.name)await Kt({...e});else if("fnet-flow"===r.name)await Wt({...e});else{let e;if("nextjs"===r.name?e=Ut:"docker"===r.name&&(e=zt),!e)return;await e({atom:t,target:r,onProgress:n,projectDir:o.projectDir,dependencies:a})}},{Atom:ya}=h,wa=q,ha=t,ba=j,_a=F,va=L;var ja=class{#e;#t;#a;#o;#r;#n;#i;#s;#c;#l;#p;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new ea,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:ya,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 Qt(),this.#c=this.#t.buildId||Vt(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 ha({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 ta(this.#y),await aa(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 ya.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"];Gt.existsSync(e)&&Gt.readdirSync(e).forEach((o=>{a.includes(o)||(t=Yt.rm("-rf",Ht.join(e,o)))}));let o=e;if(!Gt.existsSync(o)&&(t=Yt.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=Ht.join(e,"src"),!Gt.existsSync(o)&&(t=Yt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=Ht.join(e,"src","default"),!Gt.existsSync()&&(t=Yt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Zt.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=wa({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 ya.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await ya.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await ya.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=Ht.resolve(this.#t.projectSrcDir,"index.js"),a=await ba({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 _a({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=Ht.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=Ht.relative(Ht.join(this.#t.projectDir,"src","default"),e);if(!Gt.existsSync(e)){Gt.mkdirSync(Ht.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Gt.writeFileSync(e,t,"utf8")}a.relativePath=t.split(Ht.sep).join("/"),this.#a.typesDir=`./types/${Ht.basename(o)}/src`}else{const e=Ht.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Gt.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=Zt.compile(Gt.readFileSync(Ht.resolve(t,Ht.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,r=Ht.resolve(o,Ht.join("src","default","index.js"));Gt.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:Xt.dump(o)},n=this.#t.templateDir,i=Zt.compile(Gt.readFileSync(Ht.resolve(n,`${e}.njk`),"utf8"),this.#o).render(r),s=this.#t.projectDir,c=Ht.resolve(s,`${e}`);Gt.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 ya.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 ya.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 ga({...this.#y,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await ya.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await ya.update(o,{id:o.id})):o=await ya.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(va.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 pa(this.#y),await la(this.#y),await ca(this.#y),await sa(this.#y),await na(this.#y),await oa(this.#y),await ia(this.#y),await ra(this.#y),await da(this.#y),await ma(this.#y),this.#f&&(await ua(this.#y),await fa(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 xa=d,ka=m;var Da=function({baseDir:e=__dirname}){let t=e;for(;t!==ka.parse(t).root;){const e=ka.join(t,"node_modules");if(xa.existsSync(e))return e;t=ka.dirname(t)}return null};const Aa=process.cwd(),{spawn:Pa}=e;t({name:["redis"],dir:Aa,optional:!0});const Sa=a,Ia=o,{hideBin:Ea}=r,$a=n,Ta=i,Oa=s,Ca=c,Ma=t,Ra=l,qa=p,Fa=ja,La=Da({baseDir:__dirname}),Na="win32"===process.platform?";":":";process.env.PATH=`${Sa.join(La,"/.bin")}${Na}${process.env.PATH}`;let Ua=Ia(Ea(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=Sa.resolve(La,"@fnet/cli-project-node/dist/template/project"),a=Sa.resolve(Aa,e.name);$a.existsSync(a)||$a.mkdirSync(a),await qa({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=Oa.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Oa.which("git")&&(o=Oa.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(Oa.which("code")&&e.vscode&&(o=Oa.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=Sa.resolve(La,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=Sa.basename(a),e.update){if(await qa({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==Oa.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 Ba(e),a=new Fa(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 Ba({...e,mode:"all"}),a=new Fa(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 Ba({...e,mode:"file"}),a=new Fa(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function za(e,{name:t,bin:a,preArgs:o=[]}){return e.command(`${t||a} [commands..]`,`${a} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ba(e),{projectDir:r}=t,n=process.argv.slice(3);Pa(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 Ba(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Sa.resolve(La,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Sa.resolve(La,"./@fnet/cli-project-common/dist/template/default"),projectDir:Sa.resolve(Aa,`./.output/${e.id}`),coreDir:Sa.resolve(La,"./@fnet/cli-project-node/dist/template/core")};{const t=await async function(){const e=Sa.resolve(Aa,"node.yaml");if(!$a.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=$a.readFileSync(e,"utf8"),{parsed:a}=await Ca({content:t}),o=Sa.dirname(e),r={libraryAtom:{doc:{...a},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},n=Sa.resolve(o,"node.devops.yaml");if($a.existsSync(n)){const e=$a.readFileSync(n,"utf8"),t=Ta.parse(e);r.devops={filePath:n,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{$a.writeFileSync(r.devops.filePath,Ta.stringify(r.devops.doc))}}}const i=Sa.resolve(o,"readme.md");if($a.existsSync(i)){const e=$a.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:Sa.resolve(La,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Sa.resolve(La,"./@fnet/cli-project-common/dist/template/default"),coreDir:Sa.resolve(La,"./@fnet/cli-project-node/dist/template/core"),projectDir:Sa.resolve(t.projectDir,"./.workspace"),projectSrcDir:Sa.resolve(t.projectDir,"./src"),project:t}}}Ua=Ua.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Ba(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 Ra({schema:n}),s=Sa.resolve(o,".fnet");$a.existsSync(s)||$a.mkdirSync(s);const c=Sa.resolve(s,`${e.name}.fnet`);$a.writeFileSync(c,Ta.stringify(i))}catch(e){console.error(e.message),process.exit(1)}})),Ua=za(Ua,{bin:"npm"}),Ua=za(Ua,{bin:"node"}),Ua=za(Ua,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Ua=za(Ua,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Ua=za(Ua,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Ua=za(Ua,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Ua=za(Ua,{bin:"npx"}),Ua=za(Ua,{bin:"cdk"}),Ua=za(Ua,{bin:"aws"}),Ua=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 Ba(e),{projectDir:o}=t,r=e.config,n=await Ma({name:r,dir:o,transferEnv:!1,optional:!0}),i=n?.data?.env||void 0,s=e.command,c=process.argv.slice(5);Pa(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)}}))}(Ua,{name:"with"}),Ua.demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
|
package/dist/builder/wf-cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("child_process"),t=require("@fnet/config"),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"),x=require("axios"),_=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=x.default,H=_;const V=k,X=a,Y=o,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,xe=f,_e=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;const it=C;const at=N,rt=h,st=k,ct=S,lt=f;const pt=M,dt=h,ft=k,mt=S,ut=f;const ht=d,wt=f,yt=S,gt=A,bt=t,vt=x.default;const xt=S,_t=t,kt=x.default;const jt=S,Dt=t,Pt=x.default,At=a,St=A,Tt=F;const Et=S,It=t,$t=x.default,Ot=a,Ct=A,Nt=F;const Mt=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)},Ft=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}))},Rt=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},qt=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}},Ut=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})},Bt=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},Lt=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},zt=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={src:r,dest:r,atom:e,params:i.params};await nt(s),n.isDirty=!0},Jt=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 it(r),n.isDirty=!0},Wt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as nextjs package."});t.params=st({name:"nextjs-app",version:"0.1.0"},t.params);const a=ct.inc(t.params.version,"patch");t.params.version=a;const r=rt(t);r.params.dependencies=rt(i);const s={atom:e,target:r.params,projectDir:n,renderDir:lt.resolve(n,"nextjs")};return{deployer:await at(s)}},Kt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as docker package."});t.params=ft({},t.params);const a=mt.inc(t.params.version,"patch");t.params.version=a;const r=dt(t);r.params.dependencies=dt(i);const s={atom:e,target:r.params,projectDir:n,renderDir:ut.resolve(n,"docker")};return{deployer:await pt(s)}},Gt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as fnet package."});const a=t.projectDir,r=wt.resolve(a,"package.json"),s=ht.readFileSync(r),c=JSON.parse(s);c.name=n.params.name,c.version=yt.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,ht.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await bt({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 vt({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='${wt.resolve(wt.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 gt({cmd:w}),ht.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 vt({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.")},Ht=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet form."});const i=xt.inc(n.params.version,"patch"),{file:a,data:r}=await _t({name:n.config||"fnet-form",dir:t.projectDir});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const s=`${r.env.ATOM_API_URL}/v1/auth/token`,c=r.env.ATOM_API_USERNAME,l=r.env.ATOM_API_PASSWORD;let p=await 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}`);o.isDirty=!0,n.params.version=i;const f=`${r.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await kt({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.")},Vt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet flow."});const i=jt.inc(n.params.version,"patch"),{file:a,data:r}=await Dt({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 Pt({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 Pt({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 St({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Tt;y.append("file",At.createReadStream(w));const g=await Pt.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.")},Xt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet node."});const i=Et.inc(n.params.version,"patch"),{file:a,data:r}=await It({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 $t({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);o.isDirty=!0,n.params.version=i;const f=`${r.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await $t({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 Ct({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Nt;y.append("file",Ot.createReadStream(w));const g=await $t.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 Yt=h;async function Zt({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Yt(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||Yt(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await t({node:e}),o({node:e})}var Qt={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=Zt},resolve:Zt};const eo=U,to=Qt;var oo={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>eo({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=>eo({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 to.init(e)}};const no=h;async function io({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||no(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||no(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var ao={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=io},resolve:io};const ro=h;async function so({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=ro(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 co={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=so},resolve:so};const lo=h,po=L,fo=z;async function mo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||lo(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await t({node:e}),o({node:e})}var uo={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]=[po(e.definition.for,t),fo(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=mo},resolve:mo};var ho={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 wo=h;async function yo({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||wo(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var go={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=yo},resolve:yo};const bo=h;async function vo({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||bo(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var xo={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=vo},resolve:vo};const _o=h;async function ko({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||_o(e.definition);const i=e.context.transform;i.args&&(i.args=await n(i.args)),i.result&&(i.result=await n(i.result));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.call)),await t({node:e}),o({node:e})}var jo={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=ko},resolve:ko};const Do=jo;var Po={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 Do.init(e)}};const Ao=jo;var So={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 Ao.init(e)}};const To=jo;var Eo={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 To.init(e)}};async function Io({node:e}){e.context.next=e.childs[0]}var $o={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=Io},resolve:Io};const Oo=h;async function Co({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Oo(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 No={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=Co},resolve:Co};const Mo=h;async function Fo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||Mo(e.definition),await t({node:e})}var Ro={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Fo},resolve:Fo};const qo=h;async function Uo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||qo(e.definition);const i=e.context.transform;i.next=await n(i.next),await t({node:e}),o({node:e})}var Bo={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Uo},resolve:Uo};const Lo=jo;var zo={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,o="prompt",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/prompt",n.args="string"===i?{...n.args,message:n[o]}:n[o],delete n[o],await Lo.init(e)}};const Jo=jo;var Wo={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 Jo.init(e)}};const Ko=jo;var Go={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 Ko.init(e)}};const Ho=d,Vo=f,Xo=m,Yo=s,Zo=u,Qo=h,en=w,tn=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:on}=b,nn=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)}))}))}},an=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const o=e.doc.features;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";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;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.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},rn=async({atom:e,packageDependencies:t,packageDevDependencies:o})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),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(!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),o.push({package:"@babel/core",version:"^7.23"}),o.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),o.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),o.push({package:"@rollup/plugin-replace",version:"^5.0"}),o.push({package:"rollup",version:"^4.9"}),o.push({package:"rollup-plugin-delete",version:"^2.0"}),o.push({package:"rollup-plugin-dts",version:"^6.0"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),o.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6.0"}),o.push({package:"@babel/preset-env",version:"7.23"}),o.push({package:"@babel/preset-react",version:"7.23"})),e.doc.features.browsersync_enabled&&o.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&o.push({package:"@rollup/plugin-json",version:"^6.0"}),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.1"}),e.doc.features.image_enabled&&o.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.analyzer_enabled&&o.push({package:"rollup-plugin-analyzer",version:"^3.3"}),e.doc.features.visualizer_enabled&&o.push({package:"rollup-plugin-visualizer",version:"^5.9"}),e.doc.features.string_enabled&&o.push({package:"rollup-plugin-string",version:"^3.0"}),e.doc.features.css_enabled){o.push({package:"rollup-plugin-postcss",version:"4.0"}),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.1"});break;case"postcss-url":o.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":o.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":o.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":o.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&o.push({package:"rollup-plugin-copy",version:"^3.5"})},sn=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})},cn=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")},ln=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})},pn=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,p=ue.compile(fe.readFileSync(me.resolve(l,"rollup.config.js.njk"),"utf8"),ue.configure(l)).render(i),d=o.projectDir,f=me.resolve(d,"rollup.config.js");fe.writeFileSync(f,p,"utf8")},dn=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")},fn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},a=o.templateCommonDir,r=_e.compile(ve.readFileSync(xe.resolve(a,".gitignore.njk"),"utf8"),_e.configure(a)).render(i),s=o.projectDir,c=xe.resolve(s,".gitignore");ve.writeFileSync(c,r,"utf8")},mn=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")},un=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")}},hn=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,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o}).code)throw new Error("Couldnt format files.")},wn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Creating .d.ts"});if(0!==Ie.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},yn=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.")},gn=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.")},bn=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:a}=e;if(!0===i.enabled)if("lib"===i.name)await Ut({...e});else if("red"===i.name)await qt({...e});else if("npm"===i.name)await Rt({...e});else if("gcs"===i.name)await Ft({...e});else if("gitlab"===i.name)await Mt({...e});else if("macos-app"===i.name)await Lt({...e});else if("ios-app"===i.name)await Bt({...e});else if("electron"===i.name)await zt({...e});else if("webos"===i.name)await Jt({...e});else if("fnet-package"===i.name)await Gt({...e});else if("fnet-form"===i.name)await Ht({...e});else if("fnet-node"===i.name)await Xt({...e});else if("fnet-flow"===i.name)await Vt({...e});else{let e;if("nextjs"===i.name?e=Wt:"docker"===i.name&&(e=Kt),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:n.projectDir,dependencies:o})}},{Atom:vn}=v,xn=R,_n=D,kn=q,jn=t,Dn=j,Pn=U,An=c,Sn=B,Tn=oo,En=ao,In=co,$n=uo,On=Qt,Cn=ho,Nn=go,Mn=xo,Fn=jo,Rn=Po,qn=So,Un=Eo,Bn=$o,Ln=No,zn=Ro,Jn=Bo,Wn=zo,Kn=Wo,Gn=Go,Hn=({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 Vn=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 nn,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:vn,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#v={initNode:this.initNode.bind(this),cloneDeep:Qo,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Hn,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 tn(),this.#p=this.#t.buildId||on(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 jn({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await an(this.#b),await rn(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 vn.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await An({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"})}#x(e){Ho.statSync(e).isDirectory()?(Ho.readdirSync(e).forEach((t=>{const o=Vo.join(e,t);this.#x(o)})),Ho.rmdirSync(e)):Ho.unlinkSync(e)}#_(e,t){const o=Ho.existsSync(e),n=o&&Ho.statSync(e);o&&n.isDirectory()?(Ho.mkdirSync(t,{recursive:!0}),Ho.readdirSync(e).forEach((o=>{this.#_(Vo.join(e,o),Vo.join(t,o))}))):Ho.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,o=["node_modules"];if(Ho.existsSync(e)){const t=Ho.readdirSync(e);for(const n of t)if(!o.includes(n)){const t=Vo.join(e,n);this.#x(t)}}Ho.existsSync(e)||Ho.mkdirSync(e,{recursive:!0});const n=Vo.join(e,"src");Ho.existsSync(n)||Ho.mkdirSync(n,{recursive:!0});const i=Vo.join(n,"core");this.#_(t,i);const a=Vo.join(n,"default","blocks");Ho.existsSync(a)||Ho.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=Zo.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 En.hits(t))await En.init(t);else if(await $n.hits(t))await $n.init(t);else if(await On.hits(t))await On.init(t);else if(await Tn.hits(t))await Tn.init(t);else if(await Cn.hits(t))await Cn.init(t);else if(await In.hits(t))await In.init(t);else if(await Nn.hits(t))await Nn.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 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 Kn.hits(t))await Kn.init(t);else if(await Gn.hits(t))await Gn.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 Wn.hits(t))await Wn.init(t);else if(await Bn.hits(t))await Bn.init(t);else{if(!await Jn.hits(t))throw new Error("Undefined step type.");await Jn.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=Vo.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=on(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=xn({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 vn.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await vn.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await vn.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=Vo.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await Dn({file:e,recursive:!0}),i=!0===this.#o.doc.features.all_parsed_imports?n.all:n.required;for await(const e of i){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=(await _n({name:e.package,groupBy:{minor:!0}}))[0][0];o.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:o},protocol:t.protocol}}if("npm:"===t.protocol){const e=(await _n({name:t.pathname,groupBy:{minor:!0}}))[0][0];return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:[{package:t.pathname,version:`^${e}`,type:"npm"}]},protocol:t.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=Qo(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=Vo.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=Vo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!Ho.existsSync(e)){Ho.mkdirSync(Vo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Ho.writeFileSync(e,t,"utf8")}o.relativePath=t.split(Vo.sep).join("/"),this.#o.typesDir=`./types/${Vo.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;Ho.writeFileSync(Vo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=Zo.compile(Ho.readFileSync(Vo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=Vo.resolve(n,"src/default/index.js");Ho.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=Zo.compile(Ho.readFileSync(Vo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=Vo.resolve(n,`src/default/${e.codeKey}.js`);Ho.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=Zo.compile(Ho.readFileSync(Vo.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=Vo.resolve(t,`src/default/blocks/${o}`);Ho.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(en(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 Pn({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:Xo.dump(n)},a=this.#t.templateDir,r=Zo.compile(Ho.readFileSync(Vo.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),s=this.#t.projectDir,c=Vo.resolve(s,`${e}`);Ho.writeFileSync(c,r,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:Xo.dump(this.#n)},n=this.#t.templateDir,i=Zo.compile(Ho.readFileSync(Vo.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),a=this.#t.projectDir,r=Vo.resolve(a,`${e}`);Ho.writeFileSync(r,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=Yo.exec("prettier --write .",{cwd:Vo.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 vn.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 vn.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 bn({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await vn.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await vn.update(n,{id:n.id})):n=await vn.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(Sn.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 kn({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;Ho.writeFileSync(Vo.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 un(this.#b),await mn(this.#b),await fn(this.#b),await dn(this.#b),await ln(this.#b),await sn(this.#b),await pn(this.#b),await cn(this.#b),await hn(this.#b),await wn(this.#b),this.#w&&(await yn(this.#b),await gn(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 kn({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 Xn=d,Yn=f;var Zn=function({baseDir:e=__dirname}){let t=e;for(;t!==Yn.parse(t).root;){const e=Yn.join(t,"node_modules");if(Xn.existsSync(e))return e;t=Yn.dirname(t)}return null};const Qn=process.cwd(),{spawn:ei}=e;t({name:["redis"],dir:Qn,optional:!0});const ti=o,oi=n,{hideBin:ni}=i,ii=a,ai=r,ri=s,si=c,ci=t,li=l,pi=p,di=Vn,fi=Zn({baseDir:__dirname}),mi="win32"===process.platform?";":":";process.env.PATH=`${ti.join(fi,"/.bin")}${mi}${process.env.PATH}`;let ui=oi(ni(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=ti.resolve(fi,"./@fnet/cli-project-flow/dist/template/project"),o=ti.resolve(Qn,e.name);ii.existsSync(o)||ii.mkdirSync(o),await pi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0});let n=ri.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(ri.which("git")&&(n=ri.exec("git init",{cwd:o}),0!==n.code))throw new Error("Failed to initialize git.");if(ri.which("code")&&e.vscode&&(n=ri.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=ti.resolve(fi,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd();if(e.name=ti.basename(o),e.update){if(await pi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0}),0!==ri.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 flow net 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 wi(e),o=new di(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 flow net project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await wi({...e,mode:"all"}),o=new di(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 wi({...e,mode:"file"}),o=new di(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 hi(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 wi(e),{projectDir:i}=t,a=process.argv.slice(3);ei(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 wi(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:ti.resolve(Qn,`./.output/${e.id}`),templateDir:ti.resolve(fi,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:ti.resolve(fi,"./@fnet/cli-project-common/dist/template/default"),coreDir:ti.resolve(fi,"./@fnet/cli-project-flow/dist/template/core")}}{const t=await async function(e){const t=ti.resolve(Qn,"flow.yaml");if(!ii.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const o=ii.readFileSync(t,"utf8"),{parsed:n}=await si({content:o}),i=ti.dirname(t),a=n.main||"flow.main.yaml";let r=ti.resolve(i,a);if(!ii.existsSync(r)&&(r=ti.resolve(i,a+".yaml"),!ii.existsSync(r)))throw new Error(`${a} file not found in ${r}.`);const s=ii.readFileSync(r,"utf8"),{parsed:c}=await si({content:s}),l={workflowAtom:{doc:{...n,"content-type":"yaml",content:s}},projectDir:i,projectFilePath:t,projectFileContent:o,projectFileParsed:n,projectMainFilePath:r,projectMainFileContent:s,projectMainFileParsed:c},p=ti.resolve(i,"flow.devops.yaml");if(ii.existsSync(p)){const e=ii.readFileSync(p,"utf8"),t=ai.parse(e);l.devops={filePath:p,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{ii.writeFileSync(l.devops.filePath,ai.stringify(l.devops.doc))}}}const d=ti.resolve(i,"readme.md");if(ii.existsSync(d)){const e=ii.readFileSync(d,"utf8");l.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:ti.resolve(fi,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:ti.resolve(fi,"./@fnet/cli-project-common/dist/template/default"),coreDir:ti.resolve(fi,"./@fnet/cli-project-flow/dist/template/core"),projectDir:ti.resolve(t.projectDir,"./.workspace"),projectSrcDir:ti.resolve(t.projectDir,"./src"),project:t}}}ui=ui.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await wi(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 li({schema:a}),s=ti.resolve(n,".fnet");ii.existsSync(s)||ii.mkdirSync(s);const c=ti.resolve(s,`${e.name}.fnet`);ii.writeFileSync(c,ai.stringify(r))}catch(e){console.error(e.message),process.exit(1)}})),ui=hi(ui,{bin:"npm"}),ui=hi(ui,{bin:"node"}),ui=hi(ui,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),ui=hi(ui,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),ui=hi(ui,{name:"app",bin:"npm",preArgs:["run","app","--"]}),ui=hi(ui,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),ui=hi(ui,{bin:"npx"}),ui=hi(ui,{bin:"cdk"}),ui=hi(ui,{bin:"aws"}),ui=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 wi(e),{projectDir:n}=t,i=e.config,a=await ci({name:i,dir:n,transferEnv:!1,optional:!0}),r=a?.data?.env||void 0,s=e.command,c=process.argv.slice(5);ei(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)}}))}(ui,{name:"with"}),ui.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"),x=require("axios"),_=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=x.default,H=_;const V=k,X=a,Y=o,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,xe=f,_e=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;const it=C;const at=N,rt=h,st=k,ct=S,lt=f;const pt=M,dt=h,ft=k,mt=S,ut=f;const ht=d,wt=f,yt=S,gt=A,bt=t,vt=x.default;const xt=S,_t=t,kt=x.default;const jt=S,Dt=t,Pt=x.default,At=a,St=A,Tt=F;const Et=S,It=t,$t=x.default,Ot=a,Ct=A,Nt=F;const Mt=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)},Ft=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}))},Rt=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},qt=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}},Ut=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})},Bt=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},Lt=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},zt=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={src:r,dest:r,atom:e,params:i.params};await nt(s),n.isDirty=!0},Jt=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 it(r),n.isDirty=!0},Wt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as nextjs package."});t.params=st({name:"nextjs-app",version:"0.1.0"},t.params);const a=ct.inc(t.params.version,"patch");t.params.version=a;const r=rt(t);r.params.dependencies=rt(i);const s={atom:e,target:r.params,projectDir:n,renderDir:lt.resolve(n,"nextjs")};return{deployer:await at(s)}},Kt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as docker package."});t.params=ft({},t.params);const a=mt.inc(t.params.version,"patch");t.params.version=a;const r=dt(t);r.params.dependencies=dt(i);const s={atom:e,target:r.params,projectDir:n,renderDir:ut.resolve(n,"docker")};return{deployer:await pt(s)}},Gt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as fnet package."});const a=t.projectDir,r=wt.resolve(a,"package.json"),s=ht.readFileSync(r),c=JSON.parse(s);c.name=n.params.name,c.version=yt.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,ht.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await bt({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 vt({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='${wt.resolve(wt.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 gt({cmd:w}),ht.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 vt({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.")},Ht=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet form."});const i=xt.inc(n.params.version,"patch"),{file:a,data:r}=await _t({name:n.config||"fnet-form",dir:t.projectDir});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const s=`${r.env.ATOM_API_URL}/v1/auth/token`,c=r.env.ATOM_API_USERNAME,l=r.env.ATOM_API_PASSWORD;let p=await 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}`);o.isDirty=!0,n.params.version=i;const f=`${r.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await kt({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.")},Vt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet flow."});const i=jt.inc(n.params.version,"patch"),{file:a,data:r}=await Dt({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 Pt({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 Pt({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 St({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Tt;y.append("file",At.createReadStream(w));const g=await Pt.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.")},Xt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet node."});const i=Et.inc(n.params.version,"patch"),{file:a,data:r}=await It({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 $t({method:"POST",url:s,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${s}`);o.isDirty=!0,n.params.version=i;const f=`${r.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await $t({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 Ct({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Nt;y.append("file",Ot.createReadStream(w));const g=await $t.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 Yt=h;async function Zt({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Yt(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||Yt(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await t({node:e}),o({node:e})}var Qt={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=Zt},resolve:Zt};const eo=U,to=Qt;var oo={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>eo({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=>eo({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 to.init(e)}};const no=h;async function io({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||no(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||no(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var ao={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=io},resolve:io};const ro=h;async function so({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=ro(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 co={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=so},resolve:so};const lo=h,po=L,fo=z;async function mo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||lo(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await t({node:e}),o({node:e})}var uo={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]=[po(e.definition.for,t),fo(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=mo},resolve:mo};var ho={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 wo=h;async function yo({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||wo(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var go={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=yo},resolve:yo};const bo=h;async function vo({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||bo(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var xo={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=vo},resolve:vo};const _o=h;async function ko({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||_o(e.definition);const i=e.context.transform;i.args&&(i.args=await n(i.args)),i.result&&(i.result=await n(i.result));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.call)),await t({node:e}),o({node:e})}var jo={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=ko},resolve:ko};const Do=jo;var Po={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 Do.init(e)}};const Ao=jo;var So={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 Ao.init(e)}};const To=jo;var Eo={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 To.init(e)}};async function Io({node:e}){e.context.next=e.childs[0]}var $o={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=Io},resolve:Io};const Oo=h;async function Co({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Oo(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 No={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=Co},resolve:Co};const Mo=h;async function Fo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||Mo(e.definition),await t({node:e})}var Ro={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Fo},resolve:Fo};const qo=h;async function Uo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||qo(e.definition);const i=e.context.transform;i.next=await n(i.next),await t({node:e}),o({node:e})}var Bo={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Uo},resolve:Uo};const Lo=jo;var zo={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,o="prompt",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/prompt",n.args="string"===i?{...n.args,message:n[o]}:n[o],delete n[o],await Lo.init(e)}};const Jo=jo;var Wo={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 Jo.init(e)}};const Ko=jo;var Go={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 Ko.init(e)}};const Ho=d,Vo=f,Xo=m,Yo=s,Zo=u,Qo=h,en=w,tn=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:on}=b,nn=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)}))}))}},an=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const o=e.doc.features;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";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},rn=async({atom:e,packageDependencies:t,packageDevDependencies:o})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),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.19"}),!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),o.push({package:"@babel/core",version:"^7.23"}),o.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),o.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),o.push({package:"@rollup/plugin-replace",version:"^5.0"}),o.push({package:"rollup",version:"^4.9"}),o.push({package:"rollup-plugin-delete",version:"^2.0"}),o.push({package:"rollup-plugin-dts",version:"^6.0"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),o.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6.0"}),o.push({package:"@babel/preset-env",version:"7.23"}),o.push({package:"@babel/preset-react",version:"7.23"})),e.doc.features.browsersync_enabled&&o.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&o.push({package:"@rollup/plugin-json",version:"^6.0"}),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.1"}),e.doc.features.image_enabled&&o.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.analyzer_enabled&&o.push({package:"rollup-plugin-analyzer",version:"^3.3"}),e.doc.features.visualizer_enabled&&o.push({package:"rollup-plugin-visualizer",version:"^5.9"}),e.doc.features.string_enabled&&o.push({package:"rollup-plugin-string",version:"^3.0"}),e.doc.features.css_enabled){o.push({package:"rollup-plugin-postcss",version:"4.0"}),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.1"});break;case"postcss-url":o.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":o.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":o.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":o.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&o.push({package:"rollup-plugin-copy",version:"^3.5"})},sn=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})},cn=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")},ln=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})},pn=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,p=ue.compile(fe.readFileSync(me.resolve(l,"rollup.config.js.njk"),"utf8"),ue.configure(l)).render(i),d=o.projectDir,f=me.resolve(d,"rollup.config.js");fe.writeFileSync(f,p,"utf8")},dn=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")},fn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},a=o.templateCommonDir,r=_e.compile(ve.readFileSync(xe.resolve(a,".gitignore.njk"),"utf8"),_e.configure(a)).render(i),s=o.projectDir,c=xe.resolve(s,".gitignore");ve.writeFileSync(c,r,"utf8")},mn=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")},un=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")}},hn=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,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o}).code)throw new Error("Couldnt format files.")},wn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Creating .d.ts"});if(0!==Ie.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},yn=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.")},gn=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.")},bn=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:a}=e;if(!0===i.enabled)if("lib"===i.name)await Ut({...e});else if("red"===i.name)await qt({...e});else if("npm"===i.name)await Rt({...e});else if("gcs"===i.name)await Ft({...e});else if("gitlab"===i.name)await Mt({...e});else if("macos-app"===i.name)await Lt({...e});else if("ios-app"===i.name)await Bt({...e});else if("electron"===i.name)await zt({...e});else if("webos"===i.name)await Jt({...e});else if("fnet-package"===i.name)await Gt({...e});else if("fnet-form"===i.name)await Ht({...e});else if("fnet-node"===i.name)await Xt({...e});else if("fnet-flow"===i.name)await Vt({...e});else{let e;if("nextjs"===i.name?e=Wt:"docker"===i.name&&(e=Kt),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:n.projectDir,dependencies:o})}},{Atom:vn}=v,xn=R,_n=D,kn=q,jn=t,Dn=j,Pn=U,An=c,Sn=B,Tn=oo,En=ao,In=co,$n=uo,On=Qt,Cn=ho,Nn=go,Mn=xo,Fn=jo,Rn=Po,qn=So,Un=Eo,Bn=$o,Ln=No,zn=Ro,Jn=Bo,Wn=zo,Kn=Wo,Gn=Go,Hn=({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 Vn=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 nn,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:vn,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#v={initNode:this.initNode.bind(this),cloneDeep:Qo,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Hn,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 tn(),this.#p=this.#t.buildId||on(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 jn({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await an(this.#b),await rn(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 vn.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await An({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"})}#x(e){Ho.statSync(e).isDirectory()?(Ho.readdirSync(e).forEach((t=>{const o=Vo.join(e,t);this.#x(o)})),Ho.rmdirSync(e)):Ho.unlinkSync(e)}#_(e,t){const o=Ho.existsSync(e),n=o&&Ho.statSync(e);o&&n.isDirectory()?(Ho.mkdirSync(t,{recursive:!0}),Ho.readdirSync(e).forEach((o=>{this.#_(Vo.join(e,o),Vo.join(t,o))}))):Ho.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,o=["node_modules"];if(Ho.existsSync(e)){const t=Ho.readdirSync(e);for(const n of t)if(!o.includes(n)){const t=Vo.join(e,n);this.#x(t)}}Ho.existsSync(e)||Ho.mkdirSync(e,{recursive:!0});const n=Vo.join(e,"src");Ho.existsSync(n)||Ho.mkdirSync(n,{recursive:!0});const i=Vo.join(n,"core");this.#_(t,i);const a=Vo.join(n,"default","blocks");Ho.existsSync(a)||Ho.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=Zo.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 En.hits(t))await En.init(t);else if(await $n.hits(t))await $n.init(t);else if(await On.hits(t))await On.init(t);else if(await Tn.hits(t))await Tn.init(t);else if(await Cn.hits(t))await Cn.init(t);else if(await In.hits(t))await In.init(t);else if(await Nn.hits(t))await Nn.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 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 Kn.hits(t))await Kn.init(t);else if(await Gn.hits(t))await Gn.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 Wn.hits(t))await Wn.init(t);else if(await Bn.hits(t))await Bn.init(t);else{if(!await Jn.hits(t))throw new Error("Undefined step type.");await Jn.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=Vo.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=on(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=xn({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 vn.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await vn.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await vn.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=Vo.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await Dn({file:e,recursive:!0}),i=!0===this.#o.doc.features.all_parsed_imports?n.all:n.required;for await(const e of i){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=(await _n({name:e.package,groupBy:{minor:!0}}))[0][0];o.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:o},protocol:t.protocol}}if("npm:"===t.protocol){const e=(await _n({name:t.pathname,groupBy:{minor:!0}}))[0][0];return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:[{package:t.pathname,version:`^${e}`,type:"npm"}]},protocol:t.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=Qo(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=Vo.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=Vo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!Ho.existsSync(e)){Ho.mkdirSync(Vo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Ho.writeFileSync(e,t,"utf8")}o.relativePath=t.split(Vo.sep).join("/"),this.#o.typesDir=`./types/${Vo.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;Ho.writeFileSync(Vo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=Zo.compile(Ho.readFileSync(Vo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=Vo.resolve(n,"src/default/index.js");Ho.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=Zo.compile(Ho.readFileSync(Vo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=Vo.resolve(n,`src/default/${e.codeKey}.js`);Ho.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=Zo.compile(Ho.readFileSync(Vo.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=Vo.resolve(t,`src/default/blocks/${o}`);Ho.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(en(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 Pn({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:Xo.dump(n)},a=this.#t.templateDir,r=Zo.compile(Ho.readFileSync(Vo.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),s=this.#t.projectDir,c=Vo.resolve(s,`${e}`);Ho.writeFileSync(c,r,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:Xo.dump(this.#n)},n=this.#t.templateDir,i=Zo.compile(Ho.readFileSync(Vo.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),a=this.#t.projectDir,r=Vo.resolve(a,`${e}`);Ho.writeFileSync(r,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=Yo.exec("prettier --write .",{cwd:Vo.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 vn.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 vn.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 bn({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await vn.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await vn.update(n,{id:n.id})):n=await vn.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(Sn.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 kn({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;Ho.writeFileSync(Vo.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 un(this.#b),await mn(this.#b),await fn(this.#b),await dn(this.#b),await ln(this.#b),await sn(this.#b),await pn(this.#b),await cn(this.#b),await hn(this.#b),await wn(this.#b),this.#w&&(await yn(this.#b),await gn(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 kn({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 Xn=d,Yn=f;var Zn=function({baseDir:e=__dirname}){let t=e;for(;t!==Yn.parse(t).root;){const e=Yn.join(t,"node_modules");if(Xn.existsSync(e))return e;t=Yn.dirname(t)}return null};const Qn=process.cwd(),{spawn:ei}=e;t({name:["redis"],dir:Qn,optional:!0});const ti=o,oi=n,{hideBin:ni}=i,ii=a,ai=r,ri=s,si=c,ci=t,li=l,pi=p,di=Vn,fi=Zn({baseDir:__dirname}),mi="win32"===process.platform?";":":";process.env.PATH=`${ti.join(fi,"/.bin")}${mi}${process.env.PATH}`;let ui=oi(ni(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=ti.resolve(fi,"./@fnet/cli-project-flow/dist/template/project"),o=ti.resolve(Qn,e.name);ii.existsSync(o)||ii.mkdirSync(o),await pi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0});let n=ri.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(ri.which("git")&&(n=ri.exec("git init",{cwd:o}),0!==n.code))throw new Error("Failed to initialize git.");if(ri.which("code")&&e.vscode&&(n=ri.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=ti.resolve(fi,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd();if(e.name=ti.basename(o),e.update){if(await pi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0}),0!==ri.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 flow net 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 wi(e),o=new di(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 flow net project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await wi({...e,mode:"all"}),o=new di(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 wi({...e,mode:"file"}),o=new di(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 hi(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 wi(e),{projectDir:i}=t,a=process.argv.slice(3);ei(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 wi(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:ti.resolve(Qn,`./.output/${e.id}`),templateDir:ti.resolve(fi,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:ti.resolve(fi,"./@fnet/cli-project-common/dist/template/default"),coreDir:ti.resolve(fi,"./@fnet/cli-project-flow/dist/template/core")}}{const t=await async function(e){const t=ti.resolve(Qn,"flow.yaml");if(!ii.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const o=ii.readFileSync(t,"utf8"),{parsed:n}=await si({content:o}),i=ti.dirname(t),a=n.main||"flow.main.yaml";let r=ti.resolve(i,a);if(!ii.existsSync(r)&&(r=ti.resolve(i,a+".yaml"),!ii.existsSync(r)))throw new Error(`${a} file not found in ${r}.`);const s=ii.readFileSync(r,"utf8"),{parsed:c}=await si({content:s}),l={workflowAtom:{doc:{...n,"content-type":"yaml",content:s}},projectDir:i,projectFilePath:t,projectFileContent:o,projectFileParsed:n,projectMainFilePath:r,projectMainFileContent:s,projectMainFileParsed:c},p=ti.resolve(i,"flow.devops.yaml");if(ii.existsSync(p)){const e=ii.readFileSync(p,"utf8"),t=ai.parse(e);l.devops={filePath:p,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{ii.writeFileSync(l.devops.filePath,ai.stringify(l.devops.doc))}}}const d=ti.resolve(i,"readme.md");if(ii.existsSync(d)){const e=ii.readFileSync(d,"utf8");l.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:ti.resolve(fi,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:ti.resolve(fi,"./@fnet/cli-project-common/dist/template/default"),coreDir:ti.resolve(fi,"./@fnet/cli-project-flow/dist/template/core"),projectDir:ti.resolve(t.projectDir,"./.workspace"),projectSrcDir:ti.resolve(t.projectDir,"./src"),project:t}}}ui=ui.command("config create <name>","Create a config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await wi(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 li({schema:a}),s=ti.resolve(n,".fnet");ii.existsSync(s)||ii.mkdirSync(s);const c=ti.resolve(s,`${e.name}.fnet`);ii.writeFileSync(c,ai.stringify(r))}catch(e){console.error(e.message),process.exit(1)}})),ui=hi(ui,{bin:"npm"}),ui=hi(ui,{bin:"node"}),ui=hi(ui,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),ui=hi(ui,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),ui=hi(ui,{name:"app",bin:"npm",preArgs:["run","app","--"]}),ui=hi(ui,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),ui=hi(ui,{bin:"npx"}),ui=hi(ui,{bin:"cdk"}),ui=hi(ui,{bin:"aws"}),ui=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 wi(e),{projectDir:n}=t,i=e.config,a=await ci({name:i,dir:n,transferEnv:!1,optional:!0}),r=a?.data?.env||void 0,s=e.command,c=process.argv.slice(5);ei(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)}}))}(ui,{name:"with"}),ui.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.
|
|
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.36.1",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.2.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.2","@flownet/lib-to-electron":"^0.2.1","@flownet/lib-to-gitlab":"^0.1.21","@flownet/lib-to-ios-app":"^0.2.5","@flownet/lib-to-macos-app":"^0.2.3","@flownet/lib-to-nextjs":"^0.1.12","@flownet/lib-to-webos":"^0.2.8","@fnet/cli-project-common":"^0.1.4","@fnet/cli-project-flow":"^0.1.9","@fnet/cli-project-node":"^0.1.11","@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":"^3.1.0",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:"^5.1.1",isobject:"^4.0.0","js-yaml":"^4.1.0","keycloak-connect":"^23.0.4","lodash.clonedeep":"^4.5.0","lodash.merge":"^4.6.2","lodash.omit":"^4.5.0","lodash.pick":"^4.4.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.1","set-value":"^4.1.0",shelljs:"^0.8.5",typescript:"^5.2.2",uuid:"^9.0.1",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":"^25.0.4","@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={};
|