@fnet/cli 0.57.1 → 0.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e=require("child_process"),t=require("@fnet/config"),a=require("path"),o=require("yargs/yargs"),s=require("fs"),n=require("yaml"),r=require("shelljs"),i=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),p=require("@flownet/lib-render-templates-dir"),l=require("node:fs"),d=require("node:path"),m=require("nunjucks"),u=require("redis"),g=require("@flownet/lib-is-redis-online"),f=require("nanoid"),y=require("@flownet/lib-atom-api-js"),h=require("axios"),w=require("qs"),b=require("lodash.merge"),_=require("@flownet/lib-parse-imports-js"),v=require("@flownet/lib-list-npm-versions"),j=require("@fnet/yargs-options-from-schema"),k=require("@fnet/shell"),x=require("semver"),D=require("node:os"),A=require("@node-red/util"),S=require("@flownet/lib-to-ios-app"),P=require("lodash.clonedeep"),I=require("@flownet/lib-to-macos-app"),E=require("@flownet/lib-to-electron"),T=require("@flownet/lib-to-webos"),$=require("@flownet/lib-to-nextjs"),O=require("@flownet/lib-to-docker"),C=require("form-data"),R=require("@fnet/to-rust"),M=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-pick-npm-versions"),q=require("chalk");const z=u,L=g;const{Api:N}=y,U=h.default,B=w;const J=b,W=l,K=d,G=_,H=({features:e,packageDevDependencies:t})=>{const a=e.rollup_output||{},o=Object.keys(a),s={generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}};o.forEach((t=>{const a=e.rollup_output[t];if(a?.workbox&&!1!==a?.workbox?.enabled){if(!0===a.workbox){if(!s)return void delete a.workbox;a.workbox={enabled:!0,options:{generate:s.generate}}}a.workbox.options=a.workbox.options||{},a.workbox.options.generate=a.workbox.options.generate||s.generate}else delete a.workbox}));const n=o.some((t=>!0===e.rollup_output[t].workbox?.enabled));e.workbox_enabled=n,e.workbox_enabled&&t.push({package:"rollup-plugin-workbox",version:"^8"})},X=({features:e,packageDevDependencies:t})=>{const a=e.rollup_output||{},o=Object.keys(a),s={};o.forEach((t=>{const a=e.rollup_output[t];a?.gzip&&!1!==a?.gzip?.enabled?(!0===a.gzip&&(a.gzip={enabled:!0,options:s}),a.gzip.options=a.gzip.options||{},a.gzip.options={...s,...a.gzip.options}):delete a.gzip}));const n=o.some((t=>!0===e.rollup_output[t].gzip?.enabled));e.gzip_enabled=n,e.gzip_enabled&&t.push({package:"rollup-plugin-gzip",version:"^4"})};function Y({dir:e,name:t="index"}){let a=K.resolve(e,`./${t}.tsx`);if(W.existsSync(a)||(a=K.resolve(e,`./${t}.ts`)),W.existsSync(a)||(a=K.resolve(e,`./${t}.jsx`)),W.existsSync(a)||(a=K.resolve(e,`./${t}.js`)),!W.existsSync(a))return{};const o=a,s=K.extname(a);return{file:o,ext:s,ts:".ts"===s||".tsx"===s,name:t}}const Z=v;const Q=l,V=d,ee=p;const te=m,ae=l,oe=d,se=_,ne=v;const re=l,ie=d,ce=p;const pe=l,le=d,de=m,me=_;const ue=l,ge=d,fe=m,ye=j;const he=l,we=d,be=m;const _e=l,ve=d,je=m;const ke=m,xe=l,De=d,Ae=i;const Se=r,Pe=a;const Ie=r;const Ee=r;const Te=r;const $e=k,Oe=t;const Ce=l,Re=d,Me=x,Fe=k,qe=t;const ze=l,Le=d,Ne=x,Ue=r,Be=t;const Je=l,We=d,Ke=D,Ge=m,He=A,Xe=t;const Ye=s,Ze=a,Qe=t;const Ve=t,et=S,tt=P,at=x;const ot=t,st=I,nt=P,rt=x;const it=t,ct=E,pt=P,lt=x;const dt=t,mt=T,ut=P,gt=x;const ft=t,yt=$,ht=P,wt=x;const bt=t,_t=O,vt=P,jt=x;const kt=l,xt=d,Dt=x,At=k,St=t,Pt=h.default;const It=x,Et=t,Tt=h.default;const $t=x,Ot=t,Ct=h.default,Rt=s,Mt=k,Ft=C;const qt=x,zt=t,Lt=h.default,Nt=s,Ut=k,Bt=C;const Jt=t,Wt=R,Kt=P,Gt=x;const Ht=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:s})=>{await e({message:"Deploying it as gitlab project."});const n=t.projectDir;let r="fnet-to-gitlab";const i=o.params.config||"gitlab",c=await Oe({name:i,dir:t.projectDir,tags:t.tags});if(!c)throw new Error(`Couldnt load config ${i}`);const{data:p}=c.data;r+=` --projectGroupId=${p.projectGroupId}`,r+=` --projectPath='${n}'`,r+=` --projectName='${o.params.name}'`,r+=` --projectBranch='${o.params.branch||"main"}'`,r+=` --gitlabHost='${p.gitlabHost}'`,r+=` --gitlabToken='${p.gitlabToken}'`,r+=` --gitlabUsername='${p.gitlabUsername}'`,r+=` --gitlabUserEmail='${p.gitlabUserEmail}'`,!0!==o.dryRun&&(await $e({cmd:r}),a.isDirty=!0)},Xt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:s,yamlTarget:n})=>{await e({message:"Deploying it as gcs package."});const r=t.projectDir,i=Re.resolve(r,"package.json"),c=Ce.readFileSync(i),p=JSON.parse(c);p.name=o.params.name,p.version=Me.inc(o.params.version,"patch"),delete p.scripts,delete p.devDependencies,Ce.writeFileSync(i,JSON.stringify(p,null,"\t"));const{file:l,data:d}=await qe({name:o.config||"gcs",dir:t.projectDir,tags:t.tags});let m="fnet-files-to-gcs";m+=` --projectId='${d.env.GCS_PROJECT_ID}'`,m+=` --bucketName='${d.env.GCS_BUCKET_NAME}'`,m+=` --keyFilename='${Re.resolve(Re.dirname(l),d.env.GCS_UPLOADER_KEY_FILE)}'`,m+=` --dir='${r}'`,m+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",m+=` --destDir='${p.name}/${p.version}'`,m+=" --metadata.cacheControl='public, max-age=31536000, immutable'",d.env.DOMAIN&&(m+=` --domain='${d.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(m+=" --dryRun"),await Fe({cmd:m}),Ce.writeFileSync(i,c),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=p.version,n.get("params").set("version",p.version),await s({target:o,packageJSON:p}))},Yt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,yamlTarget:n})=>{await t({message:"Deploying it as npm package."});const r=a.projectDir,i=Le.resolve(r,"package.json"),c=ze.readFileSync(i),p=JSON.parse(c);p.name=s.params.name,p.version=Ne.inc(s.params.version,"patch");const l=s.params.bin?.name||s.params.bin;!1!==s.params.bin?.enabled&&l&&"string"==typeof l&&(p.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete p.scripts,delete p.devDependencies,p.scripts={serve:"npx serve ."},ze.writeFileSync(i,JSON.stringify(p,null,"\t"));const d=(await Be({name:a.npmConfig||"npm",dir:a.projectDir,tags:a.tags}))?.data;if(ze.writeFileSync(Le.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==Ue.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");ze.writeFileSync(i,c),o.isDirty=!0,s.params.version=p.version,n.get("params").set("version",p.version)},Zt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:n,packageDependencies:r,njEnv:i})=>{await t({message:"Deploying it as node-red flow."});const c=a.projectDir,p=a.templateDir,l="workflow"===e.type?"WF":"LIB";let d;if("simple"===s.deploy.template)d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||He.util.generateId(),label:`${l}/${e.id?e.id:Ke.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:He.util.generateId(),name:e.doc.name,initialize:{content:Je.readFileSync(We.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:He.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:He.util.generateId()}}};else if("cronjob"===s.deploy.template){let t=s.params?.schedules?cloneDeep(s.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||He.util.generateId(),label:`${l}/${e.id?e.id:Ke.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:He.util.generateId(),name:e.doc.name,initialize:{content:Je.readFileSync(We.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:He.util.generateId(),schedules:t},debug:{id:He.util.generateId()}}}}else{if("http"!==s.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||He.util.generateId(),label:`${l}/${e.id?e.id:Ke.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:He.util.generateId(),name:e.doc.name,initialize:{content:Je.readFileSync(We.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:He.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:He.util.generateId()},debug:{id:He.util.generateId()}}}}let m=Ge.compile(Je.readFileSync(We.resolve(p,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(Je.writeFileSync(We.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=(await Xe({name:a.redConfig||"red",dir:a.projectDir,tags:a.tags}))?.data,g=s.deploy.url||u.env.RED_URL,f={};if(!1!==s.deploy.auth&&(f.Authorization="Bearer "+atomAccessToken),s.deploy.id)!0===s.actions?.delete?(await axios({method:"DELETE",url:`${g}/flow/${s.deploy.id}`,headers:f}),delete s.actions.delete,delete s.deploy.id,s.enabled=!1):await axios({method:"PUT",url:`${g}/flow/${s.deploy.id}`,data:m,headers:f});else{const e=await axios({method:"POST",url:`${g}/flow`,data:m,headers:f});s.deploy.id=e.data.id}},Qt=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:s,deploymentProject:n,deploymentProjectTarget:r})=>{await a({message:"Deploying it as workflow lib."});const i=(await Qe({name:"atom",dir:o.projectDir,tags:o.tags}))?.data;let c,p,l,d=r.deploy.name.split("/");if(1===d.length)p=i.env.ATOM_LIBRARIES_ID,l=r.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:i.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");p=e.id,l=d[1]}}if(!0===r.dryRun)return;if(n.isDirty=!0,r.deploy.id){if(c=await t.get({id:r.deploy.id}),!c)return}else{if(c=await t.create({parent_id:p,doc:{name:l,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;r.deploy.id=c.id}const m=o.projectDir;c.doc.contents=[{content:Ye.readFileSync(Ze.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Ye.readFileSync(Ze.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Ye.readFileSync(Ze.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=l,c.doc.dependencies=s,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},Vt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as ios-app package."});const i=t?.config?await Ve({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=at.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=tt(t.params);p.dependencies=tt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await et(l)}},ea=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as macos-app package."});const i=t?.config?await ot({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=rt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=nt(t.params);p.dependencies=nt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await st(l)}},ta=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as electron package."});const i=t?.config?await it({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=lt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=pt(t.params);p.dependencies=pt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await ct(l)}},aa=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as webos package."});const i=t?.config?await dt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=gt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=ut(t.params);p.dependencies=ut(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await mt(l)}},oa=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as nextjs package."});const i=t?.config?await ft({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=wt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=ht(t.params);p.dependencies=ht(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await yt(l)}},sa=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as docker package."});const i=t?.config?await bt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=jt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=vt(t.params);p.dependencies=vt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await _t(l)}},na=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet package."});const n=t.projectDir,r=xt.resolve(n,"package.json"),i=kt.readFileSync(r),c=JSON.parse(i);c.name=o.params.name,c.version=Dt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,kt.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:p,data:l}=await St({name:o.config||"fnet-package",dir:t.projectDir,tags:t.tags});if(!l.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${p}`);if(!l.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${p}`);if(!l.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${p}`);const d=`${l.env.ATOM_API_URL}/v1/auth/token`,m=l.env.ATOM_API_USERNAME,u=l.env.ATOM_API_PASSWORD;let g=await Pt({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='${l.env.GCS_PROJECT_ID}'`,y+=` --bucketName='${l.env.GCS_BUCKET_NAME}'`,y+=` --keyFilename='${xt.resolve(xt.dirname(p),l.env.GCS_UPLOADER_KEY_FILE)}'`,y+=` --dir='${n}'`,y+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",y+=` --destDir='${c.name}/${c.version}'`,y+=" --metadata.cacheControl='public, max-age=31536000, immutable'",l.env.DOMAIN&&(y+=` --domain='${l.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(y+=" --dryRun"),await At({cmd:y}),kt.writeFileSync(r,i),!0===o.dryRun)return;a.isDirty=!0,o.params.version=c.version,s.get("params").set("version",c.version);const h=`${l.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(g=await Pt({method:"POST",url:h,data:{name:c.name,version:c.version,version_domain:l.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.")},ra=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet form."});const n=It.inc(o.params.version,"patch"),{file:r,data:i}=await Et({name:o.config||"fnet-form",dir:t.projectDir,tags:t.tags});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const c=`${i.env.ATOM_API_URL}/v1/auth/token`,p=i.env.ATOM_API_USERNAME,l=i.env.ATOM_API_PASSWORD;let d=await Tt({method:"POST",url:c,data:{username:p,password:l},headers:{"Content-Type":"application/json"}});const m=d.data?.access_token;if(!m)throw new Error(`Invalid access_token from ${c}`);a.isDirty=!0,o.params.version=n,s.get("params").set("version",n);const u=`${i.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(d=await Tt({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`}}),d.data?.error)throw new Error("Error publishing fnet form.")},ia=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet flow."});const n=$t.inc(o.params.version,"patch"),{file:r,data:i}=await Ot({name:o.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const c=`${i.env.ATOM_API_URL}/v1/auth/token`,p=i.env.ATOM_API_USERNAME,l=i.env.ATOM_API_PASSWORD;let d=await Ct({method:"POST",url:c,data:{username:p,password:l},headers:{"Content-Type":"application/json"}});const m=d.data?.access_token;if(!m)throw new Error(`Invalid access_token from ${c}`);a.isDirty=!0,o.params.version=n,s.get("params").set("version",n);const u=`${i.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(d=await Ct({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`}}),d.data?.error)throw new Error("Error publishing fnet flow.");const g=d.data?.upload.id;let f="fnet-dir-zipper";f+=` --sourceDir='${t.project.projectDir}'`,f+=" -p=**/*",f+=" -g",f+=" --stdout_format=json";const y=await Mt({cmd:f});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new Ft;w.append("file",Rt.createReadStream(h));const b=await Ct.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${g}`,headers:{...w.getHeaders(),Authorization:`Bearer ${m}`},data:w});if(b.data?.error)throw new Error("Error uploading fnet flow.")},ca=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet node."});const n=qt.inc(o.params.version,"patch"),{file:r,data:i}=await zt({name:o.config||"fnet-node",dir:t.project.projectDir,tags:t.tags});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const c=`${i.env.ATOM_API_URL}/v1/auth/token`,p=i.env.ATOM_API_USERNAME,l=i.env.ATOM_API_PASSWORD;let d=await Lt({method:"POST",url:c,data:{username:p,password:l},headers:{"Content-Type":"application/json"}});const m=d.data?.access_token;if(!m)throw new Error(`Invalid access_token from ${c}`);a.isDirty=!0,o.params.version=n,s.get("params").set("version",n);const u=`${i.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(d=await Lt({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`}}),d.data?.error)throw new Error("Error publishing fnet node.");const g=d.data?.upload.id;let f="fnet-dir-zipper";f+=` --sourceDir='${t.project.projectDir}'`,f+=" -p=**/*",f+=" -g",f+=" --stdout_format=json";const y=await Ut({cmd:f});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new Bt;w.append("file",Nt.createReadStream(h));const b=await Lt.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${g}`,headers:{...w.getHeaders(),Authorization:`Bearer ${m}`},data:w});if(b.data?.error)throw new Error("Error uploading fnet node.")},pa=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as Rust package."});const i=t?.config?await Jt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Gt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=Kt(t.params);p.dependencies=Kt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Wt(l)}};const la=l,da=d,ma=n,ua=r,ga=m,fa=async()=>{if(!await L({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=z.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:ya}=f,ha=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:B.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)}))}))}},wa=async({atom:e,context:t,packageDevDependencies:a})=>{e.doc.features=e.doc.features||{};const o=e.doc.features;o.project=o.project||{},o.project.format=o.project.format||o.project_format||"esm",o.project_format=o.project.format,o.dts_enabled=!0===o.dts||void 0!==o.dts&&!1!==o.dts,o.hasOwnProperty("all_parsed_imports")||(o.all_parsed_imports=!0);const s=K.resolve(t.project.projectDir),n=Y({dir:K.resolve(s,"./app")});if(n.file){let e=await G({file:n.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 G({file:n.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.app_entry_uses_jsx=t,o.app_entry_is_ts=n.ts,o.app_entry_ext=n.ext}const r=Y({dir:K.resolve(s,"./cli")});if(r.file){let e=await G({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 G({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:K.resolve(s,"./src")});if(e.file){let t=await G({file:e.file,recursive:!0}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.src_uses_jsx=a,o.src_has_entry=!0,t=await G({file:e.file}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.src_entry_uses_jsx=a,o.src_entry_is_ts=e.ts,o.src_entry_ext=e.ext}}const i=!0===o.app_entry_uses_jsx,c=!0===o.cli_entry_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:i}:o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:i,...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:c}:o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:c,...o.cli||{}},o.cli.enabled=!0===o.cli.enabled&&(!1===e.doc.features.form_enabled||!0===o.cli.extend||!0===o.cli.enabled),o.cli.format=o.cli.format||"esm",o.cli.folder=o.cli.folder||o.cli.folder||"esm",o.cli.node_options=o.cli.node?.options||o.cli.node_options||"";const p={cjs:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!0,string:!0},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},iife:{format:"iife",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==o.iife,terser:!0,string:!0}},l={};!0===o.webos&&(p.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",babel_options:{targets:{chrome:"79"}}}),!0===o.electron&&(p.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===o.nextjs&&(p.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===o.ios&&(p.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===o.macos&&(p.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===o.app.enabled&&(o.app.dir=`./dist/app/${o.app.folder}`,p.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}`,p.cli={format:o.cli.format,context:"global",babel:!0===o.src_uses_jsx||!0===o.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:o.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===o.cli.export?"none":"auto",string:!0});const d={server:".",startPath:`${K.normalize(o.app.dir||".")}`,files:[K.normalize("./dist/**/*")],cors:!0,open:!1};o.babel_options=J({targets:{browsers:"last 9 versions, not dead",node:"18"}},o.babel_options||o.babel?.options),o.browsersync_options=J(d,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=J({},o.replace_options||o.replace?.options||{}),o.terser_options=J({},o.terser_options||o.terser?.options||{}),o.css_options=J({},o.css_options||o.css?.options||{}),o.wasm_options=J({},o.wasm_options||o.wasm?.options||{}),o.copy_options=J(l,o.copy_options||o.copy?.options||{}),o.json_options=J({},o.json_options||o.json?.options||{}),o.image_options=J({},o.image_options||o.image?.options||{}),o.analyzer_options=J({summaryOnly:!0,limit:12},o.analyzer_options||o.analyzer?.options||{}),o.visualizer_options=J({},o.visualizer_options||o.visualizer?.options||{}),o.string_options=J({},o.string_options||o.string?.options||{}),o.nunjucks_options=J({},o.nunjucks_options||o.nunjucks?.options||{}),Reflect.has(o.browsersync_options,"proxy")&&delete o.browsersync_options.server,o.rollup=o.rollup||{},o.rollup_output=J(p,o.rollup_output||o.rollup?.output||{}),o.string_enabled=!0===o.string||o.string&&!1!==o.string?.enabled,o.preact_enabled=!0===o.preact||o.preact&&!1!==o.preact?.enabled;let m=Object.keys(p);for(const e of m){const t=p[e];t&&(!1!==o.rollup[e]?(t.babel_options=t.babel_options||o.babel_options,t.browsersync_options=J(o.browsersync_options,t.browsersync_options),t.replace_options=J(o.replace_options,t.replace_options),t.terser_options=J(o.terser_options,t.terser_options),t.css_options=J(o.css_options,t.css_options),t.wasm_options=J(o.wasm_options,t.wasm_options),t.copy_options=J(o.copy_options,t.copy_options),t.json_options=J(o.json_options,t.json_options),t.image_options=J(o.image_options,t.image_options),t.analyzer_options=J(o.analyzer_options,t.analyzer_options),t.visualizer_options=J(o.visualizer_options,t.visualizer_options),t.string_options=J(o.string_options,t.string_options),t.string=o.string_enabled&&t.string,t.nunjucks_options=J(o.nunjucks_options,t.nunjucks_options),o.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),o.form_enabled&&(t.babel=!0)):delete o.rollup_output[e])}m=Object.keys(o.rollup_output),o.babel_enabled=m.some((e=>!0===o.rollup_output[e].babel)),o.browser_enabled=m.some((e=>!0===o.rollup_output[e].babel)),o.browsersync_enabled=!1!==o.browsersync&&m.some((e=>!0===o.rollup_output[e].browsersync)),o.browsersync_enabled=o.browsersync_enabled&&o.app.enabled,o.wasm_enabled=!0===o.wasm||o.wasm&&!1!==o.wasm?.enabled,o.css_enabled=!0===o.css||o.css&&!1!==o.css?.enabled,o.json_enabled=!0===o.json||o.json&&!1!==o.json?.enabled,o.terser_enabled=!1!==o.terser,o.copy_enabled=o.app.enabled||o.copy_enabled||o.copy&&!1!==o.copy?.enabled,o.image_enabled=!0===o.image||o.image&&!1!==o.image?.enabled,o.analyzer_enabled=!0===o.analyzer||o.analyzer&&!1!==o.analyzer?.enabled,o.visualizer_enabled=!0===o.visualizer||o.visualizer&&!1!==o.visualizer?.enabled,o.dependency_auto_enabled=!1!==o.dependency_auto&&!1!==o.dependency_auto?.enabled,o.npm_install_flags=o.npm_install_flags||"",o.react_version=o.react_version||o.react?.version||18,o.polyfill_enabled=!0===o.polyfill||o.polyfill&&!1!==o.polyfill?.enabled,o.nunjucks_enabled=!0===o.nunjucks||o.nunjucks&&!1!==o.nunjucks?.enabled,H({features:o,packageDevDependencies:a}),X({features:o,packageDevDependencies:a})},ba=async({atom:e,packageDependencies:t,packageDevDependencies:a})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";a=`^${(await Z({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"yargs",version:"^17"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.19"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&t.push({package:"@flownet/lib-render-templates-dir",version:"0.1.17"}),a.push({package:"@babel/core",version:"^7"}),a.push({package:"@rollup/plugin-commonjs",version:"^26"}),a.push({package:"@rollup/plugin-node-resolve",version:"^15"}),a.push({package:"@rollup/plugin-replace",version:"^5"}),a.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&a.push({package:"rollup-plugin-dts",version:"^6"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),a.push({package:"@rollup/plugin-alias",version:"^5"}),a.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6"}),a.push({package:"@babel/preset-env",version:"^7"}),a.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":a.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":a.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":a.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":a.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":a.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.nunjucks_enabled&&a.push({package:"@fnet/rollup-plugin-nunjucks",version:"0.1.3"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.4"}),e.doc.features.json_enabled&&a.push({package:"@rollup/plugin-json",version:"^6"}),e.doc.features.terser_enabled&&a.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&a.push({package:"@rollup/plugin-wasm",version:"^6"}),e.doc.features.image_enabled&&a.push({package:"@rollup/plugin-image",version:"^3"}),e.doc.features.analyzer_enabled&&a.push({package:"rollup-plugin-analyzer",version:"^3"}),e.doc.features.visualizer_enabled&&a.push({package:"rollup-plugin-visualizer",version:"^5"}),e.doc.features.string_enabled&&a.push({package:"rollup-plugin-string",version:"^3"}),e.doc.features.css_enabled){a.push({package:"rollup-plugin-postcss",version:"^4"}),a.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":a.push({package:"postcss-import",version:"^15"});break;case"postcss-url":a.push({package:"postcss-url",version:"^10"});break;case"postcss-preset-env":a.push({package:"postcss-preset-env",version:"^9"});break;case"autoprefixer":a.push({package:"autoprefixer",version:"^10"});break;case"cssnano":a.push({package:"cssnano",version:"^6"})}}))}e.doc.features.polyfill_enabled&&a.push({package:"rollup-plugin-node-polyfills",version:"^0.2"}),e.doc.features.copy_enabled&&(a.push({package:"rollup-plugin-copy",version:"^3"}),a.push({package:"chokidar",version:"^3"}))},_a=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating app folder"});const s={atom:e,packageDependencies:o,ts:Date.now()},n=a.templateDir,r=V.resolve(a.projectDir,"src/app");Q.existsSync(r)||Q.mkdirSync(r,{recursive:!0});let i=["index.js.njk"];!1!==e.doc.features.app.html&&i.push("index.html.njk"),await ee({pattern:i,dir:V.resolve(n,"src/app"),outDir:r,context:s})},va=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:s})=>{await s({message:"Creating package.json."});a.filter((e=>!0===e.dev)).forEach((e=>{o.find((t=>t.package===e.package))||o.push(e);const t=a.findIndex((t=>t.package===e.package));a.splice(t,1)}));const n=a.find((e=>"react"===e.package)),r=a.find((e=>"react-dom"===e.package));n&&!r?a.push({package:"react-dom",version:n.version}):n&&r&&(r.version=n.version),n&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const i=[];!0===e.doc.features.app.enabled&&i.push({file:oe.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&i.push({file:oe.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of i){const s=t.file;if(!ae.existsSync(s))throw new Error(`App file not found: ${s}`);const n=await se({file:s,recursive:!0}),r=!0===e.doc.features.all_parsed_imports?n.all:n.required;for await(const e of r){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const s=(await ne({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?o:a).push({package:e.package,subpath:e.subpath,version:`^${s}`,type:"npm"})}}const c={atom:e,packageDependencies:a,packageDevDependencies:o},p=t.templateCommonDir,l=te.compile(ae.readFileSync(oe.resolve(p,"package.json.njk"),"utf8"),te.configure(p)).render(c),d=t.projectDir,m=oe.resolve(d,"package.json");ae.writeFileSync(m,l,"utf8")},ja=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const s={atom:e,packageDependencies:o},n=a.templateDir,r=ie.resolve(a.projectDir,"src/cli");re.existsSync(r)||re.mkdirSync(r,{recursive:!0}),await ce({pattern:["index.js.njk"],dir:ie.resolve(n,"src/cli"),outDir:r,context:s})},ka=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},n=le.resolve(a.projectDir,"src","default/index.js");if(!pe.existsSync(n))throw new Error(`Entry file not found: ${n}`);const r=(await me({file:n,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&&r.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(r.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<r.length;e++){const a=r[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(r)}}const p=a.templateCommonDir;let l=de.compile(pe.readFileSync(le.resolve(p,"rollup.config.mjs.njk"),"utf8"),de.configure(p)).render(s);const d=a.projectDir;let m=le.resolve(d,"rollup.config.mjs");pe.writeFileSync(m,l,"utf8")},xa=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let s={};const n=e.doc.inputs||[],r=[],i=e.doc.input;if(i?s=await ye({schema:i}):n.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&r.push(e);const t={};Reflect.has(e,"type")&&(t.type=e.type),Reflect.has(e,"default")&&(t.default=e.default),Reflect.has(e,"choices")&&(t.choices=e.choices),(Reflect.has(e,"describe")||Reflect.has(e,"description"))&&(t.describe=e.describe||e.description),Reflect.has(e,"alias")&&(t.alias=e.alias),Reflect.has(e,"required")&&!0===e.required&&(t.required=!0),Reflect.has(e,"hidden")&&!0===e.hidden&&(t.hidden=!0),Reflect.has(e,"array")&&!0===e.array&&(t.array=!0),Reflect.has(e,"normalize")&&!0===e.normalize&&(t.normalize=!0),Reflect.has(e,"nargs")&&(t.nargs=e.nargs),s[e.name]=t})),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const t=e.doc.features.cli.fargs,a={type:"string",describe:"Config name to load args",hidden:!1},o={type:"array",describe:"Tags to filter the config",hidden:!1};Reflect.has(t,"default")&&(a.default=t.default),(Reflect.has(t,"describe")||Reflect.has(t,"description"))&&(a.describe=t.describe||t.description),Reflect.has(t,"choices")&&(a.choices=t.choices),s.fargs=a,s.ftag=o}const c={options:s,imports:r,atom:e},p=a.templateDir,l=fe.compile(ue.readFileSync(ge.resolve(p,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=a.projectDir,m=ge.resolve(d,"src/default/to.args.js");ue.writeFileSync(m,l,"utf8")},Da=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},n=a.templateCommonDir,r=be.compile(he.readFileSync(we.resolve(n,".gitignore.njk"),"utf8"),be.configure(n)).render(s),i=a.projectDir,c=we.resolve(i,".gitignore");he.writeFileSync(c,r,"utf8")},Aa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const s={atom:e,packageDependencies:o},n=a.templateCommonDir,r=je.compile(_e.readFileSync(ve.resolve(n,"tsconfig.json.njk"),"utf8"),je.configure(n)).render(s),i=a.projectDir,c=ve.resolve(i,"tsconfig.json");_e.writeFileSync(c,r,"utf8")},Sa=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const s="readme.md",n=`Creating ${s}`;if(await a({message:n}),t.project?.readme){const e=t.projectDir,a={content:t.project.readme.doc.content},o=De.resolve(t.project.projectDir,"fnet/how-to.md");if(xe.existsSync(o)){const e=xe.readFileSync(o,"utf8");a.howto=e}const n=De.resolve(t.project.projectDir,"fnet/input.yaml");if(xe.existsSync(n)){const e=await Ae({file:n,tags:t.tags});a.input=e.content}const r=t.templateCommonDir,i=ke.compile(xe.readFileSync(De.resolve(r,`${s}.njk`),"utf8"),ke.configure(r)).render(a),c=De.resolve(e,`${s}`);xe.writeFileSync(c,i,"utf8")}else if(e.id){const a=await o.first({type:"wiki",parent_id:e.id});if(!a||"markdown"!==a.doc?.["content-type"])return;const{content:n,...r}=a.doc,i={content:n},c=t.templateCommonDir,p=ke.compile(xe.readFileSync(De.resolve(c,`${s}.njk`),"utf8"),ke.configure(c)).render(i),l=t.projectDir,d=De.resolve(l,`${s}`);xe.writeFileSync(d,p,"utf8")}},Pa=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=Pe.join("src","**","*");if(0!==Se.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},Ia=async({atom:e,setInProgress:t,context:a})=>{if(!e.doc.features.dts_enabled)return;const o=a.projectDir;await t({message:"Creating .d.ts"});if(0!==Ie.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},Ea=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==Ee.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},Ta=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==Te.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},$a=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:s,setInProgress:n,deploymentProject:r,yamlTarget:i}=e;if(!0===s.enabled)if("lib"===s.name)await Qt({...e});else if("red"===s.name)await Zt({...e});else if("npm"===s.name)await Yt({...e});else if("gcs"===s.name)await Xt({...e});else if("gitlab"===s.name)await Ht({...e});else if("fnet-package"===s.name)await na({...e});else if("fnet-form"===s.name)await ra({...e});else if("fnet-node"===s.name)await ca({...e});else if("fnet-flow"===s.name)await ia({...e});else{let e;if("nextjs"===s.name?e=oa:"webos"===s.name?e=aa:"electron"===s.name?e=ta:"docker"===s.name?e=sa:"ios"===s.name?e=Vt:"macos"===s.name?e=ea:"rust"===s.name&&(e=pa),!e)return;await e({atom:t,target:s,onProgress:n,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:i}),r.isDirty=!0}},{Atom:Oa}=y,Ca=M,Ra=t,Ma=_,Fa=F,qa=q;var za=class{#e;#t;#a;#o;#s;#n;#r;#i;#c;#p;#l;#d;#m;#u;#g;#f;#y;constructor(e){this.#e=new ha,this.#t=e,this.#n=[],this.#r=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#n,packageDevDependencies:this.#r,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Oa,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 fa(),this.#c=this.#t.buildId||ya(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.#l=this.#t.protocol,this.#p="BUILD:"+this.#c,this.#d=(await Ra({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await wa(this.#y),await ba(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#p,{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 Oa.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"];la.existsSync(e)&&la.readdirSync(e).forEach((o=>{a.includes(o)||(t=ua.rm("-rf",da.join(e,o)))}));let o=e;if(!la.existsSync(o)&&(t=ua.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=da.join(e,"src"),!la.existsSync(o)&&(t=ua.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=da.join(e,"src","default"),!la.existsSync()&&(t=ua.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=ga.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.#s=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#n})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],s=await this.findAtomLibrary({url:o.name});o.atom=s;const n=s.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));n?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=Ca({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#l),"ac:"===t.protocol){const a=t.pathname.split("/");if(1===a.length)return await Oa.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await Oa.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Oa.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=da.resolve(this.#t.projectSrcDir,"index.js"),a=await Ma({file:t,recursive:!0}),o=e.doc.dependencies,s=!0===this.#a.doc.features.all_parsed_imports?a.all:a.required;for await(const e of s){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await Fa({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=da.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=da.relative(da.join(this.#t.projectDir,"src","default"),e);if(!la.existsSync(e)){la.mkdirSync(da.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",la.writeFileSync(e,t,"utf8")}a.relativePath=t.split(da.sep).join("/"),this.#a.typesDir=`./types/${da.basename(o)}/src`}else{const e=da.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;la.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#s.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},t=this.#t.templateDir,a=ga.compile(la.readFileSync(da.resolve(t,da.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=da.resolve(o,da.join("src","default","index.js"));la.writeFileSync(s,a,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:a,...o}=this.#a.doc,s={content:ma.stringify(o)},n=this.#t.templateDir,r=ga.compile(la.readFileSync(da.resolve(n,`${e}.njk`),"utf8"),this.#o).render(s),i=this.#t.projectDir,c=da.resolve(i,`${e}`);la.writeFileSync(c,r,"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 Oa.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 Oa.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:a}=t,o=a.get("targets")||[],s=t.doc.targets||[];for(let e=0;e<s.length;e++){const a=s[e],n=o.items[e];await $a({...this.#y,deploymentProject:t,deploymentProjectTarget:a,yamlTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await Oa.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await Oa.update(o,{id:o.id})):o=await Oa.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(qa.blue(e)),await this._cache_set(this.#p,{status:"IN_PROGRESS",message:e})}async build(){try{this.#u&&(await this.createAtomLibFiles({libs:this.#s}),await this.createEngine(),await this.createProjectYaml(),await Sa(this.#y),await Aa(this.#y),await Da(this.#y),await xa(this.#y),await ja(this.#y),await _a(this.#y),await ka(this.#y),await va(this.#y),await Pa(this.#y),await Ia(this.#y),this.#g&&(await Ea(this.#y),await Ta(this.#y),this.#f&&await this.deploy())),await this._cache_set(this.#p,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#p,{status:"FAILED",message:e.message||e}),console.log(e),e}}};const La=l,Na=d;var Ua=function({baseDir:e=__dirname}){let t=e;for(;t!==Na.parse(t).root;){const e=Na.join(t,"node_modules");if(La.existsSync(e))return e;t=Na.dirname(t)}return null};const Ba=process.cwd(),{spawn:Ja}=e;t({name:["redis"],dir:Ba,optional:!0});const Wa=a,Ka=o,Ga=s,Ha=n,Xa=r,Ya=i,Za=t,Qa=c,Va=p,eo=za,to=Ua({baseDir:__dirname}),ao="win32"===process.platform?";":":";process.env.PATH=`${Wa.join(to,"/.bin")}${ao}${process.env.PATH}`;let oo=Ka(process.argv.slice(2)).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=Wa.resolve(to,"@fnet/cli-project-node/dist/template/project"),a=Wa.resolve(Ba,e.name);Ga.existsSync(a)||Ga.mkdirSync(a),await Va({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=Xa.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Xa.which("git")&&(o=Xa.exec("git init --initial-branch=main",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(Xa.which("code")&&e.vscode&&(o=Xa.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=Wa.resolve(to,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=Wa.basename(a),e.update){if(await Va({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==Xa.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",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await no(e),a=new eo(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"}).option("ftag",{type:"array"})),(async e=>{try{const t=await no({...e,mode:"all"}),a=new eo(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"}).option("ftag",{type:"array"})),(async e=>{try{const t=await no({...e,mode:"file"}),a=new eo(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function so(e,{name:t,bin:a,preArgs:o=[]}){return e.command(`${t||a} [commands..]`,`${a} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await no(e),{projectDir:s}=t,n=process.argv.slice(3);Ja(a,[...o,...n],{cwd:s,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function no(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Wa.resolve(to,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Wa.resolve(to,"./@fnet/cli-project-common/dist/template/default"),projectDir:Wa.resolve(Ba,`./.output/${e.id}`),tags:e.ftag};{const t=await async function({tags:e}){const t=Wa.resolve(Ba,"node.yaml");if(!Ga.existsSync(t))throw new Error("node.yaml file not found in current directory.");const{raw:a,parsed:o}=await Ya({file:t,tags:e}),s=Wa.dirname(t),n={libraryAtom:{doc:{...o},fileName:"index"},projectDir:s,projectFilePath:t,projectFileContent:a,projectFileParsed:o};let r=Wa.resolve(s,"fnet/targets.yaml");if(!Ga.existsSync(r)&&(r=Wa.resolve(s,"node.devops.yaml"),Ga.existsSync(r))){const e=Wa.resolve(s,"fnet");Ga.existsSync(e)||Ga.mkdirSync(e),Ga.copyFileSync(r,Wa.resolve(s,"fnet/targets.yaml")),Ga.unlinkSync(r)}if(Ga.existsSync(r)){const{raw:t,parsed:a}=await Ya({file:r,tags:e}),o=Ha.parseDocument(t);n.devops={filePath:r,fileContent:t,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{Ga.writeFileSync(n.devops.filePath,o.toString())}}}const i=Wa.resolve(s,"readme.md");if(Ga.existsSync(i)){const e=Ga.readFileSync(i,"utf8");n.readme={filePath:i,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return n}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Wa.resolve(to,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:Wa.resolve(to,"./@fnet/cli-project-common/dist/template/default"),projectDir:Wa.resolve(t.projectDir,"./.workspace"),projectSrcDir:Wa.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}oo=oo.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await no(e),{project:a}=t,{projectDir:o,projectFileParsed:s}=a,n=s.input;if(!n)throw new Error("Config schema not found in project file.");const r=await Qa({schema:n,format:"yaml"}),i=Wa.resolve(o,".fnet");Ga.existsSync(i)||Ga.mkdirSync(i);const c=Wa.resolve(i,`${e.name}.fnet`);Ga.writeFileSync(c,r)}catch(e){console.error(e.message),process.exit(1)}})),oo=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await no(e),{project:a}=t,{projectDir:o,projectFileParsed:s}=a,n=s.input;if(!n)throw new Error("Config schema not found in project file.");const r=Wa.resolve(o,".fnet"),i=Wa.resolve(r,`${e.name}.fnet`),c=await Qa({schema:n,format:"yaml",ref:i});Ga.existsSync(r)||Ga.mkdirSync(r),Ga.writeFileSync(i,c)}catch(e){console.error(e.message),process.exit(1)}}))}(oo),oo=so(oo,{bin:"npm"}),oo=so(oo,{bin:"node"}),oo=so(oo,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),oo=so(oo,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),oo=so(oo,{name:"app",bin:"npm",preArgs:["run","app","--"]}),oo=so(oo,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),oo=so(oo,{bin:"npx"}),oo=so(oo,{bin:"cdk"}),oo=so(oo,{bin:"aws"}),oo=function(e,{name:t,preArgs:a=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await no(e),{projectDir:o}=t,s=e.config,n=await Za({name:s,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),r=n?.data?.env||void 0,i=e.command,c=process.argv.slice(5);Ja(i,[...a,...c],{cwd:o,stdio:"inherit",shell:!0,env:{...process.env,...r}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(oo,{name:"with"}),oo.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"),s=require("fs"),n=require("yaml"),r=require("shelljs"),i=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),p=require("@flownet/lib-render-templates-dir"),l=require("node:fs"),d=require("node:path"),m=require("nunjucks"),u=require("redis"),g=require("@flownet/lib-is-redis-online"),f=require("nanoid"),y=require("@flownet/lib-atom-api-js"),h=require("axios"),w=require("qs"),b=require("lodash.merge"),v=require("@flownet/lib-parse-imports-js"),_=require("@flownet/lib-list-npm-versions"),j=require("@fnet/yargs-options-from-schema"),k=require("@fnet/shell"),x=require("semver"),D=require("node:os"),A=require("@node-red/util"),S=require("@flownet/lib-to-ios-app"),P=require("lodash.clonedeep"),I=require("@flownet/lib-to-macos-app"),E=require("@flownet/lib-to-electron"),T=require("@flownet/lib-to-webos"),$=require("@flownet/lib-to-nextjs"),O=require("@flownet/lib-to-docker"),C=require("form-data"),R=require("@fnet/to-rust"),M=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-pick-npm-versions"),q=require("chalk");const L=u,N=g;const{Api:U}=y,z=h.default,B=w;var J=({feature:e,features:t,packageDevDependencies:a})=>{const{name:o,packages:s,options:n}=e,r=`${o}_enabled`,i=t.rollup_output||{},c=Object.keys(i),p=n||{};c.forEach((e=>{const a=t.rollup_output[e];a?.[o]&&!1!==a?.[o]?.enabled?(!0===a[o]&&(a[o]={enabled:!0,options:p}),a[o].options=a[o].options||{},a[o].options={...p,...a[o].options}):delete a[o]}));const l=c.some((e=>!0===t.rollup_output[e][o]?.enabled));t[r]=l,l&&s.forEach((e=>a.push({package:e[0],version:e[1]})))};const W=J;const K=J;const G=J;const H=J;const X=J;const Y=J;const Z=J;const Q=J;const V=J;const ee=b,te=l,ae=d,oe=v,se=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,s=o.rollup_output||{},n=Object.keys(s),r={generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}};n.forEach((e=>{const t=o.rollup_output[e];if(t?.workbox&&!1!==t?.workbox?.enabled){if(!0===t.workbox){if(!r)return void delete t.workbox;t.workbox={enabled:!0,options:{generate:r.generate}}}t.workbox.options=t.workbox.options||{},t.workbox.options.generate=t.workbox.options.generate||r.generate}else delete t.workbox}));const i=n.some((e=>!0===o.rollup_output[e].workbox?.enabled));o.workbox_enabled=i,o.workbox_enabled&&a.push({package:"rollup-plugin-workbox",version:"^8"})},ne=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,s=o.rollup_output||{},n=Object.keys(s),r={};n.forEach((e=>{const t=o.rollup_output[e];t?.gzip&&!1!==t?.gzip?.enabled?(!0===t.gzip&&(t.gzip={enabled:!0,options:r}),t.gzip.options=t.gzip.options||{},t.gzip.options={...r,...t.gzip.options}):delete t.gzip}));const i=n.some((e=>!0===o.rollup_output[e].gzip?.enabled));o.gzip_enabled=i,o.gzip_enabled&&a.push({package:"rollup-plugin-gzip",version:"^4"})},re=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;W({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.3"]]},features:o,packageDevDependencies:a})},ie=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;K({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:o,packageDevDependencies:a})},ce=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;G({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:o,packageDevDependencies:a})},pe=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;H({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12}},features:o,packageDevDependencies:a})},le=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;X({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:a})},de=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Y({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:a})},me=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Z({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:a})},ue=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Q({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:o,packageDevDependencies:a})},ge=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;V({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:o,packageDevDependencies:a})};function fe({dir:e,name:t="index"}){let a=ae.resolve(e,`./${t}.tsx`);if(te.existsSync(a)||(a=ae.resolve(e,`./${t}.ts`)),te.existsSync(a)||(a=ae.resolve(e,`./${t}.jsx`)),te.existsSync(a)||(a=ae.resolve(e,`./${t}.js`)),!te.existsSync(a))return{};const o=a,s=ae.extname(a);return{file:o,ext:s,ts:".ts"===s||".tsx"===s,name:t}}const ye=_;const he=l,we=d,be=p;const ve=m,_e=l,je=d,ke=v,xe=_;const De=l,Ae=d,Se=p;const Pe=l,Ie=d,Ee=m,Te=v;const $e=l,Oe=d,Ce=m,Re=j;const Me=l,Fe=d,qe=m;const Le=l,Ne=d,Ue=m;const ze=m,Be=l,Je=d,We=i;const Ke=r,Ge=a;const He=r;const Xe=r;const Ye=r;const Ze=k,Qe=t;const Ve=l,et=d,tt=x,at=k,ot=t;const st=l,nt=d,rt=x,it=r,ct=t;const pt=l,lt=d,dt=D,mt=m,ut=A,gt=t;const ft=s,yt=a,ht=t;const wt=t,bt=S,vt=P,_t=x;const jt=t,kt=I,xt=P,Dt=x;const At=t,St=E,Pt=P,It=x;const Et=t,Tt=T,$t=P,Ot=x;const Ct=t,Rt=$,Mt=P,Ft=x;const qt=t,Lt=O,Nt=P,Ut=x;const zt=l,Bt=d,Jt=x,Wt=k,Kt=t,Gt=h.default;const Ht=x,Xt=t,Yt=h.default;const Zt=x,Qt=t,Vt=h.default,ea=s,ta=k,aa=C;const oa=x,sa=t,na=h.default,ra=s,ia=k,ca=C;const pa=t,la=R,da=P,ma=x;const ua=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:s})=>{await e({message:"Deploying it as gitlab project."});const n=t.projectDir;let r="fnet-to-gitlab";const i=o.params.config||"gitlab",c=await Qe({name:i,dir:t.projectDir,tags:t.tags});if(!c)throw new Error(`Couldnt load config ${i}`);const{data:p}=c.data;r+=` --projectGroupId=${p.projectGroupId}`,r+=` --projectPath='${n}'`,r+=` --projectName='${o.params.name}'`,r+=` --projectBranch='${o.params.branch||"main"}'`,r+=` --gitlabHost='${p.gitlabHost}'`,r+=` --gitlabToken='${p.gitlabToken}'`,r+=` --gitlabUsername='${p.gitlabUsername}'`,r+=` --gitlabUserEmail='${p.gitlabUserEmail}'`,!0!==o.dryRun&&(await Ze({cmd:r}),a.isDirty=!0)},ga=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:s,yamlTarget:n})=>{await e({message:"Deploying it as gcs package."});const r=t.projectDir,i=et.resolve(r,"package.json"),c=Ve.readFileSync(i),p=JSON.parse(c);p.name=o.params.name,p.version=tt.inc(o.params.version,"patch"),delete p.scripts,delete p.devDependencies,Ve.writeFileSync(i,JSON.stringify(p,null,"\t"));const{file:l,data:d}=await ot({name:o.config||"gcs",dir:t.projectDir,tags:t.tags});let m="fnet-files-to-gcs";m+=` --projectId='${d.env.GCS_PROJECT_ID}'`,m+=` --bucketName='${d.env.GCS_BUCKET_NAME}'`,m+=` --keyFilename='${et.resolve(et.dirname(l),d.env.GCS_UPLOADER_KEY_FILE)}'`,m+=` --dir='${r}'`,m+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",m+=` --destDir='${p.name}/${p.version}'`,m+=" --metadata.cacheControl='public, max-age=31536000, immutable'",d.env.DOMAIN&&(m+=` --domain='${d.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(m+=" --dryRun"),await at({cmd:m}),Ve.writeFileSync(i,c),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=p.version,n.get("params").set("version",p.version),await s({target:o,packageJSON:p}))},fa=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,yamlTarget:n})=>{await t({message:"Deploying it as npm package."});const r=a.projectDir,i=nt.resolve(r,"package.json"),c=st.readFileSync(i),p=JSON.parse(c);p.name=s.params.name,p.version=rt.inc(s.params.version,"patch");const l=s.params.bin?.name||s.params.bin;!1!==s.params.bin?.enabled&&l&&"string"==typeof l&&(p.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete p.scripts,delete p.devDependencies,p.scripts={serve:"npx serve ."},st.writeFileSync(i,JSON.stringify(p,null,"\t"));const d=(await ct({name:a.npmConfig||"npm",dir:a.projectDir,tags:a.tags}))?.data;if(st.writeFileSync(nt.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==it.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");st.writeFileSync(i,c),o.isDirty=!0,s.params.version=p.version,n.get("params").set("version",p.version)},ya=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:n,packageDependencies:r,njEnv:i})=>{await t({message:"Deploying it as node-red flow."});const c=a.projectDir,p=a.templateDir,l="workflow"===e.type?"WF":"LIB";let d;if("simple"===s.deploy.template)d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||ut.util.generateId(),label:`${l}/${e.id?e.id:dt.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:ut.util.generateId(),name:e.doc.name,initialize:{content:pt.readFileSync(lt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:ut.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:ut.util.generateId()}}};else if("cronjob"===s.deploy.template){let t=s.params?.schedules?cloneDeep(s.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||ut.util.generateId(),label:`${l}/${e.id?e.id:dt.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:ut.util.generateId(),name:e.doc.name,initialize:{content:pt.readFileSync(lt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:ut.util.generateId(),schedules:t},debug:{id:ut.util.generateId()}}}}else{if("http"!==s.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||ut.util.generateId(),label:`${l}/${e.id?e.id:dt.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:ut.util.generateId(),name:e.doc.name,initialize:{content:pt.readFileSync(lt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:ut.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:ut.util.generateId()},debug:{id:ut.util.generateId()}}}}let m=mt.compile(pt.readFileSync(lt.resolve(p,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(pt.writeFileSync(lt.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=(await gt({name:a.redConfig||"red",dir:a.projectDir,tags:a.tags}))?.data,g=s.deploy.url||u.env.RED_URL,f={};if(!1!==s.deploy.auth&&(f.Authorization="Bearer "+atomAccessToken),s.deploy.id)!0===s.actions?.delete?(await axios({method:"DELETE",url:`${g}/flow/${s.deploy.id}`,headers:f}),delete s.actions.delete,delete s.deploy.id,s.enabled=!1):await axios({method:"PUT",url:`${g}/flow/${s.deploy.id}`,data:m,headers:f});else{const e=await axios({method:"POST",url:`${g}/flow`,data:m,headers:f});s.deploy.id=e.data.id}},ha=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:s,deploymentProject:n,deploymentProjectTarget:r})=>{await a({message:"Deploying it as workflow lib."});const i=(await ht({name:"atom",dir:o.projectDir,tags:o.tags}))?.data;let c,p,l,d=r.deploy.name.split("/");if(1===d.length)p=i.env.ATOM_LIBRARIES_ID,l=r.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:i.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");p=e.id,l=d[1]}}if(!0===r.dryRun)return;if(n.isDirty=!0,r.deploy.id){if(c=await t.get({id:r.deploy.id}),!c)return}else{if(c=await t.create({parent_id:p,doc:{name:l,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;r.deploy.id=c.id}const m=o.projectDir;c.doc.contents=[{content:ft.readFileSync(yt.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:ft.readFileSync(yt.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:ft.readFileSync(yt.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=l,c.doc.dependencies=s,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},wa=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as ios-app package."});const i=t?.config?await wt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=_t.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=vt(t.params);p.dependencies=vt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await bt(l)}},ba=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as macos-app package."});const i=t?.config?await jt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Dt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=xt(t.params);p.dependencies=xt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await kt(l)}},va=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as electron package."});const i=t?.config?await At({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=It.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=Pt(t.params);p.dependencies=Pt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await St(l)}},_a=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as webos package."});const i=t?.config?await Et({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Ot.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=$t(t.params);p.dependencies=$t(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Tt(l)}},ja=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as nextjs package."});const i=t?.config?await Ct({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Ft.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=Mt(t.params);p.dependencies=Mt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Rt(l)}},ka=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as docker package."});const i=t?.config?await qt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Ut.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=Nt(t.params);p.dependencies=Nt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Lt(l)}},xa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet package."});const n=t.projectDir,r=Bt.resolve(n,"package.json"),i=zt.readFileSync(r),c=JSON.parse(i);c.name=o.params.name,c.version=Jt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,zt.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:p,data:l}=await Kt({name:o.config||"fnet-package",dir:t.projectDir,tags:t.tags});if(!l.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${p}`);if(!l.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${p}`);if(!l.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${p}`);const d=`${l.env.ATOM_API_URL}/v1/auth/token`,m=l.env.ATOM_API_USERNAME,u=l.env.ATOM_API_PASSWORD;let g=await Gt({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='${l.env.GCS_PROJECT_ID}'`,y+=` --bucketName='${l.env.GCS_BUCKET_NAME}'`,y+=` --keyFilename='${Bt.resolve(Bt.dirname(p),l.env.GCS_UPLOADER_KEY_FILE)}'`,y+=` --dir='${n}'`,y+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",y+=` --destDir='${c.name}/${c.version}'`,y+=" --metadata.cacheControl='public, max-age=31536000, immutable'",l.env.DOMAIN&&(y+=` --domain='${l.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(y+=" --dryRun"),await Wt({cmd:y}),zt.writeFileSync(r,i),!0===o.dryRun)return;a.isDirty=!0,o.params.version=c.version,s.get("params").set("version",c.version);const h=`${l.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(g=await Gt({method:"POST",url:h,data:{name:c.name,version:c.version,version_domain:l.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.")},Da=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet form."});const n=Ht.inc(o.params.version,"patch"),{file:r,data:i}=await Xt({name:o.config||"fnet-form",dir:t.projectDir,tags:t.tags});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const c=`${i.env.ATOM_API_URL}/v1/auth/token`,p=i.env.ATOM_API_USERNAME,l=i.env.ATOM_API_PASSWORD;let d=await Yt({method:"POST",url:c,data:{username:p,password:l},headers:{"Content-Type":"application/json"}});const m=d.data?.access_token;if(!m)throw new Error(`Invalid access_token from ${c}`);a.isDirty=!0,o.params.version=n,s.get("params").set("version",n);const u=`${i.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(d=await Yt({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`}}),d.data?.error)throw new Error("Error publishing fnet form.")},Aa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet flow."});const n=Zt.inc(o.params.version,"patch"),{file:r,data:i}=await Qt({name:o.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const c=`${i.env.ATOM_API_URL}/v1/auth/token`,p=i.env.ATOM_API_USERNAME,l=i.env.ATOM_API_PASSWORD;let d=await Vt({method:"POST",url:c,data:{username:p,password:l},headers:{"Content-Type":"application/json"}});const m=d.data?.access_token;if(!m)throw new Error(`Invalid access_token from ${c}`);a.isDirty=!0,o.params.version=n,s.get("params").set("version",n);const u=`${i.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(d=await Vt({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`}}),d.data?.error)throw new Error("Error publishing fnet flow.");const g=d.data?.upload.id;let f="fnet-dir-zipper";f+=` --sourceDir='${t.project.projectDir}'`,f+=" -p=**/*",f+=" -g",f+=" --stdout_format=json";const y=await ta({cmd:f});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new aa;w.append("file",ea.createReadStream(h));const b=await Vt.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${g}`,headers:{...w.getHeaders(),Authorization:`Bearer ${m}`},data:w});if(b.data?.error)throw new Error("Error uploading fnet flow.")},Sa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet node."});const n=oa.inc(o.params.version,"patch"),{file:r,data:i}=await sa({name:o.config||"fnet-node",dir:t.project.projectDir,tags:t.tags});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const c=`${i.env.ATOM_API_URL}/v1/auth/token`,p=i.env.ATOM_API_USERNAME,l=i.env.ATOM_API_PASSWORD;let d=await na({method:"POST",url:c,data:{username:p,password:l},headers:{"Content-Type":"application/json"}});const m=d.data?.access_token;if(!m)throw new Error(`Invalid access_token from ${c}`);a.isDirty=!0,o.params.version=n,s.get("params").set("version",n);const u=`${i.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(d=await na({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`}}),d.data?.error)throw new Error("Error publishing fnet node.");const g=d.data?.upload.id;let f="fnet-dir-zipper";f+=` --sourceDir='${t.project.projectDir}'`,f+=" -p=**/*",f+=" -g",f+=" --stdout_format=json";const y=await ia({cmd:f});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new ca;w.append("file",ra.createReadStream(h));const b=await na.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${g}`,headers:{...w.getHeaders(),Authorization:`Bearer ${m}`},data:w});if(b.data?.error)throw new Error("Error uploading fnet node.")},Pa=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as Rust package."});const i=t?.config?await pa({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=ma.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=da(t.params);p.dependencies=da(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await la(l)}};const Ia=l,Ea=d,Ta=n,$a=r,Oa=m,Ca=async()=>{if(!await N({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=L.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Ra}=f,Ma=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(U.set_api_url(e.data.url),t)return U.set_req_token(t),void a(t);z({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:B.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{U.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{U.set_req_token(),o(e)}))}))}},Fa=async e=>{const{atom:t,context:a,packageDevDependencies:o}=e;t.doc.features=t.doc.features||{};const s=t.doc.features;s.project=s.project||{},s.project.format=s.project.format||s.project_format||"esm",s.project_format=s.project.format,s.dts_enabled=!0===s.dts||void 0!==s.dts&&!1!==s.dts,s.hasOwnProperty("all_parsed_imports")||(s.all_parsed_imports=!0);const n=ae.resolve(a.project.projectDir),r=fe({dir:ae.resolve(n,"./app")});if(r.file){let e=await oe({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.app_uses_jsx=t,s.app_has_entry=!0,e=await oe({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.app_entry_uses_jsx=t,s.app_entry_is_ts=r.ts,s.app_entry_ext=r.ext}const i=fe({dir:ae.resolve(n,"./cli")});if(i.file){let e=await oe({file:i.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.cli_uses_jsx=t,s.cli_has_entry=!0,e=await oe({file:i.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.cli_entry_uses_jsx=t,s.cli_entry_is_ts=i.ts,s.cli_entry_ext=i.ext}if("workflow.lib"===t.type){const e=fe({dir:ae.resolve(n,"./src")});if(e.file){let t=await oe({file:e.file,recursive:!0}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.src_uses_jsx=a,s.src_has_entry=!0,t=await oe({file:e.file}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.src_entry_uses_jsx=a,s.src_entry_is_ts=e.ts,s.src_entry_ext=e.ext}}const c=!0===s.app_entry_uses_jsx,p=!0===s.cli_entry_uses_jsx;s.form_enabled=!0===t.doc.form||!0===t.doc.form?.enabled||!0===s.form||!0===s.form?.enabled,s.multiple_enabled=s.multiple_enabled||!0===s.multiple||!0===s.multiple?.enabled,!1===s.app?s.app={enabled:!1}:!0===s.app?s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:c}:s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:c,...s.app||{}},s.app.enabled=!0===s.app.enabled&&(!0===t.doc.features.form_enabled||!0===s.app.extend||!0===s.app.enabled),s.app.format=s.app.format||"esm",s.app.folder=s.app.folder||s.app.format||"default",!1===s.cli?s.cli={enabled:!1}:!0===s.cli?s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:p}:s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:p,...s.cli||{}},s.cli.enabled=!0===s.cli.enabled&&(!1===t.doc.features.form_enabled||!0===s.cli.extend||!0===s.cli.enabled),s.cli.format=s.cli.format||"esm",s.cli.folder=s.cli.folder||s.cli.folder||"esm",s.cli.node_options=s.cli.node?.options||s.cli.node_options||"";const l={cjs:{format:"cjs",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!0},esm:{format:"esm",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0},iife:{format:"iife",context:s.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==s.iife,terser:!0}},d={};!0===s.webos&&(l.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",babel_options:{targets:{chrome:"79"}}}),!0===s.electron&&(l.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===s.nextjs&&(l.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===s.ios&&(l.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===s.macos&&(l.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===s.app.enabled&&(s.app.dir=`./dist/app/${s.app.folder}`,l.app={format:s.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:s.app.dir,terser:!0,output_exports:!1===s.app.export?"none":"auto"},d.targets=d.targets||[],d.targets.push({src:"./src/app/index.html",dest:s.app.dir})),!0===s.cli.enabled&&(s.cli.dir=`./dist/cli/${s.cli.folder}`,l.cli={format:s.cli.format,context:"global",babel:!0===s.src_uses_jsx||!0===s.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:s.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===s.cli.export?"none":"auto"});const m={server:".",startPath:`${ae.normalize(s.app.dir||".")}`,files:[ae.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=ee({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=ee(m,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=ee({},s.replace_options||s.replace?.options||{}),s.css_options=ee({},s.css_options||s.css?.options||{}),s.copy_options=ee(d,s.copy_options||s.copy?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=ee(l,s.rollup_output||s.rollup?.output||{}),s.preact_enabled=!0===s.preact||s.preact&&!1!==s.preact?.enabled;let u=Object.keys(l);for(const e of u){const t=l[e];t&&(!1!==s.rollup[e]?(t.babel_options=t.babel_options||s.babel_options,t.browsersync_options=ee(s.browsersync_options,t.browsersync_options),t.replace_options=ee(s.replace_options,t.replace_options),t.css_options=ee(s.css_options,t.css_options),t.copy_options=ee(s.copy_options,t.copy_options),t.nunjucks_options=ee(s.nunjucks_options,t.nunjucks_options),s.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),s.form_enabled&&(t.babel=!0)):delete s.rollup_output[e])}u=Object.keys(s.rollup_output),s.babel_enabled=u.some((e=>!0===s.rollup_output[e].babel)),s.browser_enabled=u.some((e=>!0===s.rollup_output[e].babel)),s.browsersync_enabled=!1!==s.browsersync&&u.some((e=>!0===s.rollup_output[e].browsersync)),s.browsersync_enabled=s.browsersync_enabled&&s.app.enabled,s.css_enabled=!0===s.css||s.css&&!1!==s.css?.enabled,s.copy_enabled=s.app.enabled||s.copy_enabled||s.copy&&!1!==s.copy?.enabled,s.dependency_auto_enabled=!1!==s.dependency_auto&&!1!==s.dependency_auto?.enabled,s.npm_install_flags=s.npm_install_flags||"",s.react_version=s.react_version||s.react?.version||18,ge(e),ue(e),me(e),le(e),de(e),pe(e),ce(e),ie(e),re(e),se(e),ne(e)},qa=async({atom:e,packageDependencies:t,packageDevDependencies:a})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";a=`^${(await ye({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"yargs",version:"^17"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.19"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&t.push({package:"@flownet/lib-render-templates-dir",version:"0.1.17"}),a.push({package:"@babel/core",version:"^7"}),a.push({package:"@rollup/plugin-commonjs",version:"^26"}),a.push({package:"@rollup/plugin-node-resolve",version:"^15"}),a.push({package:"@rollup/plugin-replace",version:"^5"}),a.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&a.push({package:"rollup-plugin-dts",version:"^6"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),a.push({package:"@rollup/plugin-alias",version:"^5"}),a.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6"}),a.push({package:"@babel/preset-env",version:"^7"}),a.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":a.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":a.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":a.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":a.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":a.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.4"}),e.doc.features.css_enabled){a.push({package:"rollup-plugin-postcss",version:"^4"}),a.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":a.push({package:"postcss-import",version:"^15"});break;case"postcss-url":a.push({package:"postcss-url",version:"^10"});break;case"postcss-preset-env":a.push({package:"postcss-preset-env",version:"^9"});break;case"autoprefixer":a.push({package:"autoprefixer",version:"^10"});break;case"cssnano":a.push({package:"cssnano",version:"^6"})}}))}e.doc.features.copy_enabled&&(a.push({package:"rollup-plugin-copy",version:"^3"}),a.push({package:"chokidar",version:"^3"}))},La=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating app folder"});const s={atom:e,packageDependencies:o,ts:Date.now()},n=a.templateDir,r=we.resolve(a.projectDir,"src/app");he.existsSync(r)||he.mkdirSync(r,{recursive:!0});let i=["index.js.njk"];!1!==e.doc.features.app.html&&i.push("index.html.njk"),await be({pattern:i,dir:we.resolve(n,"src/app"),outDir:r,context:s})},Na=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:s})=>{await s({message:"Creating package.json."});a.filter((e=>!0===e.dev)).forEach((e=>{o.find((t=>t.package===e.package))||o.push(e);const t=a.findIndex((t=>t.package===e.package));a.splice(t,1)}));const n=a.find((e=>"react"===e.package)),r=a.find((e=>"react-dom"===e.package));n&&!r?a.push({package:"react-dom",version:n.version}):n&&r&&(r.version=n.version),n&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const i=[];!0===e.doc.features.app.enabled&&i.push({file:je.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&i.push({file:je.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of i){const s=t.file;if(!_e.existsSync(s))throw new Error(`App file not found: ${s}`);const n=await ke({file:s,recursive:!0}),r=!0===e.doc.features.all_parsed_imports?n.all:n.required;for await(const e of r){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const s=(await xe({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?o:a).push({package:e.package,subpath:e.subpath,version:`^${s}`,type:"npm"})}}const c={atom:e,packageDependencies:a,packageDevDependencies:o},p=t.templateCommonDir,l=ve.compile(_e.readFileSync(je.resolve(p,"package.json.njk"),"utf8"),ve.configure(p)).render(c),d=t.projectDir,m=je.resolve(d,"package.json");_e.writeFileSync(m,l,"utf8")},Ua=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const s={atom:e,packageDependencies:o},n=a.templateDir,r=Ae.resolve(a.projectDir,"src/cli");De.existsSync(r)||De.mkdirSync(r,{recursive:!0}),await Se({pattern:["index.js.njk"],dir:Ae.resolve(n,"src/cli"),outDir:r,context:s})},za=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},n=Ie.resolve(a.projectDir,"src","default/index.js");if(!Pe.existsSync(n))throw new Error(`Entry file not found: ${n}`);const r=(await Te({file:n,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&&r.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(r.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<r.length;e++){const a=r[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(r)}}const p=a.templateCommonDir;let l=Ee.compile(Pe.readFileSync(Ie.resolve(p,"rollup.config.mjs.njk"),"utf8"),Ee.configure(p)).render(s);const d=a.projectDir;let m=Ie.resolve(d,"rollup.config.mjs");Pe.writeFileSync(m,l,"utf8")},Ba=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let s={};const n=e.doc.inputs||[],r=[],i=e.doc.input;if(i?s=await Re({schema:i}):n.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&r.push(e);const t={};Reflect.has(e,"type")&&(t.type=e.type),Reflect.has(e,"default")&&(t.default=e.default),Reflect.has(e,"choices")&&(t.choices=e.choices),(Reflect.has(e,"describe")||Reflect.has(e,"description"))&&(t.describe=e.describe||e.description),Reflect.has(e,"alias")&&(t.alias=e.alias),Reflect.has(e,"required")&&!0===e.required&&(t.required=!0),Reflect.has(e,"hidden")&&!0===e.hidden&&(t.hidden=!0),Reflect.has(e,"array")&&!0===e.array&&(t.array=!0),Reflect.has(e,"normalize")&&!0===e.normalize&&(t.normalize=!0),Reflect.has(e,"nargs")&&(t.nargs=e.nargs),s[e.name]=t})),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const t=e.doc.features.cli.fargs,a={type:"string",describe:"Config name to load args",hidden:!1},o={type:"array",describe:"Tags to filter the config",hidden:!1};Reflect.has(t,"default")&&(a.default=t.default),(Reflect.has(t,"describe")||Reflect.has(t,"description"))&&(a.describe=t.describe||t.description),Reflect.has(t,"choices")&&(a.choices=t.choices),s.fargs=a,s.ftag=o}const c={options:s,imports:r,atom:e},p=a.templateDir,l=Ce.compile($e.readFileSync(Oe.resolve(p,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=a.projectDir,m=Oe.resolve(d,"src/default/to.args.js");$e.writeFileSync(m,l,"utf8")},Ja=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},n=a.templateCommonDir,r=qe.compile(Me.readFileSync(Fe.resolve(n,".gitignore.njk"),"utf8"),qe.configure(n)).render(s),i=a.projectDir,c=Fe.resolve(i,".gitignore");Me.writeFileSync(c,r,"utf8")},Wa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const s={atom:e,packageDependencies:o},n=a.templateCommonDir,r=Ue.compile(Le.readFileSync(Ne.resolve(n,"tsconfig.json.njk"),"utf8"),Ue.configure(n)).render(s),i=a.projectDir,c=Ne.resolve(i,"tsconfig.json");Le.writeFileSync(c,r,"utf8")},Ka=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const s="readme.md",n=`Creating ${s}`;if(await a({message:n}),t.project?.readme){const e=t.projectDir,a={content:t.project.readme.doc.content},o=Je.resolve(t.project.projectDir,"fnet/how-to.md");if(Be.existsSync(o)){const e=Be.readFileSync(o,"utf8");a.howto=e}const n=Je.resolve(t.project.projectDir,"fnet/input.yaml");if(Be.existsSync(n)){const e=await We({file:n,tags:t.tags});a.input=e.content}const r=t.templateCommonDir,i=ze.compile(Be.readFileSync(Je.resolve(r,`${s}.njk`),"utf8"),ze.configure(r)).render(a),c=Je.resolve(e,`${s}`);Be.writeFileSync(c,i,"utf8")}else if(e.id){const a=await o.first({type:"wiki",parent_id:e.id});if(!a||"markdown"!==a.doc?.["content-type"])return;const{content:n,...r}=a.doc,i={content:n},c=t.templateCommonDir,p=ze.compile(Be.readFileSync(Je.resolve(c,`${s}.njk`),"utf8"),ze.configure(c)).render(i),l=t.projectDir,d=Je.resolve(l,`${s}`);Be.writeFileSync(d,p,"utf8")}},Ga=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=Ge.join("src","**","*");if(0!==Ke.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},Ha=async({atom:e,setInProgress:t,context:a})=>{if(!e.doc.features.dts_enabled)return;const o=a.projectDir;await t({message:"Creating .d.ts"});if(0!==He.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},Xa=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==Xe.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},Ya=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==Ye.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},Za=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:s,setInProgress:n,deploymentProject:r,yamlTarget:i}=e;if(!0===s.enabled)if("lib"===s.name)await ha({...e});else if("red"===s.name)await ya({...e});else if("npm"===s.name)await fa({...e});else if("gcs"===s.name)await ga({...e});else if("gitlab"===s.name)await ua({...e});else if("fnet-package"===s.name)await xa({...e});else if("fnet-form"===s.name)await Da({...e});else if("fnet-node"===s.name)await Sa({...e});else if("fnet-flow"===s.name)await Aa({...e});else{let e;if("nextjs"===s.name?e=ja:"webos"===s.name?e=_a:"electron"===s.name?e=va:"docker"===s.name?e=ka:"ios"===s.name?e=wa:"macos"===s.name?e=ba:"rust"===s.name&&(e=Pa),!e)return;await e({atom:t,target:s,onProgress:n,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:i}),r.isDirty=!0}},{Atom:Qa}=y,Va=M,eo=t,to=v,ao=F,oo=q;var so=class{#e;#t;#a;#o;#s;#n;#r;#i;#c;#p;#l;#d;#m;#u;#g;#f;#y;constructor(e){this.#e=new Ma,this.#t=e,this.#n=[],this.#r=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#n,packageDevDependencies:this.#r,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Qa,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,a){this._redis_client&&await this._redis_client.SETEX(e,a||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await Ca(),this.#c=this.#t.buildId||Ra(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.#l=this.#t.protocol,this.#p="BUILD:"+this.#c,this.#d=(await eo({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await Fa(this.#y),await qa(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#p,{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 Qa.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"];Ia.existsSync(e)&&Ia.readdirSync(e).forEach((o=>{a.includes(o)||(t=$a.rm("-rf",Ea.join(e,o)))}));let o=e;if(!Ia.existsSync(o)&&(t=$a.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=Ea.join(e,"src"),!Ia.existsSync(o)&&(t=$a.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=Ea.join(e,"src","default"),!Ia.existsSync()&&(t=$a.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Oa.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.#s=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#n})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],s=await this.findAtomLibrary({url:o.name});o.atom=s;const n=s.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));n?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=Va({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#l),"ac:"===t.protocol){const a=t.pathname.split("/");if(1===a.length)return await Qa.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await Qa.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Qa.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=Ea.resolve(this.#t.projectSrcDir,"index.js"),a=await to({file:t,recursive:!0}),o=e.doc.dependencies,s=!0===this.#a.doc.features.all_parsed_imports?a.all:a.required;for await(const e of s){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await ao({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=Ea.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=Ea.relative(Ea.join(this.#t.projectDir,"src","default"),e);if(!Ia.existsSync(e)){Ia.mkdirSync(Ea.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Ia.writeFileSync(e,t,"utf8")}a.relativePath=t.split(Ea.sep).join("/"),this.#a.typesDir=`./types/${Ea.basename(o)}/src`}else{const e=Ea.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Ia.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#s.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},t=this.#t.templateDir,a=Oa.compile(Ia.readFileSync(Ea.resolve(t,Ea.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=Ea.resolve(o,Ea.join("src","default","index.js"));Ia.writeFileSync(s,a,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:a,...o}=this.#a.doc,s={content:Ta.stringify(o)},n=this.#t.templateDir,r=Oa.compile(Ia.readFileSync(Ea.resolve(n,`${e}.njk`),"utf8"),this.#o).render(s),i=this.#t.projectDir,c=Ea.resolve(i,`${e}`);Ia.writeFileSync(c,r,"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 Qa.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 Qa.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:a}=t,o=a.get("targets")||[],s=t.doc.targets||[];for(let e=0;e<s.length;e++){const a=s[e],n=o.items[e];await Za({...this.#y,deploymentProject:t,deploymentProjectTarget:a,yamlTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await Qa.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await Qa.update(o,{id:o.id})):o=await Qa.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(oo.blue(e)),await this._cache_set(this.#p,{status:"IN_PROGRESS",message:e})}async build(){try{this.#u&&(await this.createAtomLibFiles({libs:this.#s}),await this.createEngine(),await this.createProjectYaml(),await Ka(this.#y),await Wa(this.#y),await Ja(this.#y),await Ba(this.#y),await Ua(this.#y),await La(this.#y),await za(this.#y),await Na(this.#y),await Ga(this.#y),await Ha(this.#y),this.#g&&(await Xa(this.#y),await Ya(this.#y),this.#f&&await this.deploy())),await this._cache_set(this.#p,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#p,{status:"FAILED",message:e.message||e}),console.log(e),e}}};const no=l,ro=d;var io=function({baseDir:e=__dirname}){let t=e;for(;t!==ro.parse(t).root;){const e=ro.join(t,"node_modules");if(no.existsSync(e))return e;t=ro.dirname(t)}return null};const co=process.cwd(),{spawn:po}=e;t({name:["redis"],dir:co,optional:!0});const lo=a,mo=o,uo=s,go=n,fo=r,yo=i,ho=t,wo=c,bo=p,vo=so,_o=io({baseDir:__dirname}),jo="win32"===process.platform?";":":";process.env.PATH=`${lo.join(_o,"/.bin")}${jo}${process.env.PATH}`;let ko=mo(process.argv.slice(2)).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=lo.resolve(_o,"@fnet/cli-project-node/dist/template/project"),a=lo.resolve(co,e.name);uo.existsSync(a)||uo.mkdirSync(a),await bo({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=fo.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(fo.which("git")&&(o=fo.exec("git init --initial-branch=main",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(fo.which("code")&&e.vscode&&(o=fo.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=lo.resolve(_o,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=lo.basename(a),e.update){if(await bo({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==fo.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",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await Do(e),a=new vo(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"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Do({...e,mode:"all"}),a=new vo(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"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Do({...e,mode:"file"}),a=new vo(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function xo(e,{name:t,bin:a,preArgs:o=[]}){return e.command(`${t||a} [commands..]`,`${a} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Do(e),{projectDir:s}=t,n=process.argv.slice(3);po(a,[...o,...n],{cwd:s,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Do(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:lo.resolve(_o,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:lo.resolve(_o,"./@fnet/cli-project-common/dist/template/default"),projectDir:lo.resolve(co,`./.output/${e.id}`),tags:e.ftag};{const t=await async function({tags:e}){const t=lo.resolve(co,"node.yaml");if(!uo.existsSync(t))throw new Error("node.yaml file not found in current directory.");const{raw:a,parsed:o}=await yo({file:t,tags:e}),s=lo.dirname(t),n={libraryAtom:{doc:{...o},fileName:"index"},projectDir:s,projectFilePath:t,projectFileContent:a,projectFileParsed:o};let r=lo.resolve(s,"fnet/targets.yaml");if(!uo.existsSync(r)&&(r=lo.resolve(s,"node.devops.yaml"),uo.existsSync(r))){const e=lo.resolve(s,"fnet");uo.existsSync(e)||uo.mkdirSync(e),uo.copyFileSync(r,lo.resolve(s,"fnet/targets.yaml")),uo.unlinkSync(r)}if(uo.existsSync(r)){const{raw:t,parsed:a}=await yo({file:r,tags:e}),o=go.parseDocument(t);n.devops={filePath:r,fileContent:t,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{uo.writeFileSync(n.devops.filePath,o.toString())}}}const i=lo.resolve(s,"readme.md");if(uo.existsSync(i)){const e=uo.readFileSync(i,"utf8");n.readme={filePath:i,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return n}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:lo.resolve(_o,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:lo.resolve(_o,"./@fnet/cli-project-common/dist/template/default"),projectDir:lo.resolve(t.projectDir,"./.workspace"),projectSrcDir:lo.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}ko=ko.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Do(e),{project:a}=t,{projectDir:o,projectFileParsed:s}=a,n=s.input;if(!n)throw new Error("Config schema not found in project file.");const r=await wo({schema:n,format:"yaml"}),i=lo.resolve(o,".fnet");uo.existsSync(i)||uo.mkdirSync(i);const c=lo.resolve(i,`${e.name}.fnet`);uo.writeFileSync(c,r)}catch(e){console.error(e.message),process.exit(1)}})),ko=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Do(e),{project:a}=t,{projectDir:o,projectFileParsed:s}=a,n=s.input;if(!n)throw new Error("Config schema not found in project file.");const r=lo.resolve(o,".fnet"),i=lo.resolve(r,`${e.name}.fnet`),c=await wo({schema:n,format:"yaml",ref:i});uo.existsSync(r)||uo.mkdirSync(r),uo.writeFileSync(i,c)}catch(e){console.error(e.message),process.exit(1)}}))}(ko),ko=xo(ko,{bin:"npm"}),ko=xo(ko,{bin:"node"}),ko=xo(ko,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),ko=xo(ko,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),ko=xo(ko,{name:"app",bin:"npm",preArgs:["run","app","--"]}),ko=xo(ko,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),ko=xo(ko,{bin:"npx"}),ko=xo(ko,{bin:"cdk"}),ko=xo(ko,{bin:"aws"}),ko=function(e,{name:t,preArgs:a=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Do(e),{projectDir:o}=t,s=e.config,n=await ho({name:s,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),r=n?.data?.env||void 0,i=e.command,c=process.argv.slice(5);po(i,[...a,...c],{cwd:o,stdio:"inherit",shell:!0,env:{...process.env,...r}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(ko,{name:"with"}),ko.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("fs"),a=require("yaml"),s=require("shelljs"),r=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),f=require("nunjucks"),m=require("lodash.clonedeep"),u=require("isobject"),g=require("redis"),h=require("@flownet/lib-is-redis-online"),w=require("nanoid"),y=require("@flownet/lib-atom-api-js"),b=require("axios"),v=require("qs"),x=require("lodash.merge"),_=require("@flownet/lib-parse-imports-js"),k=require("@flownet/lib-list-npm-versions"),j=require("@fnet/yargs-options-from-schema"),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"),$=require("@flownet/lib-to-electron"),O=require("@flownet/lib-to-webos"),I=require("@flownet/lib-to-nextjs"),C=require("@flownet/lib-to-docker"),N=require("form-data"),M=require("@fnet/to-rust"),R=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-bpmn-from-flow"),q=require("@fnet/expression"),z=require("chalk"),U=require("lodash.pick"),L=require("lodash.omit");const B=g,J=h;const{Api:W}=y,K=b.default,G=v;const H=x,V=p,X=d,Y=_,Z=({features:e,packageDevDependencies:t})=>{const o=e.rollup_output||{},n=Object.keys(o),i={generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}};n.forEach((t=>{const o=e.rollup_output[t];if(o?.workbox&&!1!==o?.workbox?.enabled){if(!0===o.workbox){if(!i)return void delete o.workbox;o.workbox={enabled:!0,options:{generate:i.generate}}}o.workbox.options=o.workbox.options||{},o.workbox.options.generate=o.workbox.options.generate||i.generate}else delete o.workbox}));const a=n.some((t=>!0===e.rollup_output[t].workbox?.enabled));e.workbox_enabled=a,e.workbox_enabled&&t.push({package:"rollup-plugin-workbox",version:"^8"})},Q=({features:e,packageDevDependencies:t})=>{const o=e.rollup_output||{},n=Object.keys(o),i={};n.forEach((t=>{const o=e.rollup_output[t];o?.gzip&&!1!==o?.gzip?.enabled?(!0===o.gzip&&(o.gzip={enabled:!0,options:i}),o.gzip.options=o.gzip.options||{},o.gzip.options={...i,...o.gzip.options}):delete o.gzip}));const a=n.some((t=>!0===e.rollup_output[t].gzip?.enabled));e.gzip_enabled=a,e.gzip_enabled&&t.push({package:"rollup-plugin-gzip",version:"^4"})};function ee({dir:e,name:t="index"}){let o=X.resolve(e,`./${t}.tsx`);if(V.existsSync(o)||(o=X.resolve(e,`./${t}.ts`)),V.existsSync(o)||(o=X.resolve(e,`./${t}.jsx`)),V.existsSync(o)||(o=X.resolve(e,`./${t}.js`)),!V.existsSync(o))return{};const n=o,i=X.extname(o);return{file:n,ext:i,ts:".ts"===i||".tsx"===i,name:t}}const te=k;const oe=p,ne=d,ie=l;const ae=f,se=p,re=d,ce=_,le=k;const pe=p,de=d,fe=l;const me=p,ue=d,ge=f,he=_;const we=p,ye=d,be=f,ve=j;const xe=p,_e=d,ke=f;const je=p,De=d,Pe=f;const Se=f,Ae=p,Te=d,Ee=r;const $e=s,Oe=o;const Ie=s;const Ce=s;const Ne=s;const Me=D,Re=t;const Fe=p,qe=d,ze=P,Ue=D,Le=t;const Be=p,Je=d,We=P,Ke=s,Ge=t;const He=p,Ve=d,Xe=S,Ye=f,Ze=A,Qe=t;const et=i,tt=o,ot=t;const nt=t,it=T,at=m,st=P;const rt=t,ct=E,lt=m,pt=P;const dt=t,ft=$,mt=m,ut=P;const gt=t,ht=O,wt=m,yt=P;const bt=t,vt=I,xt=m,_t=P;const kt=t,jt=C,Dt=m,Pt=P;const St=p,At=d,Tt=P,Et=D,$t=t,Ot=b.default;const It=P,Ct=t,Nt=b.default;const Mt=P,Rt=t,Ft=b.default,qt=i,zt=D,Ut=N;const Lt=P,Bt=t,Jt=b.default,Wt=i,Kt=D,Gt=N;const Ht=t,Vt=M,Xt=m,Yt=P;const Zt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const a=t.projectDir;let s="fnet-to-gitlab";const r=n.params.config||"gitlab",c=await Re({name:r,dir:t.projectDir,tags:t.tags});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;s+=` --projectGroupId=${l.projectGroupId}`,s+=` --projectPath='${a}'`,s+=` --projectName='${n.params.name}'`,s+=` --projectBranch='${n.params.branch||"main"}'`,s+=` --gitlabHost='${l.gitlabHost}'`,s+=` --gitlabToken='${l.gitlabToken}'`,s+=` --gitlabUsername='${l.gitlabUsername}'`,s+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==n.dryRun&&(await Me({cmd:s}),o.isDirty=!0)},Qt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i,yamlTarget:a})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,r=qe.resolve(s,"package.json"),c=Fe.readFileSync(r),l=JSON.parse(c);l.name=n.params.name,l.version=ze.inc(n.params.version,"patch"),delete l.scripts,delete l.devDependencies,Fe.writeFileSync(r,JSON.stringify(l,null,"\t"));const{file:p,data:d}=await Le({name:n.config||"gcs",dir:t.projectDir,tags:t.tags});let f="fnet-files-to-gcs";f+=` --projectId='${d.env.GCS_PROJECT_ID}'`,f+=` --bucketName='${d.env.GCS_BUCKET_NAME}'`,f+=` --keyFilename='${qe.resolve(qe.dirname(p),d.env.GCS_UPLOADER_KEY_FILE)}'`,f+=` --dir='${s}'`,f+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",f+=` --destDir='${l.name}/${l.version}'`,f+=" --metadata.cacheControl='public, max-age=31536000, immutable'",d.env.DOMAIN&&(f+=` --domain='${d.env.DOMAIN}'`),!0!==n.dry_run&&!0!==n.params.dry_run||(f+=" --dryRun"),await Ue({cmd:f}),Fe.writeFileSync(r,c),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=l.version,a.get("params").set("version",l.version),await i({target:n,packageJSON:l}))},eo=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,yamlTarget:a})=>{await t({message:"Deploying it as npm package."});const s=o.projectDir,r=Je.resolve(s,"package.json"),c=Be.readFileSync(r),l=JSON.parse(c);l.name=i.params.name,l.version=We.inc(i.params.version,"patch");const p=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&p&&"string"==typeof p&&(l.bin={[p]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete l.scripts,delete l.devDependencies,l.scripts={serve:"npx serve ."},Be.writeFileSync(r,JSON.stringify(l,null,"\t"));const d=(await Ge({name:o.npmConfig||"npm",dir:o.projectDir,tags:o.tags}))?.data;if(Be.writeFileSync(Je.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==Ke.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");Be.writeFileSync(r,c),n.isDirty=!0,i.params.version=l.version,a.get("params").set("version",l.version)},to=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a,packageDependencies:s,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=o.projectDir,l=o.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Ze.util.generateId(),label:`${p}/${e.id?e.id:Xe.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Ze.util.generateId(),name:e.doc.name,initialize:{content:He.readFileSync(Ve.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Ze.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Ze.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||Ze.util.generateId(),label:`${p}/${e.id?e.id:Xe.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Ze.util.generateId(),name:e.doc.name,initialize:{content:He.readFileSync(Ve.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Ze.util.generateId(),schedules:t},debug:{id:Ze.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Ze.util.generateId(),label:`${p}/${e.id?e.id:Xe.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Ze.util.generateId(),name:e.doc.name,initialize:{content:He.readFileSync(Ve.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Ze.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Ze.util.generateId()},debug:{id:Ze.util.generateId()}}}}let f=Ye.compile(He.readFileSync(Ve.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(He.writeFileSync(Ve.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;n.isDirty=!0;const m=(await Qe({name:o.redConfig||"red",dir:o.projectDir,tags:o.tags}))?.data,u=i.deploy.url||m.env.RED_URL,g={};if(!1!==i.deploy.auth&&(g.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:g}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:f,headers:g});else{const e=await axios({method:"POST",url:`${u}/flow`,data:f,headers:g});i.deploy.id=e.data.id}},oo=async({atom:e,Atom:t,setInProgress:o,context:n,packageDependencies:i,deploymentProject:a,deploymentProjectTarget:s})=>{await o({message:"Deploying it as workflow lib."});const r=(await ot({name:"atom",dir:n.projectDir,tags:n.tags}))?.data;let c,l,p,d=s.deploy.name.split("/");if(1===d.length)l=r.env.ATOM_LIBRARIES_ID,p=s.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:r.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===s.dryRun)return;if(a.isDirty=!0,s.deploy.id){if(c=await t.get({id:s.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;s.deploy.id=c.id}const f=n.projectDir;c.doc.contents=[{content:et.readFileSync(tt.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:et.readFileSync(tt.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:et.readFileSync(tt.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})},no=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i,context:a,yamlTarget:s})=>{o&&await o({message:"Deploying it as ios-app package."});const r=t?.config?await nt({name:t.config,dir:n,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=st.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=at(t.params);l.dependencies=at(i);const p={atom:e,params:l,config:r?.config,src:n,dest:n};return{deployer:await it(p)}},io=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i,context:a,yamlTarget:s})=>{o&&await o({message:"Deploying it as macos-app package."});const r=t?.config?await rt({name:t.config,dir:n,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=pt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=lt(t.params);l.dependencies=lt(i);const p={atom:e,params:l,config:r?.config,src:n,dest:n};return{deployer:await ct(p)}},ao=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i,context:a,yamlTarget:s})=>{o&&await o({message:"Deploying it as electron package."});const r=t?.config?await dt({name:t.config,dir:n,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=ut.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=mt(t.params);l.dependencies=mt(i);const p={atom:e,params:l,config:r?.config,src:n,dest:n};return{deployer:await ft(p)}},so=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i,context:a,yamlTarget:s})=>{o&&await o({message:"Deploying it as webos package."});const r=t?.config?await gt({name:t.config,dir:n,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=yt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=wt(t.params);l.dependencies=wt(i);const p={atom:e,params:l,config:r?.config,src:n,dest:n};return{deployer:await ht(p)}},ro=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i,context:a,yamlTarget:s})=>{o&&await o({message:"Deploying it as nextjs package."});const r=t?.config?await bt({name:t.config,dir:n,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=_t.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=xt(t.params);l.dependencies=xt(i);const p={atom:e,params:l,config:r?.config,src:n,dest:n};return{deployer:await vt(p)}},co=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i,context:a,yamlTarget:s})=>{o&&await o({message:"Deploying it as docker package."});const r=t?.config?await kt({name:t.config,dir:n,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Pt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=Dt(t.params);l.dependencies=Dt(i);const p={atom:e,params:l,config:r?.config,src:n,dest:n};return{deployer:await jt(p)}},lo=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,yamlTarget:i})=>{await e({message:"Deploying it as fnet package."});const a=t.projectDir,s=At.resolve(a,"package.json"),r=St.readFileSync(s),c=JSON.parse(r);c.name=n.params.name,c.version=Tt.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,St.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await $t({name:n.config||"fnet-package",dir:t.projectDir,tags:t.tags});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 Ot({method:"POST",url:d,data:{username:f,password:m},headers:{"Content-Type":"application/json"}});const g=u.data?.access_token;if(!g)throw new Error(`Invalid access_token from ${d}`);let h="fnet-files-to-gcs";if(h+=` --projectId='${p.env.GCS_PROJECT_ID}'`,h+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,h+=` --keyFilename='${At.resolve(At.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,h+=` --dir='${a}'`,h+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",h+=` --destDir='${c.name}/${c.version}'`,h+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(h+=` --domain='${p.env.DOMAIN}'`),!0!==n.dry_run&&!0!==n.params.dry_run||(h+=" --dryRun"),await Et({cmd:h}),St.writeFileSync(s,r),!0===n.dryRun)return;o.isDirty=!0,n.params.version=c.version,i.get("params").set("version",c.version);const w=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(u=await Ot({method:"POST",url:w,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 ${g}`}}),u.data?.error)throw new Error("Failed to publish fnet package.")},po=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,yamlTarget:i})=>{await e({message:"Deploying it as fnet form."});const a=It.inc(n.params.version,"patch"),{file:s,data:r}=await Ct({name:n.config||"fnet-form",dir:t.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const c=`${r.env.ATOM_API_URL}/v1/auth/token`,l=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let d=await Nt({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const f=d.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${c}`);o.isDirty=!0,n.params.version=a,i.get("params").set("version",a);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(d=await Nt({method:"POST",url:m,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),d.data?.error)throw new Error("Error publishing fnet form.")},fo=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,yamlTarget:i})=>{await e({message:"Deploying it as fnet flow."});const a=Mt.inc(n.params.version,"patch"),{file:s,data:r}=await Rt({name:n.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const c=`${r.env.ATOM_API_URL}/v1/auth/token`,l=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let d=await Ft({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const f=d.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${c}`);o.isDirty=!0,n.params.version=a,i.get("params").set("version",a);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(d=await Ft({method:"POST",url:m,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),d.data?.error)throw new Error("Error publishing fnet flow.");const u=d.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const h=await zt({cmd:g});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Ut;y.append("file",qt.createReadStream(w));const b=await Ft.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...y.getHeaders(),Authorization:`Bearer ${f}`},data:y});if(b.data?.error)throw new Error("Error uploading fnet flow.")},mo=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,yamlTarget:i})=>{await e({message:"Deploying it as fnet node."});const a=Lt.inc(n.params.version,"patch"),{file:s,data:r}=await Bt({name:n.config||"fnet-node",dir:t.project.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const c=`${r.env.ATOM_API_URL}/v1/auth/token`,l=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let d=await Jt({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const f=d.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${c}`);o.isDirty=!0,n.params.version=a,i.get("params").set("version",a);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(d=await Jt({method:"POST",url:m,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),d.data?.error)throw new Error("Error publishing fnet node.");const u=d.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const h=await Kt({cmd:g});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new Gt;y.append("file",Wt.createReadStream(w));const b=await Jt.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...y.getHeaders(),Authorization:`Bearer ${f}`},data:y});if(b.data?.error)throw new Error("Error uploading fnet node.")},uo=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i,context:a,yamlTarget:s})=>{o&&await o({message:"Deploying it as Rust package."});const r=t?.config?await Ht({name:t.config,dir:n,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Yt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=Xt(t.params);l.dependencies=Xt(i);const p={atom:e,params:l,config:r?.config,src:n,dest:n};return{deployer:await Vt(p)}};const go=m;async function ho({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||go(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||go(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await t({node:e}),o({node:e})}var wo={hits:async function({node:e}){if(!e.definition.hasOwnProperty("switch"))return!1;const t=e.definition.switch||[];if(!t.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===t.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const o=t.filter((e=>e.hasOwnProperty("default")));if(o.length>1)throw new Error("Switch must have only one default");if(1===o.length&&!t[t.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");return!0},init:async function({node:e,initNode:t}){e.type="switch",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let o=0;o<e.definition.switch.length;o++){let n=e.definition.switch[o],i=`${o}`;n.hasOwnProperty("default")&&(i="default",n=n.default);const a={name:n.condition||i,childs:[],parent:e,definition:n,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=ho},resolve:ho};const yo=q,bo=wo;var vo={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>yo({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=>yo({expression:e})))),i=[],a=n.find((e=>"if"===e?.processor)),s=t.definition[a.expression];i.push({name:`${t.name}_if`,definition:s,processor:a}),delete t.definition[a.expression];const r=n.filter((e=>"elseif"===e?.processor));let c=0;for(const e of r){const o=t.definition[e.expression];i.push({name:`${t.name}_elseif_${c++}`,definition:o,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of i)t.definition.switch.push({condition:e.processor.statement,...e.definition});await bo.init(e)}};const xo=m;async function _o({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||xo(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||xo(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var ko={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=_o},resolve:_o};const jo=m;async function Do({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=jo(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],o=Object.keys(t)[0],a=t[o],s={key:await n(o),value:await n(a)};i.assign[e]=s}await t({node:e}),o({node:e})}var Po={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=Do},resolve:Do};const So=m,Ao=U,To=L;async function Eo({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 $o={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),To(e.definition.for,t)];e.definition.for=o,e.definition.for.steps=[{[`${e.name}_step`]:n}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let o=0;o<e.definition.for.steps.length;o++){const n=e.definition.for.steps[o],i=Object.keys(n)[0],a={name:i,childs:[],parent:e,definition:n[i],index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=Eo},resolve:Eo};var Oo={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 Io=m;async function Co({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||Io(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var No={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=Co},resolve:Co};const Mo=m;async function Ro({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||Mo(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var Fo={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=Ro},resolve:Ro};const qo=m;async function zo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||qo(e.definition);const i=e.context.transform;i.args&&(i.args=await n(i.args)),i.result&&(i.result=await n(i.result));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.call)),await t({node:e}),o({node:e})}var Uo={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call";for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],a={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=zo},resolve:zo};const Lo=Uo;var Bo={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 Lo.init(e)}};const Jo=Uo;var Wo={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 Jo.init(e)}};const Ko=Uo;var Go={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 Ko.init(e)}};async function Ho({node:e}){e.context.next=e.childs[0]}var Vo={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=Ho},resolve:Ho};const Xo=m;async function Yo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Xo(e.definition);const i=e.context.transform;i.props&&(i.props=await n(i.props));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.form)),await t({node:e}),o({node:e})}var Zo={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form";for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],a={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=Yo},resolve:Yo};const Qo=m;async function en({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||Qo(e.definition),await t({node:e})}var tn={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=en},resolve:en};const on=m;async function nn({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||on(e.definition);const i=e.context.transform;i.next=await n(i.next),await t({node:e}),o({node:e})}var an={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=nn},resolve:nn};const sn=Uo;var rn={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 sn.init(e)}};const cn=Uo;var ln={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 cn.init(e)}};const pn=Uo;var dn={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 pn.init(e)}};const fn=p,mn=d,un=a,gn=s,hn=f,wn=m,yn=u,bn=async()=>{if(!await J({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=B.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:vn}=w,xn=class{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(W.set_api_url(e.data.url),t)return W.set_req_token(t),void o(t);K({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:G.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{W.set_req_token(e.data.access_token),o(e.data.access_token)})).catch((e=>{W.set_req_token(),n(e)}))}))}},_n=async({atom:e,context:t,packageDevDependencies:o})=>{e.doc.features=e.doc.features||{};const n=e.doc.features;n.project=n.project||{},n.project.format=n.project.format||n.project_format||"esm",n.project_format=n.project.format,n.dts_enabled=!0===n.dts||void 0!==n.dts&&!1!==n.dts,n.hasOwnProperty("all_parsed_imports")||(n.all_parsed_imports=!0);const i=X.resolve(t.project.projectDir),a=ee({dir:X.resolve(i,"./app")});if(a.file){let e=await Y({file:a.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));n.app_uses_jsx=t,n.app_has_entry=!0,e=await Y({file:a.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),n.app_entry_uses_jsx=t,n.app_entry_is_ts=a.ts,n.app_entry_ext=a.ext}const s=ee({dir:X.resolve(i,"./cli")});if(s.file){let e=await Y({file:s.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));n.cli_uses_jsx=t,n.cli_has_entry=!0,e=await Y({file:s.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),n.cli_entry_uses_jsx=t,n.cli_entry_is_ts=s.ts,n.cli_entry_ext=s.ext}if("workflow.lib"===e.type){const e=ee({dir:X.resolve(i,"./src")});if(e.file){let t=await Y({file:e.file,recursive:!0}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));n.src_uses_jsx=o,n.src_has_entry=!0,t=await Y({file:e.file}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),n.src_entry_uses_jsx=o,n.src_entry_is_ts=e.ts,n.src_entry_ext=e.ext}}const r=!0===n.app_entry_uses_jsx,c=!0===n.cli_entry_uses_jsx;n.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===n.form||!0===n.form?.enabled,n.multiple_enabled=n.multiple_enabled||!0===n.multiple||!0===n.multiple?.enabled,!1===n.app?n.app={enabled:!1}:!0===n.app?n.app={enabled:!0,extend:!0===n.app_has_entry,export:!0,react:r}:n.app={enabled:!0,extend:!0===n.app_has_entry,export:!0,react:r,...n.app||{}},n.app.enabled=!0===n.app.enabled&&(!0===e.doc.features.form_enabled||!0===n.app.extend||!0===n.app.enabled),n.app.format=n.app.format||"esm",n.app.folder=n.app.folder||n.app.format||"default",!1===n.cli?n.cli={enabled:!1}:!0===n.cli?n.cli={enabled:!0,extend:!0===n.cli_has_entry,export:!0,react:c}:n.cli={enabled:!0,extend:!0===n.cli_has_entry,export:!0,react:c,...n.cli||{}},n.cli.enabled=!0===n.cli.enabled&&(!1===e.doc.features.form_enabled||!0===n.cli.extend||!0===n.cli.enabled),n.cli.format=n.cli.format||"esm",n.cli.folder=n.cli.folder||n.cli.folder||"esm",n.cli.node_options=n.cli.node?.options||n.cli.node_options||"";const l={cjs:{format:"cjs",context:n.form_enabled?"window":"global",babel:!0===n.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!0,string:!0},esm:{format:"esm",context:n.form_enabled?"window":"global",babel:!0===n.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0,string:!0},iife:{format:"iife",context:n.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==n.iife,terser:!0,string:!0}},p={};!0===n.webos&&(l.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",babel_options:{targets:{chrome:"79"}}}),!0===n.electron&&(l.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===n.nextjs&&(l.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===n.ios&&(l.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===n.macos&&(l.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===n.app.enabled&&(n.app.dir=`./dist/app/${n.app.folder}`,l.app={format:n.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:n.app.dir,terser:!0,output_exports:!1===n.app.export?"none":"auto",string:!0},p.targets=p.targets||[],p.targets.push({src:"./src/app/index.html",dest:n.app.dir})),!0===n.cli.enabled&&(n.cli.dir=`./dist/cli/${n.cli.folder}`,l.cli={format:n.cli.format,context:"global",babel:!0===n.src_uses_jsx||!0===n.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:n.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===n.cli.export?"none":"auto",string:!0});const d={server:".",startPath:`${X.normalize(n.app.dir||".")}`,files:[X.normalize("./dist/**/*")],cors:!0,open:!1};n.babel_options=H({targets:{browsers:"last 9 versions, not dead",node:"18"}},n.babel_options||n.babel?.options),n.browsersync_options=H(d,n.browsersync_options||n.browsersync?.options||{}),n.replace_options=H({},n.replace_options||n.replace?.options||{}),n.terser_options=H({},n.terser_options||n.terser?.options||{}),n.css_options=H({},n.css_options||n.css?.options||{}),n.wasm_options=H({},n.wasm_options||n.wasm?.options||{}),n.copy_options=H(p,n.copy_options||n.copy?.options||{}),n.json_options=H({},n.json_options||n.json?.options||{}),n.image_options=H({},n.image_options||n.image?.options||{}),n.analyzer_options=H({summaryOnly:!0,limit:12},n.analyzer_options||n.analyzer?.options||{}),n.visualizer_options=H({},n.visualizer_options||n.visualizer?.options||{}),n.string_options=H({},n.string_options||n.string?.options||{}),n.nunjucks_options=H({},n.nunjucks_options||n.nunjucks?.options||{}),Reflect.has(n.browsersync_options,"proxy")&&delete n.browsersync_options.server,n.rollup=n.rollup||{},n.rollup_output=H(l,n.rollup_output||n.rollup?.output||{}),n.string_enabled=!0===n.string||n.string&&!1!==n.string?.enabled,n.preact_enabled=!0===n.preact||n.preact&&!1!==n.preact?.enabled;let f=Object.keys(l);for(const e of f){const t=l[e];t&&(!1!==n.rollup[e]?(t.babel_options=t.babel_options||n.babel_options,t.browsersync_options=H(n.browsersync_options,t.browsersync_options),t.replace_options=H(n.replace_options,t.replace_options),t.terser_options=H(n.terser_options,t.terser_options),t.css_options=H(n.css_options,t.css_options),t.wasm_options=H(n.wasm_options,t.wasm_options),t.copy_options=H(n.copy_options,t.copy_options),t.json_options=H(n.json_options,t.json_options),t.image_options=H(n.image_options,t.image_options),t.analyzer_options=H(n.analyzer_options,t.analyzer_options),t.visualizer_options=H(n.visualizer_options,t.visualizer_options),t.string_options=H(n.string_options,t.string_options),t.string=n.string_enabled&&t.string,t.nunjucks_options=H(n.nunjucks_options,t.nunjucks_options),n.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),n.form_enabled&&(t.babel=!0)):delete n.rollup_output[e])}f=Object.keys(n.rollup_output),n.babel_enabled=f.some((e=>!0===n.rollup_output[e].babel)),n.browser_enabled=f.some((e=>!0===n.rollup_output[e].babel)),n.browsersync_enabled=!1!==n.browsersync&&f.some((e=>!0===n.rollup_output[e].browsersync)),n.browsersync_enabled=n.browsersync_enabled&&n.app.enabled,n.wasm_enabled=!0===n.wasm||n.wasm&&!1!==n.wasm?.enabled,n.css_enabled=!0===n.css||n.css&&!1!==n.css?.enabled,n.json_enabled=!0===n.json||n.json&&!1!==n.json?.enabled,n.terser_enabled=!1!==n.terser,n.copy_enabled=n.app.enabled||n.copy_enabled||n.copy&&!1!==n.copy?.enabled,n.image_enabled=!0===n.image||n.image&&!1!==n.image?.enabled,n.analyzer_enabled=!0===n.analyzer||n.analyzer&&!1!==n.analyzer?.enabled,n.visualizer_enabled=!0===n.visualizer||n.visualizer&&!1!==n.visualizer?.enabled,n.dependency_auto_enabled=!1!==n.dependency_auto&&!1!==n.dependency_auto?.enabled,n.npm_install_flags=n.npm_install_flags||"",n.react_version=n.react_version||n.react?.version||18,n.polyfill_enabled=!0===n.polyfill||n.polyfill&&!1!==n.polyfill?.enabled,n.nunjucks_enabled=!0===n.nunjucks||n.nunjucks&&!1!==n.nunjucks?.enabled,Z({features:n,packageDevDependencies:o}),Q({features:n,packageDevDependencies:o})},kn=async({atom:e,packageDependencies:t,packageDevDependencies:o})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let o="^18.2";o=`^${(await te({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:o}),t.push({package:"react-dom",version:o}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"yargs",version:"^17"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.19"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&t.push({package:"@flownet/lib-render-templates-dir",version:"0.1.17"}),o.push({package:"@babel/core",version:"^7"}),o.push({package:"@rollup/plugin-commonjs",version:"^26"}),o.push({package:"@rollup/plugin-node-resolve",version:"^15"}),o.push({package:"@rollup/plugin-replace",version:"^5"}),o.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&o.push({package:"rollup-plugin-dts",version:"^6"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),o.push({package:"@rollup/plugin-alias",version:"^5"}),o.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6"}),o.push({package:"@babel/preset-env",version:"^7"}),o.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":o.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":o.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":o.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":o.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":o.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),o.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.nunjucks_enabled&&o.push({package:"@fnet/rollup-plugin-nunjucks",version:"0.1.3"}),e.doc.features.browsersync_enabled&&o.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.4"}),e.doc.features.json_enabled&&o.push({package:"@rollup/plugin-json",version:"^6"}),e.doc.features.terser_enabled&&o.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&o.push({package:"@rollup/plugin-wasm",version:"^6"}),e.doc.features.image_enabled&&o.push({package:"@rollup/plugin-image",version:"^3"}),e.doc.features.analyzer_enabled&&o.push({package:"rollup-plugin-analyzer",version:"^3"}),e.doc.features.visualizer_enabled&&o.push({package:"rollup-plugin-visualizer",version:"^5"}),e.doc.features.string_enabled&&o.push({package:"rollup-plugin-string",version:"^3"}),e.doc.features.css_enabled){o.push({package:"rollup-plugin-postcss",version:"^4"}),o.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":o.push({package:"postcss-import",version:"^15"});break;case"postcss-url":o.push({package:"postcss-url",version:"^10"});break;case"postcss-preset-env":o.push({package:"postcss-preset-env",version:"^9"});break;case"autoprefixer":o.push({package:"autoprefixer",version:"^10"});break;case"cssnano":o.push({package:"cssnano",version:"^6"})}}))}e.doc.features.polyfill_enabled&&o.push({package:"rollup-plugin-node-polyfills",version:"^0.2"}),e.doc.features.copy_enabled&&(o.push({package:"rollup-plugin-copy",version:"^3"}),o.push({package:"chokidar",version:"^3"}))},jn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating app folder"});const i={atom:e,packageDependencies:n,ts:Date.now()},a=o.templateDir,s=ne.resolve(o.projectDir,"src/app");oe.existsSync(s)||oe.mkdirSync(s,{recursive:!0});let r=["index.js.njk"];!1!==e.doc.features.app.html&&r.push("index.html.njk"),await ie({pattern:r,dir:ne.resolve(a,"src/app"),outDir:s,context:i})},Dn=async({atom:e,context:t,packageDependencies:o,packageDevDependencies:n,setInProgress:i})=>{await i({message:"Creating package.json."});o.filter((e=>!0===e.dev)).forEach((e=>{n.find((t=>t.package===e.package))||n.push(e);const t=o.findIndex((t=>t.package===e.package));o.splice(t,1)}));const a=o.find((e=>"react"===e.package)),s=o.find((e=>"react-dom"===e.package));a&&!s?o.push({package:"react-dom",version:a.version}):a&&s&&(s.version=a.version),a&&e.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push({file:re.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&r.push({file:re.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of r){const i=t.file;if(!se.existsSync(i))throw new Error(`App file not found: ${i}`);const a=await ce({file:i,recursive:!0}),s=!0===e.doc.features.all_parsed_imports?a.all:a.required;for await(const e of s){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;if(n.find((t=>t.package===e.package)))continue;const i=(await le({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?n:o).push({package:e.package,subpath:e.subpath,version:`^${i}`,type:"npm"})}}const c={atom:e,packageDependencies:o,packageDevDependencies:n},l=t.templateCommonDir,p=ae.compile(se.readFileSync(re.resolve(l,"package.json.njk"),"utf8"),ae.configure(l)).render(c),d=t.projectDir,f=re.resolve(d,"package.json");se.writeFileSync(f,p,"utf8")},Pn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={atom:e,packageDependencies:n},a=o.templateDir,s=de.resolve(o.projectDir,"src/cli");pe.existsSync(s)||pe.mkdirSync(s,{recursive:!0}),await fe({pattern:["index.js.njk"],dir:de.resolve(a,"src/cli"),outDir:s,context:i})},Sn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:n},a=ue.resolve(o.projectDir,"src","default/index.js");if(!me.existsSync(a))throw new Error(`Entry file not found: ${a}`);const s=(await he({file:a,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&s.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(s.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<s.length;e++){const o=s[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(s)}}const l=o.templateCommonDir;let p=ge.compile(me.readFileSync(ue.resolve(l,"rollup.config.mjs.njk"),"utf8"),ge.configure(l)).render(i);const d=o.projectDir;let f=ue.resolve(d,"rollup.config.mjs");me.writeFileSync(f,p,"utf8")},An=async({atom:e,setInProgress:t,context:o,njEnv:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let i={};const a=e.doc.inputs||[],s=[],r=e.doc.input;if(r?i=await ve({schema:r}):a.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&s.push(e);const t={};Reflect.has(e,"type")&&(t.type=e.type),Reflect.has(e,"default")&&(t.default=e.default),Reflect.has(e,"choices")&&(t.choices=e.choices),(Reflect.has(e,"describe")||Reflect.has(e,"description"))&&(t.describe=e.describe||e.description),Reflect.has(e,"alias")&&(t.alias=e.alias),Reflect.has(e,"required")&&!0===e.required&&(t.required=!0),Reflect.has(e,"hidden")&&!0===e.hidden&&(t.hidden=!0),Reflect.has(e,"array")&&!0===e.array&&(t.array=!0),Reflect.has(e,"normalize")&&!0===e.normalize&&(t.normalize=!0),Reflect.has(e,"nargs")&&(t.nargs=e.nargs),i[e.name]=t})),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const t=e.doc.features.cli.fargs,o={type:"string",describe:"Config name to load args",hidden:!1},n={type:"array",describe:"Tags to filter the config",hidden:!1};Reflect.has(t,"default")&&(o.default=t.default),(Reflect.has(t,"describe")||Reflect.has(t,"description"))&&(o.describe=t.describe||t.description),Reflect.has(t,"choices")&&(o.choices=t.choices),i.fargs=o,i.ftag=n}const c={options:i,imports:s,atom:e},l=o.templateDir,p=be.compile(we.readFileSync(ye.resolve(l,"src/default/to.args.js.njk"),"utf8"),n).render(c),d=o.projectDir,f=ye.resolve(d,"src/default/to.args.js");we.writeFileSync(f,p,"utf8")},Tn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},a=o.templateCommonDir,s=ke.compile(xe.readFileSync(_e.resolve(a,".gitignore.njk"),"utf8"),ke.configure(a)).render(i),r=o.projectDir,c=_e.resolve(r,".gitignore");xe.writeFileSync(c,s,"utf8")},En=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:n},a=o.templateCommonDir,s=Pe.compile(je.readFileSync(De.resolve(a,"tsconfig.json.njk"),"utf8"),Pe.configure(a)).render(i),r=o.projectDir,c=De.resolve(r,"tsconfig.json");je.writeFileSync(c,s,"utf8")},$n=async({atom:e,context:t,setInProgress:o,Atom:n})=>{const i="readme.md",a=`Creating ${i}`;if(await o({message:a}),t.project?.readme){const e=t.projectDir,o={content:t.project.readme.doc.content},n=Te.resolve(t.project.projectDir,"fnet/how-to.md");if(Ae.existsSync(n)){const e=Ae.readFileSync(n,"utf8");o.howto=e}const a=Te.resolve(t.project.projectDir,"fnet/input.yaml");if(Ae.existsSync(a)){const e=await Ee({file:a,tags:t.tags});o.input=e.content}const s=t.templateCommonDir,r=Se.compile(Ae.readFileSync(Te.resolve(s,`${i}.njk`),"utf8"),Se.configure(s)).render(o),c=Te.resolve(e,`${i}`);Ae.writeFileSync(c,r,"utf8")}else if(e.id){const o=await n.first({type:"wiki",parent_id:e.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:a,...s}=o.doc,r={content:a},c=t.templateCommonDir,l=Se.compile(Ae.readFileSync(Te.resolve(c,`${i}.njk`),"utf8"),Se.configure(c)).render(r),p=t.projectDir,d=Te.resolve(p,`${i}`);Ae.writeFileSync(d,l,"utf8")}},On=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});let n=Oe.join("src","**","*");if(0!==$e.exec(`prettier --write ${n} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o}).code)throw new Error("Couldnt format files.")},In=async({atom:e,setInProgress:t,context:o})=>{if(!e.doc.features.dts_enabled)return;const n=o.projectDir;await t({message:"Creating .d.ts"});if(0!==Ie.exec("tsc",{cwd:n}).code)throw new Error("Couldnt create .d.ts files.")},Cn=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==Ce.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},Nn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==Ne.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},Mn=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:a,deploymentProject:s,yamlTarget:r}=e;if(!0===i.enabled)if("lib"===i.name)await oo({...e});else if("red"===i.name)await to({...e});else if("npm"===i.name)await eo({...e});else if("gcs"===i.name)await Qt({...e});else if("gitlab"===i.name)await Zt({...e});else if("fnet-package"===i.name)await lo({...e});else if("fnet-form"===i.name)await po({...e});else if("fnet-node"===i.name)await mo({...e});else if("fnet-flow"===i.name)await fo({...e});else{let e;if("nextjs"===i.name?e=ro:"webos"===i.name?e=so:"electron"===i.name?e=ao:"docker"===i.name?e=co:"ios"===i.name?e=no:"macos"===i.name?e=io:"rust"===i.name&&(e=uo),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),s.isDirty=!0}},{Atom:Rn}=y,Fn=R,qn=k,zn=F,Un=t,Ln=_,Bn=q,Jn=r,Wn=z,Kn=vo,Gn=ko,Hn=Po,Vn=$o,Xn=wo,Yn=Oo,Zn=No,Qn=Fo,ei=Uo,ti=Bo,oi=Wo,ni=Go,ii=Vo,ai=Zo,si=tn,ri=an,ci=rn,li=ln,pi=dn,di=({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 fi=class{#e;#t;#o;#n;#i;#a;#s;#r;#c;#l;#p;#d;#f;#m;#u;#g;#h;#w;#y;#b;#v;constructor(e){this.#e=new xn,this.#t=e,this.#a=[],this.#s=[],this.#r={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#b={packageDependencies:this.#a,packageDevDependencies:this.#s,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Rn,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#v={initNode:this.initNode.bind(this),cloneDeep:wn,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:di,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 bn(),this.#p=this.#t.buildId||vn(24),this.#b.buildId=this.#p,this.#u=this.#t.mode,this.#g=["all","deploy","build","file"].includes(this.#u),this.#h=["all","deploy","build"].includes(this.#u),this.#w=["all","deploy"].includes(this.#u),this.#y=["all","deploy","build","file","bpmn"].includes(this.#u),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#m=(await Un({optional:!0,name:"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await _n(this.#b),await kn(this.#b),await this.transformWorkflow({workflow:this.#n});const e=await this.initNodeTree({workflow:this.#n});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#a}),await this.resolveNodeTree({root:e}),this.#l=e}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#c=await this.#e.init({config:this.#m}),this.#b.atomAccessToken=this.#c)}async initWorkflow(){const e=this.#t.id;this.#o=this.#t.project?.workflowAtom||await Rn.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await Jn({content:this.#o.doc.content})).parsed:this.#o.doc.content;let t=this.#o.doc.bundleName;t=t||(this.#o.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#o.doc.bundleName=t,this.#o.type=this.#o.type||"workflow",this.#b.atom=this.#o}async initDependencies(){this.#a.push({package:"get-value",version:"^3.0"}),this.#a.push({package:"set-value",version:"^4.1"}),this.#o.doc.features.form_enabled?(this.#a.push({package:"react",version:"^18.2"}),this.#a.push({package:"react-dom",version:"^18.2"}),this.#a.push({package:"@flownet/react-app",version:"^0.1"}),this.#a.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#a.push({package:"yargs",version:"^17"}),this.#a.push({package:"chalk",version:"^4"})}#x(e){console.log("filePath",e),fn.statSync(e).isDirectory()?(fn.readdirSync(e).forEach((t=>{const o=mn.join(e,t);this.#x(o)})),fn.rmSync(e)):fn.unlinkSync(e)}#_(e,t){const o=fn.existsSync(e),n=o&&fn.statSync(e);o&&n.isDirectory()?(fn.mkdirSync(t,{recursive:!0}),fn.readdirSync(e).forEach((o=>{this.#_(mn.join(e,o),mn.join(t,o))}))):fn.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,o=["node_modules"];if(fn.existsSync(e)){const t=fn.readdirSync(e);for(const n of t)if(!o.includes(n)){const t=mn.join(e,n);fn.rmSync(t,{recursive:!0})}}fn.existsSync(e)||fn.mkdirSync(e,{recursive:!0});const n=mn.join(e,"src");fn.existsSync(n)||fn.mkdirSync(n,{recursive:!0});const i=mn.join(n,"core");this.#_(t,i);const a=mn.join(n,"default","blocks");fn.existsSync(a)||fn.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=hn.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 Gn.hits(t))await Gn.init(t);else if(await Vn.hits(t))await Vn.init(t);else if(await Xn.hits(t))await Xn.init(t);else if(await Kn.hits(t))await Kn.init(t);else if(await Yn.hits(t))await Yn.init(t);else if(await Hn.hits(t))await Hn.init(t);else if(await Zn.hits(t))await Zn.init(t);else if(await Qn.hits(t))await Qn.init(t);else if(await ei.hits(t))await ei.init(t);else if(await ti.hits(t))await ti.init(t);else if(await oi.hits(t))await oi.init(t);else if(await ni.hits(t))await ni.init(t);else if(await li.hits(t))await li.init(t);else if(await pi.hits(t))await pi.init(t);else if(await ai.hits(t))await ai.init(t);else if(await si.hits(t))await si.init(t);else if(await ci.hits(t))await ci.init(t);else if(await ii.hits(t))await ii.init(t);else{if(!await ri.hits(t))throw new Error("Undefined step type.");await ri.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=mn.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=vn(24);for await(const o of e.childs)await this.initNodeIndex({node:o,index:t})}async initNodeCalls({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"call"===n.type&&o.push(n)}return e.context.calls=o,o}async initNodeCallLibs({root:e}){const t=[],o=e.context.calls;for await(const e of o){const o=e.definition.call,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.call,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"form"===n.type&&o.push(n)}return e.context.forms=o,o}async initNodeFormLibs({root:e}){const t=[],o=e.context.forms;for await(const e of o){const o=e.definition.form,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.form,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const o=e.filter((e=>"atom"===e.type));for(let e=0;e<o.length;e++){const n=o[e],i=await this.findAtomLibrary({url:n.name});n.atom=i;const a=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));a?.forEach((e=>{const o=t.find((t=>t.package===e.package));o?"string"==typeof e.path?(o.path||[]).some((t=>t===e.path))||(o.path=o.path||[],o.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(o.path||[]).some((t=>t===e))||(o.path=o.path||[],o.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=Fn({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 Rn.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await Rn.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Rn.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=mn.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await Ln({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 qn({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 qn({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=wn(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=mn.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=mn.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!fn.existsSync(e)){fn.mkdirSync(mn.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",fn.writeFileSync(e,t,"utf8")}o.relativePath=t.split(mn.sep).join("/"),this.#o.typesDir=`./types/${mn.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;fn.writeFileSync(mn.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=hn.compile(fn.readFileSync(mn.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=mn.resolve(n,"src/default/index.js");fn.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=hn.compile(fn.readFileSync(mn.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=mn.resolve(n,`src/default/${e.codeKey}.js`);fn.writeFileSync(i,o,"utf8");for await(const t of e.childs)await this.createType({node:t})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:e}){let t=this.#r[e.type];if(t)return t;const o=this.#t.templateDir;return t=hn.compile(fn.readFileSync(mn.resolve(o,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#i),this.#r[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,o=`${e.codeKey}.js`,n=mn.resolve(t,`src/default/blocks/${o}`);fn.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(yn(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 Bn({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:un.stringify(n)},a=this.#t.templateDir,s=hn.compile(fn.readFileSync(mn.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=mn.resolve(r,`${e}`);fn.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:un.stringify(this.#n)},n=this.#t.templateDir,i=hn.compile(fn.readFileSync(mn.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),a=this.#t.projectDir,s=mn.resolve(a,`${e}`);fn.writeFileSync(s,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=gn.exec("prettier --write .",{cwd:mn.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 Rn.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 Rn.update(o,{id:o.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:o}=t,n=o.get("targets")||[],i=t.doc.targets||[];for(let e=0;e<i.length;e++){const o=i[e],a=n.items[e];await Mn({...this.#b,deploymentProject:t,deploymentProjectTarget:o,yamlTarget:a})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await Rn.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await Rn.update(n,{id:n.id})):n=await Rn.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(Wn.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#y&&!this.#g)return await this.createNetwork();try{const e=this.#y?await zn({root:this.#l}):void 0;if(this.#g){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#y){const t=this.#t.project?.projectDir||this.#t.projectDir;fn.writeFileSync(mn.resolve(t,"./fnet/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 $n(this.#b),await En(this.#b),await Tn(this.#b),await An(this.#b),await Pn(this.#b),await jn(this.#b),await Sn(this.#b),await Dn(this.#b),await On(this.#b),await In(this.#b),this.#h&&(await Cn(this.#b),await Nn(this.#b),this.#w&&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 zn({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 mi=p,ui=d;var gi=function({baseDir:e=__dirname}){let t=e;for(;t!==ui.parse(t).root;){const e=ui.join(t,"node_modules");if(mi.existsSync(e))return e;t=ui.dirname(t)}return null};const hi=process.cwd(),{spawn:wi}=e;t({name:["redis"],dir:hi,optional:!0});const yi=o,bi=n,vi=i,xi=a,_i=s,ki=r,ji=t,Di=c,Pi=l,Si=fi,Ai=gi({baseDir:__dirname}),Ti="win32"===process.platform?";":":";process.env.PATH=`${yi.join(Ai,"/.bin")}${Ti}${process.env.PATH}`;let Ei=bi(process.argv.slice(2)).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=yi.resolve(Ai,"./@fnet/cli-project-flow/dist/template/project"),o=yi.resolve(hi,e.name);vi.existsSync(o)||vi.mkdirSync(o),await Pi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0});let n=_i.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(_i.which("git")&&(n=_i.exec("git init --initial-branch=main",{cwd:o}),0!==n.code))throw new Error("Failed to initialize git.");if(_i.which("code")&&e.vscode&&(n=_i.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=yi.resolve(Ai,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd();if(e.name=yi.basename(o),e.update){if(await Pi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0}),0!==_i.exec("fnet build",{cwd:o}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await Oi(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 flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Oi({...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"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Oi({...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)}}));function $i(e,{name:t,bin:o,preArgs:n=[]}){return e.command(`${t||o} [commands..]`,`${o} ${n.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Oi(e),{projectDir:i}=t,a=process.argv.slice(3);wi(o,[...n,...a],{cwd:i,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Oi(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:yi.resolve(hi,`./.output/${e.id}`),templateDir:yi.resolve(Ai,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:yi.resolve(Ai,"./@fnet/cli-project-common/dist/template/default"),coreDir:yi.resolve(Ai,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=yi.resolve(hi,"flow.yaml");if(!vi.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const{raw:o,parsed:n}=await ki({file:t,tags:e}),i=yi.dirname(t),a=n.main||"flow.main.yaml";let s=yi.resolve(i,a);if(!vi.existsSync(s)&&(s=yi.resolve(i,a+".yaml"),!vi.existsSync(s)))throw new Error(`${a} file not found in ${s}.`);const{raw:r,parsed:c}=await ki({file:s,tags:e}),l={workflowAtom:{doc:{...n,"content-type":"yaml",content:r}},projectDir:i,projectFilePath:t,projectFileContent:o,projectFileParsed:n,projectMainFilePath:s,projectMainFileContent:r,projectMainFileParsed:c};let p=yi.resolve(i,"fnet/targets.yaml");if(!vi.existsSync(p)&&(p=yi.resolve(i,"flow.devops.yaml"),vi.existsSync(p))){const e=yi.resolve(i,"fnet");vi.existsSync(e)||vi.mkdirSync(e),vi.copyFileSync(p,yi.resolve(i,"fnet/targets.yaml")),vi.unlinkSync(p)}if(vi.existsSync(p)){const{raw:t,parsed:o}=await ki({file:p,tags:e}),n=xi.parseDocument(t);l.devops={filePath:p,fileContent:t,yamlDocument:n,doc:{...o},type:"workflow.deploy",save:async()=>{vi.writeFileSync(l.devops.filePath,n.toString())}}}const d=yi.resolve(i,"readme.md");if(vi.existsSync(d)){const e=vi.readFileSync(d,"utf8");l.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:yi.resolve(Ai,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:yi.resolve(Ai,"./@fnet/cli-project-common/dist/template/default"),coreDir:yi.resolve(Ai,"./@fnet/cli-project-flow/dist/template/core"),projectDir:yi.resolve(t.projectDir,"./.workspace"),projectSrcDir:yi.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}Ei=Ei.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Oi(e),{project:o}=t,{projectDir:n,projectFileParsed:i}=o,a=i.input;if(!a)throw new Error("Config schema not found in project file.");const s=await Di({schema:a,format:"yaml"}),r=yi.resolve(n,".fnet");vi.existsSync(r)||vi.mkdirSync(r);const c=yi.resolve(r,`${e.name}.fnet`);vi.writeFileSync(c,s)}catch(e){console.error(e.message),process.exit(1)}})),Ei=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Oi(e),{project:o}=t,{projectDir:n,projectFileParsed:i}=o,a=i.input;if(!a)throw new Error("Config schema not found in project file.");const s=yi.resolve(n,".fnet"),r=yi.resolve(s,`${e.name}.fnet`),c=await Di({schema:a,format:"yaml",ref:r});vi.existsSync(s)||vi.mkdirSync(s),vi.writeFileSync(r,c)}catch(e){console.error(e.message),process.exit(1)}}))}(Ei),Ei=$i(Ei,{bin:"npm"}),Ei=$i(Ei,{bin:"node"}),Ei=$i(Ei,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Ei=$i(Ei,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Ei=$i(Ei,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Ei=$i(Ei,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Ei=$i(Ei,{bin:"npx"}),Ei=$i(Ei,{bin:"cdk"}),Ei=$i(Ei,{bin:"aws"}),Ei=function(e,{name:t,preArgs:o=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Oi(e),{projectDir:n}=t,i=e.config,a=await ji({name:i,dir:n,transferEnv:!1,optional:!0,tags:t.tags}),s=a?.data?.env||void 0,r=e.command,c=process.argv.slice(5);wi(r,[...o,...c],{cwd:n,stdio:"inherit",shell:!0,env:{...process.env,...s}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(Ei,{name:"with"}),Ei.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"),a=require("fs"),i=require("yaml"),s=require("shelljs"),r=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),f=require("nunjucks"),m=require("lodash.clonedeep"),u=require("isobject"),g=require("redis"),h=require("@flownet/lib-is-redis-online"),w=require("nanoid"),y=require("@flownet/lib-atom-api-js"),v=require("axios"),b=require("qs"),x=require("lodash.merge"),k=require("@flownet/lib-parse-imports-js"),_=require("@flownet/lib-list-npm-versions"),j=require("@fnet/yargs-options-from-schema"),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"),$=require("@flownet/lib-to-electron"),O=require("@flownet/lib-to-webos"),I=require("@flownet/lib-to-nextjs"),C=require("@flownet/lib-to-docker"),N=require("form-data"),M=require("@fnet/to-rust"),R=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-bpmn-from-flow"),q=require("@fnet/expression"),U=require("chalk"),L=require("lodash.pick"),B=require("lodash.omit");const J=g,z=h;const{Api:W}=y,K=v.default,G=b;var H=({feature:e,features:t,packageDevDependencies:o})=>{const{name:n,packages:a,options:i}=e,s=`${n}_enabled`,r=t.rollup_output||{},c=Object.keys(r),l=i||{};c.forEach((e=>{const o=t.rollup_output[e];o?.[n]&&!1!==o?.[n]?.enabled?(!0===o[n]&&(o[n]={enabled:!0,options:l}),o[n].options=o[n].options||{},o[n].options={...l,...o[n].options}):delete o[n]}));const p=c.some((e=>!0===t.rollup_output[e][n]?.enabled));t[s]=p,p&&a.forEach((e=>o.push({package:e[0],version:e[1]})))};const V=H;const X=H;const Y=H;const Z=H;const Q=H;const ee=H;const te=H;const oe=H;const ne=H;const ae=x,ie=p,se=d,re=k,ce=e=>{const{atom:t,packageDevDependencies:o}=e,n=t.doc.features,a=n.rollup_output||{},i=Object.keys(a),s={generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}};i.forEach((e=>{const t=n.rollup_output[e];if(t?.workbox&&!1!==t?.workbox?.enabled){if(!0===t.workbox){if(!s)return void delete t.workbox;t.workbox={enabled:!0,options:{generate:s.generate}}}t.workbox.options=t.workbox.options||{},t.workbox.options.generate=t.workbox.options.generate||s.generate}else delete t.workbox}));const r=i.some((e=>!0===n.rollup_output[e].workbox?.enabled));n.workbox_enabled=r,n.workbox_enabled&&o.push({package:"rollup-plugin-workbox",version:"^8"})},le=e=>{const{atom:t,packageDevDependencies:o}=e,n=t.doc.features,a=n.rollup_output||{},i=Object.keys(a),s={};i.forEach((e=>{const t=n.rollup_output[e];t?.gzip&&!1!==t?.gzip?.enabled?(!0===t.gzip&&(t.gzip={enabled:!0,options:s}),t.gzip.options=t.gzip.options||{},t.gzip.options={...s,...t.gzip.options}):delete t.gzip}));const r=i.some((e=>!0===n.rollup_output[e].gzip?.enabled));n.gzip_enabled=r,n.gzip_enabled&&o.push({package:"rollup-plugin-gzip",version:"^4"})},pe=e=>{const{atom:t,packageDevDependencies:o}=e,n=t.doc.features;V({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.3"]]},features:n,packageDevDependencies:o})},de=e=>{const{atom:t,packageDevDependencies:o}=e,n=t.doc.features;X({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:n,packageDevDependencies:o})},fe=e=>{const{atom:t,packageDevDependencies:o}=e,n=t.doc.features;Y({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:n,packageDevDependencies:o})},me=e=>{const{atom:t,packageDevDependencies:o}=e,n=t.doc.features;Z({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12}},features:n,packageDevDependencies:o})},ue=e=>{const{atom:t,packageDevDependencies:o}=e,n=t.doc.features;Q({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:n,packageDevDependencies:o})},ge=e=>{const{atom:t,packageDevDependencies:o}=e,n=t.doc.features;ee({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:n,packageDevDependencies:o})},he=e=>{const{atom:t,packageDevDependencies:o}=e,n=t.doc.features;te({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:n,packageDevDependencies:o})},we=e=>{const{atom:t,packageDevDependencies:o}=e,n=t.doc.features;oe({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:n,packageDevDependencies:o})},ye=e=>{const{atom:t,packageDevDependencies:o}=e,n=t.doc.features;ne({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:n,packageDevDependencies:o})};function ve({dir:e,name:t="index"}){let o=se.resolve(e,`./${t}.tsx`);if(ie.existsSync(o)||(o=se.resolve(e,`./${t}.ts`)),ie.existsSync(o)||(o=se.resolve(e,`./${t}.jsx`)),ie.existsSync(o)||(o=se.resolve(e,`./${t}.js`)),!ie.existsSync(o))return{};const n=o,a=se.extname(o);return{file:n,ext:a,ts:".ts"===a||".tsx"===a,name:t}}const be=_;const xe=p,ke=d,_e=l;const je=f,De=p,Pe=d,Se=k,Ae=_;const Te=p,Ee=d,$e=l;const Oe=p,Ie=d,Ce=f,Ne=k;const Me=p,Re=d,Fe=f,qe=j;const Ue=p,Le=d,Be=f;const Je=p,ze=d,We=f;const Ke=f,Ge=p,He=d,Ve=r;const Xe=s,Ye=o;const Ze=s;const Qe=s;const et=s;const tt=D,ot=t;const nt=p,at=d,it=P,st=D,rt=t;const ct=p,lt=d,pt=P,dt=s,ft=t;const mt=p,ut=d,gt=S,ht=f,wt=A,yt=t;const vt=a,bt=o,xt=t;const kt=t,_t=T,jt=m,Dt=P;const Pt=t,St=E,At=m,Tt=P;const Et=t,$t=$,Ot=m,It=P;const Ct=t,Nt=O,Mt=m,Rt=P;const Ft=t,qt=I,Ut=m,Lt=P;const Bt=t,Jt=C,zt=m,Wt=P;const Kt=p,Gt=d,Ht=P,Vt=D,Xt=t,Yt=v.default;const Zt=P,Qt=t,eo=v.default;const to=P,oo=t,no=v.default,ao=a,io=D,so=N;const ro=P,co=t,lo=v.default,po=a,fo=D,mo=N;const uo=t,go=M,ho=m,wo=P;const yo=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,buildId:a})=>{await e({message:"Deploying it as gitlab project."});const i=t.projectDir;let s="fnet-to-gitlab";const r=n.params.config||"gitlab",c=await ot({name:r,dir:t.projectDir,tags:t.tags});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;s+=` --projectGroupId=${l.projectGroupId}`,s+=` --projectPath='${i}'`,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 tt({cmd:s}),o.isDirty=!0)},vo=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:a,yamlTarget:i})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,r=at.resolve(s,"package.json"),c=nt.readFileSync(r),l=JSON.parse(c);l.name=n.params.name,l.version=it.inc(n.params.version,"patch"),delete l.scripts,delete l.devDependencies,nt.writeFileSync(r,JSON.stringify(l,null,"\t"));const{file:p,data:d}=await rt({name:n.config||"gcs",dir:t.projectDir,tags:t.tags});let f="fnet-files-to-gcs";f+=` --projectId='${d.env.GCS_PROJECT_ID}'`,f+=` --bucketName='${d.env.GCS_BUCKET_NAME}'`,f+=` --keyFilename='${at.resolve(at.dirname(p),d.env.GCS_UPLOADER_KEY_FILE)}'`,f+=` --dir='${s}'`,f+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",f+=` --destDir='${l.name}/${l.version}'`,f+=" --metadata.cacheControl='public, max-age=31536000, immutable'",d.env.DOMAIN&&(f+=` --domain='${d.env.DOMAIN}'`),!0!==n.dry_run&&!0!==n.params.dry_run||(f+=" --dryRun"),await st({cmd:f}),nt.writeFileSync(r,c),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=l.version,i.get("params").set("version",l.version),await a({target:n,packageJSON:l}))},bo=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:a,yamlTarget:i})=>{await t({message:"Deploying it as npm package."});const s=o.projectDir,r=lt.resolve(s,"package.json"),c=ct.readFileSync(r),l=JSON.parse(c);l.name=a.params.name,l.version=pt.inc(a.params.version,"patch");const p=a.params.bin?.name||a.params.bin;!1!==a.params.bin?.enabled&&p&&"string"==typeof p&&(l.bin={[p]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete l.scripts,delete l.devDependencies,l.scripts={serve:"npx serve ."},ct.writeFileSync(r,JSON.stringify(l,null,"\t"));const d=(await ft({name:o.npmConfig||"npm",dir:o.projectDir,tags:o.tags}))?.data;if(ct.writeFileSync(lt.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===a.dryRun)return;if(0!==dt.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");ct.writeFileSync(r,c),n.isDirty=!0,a.params.version=l.version,i.get("params").set("version",l.version)},xo=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:a,buildId:i,packageDependencies:s,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=o.projectDir,l=o.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===a.deploy.template)d={atom:e,packageDependencies:s,red:{tab:{id:a.deploy.id||wt.util.generateId(),label:`${p}/${e.id?e.id:gt.hostname()}/${e.name}/${a.deploy.name||a.deploy.template}`},function:{id:wt.util.generateId(),name:e.doc.name,initialize:{content:mt.readFileSync(ut.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:wt.util.generateId(),...a.params?.inject,payload:"json"===a.params?.inject?.payloadType?`'${JSON.stringify(a.params?.inject?.payload)}'`:a.params?.inject?.payload},debug:{id:wt.util.generateId()}}};else if("cronjob"===a.deploy.template){let t=a.params?.schedules?cloneDeep(a.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:s,red:{tab:{id:a.deploy.id||wt.util.generateId(),label:`${p}/${e.id?e.id:gt.hostname()}/${a.deploy.name||a.deploy.template}`},function:{id:wt.util.generateId(),name:e.doc.name,initialize:{content:mt.readFileSync(ut.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:wt.util.generateId(),schedules:t},debug:{id:wt.util.generateId()}}}}else{if("http"!==a.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:a.deploy.id||wt.util.generateId(),label:`${p}/${e.id?e.id:gt.hostname()}/${a.deploy.name||a.deploy.template}`},function:{id:wt.util.generateId(),name:e.doc.name,initialize:{content:mt.readFileSync(ut.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:wt.util.generateId(),method:a.params.method||"get",url:a.params.url},httpout:{id:wt.util.generateId()},debug:{id:wt.util.generateId()}}}}let f=ht.compile(mt.readFileSync(ut.resolve(l,`deploy/node-red/${a.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(mt.writeFileSync(ut.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===a.dryRun)return;n.isDirty=!0;const m=(await yt({name:o.redConfig||"red",dir:o.projectDir,tags:o.tags}))?.data,u=a.deploy.url||m.env.RED_URL,g={};if(!1!==a.deploy.auth&&(g.Authorization="Bearer "+atomAccessToken),a.deploy.id)!0===a.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${a.deploy.id}`,headers:g}),delete a.actions.delete,delete a.deploy.id,a.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${a.deploy.id}`,data:f,headers:g});else{const e=await axios({method:"POST",url:`${u}/flow`,data:f,headers:g});a.deploy.id=e.data.id}},ko=async({atom:e,Atom:t,setInProgress:o,context:n,packageDependencies:a,deploymentProject:i,deploymentProjectTarget:s})=>{await o({message:"Deploying it as workflow lib."});const r=(await xt({name:"atom",dir:n.projectDir,tags:n.tags}))?.data;let c,l,p,d=s.deploy.name.split("/");if(1===d.length)l=r.env.ATOM_LIBRARIES_ID,p=s.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:r.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===s.dryRun)return;if(i.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:vt.readFileSync(bt.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:vt.readFileSync(bt.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:vt.readFileSync(bt.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=a,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},_o=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:a,context:i,yamlTarget:s})=>{o&&await o({message:"Deploying it as ios-app package."});const r=t?.config?await kt({name:t.config,dir:n,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Dt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=jt(t.params);l.dependencies=jt(a);const p={atom:e,params:l,config:r?.config,src:n,dest:n};return{deployer:await _t(p)}},jo=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:a,context:i,yamlTarget:s})=>{o&&await o({message:"Deploying it as macos-app package."});const r=t?.config?await Pt({name:t.config,dir:n,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Tt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=At(t.params);l.dependencies=At(a);const p={atom:e,params:l,config:r?.config,src:n,dest:n};return{deployer:await St(p)}},Do=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:a,context:i,yamlTarget:s})=>{o&&await o({message:"Deploying it as electron package."});const r=t?.config?await Et({name:t.config,dir:n,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=It.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=Ot(t.params);l.dependencies=Ot(a);const p={atom:e,params:l,config:r?.config,src:n,dest:n};return{deployer:await $t(p)}},Po=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:a,context:i,yamlTarget:s})=>{o&&await o({message:"Deploying it as webos package."});const r=t?.config?await Ct({name:t.config,dir:n,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Rt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=Mt(t.params);l.dependencies=Mt(a);const p={atom:e,params:l,config:r?.config,src:n,dest:n};return{deployer:await Nt(p)}},So=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:a,context:i,yamlTarget:s})=>{o&&await o({message:"Deploying it as nextjs package."});const r=t?.config?await Ft({name:t.config,dir:n,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Lt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=Ut(t.params);l.dependencies=Ut(a);const p={atom:e,params:l,config:r?.config,src:n,dest:n};return{deployer:await qt(p)}},Ao=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:a,context:i,yamlTarget:s})=>{o&&await o({message:"Deploying it as docker package."});const r=t?.config?await Bt({name:t.config,dir:n,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Wt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=zt(t.params);l.dependencies=zt(a);const p={atom:e,params:l,config:r?.config,src:n,dest:n};return{deployer:await Jt(p)}},To=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,yamlTarget:a})=>{await e({message:"Deploying it as fnet package."});const i=t.projectDir,s=Gt.resolve(i,"package.json"),r=Kt.readFileSync(s),c=JSON.parse(r);c.name=n.params.name,c.version=Ht.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,Kt.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Xt({name:n.config||"fnet-package",dir:t.projectDir,tags:t.tags});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 g=u.data?.access_token;if(!g)throw new Error(`Invalid access_token from ${d}`);let h="fnet-files-to-gcs";if(h+=` --projectId='${p.env.GCS_PROJECT_ID}'`,h+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,h+=` --keyFilename='${Gt.resolve(Gt.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,h+=` --dir='${i}'`,h+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",h+=` --destDir='${c.name}/${c.version}'`,h+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(h+=` --domain='${p.env.DOMAIN}'`),!0!==n.dry_run&&!0!==n.params.dry_run||(h+=" --dryRun"),await Vt({cmd:h}),Kt.writeFileSync(s,r),!0===n.dryRun)return;o.isDirty=!0,n.params.version=c.version,a.get("params").set("version",c.version);const w=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(u=await Yt({method:"POST",url:w,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 ${g}`}}),u.data?.error)throw new Error("Failed to publish fnet package.")},Eo=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,yamlTarget:a})=>{await e({message:"Deploying it as fnet form."});const i=Zt.inc(n.params.version,"patch"),{file:s,data:r}=await Qt({name:n.config||"fnet-form",dir:t.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const c=`${r.env.ATOM_API_URL}/v1/auth/token`,l=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let d=await eo({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const f=d.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${c}`);o.isDirty=!0,n.params.version=i,a.get("params").set("version",i);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(d=await eo({method:"POST",url:m,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),d.data?.error)throw new Error("Error publishing fnet form.")},$o=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,yamlTarget:a})=>{await e({message:"Deploying it as fnet flow."});const i=to.inc(n.params.version,"patch"),{file:s,data:r}=await oo({name:n.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const c=`${r.env.ATOM_API_URL}/v1/auth/token`,l=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let d=await no({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const f=d.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${c}`);o.isDirty=!0,n.params.version=i,a.get("params").set("version",i);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(d=await no({method:"POST",url:m,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),d.data?.error)throw new Error("Error publishing fnet flow.");const u=d.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const h=await io({cmd:g});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new so;y.append("file",ao.createReadStream(w));const v=await no.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...y.getHeaders(),Authorization:`Bearer ${f}`},data:y});if(v.data?.error)throw new Error("Error uploading fnet flow.")},Oo=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,yamlTarget:a})=>{await e({message:"Deploying it as fnet node."});const i=ro.inc(n.params.version,"patch"),{file:s,data:r}=await co({name:n.config||"fnet-node",dir:t.project.projectDir,tags:t.tags});if(!r.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const c=`${r.env.ATOM_API_URL}/v1/auth/token`,l=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let d=await lo({method:"POST",url:c,data:{username:l,password:p},headers:{"Content-Type":"application/json"}});const f=d.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${c}`);o.isDirty=!0,n.params.version=i,a.get("params").set("version",i);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(d=await lo({method:"POST",url:m,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),d.data?.error)throw new Error("Error publishing fnet node.");const u=d.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const h=await fo({cmd:g});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new mo;y.append("file",po.createReadStream(w));const v=await lo.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...y.getHeaders(),Authorization:`Bearer ${f}`},data:y});if(v.data?.error)throw new Error("Error uploading fnet node.")},Io=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:a,context:i,yamlTarget:s})=>{o&&await o({message:"Deploying it as Rust package."});const r=t?.config?await uo({name:t.config,dir:n,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=wo.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=ho(t.params);l.dependencies=ho(a);const p={atom:e,params:l,config:r?.config,src:n,dest:n};return{deployer:await go(p)}};const Co=m;async function No({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Co(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||Co(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await t({node:e}),o({node:e})}var Mo={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],a=`${o}`;n.hasOwnProperty("default")&&(a="default",n=n.default);const i={name:n.condition||a,childs:[],parent:e,definition:n,index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=No},resolve:No};const Ro=q,Fo=Mo;var qo={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>Ro({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=>Ro({expression:e})))),a=[],i=n.find((e=>"if"===e?.processor)),s=t.definition[i.expression];a.push({name:`${t.name}_if`,definition:s,processor:i}),delete t.definition[i.expression];const r=n.filter((e=>"elseif"===e?.processor));let c=0;for(const e of r){const o=t.definition[e.expression];a.push({name:`${t.name}_elseif_${c++}`,definition:o,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of a)t.definition.switch.push({condition:e.processor.statement,...e.definition});await Fo.init(e)}};const Uo=m;async function Lo({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||Uo(e.definition),e.context.transform,e.context.try=e.childs.find((e=>"try"===e.name)),e.context.except=e.childs.find((e=>"except"===e.name)),e.context.except){const t=e.context.except;t.context.transform=t.context.transform||Uo(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var Bo={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=Lo},resolve:Lo};const Jo=m;async function zo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=Jo(e.definition);const a=e.context.transform;for(let e=0;e<a.assign?.length;e++){let t=a.assign[e],o=Object.keys(t)[0],i=t[o],s={key:await n(o),value:await n(i)};a.assign[e]=s}await t({node:e}),o({node:e})}var Wo={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=zo},resolve:zo};const Ko=m,Go=L,Ho=B;async function Vo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Ko(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await t({node:e}),o({node:e})}var Xo={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]=[Go(e.definition.for,t),Ho(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],a=Object.keys(n)[0],i={name:a,childs:[],parent:e,definition:n[a],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=Vo},resolve:Vo};var Yo={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:a}){}};const Zo=m;async function Qo({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||Zo(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var en={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=Qo},resolve:Qo};const tn=m;async function on({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||tn(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var nn={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=on},resolve:on};const an=m;async function sn({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||an(e.definition);const a=e.context.transform;a.args&&(a.args=await n(a.args)),a.result&&(a.result=await n(a.result));const i=e.workflow.parent;e.context.lib=i.context.libs.find((e=>e.name===a.call)),await t({node:e}),o({node:e})}var rn={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],a=Object.keys(n)[0],i={name:a,childs:[],parent:e,definition:n[a],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=sn},resolve:sn};const cn=rn;var ln={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(e){const{node:t}=e,o="shell",n=t.definition,a=typeof n[o];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/shell",n.args="string"===a?{...n.args,cmd:n[o]}:n[o],delete n[o],await cn.init(e)}};const pn=rn;var dn={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(e){const{node:t}=e,o="config",n=t.definition,a=typeof n[o];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/config",n.args="string"===a?{...n.args,name:n[o]}:n[o],delete n[o],await pn.init(e)}};const fn=rn;var mn={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(e){const{node:t}=e,o="yaml",n=t.definition,a=typeof n[o];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/yaml",n.args="string"===a?{...n.args,file:n[o]}:n[o],delete n[o],await fn.init(e)}};async function un({node:e}){e.context.next=e.childs[0]}var gn={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],a={name:o,childs:[],parent:e,definition:n[o],index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=un},resolve:un};const hn=m;async function wn({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||hn(e.definition);const a=e.context.transform;a.props&&(a.props=await n(a.props));const i=e.workflow.parent;e.context.lib=i.context.libs.find((e=>e.name===a.form)),await t({node:e}),o({node:e})}var yn={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],a=Object.keys(n)[0],i={name:a,childs:[],parent:e,definition:n[a],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=wn},resolve:wn};const vn=m;async function bn({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:a}){e.context.transform=e.context.transform||vn(e.definition),await t({node:e})}var xn={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=bn},resolve:bn};const kn=m;async function _n({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||kn(e.definition);const a=e.context.transform;a.next=await n(a.next),await t({node:e}),o({node:e})}var jn={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=_n},resolve:_n};const Dn=rn;var Pn={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,o="prompt",n=t.definition,a=typeof n[o];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/prompt",n.args="string"===a?{...n.args,message:n[o]}:n[o],delete n[o],await Dn.init(e)}};const Sn=rn;var An={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,a=typeof n[o];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${o} usage`);n.call="npm:@flownet/lib-load-browser-script-url",n.args="string"===a?{...n.args,src:n[o]}:n[o],delete n[o],await Sn.init(e)}};const Tn=rn;var En={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,a=typeof n[o];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${o} usage`);n.call="npm:@flownet/lib-load-browser-link-url",n.args="string"===a?{...n.args,src:n[o]}:n[o],delete n[o],await Tn.init(e)}};const $n=p,On=d,In=i,Cn=s,Nn=f,Mn=m,Rn=u,Fn=async()=>{if(!await z({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=J.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:qn}=w,Un=class{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(W.set_api_url(e.data.url),t)return W.set_req_token(t),void o(t);K({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:G.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{W.set_req_token(e.data.access_token),o(e.data.access_token)})).catch((e=>{W.set_req_token(),n(e)}))}))}},Ln=async e=>{const{atom:t,context:o,packageDevDependencies:n}=e;t.doc.features=t.doc.features||{};const a=t.doc.features;a.project=a.project||{},a.project.format=a.project.format||a.project_format||"esm",a.project_format=a.project.format,a.dts_enabled=!0===a.dts||void 0!==a.dts&&!1!==a.dts,a.hasOwnProperty("all_parsed_imports")||(a.all_parsed_imports=!0);const i=se.resolve(o.project.projectDir),s=ve({dir:se.resolve(i,"./app")});if(s.file){let e=await re({file:s.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 re({file:s.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.app_entry_uses_jsx=t,a.app_entry_is_ts=s.ts,a.app_entry_ext=s.ext}const r=ve({dir:se.resolve(i,"./cli")});if(r.file){let e=await re({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.cli_uses_jsx=t,a.cli_has_entry=!0,e=await re({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.cli_entry_uses_jsx=t,a.cli_entry_is_ts=r.ts,a.cli_entry_ext=r.ext}if("workflow.lib"===t.type){const e=ve({dir:se.resolve(i,"./src")});if(e.file){let t=await re({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 re({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 c=!0===a.app_entry_uses_jsx,l=!0===a.cli_entry_uses_jsx;a.form_enabled=!0===t.doc.form||!0===t.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:c}:a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:c,...a.app||{}},a.app.enabled=!0===a.app.enabled&&(!0===t.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:l}:a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:l,...a.cli||{}},a.cli.enabled=!0===a.cli.enabled&&(!1===t.doc.features.form_enabled||!0===a.cli.extend||!0===a.cli.enabled),a.cli.format=a.cli.format||"esm",a.cli.folder=a.cli.folder||a.cli.folder||"esm",a.cli.node_options=a.cli.node?.options||a.cli.node_options||"";const p={cjs:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!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},iife:{format:"iife",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==a.iife,terser:!0}},d={};!0===a.webos&&(p.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",babel_options:{targets:{chrome:"79"}}}),!0===a.electron&&(p.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===a.nextjs&&(p.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===a.ios&&(p.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===a.macos&&(p.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===a.app.enabled&&(a.app.dir=`./dist/app/${a.app.folder}`,p.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"},d.targets=d.targets||[],d.targets.push({src:"./src/app/index.html",dest:a.app.dir})),!0===a.cli.enabled&&(a.cli.dir=`./dist/cli/${a.cli.folder}`,p.cli={format:a.cli.format,context:"global",babel:!0===a.src_uses_jsx||!0===a.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:a.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===a.cli.export?"none":"auto"});const f={server:".",startPath:`${se.normalize(a.app.dir||".")}`,files:[se.normalize("./dist/**/*")],cors:!0,open:!1};a.babel_options=ae({targets:{browsers:"last 9 versions, not dead",node:"18"}},a.babel_options||a.babel?.options),a.browsersync_options=ae(f,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=ae({},a.replace_options||a.replace?.options||{}),a.css_options=ae({},a.css_options||a.css?.options||{}),a.copy_options=ae(d,a.copy_options||a.copy?.options||{}),Reflect.has(a.browsersync_options,"proxy")&&delete a.browsersync_options.server,a.rollup=a.rollup||{},a.rollup_output=ae(p,a.rollup_output||a.rollup?.output||{}),a.preact_enabled=!0===a.preact||a.preact&&!1!==a.preact?.enabled;let m=Object.keys(p);for(const e of m){const t=p[e];t&&(!1!==a.rollup[e]?(t.babel_options=t.babel_options||a.babel_options,t.browsersync_options=ae(a.browsersync_options,t.browsersync_options),t.replace_options=ae(a.replace_options,t.replace_options),t.css_options=ae(a.css_options,t.css_options),t.copy_options=ae(a.copy_options,t.copy_options),t.nunjucks_options=ae(a.nunjucks_options,t.nunjucks_options),a.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),a.form_enabled&&(t.babel=!0)):delete a.rollup_output[e])}m=Object.keys(a.rollup_output),a.babel_enabled=m.some((e=>!0===a.rollup_output[e].babel)),a.browser_enabled=m.some((e=>!0===a.rollup_output[e].babel)),a.browsersync_enabled=!1!==a.browsersync&&m.some((e=>!0===a.rollup_output[e].browsersync)),a.browsersync_enabled=a.browsersync_enabled&&a.app.enabled,a.css_enabled=!0===a.css||a.css&&!1!==a.css?.enabled,a.copy_enabled=a.app.enabled||a.copy_enabled||a.copy&&!1!==a.copy?.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,ye(e),we(e),he(e),ue(e),ge(e),me(e),fe(e),de(e),pe(e),ce(e),le(e)},Bn=async({atom:e,packageDependencies:t,packageDevDependencies:o})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let o="^18.2";o=`^${(await be({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:o}),t.push({package:"react-dom",version:o}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"yargs",version:"^17"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.19"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&t.push({package:"@flownet/lib-render-templates-dir",version:"0.1.17"}),o.push({package:"@babel/core",version:"^7"}),o.push({package:"@rollup/plugin-commonjs",version:"^26"}),o.push({package:"@rollup/plugin-node-resolve",version:"^15"}),o.push({package:"@rollup/plugin-replace",version:"^5"}),o.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&o.push({package:"rollup-plugin-dts",version:"^6"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),o.push({package:"@rollup/plugin-alias",version:"^5"}),o.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6"}),o.push({package:"@babel/preset-env",version:"^7"}),o.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":o.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":o.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":o.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":o.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":o.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),o.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.browsersync_enabled&&o.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.4"}),e.doc.features.css_enabled){o.push({package:"rollup-plugin-postcss",version:"^4"}),o.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":o.push({package:"postcss-import",version:"^15"});break;case"postcss-url":o.push({package:"postcss-url",version:"^10"});break;case"postcss-preset-env":o.push({package:"postcss-preset-env",version:"^9"});break;case"autoprefixer":o.push({package:"autoprefixer",version:"^10"});break;case"cssnano":o.push({package:"cssnano",version:"^6"})}}))}e.doc.features.copy_enabled&&(o.push({package:"rollup-plugin-copy",version:"^3"}),o.push({package:"chokidar",version:"^3"}))},Jn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating app folder"});const a={atom:e,packageDependencies:n,ts:Date.now()},i=o.templateDir,s=ke.resolve(o.projectDir,"src/app");xe.existsSync(s)||xe.mkdirSync(s,{recursive:!0});let r=["index.js.njk"];!1!==e.doc.features.app.html&&r.push("index.html.njk"),await _e({pattern:r,dir:ke.resolve(i,"src/app"),outDir:s,context:a})},zn=async({atom:e,context:t,packageDependencies:o,packageDevDependencies:n,setInProgress:a})=>{await a({message:"Creating package.json."});o.filter((e=>!0===e.dev)).forEach((e=>{n.find((t=>t.package===e.package))||n.push(e);const t=o.findIndex((t=>t.package===e.package));o.splice(t,1)}));const i=o.find((e=>"react"===e.package)),s=o.find((e=>"react-dom"===e.package));i&&!s?o.push({package:"react-dom",version:i.version}):i&&s&&(s.version=i.version),i&&e.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push({file:Pe.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&r.push({file:Pe.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of r){const a=t.file;if(!De.existsSync(a))throw new Error(`App file not found: ${a}`);const i=await Se({file:a,recursive:!0}),s=!0===e.doc.features.all_parsed_imports?i.all:i.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 a=(await Ae({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?n:o).push({package:e.package,subpath:e.subpath,version:`^${a}`,type:"npm"})}}const c={atom:e,packageDependencies:o,packageDevDependencies:n},l=t.templateCommonDir,p=je.compile(De.readFileSync(Pe.resolve(l,"package.json.njk"),"utf8"),je.configure(l)).render(c),d=t.projectDir,f=Pe.resolve(d,"package.json");De.writeFileSync(f,p,"utf8")},Wn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const a={atom:e,packageDependencies:n},i=o.templateDir,s=Ee.resolve(o.projectDir,"src/cli");Te.existsSync(s)||Te.mkdirSync(s,{recursive:!0}),await $e({pattern:["index.js.njk"],dir:Ee.resolve(i,"src/cli"),outDir:s,context:a})},Kn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const a={atom:e,packageDependencies:n},i=Ie.resolve(o.projectDir,"src","default/index.js");if(!Oe.existsSync(i))throw new Error(`Entry file not found: ${i}`);const s=(await Ne({file:i,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&s.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(s.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<s.length;e++){const o=s[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(s)}}const l=o.templateCommonDir;let p=Ce.compile(Oe.readFileSync(Ie.resolve(l,"rollup.config.mjs.njk"),"utf8"),Ce.configure(l)).render(a);const d=o.projectDir;let f=Ie.resolve(d,"rollup.config.mjs");Oe.writeFileSync(f,p,"utf8")},Gn=async({atom:e,setInProgress:t,context:o,njEnv:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let a={};const i=e.doc.inputs||[],s=[],r=e.doc.input;if(r?a=await qe({schema:r}):i.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&s.push(e);const t={};Reflect.has(e,"type")&&(t.type=e.type),Reflect.has(e,"default")&&(t.default=e.default),Reflect.has(e,"choices")&&(t.choices=e.choices),(Reflect.has(e,"describe")||Reflect.has(e,"description"))&&(t.describe=e.describe||e.description),Reflect.has(e,"alias")&&(t.alias=e.alias),Reflect.has(e,"required")&&!0===e.required&&(t.required=!0),Reflect.has(e,"hidden")&&!0===e.hidden&&(t.hidden=!0),Reflect.has(e,"array")&&!0===e.array&&(t.array=!0),Reflect.has(e,"normalize")&&!0===e.normalize&&(t.normalize=!0),Reflect.has(e,"nargs")&&(t.nargs=e.nargs),a[e.name]=t})),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const t=e.doc.features.cli.fargs,o={type:"string",describe:"Config name to load args",hidden:!1},n={type:"array",describe:"Tags to filter the config",hidden:!1};Reflect.has(t,"default")&&(o.default=t.default),(Reflect.has(t,"describe")||Reflect.has(t,"description"))&&(o.describe=t.describe||t.description),Reflect.has(t,"choices")&&(o.choices=t.choices),a.fargs=o,a.ftag=n}const c={options:a,imports:s,atom:e},l=o.templateDir,p=Fe.compile(Me.readFileSync(Re.resolve(l,"src/default/to.args.js.njk"),"utf8"),n).render(c),d=o.projectDir,f=Re.resolve(d,"src/default/to.args.js");Me.writeFileSync(f,p,"utf8")},Hn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const a={atom:e,packageDependencies:n},i=o.templateCommonDir,s=Be.compile(Ue.readFileSync(Le.resolve(i,".gitignore.njk"),"utf8"),Be.configure(i)).render(a),r=o.projectDir,c=Le.resolve(r,".gitignore");Ue.writeFileSync(c,s,"utf8")},Vn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating tsconfig.json."});const a={atom:e,packageDependencies:n},i=o.templateCommonDir,s=We.compile(Je.readFileSync(ze.resolve(i,"tsconfig.json.njk"),"utf8"),We.configure(i)).render(a),r=o.projectDir,c=ze.resolve(r,"tsconfig.json");Je.writeFileSync(c,s,"utf8")},Xn=async({atom:e,context:t,setInProgress:o,Atom:n})=>{const a="readme.md",i=`Creating ${a}`;if(await o({message:i}),t.project?.readme){const e=t.projectDir,o={content:t.project.readme.doc.content},n=He.resolve(t.project.projectDir,"fnet/how-to.md");if(Ge.existsSync(n)){const e=Ge.readFileSync(n,"utf8");o.howto=e}const i=He.resolve(t.project.projectDir,"fnet/input.yaml");if(Ge.existsSync(i)){const e=await Ve({file:i,tags:t.tags});o.input=e.content}const s=t.templateCommonDir,r=Ke.compile(Ge.readFileSync(He.resolve(s,`${a}.njk`),"utf8"),Ke.configure(s)).render(o),c=He.resolve(e,`${a}`);Ge.writeFileSync(c,r,"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:i,...s}=o.doc,r={content:i},c=t.templateCommonDir,l=Ke.compile(Ge.readFileSync(He.resolve(c,`${a}.njk`),"utf8"),Ke.configure(c)).render(r),p=t.projectDir,d=He.resolve(p,`${a}`);Ge.writeFileSync(d,l,"utf8")}},Yn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});let n=Ye.join("src","**","*");if(0!==Xe.exec(`prettier --write ${n} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o}).code)throw new Error("Couldnt format files.")},Zn=async({atom:e,setInProgress:t,context:o})=>{if(!e.doc.features.dts_enabled)return;const n=o.projectDir;await t({message:"Creating .d.ts"});if(0!==Ze.exec("tsc",{cwd:n}).code)throw new Error("Couldnt create .d.ts files.")},Qn=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==Qe.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},ea=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==et.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},ta=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:a,setInProgress:i,deploymentProject:s,yamlTarget:r}=e;if(!0===a.enabled)if("lib"===a.name)await ko({...e});else if("red"===a.name)await xo({...e});else if("npm"===a.name)await bo({...e});else if("gcs"===a.name)await vo({...e});else if("gitlab"===a.name)await yo({...e});else if("fnet-package"===a.name)await To({...e});else if("fnet-form"===a.name)await Eo({...e});else if("fnet-node"===a.name)await Oo({...e});else if("fnet-flow"===a.name)await $o({...e});else{let e;if("nextjs"===a.name?e=So:"webos"===a.name?e=Po:"electron"===a.name?e=Do:"docker"===a.name?e=Ao:"ios"===a.name?e=_o:"macos"===a.name?e=jo:"rust"===a.name&&(e=Io),!e)return;await e({atom:t,target:a,onProgress:i,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),s.isDirty=!0}},{Atom:oa}=y,na=R,aa=_,ia=F,sa=t,ra=k,ca=q,la=r,pa=U,da=qo,fa=Bo,ma=Wo,ua=Xo,ga=Mo,ha=Yo,wa=en,ya=nn,va=rn,ba=ln,xa=dn,ka=mn,_a=gn,ja=yn,Da=xn,Pa=jn,Sa=Pn,Aa=An,Ta=En,Ea=({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 $a=class{#e;#t;#o;#n;#a;#i;#s;#r;#c;#l;#p;#d;#f;#m;#u;#g;#h;#w;#y;#v;#b;constructor(e){this.#e=new Un,this.#t=e,this.#i=[],this.#s=[],this.#r={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#v={packageDependencies:this.#i,packageDevDependencies:this.#s,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:oa,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#b={initNode:this.initNode.bind(this),cloneDeep:Mn,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Ea,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await Fn(),this.#p=this.#t.buildId||qn(24),this.#v.buildId=this.#p,this.#u=this.#t.mode,this.#g=["all","deploy","build","file"].includes(this.#u),this.#h=["all","deploy","build"].includes(this.#u),this.#w=["all","deploy"].includes(this.#u),this.#y=["all","deploy","build","file","bpmn"].includes(this.#u),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#m=(await sa({optional:!0,name:"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await Ln(this.#v),await Bn(this.#v),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.#i}),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.#v.atomAccessToken=this.#c)}async initWorkflow(){const e=this.#t.id;this.#o=this.#t.project?.workflowAtom||await oa.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await la({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.#v.atom=this.#o}async initDependencies(){this.#i.push({package:"get-value",version:"^3.0"}),this.#i.push({package:"set-value",version:"^4.1"}),this.#o.doc.features.form_enabled?(this.#i.push({package:"react",version:"^18.2"}),this.#i.push({package:"react-dom",version:"^18.2"}),this.#i.push({package:"@flownet/react-app",version:"^0.1"}),this.#i.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#i.push({package:"yargs",version:"^17"}),this.#i.push({package:"chalk",version:"^4"})}#x(e){console.log("filePath",e),$n.statSync(e).isDirectory()?($n.readdirSync(e).forEach((t=>{const o=On.join(e,t);this.#x(o)})),$n.rmSync(e)):$n.unlinkSync(e)}#k(e,t){const o=$n.existsSync(e),n=o&&$n.statSync(e);o&&n.isDirectory()?($n.mkdirSync(t,{recursive:!0}),$n.readdirSync(e).forEach((o=>{this.#k(On.join(e,o),On.join(t,o))}))):$n.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,o=["node_modules"];if($n.existsSync(e)){const t=$n.readdirSync(e);for(const n of t)if(!o.includes(n)){const t=On.join(e,n);$n.rmSync(t,{recursive:!0})}}$n.existsSync(e)||$n.mkdirSync(e,{recursive:!0});const n=On.join(e,"src");$n.existsSync(n)||$n.mkdirSync(n,{recursive:!0});const a=On.join(n,"core");this.#k(t,a);const i=On.join(n,"default","blocks");$n.existsSync(i)||$n.mkdirSync(i,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#a=Nn.configure(e,{watch:!1,dev:!0}),this.#v.njEnv=this.#a}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,...a}=o;e[t]={try:a,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.#b,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await fa.hits(t))await fa.init(t);else if(await ua.hits(t))await ua.init(t);else if(await ga.hits(t))await ga.init(t);else if(await da.hits(t))await da.init(t);else if(await ha.hits(t))await ha.init(t);else if(await ma.hits(t))await ma.init(t);else if(await wa.hits(t))await wa.init(t);else if(await ya.hits(t))await ya.init(t);else if(await va.hits(t))await va.init(t);else if(await ba.hits(t))await ba.init(t);else if(await xa.hits(t))await xa.init(t);else if(await ka.hits(t))await ka.init(t);else if(await Aa.hits(t))await Aa.init(t);else if(await Ta.hits(t))await Ta.init(t);else if(await ja.hits(t))await ja.init(t);else if(await Da.hits(t))await Da.init(t);else if(await Sa.hits(t))await Sa.init(t);else if(await _a.hits(t))await _a.init(t);else{if(!await Pa.hits(t))throw new Error("Undefined step type.");await Pa.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=On.join(e.parent.indexKey,e.name);e.indexKey=o,t[o]=e;const n=[];let a=e;for(;a?.parent;)n.push(a.index),a=a.parent;n.reverse(),e.codeKey=`B_${n.join("_")}_${e.type}`,e.pathKey=`${n.join(".")}`,e.typeId=qn(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"},a=t.find((e=>e.name===n.name&&e.type===n.type));a||t.push(n),e.target=a||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"},a=t.find((e=>e.name===n.name&&e.type===n.type));a||t.push(n),e.target=a||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],a=await this.findAtomLibrary({url:n.name});n.atom=a;const i=a.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));i?.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=na({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 oa.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await oa.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await oa.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=On.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await ra({file:e,recursive:!0}),a=!0===this.#o.doc.features.all_parsed_imports?n.all:n.required;for await(const e of a){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=(await aa({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 aa({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=Mn(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.#b,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=On.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=On.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!$n.existsSync(e)){$n.mkdirSync(On.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",$n.writeFileSync(e,t,"utf8")}o.relativePath=t.split(On.sep).join("/"),this.#o.typesDir=`./types/${On.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;$n.writeFileSync(On.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=Nn.compile($n.readFileSync(On.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#a).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,a=On.resolve(n,"src/default/index.js");$n.writeFileSync(a,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=Nn.compile($n.readFileSync(On.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#a).render(e),n=this.#t.projectDir,a=On.resolve(n,`src/default/${e.codeKey}.js`);$n.writeFileSync(a,o,"utf8");for await(const t of e.childs)await this.createType({node:t})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:e}){let t=this.#r[e.type];if(t)return t;const o=this.#t.templateDir;return t=Nn.compile($n.readFileSync(On.resolve(o,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#a),this.#r[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,o=`${e.codeKey}.js`,n=On.resolve(t,`src/default/blocks/${o}`);$n.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(Rn(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 ca({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,a={content:In.stringify(n)},i=this.#t.templateDir,s=Nn.compile($n.readFileSync(On.resolve(i,`${e}.njk`),"utf8"),this.#a).render(a),r=this.#t.projectDir,c=On.resolve(r,`${e}`);$n.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:In.stringify(this.#n)},n=this.#t.templateDir,a=Nn.compile($n.readFileSync(On.resolve(n,`${e}.njk`),"utf8"),this.#a).render(o),i=this.#t.projectDir,s=On.resolve(i,`${e}`);$n.writeFileSync(s,a,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=Cn.exec("prettier --write .",{cwd:On.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 oa.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 oa.update(o,{id:o.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:o}=t,n=o.get("targets")||[],a=t.doc.targets||[];for(let e=0;e<a.length;e++){const o=a[e],i=n.items[e];await ta({...this.#v,deploymentProject:t,deploymentProjectTarget:o,yamlTarget:i})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await oa.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await oa.update(n,{id:n.id})):n=await oa.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(pa.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#y&&!this.#g)return await this.createNetwork();try{const e=this.#y?await ia({root:this.#l}):void 0;if(this.#g){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#y){const t=this.#t.project?.projectDir||this.#t.projectDir;$n.writeFileSync(On.resolve(t,"./fnet/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 Xn(this.#v),await Vn(this.#v),await Hn(this.#v),await Gn(this.#v),await Wn(this.#v),await Jn(this.#v),await Kn(this.#v),await zn(this.#v),await Yn(this.#v),await Zn(this.#v),this.#h&&(await Qn(this.#v),await ea(this.#v),this.#w&&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 ia({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 Oa=p,Ia=d;var Ca=function({baseDir:e=__dirname}){let t=e;for(;t!==Ia.parse(t).root;){const e=Ia.join(t,"node_modules");if(Oa.existsSync(e))return e;t=Ia.dirname(t)}return null};const Na=process.cwd(),{spawn:Ma}=e;t({name:["redis"],dir:Na,optional:!0});const Ra=o,Fa=n,qa=a,Ua=i,La=s,Ba=r,Ja=t,za=c,Wa=l,Ka=$a,Ga=Ca({baseDir:__dirname}),Ha="win32"===process.platform?";":":";process.env.PATH=`${Ra.join(Ga,"/.bin")}${Ha}${process.env.PATH}`;let Va=Fa(process.argv.slice(2)).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=Ra.resolve(Ga,"./@fnet/cli-project-flow/dist/template/project"),o=Ra.resolve(Na,e.name);qa.existsSync(o)||qa.mkdirSync(o),await Wa({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0});let n=La.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(La.which("git")&&(n=La.exec("git init --initial-branch=main",{cwd:o}),0!==n.code))throw new Error("Failed to initialize git.");if(La.which("code")&&e.vscode&&(n=La.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=Ra.resolve(Ga,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd();if(e.name=Ra.basename(o),e.update){if(await Wa({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0}),0!==La.exec("fnet build",{cwd:o}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await Ya(e),o=new Ka(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Ya({...e,mode:"all"}),o=new Ka(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"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Ya({...e,mode:"file"}),o=new Ka(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function Xa(e,{name:t,bin:o,preArgs:n=[]}){return e.command(`${t||o} [commands..]`,`${o} ${n.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ya(e),{projectDir:a}=t,i=process.argv.slice(3);Ma(o,[...n,...i],{cwd:a,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Ya(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:Ra.resolve(Na,`./.output/${e.id}`),templateDir:Ra.resolve(Ga,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Ra.resolve(Ga,"./@fnet/cli-project-common/dist/template/default"),coreDir:Ra.resolve(Ga,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=Ra.resolve(Na,"flow.yaml");if(!qa.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const{raw:o,parsed:n}=await Ba({file:t,tags:e}),a=Ra.dirname(t),i=n.main||"flow.main.yaml";let s=Ra.resolve(a,i);if(!qa.existsSync(s)&&(s=Ra.resolve(a,i+".yaml"),!qa.existsSync(s)))throw new Error(`${i} file not found in ${s}.`);const{raw:r,parsed:c}=await Ba({file:s,tags:e}),l={workflowAtom:{doc:{...n,"content-type":"yaml",content:r}},projectDir:a,projectFilePath:t,projectFileContent:o,projectFileParsed:n,projectMainFilePath:s,projectMainFileContent:r,projectMainFileParsed:c};let p=Ra.resolve(a,"fnet/targets.yaml");if(!qa.existsSync(p)&&(p=Ra.resolve(a,"flow.devops.yaml"),qa.existsSync(p))){const e=Ra.resolve(a,"fnet");qa.existsSync(e)||qa.mkdirSync(e),qa.copyFileSync(p,Ra.resolve(a,"fnet/targets.yaml")),qa.unlinkSync(p)}if(qa.existsSync(p)){const{raw:t,parsed:o}=await Ba({file:p,tags:e}),n=Ua.parseDocument(t);l.devops={filePath:p,fileContent:t,yamlDocument:n,doc:{...o},type:"workflow.deploy",save:async()=>{qa.writeFileSync(l.devops.filePath,n.toString())}}}const d=Ra.resolve(a,"readme.md");if(qa.existsSync(d)){const e=qa.readFileSync(d,"utf8");l.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Ra.resolve(Ga,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Ra.resolve(Ga,"./@fnet/cli-project-common/dist/template/default"),coreDir:Ra.resolve(Ga,"./@fnet/cli-project-flow/dist/template/core"),projectDir:Ra.resolve(t.projectDir,"./.workspace"),projectSrcDir:Ra.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}Va=Va.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Ya(e),{project:o}=t,{projectDir:n,projectFileParsed:a}=o,i=a.input;if(!i)throw new Error("Config schema not found in project file.");const s=await za({schema:i,format:"yaml"}),r=Ra.resolve(n,".fnet");qa.existsSync(r)||qa.mkdirSync(r);const c=Ra.resolve(r,`${e.name}.fnet`);qa.writeFileSync(c,s)}catch(e){console.error(e.message),process.exit(1)}})),Va=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Ya(e),{project:o}=t,{projectDir:n,projectFileParsed:a}=o,i=a.input;if(!i)throw new Error("Config schema not found in project file.");const s=Ra.resolve(n,".fnet"),r=Ra.resolve(s,`${e.name}.fnet`),c=await za({schema:i,format:"yaml",ref:r});qa.existsSync(s)||qa.mkdirSync(s),qa.writeFileSync(r,c)}catch(e){console.error(e.message),process.exit(1)}}))}(Va),Va=Xa(Va,{bin:"npm"}),Va=Xa(Va,{bin:"node"}),Va=Xa(Va,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Va=Xa(Va,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Va=Xa(Va,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Va=Xa(Va,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Va=Xa(Va,{bin:"npx"}),Va=Xa(Va,{bin:"cdk"}),Va=Xa(Va,{bin:"aws"}),Va=function(e,{name:t,preArgs:o=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Ya(e),{projectDir:n}=t,a=e.config,i=await Ja({name:a,dir:n,transferEnv:!1,optional:!0,tags:t.tags}),s=i?.data?.env||void 0,r=e.command,c=process.argv.slice(5);Ma(r,[...o,...c],{cwd:n,stdio:"inherit",shell:!0,env:{...process.env,...s}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(Va,{name:"with"}),Va.demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fnet/cli",
3
- "version": "0.57.1",
3
+ "version": "0.58.0",
4
4
  "files": [
5
5
  "dist"
6
6
  ],