@fnet/cli 0.33.3 → 0.33.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e=require("child_process"),t=require("@fnet/config"),a=require("path"),o=require("yargs/yargs"),r=require("yargs/helpers"),s=require("fs"),n=require("yaml"),i=require("shelljs"),c=require("@fnet/yaml"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),m=require("js-yaml"),u=require("nunjucks"),g=require("redis"),f=require("@flownet/lib-is-redis-online"),y=require("nanoid"),w=require("@flownet/lib-atom-api-js"),h=require("axios"),_=require("qs"),b=require("lodash.merge"),v=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),x=require("@fnet/shell"),D=require("semver"),k=require("node:os"),A=require("@node-red/util"),P=require("@flownet/lib-to-ios-app"),S=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),E=require("@flownet/lib-to-webos"),$=require("@flownet/lib-to-nextjs"),T=require("lodash.clonedeep"),O=require("@flownet/lib-to-docker"),C=require("form-data"),M=require("@flownet/lib-parse-node-url"),R=require("@flownet/lib-pick-npm-versions"),q=require("chalk");const F=g,L=f;const{Api:N}=w,z=h.default,U=_;const B=b,J=s,W=a,K=v;function G({dir:e,name:t="index"}){let a=W.resolve(e,`./${t}.tsx`);if(J.existsSync(a)||(a=W.resolve(e,`./${t}.ts`)),J.existsSync(a)||(a=W.resolve(e,`./${t}.jsx`)),J.existsSync(a)||(a=W.resolve(e,`./${t}.js`)),!J.existsSync(a))return{};const o=a,r=W.extname(a);return{file:o,ext:r,ts:".ts"===r||".tsx"===r,name:t}}const H=j;const X=p,Y=d,Z=l;const Q=u,V=p,ee=d,te=v,ae=j;const oe=p,re=d,se=l;const ne=p,ie=d,ce=u,le=v;const pe=p,de=d,me=u;const ue=p,ge=d,fe=u;const ye=p,we=d,he=u;const _e=u,be=p,ve=d;const je=i,xe=a;const De=i;const ke=i;const Ae=i;const Pe=x,Se=t;const Ie=p,Ee=d,$e=D,Te=x,Oe=t;const Ce=p,Me=d,Re=D,qe=i,Fe=t;const Le=p,Ne=d,ze=k,Ue=u,Be=A,Je=t;const We=s,Ke=a,Ge=t;const He=P;const Xe=S;const Ye=I;const Ze=E;const Qe=$,Ve=T,et=b,tt=D,at=d;const ot=O,rt=T,st=b,nt=D,it=d;const ct=p,lt=d,pt=D,dt=x,mt=t,ut=h.default;const gt=D,ft=t,yt=h.default;const wt=D,ht=t,_t=h.default,bt=s,vt=x,jt=C;const xt=D,Dt=t,kt=h.default,At=s,Pt=x,St=C;const It=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:r})=>{await e({message:"Deploying it as gitlab project."});const s=t.projectDir;let n="fnet-to-gitlab";const i=o.params.config||"gitlab",c=await Se({name:i,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${i}`);const{data:l}=c.data;n+=` --projectGroupId=${l.projectGroupId}`,n+=` --projectPath='${s}'`,n+=` --projectName='${o.params.name}'`,n+=` --projectBranch='${o.params.branch||"main"}'`,n+=` --gitlabHost='${l.gitlabHost}'`,n+=` --gitlabToken='${l.gitlabToken}'`,n+=` --gitlabUsername='${l.gitlabUsername}'`,n+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await Pe({cmd:n}),a.isDirty=!0)},Et=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:r})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,n=Ee.resolve(s,"package.json"),i=Ie.readFileSync(n),c=JSON.parse(i);c.name=o.params.name,c.version=$e.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,Ie.writeFileSync(n,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Oe({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='${Ee.resolve(Ee.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${s}'`,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 Te({cmd:d}),Ie.writeFileSync(n,i),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=c.version,await r({target:o,packageJSON:c}))},$t=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r})=>{await t({message:"Deploying it as npm package."});const s=a.projectDir,n=Me.resolve(s,"package.json"),i=Ce.readFileSync(n),c=JSON.parse(i);c.name=r.params.name,c.version=Re.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 ."},Ce.writeFileSync(n,JSON.stringify(c,null,"\t"));const p=(await Fe({name:a.npmConfig||"npm",dir:a.projectDir}))?.data;if(Ce.writeFileSync(Me.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===r.dryRun)return;if(0!==qe.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");Ce.writeFileSync(n,i),o.isDirty=!0,r.params.version=c.version},Tt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:s,packageDependencies:n,njEnv:i})=>{await t({message:"Deploying it as node-red flow."});const c=a.projectDir,l=a.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===r.deploy.template)d={atom:e,packageDependencies:n,red:{tab:{id:r.deploy.id||Be.util.generateId(),label:`${p}/${e.id?e.id:ze.hostname()}/${e.name}/${r.deploy.name||r.deploy.template}`},function:{id:Be.util.generateId(),name:e.doc.name,initialize:{content:Le.readFileSync(Ne.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Be.util.generateId(),...r.params?.inject,payload:"json"===r.params?.inject?.payloadType?`'${JSON.stringify(r.params?.inject?.payload)}'`:r.params?.inject?.payload},debug:{id:Be.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:n,red:{tab:{id:r.deploy.id||Be.util.generateId(),label:`${p}/${e.id?e.id:ze.hostname()}/${r.deploy.name||r.deploy.template}`},function:{id:Be.util.generateId(),name:e.doc.name,initialize:{content:Le.readFileSync(Ne.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Be.util.generateId(),schedules:t},debug:{id:Be.util.generateId()}}}}else{if("http"!==r.deploy.template)return;d={atom:e,packageDependencies:n,red:{tab:{id:r.deploy.id||Be.util.generateId(),label:`${p}/${e.id?e.id:ze.hostname()}/${r.deploy.name||r.deploy.template}`},function:{id:Be.util.generateId(),name:e.doc.name,initialize:{content:Le.readFileSync(Ne.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Be.util.generateId(),method:r.params.method||"get",url:r.params.url},httpout:{id:Be.util.generateId()},debug:{id:Be.util.generateId()}}}}let m=Ue.compile(Le.readFileSync(Ne.resolve(l,`deploy/node-red/${r.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(Le.writeFileSync(Ne.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===r.dryRun)return;o.isDirty=!0;const u=(await Je({name:a.redConfig||"red",dir:a.projectDir}))?.data,g=r.deploy.url||u.env.RED_URL,f={};if(!1!==r.deploy.auth&&(f.Authorization="Bearer "+atomAccessToken),r.deploy.id)!0===r.actions?.delete?(await axios({method:"DELETE",url:`${g}/flow/${r.deploy.id}`,headers:f}),delete r.actions.delete,delete r.deploy.id,r.enabled=!1):await axios({method:"PUT",url:`${g}/flow/${r.deploy.id}`,data:m,headers:f});else{const e=await axios({method:"POST",url:`${g}/flow`,data:m,headers:f});r.deploy.id=e.data.id}},Ot=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:r,deploymentProject:s,deploymentProjectTarget:n})=>{await a({message:"Deploying it as workflow lib."});const i=(await Ge({name:"atom",dir:o.projectDir}))?.data;let c,l,p,d=n.deploy.name.split("/");if(1===d.length)l=i.env.ATOM_LIBRARIES_ID,p=n.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:i.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===n.dryRun)return;if(s.isDirty=!0,n.deploy.id){if(c=await t.get({id:n.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;n.deploy.id=c.id}const m=o.projectDir;c.doc.contents=[{content:We.readFileSync(Ke.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:We.readFileSync(Ke.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:We.readFileSync(Ke.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})},Ct=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:s,registerToPackageManager:n})=>{await t({message:"Deploying it as ios app package."});const i=a.projectDir;if(!0===r.dryRun)return;const c={projectDir:i,dest:i,atom:e,params:r.params};await He(c),o.isDirty=!0},Mt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:s})=>{await t({message:"Deploying it as macos app package."});const n=a.projectDir;if(!0===r.dryRun)return;const i={projectDir:n,dest:n,atom:e,params:r.params};await Xe(i),o.isDirty=!0},Rt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:s})=>{await t({message:"Deploying it as electron package."});const n=a.projectDir;if(!0===r.dryRun)return;const i={src:n,dest:n,atom:e,params:r.params};await Ye(i),o.isDirty=!0},qt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r})=>{await t({message:"Deploying it as webos package."});const s=a.projectDir;if(!0===r.dryRun)return;const n={src:s,dest:s,atom:e,params:r.params};await Ze(n),o.isDirty=!0},Ft=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as nextjs package."});t.params=et({name:"nextjs-app",version:"0.1.0"},t.params);const s=tt.inc(t.params.version,"patch");t.params.version=s;const n=Ve(t);n.params.dependencies=Ve(r);const i={atom:e,target:n.params,projectDir:o,renderDir:at.resolve(o,"nextjs")};return{deployer:await Qe(i)}},Lt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as docker package."});t.params=st({},t.params);const s=nt.inc(t.params.version,"patch");t.params.version=s;const n=rt(t);n.params.dependencies=rt(r);const i={atom:e,target:n.params,projectDir:o,renderDir:it.resolve(o,"docker")};return{deployer:await ot(i)}},Nt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:r})=>{await e({message:"Deploying it as fnet package."});const s=t.projectDir,n=lt.resolve(s,"package.json"),i=ct.readFileSync(n),c=JSON.parse(i);c.name=o.params.name,c.version=pt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,ct.writeFileSync(n,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await mt({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 g=await ut({method:"POST",url:d,data:{username:m,password:u},headers:{"Content-Type":"application/json"}});const f=g.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${d}`);let y="fnet-files-to-gcs";if(y+=` --projectId='${p.env.GCS_PROJECT_ID}'`,y+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,y+=` --keyFilename='${lt.resolve(lt.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,y+=` --dir='${s}'`,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 dt({cmd:y}),ct.writeFileSync(n,i),!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(g=await ut({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 ${f}`}}),g.data?.error)throw new Error("Failed to publish fnet package.")},zt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet form."});const r=gt.inc(o.params.version,"patch"),{file:s,data:n}=await ft({name:o.config||"fnet-form",dir:t.projectDir});if(!n.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!n.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!n.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const i=`${n.env.ATOM_API_URL}/v1/auth/token`,c=n.env.ATOM_API_USERNAME,l=n.env.ATOM_API_PASSWORD;let p=await yt({method:"POST",url:i,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 ${i}`);a.isDirty=!0,o.params.version=r;const m=`${n.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await yt({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.")},Ut=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet flow."});const r=wt.inc(o.params.version,"patch"),{file:s,data:n}=await ht({name:o.config||"fnet-flow",dir:t.project.projectDir});if(!n.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!n.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!n.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const i=`${n.env.ATOM_API_URL}/v1/auth/token`,c=n.env.ATOM_API_USERNAME,l=n.env.ATOM_API_PASSWORD;let p=await _t({method:"POST",url:i,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 ${i}`);a.isDirty=!0,o.params.version=r;const m=`${n.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await _t({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet flow.");const u=p.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const f=await vt({cmd:g});if(0!==f.code)throw new Error(f.stderr);const y=JSON.parse(f.stdout).zip_file_path;let w=new jt;w.append("file",bt.createReadStream(y));const h=await _t.request({method:"POST",maxBodyLength:1/0,url:`${n.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.")},Bt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet node."});const r=xt.inc(o.params.version,"patch"),{file:s,data:n}=await Dt({name:o.config||"fnet-node",dir:t.project.projectDir});if(!n.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!n.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!n.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const i=`${n.env.ATOM_API_URL}/v1/auth/token`,c=n.env.ATOM_API_USERNAME,l=n.env.ATOM_API_PASSWORD;let p=await kt({method:"POST",url:i,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 ${i}`);a.isDirty=!0,o.params.version=r;const m=`${n.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await kt({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet node.");const u=p.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const f=await Pt({cmd:g});if(0!==f.code)throw new Error(f.stderr);const y=JSON.parse(f.stdout).zip_file_path;let w=new St;w.append("file",At.createReadStream(y));const h=await kt.request({method:"POST",maxBodyLength:1/0,url:`${n.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 Jt=p,Wt=d,Kt=m,Gt=i,Ht=u,Xt=async()=>{if(!await L({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=F.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Yt}=y,Zt=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(N.set_api_url(e.data.url),t)return N.set_req_token(t),void a(t);z({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:U.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{N.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{N.set_req_token(),o(e)}))}))}},Qt=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=W.resolve(t.project.projectDir),r=G({dir:W.resolve(o,"./app")});if(r.file){let e=await K({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 K({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 s=G({dir:W.resolve(o,"./cli")});if(s.file){let e=await K({file:s.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 K({file:s.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.cli_entry_uses_jsx=t,a.cli_entry_is_ts=s.ts,a.cli_entry_ext=s.ext}if("workflow.lib"===e.type){const e=G({dir:W.resolve(o,"./src")});if(e.file){let t=await K({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 K({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 n=!0===a.app_has_entry||!0===a.src_uses_jsx,i=!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:n}:a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:n,...a.app||{}},a.app.enabled=!0===a.app.enabled&&(!0===e.doc.features.form_enabled||!0===a.app.extend||!0===a.app.enabled),a.app.format=a.app.format||"esm",a.app.folder=a.app.folder||a.app.format||"default",!1===a.cli?a.cli={enabled:!1}:!0===a.cli?a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:i}:a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:i,...a.cli||{}},a.cli.enabled=!0===a.cli.enabled&&(!1===e.doc.features.form_enabled||!0===a.cli.extend||!0===a.cli.enabled),a.cli.format=a.cli.format||"esm",a.cli.folder=a.cli.folder||a.cli.folder||"esm";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:`${W.normalize(a.app.dir||".")}`,files:[W.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=B(p,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=B({},a.replace_options||a.replace?.options||{}),a.terser_options=B({},a.terser_options||a.terser?.options||{}),a.css_options=B({},a.css_options||a.css?.options||{}),a.wasm_options=B({},a.wasm_options||a.wasm?.options||{}),a.copy_options=B(l,a.copy_options||a.copy?.options||{}),a.json_options=B({},a.json_options||a.json?.options||{}),a.image_options=B({},a.image_options||a.image?.options||{}),a.analyzer_options=B({summaryOnly:!0,limit:12},a.analyzer_options||a.analyzer?.options||{}),a.visualizer_options=B({},a.visualizer_options||a.visualizer?.options||{}),a.string_options=B({},a.string_options||a.string?.options||{}),a.rollup=a.rollup||{},a.rollup_output=B(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=B(a.browsersync_options,t.browsersync_options),t.replace_options=B(a.replace_options,t.replace_options),t.terser_options=B(a.terser_options,t.terser_options),t.css_options=B(a.css_options,t.css_options),t.wasm_options=B(a.wasm_options,t.wasm_options),t.copy_options=B(a.copy_options,t.copy_options),t.json_options=B(a.json_options,t.json_options),t.image_options=B(a.image_options,t.image_options),t.analyzer_options=B(a.analyzer_options,t.analyzer_options),t.visualizer_options=B(a.visualizer_options,t.visualizer_options),t.string_options=B(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},Vt=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 H({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"})},ea=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()},s=a.templateDir,n=Y.resolve(a.projectDir,"src/app");X.existsSync(n)||X.mkdirSync(n,{recursive:!0}),await Z({pattern:["index.html.njk","index.js.njk"],dir:Y.resolve(s,"src/app"),outDir:n,context:r})},ta=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:r})=>{await r({message:"Creating package.json."});const s=a.find((e=>"react"===e.package)),n=a.find((e=>"react-dom"===e.package));s&&!n?a.push({package:"react-dom",version:s.version}):s&&n&&(n.version=s.version),s&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const i=[];!0===e.doc.features.app.enabled&&i.push(ee.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&i.push(ee.resolve(t.projectDir,"src/cli/index.js"));for await(const t of i){const r=t;if(!V.existsSync(r))throw new Error(`App file not found: ${r}`);const s=await te({file:r,recursive:!0}),n=!0===e.doc.features.all_parsed_imports?s.all:s.required;for await(const e of n){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 ae({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=Q.compile(V.readFileSync(ee.resolve(l,"package.json.njk"),"utf8"),Q.configure(l)).render(c),d=t.projectDir,m=ee.resolve(d,"package.json");V.writeFileSync(m,p,"utf8")},aa=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},s=a.templateDir,n=re.resolve(a.projectDir,"src/cli");oe.existsSync(n)||oe.mkdirSync(n,{recursive:!0}),await se({pattern:["index.js.njk"],dir:re.resolve(s,"src/cli"),outDir:n,context:r})},oa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const r={atom:e,packageDependencies:o},s=ie.resolve(a.projectDir,"src","default/index.js");if(!ne.existsSync(s))throw new Error(`Entry file not found: ${s}`);const n=(await le({file:s,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),i=e.doc.features.rollup_output,c=Object.keys(i);for(let e=0;e<c.length;e++){const t=i[c[e]];if(!0===t.browser&&n.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(n.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<n.length;e++){const a=n[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(n)}}const l=a.templateCommonDir,p=ce.compile(ne.readFileSync(ie.resolve(l,"rollup.config.js.njk"),"utf8"),ce.configure(l)).render(r),d=a.projectDir,m=ie.resolve(d,"rollup.config.js");ne.writeFileSync(m,p,"utf8")},ra=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const r={},s=e.doc.inputs||[],n=[];s.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&n.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 i={options:r,imports:n,atom:e},c=a.templateDir,l=me.compile(pe.readFileSync(de.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),o).render(i),p=a.projectDir,d=de.resolve(p,"src/default/to.yargs.js");pe.writeFileSync(d,l,"utf8")},sa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const r={atom:e,packageDependencies:o},s=a.templateCommonDir,n=fe.compile(ue.readFileSync(ge.resolve(s,".gitignore.njk"),"utf8"),fe.configure(s)).render(r),i=a.projectDir,c=ge.resolve(i,".gitignore");ue.writeFileSync(c,n,"utf8")},na=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const r={atom:e,packageDependencies:o},s=a.templateCommonDir,n=he.compile(ye.readFileSync(we.resolve(s,"tsconfig.json.njk"),"utf8"),he.configure(s)).render(r),i=a.projectDir,c=we.resolve(i,"tsconfig.json");ye.writeFileSync(c,n,"utf8")},ia=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const r="readme.md",s=`Creating ${r}`;if(await a({message:s}),t.project?.readme){const e={content:t.project.readme.doc.content},a=t.templateCommonDir,o=_e.compile(be.readFileSync(ve.resolve(a,`${r}.njk`),"utf8"),_e.configure(a)).render(e),s=t.projectDir,n=ve.resolve(s,`${r}`);be.writeFileSync(n,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:s,...n}=a.doc,i={content:s},c=t.templateCommonDir,l=_e.compile(be.readFileSync(ve.resolve(c,`${r}.njk`),"utf8"),_e.configure(c)).render(i),p=t.projectDir,d=ve.resolve(p,`${r}`);be.writeFileSync(d,l,"utf8")}},ca=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=xe.join("src","**","*");if(0!==je.exec(`prettier --write ${o} *.{js,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},la=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Creating .d.ts"});if(0!==De.exec("tsc",{cwd:a}).code)throw new Error("Couldnt create .d.ts files.")},pa=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==ke.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},da=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==Ae.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},ma=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:r,setInProgress:s}=e;if(!0===r.enabled)if("lib"===r.name)await Ot({...e});else if("red"===r.name)await Tt({...e});else if("npm"===r.name)await $t({...e});else if("gcs"===r.name)await Et({...e});else if("gitlab"===r.name)await It({...e});else if("macos-app"===r.name)await Mt({...e});else if("ios-app"===r.name)await Ct({...e});else if("electron"===r.name)await Rt({...e});else if("webos"===r.name)await qt({...e});else if("fnet-package"===r.name)await Nt({...e});else if("fnet-form"===r.name)await zt({...e});else if("fnet-node"===r.name)await Bt({...e});else if("fnet-flow"===r.name)await Ut({...e});else{let e;if("nextjs"===r.name?e=Ft:"docker"===r.name&&(e=Lt),!e)return;await e({atom:t,target:r,onProgress:s,projectDir:o.projectDir,dependencies:a})}},{Atom:ua}=w,ga=M,fa=t,ya=v,wa=R,ha=q;var _a=class{#e;#t;#a;#o;#r;#s;#n;#i;#c;#l;#p;#d;#m;#u;#g;#f;#y;constructor(e){this.#e=new Zt,this.#t=e,this.#s=[],this.#n=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#s,packageDevDependencies:this.#n,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:ua,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 Xt(),this.#c=this.#t.buildId||Yt(24),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#g=["all","deploy","build"].includes(this.#m),this.#f=["all","deploy"].includes(this.#m),this.#p=this.#t.protocol,this.#l="BUILD:"+this.#c,this.#d=(await fa({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 Qt(this.#y),await Vt(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#i=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#i)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await ua.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"];Jt.existsSync(e)&&Jt.readdirSync(e).forEach((o=>{a.includes(o)||(t=Gt.rm("-rf",Wt.join(e,o)))}));let o=e;if(!Jt.existsSync(o)&&(t=Gt.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=Wt.join(e,"src"),!Jt.existsSync(o)&&(t=Gt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=Wt.join(e,"src","default"),!Jt.existsSync()&&(t=Gt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Ht.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.#s})}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 s=r.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.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=ga({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 ua.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await ua.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await ua.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=Wt.resolve(this.#t.projectSrcDir,"index.js"),a=await ya({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 wa({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=Wt.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=Wt.relative(Wt.join(this.#t.projectDir,"src","default"),e);if(!Jt.existsSync(e)){Jt.mkdirSync(Wt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Jt.writeFileSync(e,t,"utf8")}a.relativePath=t.split(Wt.sep).join("/"),this.#a.typesDir=`./types/${Wt.basename(o)}/src`}else{const e=Wt.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Jt.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=Ht.compile(Jt.readFileSync(Wt.resolve(t,Wt.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,r=Wt.resolve(o,Wt.join("src","default","index.js"));Jt.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:Kt.dump(o)},s=this.#t.templateDir,n=Ht.compile(Jt.readFileSync(Wt.resolve(s,`${e}.njk`),"utf8"),this.#o).render(r),i=this.#t.projectDir,c=Wt.resolve(i,`${e}`);Jt.writeFileSync(c,n,"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 ua.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 ua.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 ma({...this.#y,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await ua.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await ua.update(o,{id:o.id})):o=await ua.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(ha.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 ia(this.#y),await na(this.#y),await sa(this.#y),await ra(this.#y),await aa(this.#y),await ea(this.#y),await oa(this.#y),await ta(this.#y),await ca(this.#y),await la(this.#y),this.#g&&(await pa(this.#y),await da(this.#y),this.#f&&await this.deploy())),await this._cache_set(this.#l,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e.message||e}),console.log(e),e}}};const ba=p,va=d;var ja=function({baseDir:e=__dirname}){let t=e;for(;t!==va.parse(t).root;){const e=va.join(t,"node_modules");if(ba.existsSync(e))return e;t=va.dirname(t)}return null};const xa=process.cwd(),{spawn:Da}=e;t({name:["redis"],dir:xa,optional:!0});const ka=a,Aa=o,{hideBin:Pa}=r,Sa=s,Ia=n,Ea=i,$a=c,Ta=l,Oa=_a,Ca=ja({baseDir:__dirname}),Ma="win32"===process.platform?";":":";async function Ra(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:ka.resolve(Ca,"./@fnet/cli-project-common/dist/template/default"),projectDir:ka.resolve(xa,`./.output/${e.id}`),coreDir:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/core")};{const t=await async function(){const e=ka.resolve(xa,"node.yaml");if(!Sa.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Sa.readFileSync(e,"utf8"),{parsed:a}=await $a({content:t}),o=ka.dirname(e),r={libraryAtom:{doc:{...a},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},s=ka.resolve(o,"node.devops.yaml");if(Sa.existsSync(s)){const e=Sa.readFileSync(s,"utf8"),t=Ia.parse(e);r.devops={filePath:s,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Sa.writeFileSync(r.devops.filePath,Ia.stringify(r.devops.doc))}}}const n=ka.resolve(o,"readme.md");if(Sa.existsSync(n)){const e=Sa.readFileSync(n,"utf8");r.readme={filePath:n,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return r}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:ka.resolve(Ca,"./@fnet/cli-project-common/dist/template/default"),coreDir:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/core"),projectDir:ka.resolve(t.projectDir,"./.workspace"),projectSrcDir:ka.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${ka.join(Ca,"/.bin")}${Ma}${process.env.PATH}`,Aa(Pa(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=ka.resolve(Ca,"@fnet/cli-project-node/dist/template/project"),a=ka.resolve(xa,e.name);Sa.existsSync(a)||Sa.mkdirSync(a),await Ta({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=Ea.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Ea.which("git")&&(o=Ea.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(Ea.which("code")&&e.vscode&&(o=Ea.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=ka.resolve(Ca,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=ka.basename(a),e.update){if(await Ta({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==Ea.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 Ra(e),a=new Oa(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 Ra({...e,mode:"all"}),a=new Oa(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 Ra({...e,mode:"file"}),a=new Oa(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("npm [commands..]","npm - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ra(e),{projectDir:a}=t,o=`npm ${process.argv.slice(3).join(" ")}`;Ea.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ra(e),{projectDir:a}=t,o=`node ${process.argv.slice(3).join(" ")}`;Ea.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ra(e),{projectDir:a}=t,o=`npm run serve -- ${process.argv.slice(3).join(" ")}`;Ea.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ra(e),{projectDir:a}=t,o=`npm run watch -- ${process.argv.slice(3).join(" ")}`;Ea.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ra(e),{projectDir:a}=t,o=`npm run app -- ${process.argv.slice(3).join(" ")}`;Ea.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ra(e),{projectDir:a}=t,o=process.argv.slice(3);Da("npm",["run","cli","--",...o],{cwd:a,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}})).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"),s=require("fs"),n=require("yaml"),i=require("shelljs"),c=require("@fnet/yaml"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),m=require("js-yaml"),u=require("nunjucks"),g=require("redis"),f=require("@flownet/lib-is-redis-online"),y=require("nanoid"),w=require("@flownet/lib-atom-api-js"),h=require("axios"),_=require("qs"),b=require("lodash.merge"),v=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),x=require("@fnet/shell"),D=require("semver"),k=require("node:os"),A=require("@node-red/util"),P=require("@flownet/lib-to-ios-app"),S=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),E=require("@flownet/lib-to-webos"),$=require("@flownet/lib-to-nextjs"),T=require("lodash.clonedeep"),O=require("@flownet/lib-to-docker"),C=require("form-data"),M=require("@flownet/lib-parse-node-url"),R=require("@flownet/lib-pick-npm-versions"),q=require("chalk");const F=g,L=f;const{Api:N}=w,U=h.default,z=_;const B=b,J=s,W=a,K=v;function G({dir:e,name:t="index"}){let a=W.resolve(e,`./${t}.tsx`);if(J.existsSync(a)||(a=W.resolve(e,`./${t}.ts`)),J.existsSync(a)||(a=W.resolve(e,`./${t}.jsx`)),J.existsSync(a)||(a=W.resolve(e,`./${t}.js`)),!J.existsSync(a))return{};const o=a,r=W.extname(a);return{file:o,ext:r,ts:".ts"===r||".tsx"===r,name:t}}const H=j;const X=p,Y=d,Z=l;const Q=u,V=p,ee=d,te=v,ae=j;const oe=p,re=d,se=l;const ne=p,ie=d,ce=u,le=v;const pe=p,de=d,me=u;const ue=p,ge=d,fe=u;const ye=p,we=d,he=u;const _e=u,be=p,ve=d;const je=i,xe=a;const De=i;const ke=i;const Ae=i;const Pe=x,Se=t;const Ie=p,Ee=d,$e=D,Te=x,Oe=t;const Ce=p,Me=d,Re=D,qe=i,Fe=t;const Le=p,Ne=d,Ue=k,ze=u,Be=A,Je=t;const We=s,Ke=a,Ge=t;const He=P;const Xe=S;const Ye=I;const Ze=E;const Qe=$,Ve=T,et=b,tt=D,at=d;const ot=O,rt=T,st=b,nt=D,it=d;const ct=p,lt=d,pt=D,dt=x,mt=t,ut=h.default;const gt=D,ft=t,yt=h.default;const wt=D,ht=t,_t=h.default,bt=s,vt=x,jt=C;const xt=D,Dt=t,kt=h.default,At=s,Pt=x,St=C;const It=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:r})=>{await e({message:"Deploying it as gitlab project."});const s=t.projectDir;let n="fnet-to-gitlab";const i=o.params.config||"gitlab",c=await Se({name:i,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${i}`);const{data:l}=c.data;n+=` --projectGroupId=${l.projectGroupId}`,n+=` --projectPath='${s}'`,n+=` --projectName='${o.params.name}'`,n+=` --projectBranch='${o.params.branch||"main"}'`,n+=` --gitlabHost='${l.gitlabHost}'`,n+=` --gitlabToken='${l.gitlabToken}'`,n+=` --gitlabUsername='${l.gitlabUsername}'`,n+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await Pe({cmd:n}),a.isDirty=!0)},Et=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:r})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,n=Ee.resolve(s,"package.json"),i=Ie.readFileSync(n),c=JSON.parse(i);c.name=o.params.name,c.version=$e.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,Ie.writeFileSync(n,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Oe({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='${Ee.resolve(Ee.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${s}'`,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 Te({cmd:d}),Ie.writeFileSync(n,i),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=c.version,await r({target:o,packageJSON:c}))},$t=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r})=>{await t({message:"Deploying it as npm package."});const s=a.projectDir,n=Me.resolve(s,"package.json"),i=Ce.readFileSync(n),c=JSON.parse(i);c.name=r.params.name,c.version=Re.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 ."},Ce.writeFileSync(n,JSON.stringify(c,null,"\t"));const p=(await Fe({name:a.npmConfig||"npm",dir:a.projectDir}))?.data;if(Ce.writeFileSync(Me.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===r.dryRun)return;if(0!==qe.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");Ce.writeFileSync(n,i),o.isDirty=!0,r.params.version=c.version},Tt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:s,packageDependencies:n,njEnv:i})=>{await t({message:"Deploying it as node-red flow."});const c=a.projectDir,l=a.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===r.deploy.template)d={atom:e,packageDependencies:n,red:{tab:{id:r.deploy.id||Be.util.generateId(),label:`${p}/${e.id?e.id:Ue.hostname()}/${e.name}/${r.deploy.name||r.deploy.template}`},function:{id:Be.util.generateId(),name:e.doc.name,initialize:{content:Le.readFileSync(Ne.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Be.util.generateId(),...r.params?.inject,payload:"json"===r.params?.inject?.payloadType?`'${JSON.stringify(r.params?.inject?.payload)}'`:r.params?.inject?.payload},debug:{id:Be.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:n,red:{tab:{id:r.deploy.id||Be.util.generateId(),label:`${p}/${e.id?e.id:Ue.hostname()}/${r.deploy.name||r.deploy.template}`},function:{id:Be.util.generateId(),name:e.doc.name,initialize:{content:Le.readFileSync(Ne.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Be.util.generateId(),schedules:t},debug:{id:Be.util.generateId()}}}}else{if("http"!==r.deploy.template)return;d={atom:e,packageDependencies:n,red:{tab:{id:r.deploy.id||Be.util.generateId(),label:`${p}/${e.id?e.id:Ue.hostname()}/${r.deploy.name||r.deploy.template}`},function:{id:Be.util.generateId(),name:e.doc.name,initialize:{content:Le.readFileSync(Ne.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Be.util.generateId(),method:r.params.method||"get",url:r.params.url},httpout:{id:Be.util.generateId()},debug:{id:Be.util.generateId()}}}}let m=ze.compile(Le.readFileSync(Ne.resolve(l,`deploy/node-red/${r.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(Le.writeFileSync(Ne.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===r.dryRun)return;o.isDirty=!0;const u=(await Je({name:a.redConfig||"red",dir:a.projectDir}))?.data,g=r.deploy.url||u.env.RED_URL,f={};if(!1!==r.deploy.auth&&(f.Authorization="Bearer "+atomAccessToken),r.deploy.id)!0===r.actions?.delete?(await axios({method:"DELETE",url:`${g}/flow/${r.deploy.id}`,headers:f}),delete r.actions.delete,delete r.deploy.id,r.enabled=!1):await axios({method:"PUT",url:`${g}/flow/${r.deploy.id}`,data:m,headers:f});else{const e=await axios({method:"POST",url:`${g}/flow`,data:m,headers:f});r.deploy.id=e.data.id}},Ot=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:r,deploymentProject:s,deploymentProjectTarget:n})=>{await a({message:"Deploying it as workflow lib."});const i=(await Ge({name:"atom",dir:o.projectDir}))?.data;let c,l,p,d=n.deploy.name.split("/");if(1===d.length)l=i.env.ATOM_LIBRARIES_ID,p=n.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:i.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===n.dryRun)return;if(s.isDirty=!0,n.deploy.id){if(c=await t.get({id:n.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;n.deploy.id=c.id}const m=o.projectDir;c.doc.contents=[{content:We.readFileSync(Ke.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:We.readFileSync(Ke.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:We.readFileSync(Ke.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})},Ct=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:s,registerToPackageManager:n})=>{await t({message:"Deploying it as ios app package."});const i=a.projectDir;if(!0===r.dryRun)return;const c={projectDir:i,dest:i,atom:e,params:r.params};await He(c),o.isDirty=!0},Mt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:s})=>{await t({message:"Deploying it as macos app package."});const n=a.projectDir;if(!0===r.dryRun)return;const i={projectDir:n,dest:n,atom:e,params:r.params};await Xe(i),o.isDirty=!0},Rt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:s})=>{await t({message:"Deploying it as electron package."});const n=a.projectDir;if(!0===r.dryRun)return;const i={src:n,dest:n,atom:e,params:r.params};await Ye(i),o.isDirty=!0},qt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r})=>{await t({message:"Deploying it as webos package."});const s=a.projectDir;if(!0===r.dryRun)return;const n={src:s,dest:s,atom:e,params:r.params};await Ze(n),o.isDirty=!0},Ft=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as nextjs package."});t.params=et({name:"nextjs-app",version:"0.1.0"},t.params);const s=tt.inc(t.params.version,"patch");t.params.version=s;const n=Ve(t);n.params.dependencies=Ve(r);const i={atom:e,target:n.params,projectDir:o,renderDir:at.resolve(o,"nextjs")};return{deployer:await Qe(i)}},Lt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as docker package."});t.params=st({},t.params);const s=nt.inc(t.params.version,"patch");t.params.version=s;const n=rt(t);n.params.dependencies=rt(r);const i={atom:e,target:n.params,projectDir:o,renderDir:it.resolve(o,"docker")};return{deployer:await ot(i)}},Nt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:r})=>{await e({message:"Deploying it as fnet package."});const s=t.projectDir,n=lt.resolve(s,"package.json"),i=ct.readFileSync(n),c=JSON.parse(i);c.name=o.params.name,c.version=pt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,ct.writeFileSync(n,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await mt({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 g=await ut({method:"POST",url:d,data:{username:m,password:u},headers:{"Content-Type":"application/json"}});const f=g.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${d}`);let y="fnet-files-to-gcs";if(y+=` --projectId='${p.env.GCS_PROJECT_ID}'`,y+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,y+=` --keyFilename='${lt.resolve(lt.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,y+=` --dir='${s}'`,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 dt({cmd:y}),ct.writeFileSync(n,i),!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(g=await ut({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 ${f}`}}),g.data?.error)throw new Error("Failed to publish fnet package.")},Ut=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet form."});const r=gt.inc(o.params.version,"patch"),{file:s,data:n}=await ft({name:o.config||"fnet-form",dir:t.projectDir});if(!n.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!n.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!n.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const i=`${n.env.ATOM_API_URL}/v1/auth/token`,c=n.env.ATOM_API_USERNAME,l=n.env.ATOM_API_PASSWORD;let p=await yt({method:"POST",url:i,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 ${i}`);a.isDirty=!0,o.params.version=r;const m=`${n.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await yt({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.")},zt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet flow."});const r=wt.inc(o.params.version,"patch"),{file:s,data:n}=await ht({name:o.config||"fnet-flow",dir:t.project.projectDir});if(!n.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!n.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!n.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const i=`${n.env.ATOM_API_URL}/v1/auth/token`,c=n.env.ATOM_API_USERNAME,l=n.env.ATOM_API_PASSWORD;let p=await _t({method:"POST",url:i,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 ${i}`);a.isDirty=!0,o.params.version=r;const m=`${n.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await _t({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet flow.");const u=p.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const f=await vt({cmd:g});if(0!==f.code)throw new Error(f.stderr);const y=JSON.parse(f.stdout).path;let w=new jt;w.append("file",bt.createReadStream(y));const h=await _t.request({method:"POST",maxBodyLength:1/0,url:`${n.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.")},Bt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet node."});const r=xt.inc(o.params.version,"patch"),{file:s,data:n}=await Dt({name:o.config||"fnet-node",dir:t.project.projectDir});if(!n.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!n.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!n.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const i=`${n.env.ATOM_API_URL}/v1/auth/token`,c=n.env.ATOM_API_USERNAME,l=n.env.ATOM_API_PASSWORD;let p=await kt({method:"POST",url:i,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 ${i}`);a.isDirty=!0,o.params.version=r;const m=`${n.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await kt({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet node.");const u=p.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const f=await Pt({cmd:g});if(0!==f.code)throw new Error(f.stderr);const y=JSON.parse(f.stdout).path;let w=new St;w.append("file",At.createReadStream(y));const h=await kt.request({method:"POST",maxBodyLength:1/0,url:`${n.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 Jt=p,Wt=d,Kt=m,Gt=i,Ht=u,Xt=async()=>{if(!await L({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=F.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Yt}=y,Zt=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(N.set_api_url(e.data.url),t)return N.set_req_token(t),void a(t);U({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:z.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{N.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{N.set_req_token(),o(e)}))}))}},Qt=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=W.resolve(t.project.projectDir),r=G({dir:W.resolve(o,"./app")});if(r.file){let e=await K({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 K({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 s=G({dir:W.resolve(o,"./cli")});if(s.file){let e=await K({file:s.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 K({file:s.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.cli_entry_uses_jsx=t,a.cli_entry_is_ts=s.ts,a.cli_entry_ext=s.ext}if("workflow.lib"===e.type){const e=G({dir:W.resolve(o,"./src")});if(e.file){let t=await K({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 K({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 n=!0===a.app_has_entry||!0===a.src_uses_jsx,i=!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:n}:a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:n,...a.app||{}},a.app.enabled=!0===a.app.enabled&&(!0===e.doc.features.form_enabled||!0===a.app.extend||!0===a.app.enabled),a.app.format=a.app.format||"esm",a.app.folder=a.app.folder||a.app.format||"default",!1===a.cli?a.cli={enabled:!1}:!0===a.cli?a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:i}:a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:i,...a.cli||{}},a.cli.enabled=!0===a.cli.enabled&&(!1===e.doc.features.form_enabled||!0===a.cli.extend||!0===a.cli.enabled),a.cli.format=a.cli.format||"esm",a.cli.folder=a.cli.folder||a.cli.folder||"esm";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:`${W.normalize(a.app.dir||".")}`,files:[W.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=B(p,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=B({},a.replace_options||a.replace?.options||{}),a.terser_options=B({},a.terser_options||a.terser?.options||{}),a.css_options=B({},a.css_options||a.css?.options||{}),a.wasm_options=B({},a.wasm_options||a.wasm?.options||{}),a.copy_options=B(l,a.copy_options||a.copy?.options||{}),a.json_options=B({},a.json_options||a.json?.options||{}),a.image_options=B({},a.image_options||a.image?.options||{}),a.analyzer_options=B({summaryOnly:!0,limit:12},a.analyzer_options||a.analyzer?.options||{}),a.visualizer_options=B({},a.visualizer_options||a.visualizer?.options||{}),a.string_options=B({},a.string_options||a.string?.options||{}),a.rollup=a.rollup||{},a.rollup_output=B(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=B(a.browsersync_options,t.browsersync_options),t.replace_options=B(a.replace_options,t.replace_options),t.terser_options=B(a.terser_options,t.terser_options),t.css_options=B(a.css_options,t.css_options),t.wasm_options=B(a.wasm_options,t.wasm_options),t.copy_options=B(a.copy_options,t.copy_options),t.json_options=B(a.json_options,t.json_options),t.image_options=B(a.image_options,t.image_options),t.analyzer_options=B(a.analyzer_options,t.analyzer_options),t.visualizer_options=B(a.visualizer_options,t.visualizer_options),t.string_options=B(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},Vt=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 H({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"})},ea=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()},s=a.templateDir,n=Y.resolve(a.projectDir,"src/app");X.existsSync(n)||X.mkdirSync(n,{recursive:!0}),await Z({pattern:["index.html.njk","index.js.njk"],dir:Y.resolve(s,"src/app"),outDir:n,context:r})},ta=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:r})=>{await r({message:"Creating package.json."});const s=a.find((e=>"react"===e.package)),n=a.find((e=>"react-dom"===e.package));s&&!n?a.push({package:"react-dom",version:s.version}):s&&n&&(n.version=s.version),s&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const i=[];!0===e.doc.features.app.enabled&&i.push(ee.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&i.push(ee.resolve(t.projectDir,"src/cli/index.js"));for await(const t of i){const r=t;if(!V.existsSync(r))throw new Error(`App file not found: ${r}`);const s=await te({file:r,recursive:!0}),n=!0===e.doc.features.all_parsed_imports?s.all:s.required;for await(const e of n){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 ae({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=Q.compile(V.readFileSync(ee.resolve(l,"package.json.njk"),"utf8"),Q.configure(l)).render(c),d=t.projectDir,m=ee.resolve(d,"package.json");V.writeFileSync(m,p,"utf8")},aa=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},s=a.templateDir,n=re.resolve(a.projectDir,"src/cli");oe.existsSync(n)||oe.mkdirSync(n,{recursive:!0}),await se({pattern:["index.js.njk"],dir:re.resolve(s,"src/cli"),outDir:n,context:r})},oa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const r={atom:e,packageDependencies:o},s=ie.resolve(a.projectDir,"src","default/index.js");if(!ne.existsSync(s))throw new Error(`Entry file not found: ${s}`);const n=(await le({file:s,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),i=e.doc.features.rollup_output,c=Object.keys(i);for(let e=0;e<c.length;e++){const t=i[c[e]];if(!0===t.browser&&n.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(n.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<n.length;e++){const a=n[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(n)}}const l=a.templateCommonDir,p=ce.compile(ne.readFileSync(ie.resolve(l,"rollup.config.js.njk"),"utf8"),ce.configure(l)).render(r),d=a.projectDir,m=ie.resolve(d,"rollup.config.js");ne.writeFileSync(m,p,"utf8")},ra=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const r={},s=e.doc.inputs||[],n=[];s.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&n.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 i={options:r,imports:n,atom:e},c=a.templateDir,l=me.compile(pe.readFileSync(de.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),o).render(i),p=a.projectDir,d=de.resolve(p,"src/default/to.yargs.js");pe.writeFileSync(d,l,"utf8")},sa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const r={atom:e,packageDependencies:o},s=a.templateCommonDir,n=fe.compile(ue.readFileSync(ge.resolve(s,".gitignore.njk"),"utf8"),fe.configure(s)).render(r),i=a.projectDir,c=ge.resolve(i,".gitignore");ue.writeFileSync(c,n,"utf8")},na=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const r={atom:e,packageDependencies:o},s=a.templateCommonDir,n=he.compile(ye.readFileSync(we.resolve(s,"tsconfig.json.njk"),"utf8"),he.configure(s)).render(r),i=a.projectDir,c=we.resolve(i,"tsconfig.json");ye.writeFileSync(c,n,"utf8")},ia=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const r="readme.md",s=`Creating ${r}`;if(await a({message:s}),t.project?.readme){const e={content:t.project.readme.doc.content},a=t.templateCommonDir,o=_e.compile(be.readFileSync(ve.resolve(a,`${r}.njk`),"utf8"),_e.configure(a)).render(e),s=t.projectDir,n=ve.resolve(s,`${r}`);be.writeFileSync(n,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:s,...n}=a.doc,i={content:s},c=t.templateCommonDir,l=_e.compile(be.readFileSync(ve.resolve(c,`${r}.njk`),"utf8"),_e.configure(c)).render(i),p=t.projectDir,d=ve.resolve(p,`${r}`);be.writeFileSync(d,l,"utf8")}},ca=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=xe.join("src","**","*");if(0!==je.exec(`prettier --write ${o} *.{js,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},la=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Creating .d.ts"});if(0!==De.exec("tsc",{cwd:a}).code)throw new Error("Couldnt create .d.ts files.")},pa=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==ke.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},da=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==Ae.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},ma=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:r,setInProgress:s}=e;if(!0===r.enabled)if("lib"===r.name)await Ot({...e});else if("red"===r.name)await Tt({...e});else if("npm"===r.name)await $t({...e});else if("gcs"===r.name)await Et({...e});else if("gitlab"===r.name)await It({...e});else if("macos-app"===r.name)await Mt({...e});else if("ios-app"===r.name)await Ct({...e});else if("electron"===r.name)await Rt({...e});else if("webos"===r.name)await qt({...e});else if("fnet-package"===r.name)await Nt({...e});else if("fnet-form"===r.name)await Ut({...e});else if("fnet-node"===r.name)await Bt({...e});else if("fnet-flow"===r.name)await zt({...e});else{let e;if("nextjs"===r.name?e=Ft:"docker"===r.name&&(e=Lt),!e)return;await e({atom:t,target:r,onProgress:s,projectDir:o.projectDir,dependencies:a})}},{Atom:ua}=w,ga=M,fa=t,ya=v,wa=R,ha=q;var _a=class{#e;#t;#a;#o;#r;#s;#n;#i;#c;#l;#p;#d;#m;#u;#g;#f;#y;constructor(e){this.#e=new Zt,this.#t=e,this.#s=[],this.#n=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#s,packageDevDependencies:this.#n,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:ua,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 Xt(),this.#c=this.#t.buildId||Yt(24),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#g=["all","deploy","build"].includes(this.#m),this.#f=["all","deploy"].includes(this.#m),this.#p=this.#t.protocol,this.#l="BUILD:"+this.#c,this.#d=(await fa({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 Qt(this.#y),await Vt(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#i=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#i)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await ua.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"];Jt.existsSync(e)&&Jt.readdirSync(e).forEach((o=>{a.includes(o)||(t=Gt.rm("-rf",Wt.join(e,o)))}));let o=e;if(!Jt.existsSync(o)&&(t=Gt.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=Wt.join(e,"src"),!Jt.existsSync(o)&&(t=Gt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=Wt.join(e,"src","default"),!Jt.existsSync()&&(t=Gt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Ht.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.#s})}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 s=r.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.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=ga({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 ua.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await ua.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await ua.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=Wt.resolve(this.#t.projectSrcDir,"index.js"),a=await ya({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 wa({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=Wt.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=Wt.relative(Wt.join(this.#t.projectDir,"src","default"),e);if(!Jt.existsSync(e)){Jt.mkdirSync(Wt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Jt.writeFileSync(e,t,"utf8")}a.relativePath=t.split(Wt.sep).join("/"),this.#a.typesDir=`./types/${Wt.basename(o)}/src`}else{const e=Wt.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Jt.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=Ht.compile(Jt.readFileSync(Wt.resolve(t,Wt.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,r=Wt.resolve(o,Wt.join("src","default","index.js"));Jt.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:Kt.dump(o)},s=this.#t.templateDir,n=Ht.compile(Jt.readFileSync(Wt.resolve(s,`${e}.njk`),"utf8"),this.#o).render(r),i=this.#t.projectDir,c=Wt.resolve(i,`${e}`);Jt.writeFileSync(c,n,"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 ua.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 ua.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 ma({...this.#y,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await ua.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await ua.update(o,{id:o.id})):o=await ua.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(ha.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 ia(this.#y),await na(this.#y),await sa(this.#y),await ra(this.#y),await aa(this.#y),await ea(this.#y),await oa(this.#y),await ta(this.#y),await ca(this.#y),await la(this.#y),this.#g&&(await pa(this.#y),await da(this.#y),this.#f&&await this.deploy())),await this._cache_set(this.#l,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e.message||e}),console.log(e),e}}};const ba=p,va=d;var ja=function({baseDir:e=__dirname}){let t=e;for(;t!==va.parse(t).root;){const e=va.join(t,"node_modules");if(ba.existsSync(e))return e;t=va.dirname(t)}return null};const xa=process.cwd(),{spawn:Da}=e;t({name:["redis"],dir:xa,optional:!0});const ka=a,Aa=o,{hideBin:Pa}=r,Sa=s,Ia=n,Ea=i,$a=c,Ta=l,Oa=_a,Ca=ja({baseDir:__dirname}),Ma="win32"===process.platform?";":":";async function Ra(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:ka.resolve(Ca,"./@fnet/cli-project-common/dist/template/default"),projectDir:ka.resolve(xa,`./.output/${e.id}`),coreDir:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/core")};{const t=await async function(){const e=ka.resolve(xa,"node.yaml");if(!Sa.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Sa.readFileSync(e,"utf8"),{parsed:a}=await $a({content:t}),o=ka.dirname(e),r={libraryAtom:{doc:{...a},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},s=ka.resolve(o,"node.devops.yaml");if(Sa.existsSync(s)){const e=Sa.readFileSync(s,"utf8"),t=Ia.parse(e);r.devops={filePath:s,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Sa.writeFileSync(r.devops.filePath,Ia.stringify(r.devops.doc))}}}const n=ka.resolve(o,"readme.md");if(Sa.existsSync(n)){const e=Sa.readFileSync(n,"utf8");r.readme={filePath:n,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return r}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:ka.resolve(Ca,"./@fnet/cli-project-common/dist/template/default"),coreDir:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/core"),projectDir:ka.resolve(t.projectDir,"./.workspace"),projectSrcDir:ka.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${ka.join(Ca,"/.bin")}${Ma}${process.env.PATH}`,Aa(Pa(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=ka.resolve(Ca,"@fnet/cli-project-node/dist/template/project"),a=ka.resolve(xa,e.name);Sa.existsSync(a)||Sa.mkdirSync(a),await Ta({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=Ea.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Ea.which("git")&&(o=Ea.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(Ea.which("code")&&e.vscode&&(o=Ea.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=ka.resolve(Ca,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=ka.basename(a),e.update){if(await Ta({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==Ea.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 Ra(e),a=new Oa(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 Ra({...e,mode:"all"}),a=new Oa(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 Ra({...e,mode:"file"}),a=new Oa(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("npm [commands..]","npm - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ra(e),{projectDir:a}=t,o=`npm ${process.argv.slice(3).join(" ")}`;Ea.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ra(e),{projectDir:a}=t,o=`node ${process.argv.slice(3).join(" ")}`;Ea.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ra(e),{projectDir:a}=t,o=`npm run serve -- ${process.argv.slice(3).join(" ")}`;Ea.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ra(e),{projectDir:a}=t,o=`npm run watch -- ${process.argv.slice(3).join(" ")}`;Ea.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ra(e),{projectDir:a}=t,o=`npm run app -- ${process.argv.slice(3).join(" ")}`;Ea.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ra(e),{projectDir:a}=t,o=process.argv.slice(3);Da("npm",["run","cli","--",...o],{cwd:a,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}})).demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e=require("child_process"),t=require("@fnet/config"),o=require("path"),n=require("yargs/yargs"),i=require("yargs/helpers"),r=require("fs"),s=require("yaml"),a=require("shelljs"),c=require("@fnet/yaml"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),f=require("js-yaml"),m=require("nunjucks"),u=require("lodash.clonedeep"),h=require("isobject"),w=require("redis"),y=require("@flownet/lib-is-redis-online"),g=require("nanoid"),b=require("@flownet/lib-atom-api-js"),v=require("axios"),x=require("qs"),_=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),k=require("@flownet/lib-list-npm-versions"),D=require("@fnet/shell"),P=require("semver"),S=require("node:os"),A=require("@node-red/util"),T=require("@flownet/lib-to-ios-app"),E=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),$=require("@flownet/lib-to-webos"),O=require("@flownet/lib-to-nextjs"),C=require("@flownet/lib-to-docker"),N=require("form-data"),M=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-bpmn-from-flow"),R=require("@fnet/expression"),q=require("chalk"),U=require("lodash.pick"),B=require("lodash.omit");const L=w,z=y;const{Api:J}=b,W=v.default,K=x;const G=_,H=r,V=o,X=j;function Y({dir:e,name:t="index"}){let o=V.resolve(e,`./${t}.tsx`);if(H.existsSync(o)||(o=V.resolve(e,`./${t}.ts`)),H.existsSync(o)||(o=V.resolve(e,`./${t}.jsx`)),H.existsSync(o)||(o=V.resolve(e,`./${t}.js`)),!H.existsSync(o))return{};const n=o,i=V.extname(o);return{file:n,ext:i,ts:".ts"===i||".tsx"===i,name:t}}const Z=k;const Q=p,ee=d,te=l;const oe=m,ne=p,ie=d,re=j,se=k;const ae=p,ce=d,le=l;const pe=p,de=d,fe=m,me=j;const ue=p,he=d,we=m;const ye=p,ge=d,be=m;const ve=p,xe=d,_e=m;const je=m,ke=p,De=d;const Pe=a,Se=o;const Ae=a;const Te=a;const Ee=a;const Ie=D,$e=t;const Oe=p,Ce=d,Ne=P,Me=D,Fe=t;const Re=p,qe=d,Ue=P,Be=a,Le=t;const ze=p,Je=d,We=S,Ke=m,Ge=A,He=t;const Ve=r,Xe=o,Ye=t;const Ze=T;const Qe=E;const et=I;const tt=$;const ot=O,nt=u,it=_,rt=P,st=d;const at=C,ct=u,lt=_,pt=P,dt=d;const ft=p,mt=d,ut=P,ht=D,wt=t,yt=v.default;const gt=P,bt=t,vt=v.default;const xt=P,_t=t,jt=v.default,kt=r,Dt=D,Pt=N;const St=P,At=t,Tt=v.default,Et=r,It=D,$t=N;const Ot=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const r=t.projectDir;let s="fnet-to-gitlab";const a=n.params.config||"gitlab",c=await $e({name:a,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${a}`);const{data:l}=c.data;s+=` --projectGroupId=${l.projectGroupId}`,s+=` --projectPath='${r}'`,s+=` --projectName='${n.params.name}'`,s+=` --projectBranch='${n.params.branch||"main"}'`,s+=` --gitlabHost='${l.gitlabHost}'`,s+=` --gitlabToken='${l.gitlabToken}'`,s+=` --gitlabUsername='${l.gitlabUsername}'`,s+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==n.dryRun&&(await Ie({cmd:s}),o.isDirty=!0)},Ct=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as gcs package."});const r=t.projectDir,s=Ce.resolve(r,"package.json"),a=Oe.readFileSync(s),c=JSON.parse(a);c.name=n.params.name,c.version=Ne.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,Oe.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Fe({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='${Ce.resolve(Ce.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${r}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(d+=` --domain='${p.env.DOMAIN}'`),!0!==n.dry_run&&!0!==n.params.dry_run||(d+=" --dryRun"),await Me({cmd:d}),Oe.writeFileSync(s,a),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=c.version,await i({target:n,packageJSON:c}))},Nt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as npm package."});const r=o.projectDir,s=qe.resolve(r,"package.json"),a=Re.readFileSync(s),c=JSON.parse(a);c.name=i.params.name,c.version=Ue.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 ."},Re.writeFileSync(s,JSON.stringify(c,null,"\t"));const p=(await Le({name:o.npmConfig||"npm",dir:o.projectDir}))?.data;if(Re.writeFileSync(qe.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==Be.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");Re.writeFileSync(s,a),n.isDirty=!0,i.params.version=c.version},Mt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:r,packageDependencies:s,njEnv:a})=>{await t({message:"Deploying it as node-red flow."});const c=o.projectDir,l=o.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Ge.util.generateId(),label:`${p}/${e.id?e.id:We.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Ge.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Je.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Ge.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Ge.util.generateId()}}};else if("cronjob"===i.deploy.template){let t=i.params?.schedules?cloneDeep(i.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Ge.util.generateId(),label:`${p}/${e.id?e.id:We.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Ge.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Je.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Ge.util.generateId(),schedules:t},debug:{id:Ge.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Ge.util.generateId(),label:`${p}/${e.id?e.id:We.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Ge.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Je.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Ge.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Ge.util.generateId()},debug:{id:Ge.util.generateId()}}}}let f=Ke.compile(ze.readFileSync(Je.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),a).render(d);if(ze.writeFileSync(Je.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;n.isDirty=!0;const m=(await He({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}},Ft=async({atom:e,Atom:t,setInProgress:o,context:n,packageDependencies:i,deploymentProject:r,deploymentProjectTarget:s})=>{await o({message:"Deploying it as workflow lib."});const a=(await Ye({name:"atom",dir:n.projectDir}))?.data;let c,l,p,d=s.deploy.name.split("/");if(1===d.length)l=a.env.ATOM_LIBRARIES_ID,p=s.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:a.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===s.dryRun)return;if(r.isDirty=!0,s.deploy.id){if(c=await t.get({id:s.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;s.deploy.id=c.id}const f=n.projectDir;c.doc.contents=[{content:Ve.readFileSync(Xe.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Ve.readFileSync(Xe.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Ve.readFileSync(Xe.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})},Rt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:r,registerToPackageManager:s})=>{await t({message:"Deploying it as ios app package."});const a=o.projectDir;if(!0===i.dryRun)return;const c={projectDir:a,dest:a,atom:e,params:i.params};await Ze(c),n.isDirty=!0},qt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:r})=>{await t({message:"Deploying it as macos app package."});const s=o.projectDir;if(!0===i.dryRun)return;const a={projectDir:s,dest:s,atom:e,params:i.params};await Qe(a),n.isDirty=!0},Ut=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:r})=>{await t({message:"Deploying it as electron package."});const s=o.projectDir;if(!0===i.dryRun)return;const a={src:s,dest:s,atom:e,params:i.params};await et(a),n.isDirty=!0},Bt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as webos package."});const r=o.projectDir;if(!0===i.dryRun)return;const s={src:r,dest:r,atom:e,params:i.params};await tt(s),n.isDirty=!0},Lt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as nextjs package."});t.params=it({name:"nextjs-app",version:"0.1.0"},t.params);const r=rt.inc(t.params.version,"patch");t.params.version=r;const s=nt(t);s.params.dependencies=nt(i);const a={atom:e,target:s.params,projectDir:n,renderDir:st.resolve(n,"nextjs")};return{deployer:await ot(a)}},zt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as docker package."});t.params=lt({},t.params);const r=pt.inc(t.params.version,"patch");t.params.version=r;const s=ct(t);s.params.dependencies=ct(i);const a={atom:e,target:s.params,projectDir:n,renderDir:dt.resolve(n,"docker")};return{deployer:await at(a)}},Jt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as fnet package."});const r=t.projectDir,s=mt.resolve(r,"package.json"),a=ft.readFileSync(s),c=JSON.parse(a);c.name=n.params.name,c.version=ut.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,ft.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await wt({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 yt({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='${mt.resolve(mt.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,w+=` --dir='${r}'`,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 ht({cmd:w}),ft.writeFileSync(s,a),!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 yt({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.")},Wt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet form."});const i=gt.inc(n.params.version,"patch"),{file:r,data:s}=await bt({name:n.config||"fnet-form",dir:t.projectDir});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const a=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await vt({method:"POST",url:a,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 ${a}`);o.isDirty=!0,n.params.version=i;const f=`${s.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await vt({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.")},Kt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet flow."});const i=xt.inc(n.params.version,"patch"),{file:r,data:s}=await _t({name:n.config||"fnet-flow",dir:t.project.projectDir});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const a=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await jt({method:"POST",url:a,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 ${a}`);o.isDirty=!0,n.params.version=i;const f=`${s.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await jt({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 Dt({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).zip_file_path;let y=new Pt;y.append("file",kt.createReadStream(w));const g=await jt.request({method:"POST",maxBodyLength:1/0,url:`${s.env.ATOM_API_URL}/v1/service/upload/single/${m}`,headers:{...y.getHeaders(),Authorization:`Bearer ${d}`},data:y});if(g.data?.error)throw new Error("Error uploading fnet flow.")},Gt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet node."});const i=St.inc(n.params.version,"patch"),{file:r,data:s}=await At({name:n.config||"fnet-node",dir:t.project.projectDir});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const a=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await Tt({method:"POST",url:a,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 ${a}`);o.isDirty=!0,n.params.version=i;const f=`${s.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await Tt({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 It({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).zip_file_path;let y=new $t;y.append("file",Et.createReadStream(w));const g=await Tt.request({method:"POST",maxBodyLength:1/0,url:`${s.env.ATOM_API_URL}/v1/service/upload/single/${m}`,headers:{...y.getHeaders(),Authorization:`Bearer ${d}`},data:y});if(g.data?.error)throw new Error("Error uploading fnet node.")};const Ht=u;async function Vt({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Ht(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||Ht(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await t({node:e}),o({node:e})}var Xt={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 r={name:n.condition||i,childs:[],parent:e,definition:n,index:e.childs.length,context:{}};e.childs.push(r),await t({node:r})}e.resolve=Vt},resolve:Vt};const Yt=R,Zt=Xt;var Qt={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>Yt({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=>Yt({expression:e})))),i=[],r=n.find((e=>"if"===e?.processor)),s=t.definition[r.expression];i.push({name:`${t.name}_if`,definition:s,processor:r}),delete t.definition[r.expression];const a=n.filter((e=>"elseif"===e?.processor));let c=0;for(const e of a){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 Zt.init(e)}};const eo=u;async function to({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||eo(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||eo(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var oo={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=to},resolve:to};const no=u;async function io({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=no(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],r=t[o],s={key:await n(o),value:await n(r)};i.assign[e]=s}await t({node:e}),o({node:e})}var ro={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=io},resolve:io};const so=u,ao=U,co=B;async function lo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||so(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await t({node:e}),o({node:e})}var po={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]=[ao(e.definition.for,t),co(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],r={name:i,childs:[],parent:e,definition:n[i],index:e.childs.length,context:{}};e.childs.push(r),await t({node:r})}e.resolve=lo},resolve:lo};var fo={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 mo=u;async function uo({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||mo(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var ho={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=uo},resolve:uo};const wo=u;async function yo({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||wo(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var go={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=yo},resolve:yo};const bo=u;async function vo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||bo(e.definition);const i=e.context.transform;i.args&&(i.args=await n(i.args)),i.result&&(i.result=await n(i.result));const r=e.workflow.parent;e.context.lib=r.context.libs.find((e=>e.name===i.call)),await t({node:e}),o({node:e})}var xo={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],r={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(r),await t({node:r})}e.resolve=vo},resolve:vo};const _o=xo;var jo={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 _o.init(e)}};const ko=xo;var Do={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 ko.init(e)}};const Po=xo;var So={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 Po.init(e)}};async function Ao({node:e}){e.context.next=e.childs[0]}var To={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=Ao},resolve:Ao};const Eo=u;async function Io({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Eo(e.definition);const i=e.context.transform;i.props&&(i.props=await n(i.props));const r=e.workflow.parent;e.context.lib=r.context.libs.find((e=>e.name===i.form)),await t({node:e}),o({node:e})}var $o={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],r={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(r),await t({node:r})}e.resolve=Io},resolve:Io};const Oo=u;async function Co({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||Oo(e.definition),await t({node:e})}var No={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Co},resolve:Co};const Mo=u;async function Fo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Mo(e.definition);const i=e.context.transform;i.next=await n(i.next),await t({node:e}),o({node:e})}var Ro={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Fo},resolve:Fo};const qo=xo;var Uo={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 qo.init(e)}};const Bo=xo;var Lo={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 Bo.init(e)}};const zo=xo;var Jo={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 zo.init(e)}};const Wo=p,Ko=d,Go=f,Ho=a,Vo=m,Xo=u,Yo=h,Zo=async()=>{if(!await z({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=L.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Qo}=g,en=class{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(J.set_api_url(e.data.url),t)return J.set_req_token(t),void o(t);W({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:K.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{J.set_req_token(e.data.access_token),o(e.data.access_token)})).catch((e=>{J.set_req_token(),n(e)}))}))}},tn=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=V.resolve(t.project.projectDir),i=Y({dir:V.resolve(n,"./app")});if(i.file){let e=await X({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 X({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 r=Y({dir:V.resolve(n,"./cli")});if(r.file){let e=await X({file:r.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 X({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.cli_entry_uses_jsx=t,o.cli_entry_is_ts=r.ts,o.cli_entry_ext=r.ext}if("workflow.lib"===e.type){const e=Y({dir:V.resolve(n,"./src")});if(e.file){let t=await X({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 X({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.src_entry_uses_jsx=n,o.src_entry_is_ts=e.ts,o.src_entry_ext=e.ext}}const s=!0===o.app_has_entry||!0===o.src_uses_jsx,a=!0===o.cli_has_entry||!0===o.src_uses_jsx;o.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===o.form||!0===o.form?.enabled,o.multiple_enabled=o.multiple_enabled||!0===o.multiple||!0===o.multiple?.enabled,!1===o.app?o.app={enabled:!1}:!0===o.app?o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:s}:o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:s,...o.app||{}},o.app.enabled=!0===o.app.enabled&&(!0===e.doc.features.form_enabled||!0===o.app.extend||!0===o.app.enabled),o.app.format=o.app.format||"esm",o.app.folder=o.app.folder||o.app.format||"default",!1===o.cli?o.cli={enabled:!1}:!0===o.cli?o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:a}:o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:a,...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:`${V.normalize(o.app.dir||".")}`,files:[V.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=G(p,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=G({},o.replace_options||o.replace?.options||{}),o.terser_options=G({},o.terser_options||o.terser?.options||{}),o.css_options=G({},o.css_options||o.css?.options||{}),o.wasm_options=G({},o.wasm_options||o.wasm?.options||{}),o.copy_options=G(l,o.copy_options||o.copy?.options||{}),o.json_options=G({},o.json_options||o.json?.options||{}),o.image_options=G({},o.image_options||o.image?.options||{}),o.analyzer_options=G({summaryOnly:!0,limit:12},o.analyzer_options||o.analyzer?.options||{}),o.visualizer_options=G({},o.visualizer_options||o.visualizer?.options||{}),o.string_options=G({},o.string_options||o.string?.options||{}),o.rollup=o.rollup||{},o.rollup_output=G(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=G(o.browsersync_options,t.browsersync_options),t.replace_options=G(o.replace_options,t.replace_options),t.terser_options=G(o.terser_options,t.terser_options),t.css_options=G(o.css_options,t.css_options),t.wasm_options=G(o.wasm_options,t.wasm_options),t.copy_options=G(o.copy_options,t.copy_options),t.json_options=G(o.json_options,t.json_options),t.image_options=G(o.image_options,t.image_options),t.analyzer_options=G(o.analyzer_options,t.analyzer_options),t.visualizer_options=G(o.visualizer_options,t.visualizer_options),t.string_options=G(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},on=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 Z({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"})},nn=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()},r=o.templateDir,s=ee.resolve(o.projectDir,"src/app");Q.existsSync(s)||Q.mkdirSync(s,{recursive:!0}),await te({pattern:["index.html.njk","index.js.njk"],dir:ee.resolve(r,"src/app"),outDir:s,context:i})},rn=async({atom:e,context:t,packageDependencies:o,packageDevDependencies:n,setInProgress:i})=>{await i({message:"Creating package.json."});const r=o.find((e=>"react"===e.package)),s=o.find((e=>"react-dom"===e.package));r&&!s?o.push({package:"react-dom",version:r.version}):r&&s&&(s.version=r.version),r&&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 a=[];!0===e.doc.features.app.enabled&&a.push(ie.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&a.push(ie.resolve(t.projectDir,"src/cli/index.js"));for await(const t of a){const i=t;if(!ne.existsSync(i))throw new Error(`App file not found: ${i}`);const r=await re({file:i,recursive:!0}),s=!0===e.doc.features.all_parsed_imports?r.all:r.required;for await(const e of s){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;if(n.find((t=>t.package===e.package)))continue;const t=(await se({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=oe.compile(ne.readFileSync(ie.resolve(l,"package.json.njk"),"utf8"),oe.configure(l)).render(c),d=t.projectDir,f=ie.resolve(d,"package.json");ne.writeFileSync(f,p,"utf8")},sn=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},r=o.templateDir,s=ce.resolve(o.projectDir,"src/cli");ae.existsSync(s)||ae.mkdirSync(s,{recursive:!0}),await le({pattern:["index.js.njk"],dir:ce.resolve(r,"src/cli"),outDir:s,context:i})},an=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:n},r=de.resolve(o.projectDir,"src","default/index.js");if(!pe.existsSync(r))throw new Error(`Entry file not found: ${r}`);const s=(await me({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),a=e.doc.features.rollup_output,c=Object.keys(a);for(let e=0;e<c.length;e++){const t=a[c[e]];if(!0===t.browser&&s.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(s.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<s.length;e++){const o=s[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(s)}}const l=o.templateCommonDir,p=fe.compile(pe.readFileSync(de.resolve(l,"rollup.config.js.njk"),"utf8"),fe.configure(l)).render(i),d=o.projectDir,f=de.resolve(d,"rollup.config.js");pe.writeFileSync(f,p,"utf8")},cn=async({atom:e,setInProgress:t,context:o,njEnv:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const i={},r=e.doc.inputs||[],s=[];r.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&s.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 a={options:i,imports:s,atom:e},c=o.templateDir,l=we.compile(ue.readFileSync(he.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),n).render(a),p=o.projectDir,d=he.resolve(p,"src/default/to.yargs.js");ue.writeFileSync(d,l,"utf8")},ln=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},r=o.templateCommonDir,s=be.compile(ye.readFileSync(ge.resolve(r,".gitignore.njk"),"utf8"),be.configure(r)).render(i),a=o.projectDir,c=ge.resolve(a,".gitignore");ye.writeFileSync(c,s,"utf8")},pn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:n},r=o.templateCommonDir,s=_e.compile(ve.readFileSync(xe.resolve(r,"tsconfig.json.njk"),"utf8"),_e.configure(r)).render(i),a=o.projectDir,c=xe.resolve(a,"tsconfig.json");ve.writeFileSync(c,s,"utf8")},dn=async({atom:e,context:t,setInProgress:o,Atom:n})=>{const i="readme.md",r=`Creating ${i}`;if(await o({message:r}),t.project?.readme){const e={content:t.project.readme.doc.content},o=t.templateCommonDir,n=je.compile(ke.readFileSync(De.resolve(o,`${i}.njk`),"utf8"),je.configure(o)).render(e),r=t.projectDir,s=De.resolve(r,`${i}`);ke.writeFileSync(s,n,"utf8")}else if(e.id){const o=await n.first({type:"wiki",parent_id:e.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:r,...s}=o.doc,a={content:r},c=t.templateCommonDir,l=je.compile(ke.readFileSync(De.resolve(c,`${i}.njk`),"utf8"),je.configure(c)).render(a),p=t.projectDir,d=De.resolve(p,`${i}`);ke.writeFileSync(d,l,"utf8")}},fn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});let n=Se.join("src","**","*");if(0!==Pe.exec(`prettier --write ${n} *.{js,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o}).code)throw new Error("Couldnt format files.")},mn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Creating .d.ts"});if(0!==Ae.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},un=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==Te.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},hn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==Ee.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},wn=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:r}=e;if(!0===i.enabled)if("lib"===i.name)await Ft({...e});else if("red"===i.name)await Mt({...e});else if("npm"===i.name)await Nt({...e});else if("gcs"===i.name)await Ct({...e});else if("gitlab"===i.name)await Ot({...e});else if("macos-app"===i.name)await qt({...e});else if("ios-app"===i.name)await Rt({...e});else if("electron"===i.name)await Ut({...e});else if("webos"===i.name)await Bt({...e});else if("fnet-package"===i.name)await Jt({...e});else if("fnet-form"===i.name)await Wt({...e});else if("fnet-node"===i.name)await Gt({...e});else if("fnet-flow"===i.name)await Kt({...e});else{let e;if("nextjs"===i.name?e=Lt:"docker"===i.name&&(e=zt),!e)return;await e({atom:t,target:i,onProgress:r,projectDir:n.projectDir,dependencies:o})}},{Atom:yn}=b,gn=M,bn=k,vn=F,xn=t,_n=j,jn=R,kn=c,Dn=q,Pn=Qt,Sn=oo,An=ro,Tn=po,En=Xt,In=fo,$n=ho,On=go,Cn=xo,Nn=jo,Mn=Do,Fn=So,Rn=To,qn=$o,Un=No,Bn=Ro,Ln=Uo,zn=Lo,Jn=Jo,Wn=({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 Kn=class{#e;#t;#o;#n;#i;#r;#s;#a;#c;#l;#p;#d;#f;#m;#u;#h;#w;#y;#g;#b;#v;constructor(e){this.#e=new en,this.#t=e,this.#r=[],this.#s=[],this.#a={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#b={packageDependencies:this.#r,packageDevDependencies:this.#s,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:yn,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#v={initNode:this.initNode.bind(this),cloneDeep:Xo,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Wn,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 Zo(),this.#p=this.#t.buildId||Qo(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 xn({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await tn(this.#b),await on(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.#r}),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 yn.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await kn({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.#r.push({package:"get-value",version:"^3.0"}),this.#r.push({package:"set-value",version:"^4.1"}),this.#o.doc.features.form_enabled?(this.#r.push({package:"react",version:"^18.2"}),this.#r.push({package:"react-dom",version:"^18.2"}),this.#r.push({package:"@flownet/react-app",version:"^0.1"}),this.#r.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#r.push({package:"yargs",version:"^17"}),this.#r.push({package:"chalk",version:"^4"})}#x(e){Wo.statSync(e).isDirectory()?(Wo.readdirSync(e).forEach((t=>{const o=Ko.join(e,t);this.#x(o)})),Wo.rmdirSync(e)):Wo.unlinkSync(e)}#_(e,t){const o=Wo.existsSync(e),n=o&&Wo.statSync(e);o&&n.isDirectory()?(Wo.mkdirSync(t,{recursive:!0}),Wo.readdirSync(e).forEach((o=>{this.#_(Ko.join(e,o),Ko.join(t,o))}))):Wo.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,o=["node_modules"];if(Wo.existsSync(e)){const t=Wo.readdirSync(e);for(const n of t)if(!o.includes(n)){const t=Ko.join(e,n);this.#x(t)}}Wo.existsSync(e)||Wo.mkdirSync(e,{recursive:!0});const n=Ko.join(e,"src");Wo.existsSync(n)||Wo.mkdirSync(n,{recursive:!0});const i=Ko.join(n,"core");this.#_(t,i);const r=Ko.join(n,"default","blocks");Wo.existsSync(r)||Wo.mkdirSync(r,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=Vo.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 Sn.hits(t))await Sn.init(t);else if(await Tn.hits(t))await Tn.init(t);else if(await En.hits(t))await En.init(t);else if(await Pn.hits(t))await Pn.init(t);else if(await In.hits(t))await In.init(t);else if(await An.hits(t))await An.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 Cn.hits(t))await Cn.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 zn.hits(t))await zn.init(t);else if(await Jn.hits(t))await Jn.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 Ln.hits(t))await Ln.init(t);else if(await Rn.hits(t))await Rn.init(t);else{if(!await Bn.hits(t))throw new Error("Undefined step type.");await Bn.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=Ko.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=Qo(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 r=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));r?.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=gn({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 yn.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await yn.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await yn.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=Ko.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await _n({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 bn({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 bn({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=Xo(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=Ko.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=Ko.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!Wo.existsSync(e)){Wo.mkdirSync(Ko.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Wo.writeFileSync(e,t,"utf8")}o.relativePath=t.split(Ko.sep).join("/"),this.#o.typesDir=`./types/${Ko.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;Wo.writeFileSync(Ko.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=Vo.compile(Wo.readFileSync(Ko.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=Ko.resolve(n,"src/default/index.js");Wo.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=Vo.compile(Wo.readFileSync(Ko.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=Ko.resolve(n,`src/default/${e.codeKey}.js`);Wo.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.#a[e.type];if(t)return t;const o=this.#t.templateDir;return t=Vo.compile(Wo.readFileSync(Ko.resolve(o,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#i),this.#a[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,o=`${e.codeKey}.js`,n=Ko.resolve(t,`src/default/blocks/${o}`);Wo.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(Yo(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 jn({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:Go.dump(n)},r=this.#t.templateDir,s=Vo.compile(Wo.readFileSync(Ko.resolve(r,`${e}.njk`),"utf8"),this.#i).render(i),a=this.#t.projectDir,c=Ko.resolve(a,`${e}`);Wo.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:Go.dump(this.#n)},n=this.#t.templateDir,i=Vo.compile(Wo.readFileSync(Ko.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),r=this.#t.projectDir,s=Ko.resolve(r,`${e}`);Wo.writeFileSync(s,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=Ho.exec("prettier --write .",{cwd:Ko.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 yn.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 yn.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 wn({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await yn.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await yn.update(n,{id:n.id})):n=await yn.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(Dn.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 vn({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;Wo.writeFileSync(Ko.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 dn(this.#b),await pn(this.#b),await ln(this.#b),await cn(this.#b),await sn(this.#b),await nn(this.#b),await an(this.#b),await rn(this.#b),await fn(this.#b),await mn(this.#b),this.#w&&(await un(this.#b),await hn(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 vn({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 Gn=p,Hn=d;var Vn=function({baseDir:e=__dirname}){let t=e;for(;t!==Hn.parse(t).root;){const e=Hn.join(t,"node_modules");if(Gn.existsSync(e))return e;t=Hn.dirname(t)}return null};const Xn=process.cwd(),{spawn:Yn}=e;t({name:["redis"],dir:Xn,optional:!0});const Zn=o,Qn=n,{hideBin:ei}=i,ti=r,oi=s,ni=a,ii=c,ri=l,si=Kn,ai=Vn({baseDir:__dirname}),ci="win32"===process.platform?";":":";async function li(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:Zn.resolve(Xn,`./.output/${e.id}`),templateDir:Zn.resolve(ai,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Zn.resolve(ai,"./@fnet/cli-project-common/dist/template/default"),coreDir:Zn.resolve(ai,"./@fnet/cli-project-flow/dist/template/core")}}{const t=await async function(e){const t=Zn.resolve(Xn,"flow.yaml");if(!ti.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const o=ti.readFileSync(t,"utf8"),{parsed:n}=await ii({content:o}),i=Zn.dirname(t),r=n.main||"flow.main.yaml";let s=Zn.resolve(i,r);if(!ti.existsSync(s)&&(s=Zn.resolve(i,r+".yaml"),!ti.existsSync(s)))throw new Error(`${r} file not found in ${s}.`);const a=ti.readFileSync(s,"utf8"),{parsed:c}=await ii({content:a}),l={workflowAtom:{doc:{...n,"content-type":"yaml",content:a}},projectDir:i,projectFilePath:t,projectFileContent:o,projectFileParsed:n,projectMainFilePath:s,projectMainFileContent:a,projectMainFileParsed:c},p=Zn.resolve(i,"flow.devops.yaml");if(ti.existsSync(p)){const e=ti.readFileSync(p,"utf8"),t=oi.parse(e);l.devops={filePath:p,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{ti.writeFileSync(l.devops.filePath,oi.stringify(l.devops.doc))}}}const d=Zn.resolve(i,"readme.md");if(ti.existsSync(d)){const e=ti.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:Zn.resolve(ai,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Zn.resolve(ai,"./@fnet/cli-project-common/dist/template/default"),coreDir:Zn.resolve(ai,"./@fnet/cli-project-flow/dist/template/core"),projectDir:Zn.resolve(t.projectDir,"./.workspace"),projectSrcDir:Zn.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${Zn.join(ai,"/.bin")}${ci}${process.env.PATH}`,Qn(ei(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=Zn.resolve(ai,"./@fnet/cli-project-flow/dist/template/project"),o=Zn.resolve(Xn,e.name);ti.existsSync(o)||ti.mkdirSync(o),await ri({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0});let n=ni.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(ni.which("git")&&(n=ni.exec("git init",{cwd:o}),0!==n.code))throw new Error("Failed to initialize git.");if(ni.which("code")&&e.vscode&&(n=ni.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=Zn.resolve(ai,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd();if(e.name=Zn.basename(o),e.update){if(await ri({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0}),0!==ni.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 li(e),o=new si(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 li({...e,mode:"all"}),o=new si(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 li({...e,mode:"file"}),o=new si(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("npm [commands..]","npm - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await li(e),{projectDir:o}=t,n=`npm ${process.argv.slice(3).join(" ")}`;ni.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await li(e),{projectDir:o}=t,n=`node ${process.argv.slice(3).join(" ")}`;ni.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await li(e),{projectDir:o}=t,n=`npm run serve -- ${process.argv.slice(3).join(" ")}`;ni.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await li(e),{projectDir:o}=t,n=`npm run watch -- ${process.argv.slice(3).join(" ")}`;ni.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await li(e),{projectDir:o}=t,n=`npm run app -- ${process.argv.slice(3).join(" ")}`;ni.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await li(e),{projectDir:o}=t,n=process.argv.slice(3);Yn("npm",["run","cli","--",...n],{cwd:o,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}})).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"),r=require("fs"),s=require("yaml"),a=require("shelljs"),c=require("@fnet/yaml"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),f=require("js-yaml"),m=require("nunjucks"),u=require("lodash.clonedeep"),h=require("isobject"),w=require("redis"),y=require("@flownet/lib-is-redis-online"),g=require("nanoid"),b=require("@flownet/lib-atom-api-js"),v=require("axios"),x=require("qs"),_=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),k=require("@flownet/lib-list-npm-versions"),D=require("@fnet/shell"),P=require("semver"),S=require("node:os"),A=require("@node-red/util"),T=require("@flownet/lib-to-ios-app"),E=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),$=require("@flownet/lib-to-webos"),O=require("@flownet/lib-to-nextjs"),C=require("@flownet/lib-to-docker"),N=require("form-data"),M=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-bpmn-from-flow"),R=require("@fnet/expression"),q=require("chalk"),U=require("lodash.pick"),B=require("lodash.omit");const L=w,z=y;const{Api:J}=b,W=v.default,K=x;const G=_,H=r,V=o,X=j;function Y({dir:e,name:t="index"}){let o=V.resolve(e,`./${t}.tsx`);if(H.existsSync(o)||(o=V.resolve(e,`./${t}.ts`)),H.existsSync(o)||(o=V.resolve(e,`./${t}.jsx`)),H.existsSync(o)||(o=V.resolve(e,`./${t}.js`)),!H.existsSync(o))return{};const n=o,i=V.extname(o);return{file:n,ext:i,ts:".ts"===i||".tsx"===i,name:t}}const Z=k;const Q=p,ee=d,te=l;const oe=m,ne=p,ie=d,re=j,se=k;const ae=p,ce=d,le=l;const pe=p,de=d,fe=m,me=j;const ue=p,he=d,we=m;const ye=p,ge=d,be=m;const ve=p,xe=d,_e=m;const je=m,ke=p,De=d;const Pe=a,Se=o;const Ae=a;const Te=a;const Ee=a;const Ie=D,$e=t;const Oe=p,Ce=d,Ne=P,Me=D,Fe=t;const Re=p,qe=d,Ue=P,Be=a,Le=t;const ze=p,Je=d,We=S,Ke=m,Ge=A,He=t;const Ve=r,Xe=o,Ye=t;const Ze=T;const Qe=E;const et=I;const tt=$;const ot=O,nt=u,it=_,rt=P,st=d;const at=C,ct=u,lt=_,pt=P,dt=d;const ft=p,mt=d,ut=P,ht=D,wt=t,yt=v.default;const gt=P,bt=t,vt=v.default;const xt=P,_t=t,jt=v.default,kt=r,Dt=D,Pt=N;const St=P,At=t,Tt=v.default,Et=r,It=D,$t=N;const Ot=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const r=t.projectDir;let s="fnet-to-gitlab";const a=n.params.config||"gitlab",c=await $e({name:a,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${a}`);const{data:l}=c.data;s+=` --projectGroupId=${l.projectGroupId}`,s+=` --projectPath='${r}'`,s+=` --projectName='${n.params.name}'`,s+=` --projectBranch='${n.params.branch||"main"}'`,s+=` --gitlabHost='${l.gitlabHost}'`,s+=` --gitlabToken='${l.gitlabToken}'`,s+=` --gitlabUsername='${l.gitlabUsername}'`,s+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==n.dryRun&&(await Ie({cmd:s}),o.isDirty=!0)},Ct=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as gcs package."});const r=t.projectDir,s=Ce.resolve(r,"package.json"),a=Oe.readFileSync(s),c=JSON.parse(a);c.name=n.params.name,c.version=Ne.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,Oe.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Fe({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='${Ce.resolve(Ce.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${r}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(d+=` --domain='${p.env.DOMAIN}'`),!0!==n.dry_run&&!0!==n.params.dry_run||(d+=" --dryRun"),await Me({cmd:d}),Oe.writeFileSync(s,a),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=c.version,await i({target:n,packageJSON:c}))},Nt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as npm package."});const r=o.projectDir,s=qe.resolve(r,"package.json"),a=Re.readFileSync(s),c=JSON.parse(a);c.name=i.params.name,c.version=Ue.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 ."},Re.writeFileSync(s,JSON.stringify(c,null,"\t"));const p=(await Le({name:o.npmConfig||"npm",dir:o.projectDir}))?.data;if(Re.writeFileSync(qe.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==Be.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");Re.writeFileSync(s,a),n.isDirty=!0,i.params.version=c.version},Mt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:r,packageDependencies:s,njEnv:a})=>{await t({message:"Deploying it as node-red flow."});const c=o.projectDir,l=o.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Ge.util.generateId(),label:`${p}/${e.id?e.id:We.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Ge.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Je.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Ge.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Ge.util.generateId()}}};else if("cronjob"===i.deploy.template){let t=i.params?.schedules?cloneDeep(i.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Ge.util.generateId(),label:`${p}/${e.id?e.id:We.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Ge.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Je.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Ge.util.generateId(),schedules:t},debug:{id:Ge.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Ge.util.generateId(),label:`${p}/${e.id?e.id:We.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Ge.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Je.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Ge.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Ge.util.generateId()},debug:{id:Ge.util.generateId()}}}}let f=Ke.compile(ze.readFileSync(Je.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),a).render(d);if(ze.writeFileSync(Je.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;n.isDirty=!0;const m=(await He({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}},Ft=async({atom:e,Atom:t,setInProgress:o,context:n,packageDependencies:i,deploymentProject:r,deploymentProjectTarget:s})=>{await o({message:"Deploying it as workflow lib."});const a=(await Ye({name:"atom",dir:n.projectDir}))?.data;let c,l,p,d=s.deploy.name.split("/");if(1===d.length)l=a.env.ATOM_LIBRARIES_ID,p=s.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:a.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===s.dryRun)return;if(r.isDirty=!0,s.deploy.id){if(c=await t.get({id:s.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;s.deploy.id=c.id}const f=n.projectDir;c.doc.contents=[{content:Ve.readFileSync(Xe.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Ve.readFileSync(Xe.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Ve.readFileSync(Xe.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})},Rt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:r,registerToPackageManager:s})=>{await t({message:"Deploying it as ios app package."});const a=o.projectDir;if(!0===i.dryRun)return;const c={projectDir:a,dest:a,atom:e,params:i.params};await Ze(c),n.isDirty=!0},qt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:r})=>{await t({message:"Deploying it as macos app package."});const s=o.projectDir;if(!0===i.dryRun)return;const a={projectDir:s,dest:s,atom:e,params:i.params};await Qe(a),n.isDirty=!0},Ut=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:r})=>{await t({message:"Deploying it as electron package."});const s=o.projectDir;if(!0===i.dryRun)return;const a={src:s,dest:s,atom:e,params:i.params};await et(a),n.isDirty=!0},Bt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as webos package."});const r=o.projectDir;if(!0===i.dryRun)return;const s={src:r,dest:r,atom:e,params:i.params};await tt(s),n.isDirty=!0},Lt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as nextjs package."});t.params=it({name:"nextjs-app",version:"0.1.0"},t.params);const r=rt.inc(t.params.version,"patch");t.params.version=r;const s=nt(t);s.params.dependencies=nt(i);const a={atom:e,target:s.params,projectDir:n,renderDir:st.resolve(n,"nextjs")};return{deployer:await ot(a)}},zt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as docker package."});t.params=lt({},t.params);const r=pt.inc(t.params.version,"patch");t.params.version=r;const s=ct(t);s.params.dependencies=ct(i);const a={atom:e,target:s.params,projectDir:n,renderDir:dt.resolve(n,"docker")};return{deployer:await at(a)}},Jt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as fnet package."});const r=t.projectDir,s=mt.resolve(r,"package.json"),a=ft.readFileSync(s),c=JSON.parse(a);c.name=n.params.name,c.version=ut.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,ft.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await wt({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 yt({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='${mt.resolve(mt.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,w+=` --dir='${r}'`,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 ht({cmd:w}),ft.writeFileSync(s,a),!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 yt({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.")},Wt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet form."});const i=gt.inc(n.params.version,"patch"),{file:r,data:s}=await bt({name:n.config||"fnet-form",dir:t.projectDir});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const a=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await vt({method:"POST",url:a,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 ${a}`);o.isDirty=!0,n.params.version=i;const f=`${s.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await vt({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.")},Kt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet flow."});const i=xt.inc(n.params.version,"patch"),{file:r,data:s}=await _t({name:n.config||"fnet-flow",dir:t.project.projectDir});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const a=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await jt({method:"POST",url:a,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 ${a}`);o.isDirty=!0,n.params.version=i;const f=`${s.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await jt({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 Dt({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Pt;y.append("file",kt.createReadStream(w));const g=await jt.request({method:"POST",maxBodyLength:1/0,url:`${s.env.ATOM_API_URL}/v1/service/upload/single/${m}`,headers:{...y.getHeaders(),Authorization:`Bearer ${d}`},data:y});if(g.data?.error)throw new Error("Error uploading fnet flow.")},Gt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet node."});const i=St.inc(n.params.version,"patch"),{file:r,data:s}=await At({name:n.config||"fnet-node",dir:t.project.projectDir});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const a=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await Tt({method:"POST",url:a,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 ${a}`);o.isDirty=!0,n.params.version=i;const f=`${s.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await Tt({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 It({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new $t;y.append("file",Et.createReadStream(w));const g=await Tt.request({method:"POST",maxBodyLength:1/0,url:`${s.env.ATOM_API_URL}/v1/service/upload/single/${m}`,headers:{...y.getHeaders(),Authorization:`Bearer ${d}`},data:y});if(g.data?.error)throw new Error("Error uploading fnet node.")};const Ht=u;async function Vt({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Ht(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||Ht(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await t({node:e}),o({node:e})}var Xt={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 r={name:n.condition||i,childs:[],parent:e,definition:n,index:e.childs.length,context:{}};e.childs.push(r),await t({node:r})}e.resolve=Vt},resolve:Vt};const Yt=R,Zt=Xt;var Qt={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>Yt({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=>Yt({expression:e})))),i=[],r=n.find((e=>"if"===e?.processor)),s=t.definition[r.expression];i.push({name:`${t.name}_if`,definition:s,processor:r}),delete t.definition[r.expression];const a=n.filter((e=>"elseif"===e?.processor));let c=0;for(const e of a){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 Zt.init(e)}};const eo=u;async function to({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||eo(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||eo(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var oo={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=to},resolve:to};const no=u;async function io({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=no(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],r=t[o],s={key:await n(o),value:await n(r)};i.assign[e]=s}await t({node:e}),o({node:e})}var ro={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=io},resolve:io};const so=u,ao=U,co=B;async function lo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||so(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await t({node:e}),o({node:e})}var po={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]=[ao(e.definition.for,t),co(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],r={name:i,childs:[],parent:e,definition:n[i],index:e.childs.length,context:{}};e.childs.push(r),await t({node:r})}e.resolve=lo},resolve:lo};var fo={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 mo=u;async function uo({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||mo(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var ho={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=uo},resolve:uo};const wo=u;async function yo({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||wo(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var go={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=yo},resolve:yo};const bo=u;async function vo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||bo(e.definition);const i=e.context.transform;i.args&&(i.args=await n(i.args)),i.result&&(i.result=await n(i.result));const r=e.workflow.parent;e.context.lib=r.context.libs.find((e=>e.name===i.call)),await t({node:e}),o({node:e})}var xo={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],r={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(r),await t({node:r})}e.resolve=vo},resolve:vo};const _o=xo;var jo={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 _o.init(e)}};const ko=xo;var Do={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 ko.init(e)}};const Po=xo;var So={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 Po.init(e)}};async function Ao({node:e}){e.context.next=e.childs[0]}var To={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=Ao},resolve:Ao};const Eo=u;async function Io({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Eo(e.definition);const i=e.context.transform;i.props&&(i.props=await n(i.props));const r=e.workflow.parent;e.context.lib=r.context.libs.find((e=>e.name===i.form)),await t({node:e}),o({node:e})}var $o={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],r={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(r),await t({node:r})}e.resolve=Io},resolve:Io};const Oo=u;async function Co({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||Oo(e.definition),await t({node:e})}var No={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Co},resolve:Co};const Mo=u;async function Fo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Mo(e.definition);const i=e.context.transform;i.next=await n(i.next),await t({node:e}),o({node:e})}var Ro={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Fo},resolve:Fo};const qo=xo;var Uo={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 qo.init(e)}};const Bo=xo;var Lo={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 Bo.init(e)}};const zo=xo;var Jo={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 zo.init(e)}};const Wo=p,Ko=d,Go=f,Ho=a,Vo=m,Xo=u,Yo=h,Zo=async()=>{if(!await z({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=L.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Qo}=g,en=class{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(J.set_api_url(e.data.url),t)return J.set_req_token(t),void o(t);W({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:K.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{J.set_req_token(e.data.access_token),o(e.data.access_token)})).catch((e=>{J.set_req_token(),n(e)}))}))}},tn=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=V.resolve(t.project.projectDir),i=Y({dir:V.resolve(n,"./app")});if(i.file){let e=await X({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 X({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 r=Y({dir:V.resolve(n,"./cli")});if(r.file){let e=await X({file:r.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 X({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.cli_entry_uses_jsx=t,o.cli_entry_is_ts=r.ts,o.cli_entry_ext=r.ext}if("workflow.lib"===e.type){const e=Y({dir:V.resolve(n,"./src")});if(e.file){let t=await X({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 X({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.src_entry_uses_jsx=n,o.src_entry_is_ts=e.ts,o.src_entry_ext=e.ext}}const s=!0===o.app_has_entry||!0===o.src_uses_jsx,a=!0===o.cli_has_entry||!0===o.src_uses_jsx;o.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===o.form||!0===o.form?.enabled,o.multiple_enabled=o.multiple_enabled||!0===o.multiple||!0===o.multiple?.enabled,!1===o.app?o.app={enabled:!1}:!0===o.app?o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:s}:o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:s,...o.app||{}},o.app.enabled=!0===o.app.enabled&&(!0===e.doc.features.form_enabled||!0===o.app.extend||!0===o.app.enabled),o.app.format=o.app.format||"esm",o.app.folder=o.app.folder||o.app.format||"default",!1===o.cli?o.cli={enabled:!1}:!0===o.cli?o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:a}:o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:a,...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:`${V.normalize(o.app.dir||".")}`,files:[V.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=G(p,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=G({},o.replace_options||o.replace?.options||{}),o.terser_options=G({},o.terser_options||o.terser?.options||{}),o.css_options=G({},o.css_options||o.css?.options||{}),o.wasm_options=G({},o.wasm_options||o.wasm?.options||{}),o.copy_options=G(l,o.copy_options||o.copy?.options||{}),o.json_options=G({},o.json_options||o.json?.options||{}),o.image_options=G({},o.image_options||o.image?.options||{}),o.analyzer_options=G({summaryOnly:!0,limit:12},o.analyzer_options||o.analyzer?.options||{}),o.visualizer_options=G({},o.visualizer_options||o.visualizer?.options||{}),o.string_options=G({},o.string_options||o.string?.options||{}),o.rollup=o.rollup||{},o.rollup_output=G(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=G(o.browsersync_options,t.browsersync_options),t.replace_options=G(o.replace_options,t.replace_options),t.terser_options=G(o.terser_options,t.terser_options),t.css_options=G(o.css_options,t.css_options),t.wasm_options=G(o.wasm_options,t.wasm_options),t.copy_options=G(o.copy_options,t.copy_options),t.json_options=G(o.json_options,t.json_options),t.image_options=G(o.image_options,t.image_options),t.analyzer_options=G(o.analyzer_options,t.analyzer_options),t.visualizer_options=G(o.visualizer_options,t.visualizer_options),t.string_options=G(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},on=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 Z({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"})},nn=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()},r=o.templateDir,s=ee.resolve(o.projectDir,"src/app");Q.existsSync(s)||Q.mkdirSync(s,{recursive:!0}),await te({pattern:["index.html.njk","index.js.njk"],dir:ee.resolve(r,"src/app"),outDir:s,context:i})},rn=async({atom:e,context:t,packageDependencies:o,packageDevDependencies:n,setInProgress:i})=>{await i({message:"Creating package.json."});const r=o.find((e=>"react"===e.package)),s=o.find((e=>"react-dom"===e.package));r&&!s?o.push({package:"react-dom",version:r.version}):r&&s&&(s.version=r.version),r&&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 a=[];!0===e.doc.features.app.enabled&&a.push(ie.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&a.push(ie.resolve(t.projectDir,"src/cli/index.js"));for await(const t of a){const i=t;if(!ne.existsSync(i))throw new Error(`App file not found: ${i}`);const r=await re({file:i,recursive:!0}),s=!0===e.doc.features.all_parsed_imports?r.all:r.required;for await(const e of s){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;if(n.find((t=>t.package===e.package)))continue;const t=(await se({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=oe.compile(ne.readFileSync(ie.resolve(l,"package.json.njk"),"utf8"),oe.configure(l)).render(c),d=t.projectDir,f=ie.resolve(d,"package.json");ne.writeFileSync(f,p,"utf8")},sn=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},r=o.templateDir,s=ce.resolve(o.projectDir,"src/cli");ae.existsSync(s)||ae.mkdirSync(s,{recursive:!0}),await le({pattern:["index.js.njk"],dir:ce.resolve(r,"src/cli"),outDir:s,context:i})},an=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:n},r=de.resolve(o.projectDir,"src","default/index.js");if(!pe.existsSync(r))throw new Error(`Entry file not found: ${r}`);const s=(await me({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),a=e.doc.features.rollup_output,c=Object.keys(a);for(let e=0;e<c.length;e++){const t=a[c[e]];if(!0===t.browser&&s.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(s.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<s.length;e++){const o=s[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(s)}}const l=o.templateCommonDir,p=fe.compile(pe.readFileSync(de.resolve(l,"rollup.config.js.njk"),"utf8"),fe.configure(l)).render(i),d=o.projectDir,f=de.resolve(d,"rollup.config.js");pe.writeFileSync(f,p,"utf8")},cn=async({atom:e,setInProgress:t,context:o,njEnv:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const i={},r=e.doc.inputs||[],s=[];r.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&s.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 a={options:i,imports:s,atom:e},c=o.templateDir,l=we.compile(ue.readFileSync(he.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),n).render(a),p=o.projectDir,d=he.resolve(p,"src/default/to.yargs.js");ue.writeFileSync(d,l,"utf8")},ln=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},r=o.templateCommonDir,s=be.compile(ye.readFileSync(ge.resolve(r,".gitignore.njk"),"utf8"),be.configure(r)).render(i),a=o.projectDir,c=ge.resolve(a,".gitignore");ye.writeFileSync(c,s,"utf8")},pn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:n},r=o.templateCommonDir,s=_e.compile(ve.readFileSync(xe.resolve(r,"tsconfig.json.njk"),"utf8"),_e.configure(r)).render(i),a=o.projectDir,c=xe.resolve(a,"tsconfig.json");ve.writeFileSync(c,s,"utf8")},dn=async({atom:e,context:t,setInProgress:o,Atom:n})=>{const i="readme.md",r=`Creating ${i}`;if(await o({message:r}),t.project?.readme){const e={content:t.project.readme.doc.content},o=t.templateCommonDir,n=je.compile(ke.readFileSync(De.resolve(o,`${i}.njk`),"utf8"),je.configure(o)).render(e),r=t.projectDir,s=De.resolve(r,`${i}`);ke.writeFileSync(s,n,"utf8")}else if(e.id){const o=await n.first({type:"wiki",parent_id:e.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:r,...s}=o.doc,a={content:r},c=t.templateCommonDir,l=je.compile(ke.readFileSync(De.resolve(c,`${i}.njk`),"utf8"),je.configure(c)).render(a),p=t.projectDir,d=De.resolve(p,`${i}`);ke.writeFileSync(d,l,"utf8")}},fn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});let n=Se.join("src","**","*");if(0!==Pe.exec(`prettier --write ${n} *.{js,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o}).code)throw new Error("Couldnt format files.")},mn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Creating .d.ts"});if(0!==Ae.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},un=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==Te.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},hn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==Ee.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},wn=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:r}=e;if(!0===i.enabled)if("lib"===i.name)await Ft({...e});else if("red"===i.name)await Mt({...e});else if("npm"===i.name)await Nt({...e});else if("gcs"===i.name)await Ct({...e});else if("gitlab"===i.name)await Ot({...e});else if("macos-app"===i.name)await qt({...e});else if("ios-app"===i.name)await Rt({...e});else if("electron"===i.name)await Ut({...e});else if("webos"===i.name)await Bt({...e});else if("fnet-package"===i.name)await Jt({...e});else if("fnet-form"===i.name)await Wt({...e});else if("fnet-node"===i.name)await Gt({...e});else if("fnet-flow"===i.name)await Kt({...e});else{let e;if("nextjs"===i.name?e=Lt:"docker"===i.name&&(e=zt),!e)return;await e({atom:t,target:i,onProgress:r,projectDir:n.projectDir,dependencies:o})}},{Atom:yn}=b,gn=M,bn=k,vn=F,xn=t,_n=j,jn=R,kn=c,Dn=q,Pn=Qt,Sn=oo,An=ro,Tn=po,En=Xt,In=fo,$n=ho,On=go,Cn=xo,Nn=jo,Mn=Do,Fn=So,Rn=To,qn=$o,Un=No,Bn=Ro,Ln=Uo,zn=Lo,Jn=Jo,Wn=({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 Kn=class{#e;#t;#o;#n;#i;#r;#s;#a;#c;#l;#p;#d;#f;#m;#u;#h;#w;#y;#g;#b;#v;constructor(e){this.#e=new en,this.#t=e,this.#r=[],this.#s=[],this.#a={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#b={packageDependencies:this.#r,packageDevDependencies:this.#s,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:yn,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#v={initNode:this.initNode.bind(this),cloneDeep:Xo,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Wn,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 Zo(),this.#p=this.#t.buildId||Qo(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 xn({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await tn(this.#b),await on(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.#r}),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 yn.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await kn({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.#r.push({package:"get-value",version:"^3.0"}),this.#r.push({package:"set-value",version:"^4.1"}),this.#o.doc.features.form_enabled?(this.#r.push({package:"react",version:"^18.2"}),this.#r.push({package:"react-dom",version:"^18.2"}),this.#r.push({package:"@flownet/react-app",version:"^0.1"}),this.#r.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#r.push({package:"yargs",version:"^17"}),this.#r.push({package:"chalk",version:"^4"})}#x(e){Wo.statSync(e).isDirectory()?(Wo.readdirSync(e).forEach((t=>{const o=Ko.join(e,t);this.#x(o)})),Wo.rmdirSync(e)):Wo.unlinkSync(e)}#_(e,t){const o=Wo.existsSync(e),n=o&&Wo.statSync(e);o&&n.isDirectory()?(Wo.mkdirSync(t,{recursive:!0}),Wo.readdirSync(e).forEach((o=>{this.#_(Ko.join(e,o),Ko.join(t,o))}))):Wo.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,o=["node_modules"];if(Wo.existsSync(e)){const t=Wo.readdirSync(e);for(const n of t)if(!o.includes(n)){const t=Ko.join(e,n);this.#x(t)}}Wo.existsSync(e)||Wo.mkdirSync(e,{recursive:!0});const n=Ko.join(e,"src");Wo.existsSync(n)||Wo.mkdirSync(n,{recursive:!0});const i=Ko.join(n,"core");this.#_(t,i);const r=Ko.join(n,"default","blocks");Wo.existsSync(r)||Wo.mkdirSync(r,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=Vo.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 Sn.hits(t))await Sn.init(t);else if(await Tn.hits(t))await Tn.init(t);else if(await En.hits(t))await En.init(t);else if(await Pn.hits(t))await Pn.init(t);else if(await In.hits(t))await In.init(t);else if(await An.hits(t))await An.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 Cn.hits(t))await Cn.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 zn.hits(t))await zn.init(t);else if(await Jn.hits(t))await Jn.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 Ln.hits(t))await Ln.init(t);else if(await Rn.hits(t))await Rn.init(t);else{if(!await Bn.hits(t))throw new Error("Undefined step type.");await Bn.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=Ko.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=Qo(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 r=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));r?.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=gn({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 yn.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await yn.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await yn.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=Ko.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await _n({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 bn({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 bn({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=Xo(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=Ko.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=Ko.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!Wo.existsSync(e)){Wo.mkdirSync(Ko.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Wo.writeFileSync(e,t,"utf8")}o.relativePath=t.split(Ko.sep).join("/"),this.#o.typesDir=`./types/${Ko.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;Wo.writeFileSync(Ko.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=Vo.compile(Wo.readFileSync(Ko.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=Ko.resolve(n,"src/default/index.js");Wo.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=Vo.compile(Wo.readFileSync(Ko.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=Ko.resolve(n,`src/default/${e.codeKey}.js`);Wo.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.#a[e.type];if(t)return t;const o=this.#t.templateDir;return t=Vo.compile(Wo.readFileSync(Ko.resolve(o,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#i),this.#a[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,o=`${e.codeKey}.js`,n=Ko.resolve(t,`src/default/blocks/${o}`);Wo.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(Yo(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 jn({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:Go.dump(n)},r=this.#t.templateDir,s=Vo.compile(Wo.readFileSync(Ko.resolve(r,`${e}.njk`),"utf8"),this.#i).render(i),a=this.#t.projectDir,c=Ko.resolve(a,`${e}`);Wo.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:Go.dump(this.#n)},n=this.#t.templateDir,i=Vo.compile(Wo.readFileSync(Ko.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),r=this.#t.projectDir,s=Ko.resolve(r,`${e}`);Wo.writeFileSync(s,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=Ho.exec("prettier --write .",{cwd:Ko.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 yn.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 yn.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 wn({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await yn.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await yn.update(n,{id:n.id})):n=await yn.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(Dn.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 vn({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;Wo.writeFileSync(Ko.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 dn(this.#b),await pn(this.#b),await ln(this.#b),await cn(this.#b),await sn(this.#b),await nn(this.#b),await an(this.#b),await rn(this.#b),await fn(this.#b),await mn(this.#b),this.#w&&(await un(this.#b),await hn(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 vn({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 Gn=p,Hn=d;var Vn=function({baseDir:e=__dirname}){let t=e;for(;t!==Hn.parse(t).root;){const e=Hn.join(t,"node_modules");if(Gn.existsSync(e))return e;t=Hn.dirname(t)}return null};const Xn=process.cwd(),{spawn:Yn}=e;t({name:["redis"],dir:Xn,optional:!0});const Zn=o,Qn=n,{hideBin:ei}=i,ti=r,oi=s,ni=a,ii=c,ri=l,si=Kn,ai=Vn({baseDir:__dirname}),ci="win32"===process.platform?";":":";async function li(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:Zn.resolve(Xn,`./.output/${e.id}`),templateDir:Zn.resolve(ai,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Zn.resolve(ai,"./@fnet/cli-project-common/dist/template/default"),coreDir:Zn.resolve(ai,"./@fnet/cli-project-flow/dist/template/core")}}{const t=await async function(e){const t=Zn.resolve(Xn,"flow.yaml");if(!ti.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const o=ti.readFileSync(t,"utf8"),{parsed:n}=await ii({content:o}),i=Zn.dirname(t),r=n.main||"flow.main.yaml";let s=Zn.resolve(i,r);if(!ti.existsSync(s)&&(s=Zn.resolve(i,r+".yaml"),!ti.existsSync(s)))throw new Error(`${r} file not found in ${s}.`);const a=ti.readFileSync(s,"utf8"),{parsed:c}=await ii({content:a}),l={workflowAtom:{doc:{...n,"content-type":"yaml",content:a}},projectDir:i,projectFilePath:t,projectFileContent:o,projectFileParsed:n,projectMainFilePath:s,projectMainFileContent:a,projectMainFileParsed:c},p=Zn.resolve(i,"flow.devops.yaml");if(ti.existsSync(p)){const e=ti.readFileSync(p,"utf8"),t=oi.parse(e);l.devops={filePath:p,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{ti.writeFileSync(l.devops.filePath,oi.stringify(l.devops.doc))}}}const d=Zn.resolve(i,"readme.md");if(ti.existsSync(d)){const e=ti.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:Zn.resolve(ai,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Zn.resolve(ai,"./@fnet/cli-project-common/dist/template/default"),coreDir:Zn.resolve(ai,"./@fnet/cli-project-flow/dist/template/core"),projectDir:Zn.resolve(t.projectDir,"./.workspace"),projectSrcDir:Zn.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${Zn.join(ai,"/.bin")}${ci}${process.env.PATH}`,Qn(ei(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=Zn.resolve(ai,"./@fnet/cli-project-flow/dist/template/project"),o=Zn.resolve(Xn,e.name);ti.existsSync(o)||ti.mkdirSync(o),await ri({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0});let n=ni.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(ni.which("git")&&(n=ni.exec("git init",{cwd:o}),0!==n.code))throw new Error("Failed to initialize git.");if(ni.which("code")&&e.vscode&&(n=ni.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=Zn.resolve(ai,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd();if(e.name=Zn.basename(o),e.update){if(await ri({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0}),0!==ni.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 li(e),o=new si(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 li({...e,mode:"all"}),o=new si(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 li({...e,mode:"file"}),o=new si(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("npm [commands..]","npm - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await li(e),{projectDir:o}=t,n=`npm ${process.argv.slice(3).join(" ")}`;ni.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await li(e),{projectDir:o}=t,n=`node ${process.argv.slice(3).join(" ")}`;ni.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await li(e),{projectDir:o}=t,n=`npm run serve -- ${process.argv.slice(3).join(" ")}`;ni.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await li(e),{projectDir:o}=t,n=`npm run watch -- ${process.argv.slice(3).join(" ")}`;ni.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await li(e),{projectDir:o}=t,n=`npm run app -- ${process.argv.slice(3).join(" ")}`;ni.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await li(e),{projectDir:o}=t,n=process.argv.slice(3);Yn("npm",["run","cli","--",...n],{cwd:o,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}})).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"),w=require("qs");function _(){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 f,b,m,y,k={name:"@fnet/cli",version:"0.33.3",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.7","@fnet/cli-project-node":"^0.1.8","@fnet/config":"^0.2.8","@fnet/dir-zipper":"^0.1.3","@fnet/expression":"^0.1.16","@fnet/files-to-gcs":"^0.3.6","@fnet/shell":"^0.1.13","@fnet/yaml":"^0.1.11","@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 _()();if(!e)throw new Error("Redis is offline.");const t=k,i=n,s=o,r=l,v=function(){if(b)return f;b=1;const e=n,t=c,i=d,{nanoid:s}=a;return f=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=w;R.set("query parser",(function(e){return T.parse(e,{depth:12})})),R.use(q({secret:process.env.SESSION_SECRET,resave:!1,saveUninitialized:!0,store:S})),R.use(r()),R.use(s()),R.use(i.json({limit:"1024kb"})),R.get("/healthz",(function(e,t){t.sendStatus(200)})),R.use(x.mw()),R.use(I.middleware()),new v({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),new E({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),R.listen(process.env.HTTP_PORT||8080),console.log(`[${t.version}] ${t.name} started.`)})().catch((e=>{console.error(e.message),process.exit(1)})),module.exports={};
2
+ "use strict";var e,t,i=require("@fnet/config"),s=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),c=require("path"),d=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),p=require("keycloak-connect"),w=require("qs");function _(){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 f,b,m,y,k={name:"@fnet/cli",version:"0.33.5",files:["dist"],scripts:{start:"node src/index.js",build:"rollup --config --bundleConfigAsCjs",deploy:"npm install && npm run build && npm publish --access public",watch:"rollup --config --watch --sourcemap --bundleConfigAsCjs --environment DEVELOPMENT"},repository:{type:"git",url:"git+https://gitlab.com/fnetai/cli.git"},license:"MIT",dependencies:{"@flownet/lib-atom-api-js":"^0.1.10","@flownet/lib-bpmn-from-flow":"^0.1.8","@flownet/lib-is-redis-online":"^0.1.13","@flownet/lib-list-npm-versions":"^0.1.31","@flownet/lib-parse-imports-js":"^0.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.7","@fnet/cli-project-node":"^0.1.9","@fnet/config":"^0.2.8","@fnet/dir-zipper":"^0.1.5","@fnet/expression":"^0.1.16","@fnet/files-to-gcs":"^0.3.6","@fnet/shell":"^0.1.13","@fnet/yaml":"^0.1.11","@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 _()();if(!e)throw new Error("Redis is offline.");const t=k,i=n,s=o,r=l,v=function(){if(b)return f;b=1;const e=n,t=c,i=d,{nanoid:s}=a;return f=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=w;R.set("query parser",(function(e){return T.parse(e,{depth:12})})),R.use(q({secret:process.env.SESSION_SECRET,resave:!1,saveUninitialized:!0,store:S})),R.use(r()),R.use(s()),R.use(i.json({limit:"1024kb"})),R.get("/healthz",(function(e,t){t.sendStatus(200)})),R.use(x.mw()),R.use(I.middleware()),new v({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),new E({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),R.listen(process.env.HTTP_PORT||8080),console.log(`[${t.version}] ${t.name} started.`)})().catch((e=>{console.error(e.message),process.exit(1)})),module.exports={};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fnet/cli",
3
- "version": "0.33.3",
3
+ "version": "0.33.5",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -33,9 +33,9 @@
33
33
  "@flownet/lib-to-webos": "^0.2.8",
34
34
  "@fnet/cli-project-common": "^0.1.4",
35
35
  "@fnet/cli-project-flow": "^0.1.7",
36
- "@fnet/cli-project-node": "^0.1.8",
36
+ "@fnet/cli-project-node": "^0.1.9",
37
37
  "@fnet/config": "^0.2.8",
38
- "@fnet/dir-zipper": "^0.1.3",
38
+ "@fnet/dir-zipper": "^0.1.5",
39
39
  "@fnet/expression": "^0.1.16",
40
40
  "@fnet/files-to-gcs": "^0.3.6",
41
41
  "@fnet/shell": "^0.1.13",