@fnet/cli 0.58.9 → 0.58.10

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"),f=require("@flownet/lib-is-redis-online"),g=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"),D=require("semver"),x=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=f;const{Api:U}=y,B=h.default,z=w;const J=b;var W=({feature:e,features:t,packageDevDependencies:a})=>{const{name:o,packages:s,options:n,extraCheck:r}=e,i=`${o}_enabled`,c=t.rollup_output||{},p=Object.keys(c);let l=n||{};const d=t[o]?.options;d&&(l=J(l,d));const m=!t[o]||!1===t[o]?.enabled;p.forEach((e=>{const a=t.rollup_output[e];if(a){if(Reflect.has(a,o)){if(m||!a[o]||!1===a[o]?.enabled)return void delete a[o];!0===a[o]&&(a[o]={enabled:!0,options:l})}else{if(m||!1===t[i])return;a[o]={enabled:!0}}a[o]=a[o]||{},a[o].options={...l,...a[o].options}}}));let u=p.some((e=>!0===t.rollup_output[e][o]?.enabled));r&&(u=r()&&u),t[i]=u,u&&s.forEach((e=>a.push({package:e[0],version:e[1]})))};const K=W;const G=W;const H=W;const X=W;const Y=W;const Z=W;const Q=W;const V=W;const ee=W;const te=W;const ae=W;const oe=W;const se=b,ne=l,re=d,ie=v,ce=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;K({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}}},features:o,packageDevDependencies:a})},pe=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;G({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]]},features:o,packageDevDependencies:a})},le=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;H({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.3"]]},features:o,packageDevDependencies:a})},de=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;X({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:o,packageDevDependencies:a})},me=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Y({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:o,packageDevDependencies:a})},ue=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Z({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12}},features:o,packageDevDependencies:a})},fe=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Q({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:a})},ge=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;V({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:a})},ye=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;ee({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:a})},he=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;te({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:o,packageDevDependencies:a})},we=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;ae({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:o,packageDevDependencies:a})},be=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,s={};!0===o.app?.enabled&&(s.targets=s.targets||[],s.targets.push({src:"./src/app/index.html",dest:o.app.dir}),Reflect.has(o.app,"copy")||(o.copy=!0)),oe({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:s},features:o,packageDevDependencies:a})};function ve({dir:e,name:t="index"}){let a=re.resolve(e,`./${t}.tsx`);if(ne.existsSync(a)||(a=re.resolve(e,`./${t}.ts`)),ne.existsSync(a)||(a=re.resolve(e,`./${t}.jsx`)),ne.existsSync(a)||(a=re.resolve(e,`./${t}.js`)),!ne.existsSync(a))return{};const o=a,s=re.extname(a);return{file:o,ext:s,ts:".ts"===s||".tsx"===s,name:t}}const _e=_;const je=l,ke=d,De=p;const xe=m,Ae=l,Se=d,Pe=v,Ie=_;const Ee=l,Te=d,$e=p;const Oe=l,Ce=d,Re=m,Me=v;const Fe=l,qe=d,Le=m,Ne=j;const Ue=l,Be=d,ze=m;const Je=l,We=d,Ke=m;const Ge=m,He=l,Xe=d,Ye=i;const Ze=r,Qe=a;const Ve=r;const et=r;const tt=r;const at=k,ot=t;const st=l,nt=d,rt=D,it=k,ct=t;const pt=l,lt=d,dt=D,mt=r,ut=t;const ft=l,gt=d,yt=x,ht=m,wt=A,bt=t;const vt=s,_t=a,jt=t;const kt=t,Dt=S,xt=P,At=D;const St=t,Pt=I,It=P,Et=D;const Tt=t,$t=E,Ot=P,Ct=D;const Rt=t,Mt=T,Ft=P,qt=D;const Lt=t,Nt=$,Ut=P,Bt=D;const zt=t,Jt=O,Wt=P,Kt=D;const Gt=l,Ht=d,Xt=D,Yt=k,Zt=t,Qt=h.default;const Vt=D,ea=t,ta=h.default;const aa=D,oa=t,sa=h.default,na=s,ra=k,ia=C;const ca=D,pa=t,la=h.default,da=s,ma=k,ua=C;const fa=t,ga=R,ya=P,ha=D;const wa=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 ot({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 at({cmd:r}),a.isDirty=!0)},ba=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=nt.resolve(r,"package.json"),c=st.readFileSync(i),p=JSON.parse(c);p.name=o.params.name,p.version=rt.inc(o.params.version,"patch"),delete p.scripts,delete p.devDependencies,st.writeFileSync(i,JSON.stringify(p,null,"\t"));const{file:l,data:d}=await ct({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='${nt.resolve(nt.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 it({cmd:m}),st.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}))},va=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=lt.resolve(r,"package.json"),c=pt.readFileSync(i),p=JSON.parse(c);p.name=s.params.name,p.version=dt.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 ."},pt.writeFileSync(i,JSON.stringify(p,null,"\t"));const d=(await ut({name:a.npmConfig||"npm",dir:a.projectDir,tags:a.tags}))?.data;if(pt.writeFileSync(lt.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==mt.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");pt.writeFileSync(i,c),o.isDirty=!0,s.params.version=p.version,n.get("params").set("version",p.version)},_a=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||wt.util.generateId(),label:`${l}/${e.id?e.id:yt.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:wt.util.generateId(),name:e.doc.name,initialize:{content:ft.readFileSync(gt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:wt.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:wt.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||wt.util.generateId(),label:`${l}/${e.id?e.id:yt.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:wt.util.generateId(),name:e.doc.name,initialize:{content:ft.readFileSync(gt.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"!==s.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||wt.util.generateId(),label:`${l}/${e.id?e.id:yt.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:wt.util.generateId(),name:e.doc.name,initialize:{content:ft.readFileSync(gt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:wt.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:wt.util.generateId()},debug:{id:wt.util.generateId()}}}}let m=ht.compile(ft.readFileSync(gt.resolve(p,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(ft.writeFileSync(gt.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=(await bt({name:a.redConfig||"red",dir:a.projectDir,tags:a.tags}))?.data,f=s.deploy.url||u.env.RED_URL,g={};if(!1!==s.deploy.auth&&(g.Authorization="Bearer "+atomAccessToken),s.deploy.id)!0===s.actions?.delete?(await axios({method:"DELETE",url:`${f}/flow/${s.deploy.id}`,headers:g}),delete s.actions.delete,delete s.deploy.id,s.enabled=!1):await axios({method:"PUT",url:`${f}/flow/${s.deploy.id}`,data:m,headers:g});else{const e=await axios({method:"POST",url:`${f}/flow`,data:m,headers:g});s.deploy.id=e.data.id}},ja=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 jt({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:vt.readFileSync(_t.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:vt.readFileSync(_t.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:vt.readFileSync(_t.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})},ka=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 kt({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=xt(t.params);p.dependencies=xt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Dt(l)}},Da=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 St({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Et.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=It(t.params);p.dependencies=It(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Pt(l)}},xa=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 Tt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Ct.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=Ot(t.params);p.dependencies=Ot(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await $t(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 Rt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=qt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=Ft(t.params);p.dependencies=Ft(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Mt(l)}},Sa=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 Lt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Bt.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 Nt(l)}},Pa=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 zt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Kt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=Wt(t.params);p.dependencies=Wt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Jt(l)}},Ia=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet package."});const n=t.projectDir,r=Ht.resolve(n,"package.json"),i=Gt.readFileSync(r),c=JSON.parse(i);c.name=o.params.name,c.version=Xt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,Gt.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:p,data:l}=await Zt({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 f=await Qt({method:"POST",url:d,data:{username:m,password:u},headers:{"Content-Type":"application/json"}});const g=f.data?.access_token;if(!g)throw new Error(`Invalid access_token from ${d}`);let y="fnet-files-to-gcs";if(y+=` --projectId='${l.env.GCS_PROJECT_ID}'`,y+=` --bucketName='${l.env.GCS_BUCKET_NAME}'`,y+=` --keyFilename='${Ht.resolve(Ht.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 Yt({cmd:y}),Gt.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(f=await Qt({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 ${g}`}}),f.data?.error)throw new Error("Failed to publish fnet package.")},Ea=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet form."});const n=Vt.inc(o.params.version,"patch"),{file:r,data:i}=await ea({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 ta({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 ta({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.")},Ta=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet flow."});const n=aa.inc(o.params.version,"patch"),{file:r,data:i}=await oa({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 sa({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 sa({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 f=d.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const y=await ra({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new ia;w.append("file",na.createReadStream(h));const b=await sa.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${f}`,headers:{...w.getHeaders(),Authorization:`Bearer ${m}`},data:w});if(b.data?.error)throw new Error("Error uploading fnet flow.")},$a=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet node."});const n=ca.inc(o.params.version,"patch"),{file:r,data:i}=await pa({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 la({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 la({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 f=d.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const y=await ma({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new ua;w.append("file",da.createReadStream(h));const b=await la.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${f}`,headers:{...w.getHeaders(),Authorization:`Bearer ${m}`},data:w});if(b.data?.error)throw new Error("Error uploading fnet node.")},Oa=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 fa({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=ha.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=ya(t.params);p.dependencies=ya(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await ga(l)}};const Ca=l,Ra=d,Ma=n,Fa=r,qa=m,La=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:Na}=g,Ua=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);B({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:z.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{U.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{U.set_req_token(),o(e)}))}))}},Ba=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=re.resolve(a.project.projectDir),r=ve({dir:re.resolve(n,"./app")});if(r.file){let e=await ie({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 ie({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=ve({dir:re.resolve(n,"./cli")});if(i.file){let e=await ie({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 ie({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=ve({dir:re.resolve(n,"./src")});if(e.file){let t=await ie({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 ie({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:!1!==s.cjs,copy:!1},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:!1!==s.esm,copy:!0},iife:{format:"iife",context:s.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==s.iife,terser:!0,copy:!1}};!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",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===s.electron&&(l.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,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,copy:!1,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,copy:!1,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,copy:!1,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"}),!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 d={server:".",startPath:`${re.normalize(s.app.dir||".")}`,files:[re.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=se({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=se(d,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=se({},s.replace_options||s.replace?.options||{}),s.css_options=se({},s.css_options||s.css?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=se(l,s.rollup_output||s.rollup?.output||{}),s.preact_enabled=!0===s.preact||s.preact&&!1!==s.preact?.enabled;let m=Object.keys(l);for(const e of m){const t=l[e];t&&(!1!==s.rollup[e]?(t.babel_options=t.babel_options||s.babel_options,t.browsersync_options=se(s.browsersync_options,t.browsersync_options),t.replace_options=se(s.replace_options,t.replace_options),t.css_options=se(s.css_options,t.css_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])}m=Object.keys(s.rollup_output),s.babel_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browser_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browsersync_enabled=!1!==s.browsersync&&m.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.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,be(e),we(e),he(e),ye(e),fe(e),ge(e),ue(e),me(e),de(e),le(e),ce(e),pe(e)},za=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 _e({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"})}}))}},Ja=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=ke.resolve(a.projectDir,"src/app");je.existsSync(r)||je.mkdirSync(r,{recursive:!0});let i=["index.js.njk"];!1!==e.doc.features.app.html&&i.push("index.html.njk"),await De({pattern:i,dir:ke.resolve(n,"src/app"),outDir:r,context:s})},Wa=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:Se.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&i.push({file:Se.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 Pe({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 Ie({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=xe.compile(Ae.readFileSync(Se.resolve(p,"package.json.njk"),"utf8"),xe.configure(p)).render(c),d=t.projectDir,m=Se.resolve(d,"package.json");Ae.writeFileSync(m,l,"utf8")},Ka=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=Te.resolve(a.projectDir,"src/cli");Ee.existsSync(r)||Ee.mkdirSync(r,{recursive:!0}),await $e({pattern:["index.js.njk"],dir:Te.resolve(n,"src/cli"),outDir:r,context:s})},Ga=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},n=Ce.resolve(a.projectDir,"src","default/index.js");if(!Oe.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=Re.compile(Oe.readFileSync(Ce.resolve(p,"rollup.config.mjs.njk"),"utf8"),Re.configure(p)).render(s);const d=a.projectDir;let m=Ce.resolve(d,"rollup.config.mjs");Oe.writeFileSync(m,l,"utf8")},Ha=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 Ne({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=Le.compile(Fe.readFileSync(qe.resolve(p,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=a.projectDir,m=qe.resolve(d,"src/default/to.args.js");Fe.writeFileSync(m,l,"utf8")},Xa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},n=a.templateCommonDir,r=ze.compile(Ue.readFileSync(Be.resolve(n,".gitignore.njk"),"utf8"),ze.configure(n)).render(s),i=a.projectDir,c=Be.resolve(i,".gitignore");Ue.writeFileSync(c,r,"utf8")},Ya=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=Ke.compile(Je.readFileSync(We.resolve(n,"tsconfig.json.njk"),"utf8"),Ke.configure(n)).render(s),i=a.projectDir,c=We.resolve(i,"tsconfig.json");Je.writeFileSync(c,r,"utf8")},Za=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=Xe.resolve(t.project.projectDir,"fnet/how-to.md");if(He.existsSync(o)){const e=He.readFileSync(o,"utf8");a.howto=e}const n=Xe.resolve(t.project.projectDir,"fnet/input.yaml");if(He.existsSync(n)){const e=await Ye({file:n,tags:t.tags});a.input=e.content}const r=t.templateCommonDir,i=Ge.compile(He.readFileSync(Xe.resolve(r,`${s}.njk`),"utf8"),Ge.configure(r)).render(a),c=Xe.resolve(e,`${s}`);He.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=Ge.compile(He.readFileSync(Xe.resolve(c,`${s}.njk`),"utf8"),Ge.configure(c)).render(i),l=t.projectDir,d=Xe.resolve(l,`${s}`);He.writeFileSync(d,p,"utf8")}},Qa=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=Qe.join("src","**","*");if(0!==Ze.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},Va=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!==Ve.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},eo=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==et.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},to=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==tt.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},ao=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 ja({...e});else if("red"===s.name)await _a({...e});else if("npm"===s.name)await va({...e});else if("gcs"===s.name)await ba({...e});else if("gitlab"===s.name)await wa({...e});else if("fnet-package"===s.name)await Ia({...e});else if("fnet-form"===s.name)await Ea({...e});else if("fnet-node"===s.name)await $a({...e});else if("fnet-flow"===s.name)await Ta({...e});else{let e;if("nextjs"===s.name?e=Sa:"webos"===s.name?e=Aa:"electron"===s.name?e=xa:"docker"===s.name?e=Pa:"ios"===s.name?e=ka:"macos"===s.name?e=Da:"rust"===s.name&&(e=Oa),!e)return;await e({atom:t,target:s,onProgress:n,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:i}),r.isDirty=!0}},{Atom:oo}=y,so=M,no=t,ro=v,io=F,co=q;var po=class{#e;#t;#a;#o;#s;#n;#r;#i;#c;#p;#l;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new Ua,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:oo,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 La(),this.#c=this.#t.buildId||Na(24),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#f=["all","deploy","build"].includes(this.#m),this.#g=["all","deploy"].includes(this.#m),this.#l=this.#t.protocol,this.#p="BUILD:"+this.#c,this.#d=(await no({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 Ba(this.#y),await za(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 oo.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"];Ca.existsSync(e)&&Ca.readdirSync(e).forEach((o=>{a.includes(o)||(t=Fa.rm("-rf",Ra.join(e,o)))}));let o=e;if(!Ca.existsSync(o)&&(t=Fa.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=Ra.join(e,"src"),!Ca.existsSync(o)&&(t=Fa.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=Ra.join(e,"src","default"),!Ca.existsSync()&&(t=Fa.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=qa.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=so({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 oo.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await oo.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await oo.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=Ra.resolve(this.#t.projectSrcDir,"index.js"),a=await ro({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 io({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=Ra.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=Ra.relative(Ra.join(this.#t.projectDir,"src","default"),e);if(!Ca.existsSync(e)){Ca.mkdirSync(Ra.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Ca.writeFileSync(e,t,"utf8")}a.relativePath=t.split(Ra.sep).join("/"),this.#a.typesDir=`./types/${Ra.basename(o)}/src`}else{const e=Ra.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Ca.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=qa.compile(Ca.readFileSync(Ra.resolve(t,Ra.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=Ra.resolve(o,Ra.join("src","default","index.js"));Ca.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=qa.compile(Ca.readFileSync(Ra.resolve(n,`${e}.njk`),"utf8"),this.#o).render(s),i=this.#t.projectDir,c=Ra.resolve(i,`${e}`);Ca.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 oo.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 oo.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 ao({...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 oo.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await oo.update(o,{id:o.id})):o=await oo.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(co.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 Za(this.#y),await Ya(this.#y),await Xa(this.#y),await Ha(this.#y),await Ka(this.#y),await Ja(this.#y),await Ga(this.#y),await Wa(this.#y),await Qa(this.#y),await Va(this.#y),this.#f&&(await eo(this.#y),await to(this.#y),this.#g&&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 lo=l,mo=d;var uo=function({baseDir:e=__dirname}){let t=e;for(;t!==mo.parse(t).root;){const e=mo.join(t,"node_modules");if(lo.existsSync(e))return e;t=mo.dirname(t)}return null};const fo=process.cwd(),{spawn:go}=e;t({name:["redis"],dir:fo,optional:!0});const yo=a,ho=o,wo=s,bo=n,vo=r,_o=i,jo=t,ko=c,Do=p,xo=po,Ao=uo({baseDir:__dirname}),So="win32"===process.platform?";":":";process.env.PATH=`${yo.join(Ao,"/.bin")}${So}${process.env.PATH}`;let Po=ho(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=yo.resolve(Ao,"@fnet/cli-project-node/dist/template/project"),a=yo.resolve(fo,e.name);wo.existsSync(a)||wo.mkdirSync(a),await Do({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=vo.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(vo.which("git")&&(o=vo.exec("git init --initial-branch=main",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(vo.which("code")&&e.vscode&&(o=vo.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=yo.resolve(Ao,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=yo.basename(a),e.update){if(await Do({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==vo.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 Eo(e),a=new xo(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 Eo({...e,mode:"all"}),a=new xo(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 Eo({...e,mode:"file"}),a=new xo(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 Io(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 Eo(e),{projectDir:s}=t,n=process.argv.slice(3);go(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 Eo(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:yo.resolve(Ao,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:yo.resolve(Ao,"./@fnet/cli-project-common/dist/template/default"),projectDir:yo.resolve(fo,`./.output/${e.id}`),tags:e.ftag};{const t=await async function({tags:e}){const t=yo.resolve(fo,"node.yaml");if(!wo.existsSync(t))throw new Error("node.yaml file not found in current directory.");const{raw:a,parsed:o}=await _o({file:t,tags:e}),s=yo.dirname(t),n={libraryAtom:{doc:{...o},fileName:"index"},projectDir:s,projectFilePath:t,projectFileContent:a,projectFileParsed:o};let r=yo.resolve(s,"fnet/targets.yaml");if(!wo.existsSync(r)&&(r=yo.resolve(s,"node.devops.yaml"),wo.existsSync(r))){const e=yo.resolve(s,"fnet");wo.existsSync(e)||wo.mkdirSync(e),wo.copyFileSync(r,yo.resolve(s,"fnet/targets.yaml")),wo.unlinkSync(r)}if(wo.existsSync(r)){const{raw:t,parsed:a}=await _o({file:r,tags:e}),o=bo.parseDocument(t);n.devops={filePath:r,fileContent:t,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{wo.writeFileSync(n.devops.filePath,o.toString())}}}const i=yo.resolve(s,"readme.md");if(wo.existsSync(i)){const e=wo.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:yo.resolve(Ao,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:yo.resolve(Ao,"./@fnet/cli-project-common/dist/template/default"),projectDir:yo.resolve(t.projectDir,"./.workspace"),projectSrcDir:yo.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}Po=Po.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 Eo(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 ko({schema:n,format:"yaml"}),i=yo.resolve(o,".fnet");wo.existsSync(i)||wo.mkdirSync(i);const c=yo.resolve(i,`${e.name}.fnet`);wo.writeFileSync(c,r)}catch(e){console.error(e.message),process.exit(1)}})),Po=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 Eo(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=yo.resolve(o,".fnet"),i=yo.resolve(r,`${e.name}.fnet`),c=await ko({schema:n,format:"yaml",ref:i});wo.existsSync(r)||wo.mkdirSync(r),wo.writeFileSync(i,c)}catch(e){console.error(e.message),process.exit(1)}}))}(Po),Po=Io(Po,{bin:"npm"}),Po=Io(Po,{bin:"node"}),Po=Io(Po,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Po=Io(Po,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Po=Io(Po,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Po=Io(Po,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Po=Io(Po,{bin:"npx"}),Po=Io(Po,{bin:"cdk"}),Po=Io(Po,{bin:"aws"}),Po=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 Eo(e),{projectDir:o}=t,s=e.config,n=await jo({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);go(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)}}))}(Po,{name:"with"}),Po.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"),f=require("@flownet/lib-is-redis-online"),g=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"),D=require("semver"),x=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=f;const{Api:U}=y,B=h.default,z=w;const J=b;var W=({feature:e,features:t,packageDevDependencies:a})=>{const{name:o,packages:s,options:n,extraCheck:r}=e,i=`${o}_enabled`,c=t.rollup_output||{},p=Object.keys(c);let l=n||{};const d=t[o]?.options;d&&(l=J(l,d));const m=!t[o]||!1===t[o]?.enabled;p.forEach((e=>{const a=t.rollup_output[e];if(a){if(Reflect.has(a,o)){if(m||!a[o]||!1===a[o]?.enabled)return void delete a[o];!0===a[o]&&(a[o]={enabled:!0,options:l})}else{if(m||!1===t[i])return;a[o]={enabled:!0}}a[o]=a[o]||{},a[o].options={...l,...a[o].options}}}));let u=p.some((e=>!0===t.rollup_output[e][o]?.enabled));r&&(u=r()&&u),t[i]=u,u&&s.forEach((e=>a.push({package:e[0],version:e[1]})))};const K=W;const G=W;const H=W;const X=W;const Y=W;const Z=W;const Q=W;const V=W;const ee=W;const te=W;const ae=W;const oe=W;const se=b,ne=l,re=d,ie=v,ce=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;K({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}}},features:o,packageDevDependencies:a})},pe=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;G({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]]},features:o,packageDevDependencies:a})},le=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;H({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.3"]]},features:o,packageDevDependencies:a})},de=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;X({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:o,packageDevDependencies:a})},me=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Y({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:o,packageDevDependencies:a})},ue=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Z({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12}},features:o,packageDevDependencies:a})},fe=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Q({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:a})},ge=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;V({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:a})},ye=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;ee({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:a})},he=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;te({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:o,packageDevDependencies:a})},we=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;ae({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:o,packageDevDependencies:a})},be=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,s={};!0===o.app?.enabled&&(s.targets=s.targets||[],s.targets.push({src:"./src/app/index.html",dest:o.app.dir}),Reflect.has(o.app,"copy")||Reflect.has(o,"copy")||(o.copy=!0)),oe({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:s},features:o,packageDevDependencies:a})};function ve({dir:e,name:t="index"}){let a=re.resolve(e,`./${t}.tsx`);if(ne.existsSync(a)||(a=re.resolve(e,`./${t}.ts`)),ne.existsSync(a)||(a=re.resolve(e,`./${t}.jsx`)),ne.existsSync(a)||(a=re.resolve(e,`./${t}.js`)),!ne.existsSync(a))return{};const o=a,s=re.extname(a);return{file:o,ext:s,ts:".ts"===s||".tsx"===s,name:t}}const _e=_;const je=l,ke=d,De=p;const xe=m,Ae=l,Se=d,Pe=v,Ie=_;const Ee=l,Te=d,$e=p;const Oe=l,Ce=d,Re=m,Me=v;const Fe=l,qe=d,Le=m,Ne=j;const Ue=l,Be=d,ze=m;const Je=l,We=d,Ke=m;const Ge=m,He=l,Xe=d,Ye=i;const Ze=r,Qe=a;const Ve=r;const et=r;const tt=r;const at=k,ot=t;const st=l,nt=d,rt=D,it=k,ct=t;const pt=l,lt=d,dt=D,mt=r,ut=t;const ft=l,gt=d,yt=x,ht=m,wt=A,bt=t;const vt=s,_t=a,jt=t;const kt=t,Dt=S,xt=P,At=D;const St=t,Pt=I,It=P,Et=D;const Tt=t,$t=E,Ot=P,Ct=D;const Rt=t,Mt=T,Ft=P,qt=D;const Lt=t,Nt=$,Ut=P,Bt=D;const zt=t,Jt=O,Wt=P,Kt=D;const Gt=l,Ht=d,Xt=D,Yt=k,Zt=t,Qt=h.default;const Vt=D,ea=t,ta=h.default;const aa=D,oa=t,sa=h.default,na=s,ra=k,ia=C;const ca=D,pa=t,la=h.default,da=s,ma=k,ua=C;const fa=t,ga=R,ya=P,ha=D;const wa=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 ot({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 at({cmd:r}),a.isDirty=!0)},ba=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=nt.resolve(r,"package.json"),c=st.readFileSync(i),p=JSON.parse(c);p.name=o.params.name,p.version=rt.inc(o.params.version,"patch"),delete p.scripts,delete p.devDependencies,st.writeFileSync(i,JSON.stringify(p,null,"\t"));const{file:l,data:d}=await ct({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='${nt.resolve(nt.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 it({cmd:m}),st.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}))},va=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=lt.resolve(r,"package.json"),c=pt.readFileSync(i),p=JSON.parse(c);p.name=s.params.name,p.version=dt.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 ."},pt.writeFileSync(i,JSON.stringify(p,null,"\t"));const d=(await ut({name:a.npmConfig||"npm",dir:a.projectDir,tags:a.tags}))?.data;if(pt.writeFileSync(lt.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==mt.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");pt.writeFileSync(i,c),o.isDirty=!0,s.params.version=p.version,n.get("params").set("version",p.version)},_a=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||wt.util.generateId(),label:`${l}/${e.id?e.id:yt.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:wt.util.generateId(),name:e.doc.name,initialize:{content:ft.readFileSync(gt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:wt.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:wt.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||wt.util.generateId(),label:`${l}/${e.id?e.id:yt.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:wt.util.generateId(),name:e.doc.name,initialize:{content:ft.readFileSync(gt.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"!==s.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||wt.util.generateId(),label:`${l}/${e.id?e.id:yt.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:wt.util.generateId(),name:e.doc.name,initialize:{content:ft.readFileSync(gt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:wt.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:wt.util.generateId()},debug:{id:wt.util.generateId()}}}}let m=ht.compile(ft.readFileSync(gt.resolve(p,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(ft.writeFileSync(gt.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=(await bt({name:a.redConfig||"red",dir:a.projectDir,tags:a.tags}))?.data,f=s.deploy.url||u.env.RED_URL,g={};if(!1!==s.deploy.auth&&(g.Authorization="Bearer "+atomAccessToken),s.deploy.id)!0===s.actions?.delete?(await axios({method:"DELETE",url:`${f}/flow/${s.deploy.id}`,headers:g}),delete s.actions.delete,delete s.deploy.id,s.enabled=!1):await axios({method:"PUT",url:`${f}/flow/${s.deploy.id}`,data:m,headers:g});else{const e=await axios({method:"POST",url:`${f}/flow`,data:m,headers:g});s.deploy.id=e.data.id}},ja=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 jt({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:vt.readFileSync(_t.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:vt.readFileSync(_t.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:vt.readFileSync(_t.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})},ka=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 kt({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=xt(t.params);p.dependencies=xt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Dt(l)}},Da=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 St({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Et.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=It(t.params);p.dependencies=It(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Pt(l)}},xa=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 Tt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Ct.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=Ot(t.params);p.dependencies=Ot(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await $t(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 Rt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=qt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=Ft(t.params);p.dependencies=Ft(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Mt(l)}},Sa=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 Lt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Bt.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 Nt(l)}},Pa=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 zt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Kt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=Wt(t.params);p.dependencies=Wt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Jt(l)}},Ia=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet package."});const n=t.projectDir,r=Ht.resolve(n,"package.json"),i=Gt.readFileSync(r),c=JSON.parse(i);c.name=o.params.name,c.version=Xt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,Gt.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:p,data:l}=await Zt({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 f=await Qt({method:"POST",url:d,data:{username:m,password:u},headers:{"Content-Type":"application/json"}});const g=f.data?.access_token;if(!g)throw new Error(`Invalid access_token from ${d}`);let y="fnet-files-to-gcs";if(y+=` --projectId='${l.env.GCS_PROJECT_ID}'`,y+=` --bucketName='${l.env.GCS_BUCKET_NAME}'`,y+=` --keyFilename='${Ht.resolve(Ht.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 Yt({cmd:y}),Gt.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(f=await Qt({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 ${g}`}}),f.data?.error)throw new Error("Failed to publish fnet package.")},Ea=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet form."});const n=Vt.inc(o.params.version,"patch"),{file:r,data:i}=await ea({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 ta({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 ta({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.")},Ta=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet flow."});const n=aa.inc(o.params.version,"patch"),{file:r,data:i}=await oa({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 sa({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 sa({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 f=d.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const y=await ra({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new ia;w.append("file",na.createReadStream(h));const b=await sa.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${f}`,headers:{...w.getHeaders(),Authorization:`Bearer ${m}`},data:w});if(b.data?.error)throw new Error("Error uploading fnet flow.")},$a=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet node."});const n=ca.inc(o.params.version,"patch"),{file:r,data:i}=await pa({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 la({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 la({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 f=d.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const y=await ma({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new ua;w.append("file",da.createReadStream(h));const b=await la.request({method:"POST",maxBodyLength:1/0,url:`${i.env.ATOM_API_URL}/v1/service/upload/single/${f}`,headers:{...w.getHeaders(),Authorization:`Bearer ${m}`},data:w});if(b.data?.error)throw new Error("Error uploading fnet node.")},Oa=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 fa({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=ha.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=ya(t.params);p.dependencies=ya(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await ga(l)}};const Ca=l,Ra=d,Ma=n,Fa=r,qa=m,La=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:Na}=g,Ua=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);B({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:z.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{U.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{U.set_req_token(),o(e)}))}))}},Ba=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=re.resolve(a.project.projectDir),r=ve({dir:re.resolve(n,"./app")});if(r.file){let e=await ie({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 ie({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=ve({dir:re.resolve(n,"./cli")});if(i.file){let e=await ie({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 ie({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=ve({dir:re.resolve(n,"./src")});if(e.file){let t=await ie({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 ie({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:!1!==s.cjs,copy:!1},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:!1!==s.esm,copy:!0},iife:{format:"iife",context:s.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==s.iife,terser:!0,copy:!1}};!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",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===s.electron&&(l.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,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,copy:!1,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,copy:!1,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,copy:!1,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"}),!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 d={server:".",startPath:`${re.normalize(s.app.dir||".")}`,files:[re.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=se({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=se(d,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=se({},s.replace_options||s.replace?.options||{}),s.css_options=se({},s.css_options||s.css?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=se(l,s.rollup_output||s.rollup?.output||{}),s.preact_enabled=!0===s.preact||s.preact&&!1!==s.preact?.enabled;let m=Object.keys(l);for(const e of m){const t=l[e];t&&(!1!==s.rollup[e]?(t.babel_options=t.babel_options||s.babel_options,t.browsersync_options=se(s.browsersync_options,t.browsersync_options),t.replace_options=se(s.replace_options,t.replace_options),t.css_options=se(s.css_options,t.css_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])}m=Object.keys(s.rollup_output),s.babel_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browser_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browsersync_enabled=!1!==s.browsersync&&m.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.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,be(e),we(e),he(e),ye(e),fe(e),ge(e),ue(e),me(e),de(e),le(e),ce(e),pe(e)},za=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 _e({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"})}}))}},Ja=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=ke.resolve(a.projectDir,"src/app");je.existsSync(r)||je.mkdirSync(r,{recursive:!0});let i=["index.js.njk"];!1!==e.doc.features.app.html&&i.push("index.html.njk"),await De({pattern:i,dir:ke.resolve(n,"src/app"),outDir:r,context:s})},Wa=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:Se.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&i.push({file:Se.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 Pe({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 Ie({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=xe.compile(Ae.readFileSync(Se.resolve(p,"package.json.njk"),"utf8"),xe.configure(p)).render(c),d=t.projectDir,m=Se.resolve(d,"package.json");Ae.writeFileSync(m,l,"utf8")},Ka=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=Te.resolve(a.projectDir,"src/cli");Ee.existsSync(r)||Ee.mkdirSync(r,{recursive:!0}),await $e({pattern:["index.js.njk"],dir:Te.resolve(n,"src/cli"),outDir:r,context:s})},Ga=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},n=Ce.resolve(a.projectDir,"src","default/index.js");if(!Oe.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=Re.compile(Oe.readFileSync(Ce.resolve(p,"rollup.config.mjs.njk"),"utf8"),Re.configure(p)).render(s);const d=a.projectDir;let m=Ce.resolve(d,"rollup.config.mjs");Oe.writeFileSync(m,l,"utf8")},Ha=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 Ne({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=Le.compile(Fe.readFileSync(qe.resolve(p,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=a.projectDir,m=qe.resolve(d,"src/default/to.args.js");Fe.writeFileSync(m,l,"utf8")},Xa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},n=a.templateCommonDir,r=ze.compile(Ue.readFileSync(Be.resolve(n,".gitignore.njk"),"utf8"),ze.configure(n)).render(s),i=a.projectDir,c=Be.resolve(i,".gitignore");Ue.writeFileSync(c,r,"utf8")},Ya=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=Ke.compile(Je.readFileSync(We.resolve(n,"tsconfig.json.njk"),"utf8"),Ke.configure(n)).render(s),i=a.projectDir,c=We.resolve(i,"tsconfig.json");Je.writeFileSync(c,r,"utf8")},Za=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=Xe.resolve(t.project.projectDir,"fnet/how-to.md");if(He.existsSync(o)){const e=He.readFileSync(o,"utf8");a.howto=e}const n=Xe.resolve(t.project.projectDir,"fnet/input.yaml");if(He.existsSync(n)){const e=await Ye({file:n,tags:t.tags});a.input=e.content}const r=t.templateCommonDir,i=Ge.compile(He.readFileSync(Xe.resolve(r,`${s}.njk`),"utf8"),Ge.configure(r)).render(a),c=Xe.resolve(e,`${s}`);He.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=Ge.compile(He.readFileSync(Xe.resolve(c,`${s}.njk`),"utf8"),Ge.configure(c)).render(i),l=t.projectDir,d=Xe.resolve(l,`${s}`);He.writeFileSync(d,p,"utf8")}},Qa=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=Qe.join("src","**","*");if(0!==Ze.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},Va=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!==Ve.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},eo=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==et.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},to=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==tt.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},ao=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 ja({...e});else if("red"===s.name)await _a({...e});else if("npm"===s.name)await va({...e});else if("gcs"===s.name)await ba({...e});else if("gitlab"===s.name)await wa({...e});else if("fnet-package"===s.name)await Ia({...e});else if("fnet-form"===s.name)await Ea({...e});else if("fnet-node"===s.name)await $a({...e});else if("fnet-flow"===s.name)await Ta({...e});else{let e;if("nextjs"===s.name?e=Sa:"webos"===s.name?e=Aa:"electron"===s.name?e=xa:"docker"===s.name?e=Pa:"ios"===s.name?e=ka:"macos"===s.name?e=Da:"rust"===s.name&&(e=Oa),!e)return;await e({atom:t,target:s,onProgress:n,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:i}),r.isDirty=!0}},{Atom:oo}=y,so=M,no=t,ro=v,io=F,co=q;var po=class{#e;#t;#a;#o;#s;#n;#r;#i;#c;#p;#l;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new Ua,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:oo,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 La(),this.#c=this.#t.buildId||Na(24),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#f=["all","deploy","build"].includes(this.#m),this.#g=["all","deploy"].includes(this.#m),this.#l=this.#t.protocol,this.#p="BUILD:"+this.#c,this.#d=(await no({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 Ba(this.#y),await za(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 oo.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"];Ca.existsSync(e)&&Ca.readdirSync(e).forEach((o=>{a.includes(o)||(t=Fa.rm("-rf",Ra.join(e,o)))}));let o=e;if(!Ca.existsSync(o)&&(t=Fa.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=Ra.join(e,"src"),!Ca.existsSync(o)&&(t=Fa.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=Ra.join(e,"src","default"),!Ca.existsSync()&&(t=Fa.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=qa.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=so({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 oo.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await oo.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await oo.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=Ra.resolve(this.#t.projectSrcDir,"index.js"),a=await ro({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 io({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=Ra.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=Ra.relative(Ra.join(this.#t.projectDir,"src","default"),e);if(!Ca.existsSync(e)){Ca.mkdirSync(Ra.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Ca.writeFileSync(e,t,"utf8")}a.relativePath=t.split(Ra.sep).join("/"),this.#a.typesDir=`./types/${Ra.basename(o)}/src`}else{const e=Ra.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Ca.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=qa.compile(Ca.readFileSync(Ra.resolve(t,Ra.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=Ra.resolve(o,Ra.join("src","default","index.js"));Ca.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=qa.compile(Ca.readFileSync(Ra.resolve(n,`${e}.njk`),"utf8"),this.#o).render(s),i=this.#t.projectDir,c=Ra.resolve(i,`${e}`);Ca.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 oo.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 oo.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 ao({...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 oo.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await oo.update(o,{id:o.id})):o=await oo.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(co.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 Za(this.#y),await Ya(this.#y),await Xa(this.#y),await Ha(this.#y),await Ka(this.#y),await Ja(this.#y),await Ga(this.#y),await Wa(this.#y),await Qa(this.#y),await Va(this.#y),this.#f&&(await eo(this.#y),await to(this.#y),this.#g&&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 lo=l,mo=d;var uo=function({baseDir:e=__dirname}){let t=e;for(;t!==mo.parse(t).root;){const e=mo.join(t,"node_modules");if(lo.existsSync(e))return e;t=mo.dirname(t)}return null};const fo=process.cwd(),{spawn:go}=e;t({name:["redis"],dir:fo,optional:!0});const yo=a,ho=o,wo=s,bo=n,vo=r,_o=i,jo=t,ko=c,Do=p,xo=po,Ao=uo({baseDir:__dirname}),So="win32"===process.platform?";":":";process.env.PATH=`${yo.join(Ao,"/.bin")}${So}${process.env.PATH}`;let Po=ho(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=yo.resolve(Ao,"@fnet/cli-project-node/dist/template/project"),a=yo.resolve(fo,e.name);wo.existsSync(a)||wo.mkdirSync(a),await Do({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=vo.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(vo.which("git")&&(o=vo.exec("git init --initial-branch=main",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(vo.which("code")&&e.vscode&&(o=vo.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=yo.resolve(Ao,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=yo.basename(a),e.update){if(await Do({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==vo.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 Eo(e),a=new xo(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 Eo({...e,mode:"all"}),a=new xo(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 Eo({...e,mode:"file"}),a=new xo(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 Io(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 Eo(e),{projectDir:s}=t,n=process.argv.slice(3);go(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 Eo(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:yo.resolve(Ao,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:yo.resolve(Ao,"./@fnet/cli-project-common/dist/template/default"),projectDir:yo.resolve(fo,`./.output/${e.id}`),tags:e.ftag};{const t=await async function({tags:e}){const t=yo.resolve(fo,"node.yaml");if(!wo.existsSync(t))throw new Error("node.yaml file not found in current directory.");const{raw:a,parsed:o}=await _o({file:t,tags:e}),s=yo.dirname(t),n={libraryAtom:{doc:{...o},fileName:"index"},projectDir:s,projectFilePath:t,projectFileContent:a,projectFileParsed:o};let r=yo.resolve(s,"fnet/targets.yaml");if(!wo.existsSync(r)&&(r=yo.resolve(s,"node.devops.yaml"),wo.existsSync(r))){const e=yo.resolve(s,"fnet");wo.existsSync(e)||wo.mkdirSync(e),wo.copyFileSync(r,yo.resolve(s,"fnet/targets.yaml")),wo.unlinkSync(r)}if(wo.existsSync(r)){const{raw:t,parsed:a}=await _o({file:r,tags:e}),o=bo.parseDocument(t);n.devops={filePath:r,fileContent:t,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{wo.writeFileSync(n.devops.filePath,o.toString())}}}const i=yo.resolve(s,"readme.md");if(wo.existsSync(i)){const e=wo.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:yo.resolve(Ao,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:yo.resolve(Ao,"./@fnet/cli-project-common/dist/template/default"),projectDir:yo.resolve(t.projectDir,"./.workspace"),projectSrcDir:yo.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}Po=Po.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 Eo(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 ko({schema:n,format:"yaml"}),i=yo.resolve(o,".fnet");wo.existsSync(i)||wo.mkdirSync(i);const c=yo.resolve(i,`${e.name}.fnet`);wo.writeFileSync(c,r)}catch(e){console.error(e.message),process.exit(1)}})),Po=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 Eo(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=yo.resolve(o,".fnet"),i=yo.resolve(r,`${e.name}.fnet`),c=await ko({schema:n,format:"yaml",ref:i});wo.existsSync(r)||wo.mkdirSync(r),wo.writeFileSync(i,c)}catch(e){console.error(e.message),process.exit(1)}}))}(Po),Po=Io(Po,{bin:"npm"}),Po=Io(Po,{bin:"node"}),Po=Io(Po,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Po=Io(Po,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Po=Io(Po,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Po=Io(Po,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Po=Io(Po,{bin:"npx"}),Po=Io(Po,{bin:"cdk"}),Po=Io(Po,{bin:"aws"}),Po=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 Eo(e),{projectDir:o}=t,s=e.config,n=await jo({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);go(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)}}))}(Po,{name:"with"}),Po.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"),n=require("path"),o=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"),R=require("@fnet/to-rust"),M=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;const H=x;var V=({feature:e,features:t,packageDevDependencies:n})=>{const{name:o,packages:a,options:i,extraCheck:s}=e,r=`${o}_enabled`,c=t.rollup_output||{},l=Object.keys(c);let p=i||{};const d=t[o]?.options;d&&(p=H(p,d));const f=!t[o]||!1===t[o]?.enabled;l.forEach((e=>{const n=t.rollup_output[e];if(n){if(Reflect.has(n,o)){if(f||!n[o]||!1===n[o]?.enabled)return void delete n[o];!0===n[o]&&(n[o]={enabled:!0,options:p})}else{if(f||!1===t[r])return;n[o]={enabled:!0}}n[o]=n[o]||{},n[o].options={...p,...n[o].options}}}));let m=l.some((e=>!0===t.rollup_output[e][o]?.enabled));s&&(m=s()&&m),t[r]=m,m&&a.forEach((e=>n.push({package:e[0],version:e[1]})))};const X=V;const Y=V;const Z=V;const Q=V;const ee=V;const te=V;const ne=V;const oe=V;const ae=V;const ie=V;const se=V;const re=V;const ce=x,le=p,pe=d,de=k,fe=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;X({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}}},features:o,packageDevDependencies:n})},me=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;Y({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]]},features:o,packageDevDependencies:n})},ue=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;Z({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.3"]]},features:o,packageDevDependencies:n})},ge=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;Q({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:o,packageDevDependencies:n})},he=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ee({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:o,packageDevDependencies:n})},we=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;te({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12}},features:o,packageDevDependencies:n})},ye=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ne({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:n})},ve=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;oe({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:n})},be=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ae({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:n})},xe=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ie({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:o,packageDevDependencies:n})},ke=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;se({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:o,packageDevDependencies:n})},_e=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features,a={};!0===o.app?.enabled&&(a.targets=a.targets||[],a.targets.push({src:"./src/app/index.html",dest:o.app.dir}),Reflect.has(o.app,"copy")||(o.copy=!0)),re({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:a},features:o,packageDevDependencies:n})};function je({dir:e,name:t="index"}){let n=pe.resolve(e,`./${t}.tsx`);if(le.existsSync(n)||(n=pe.resolve(e,`./${t}.ts`)),le.existsSync(n)||(n=pe.resolve(e,`./${t}.jsx`)),le.existsSync(n)||(n=pe.resolve(e,`./${t}.js`)),!le.existsSync(n))return{};const o=n,a=pe.extname(n);return{file:o,ext:a,ts:".ts"===a||".tsx"===a,name:t}}const De=_;const Pe=p,Se=d,Ae=l;const Te=f,Ee=p,$e=d,Oe=k,Ie=_;const Ce=p,Ne=d,Re=l;const Me=p,Fe=d,qe=f,Ue=k;const Le=p,Be=d,Je=f,ze=j;const We=p,Ke=d,Ge=f;const He=p,Ve=d,Xe=f;const Ye=f,Ze=p,Qe=d,et=r;const tt=s,nt=n;const ot=s;const at=s;const it=s;const st=D,rt=t;const ct=p,lt=d,pt=P,dt=D,ft=t;const mt=p,ut=d,gt=P,ht=s,wt=t;const yt=p,vt=d,bt=S,xt=f,kt=A,_t=t;const jt=a,Dt=n,Pt=t;const St=t,At=T,Tt=m,Et=P;const $t=t,Ot=E,It=m,Ct=P;const Nt=t,Rt=$,Mt=m,Ft=P;const qt=t,Ut=O,Lt=m,Bt=P;const Jt=t,zt=I,Wt=m,Kt=P;const Gt=t,Ht=C,Vt=m,Xt=P;const Yt=p,Zt=d,Qt=P,en=D,tn=t,nn=v.default;const on=P,an=t,sn=v.default;const rn=P,cn=t,ln=v.default,pn=a,dn=D,fn=N;const mn=P,un=t,gn=v.default,hn=a,wn=D,yn=N;const vn=t,bn=R,xn=m,kn=P;const _n=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,buildId:a})=>{await e({message:"Deploying it as gitlab project."});const i=t.projectDir;let s="fnet-to-gitlab";const r=o.params.config||"gitlab",c=await rt({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='${o.params.name}'`,s+=` --projectBranch='${o.params.branch||"main"}'`,s+=` --gitlabHost='${l.gitlabHost}'`,s+=` --gitlabToken='${l.gitlabToken}'`,s+=` --gitlabUsername='${l.gitlabUsername}'`,s+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await st({cmd:s}),n.isDirty=!0)},jn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,registerToPackageManager:a,yamlTarget:i})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,r=lt.resolve(s,"package.json"),c=ct.readFileSync(r),l=JSON.parse(c);l.name=o.params.name,l.version=pt.inc(o.params.version,"patch"),delete l.scripts,delete l.devDependencies,ct.writeFileSync(r,JSON.stringify(l,null,"\t"));const{file:p,data:d}=await ft({name:o.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='${lt.resolve(lt.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!==o.dry_run&&!0!==o.params.dry_run||(f+=" --dryRun"),await dt({cmd:f}),ct.writeFileSync(r,c),!0!==o.dryRun&&(n.isDirty=!0,o.params.version=l.version,i.get("params").set("version",l.version),await a({target:o,packageJSON:l}))},Dn=async({atom:e,setInProgress:t,context:n,deploymentProject:o,deploymentProjectTarget:a,yamlTarget:i})=>{await t({message:"Deploying it as npm package."});const s=n.projectDir,r=ut.resolve(s,"package.json"),c=mt.readFileSync(r),l=JSON.parse(c);l.name=a.params.name,l.version=gt.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 ."},mt.writeFileSync(r,JSON.stringify(l,null,"\t"));const d=(await wt({name:n.npmConfig||"npm",dir:n.projectDir,tags:n.tags}))?.data;if(mt.writeFileSync(ut.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===a.dryRun)return;if(0!==ht.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");mt.writeFileSync(r,c),o.isDirty=!0,a.params.version=l.version,i.get("params").set("version",l.version)},Pn=async({atom:e,setInProgress:t,context:n,deploymentProject:o,deploymentProjectTarget:a,buildId:i,packageDependencies:s,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=n.projectDir,l=n.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||kt.util.generateId(),label:`${p}/${e.id?e.id:bt.hostname()}/${e.name}/${a.deploy.name||a.deploy.template}`},function:{id:kt.util.generateId(),name:e.doc.name,initialize:{content:yt.readFileSync(vt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:kt.util.generateId(),...a.params?.inject,payload:"json"===a.params?.inject?.payloadType?`'${JSON.stringify(a.params?.inject?.payload)}'`:a.params?.inject?.payload},debug:{id:kt.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||kt.util.generateId(),label:`${p}/${e.id?e.id:bt.hostname()}/${a.deploy.name||a.deploy.template}`},function:{id:kt.util.generateId(),name:e.doc.name,initialize:{content:yt.readFileSync(vt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:kt.util.generateId(),schedules:t},debug:{id:kt.util.generateId()}}}}else{if("http"!==a.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:a.deploy.id||kt.util.generateId(),label:`${p}/${e.id?e.id:bt.hostname()}/${a.deploy.name||a.deploy.template}`},function:{id:kt.util.generateId(),name:e.doc.name,initialize:{content:yt.readFileSync(vt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:kt.util.generateId(),method:a.params.method||"get",url:a.params.url},httpout:{id:kt.util.generateId()},debug:{id:kt.util.generateId()}}}}let f=xt.compile(yt.readFileSync(vt.resolve(l,`deploy/node-red/${a.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(yt.writeFileSync(vt.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===a.dryRun)return;o.isDirty=!0;const m=(await _t({name:n.redConfig||"red",dir:n.projectDir,tags:n.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}},Sn=async({atom:e,Atom:t,setInProgress:n,context:o,packageDependencies:a,deploymentProject:i,deploymentProjectTarget:s})=>{await n({message:"Deploying it as workflow lib."});const r=(await Pt({name:"atom",dir:o.projectDir,tags:o.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=o.projectDir;c.doc.contents=[{content:jt.readFileSync(Dt.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:jt.readFileSync(Dt.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:jt.readFileSync(Dt.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})},An=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:a,context:i,yamlTarget:s})=>{n&&await n({message:"Deploying it as ios-app package."});const r=t?.config?await St({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Et.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=Tt(t.params);l.dependencies=Tt(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await At(p)}},Tn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:a,context:i,yamlTarget:s})=>{n&&await n({message:"Deploying it as macos-app package."});const r=t?.config?await $t({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Ct.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=It(t.params);l.dependencies=It(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ot(p)}},En=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:a,context:i,yamlTarget:s})=>{n&&await n({message:"Deploying it as electron package."});const r=t?.config?await Nt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Ft.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:o,dest:o};return{deployer:await Rt(p)}},$n=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:a,context:i,yamlTarget:s})=>{n&&await n({message:"Deploying it as webos package."});const r=t?.config?await qt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Bt.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(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ut(p)}},On=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:a,context:i,yamlTarget:s})=>{n&&await n({message:"Deploying it as nextjs package."});const r=t?.config?await Jt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Kt.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(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await zt(p)}},In=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:a,context:i,yamlTarget:s})=>{n&&await n({message:"Deploying it as docker package."});const r=t?.config?await Gt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Xt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=Vt(t.params);l.dependencies=Vt(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ht(p)}},Cn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:a})=>{await e({message:"Deploying it as fnet package."});const i=t.projectDir,s=Zt.resolve(i,"package.json"),r=Yt.readFileSync(s),c=JSON.parse(r);c.name=o.params.name,c.version=Qt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,Yt.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await tn({name:o.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 nn({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='${Zt.resolve(Zt.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!==o.dry_run&&!0!==o.params.dry_run||(h+=" --dryRun"),await en({cmd:h}),Yt.writeFileSync(s,r),!0===o.dryRun)return;n.isDirty=!0,o.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 nn({method:"POST",url:w,data:{name:c.name,version:c.version,version_domain:p.env.DOMAIN,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${g}`}}),u.data?.error)throw new Error("Failed to publish fnet package.")},Nn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:a})=>{await e({message:"Deploying it as fnet form."});const i=on.inc(o.params.version,"patch"),{file:s,data:r}=await an({name:o.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 sn({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}`);n.isDirty=!0,o.params.version=i,a.get("params").set("version",i);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(d=await sn({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),d.data?.error)throw new Error("Error publishing fnet form.")},Rn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:a})=>{await e({message:"Deploying it as fnet flow."});const i=rn.inc(o.params.version,"patch"),{file:s,data:r}=await cn({name:o.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 ln({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}`);n.isDirty=!0,o.params.version=i,a.get("params").set("version",i);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(d=await ln({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${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 dn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new fn;y.append("file",pn.createReadStream(w));const v=await ln.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.")},Mn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:a})=>{await e({message:"Deploying it as fnet node."});const i=mn.inc(o.params.version,"patch"),{file:s,data:r}=await un({name:o.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 gn({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}`);n.isDirty=!0,o.params.version=i,a.get("params").set("version",i);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(d=await gn({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${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 wn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new yn;y.append("file",hn.createReadStream(w));const v=await gn.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.")},Fn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:a,context:i,yamlTarget:s})=>{n&&await n({message:"Deploying it as Rust package."});const r=t?.config?await vn({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=kn.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=xn(t.params);l.dependencies=xn(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await bn(p)}};const qn=m;async function Un({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||qn(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||qn(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await o(t.definition.condition));await t({node:e}),n({node:e})}var Ln={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 n=t.filter((e=>e.hasOwnProperty("default")));if(n.length>1)throw new Error("Switch must have only one default");if(1===n.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 n=0;n<e.definition.switch.length;n++){let o=e.definition.switch[n],a=`${n}`;o.hasOwnProperty("default")&&(a="default",o=o.default);const i={name:o.condition||a,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=Un},resolve:Un};const Bn=q,Jn=Ln;var zn={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>Bn({expression:e}))))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,n=Object.keys(t.definition),o=await Promise.all(n.map((e=>Bn({expression:e})))),a=[],i=o.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=o.filter((e=>"elseif"===e?.processor));let c=0;for(const e of r){const n=t.definition[e.expression];a.push({name:`${t.name}_elseif_${c++}`,definition:n,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 Jn.init(e)}};const Wn=m;async function Kn({node:e,resolveTypeCommon:t,resolveNextBlock:n}){if(e.context.transform=e.context.transform||Wn(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||Wn(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),n({node:e})}var Gn={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 n="try",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}if(e.definition.except){const n="except",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}e.resolve=Kn},resolve:Kn};const Hn=m;async function Vn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=Hn(e.definition);const a=e.context.transform;for(let e=0;e<a.assign?.length;e++){let t=a.assign[e],n=Object.keys(t)[0],i=t[n],s={key:await o(n),value:await o(i)};a.assign[e]=s}await t({node:e}),n({node:e})}var Xn={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=Vn},resolve:Vn};const Yn=m,Zn=L,Qn=B;async function eo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Yn(e.definition);e.context.transform.for.in=await o(e.definition.for.in),await t({node:e}),n({node:e})}var to={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"],[n,o]=[Zn(e.definition.for,t),Qn(e.definition.for,t)];e.definition.for=n,e.definition.for.steps=[{[`${e.name}_step`]:o}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let n=0;n<e.definition.for.steps.length;n++){const o=e.definition.for.steps[n],a=Object.keys(o)[0],i={name:a,childs:[],parent:e,definition:o[a],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=eo},resolve:eo};var no={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:a}){}};const oo=m;async function ao({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||oo(e.definition);const o=e.context.transform;o.raise=await n(o.raise),await t({node:e})}var io={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=ao},resolve:ao};const so=m;async function ro({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||so(e.definition);const o=e.context.transform;o.return=await n(o.return),await t({node:e})}var co={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 lo=m;async function po({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||lo(e.definition);const a=e.context.transform;a.args&&(a.args=await o(a.args)),a.result&&(a.result=await o(a.result));const i=e.workflow.parent;e.context.lib=i.context.libs.find((e=>e.name===a.call)),await t({node:e}),n({node:e})}var fo={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call";for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],a=Object.keys(o)[0],i={name:a,childs:[],parent:e,definition:o[a],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=po},resolve:po};const mo=fo;var uo={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(e){const{node:t}=e,n="shell",o=t.definition,a=typeof o[n];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/shell",o.args="string"===a?{...o.args,cmd:o[n]}:o[n],delete o[n],await mo.init(e)}};const go=fo;var ho={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(e){const{node:t}=e,n="config",o=t.definition,a=typeof o[n];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/config",o.args="string"===a?{...o.args,name:o[n]}:o[n],delete o[n],await go.init(e)}};const wo=fo;var yo={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(e){const{node:t}=e,n="yaml",o=t.definition,a=typeof o[n];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/yaml",o.args="string"===a?{...o.args,file:o[n]}:o[n],delete o[n],await wo.init(e)}};async function vo({node:e}){e.context.next=e.childs[0]}var bo={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const n=e.definition.steps||[];for await(const o of n){const n=Object.keys(o)[0],a={name:n,childs:[],parent:e,definition:o[n],index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=vo},resolve:vo};const xo=m;async function ko({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||xo(e.definition);const a=e.context.transform;a.props&&(a.props=await o(a.props));const i=e.workflow.parent;e.context.lib=i.context.libs.find((e=>e.name===a.form)),await t({node:e}),n({node:e})}var _o={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form";for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],a=Object.keys(o)[0],i={name:a,childs:[],parent:e,definition:o[a],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=ko},resolve:ko};const jo=m;async function Do({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:a}){e.context.transform=e.context.transform||jo(e.definition),await t({node:e})}var Po={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Do},resolve:Do};const So=m;async function Ao({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||So(e.definition);const a=e.context.transform;a.next=await o(a.next),await t({node:e}),n({node:e})}var To={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Ao},resolve:Ao};const Eo=fo;var $o={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,n="prompt",o=t.definition,a=typeof o[n];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/prompt",o.args="string"===a?{...o.args,message:o[n]}:o[n],delete o[n],await Eo.init(e)}};const Oo=fo;var Io={hits:async function({node:e}){return e.definition.hasOwnProperty("html-script")},init:async function(e){const{node:t}=e,n="html-script",o=t.definition,a=typeof o[n];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${n} usage`);o.call="npm:@flownet/lib-load-browser-script-url",o.args="string"===a?{...o.args,src:o[n]}:o[n],delete o[n],await Oo.init(e)}};const Co=fo;var No={hits:async function({node:e}){return e.definition.hasOwnProperty("html-link")},init:async function(e){const{node:t}=e,n="html-link",o=t.definition,a=typeof o[n];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${n} usage`);o.call="npm:@flownet/lib-load-browser-link-url",o.args="string"===a?{...o.args,src:o[n]}:o[n],delete o[n],await Co.init(e)}};const Ro=p,Mo=d,Fo=i,qo=s,Uo=f,Lo=m,Bo=u,Jo=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:zo}=w,Wo=class{init({config:e,accessToken:t}){return new Promise(((n,o)=>{if(W.set_api_url(e.data.url),t)return W.set_req_token(t),void n(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),n(e.data.access_token)})).catch((e=>{W.set_req_token(),o(e)}))}))}},Ko=async e=>{const{atom:t,context:n,packageDevDependencies:o}=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=pe.resolve(n.project.projectDir),s=je({dir:pe.resolve(i,"./app")});if(s.file){let e=await de({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 de({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=je({dir:pe.resolve(i,"./cli")});if(r.file){let e=await de({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 de({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=je({dir:pe.resolve(i,"./src")});if(e.file){let t=await de({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.src_uses_jsx=n,a.src_has_entry=!0,t=await de({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.src_entry_uses_jsx=n,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:!1!==a.cjs,copy:!1},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:!1!==a.esm,copy:!0},iife:{format:"iife",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==a.iife,terser:!0,copy:!1}};!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",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===a.electron&&(p.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,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,copy:!1,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,copy:!1,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,copy:!1,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"}),!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 d={server:".",startPath:`${pe.normalize(a.app.dir||".")}`,files:[pe.normalize("./dist/**/*")],cors:!0,open:!1};a.babel_options=ce({targets:{browsers:"last 9 versions, not dead",node:"18"}},a.babel_options||a.babel?.options),a.browsersync_options=ce(d,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=ce({},a.replace_options||a.replace?.options||{}),a.css_options=ce({},a.css_options||a.css?.options||{}),Reflect.has(a.browsersync_options,"proxy")&&delete a.browsersync_options.server,a.rollup=a.rollup||{},a.rollup_output=ce(p,a.rollup_output||a.rollup?.output||{}),a.preact_enabled=!0===a.preact||a.preact&&!1!==a.preact?.enabled;let f=Object.keys(p);for(const e of f){const t=p[e];t&&(!1!==a.rollup[e]?(t.babel_options=t.babel_options||a.babel_options,t.browsersync_options=ce(a.browsersync_options,t.browsersync_options),t.replace_options=ce(a.replace_options,t.replace_options),t.css_options=ce(a.css_options,t.css_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])}f=Object.keys(a.rollup_output),a.babel_enabled=f.some((e=>!0===a.rollup_output[e].babel)),a.browser_enabled=f.some((e=>!0===a.rollup_output[e].babel)),a.browsersync_enabled=!1!==a.browsersync&&f.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.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,_e(e),ke(e),xe(e),be(e),ye(e),ve(e),we(e),he(e),ge(e),ue(e),fe(e),me(e)},Go=async({atom:e,packageDependencies:t,packageDevDependencies:n})=>{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 n="^18.2";n=`^${(await De({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:n}),t.push({package:"react-dom",version:n}),"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"}),n.push({package:"@babel/core",version:"^7"}),n.push({package:"@rollup/plugin-commonjs",version:"^26"}),n.push({package:"@rollup/plugin-node-resolve",version:"^15"}),n.push({package:"@rollup/plugin-replace",version:"^5"}),n.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&n.push({package:"rollup-plugin-dts",version:"^6"}),n.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),n.push({package:"@rollup/plugin-alias",version:"^5"}),n.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(n.push({package:"@rollup/plugin-babel",version:"^6"}),n.push({package:"@babel/preset-env",version:"^7"}),n.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":n.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":n.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":n.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":n.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":n.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),n.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.browsersync_enabled&&n.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.4"}),e.doc.features.css_enabled){n.push({package:"rollup-plugin-postcss",version:"^4"}),n.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":n.push({package:"postcss-import",version:"^15"});break;case"postcss-url":n.push({package:"postcss-url",version:"^10"});break;case"postcss-preset-env":n.push({package:"postcss-preset-env",version:"^9"});break;case"autoprefixer":n.push({package:"autoprefixer",version:"^10"});break;case"cssnano":n.push({package:"cssnano",version:"^6"})}}))}},Ho=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating app folder"});const a={atom:e,packageDependencies:o,ts:Date.now()},i=n.templateDir,s=Se.resolve(n.projectDir,"src/app");Pe.existsSync(s)||Pe.mkdirSync(s,{recursive:!0});let r=["index.js.njk"];!1!==e.doc.features.app.html&&r.push("index.html.njk"),await Ae({pattern:r,dir:Se.resolve(i,"src/app"),outDir:s,context:a})},Vo=async({atom:e,context:t,packageDependencies:n,packageDevDependencies:o,setInProgress:a})=>{await a({message:"Creating package.json."});n.filter((e=>!0===e.dev)).forEach((e=>{o.find((t=>t.package===e.package))||o.push(e);const t=n.findIndex((t=>t.package===e.package));n.splice(t,1)}));const i=n.find((e=>"react"===e.package)),s=n.find((e=>"react-dom"===e.package));i&&!s?n.push({package:"react-dom",version:i.version}):i&&s&&(s.version=i.version),i&&e.doc.features.react_version>=17&&(n.find((e=>"@emotion/react"===e.package))||n.push({package:"@emotion/react",version:"^11"}),n.find((e=>"@emotion/styled"===e.package))||n.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push({file:$e.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&r.push({file:$e.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(!Ee.existsSync(a))throw new Error(`App file not found: ${a}`);const i=await Oe({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(n.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const a=(await Ie({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?o:n).push({package:e.package,subpath:e.subpath,version:`^${a}`,type:"npm"})}}const c={atom:e,packageDependencies:n,packageDevDependencies:o},l=t.templateCommonDir,p=Te.compile(Ee.readFileSync($e.resolve(l,"package.json.njk"),"utf8"),Te.configure(l)).render(c),d=t.projectDir,f=$e.resolve(d,"package.json");Ee.writeFileSync(f,p,"utf8")},Xo=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const a={atom:e,packageDependencies:o},i=n.templateDir,s=Ne.resolve(n.projectDir,"src/cli");Ce.existsSync(s)||Ce.mkdirSync(s,{recursive:!0}),await Re({pattern:["index.js.njk"],dir:Ne.resolve(i,"src/cli"),outDir:s,context:a})},Yo=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating rollup file."});const a={atom:e,packageDependencies:o},i=Fe.resolve(n.projectDir,"src","default/index.js");if(!Me.existsSync(i))throw new Error(`Entry file not found: ${i}`);const s=(await Ue({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 n=s[e];t.alias.entries[n]=`node:${n}`,t.alias.entries[`node:${n}`]=n}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(s)}}const l=n.templateCommonDir;let p=qe.compile(Me.readFileSync(Fe.resolve(l,"rollup.config.mjs.njk"),"utf8"),qe.configure(l)).render(a);const d=n.projectDir;let f=Fe.resolve(d,"rollup.config.mjs");Me.writeFileSync(f,p,"utf8")},Zo=async({atom:e,setInProgress:t,context:n,njEnv:o})=>{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 ze({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,n={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")&&(n.default=t.default),(Reflect.has(t,"describe")||Reflect.has(t,"description"))&&(n.describe=t.describe||t.description),Reflect.has(t,"choices")&&(n.choices=t.choices),a.fargs=n,a.ftag=o}const c={options:a,imports:s,atom:e},l=n.templateDir,p=Je.compile(Le.readFileSync(Be.resolve(l,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=n.projectDir,f=Be.resolve(d,"src/default/to.args.js");Le.writeFileSync(f,p,"utf8")},Qo=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const a={atom:e,packageDependencies:o},i=n.templateCommonDir,s=Ge.compile(We.readFileSync(Ke.resolve(i,".gitignore.njk"),"utf8"),Ge.configure(i)).render(a),r=n.projectDir,c=Ke.resolve(r,".gitignore");We.writeFileSync(c,s,"utf8")},ea=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const a={atom:e,packageDependencies:o},i=n.templateCommonDir,s=Xe.compile(He.readFileSync(Ve.resolve(i,"tsconfig.json.njk"),"utf8"),Xe.configure(i)).render(a),r=n.projectDir,c=Ve.resolve(r,"tsconfig.json");He.writeFileSync(c,s,"utf8")},ta=async({atom:e,context:t,setInProgress:n,Atom:o})=>{const a="readme.md",i=`Creating ${a}`;if(await n({message:i}),t.project?.readme){const e=t.projectDir,n={content:t.project.readme.doc.content},o=Qe.resolve(t.project.projectDir,"fnet/how-to.md");if(Ze.existsSync(o)){const e=Ze.readFileSync(o,"utf8");n.howto=e}const i=Qe.resolve(t.project.projectDir,"fnet/input.yaml");if(Ze.existsSync(i)){const e=await et({file:i,tags:t.tags});n.input=e.content}const s=t.templateCommonDir,r=Ye.compile(Ze.readFileSync(Qe.resolve(s,`${a}.njk`),"utf8"),Ye.configure(s)).render(n),c=Qe.resolve(e,`${a}`);Ze.writeFileSync(c,r,"utf8")}else if(e.id){const n=await o.first({type:"wiki",parent_id:e.id});if(!n||"markdown"!==n.doc?.["content-type"])return;const{content:i,...s}=n.doc,r={content:i},c=t.templateCommonDir,l=Ye.compile(Ze.readFileSync(Qe.resolve(c,`${a}.njk`),"utf8"),Ye.configure(c)).render(r),p=t.projectDir,d=Qe.resolve(p,`${a}`);Ze.writeFileSync(d,l,"utf8")}},na=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Prettifiying source files."});let o=nt.join("src","**","*");if(0!==tt.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n}).code)throw new Error("Couldnt format files.")},oa=async({atom:e,setInProgress:t,context:n})=>{if(!e.doc.features.dts_enabled)return;const o=n.projectDir;await t({message:"Creating .d.ts"});if(0!==ot.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},aa=async({setInProgress:e,atom:t,context:n})=>{const o=n.projectDir;await e({message:"Installing npm packages."});if(0!==at.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},ia=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Building main project."});if(0!==it.exec("npm run build",{cwd:n}).code)throw new Error("Couldnt build project.")},sa=async e=>{const{atom:t,packageDependencies:n,context:o,deploymentProjectTarget:a,setInProgress:i,deploymentProject:s,yamlTarget:r}=e;if(!0===a.enabled)if("lib"===a.name)await Sn({...e});else if("red"===a.name)await Pn({...e});else if("npm"===a.name)await Dn({...e});else if("gcs"===a.name)await jn({...e});else if("gitlab"===a.name)await _n({...e});else if("fnet-package"===a.name)await Cn({...e});else if("fnet-form"===a.name)await Nn({...e});else if("fnet-node"===a.name)await Mn({...e});else if("fnet-flow"===a.name)await Rn({...e});else{let e;if("nextjs"===a.name?e=On:"webos"===a.name?e=$n:"electron"===a.name?e=En:"docker"===a.name?e=In:"ios"===a.name?e=An:"macos"===a.name?e=Tn:"rust"===a.name&&(e=Fn),!e)return;await e({atom:t,target:a,onProgress:i,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),s.isDirty=!0}},{Atom:ra}=y,ca=M,la=_,pa=F,da=t,fa=k,ma=q,ua=r,ga=U,ha=zn,wa=Gn,ya=Xn,va=to,ba=Ln,xa=no,ka=io,_a=co,ja=fo,Da=uo,Pa=ho,Sa=yo,Aa=bo,Ta=_o,Ea=Po,$a=To,Oa=$o,Ia=Io,Ca=No,Na=({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 n=e.parent;for(;n.parent;){const o=n.childs.find((e=>e.name===t.next));if(o){e.context.next=o;break}n=n.parent}}else{let t=e.parent,n=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(void 0!==t.blockAutoJumpToParent||void 0!==t.blockAutoJumpToSibling){if(t.blockAutoJumpToParent){const o=t.childs.find((e=>e.index===n));o&&(e.context.next=o);break}t.blockAutoJumpToParent||(n=t.index+1,t=t.parent)}else{const o=t.childs.find((e=>e.index===n));if(o){e.context.next=o;break}n=t.index+1,t=t.parent}}};var Ra=class{#e;#t;#n;#o;#a;#i;#s;#r;#c;#l;#p;#d;#f;#m;#u;#g;#h;#w;#y;#v;#b;constructor(e){this.#e=new Wo,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:ra,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#b={initNode:this.initNode.bind(this),cloneDeep:Lo,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Na,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,n){this._redis_client&&await this._redis_client.SETEX(e,n||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await Jo(),this.#p=this.#t.buildId||zo(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 da({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 Ko(this.#v),await Go(this.#v),await this.transformWorkflow({workflow:this.#o});const e=await this.initNodeTree({workflow:this.#o});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.#n=this.#t.project?.workflowAtom||await ra.get({id:e}),this.#o="string"==typeof this.#n.doc.content?(await ua({content:this.#n.doc.content})).parsed:this.#n.doc.content;let t=this.#n.doc.bundleName;t=t||(this.#n.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#n.doc.bundleName=t,this.#n.type=this.#n.type||"workflow",this.#v.atom=this.#n}async initDependencies(){this.#i.push({package:"get-value",version:"^3.0"}),this.#i.push({package:"set-value",version:"^4.1"}),this.#n.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),Ro.statSync(e).isDirectory()?(Ro.readdirSync(e).forEach((t=>{const n=Mo.join(e,t);this.#x(n)})),Ro.rmSync(e)):Ro.unlinkSync(e)}#k(e,t){const n=Ro.existsSync(e),o=n&&Ro.statSync(e);n&&o.isDirectory()?(Ro.mkdirSync(t,{recursive:!0}),Ro.readdirSync(e).forEach((n=>{this.#k(Mo.join(e,n),Mo.join(t,n))}))):Ro.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,n=["node_modules"];if(Ro.existsSync(e)){const t=Ro.readdirSync(e);for(const o of t)if(!n.includes(o)){const t=Mo.join(e,o);Ro.rmSync(t,{recursive:!0})}}Ro.existsSync(e)||Ro.mkdirSync(e,{recursive:!0});const o=Mo.join(e,"src");Ro.existsSync(o)||Ro.mkdirSync(o,{recursive:!0});const a=Mo.join(o,"core");this.#k(t,a);const i=Mo.join(o,"default","blocks");Ro.existsSync(i)||Ro.mkdirSync(i,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#a=Uo.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,n]=Object.entries(e)[0];if(n.hasOwnProperty("onerror")){const{onerror:o,...a}=n;e[t]={try:a,except:o}}if(e[t].hasOwnProperty("steps")){const n=e[t].steps;if(!Array.isArray(n))throw new Error("Steps must be an array.");e[t].steps=n.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),n={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#n}};t.forEach((t=>{const o={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:n,definition:e[t],index:n.childs.length,depth:n.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};n.childs.push(o)}));for await(const e of n.childs)await this.initNode({node:e});return n}async initNode({node:e}){const t={...this.#b,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await wa.hits(t))await wa.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 ha.hits(t))await ha.init(t);else if(await xa.hits(t))await xa.init(t);else if(await ya.hits(t))await ya.init(t);else if(await ka.hits(t))await ka.init(t);else if(await _a.hits(t))await _a.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 Pa.hits(t))await Pa.init(t);else if(await Sa.hits(t))await Sa.init(t);else if(await Ia.hits(t))await Ia.init(t);else if(await Ca.hits(t))await Ca.init(t);else if(await Ta.hits(t))await Ta.init(t);else if(await Ea.hits(t))await Ea.init(t);else if(await Oa.hits(t))await Oa.init(t);else if(await Aa.hits(t))await Aa.init(t);else{if(!await $a.hits(t))throw new Error("Undefined step type.");await $a.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const n of e.childs)await this.initNodeIndex({node:n,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const n=Mo.join(e.parent.indexKey,e.name);e.indexKey=n,t[n]=e;const o=[];let a=e;for(;a?.parent;)o.push(a.index),a=a.parent;o.reverse(),e.codeKey=`B_${o.join("_")}_${e.type}`,e.pathKey=`${o.join(".")}`,e.typeId=zo(24);for await(const n of e.childs)await this.initNodeIndex({node:n,index:t})}async initNodeCalls({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"call"===o.type&&n.push(o)}return e.context.calls=n,n}async initNodeCallLibs({root:e}){const t=[],n=e.context.calls;for await(const e of n){const n=e.definition.call,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},a=t.find((e=>e.name===o.name&&e.type===o.type));a||t.push(o),e.target=a||o}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.call,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"form"===o.type&&n.push(o)}return e.context.forms=n,n}async initNodeFormLibs({root:e}){const t=[],n=e.context.forms;for await(const e of n){const n=e.definition.form,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},a=t.find((e=>e.name===o.name&&e.type===o.type));a||t.push(o),e.target=a||o}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.form,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const n=e.filter((e=>"atom"===e.type));for(let e=0;e<n.length;e++){const o=n[e],a=await this.findAtomLibrary({url:o.name});o.atom=a;const i=a.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));i?.forEach((e=>{const n=t.find((t=>t.package===e.package));n?"string"==typeof e.path?(n.path||[]).some((t=>t===e.path))||(n.path=n.path||[],n.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(n.path||[]).some((t=>t===e))||(n.path=n.path||[],n.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.#f),"ac:"===t.protocol){const n=t.pathname.split("/");if(1===n.length)return await ra.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===n.length){const e=await ra.first({where:{name:n[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await ra.first({where:{name:n[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=Mo.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),n=[],o=await fa({file:e,recursive:!0}),a=!0===this.#n.doc.features.all_parsed_imports?o.all:o.required;for await(const e of a){if("npm"!==e.type)continue;if(n.find((t=>t.package===e.package)))continue;const t=(await la({name:e.package,groupBy:{minor:!0}}))[0][0];n.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:n},protocol:t.protocol}}if("npm:"===t.protocol){const e=(await la({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=Lo(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const n=t.params[e];if("string"==typeof n)t.params[e]={key:n,hasDefault:!1};else{const o=Object.keys(n)[0];t.params[e]={key:o,hasDefault:!0,default:n[o]}}}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.#n.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const n=t[e].atom,o=this.#t.projectDir;if("local:"===n.protocol){const e=Mo.resolve(this.#t.projectSrcDir,`${n.fileName||n.name}.js`),t=Mo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!Ro.existsSync(e)){Ro.mkdirSync(Mo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Ro.writeFileSync(e,t,"utf8")}n.relativePath=t.split(Mo.sep).join("/"),this.#n.typesDir=`./types/${Mo.basename(o)}/src`}else if("npm:"===n.protocol)n.relativePath=n.name;else{const e=`${o}/src/libs/${n.id}.js`,t=n.doc.contents?.find((e=>"esm"===e.format))||n.doc;Ro.writeFileSync(Mo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,n=Uo.compile(Ro.readFileSync(Mo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#a).render({...e,ui:{package:"@flownet/react-app"}}),o=this.#t.projectDir,a=Mo.resolve(o,"src/default/index.js");Ro.writeFileSync(a,n,"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,n=Uo.compile(Ro.readFileSync(Mo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#a).render(e),o=this.#t.projectDir,a=Mo.resolve(o,`src/default/${e.codeKey}.js`);Ro.writeFileSync(a,n,"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 n=this.#t.templateDir;return t=Uo.compile(Ro.readFileSync(Mo.resolve(n,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#a),this.#r[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,n=`${e.codeKey}.js`,o=Mo.resolve(t,`src/default/blocks/${n}`);Ro.writeFileSync(o,e.context.render,"utf8"),e.context.fileName=n,e.context.filePath=o}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(Bo(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++)e[t[n]]=await this.transformValue(e[t[n]])}else if("string"==typeof e){const t=await ma({expression:e});if(t){const{processor:n,statement:o}=t;switch(n){case"v":e=`$::v.${o}::`;break;case"e":e=`$::${o}::`;break;case"m":e=`$::closure.module['${o}']::`;break;case"f":e=`$::closure.form.${o}::`;break;case"for":e=`$::caller.for.${o}::`}}}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:n,...o}=this.#n.doc,a={content:Fo.stringify(o)},i=this.#t.templateDir,s=Uo.compile(Ro.readFileSync(Mo.resolve(i,`${e}.njk`),"utf8"),this.#a).render(a),r=this.#t.projectDir,c=Mo.resolve(r,`${e}`);Ro.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const n={content:Fo.stringify(this.#o)},o=this.#t.templateDir,a=Uo.compile(Ro.readFileSync(Mo.resolve(o,`${e}.njk`),"utf8"),this.#a).render(n),i=this.#t.projectDir,s=Mo.resolve(i,`${e}`);Ro.writeFileSync(s,a,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=qo.exec("prettier --write .",{cwd:Mo.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 n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&await n.save()}}else if(this.#n.id){const e=await ra.list({type:"workflow.deploy",parent_id:this.#n.id});for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&(n=await ra.update(n,{id:n.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:n}=t,o=n.get("targets")||[],a=t.doc.targets||[];for(let e=0;e<a.length;e++){const n=a[e],i=o.items[e];await sa({...this.#v,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:i})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#t.id)return;let o=await ra.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await ra.update(o,{id:o.id})):o=await ra.create({parent_id:this.#m.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:n.version}]}})}async setInProgress({message:e}){console.log(ga.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 pa({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;Ro.writeFileSync(Mo.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 ta(this.#v),await ea(this.#v),await Qo(this.#v),await Zo(this.#v),await Xo(this.#v),await Ho(this.#v),await Yo(this.#v),await Vo(this.#v),await na(this.#v),await oa(this.#v),this.#h&&(await aa(this.#v),await ia(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 pa({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 Ma=p,Fa=d;var qa=function({baseDir:e=__dirname}){let t=e;for(;t!==Fa.parse(t).root;){const e=Fa.join(t,"node_modules");if(Ma.existsSync(e))return e;t=Fa.dirname(t)}return null};const Ua=process.cwd(),{spawn:La}=e;t({name:["redis"],dir:Ua,optional:!0});const Ba=n,Ja=o,za=a,Wa=i,Ka=s,Ga=r,Ha=t,Va=c,Xa=l,Ya=Ra,Za=qa({baseDir:__dirname}),Qa="win32"===process.platform?";":":";process.env.PATH=`${Ba.join(Za,"/.bin")}${Qa}${process.env.PATH}`;let ei=Ja(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=Ba.resolve(Za,"./@fnet/cli-project-flow/dist/template/project"),n=Ba.resolve(Ua,e.name);za.existsSync(n)||za.mkdirSync(n),await Xa({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0});let o=Ka.exec("fnet build",{cwd:n});if(0!==o.code)throw new Error("Failed to build project.");if(Ka.which("git")&&(o=Ka.exec("git init --initial-branch=main",{cwd:n}),0!==o.code))throw new Error("Failed to initialize git.");if(Ka.which("code")&&e.vscode&&(o=Ka.exec(`cd ${n} && 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=Ba.resolve(Za,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd();if(e.name=Ba.basename(n),e.update){if(await Xa({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0}),0!==Ka.exec("fnet build",{cwd:n}).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 ni(e),n=new Ya(t);await n.init(),await n.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 ni({...e,mode:"all"}),n=new Ya(t);await n.init(),await n.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 ni({...e,mode:"file"}),n=new Ya(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function ti(e,{name:t,bin:n,preArgs:o=[]}){return e.command(`${t||n} [commands..]`,`${n} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ni(e),{projectDir:a}=t,i=process.argv.slice(3);La(n,[...o,...i],{cwd:a,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function ni(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:Ba.resolve(Ua,`./.output/${e.id}`),templateDir:Ba.resolve(Za,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Ba.resolve(Za,"./@fnet/cli-project-common/dist/template/default"),coreDir:Ba.resolve(Za,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=Ba.resolve(Ua,"flow.yaml");if(!za.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const{raw:n,parsed:o}=await Ga({file:t,tags:e}),a=Ba.dirname(t),i=o.main||"flow.main.yaml";let s=Ba.resolve(a,i);if(!za.existsSync(s)&&(s=Ba.resolve(a,i+".yaml"),!za.existsSync(s)))throw new Error(`${i} file not found in ${s}.`);const{raw:r,parsed:c}=await Ga({file:s,tags:e}),l={workflowAtom:{doc:{...o,"content-type":"yaml",content:r}},projectDir:a,projectFilePath:t,projectFileContent:n,projectFileParsed:o,projectMainFilePath:s,projectMainFileContent:r,projectMainFileParsed:c};let p=Ba.resolve(a,"fnet/targets.yaml");if(!za.existsSync(p)&&(p=Ba.resolve(a,"flow.devops.yaml"),za.existsSync(p))){const e=Ba.resolve(a,"fnet");za.existsSync(e)||za.mkdirSync(e),za.copyFileSync(p,Ba.resolve(a,"fnet/targets.yaml")),za.unlinkSync(p)}if(za.existsSync(p)){const{raw:t,parsed:n}=await Ga({file:p,tags:e}),o=Wa.parseDocument(t);l.devops={filePath:p,fileContent:t,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{za.writeFileSync(l.devops.filePath,o.toString())}}}const d=Ba.resolve(a,"readme.md");if(za.existsSync(d)){const e=za.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:Ba.resolve(Za,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Ba.resolve(Za,"./@fnet/cli-project-common/dist/template/default"),coreDir:Ba.resolve(Za,"./@fnet/cli-project-flow/dist/template/core"),projectDir:Ba.resolve(t.projectDir,"./.workspace"),projectSrcDir:Ba.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 ni(e),{project:n}=t,{projectDir:o,projectFileParsed:a}=n,i=a.input;if(!i)throw new Error("Config schema not found in project file.");const s=await Va({schema:i,format:"yaml"}),r=Ba.resolve(o,".fnet");za.existsSync(r)||za.mkdirSync(r);const c=Ba.resolve(r,`${e.name}.fnet`);za.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 ni(e),{project:n}=t,{projectDir:o,projectFileParsed:a}=n,i=a.input;if(!i)throw new Error("Config schema not found in project file.");const s=Ba.resolve(o,".fnet"),r=Ba.resolve(s,`${e.name}.fnet`),c=await Va({schema:i,format:"yaml",ref:r});za.existsSync(s)||za.mkdirSync(s),za.writeFileSync(r,c)}catch(e){console.error(e.message),process.exit(1)}}))}(ei),ei=ti(ei,{bin:"npm"}),ei=ti(ei,{bin:"node"}),ei=ti(ei,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),ei=ti(ei,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),ei=ti(ei,{name:"app",bin:"npm",preArgs:["run","app","--"]}),ei=ti(ei,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),ei=ti(ei,{bin:"npx"}),ei=ti(ei,{bin:"cdk"}),ei=ti(ei,{bin:"aws"}),ei=function(e,{name:t,preArgs:n=[]}){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 ni(e),{projectDir:o}=t,a=e.config,i=await Ha({name:a,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),s=i?.data?.env||void 0,r=e.command,c=process.argv.slice(5);La(r,[...n,...c],{cwd:o,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"),n=require("path"),o=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"),R=require("@fnet/to-rust"),M=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;const H=x;var V=({feature:e,features:t,packageDevDependencies:n})=>{const{name:o,packages:a,options:i,extraCheck:s}=e,r=`${o}_enabled`,c=t.rollup_output||{},l=Object.keys(c);let p=i||{};const d=t[o]?.options;d&&(p=H(p,d));const f=!t[o]||!1===t[o]?.enabled;l.forEach((e=>{const n=t.rollup_output[e];if(n){if(Reflect.has(n,o)){if(f||!n[o]||!1===n[o]?.enabled)return void delete n[o];!0===n[o]&&(n[o]={enabled:!0,options:p})}else{if(f||!1===t[r])return;n[o]={enabled:!0}}n[o]=n[o]||{},n[o].options={...p,...n[o].options}}}));let m=l.some((e=>!0===t.rollup_output[e][o]?.enabled));s&&(m=s()&&m),t[r]=m,m&&a.forEach((e=>n.push({package:e[0],version:e[1]})))};const X=V;const Y=V;const Z=V;const Q=V;const ee=V;const te=V;const ne=V;const oe=V;const ae=V;const ie=V;const se=V;const re=V;const ce=x,le=p,pe=d,de=k,fe=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;X({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}}},features:o,packageDevDependencies:n})},me=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;Y({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]]},features:o,packageDevDependencies:n})},ue=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;Z({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.3"]]},features:o,packageDevDependencies:n})},ge=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;Q({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:o,packageDevDependencies:n})},he=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ee({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:o,packageDevDependencies:n})},we=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;te({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12}},features:o,packageDevDependencies:n})},ye=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ne({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:n})},ve=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;oe({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:n})},be=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ae({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:n})},xe=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ie({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:o,packageDevDependencies:n})},ke=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;se({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:o,packageDevDependencies:n})},_e=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features,a={};!0===o.app?.enabled&&(a.targets=a.targets||[],a.targets.push({src:"./src/app/index.html",dest:o.app.dir}),Reflect.has(o.app,"copy")||Reflect.has(o,"copy")||(o.copy=!0)),re({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:a},features:o,packageDevDependencies:n})};function je({dir:e,name:t="index"}){let n=pe.resolve(e,`./${t}.tsx`);if(le.existsSync(n)||(n=pe.resolve(e,`./${t}.ts`)),le.existsSync(n)||(n=pe.resolve(e,`./${t}.jsx`)),le.existsSync(n)||(n=pe.resolve(e,`./${t}.js`)),!le.existsSync(n))return{};const o=n,a=pe.extname(n);return{file:o,ext:a,ts:".ts"===a||".tsx"===a,name:t}}const De=_;const Pe=p,Se=d,Ae=l;const Te=f,Ee=p,$e=d,Oe=k,Ie=_;const Ce=p,Ne=d,Re=l;const Me=p,Fe=d,qe=f,Ue=k;const Le=p,Be=d,Je=f,ze=j;const We=p,Ke=d,Ge=f;const He=p,Ve=d,Xe=f;const Ye=f,Ze=p,Qe=d,et=r;const tt=s,nt=n;const ot=s;const at=s;const it=s;const st=D,rt=t;const ct=p,lt=d,pt=P,dt=D,ft=t;const mt=p,ut=d,gt=P,ht=s,wt=t;const yt=p,vt=d,bt=S,xt=f,kt=A,_t=t;const jt=a,Dt=n,Pt=t;const St=t,At=T,Tt=m,Et=P;const $t=t,Ot=E,It=m,Ct=P;const Nt=t,Rt=$,Mt=m,Ft=P;const qt=t,Ut=O,Lt=m,Bt=P;const Jt=t,zt=I,Wt=m,Kt=P;const Gt=t,Ht=C,Vt=m,Xt=P;const Yt=p,Zt=d,Qt=P,en=D,tn=t,nn=v.default;const on=P,an=t,sn=v.default;const rn=P,cn=t,ln=v.default,pn=a,dn=D,fn=N;const mn=P,un=t,gn=v.default,hn=a,wn=D,yn=N;const vn=t,bn=R,xn=m,kn=P;const _n=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,buildId:a})=>{await e({message:"Deploying it as gitlab project."});const i=t.projectDir;let s="fnet-to-gitlab";const r=o.params.config||"gitlab",c=await rt({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='${o.params.name}'`,s+=` --projectBranch='${o.params.branch||"main"}'`,s+=` --gitlabHost='${l.gitlabHost}'`,s+=` --gitlabToken='${l.gitlabToken}'`,s+=` --gitlabUsername='${l.gitlabUsername}'`,s+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await st({cmd:s}),n.isDirty=!0)},jn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,registerToPackageManager:a,yamlTarget:i})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,r=lt.resolve(s,"package.json"),c=ct.readFileSync(r),l=JSON.parse(c);l.name=o.params.name,l.version=pt.inc(o.params.version,"patch"),delete l.scripts,delete l.devDependencies,ct.writeFileSync(r,JSON.stringify(l,null,"\t"));const{file:p,data:d}=await ft({name:o.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='${lt.resolve(lt.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!==o.dry_run&&!0!==o.params.dry_run||(f+=" --dryRun"),await dt({cmd:f}),ct.writeFileSync(r,c),!0!==o.dryRun&&(n.isDirty=!0,o.params.version=l.version,i.get("params").set("version",l.version),await a({target:o,packageJSON:l}))},Dn=async({atom:e,setInProgress:t,context:n,deploymentProject:o,deploymentProjectTarget:a,yamlTarget:i})=>{await t({message:"Deploying it as npm package."});const s=n.projectDir,r=ut.resolve(s,"package.json"),c=mt.readFileSync(r),l=JSON.parse(c);l.name=a.params.name,l.version=gt.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 ."},mt.writeFileSync(r,JSON.stringify(l,null,"\t"));const d=(await wt({name:n.npmConfig||"npm",dir:n.projectDir,tags:n.tags}))?.data;if(mt.writeFileSync(ut.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===a.dryRun)return;if(0!==ht.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");mt.writeFileSync(r,c),o.isDirty=!0,a.params.version=l.version,i.get("params").set("version",l.version)},Pn=async({atom:e,setInProgress:t,context:n,deploymentProject:o,deploymentProjectTarget:a,buildId:i,packageDependencies:s,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=n.projectDir,l=n.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||kt.util.generateId(),label:`${p}/${e.id?e.id:bt.hostname()}/${e.name}/${a.deploy.name||a.deploy.template}`},function:{id:kt.util.generateId(),name:e.doc.name,initialize:{content:yt.readFileSync(vt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:kt.util.generateId(),...a.params?.inject,payload:"json"===a.params?.inject?.payloadType?`'${JSON.stringify(a.params?.inject?.payload)}'`:a.params?.inject?.payload},debug:{id:kt.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||kt.util.generateId(),label:`${p}/${e.id?e.id:bt.hostname()}/${a.deploy.name||a.deploy.template}`},function:{id:kt.util.generateId(),name:e.doc.name,initialize:{content:yt.readFileSync(vt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:kt.util.generateId(),schedules:t},debug:{id:kt.util.generateId()}}}}else{if("http"!==a.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:a.deploy.id||kt.util.generateId(),label:`${p}/${e.id?e.id:bt.hostname()}/${a.deploy.name||a.deploy.template}`},function:{id:kt.util.generateId(),name:e.doc.name,initialize:{content:yt.readFileSync(vt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:kt.util.generateId(),method:a.params.method||"get",url:a.params.url},httpout:{id:kt.util.generateId()},debug:{id:kt.util.generateId()}}}}let f=xt.compile(yt.readFileSync(vt.resolve(l,`deploy/node-red/${a.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(yt.writeFileSync(vt.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===a.dryRun)return;o.isDirty=!0;const m=(await _t({name:n.redConfig||"red",dir:n.projectDir,tags:n.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}},Sn=async({atom:e,Atom:t,setInProgress:n,context:o,packageDependencies:a,deploymentProject:i,deploymentProjectTarget:s})=>{await n({message:"Deploying it as workflow lib."});const r=(await Pt({name:"atom",dir:o.projectDir,tags:o.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=o.projectDir;c.doc.contents=[{content:jt.readFileSync(Dt.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:jt.readFileSync(Dt.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:jt.readFileSync(Dt.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})},An=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:a,context:i,yamlTarget:s})=>{n&&await n({message:"Deploying it as ios-app package."});const r=t?.config?await St({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Et.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=Tt(t.params);l.dependencies=Tt(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await At(p)}},Tn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:a,context:i,yamlTarget:s})=>{n&&await n({message:"Deploying it as macos-app package."});const r=t?.config?await $t({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Ct.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=It(t.params);l.dependencies=It(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ot(p)}},En=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:a,context:i,yamlTarget:s})=>{n&&await n({message:"Deploying it as electron package."});const r=t?.config?await Nt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Ft.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:o,dest:o};return{deployer:await Rt(p)}},$n=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:a,context:i,yamlTarget:s})=>{n&&await n({message:"Deploying it as webos package."});const r=t?.config?await qt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Bt.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(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ut(p)}},On=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:a,context:i,yamlTarget:s})=>{n&&await n({message:"Deploying it as nextjs package."});const r=t?.config?await Jt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Kt.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(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await zt(p)}},In=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:a,context:i,yamlTarget:s})=>{n&&await n({message:"Deploying it as docker package."});const r=t?.config?await Gt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Xt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=Vt(t.params);l.dependencies=Vt(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ht(p)}},Cn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:a})=>{await e({message:"Deploying it as fnet package."});const i=t.projectDir,s=Zt.resolve(i,"package.json"),r=Yt.readFileSync(s),c=JSON.parse(r);c.name=o.params.name,c.version=Qt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,Yt.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await tn({name:o.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 nn({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='${Zt.resolve(Zt.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!==o.dry_run&&!0!==o.params.dry_run||(h+=" --dryRun"),await en({cmd:h}),Yt.writeFileSync(s,r),!0===o.dryRun)return;n.isDirty=!0,o.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 nn({method:"POST",url:w,data:{name:c.name,version:c.version,version_domain:p.env.DOMAIN,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${g}`}}),u.data?.error)throw new Error("Failed to publish fnet package.")},Nn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:a})=>{await e({message:"Deploying it as fnet form."});const i=on.inc(o.params.version,"patch"),{file:s,data:r}=await an({name:o.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 sn({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}`);n.isDirty=!0,o.params.version=i,a.get("params").set("version",i);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(d=await sn({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),d.data?.error)throw new Error("Error publishing fnet form.")},Rn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:a})=>{await e({message:"Deploying it as fnet flow."});const i=rn.inc(o.params.version,"patch"),{file:s,data:r}=await cn({name:o.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 ln({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}`);n.isDirty=!0,o.params.version=i,a.get("params").set("version",i);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(d=await ln({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${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 dn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new fn;y.append("file",pn.createReadStream(w));const v=await ln.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.")},Mn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:a})=>{await e({message:"Deploying it as fnet node."});const i=mn.inc(o.params.version,"patch"),{file:s,data:r}=await un({name:o.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 gn({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}`);n.isDirty=!0,o.params.version=i,a.get("params").set("version",i);const m=`${r.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(d=await gn({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${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 wn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).path;let y=new yn;y.append("file",hn.createReadStream(w));const v=await gn.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.")},Fn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:a,context:i,yamlTarget:s})=>{n&&await n({message:"Deploying it as Rust package."});const r=t?.config?await vn({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=kn.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=xn(t.params);l.dependencies=xn(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await bn(p)}};const qn=m;async function Un({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||qn(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||qn(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await o(t.definition.condition));await t({node:e}),n({node:e})}var Ln={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 n=t.filter((e=>e.hasOwnProperty("default")));if(n.length>1)throw new Error("Switch must have only one default");if(1===n.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 n=0;n<e.definition.switch.length;n++){let o=e.definition.switch[n],a=`${n}`;o.hasOwnProperty("default")&&(a="default",o=o.default);const i={name:o.condition||a,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=Un},resolve:Un};const Bn=q,Jn=Ln;var zn={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>Bn({expression:e}))))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,n=Object.keys(t.definition),o=await Promise.all(n.map((e=>Bn({expression:e})))),a=[],i=o.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=o.filter((e=>"elseif"===e?.processor));let c=0;for(const e of r){const n=t.definition[e.expression];a.push({name:`${t.name}_elseif_${c++}`,definition:n,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 Jn.init(e)}};const Wn=m;async function Kn({node:e,resolveTypeCommon:t,resolveNextBlock:n}){if(e.context.transform=e.context.transform||Wn(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||Wn(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),n({node:e})}var Gn={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 n="try",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}if(e.definition.except){const n="except",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}e.resolve=Kn},resolve:Kn};const Hn=m;async function Vn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=Hn(e.definition);const a=e.context.transform;for(let e=0;e<a.assign?.length;e++){let t=a.assign[e],n=Object.keys(t)[0],i=t[n],s={key:await o(n),value:await o(i)};a.assign[e]=s}await t({node:e}),n({node:e})}var Xn={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=Vn},resolve:Vn};const Yn=m,Zn=L,Qn=B;async function eo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Yn(e.definition);e.context.transform.for.in=await o(e.definition.for.in),await t({node:e}),n({node:e})}var to={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"],[n,o]=[Zn(e.definition.for,t),Qn(e.definition.for,t)];e.definition.for=n,e.definition.for.steps=[{[`${e.name}_step`]:o}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let n=0;n<e.definition.for.steps.length;n++){const o=e.definition.for.steps[n],a=Object.keys(o)[0],i={name:a,childs:[],parent:e,definition:o[a],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=eo},resolve:eo};var no={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:a}){}};const oo=m;async function ao({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||oo(e.definition);const o=e.context.transform;o.raise=await n(o.raise),await t({node:e})}var io={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=ao},resolve:ao};const so=m;async function ro({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||so(e.definition);const o=e.context.transform;o.return=await n(o.return),await t({node:e})}var co={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 lo=m;async function po({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||lo(e.definition);const a=e.context.transform;a.args&&(a.args=await o(a.args)),a.result&&(a.result=await o(a.result));const i=e.workflow.parent;e.context.lib=i.context.libs.find((e=>e.name===a.call)),await t({node:e}),n({node:e})}var fo={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call";for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],a=Object.keys(o)[0],i={name:a,childs:[],parent:e,definition:o[a],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=po},resolve:po};const mo=fo;var uo={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(e){const{node:t}=e,n="shell",o=t.definition,a=typeof o[n];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/shell",o.args="string"===a?{...o.args,cmd:o[n]}:o[n],delete o[n],await mo.init(e)}};const go=fo;var ho={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(e){const{node:t}=e,n="config",o=t.definition,a=typeof o[n];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/config",o.args="string"===a?{...o.args,name:o[n]}:o[n],delete o[n],await go.init(e)}};const wo=fo;var yo={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(e){const{node:t}=e,n="yaml",o=t.definition,a=typeof o[n];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/yaml",o.args="string"===a?{...o.args,file:o[n]}:o[n],delete o[n],await wo.init(e)}};async function vo({node:e}){e.context.next=e.childs[0]}var bo={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const n=e.definition.steps||[];for await(const o of n){const n=Object.keys(o)[0],a={name:n,childs:[],parent:e,definition:o[n],index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=vo},resolve:vo};const xo=m;async function ko({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||xo(e.definition);const a=e.context.transform;a.props&&(a.props=await o(a.props));const i=e.workflow.parent;e.context.lib=i.context.libs.find((e=>e.name===a.form)),await t({node:e}),n({node:e})}var _o={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form";for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],a=Object.keys(o)[0],i={name:a,childs:[],parent:e,definition:o[a],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=ko},resolve:ko};const jo=m;async function Do({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:a}){e.context.transform=e.context.transform||jo(e.definition),await t({node:e})}var Po={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Do},resolve:Do};const So=m;async function Ao({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||So(e.definition);const a=e.context.transform;a.next=await o(a.next),await t({node:e}),n({node:e})}var To={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Ao},resolve:Ao};const Eo=fo;var $o={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,n="prompt",o=t.definition,a=typeof o[n];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/prompt",o.args="string"===a?{...o.args,message:o[n]}:o[n],delete o[n],await Eo.init(e)}};const Oo=fo;var Io={hits:async function({node:e}){return e.definition.hasOwnProperty("html-script")},init:async function(e){const{node:t}=e,n="html-script",o=t.definition,a=typeof o[n];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${n} usage`);o.call="npm:@flownet/lib-load-browser-script-url",o.args="string"===a?{...o.args,src:o[n]}:o[n],delete o[n],await Oo.init(e)}};const Co=fo;var No={hits:async function({node:e}){return e.definition.hasOwnProperty("html-link")},init:async function(e){const{node:t}=e,n="html-link",o=t.definition,a=typeof o[n];if("string"!==a&&"object"!==a)throw new Error(`Unsupported ${n} usage`);o.call="npm:@flownet/lib-load-browser-link-url",o.args="string"===a?{...o.args,src:o[n]}:o[n],delete o[n],await Co.init(e)}};const Ro=p,Mo=d,Fo=i,qo=s,Uo=f,Lo=m,Bo=u,Jo=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:zo}=w,Wo=class{init({config:e,accessToken:t}){return new Promise(((n,o)=>{if(W.set_api_url(e.data.url),t)return W.set_req_token(t),void n(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),n(e.data.access_token)})).catch((e=>{W.set_req_token(),o(e)}))}))}},Ko=async e=>{const{atom:t,context:n,packageDevDependencies:o}=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=pe.resolve(n.project.projectDir),s=je({dir:pe.resolve(i,"./app")});if(s.file){let e=await de({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 de({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=je({dir:pe.resolve(i,"./cli")});if(r.file){let e=await de({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 de({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=je({dir:pe.resolve(i,"./src")});if(e.file){let t=await de({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.src_uses_jsx=n,a.src_has_entry=!0,t=await de({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.src_entry_uses_jsx=n,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:!1!==a.cjs,copy:!1},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:!1!==a.esm,copy:!0},iife:{format:"iife",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==a.iife,terser:!0,copy:!1}};!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",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===a.electron&&(p.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,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,copy:!1,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,copy:!1,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,copy:!1,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"}),!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 d={server:".",startPath:`${pe.normalize(a.app.dir||".")}`,files:[pe.normalize("./dist/**/*")],cors:!0,open:!1};a.babel_options=ce({targets:{browsers:"last 9 versions, not dead",node:"18"}},a.babel_options||a.babel?.options),a.browsersync_options=ce(d,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=ce({},a.replace_options||a.replace?.options||{}),a.css_options=ce({},a.css_options||a.css?.options||{}),Reflect.has(a.browsersync_options,"proxy")&&delete a.browsersync_options.server,a.rollup=a.rollup||{},a.rollup_output=ce(p,a.rollup_output||a.rollup?.output||{}),a.preact_enabled=!0===a.preact||a.preact&&!1!==a.preact?.enabled;let f=Object.keys(p);for(const e of f){const t=p[e];t&&(!1!==a.rollup[e]?(t.babel_options=t.babel_options||a.babel_options,t.browsersync_options=ce(a.browsersync_options,t.browsersync_options),t.replace_options=ce(a.replace_options,t.replace_options),t.css_options=ce(a.css_options,t.css_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])}f=Object.keys(a.rollup_output),a.babel_enabled=f.some((e=>!0===a.rollup_output[e].babel)),a.browser_enabled=f.some((e=>!0===a.rollup_output[e].babel)),a.browsersync_enabled=!1!==a.browsersync&&f.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.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,_e(e),ke(e),xe(e),be(e),ye(e),ve(e),we(e),he(e),ge(e),ue(e),fe(e),me(e)},Go=async({atom:e,packageDependencies:t,packageDevDependencies:n})=>{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 n="^18.2";n=`^${(await De({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:n}),t.push({package:"react-dom",version:n}),"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"}),n.push({package:"@babel/core",version:"^7"}),n.push({package:"@rollup/plugin-commonjs",version:"^26"}),n.push({package:"@rollup/plugin-node-resolve",version:"^15"}),n.push({package:"@rollup/plugin-replace",version:"^5"}),n.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&n.push({package:"rollup-plugin-dts",version:"^6"}),n.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),n.push({package:"@rollup/plugin-alias",version:"^5"}),n.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(n.push({package:"@rollup/plugin-babel",version:"^6"}),n.push({package:"@babel/preset-env",version:"^7"}),n.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":n.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":n.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":n.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":n.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":n.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),n.push({package:"@fnet/rollup-plugin-delete",version:"0.1.3"}),e.doc.features.browsersync_enabled&&n.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.4"}),e.doc.features.css_enabled){n.push({package:"rollup-plugin-postcss",version:"^4"}),n.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":n.push({package:"postcss-import",version:"^15"});break;case"postcss-url":n.push({package:"postcss-url",version:"^10"});break;case"postcss-preset-env":n.push({package:"postcss-preset-env",version:"^9"});break;case"autoprefixer":n.push({package:"autoprefixer",version:"^10"});break;case"cssnano":n.push({package:"cssnano",version:"^6"})}}))}},Ho=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating app folder"});const a={atom:e,packageDependencies:o,ts:Date.now()},i=n.templateDir,s=Se.resolve(n.projectDir,"src/app");Pe.existsSync(s)||Pe.mkdirSync(s,{recursive:!0});let r=["index.js.njk"];!1!==e.doc.features.app.html&&r.push("index.html.njk"),await Ae({pattern:r,dir:Se.resolve(i,"src/app"),outDir:s,context:a})},Vo=async({atom:e,context:t,packageDependencies:n,packageDevDependencies:o,setInProgress:a})=>{await a({message:"Creating package.json."});n.filter((e=>!0===e.dev)).forEach((e=>{o.find((t=>t.package===e.package))||o.push(e);const t=n.findIndex((t=>t.package===e.package));n.splice(t,1)}));const i=n.find((e=>"react"===e.package)),s=n.find((e=>"react-dom"===e.package));i&&!s?n.push({package:"react-dom",version:i.version}):i&&s&&(s.version=i.version),i&&e.doc.features.react_version>=17&&(n.find((e=>"@emotion/react"===e.package))||n.push({package:"@emotion/react",version:"^11"}),n.find((e=>"@emotion/styled"===e.package))||n.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push({file:$e.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&r.push({file:$e.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(!Ee.existsSync(a))throw new Error(`App file not found: ${a}`);const i=await Oe({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(n.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const a=(await Ie({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?o:n).push({package:e.package,subpath:e.subpath,version:`^${a}`,type:"npm"})}}const c={atom:e,packageDependencies:n,packageDevDependencies:o},l=t.templateCommonDir,p=Te.compile(Ee.readFileSync($e.resolve(l,"package.json.njk"),"utf8"),Te.configure(l)).render(c),d=t.projectDir,f=$e.resolve(d,"package.json");Ee.writeFileSync(f,p,"utf8")},Xo=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const a={atom:e,packageDependencies:o},i=n.templateDir,s=Ne.resolve(n.projectDir,"src/cli");Ce.existsSync(s)||Ce.mkdirSync(s,{recursive:!0}),await Re({pattern:["index.js.njk"],dir:Ne.resolve(i,"src/cli"),outDir:s,context:a})},Yo=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating rollup file."});const a={atom:e,packageDependencies:o},i=Fe.resolve(n.projectDir,"src","default/index.js");if(!Me.existsSync(i))throw new Error(`Entry file not found: ${i}`);const s=(await Ue({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 n=s[e];t.alias.entries[n]=`node:${n}`,t.alias.entries[`node:${n}`]=n}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(s)}}const l=n.templateCommonDir;let p=qe.compile(Me.readFileSync(Fe.resolve(l,"rollup.config.mjs.njk"),"utf8"),qe.configure(l)).render(a);const d=n.projectDir;let f=Fe.resolve(d,"rollup.config.mjs");Me.writeFileSync(f,p,"utf8")},Zo=async({atom:e,setInProgress:t,context:n,njEnv:o})=>{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 ze({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,n={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")&&(n.default=t.default),(Reflect.has(t,"describe")||Reflect.has(t,"description"))&&(n.describe=t.describe||t.description),Reflect.has(t,"choices")&&(n.choices=t.choices),a.fargs=n,a.ftag=o}const c={options:a,imports:s,atom:e},l=n.templateDir,p=Je.compile(Le.readFileSync(Be.resolve(l,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=n.projectDir,f=Be.resolve(d,"src/default/to.args.js");Le.writeFileSync(f,p,"utf8")},Qo=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const a={atom:e,packageDependencies:o},i=n.templateCommonDir,s=Ge.compile(We.readFileSync(Ke.resolve(i,".gitignore.njk"),"utf8"),Ge.configure(i)).render(a),r=n.projectDir,c=Ke.resolve(r,".gitignore");We.writeFileSync(c,s,"utf8")},ea=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const a={atom:e,packageDependencies:o},i=n.templateCommonDir,s=Xe.compile(He.readFileSync(Ve.resolve(i,"tsconfig.json.njk"),"utf8"),Xe.configure(i)).render(a),r=n.projectDir,c=Ve.resolve(r,"tsconfig.json");He.writeFileSync(c,s,"utf8")},ta=async({atom:e,context:t,setInProgress:n,Atom:o})=>{const a="readme.md",i=`Creating ${a}`;if(await n({message:i}),t.project?.readme){const e=t.projectDir,n={content:t.project.readme.doc.content},o=Qe.resolve(t.project.projectDir,"fnet/how-to.md");if(Ze.existsSync(o)){const e=Ze.readFileSync(o,"utf8");n.howto=e}const i=Qe.resolve(t.project.projectDir,"fnet/input.yaml");if(Ze.existsSync(i)){const e=await et({file:i,tags:t.tags});n.input=e.content}const s=t.templateCommonDir,r=Ye.compile(Ze.readFileSync(Qe.resolve(s,`${a}.njk`),"utf8"),Ye.configure(s)).render(n),c=Qe.resolve(e,`${a}`);Ze.writeFileSync(c,r,"utf8")}else if(e.id){const n=await o.first({type:"wiki",parent_id:e.id});if(!n||"markdown"!==n.doc?.["content-type"])return;const{content:i,...s}=n.doc,r={content:i},c=t.templateCommonDir,l=Ye.compile(Ze.readFileSync(Qe.resolve(c,`${a}.njk`),"utf8"),Ye.configure(c)).render(r),p=t.projectDir,d=Qe.resolve(p,`${a}`);Ze.writeFileSync(d,l,"utf8")}},na=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Prettifiying source files."});let o=nt.join("src","**","*");if(0!==tt.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n}).code)throw new Error("Couldnt format files.")},oa=async({atom:e,setInProgress:t,context:n})=>{if(!e.doc.features.dts_enabled)return;const o=n.projectDir;await t({message:"Creating .d.ts"});if(0!==ot.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},aa=async({setInProgress:e,atom:t,context:n})=>{const o=n.projectDir;await e({message:"Installing npm packages."});if(0!==at.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},ia=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Building main project."});if(0!==it.exec("npm run build",{cwd:n}).code)throw new Error("Couldnt build project.")},sa=async e=>{const{atom:t,packageDependencies:n,context:o,deploymentProjectTarget:a,setInProgress:i,deploymentProject:s,yamlTarget:r}=e;if(!0===a.enabled)if("lib"===a.name)await Sn({...e});else if("red"===a.name)await Pn({...e});else if("npm"===a.name)await Dn({...e});else if("gcs"===a.name)await jn({...e});else if("gitlab"===a.name)await _n({...e});else if("fnet-package"===a.name)await Cn({...e});else if("fnet-form"===a.name)await Nn({...e});else if("fnet-node"===a.name)await Mn({...e});else if("fnet-flow"===a.name)await Rn({...e});else{let e;if("nextjs"===a.name?e=On:"webos"===a.name?e=$n:"electron"===a.name?e=En:"docker"===a.name?e=In:"ios"===a.name?e=An:"macos"===a.name?e=Tn:"rust"===a.name&&(e=Fn),!e)return;await e({atom:t,target:a,onProgress:i,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),s.isDirty=!0}},{Atom:ra}=y,ca=M,la=_,pa=F,da=t,fa=k,ma=q,ua=r,ga=U,ha=zn,wa=Gn,ya=Xn,va=to,ba=Ln,xa=no,ka=io,_a=co,ja=fo,Da=uo,Pa=ho,Sa=yo,Aa=bo,Ta=_o,Ea=Po,$a=To,Oa=$o,Ia=Io,Ca=No,Na=({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 n=e.parent;for(;n.parent;){const o=n.childs.find((e=>e.name===t.next));if(o){e.context.next=o;break}n=n.parent}}else{let t=e.parent,n=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(void 0!==t.blockAutoJumpToParent||void 0!==t.blockAutoJumpToSibling){if(t.blockAutoJumpToParent){const o=t.childs.find((e=>e.index===n));o&&(e.context.next=o);break}t.blockAutoJumpToParent||(n=t.index+1,t=t.parent)}else{const o=t.childs.find((e=>e.index===n));if(o){e.context.next=o;break}n=t.index+1,t=t.parent}}};var Ra=class{#e;#t;#n;#o;#a;#i;#s;#r;#c;#l;#p;#d;#f;#m;#u;#g;#h;#w;#y;#v;#b;constructor(e){this.#e=new Wo,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:ra,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#b={initNode:this.initNode.bind(this),cloneDeep:Lo,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Na,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,n){this._redis_client&&await this._redis_client.SETEX(e,n||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await Jo(),this.#p=this.#t.buildId||zo(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 da({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 Ko(this.#v),await Go(this.#v),await this.transformWorkflow({workflow:this.#o});const e=await this.initNodeTree({workflow:this.#o});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.#n=this.#t.project?.workflowAtom||await ra.get({id:e}),this.#o="string"==typeof this.#n.doc.content?(await ua({content:this.#n.doc.content})).parsed:this.#n.doc.content;let t=this.#n.doc.bundleName;t=t||(this.#n.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#n.doc.bundleName=t,this.#n.type=this.#n.type||"workflow",this.#v.atom=this.#n}async initDependencies(){this.#i.push({package:"get-value",version:"^3.0"}),this.#i.push({package:"set-value",version:"^4.1"}),this.#n.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),Ro.statSync(e).isDirectory()?(Ro.readdirSync(e).forEach((t=>{const n=Mo.join(e,t);this.#x(n)})),Ro.rmSync(e)):Ro.unlinkSync(e)}#k(e,t){const n=Ro.existsSync(e),o=n&&Ro.statSync(e);n&&o.isDirectory()?(Ro.mkdirSync(t,{recursive:!0}),Ro.readdirSync(e).forEach((n=>{this.#k(Mo.join(e,n),Mo.join(t,n))}))):Ro.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,n=["node_modules"];if(Ro.existsSync(e)){const t=Ro.readdirSync(e);for(const o of t)if(!n.includes(o)){const t=Mo.join(e,o);Ro.rmSync(t,{recursive:!0})}}Ro.existsSync(e)||Ro.mkdirSync(e,{recursive:!0});const o=Mo.join(e,"src");Ro.existsSync(o)||Ro.mkdirSync(o,{recursive:!0});const a=Mo.join(o,"core");this.#k(t,a);const i=Mo.join(o,"default","blocks");Ro.existsSync(i)||Ro.mkdirSync(i,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#a=Uo.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,n]=Object.entries(e)[0];if(n.hasOwnProperty("onerror")){const{onerror:o,...a}=n;e[t]={try:a,except:o}}if(e[t].hasOwnProperty("steps")){const n=e[t].steps;if(!Array.isArray(n))throw new Error("Steps must be an array.");e[t].steps=n.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),n={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#n}};t.forEach((t=>{const o={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:n,definition:e[t],index:n.childs.length,depth:n.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};n.childs.push(o)}));for await(const e of n.childs)await this.initNode({node:e});return n}async initNode({node:e}){const t={...this.#b,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await wa.hits(t))await wa.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 ha.hits(t))await ha.init(t);else if(await xa.hits(t))await xa.init(t);else if(await ya.hits(t))await ya.init(t);else if(await ka.hits(t))await ka.init(t);else if(await _a.hits(t))await _a.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 Pa.hits(t))await Pa.init(t);else if(await Sa.hits(t))await Sa.init(t);else if(await Ia.hits(t))await Ia.init(t);else if(await Ca.hits(t))await Ca.init(t);else if(await Ta.hits(t))await Ta.init(t);else if(await Ea.hits(t))await Ea.init(t);else if(await Oa.hits(t))await Oa.init(t);else if(await Aa.hits(t))await Aa.init(t);else{if(!await $a.hits(t))throw new Error("Undefined step type.");await $a.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const n of e.childs)await this.initNodeIndex({node:n,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const n=Mo.join(e.parent.indexKey,e.name);e.indexKey=n,t[n]=e;const o=[];let a=e;for(;a?.parent;)o.push(a.index),a=a.parent;o.reverse(),e.codeKey=`B_${o.join("_")}_${e.type}`,e.pathKey=`${o.join(".")}`,e.typeId=zo(24);for await(const n of e.childs)await this.initNodeIndex({node:n,index:t})}async initNodeCalls({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"call"===o.type&&n.push(o)}return e.context.calls=n,n}async initNodeCallLibs({root:e}){const t=[],n=e.context.calls;for await(const e of n){const n=e.definition.call,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},a=t.find((e=>e.name===o.name&&e.type===o.type));a||t.push(o),e.target=a||o}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.call,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"form"===o.type&&n.push(o)}return e.context.forms=n,n}async initNodeFormLibs({root:e}){const t=[],n=e.context.forms;for await(const e of n){const n=e.definition.form,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},a=t.find((e=>e.name===o.name&&e.type===o.type));a||t.push(o),e.target=a||o}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.form,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const n=e.filter((e=>"atom"===e.type));for(let e=0;e<n.length;e++){const o=n[e],a=await this.findAtomLibrary({url:o.name});o.atom=a;const i=a.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));i?.forEach((e=>{const n=t.find((t=>t.package===e.package));n?"string"==typeof e.path?(n.path||[]).some((t=>t===e.path))||(n.path=n.path||[],n.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(n.path||[]).some((t=>t===e))||(n.path=n.path||[],n.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.#f),"ac:"===t.protocol){const n=t.pathname.split("/");if(1===n.length)return await ra.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===n.length){const e=await ra.first({where:{name:n[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await ra.first({where:{name:n[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=Mo.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),n=[],o=await fa({file:e,recursive:!0}),a=!0===this.#n.doc.features.all_parsed_imports?o.all:o.required;for await(const e of a){if("npm"!==e.type)continue;if(n.find((t=>t.package===e.package)))continue;const t=(await la({name:e.package,groupBy:{minor:!0}}))[0][0];n.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:n},protocol:t.protocol}}if("npm:"===t.protocol){const e=(await la({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=Lo(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const n=t.params[e];if("string"==typeof n)t.params[e]={key:n,hasDefault:!1};else{const o=Object.keys(n)[0];t.params[e]={key:o,hasDefault:!0,default:n[o]}}}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.#n.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const n=t[e].atom,o=this.#t.projectDir;if("local:"===n.protocol){const e=Mo.resolve(this.#t.projectSrcDir,`${n.fileName||n.name}.js`),t=Mo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!Ro.existsSync(e)){Ro.mkdirSync(Mo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Ro.writeFileSync(e,t,"utf8")}n.relativePath=t.split(Mo.sep).join("/"),this.#n.typesDir=`./types/${Mo.basename(o)}/src`}else if("npm:"===n.protocol)n.relativePath=n.name;else{const e=`${o}/src/libs/${n.id}.js`,t=n.doc.contents?.find((e=>"esm"===e.format))||n.doc;Ro.writeFileSync(Mo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,n=Uo.compile(Ro.readFileSync(Mo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#a).render({...e,ui:{package:"@flownet/react-app"}}),o=this.#t.projectDir,a=Mo.resolve(o,"src/default/index.js");Ro.writeFileSync(a,n,"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,n=Uo.compile(Ro.readFileSync(Mo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#a).render(e),o=this.#t.projectDir,a=Mo.resolve(o,`src/default/${e.codeKey}.js`);Ro.writeFileSync(a,n,"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 n=this.#t.templateDir;return t=Uo.compile(Ro.readFileSync(Mo.resolve(n,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#a),this.#r[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,n=`${e.codeKey}.js`,o=Mo.resolve(t,`src/default/blocks/${n}`);Ro.writeFileSync(o,e.context.render,"utf8"),e.context.fileName=n,e.context.filePath=o}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(Bo(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++)e[t[n]]=await this.transformValue(e[t[n]])}else if("string"==typeof e){const t=await ma({expression:e});if(t){const{processor:n,statement:o}=t;switch(n){case"v":e=`$::v.${o}::`;break;case"e":e=`$::${o}::`;break;case"m":e=`$::closure.module['${o}']::`;break;case"f":e=`$::closure.form.${o}::`;break;case"for":e=`$::caller.for.${o}::`}}}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:n,...o}=this.#n.doc,a={content:Fo.stringify(o)},i=this.#t.templateDir,s=Uo.compile(Ro.readFileSync(Mo.resolve(i,`${e}.njk`),"utf8"),this.#a).render(a),r=this.#t.projectDir,c=Mo.resolve(r,`${e}`);Ro.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const n={content:Fo.stringify(this.#o)},o=this.#t.templateDir,a=Uo.compile(Ro.readFileSync(Mo.resolve(o,`${e}.njk`),"utf8"),this.#a).render(n),i=this.#t.projectDir,s=Mo.resolve(i,`${e}`);Ro.writeFileSync(s,a,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=qo.exec("prettier --write .",{cwd:Mo.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 n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&await n.save()}}else if(this.#n.id){const e=await ra.list({type:"workflow.deploy",parent_id:this.#n.id});for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&(n=await ra.update(n,{id:n.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:n}=t,o=n.get("targets")||[],a=t.doc.targets||[];for(let e=0;e<a.length;e++){const n=a[e],i=o.items[e];await sa({...this.#v,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:i})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#t.id)return;let o=await ra.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await ra.update(o,{id:o.id})):o=await ra.create({parent_id:this.#m.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:n.version}]}})}async setInProgress({message:e}){console.log(ga.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 pa({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;Ro.writeFileSync(Mo.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 ta(this.#v),await ea(this.#v),await Qo(this.#v),await Zo(this.#v),await Xo(this.#v),await Ho(this.#v),await Yo(this.#v),await Vo(this.#v),await na(this.#v),await oa(this.#v),this.#h&&(await aa(this.#v),await ia(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 pa({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 Ma=p,Fa=d;var qa=function({baseDir:e=__dirname}){let t=e;for(;t!==Fa.parse(t).root;){const e=Fa.join(t,"node_modules");if(Ma.existsSync(e))return e;t=Fa.dirname(t)}return null};const Ua=process.cwd(),{spawn:La}=e;t({name:["redis"],dir:Ua,optional:!0});const Ba=n,Ja=o,za=a,Wa=i,Ka=s,Ga=r,Ha=t,Va=c,Xa=l,Ya=Ra,Za=qa({baseDir:__dirname}),Qa="win32"===process.platform?";":":";process.env.PATH=`${Ba.join(Za,"/.bin")}${Qa}${process.env.PATH}`;let ei=Ja(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=Ba.resolve(Za,"./@fnet/cli-project-flow/dist/template/project"),n=Ba.resolve(Ua,e.name);za.existsSync(n)||za.mkdirSync(n),await Xa({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0});let o=Ka.exec("fnet build",{cwd:n});if(0!==o.code)throw new Error("Failed to build project.");if(Ka.which("git")&&(o=Ka.exec("git init --initial-branch=main",{cwd:n}),0!==o.code))throw new Error("Failed to initialize git.");if(Ka.which("code")&&e.vscode&&(o=Ka.exec(`cd ${n} && 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=Ba.resolve(Za,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd();if(e.name=Ba.basename(n),e.update){if(await Xa({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0}),0!==Ka.exec("fnet build",{cwd:n}).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 ni(e),n=new Ya(t);await n.init(),await n.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 ni({...e,mode:"all"}),n=new Ya(t);await n.init(),await n.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 ni({...e,mode:"file"}),n=new Ya(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function ti(e,{name:t,bin:n,preArgs:o=[]}){return e.command(`${t||n} [commands..]`,`${n} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ni(e),{projectDir:a}=t,i=process.argv.slice(3);La(n,[...o,...i],{cwd:a,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function ni(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:Ba.resolve(Ua,`./.output/${e.id}`),templateDir:Ba.resolve(Za,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Ba.resolve(Za,"./@fnet/cli-project-common/dist/template/default"),coreDir:Ba.resolve(Za,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=Ba.resolve(Ua,"flow.yaml");if(!za.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const{raw:n,parsed:o}=await Ga({file:t,tags:e}),a=Ba.dirname(t),i=o.main||"flow.main.yaml";let s=Ba.resolve(a,i);if(!za.existsSync(s)&&(s=Ba.resolve(a,i+".yaml"),!za.existsSync(s)))throw new Error(`${i} file not found in ${s}.`);const{raw:r,parsed:c}=await Ga({file:s,tags:e}),l={workflowAtom:{doc:{...o,"content-type":"yaml",content:r}},projectDir:a,projectFilePath:t,projectFileContent:n,projectFileParsed:o,projectMainFilePath:s,projectMainFileContent:r,projectMainFileParsed:c};let p=Ba.resolve(a,"fnet/targets.yaml");if(!za.existsSync(p)&&(p=Ba.resolve(a,"flow.devops.yaml"),za.existsSync(p))){const e=Ba.resolve(a,"fnet");za.existsSync(e)||za.mkdirSync(e),za.copyFileSync(p,Ba.resolve(a,"fnet/targets.yaml")),za.unlinkSync(p)}if(za.existsSync(p)){const{raw:t,parsed:n}=await Ga({file:p,tags:e}),o=Wa.parseDocument(t);l.devops={filePath:p,fileContent:t,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{za.writeFileSync(l.devops.filePath,o.toString())}}}const d=Ba.resolve(a,"readme.md");if(za.existsSync(d)){const e=za.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:Ba.resolve(Za,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Ba.resolve(Za,"./@fnet/cli-project-common/dist/template/default"),coreDir:Ba.resolve(Za,"./@fnet/cli-project-flow/dist/template/core"),projectDir:Ba.resolve(t.projectDir,"./.workspace"),projectSrcDir:Ba.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 ni(e),{project:n}=t,{projectDir:o,projectFileParsed:a}=n,i=a.input;if(!i)throw new Error("Config schema not found in project file.");const s=await Va({schema:i,format:"yaml"}),r=Ba.resolve(o,".fnet");za.existsSync(r)||za.mkdirSync(r);const c=Ba.resolve(r,`${e.name}.fnet`);za.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 ni(e),{project:n}=t,{projectDir:o,projectFileParsed:a}=n,i=a.input;if(!i)throw new Error("Config schema not found in project file.");const s=Ba.resolve(o,".fnet"),r=Ba.resolve(s,`${e.name}.fnet`),c=await Va({schema:i,format:"yaml",ref:r});za.existsSync(s)||za.mkdirSync(s),za.writeFileSync(r,c)}catch(e){console.error(e.message),process.exit(1)}}))}(ei),ei=ti(ei,{bin:"npm"}),ei=ti(ei,{bin:"node"}),ei=ti(ei,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),ei=ti(ei,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),ei=ti(ei,{name:"app",bin:"npm",preArgs:["run","app","--"]}),ei=ti(ei,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),ei=ti(ei,{bin:"npx"}),ei=ti(ei,{bin:"cdk"}),ei=ti(ei,{bin:"aws"}),ei=function(e,{name:t,preArgs:n=[]}){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 ni(e),{projectDir:o}=t,a=e.config,i=await Ha({name:a,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),s=i?.data?.env||void 0,r=e.command,c=process.argv.slice(5);La(r,[...n,...c],{cwd:o,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={};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fnet/cli",
3
- "version": "0.58.9",
3
+ "version": "0.58.10",
4
4
  "files": [
5
5
  "dist"
6
6
  ],