@fnet/cli 0.59.2 → 0.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e=require("child_process"),t=require("@fnet/config"),a=require("path"),o=require("yargs/yargs"),s=require("fs"),n=require("yaml"),r=require("shelljs"),i=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),p=require("@flownet/lib-render-templates-dir"),l=require("node:fs"),d=require("node:path"),m=require("nunjucks"),u=require("redis"),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"),D=require("@fnet/shell"),k=require("semver"),x=require("node:os"),S=require("@node-red/util"),A=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=W;const ne=b,re=l,ie=d,ce=v,pe=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})},le=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;G({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]]},features:o,packageDevDependencies:a})},de=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})},me=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})},ue=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Y({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:o,packageDevDependencies:a})},fe=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})},ge=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Q({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:a})},ye=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;V({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:a})},he=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;ee({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:a})},we=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})},be=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;ae({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:o,packageDevDependencies:a})},ve=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})},_e=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,s=o.css&&!1!==o.css.enabled;let n=[];if(s){n.push(["rollup-plugin-postcss","^4"]),n.push(["sass","^1.66"]);(o.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":n.push(["postcss-import","^15"]);break;case"postcss-url":n.push(["postcss-url","^10"]);break;case"postcss-preset-env":n.push(["postcss-preset-env","^9"]);break;case"autoprefixer":n.push(["autoprefixer","^10"]);break;case"cssnano":n.push(["cssnano","^6"])}}))}se({feature:{name:"css",packages:n},features:o,packageDevDependencies:a})};function je({dir:e,name:t="index"}){let a=ie.resolve(e,`./${t}.tsx`);if(re.existsSync(a)||(a=ie.resolve(e,`./${t}.ts`)),re.existsSync(a)||(a=ie.resolve(e,`./${t}.jsx`)),re.existsSync(a)||(a=ie.resolve(e,`./${t}.js`)),!re.existsSync(a))return{};const o=a,s=ie.extname(a);return{file:o,ext:s,ts:".ts"===s||".tsx"===s,name:t}}const De=_;const ke=l,xe=d,Se=p;const Ae=m,Pe=l,Ie=d,Ee=v,Te=_;const $e=l,Oe=d,Ce=p;const Re=l,Me=d,Fe=m,qe=v;const Le=l,Ne=d,Ue=m,Be=j;const ze=l,Je=d,We=m;const Ke=l,Ge=d,He=m;const Xe=m,Ye=l,Ze=d,Qe=i;const Ve=r,et=a;const tt=r;const at=r;const ot=r;const st=D,nt=t;const rt=l,it=d,ct=k,pt=D,lt=t;const dt=l,mt=d,ut=k,ft=r,gt=t;const yt=l,ht=d,wt=x,bt=m,vt=S,_t=t;const jt=s,Dt=a,kt=t;const xt=t,St=A,At=P,Pt=k;const It=t,Et=I,Tt=P,$t=k;const Ot=t,Ct=E,Rt=P,Mt=k;const Ft=t,qt=T,Lt=P,Nt=k;const Ut=t,Bt=$,zt=P,Jt=k;const Wt=t,Kt=O,Gt=P,Ht=k;const Xt=l,Yt=d,Zt=k,Qt=D,Vt=t,ea=h.default;const ta=k,aa=t,oa=h.default;const sa=k,na=t,ra=h.default,ia=s,ca=D,pa=C;const la=k,da=t,ma=h.default,ua=s,fa=D,ga=C;const ya=t,ha=R,wa=P,ba=k;const va=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 nt({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 st({cmd:r}),a.isDirty=!0)},_a=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=it.resolve(r,"package.json"),c=rt.readFileSync(i),p=JSON.parse(c);p.name=o.params.name,p.version=ct.inc(o.params.version,"patch"),delete p.scripts,delete p.devDependencies,rt.writeFileSync(i,JSON.stringify(p,null,"\t"));const{file:l,data:d}=await lt({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='${it.resolve(it.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 pt({cmd:m}),rt.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}))},ja=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=mt.resolve(r,"package.json"),c=dt.readFileSync(i),p=JSON.parse(c);p.name=s.params.name,p.version=ut.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 ."},dt.writeFileSync(i,JSON.stringify(p,null,"\t"));const d=(await gt({name:a.npmConfig||"npm",dir:a.projectDir,tags:a.tags}))?.data;if(dt.writeFileSync(mt.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==ft.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");dt.writeFileSync(i,c),o.isDirty=!0,s.params.version=p.version,n.get("params").set("version",p.version)},Da=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||vt.util.generateId(),label:`${l}/${e.id?e.id:wt.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:vt.util.generateId(),name:e.doc.name,initialize:{content:yt.readFileSync(ht.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:vt.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:vt.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||vt.util.generateId(),label:`${l}/${e.id?e.id:wt.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:vt.util.generateId(),name:e.doc.name,initialize:{content:yt.readFileSync(ht.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:vt.util.generateId(),schedules:t},debug:{id:vt.util.generateId()}}}}else{if("http"!==s.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||vt.util.generateId(),label:`${l}/${e.id?e.id:wt.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:vt.util.generateId(),name:e.doc.name,initialize:{content:yt.readFileSync(ht.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:vt.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:vt.util.generateId()},debug:{id:vt.util.generateId()}}}}let m=bt.compile(yt.readFileSync(ht.resolve(p,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(yt.writeFileSync(ht.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=(await _t({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}},ka=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 kt({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:jt.readFileSync(Dt.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:jt.readFileSync(Dt.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:jt.readFileSync(Dt.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})},xa=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 xt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Pt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=At(t.params);p.dependencies=At(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await St(l)}},Sa=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 It({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=$t.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=Tt(t.params);p.dependencies=Tt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Et(l)}},Aa=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 Ot({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Mt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=Rt(t.params);p.dependencies=Rt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Ct(l)}},Pa=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 Ft({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Nt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=Lt(t.params);p.dependencies=Lt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await qt(l)}},Ia=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 Ut({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Jt.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=zt(t.params);p.dependencies=zt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Bt(l)}},Ea=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 Wt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Ht.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=Gt(t.params);p.dependencies=Gt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Kt(l)}},Ta=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet package."});const n=t.projectDir,r=Yt.resolve(n,"package.json"),i=Xt.readFileSync(r),c=JSON.parse(i);c.name=o.params.name,c.version=Zt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,Xt.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:p,data:l}=await Vt({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 ea({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='${Yt.resolve(Yt.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 Qt({cmd:y}),Xt.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 ea({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.")},$a=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet form."});const n=ta.inc(o.params.version,"patch"),{file:r,data:i}=await aa({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 oa({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 oa({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.")},Oa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet flow."});const n=sa.inc(o.params.version,"patch"),{file:r,data:i}=await na({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 ra({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 ra({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 ca({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new pa;w.append("file",ia.createReadStream(h));const b=await ra.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.")},Ca=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet node."});const n=la.inc(o.params.version,"patch"),{file:r,data:i}=await da({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 ma({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 ma({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 fa({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new ga;w.append("file",ua.createReadStream(h));const b=await ma.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.")},Ra=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 ya({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=ba.inc(t.params.version||"0.1.0","patch");t.params.version=c,r.get("params").set("version",c);const p=wa(t.params);p.dependencies=wa(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await ha(l)}};const Ma=l,Fa=d,qa=n,La=r,Na=m,Ua=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:Ba}=g,za=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)}))}))}},Ja=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=ie.resolve(a.project.projectDir),r=je({dir:ie.resolve(n,"./app")});if(r.file){let e=await ce({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 ce({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=je({dir:ie.resolve(n,"./cli")});if(i.file){let e=await ce({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 ce({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=je({dir:ie.resolve(n,"./src")});if(e.file){let t=await ce({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 ce({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=Reflect.has(s,"app_entry_uses_jsx")?!0===s.app_entry_uses_jsx:!0===s.src_entry_uses_jsx,p=Reflect.has(s,"cli_entry_uses_jsx")?!0===s.cli_entry_uses_jsx:!0===s.src_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:`${ie.normalize(s.app.dir||".")}`,files:[ie.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=ne({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=ne(d,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=ne({},s.replace_options||s.replace?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=ne(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=ne(s.browsersync_options,t.browsersync_options),t.replace_options=ne(s.replace_options,t.replace_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.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,_e(e),ve(e),be(e),we(e),he(e),ge(e),ye(e),fe(e),ue(e),me(e),de(e),pe(e),le(e)},Wa=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 De({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"}))}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"})},Ka=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=xe.resolve(a.projectDir,"src/app");ke.existsSync(r)||ke.mkdirSync(r,{recursive:!0});let i=["index.js.njk"];!1!==e.doc.features.app.html&&i.push("index.html.njk"),await Se({pattern:i,dir:xe.resolve(n,"src/app"),outDir:r,context:s})},Ga=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:Ie.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&i.push({file:Ie.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(!Pe.existsSync(s))throw new Error(`App file not found: ${s}`);const n=await Ee({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 Te({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=Ae.compile(Pe.readFileSync(Ie.resolve(p,"package.json.njk"),"utf8"),Ae.configure(p)).render(c),d=t.projectDir,m=Ie.resolve(d,"package.json");Pe.writeFileSync(m,l,"utf8");const u=Ie.resolve(t.project.projectDir,"fnet");if(Pe.existsSync(u)){const e=Ie.resolve(t.projectDir,"fnet");Pe.existsSync(e)||Pe.mkdirSync(e);const a=Pe.readdirSync(u);for(const t of a){const a=Ie.resolve(u,t);if(!Pe.lstatSync(a).isFile())continue;const o=Ie.resolve(e,t);Pe.copyFileSync(a,o)}}},Ha=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=Oe.resolve(a.projectDir,"src/cli");$e.existsSync(r)||$e.mkdirSync(r,{recursive:!0}),await Ce({pattern:["index.js.njk"],dir:Oe.resolve(n,"src/cli"),outDir:r,context:s})},Xa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},n=Me.resolve(a.projectDir,"src","default/index.js");if(!Re.existsSync(n))throw new Error(`Entry file not found: ${n}`);const r=(await qe({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=Fe.compile(Re.readFileSync(Me.resolve(p,"rollup.config.mjs.njk"),"utf8"),Fe.configure(p)).render(s);const d=a.projectDir;let m=Me.resolve(d,"rollup.config.mjs");Re.writeFileSync(m,l,"utf8")},Ya=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 Be({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=Ue.compile(Le.readFileSync(Ne.resolve(p,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=a.projectDir,m=Ne.resolve(d,"src/default/to.args.js");Le.writeFileSync(m,l,"utf8")},Za=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},n=a.templateCommonDir,r=We.compile(ze.readFileSync(Je.resolve(n,".gitignore.njk"),"utf8"),We.configure(n)).render(s),i=a.projectDir,c=Je.resolve(i,".gitignore");ze.writeFileSync(c,r,"utf8")},Qa=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=He.compile(Ke.readFileSync(Ge.resolve(n,"tsconfig.json.njk"),"utf8"),He.configure(n)).render(s),i=a.projectDir,c=Ge.resolve(i,"tsconfig.json");Ke.writeFileSync(c,r,"utf8")},Va=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=Ze.resolve(t.project.projectDir,"fnet/how-to.md");if(Ye.existsSync(o)){const e=Ye.readFileSync(o,"utf8");a.howto=e}const n=Ze.resolve(t.project.projectDir,"fnet/input.yaml");if(Ye.existsSync(n)){const e=await Qe({file:n,tags:t.tags});a.input=e.content}const r=t.templateCommonDir,i=Xe.compile(Ye.readFileSync(Ze.resolve(r,`${s}.njk`),"utf8"),Xe.configure(r)).render(a),c=Ze.resolve(e,`${s}`);Ye.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=Xe.compile(Ye.readFileSync(Ze.resolve(c,`${s}.njk`),"utf8"),Xe.configure(c)).render(i),l=t.projectDir,d=Ze.resolve(l,`${s}`);Ye.writeFileSync(d,p,"utf8")}},eo=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=et.join("src","**","*");if(0!==Ve.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},to=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!==tt.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},ao=async({setInProgress:e,atom:t,context:a})=>{const o=a.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.")},oo=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==ot.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},so=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 ka({...e});else if("red"===s.name)await Da({...e});else if("npm"===s.name)await ja({...e});else if("gcs"===s.name)await _a({...e});else if("gitlab"===s.name)await va({...e});else if("fnet-package"===s.name)await Ta({...e});else if("fnet-form"===s.name)await $a({...e});else if("fnet-node"===s.name)await Ca({...e});else if("fnet-flow"===s.name)await Oa({...e});else{let e;if("nextjs"===s.name?e=Ia:"webos"===s.name?e=Pa:"electron"===s.name?e=Aa:"docker"===s.name?e=Ea:"ios"===s.name?e=xa:"macos"===s.name?e=Sa:"rust"===s.name&&(e=Ra),!e)return;await e({atom:t,target:s,onProgress:n,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:i}),r.isDirty=!0}},{Atom:no}=y,ro=M,io=t,co=v,po=F,lo=q;var mo=class{#e;#t;#a;#o;#s;#n;#r;#i;#c;#p;#l;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new za,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:no,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 Ua(),this.#c=this.#t.buildId||Ba(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 io({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 Ja(this.#y),await Wa(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 no.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"];Ma.existsSync(e)&&Ma.readdirSync(e).forEach((o=>{a.includes(o)||(t=La.rm("-rf",Fa.join(e,o)))}));let o=e;if(!Ma.existsSync(o)&&(t=La.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=Fa.join(e,"src"),!Ma.existsSync(o)&&(t=La.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=Fa.join(e,"src","default"),!Ma.existsSync()&&(t=La.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Na.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=ro({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 no.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await no.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await no.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=Fa.resolve(this.#t.projectSrcDir,"index.js"),a=await co({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 po({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=Fa.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=Fa.relative(Fa.join(this.#t.projectDir,"src","default"),e);if(!Ma.existsSync(e)){Ma.mkdirSync(Fa.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Ma.writeFileSync(e,t,"utf8")}a.relativePath=t.split(Fa.sep).join("/"),this.#a.typesDir=`./types/${Fa.basename(o)}/src`}else{const e=Fa.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Ma.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=Na.compile(Ma.readFileSync(Fa.resolve(t,Fa.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=Fa.resolve(o,Fa.join("src","default","index.js"));Ma.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:qa.stringify(o)},n=this.#t.templateDir,r=Na.compile(Ma.readFileSync(Fa.resolve(n,`${e}.njk`),"utf8"),this.#o).render(s),i=this.#t.projectDir,c=Fa.resolve(i,`${e}`);Ma.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 no.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 no.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 so({...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 no.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await no.update(o,{id:o.id})):o=await no.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(lo.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 Va(this.#y),await Qa(this.#y),await Za(this.#y),await Ya(this.#y),await Ha(this.#y),await Ka(this.#y),await Xa(this.#y),await Ga(this.#y),await eo(this.#y),await to(this.#y),this.#f&&(await ao(this.#y),await oo(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 uo=l,fo=d;var go=function({baseDir:e=__dirname}){let t=e;for(;t!==fo.parse(t).root;){const e=fo.join(t,"node_modules");if(uo.existsSync(e))return e;t=fo.dirname(t)}return null};const yo=process.cwd(),{spawn:ho}=e;t({name:["redis"],dir:yo,optional:!0});const wo=a,bo=o,vo=s,_o=n,jo=r,Do=i,ko=t,xo=c,So=p,Ao=mo,Po=go({baseDir:__dirname}),Io="win32"===process.platform?";":":";process.env.PATH=`${wo.join(Po,"/.bin")}${Io}${process.env.PATH}`;let Eo=bo(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=wo.resolve(Po,"@fnet/cli-project-node/dist/template/project"),a=wo.resolve(yo,e.name);vo.existsSync(a)||vo.mkdirSync(a),await So({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=jo.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(jo.which("git")&&(o=jo.exec("git init --initial-branch=main",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(jo.which("code")&&e.vscode&&(o=jo.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=wo.resolve(Po,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=wo.basename(a),e.update){if(await So({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==jo.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 $o(e),a=new Ao(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 $o({...e,mode:"all"}),a=new Ao(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 $o({...e,mode:"file"}),a=new Ao(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 To(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 $o(e),{projectDir:s}=t,n=process.argv.slice(3);ho(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 $o(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:wo.resolve(Po,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:wo.resolve(Po,"./@fnet/cli-project-common/dist/template/default"),projectDir:wo.resolve(yo,`./.output/${e.id}`),tags:e.ftag};{const t=await async function({tags:e}){const t=wo.resolve(yo,"node.yaml");if(!vo.existsSync(t))throw new Error("node.yaml file not found in current directory.");const{raw:a,parsed:o}=await Do({file:t,tags:e}),s=wo.dirname(t),n={libraryAtom:{doc:{...o},fileName:"index"},projectDir:s,projectFilePath:t,projectFileContent:a,projectFileParsed:o};let r=wo.resolve(s,"fnet/targets.yaml");if(!vo.existsSync(r)&&(r=wo.resolve(s,"node.devops.yaml"),vo.existsSync(r))){const e=wo.resolve(s,"fnet");vo.existsSync(e)||vo.mkdirSync(e),vo.copyFileSync(r,wo.resolve(s,"fnet/targets.yaml")),vo.unlinkSync(r)}if(vo.existsSync(r)){const{raw:t,parsed:a}=await Do({file:r,tags:e}),o=_o.parseDocument(t);n.devops={filePath:r,fileContent:t,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{vo.writeFileSync(n.devops.filePath,o.toString())}}}const i=wo.resolve(s,"readme.md");if(vo.existsSync(i)){const e=vo.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:wo.resolve(Po,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:wo.resolve(Po,"./@fnet/cli-project-common/dist/template/default"),projectDir:wo.resolve(t.projectDir,"./.workspace"),projectSrcDir:wo.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}Eo=Eo.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 $o(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 xo({schema:n,format:"yaml"}),i=wo.resolve(o,".fnet");vo.existsSync(i)||vo.mkdirSync(i);const c=wo.resolve(i,`${e.name}.fnet`);vo.writeFileSync(c,r)}catch(e){console.error(e.message),process.exit(1)}})),Eo=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 $o(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=wo.resolve(o,".fnet"),i=wo.resolve(r,`${e.name}.fnet`),c=await xo({schema:n,format:"yaml",ref:i});vo.existsSync(r)||vo.mkdirSync(r),vo.writeFileSync(i,c)}catch(e){console.error(e.message),process.exit(1)}}))}(Eo),Eo=To(Eo,{bin:"npm"}),Eo=To(Eo,{bin:"node"}),Eo=To(Eo,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Eo=To(Eo,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Eo=To(Eo,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Eo=To(Eo,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Eo=To(Eo,{bin:"npx"}),Eo=To(Eo,{bin:"cdk"}),Eo=To(Eo,{bin:"aws"}),Eo=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 $o(e),{projectDir:o}=t,s=e.config,n=await ko({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);ho(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)}}))}(Eo,{name:"with"}),Eo.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"),v=require("lodash.merge"),b=require("@flownet/lib-parse-imports-js"),_=require("@flownet/lib-list-npm-versions"),j=require("@fnet/yargs-options-from-schema"),D=require("@fnet/shell"),k=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=v;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=W;const ne=v,re=l,ie=d,ce=b,pe=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})},le=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;G({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]]},features:o,packageDevDependencies:a})},de=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})},me=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})},ue=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Y({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:o,packageDevDependencies:a})},fe=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})},ge=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Q({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:a})},ye=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;V({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:a})},he=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;ee({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:a})},we=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})},ve=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})},_e=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,s=o.css&&!1!==o.css.enabled;let n=[];if(s){n.push(["rollup-plugin-postcss","^4"]),n.push(["sass","^1.66"]);(o.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":n.push(["postcss-import","^15"]);break;case"postcss-url":n.push(["postcss-url","^10"]);break;case"postcss-preset-env":n.push(["postcss-preset-env","^9"]);break;case"autoprefixer":n.push(["autoprefixer","^10"]);break;case"cssnano":n.push(["cssnano","^6"])}}))}se({feature:{name:"css",packages:n},features:o,packageDevDependencies:a})};function je({dir:e,name:t="index"}){let a=ie.resolve(e,`./${t}.tsx`);if(re.existsSync(a)||(a=ie.resolve(e,`./${t}.ts`)),re.existsSync(a)||(a=ie.resolve(e,`./${t}.jsx`)),re.existsSync(a)||(a=ie.resolve(e,`./${t}.js`)),!re.existsSync(a))return{};const o=a,s=ie.extname(a);return{file:o,ext:s,ts:".ts"===s||".tsx"===s,name:t}}const De=_;const ke=l,xe=d,Ae=p;const Se=m,Pe=l,Ie=d,Ee=b,Te=_;const $e=l,Oe=d,Ce=p;const Re=l,Me=d,Fe=m,qe=b;const Le=l,Ne=d,Ue=m,Be=j;const ze=l,Je=d,We=m;const Ke=l,Ge=d,He=m;const Xe=m,Ye=l,Ze=d,Qe=i;const Ve=r,et=a;const tt=r;const at=r;const ot=r;const st=D,nt=t;const rt=l,it=d,ct=k,pt=D,lt=t;const dt=l,mt=d,ut=k,ft=r,gt=t;const yt=l,ht=d,wt=x,vt=m,bt=A,_t=t;const jt=s,Dt=a,kt=t;const xt=t,At=S,St=P,Pt=k;const It=t,Et=I,Tt=P,$t=k;const Ot=t,Ct=E,Rt=P,Mt=k;const Ft=t,qt=T,Lt=P,Nt=k;const Ut=t,Bt=$,zt=P,Jt=k;const Wt=t,Kt=O,Gt=P,Ht=k;const Xt=l,Yt=d,Zt=k,Qt=D,Vt=t,ea=h.default;const ta=k,aa=t,oa=h.default;const sa=k,na=t,ra=h.default,ia=s,ca=D,pa=C;const la=k,da=t,ma=h.default,ua=s,fa=D,ga=C;const ya=t,ha=R,wa=P,va=k;const ba=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 nt({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 st({cmd:r}),a.isDirty=!0)},_a=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=it.resolve(r,"package.json"),c=rt.readFileSync(i),p=JSON.parse(c);p.name=o.params.name,p.version=ct.inc(o.version,"patch"),delete p.scripts,delete p.devDependencies,rt.writeFileSync(i,JSON.stringify(p,null,"\t"));const{file:l,data:d}=await lt({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='${it.resolve(it.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 pt({cmd:m}),rt.writeFileSync(i,c),!0!==o.dryRun&&(a.isDirty=!0,o.version=p.version,n.set("version",p.version),await s({target:o,packageJSON:p}))},ja=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=mt.resolve(r,"package.json"),c=dt.readFileSync(i),p=JSON.parse(c);p.name=s.params.name,p.version=ut.inc(s.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 ."},dt.writeFileSync(i,JSON.stringify(p,null,"\t"));const d=(await gt({name:a.npmConfig||"npm",dir:a.projectDir,tags:a.tags}))?.data;if(dt.writeFileSync(mt.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==ft.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");dt.writeFileSync(i,c),o.isDirty=!0,s.version=p.version,n.set("version",p.version)},Da=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||bt.util.generateId(),label:`${l}/${e.id?e.id:wt.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:bt.util.generateId(),name:e.doc.name,initialize:{content:yt.readFileSync(ht.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:bt.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:bt.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||bt.util.generateId(),label:`${l}/${e.id?e.id:wt.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:bt.util.generateId(),name:e.doc.name,initialize:{content:yt.readFileSync(ht.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:bt.util.generateId(),schedules:t},debug:{id:bt.util.generateId()}}}}else{if("http"!==s.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||bt.util.generateId(),label:`${l}/${e.id?e.id:wt.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:bt.util.generateId(),name:e.doc.name,initialize:{content:yt.readFileSync(ht.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:bt.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:bt.util.generateId()},debug:{id:bt.util.generateId()}}}}let m=vt.compile(yt.readFileSync(ht.resolve(p,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(yt.writeFileSync(ht.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=(await _t({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}},ka=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 kt({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:jt.readFileSync(Dt.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:jt.readFileSync(Dt.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:jt.readFileSync(Dt.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})},xa=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 xt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Pt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=St(t.params);p.dependencies=St(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await At(l)}},Aa=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 It({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=$t.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Tt(t.params);p.dependencies=Tt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Et(l)}},Sa=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 Ot({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Mt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Rt(t.params);p.dependencies=Rt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Ct(l)}},Pa=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 Ft({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Nt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Lt(t.params);p.dependencies=Lt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await qt(l)}},Ia=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 Ut({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Jt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=zt(t.params);p.dependencies=zt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Bt(l)}},Ea=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 Wt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Ht.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Gt(t.params);p.dependencies=Gt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Kt(l)}},Ta=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet package."});const n=t.projectDir,r=Yt.resolve(n,"package.json"),i=Xt.readFileSync(r),c=JSON.parse(i);c.name=o.params.name,c.version=Zt.inc(o.version,"patch"),delete c.scripts,delete c.devDependencies,Xt.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:p,data:l}=await Vt({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 ea({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='${Yt.resolve(Yt.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 Qt({cmd:y}),Xt.writeFileSync(r,i),!0===o.dryRun)return;a.isDirty=!0,o.version=c.version,s.set("version",c.version);const h=`${l.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(f=await ea({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.")},$a=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet form."});const{file:n,data:r}=await aa({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 ${n}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${n}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${n}`);const i=`${r.env.ATOM_API_URL}/v1/auth/token`,c=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let l=await oa({method:"POST",url:i,data:{username:c,password:p},headers:{"Content-Type":"application/json"}});const d=l.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${i}`);a.isDirty=!0;const m=ta.inc(o.version,"patch");o.params.version=m,o.version=m,s.set("version",m);const u=`${r.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(l=await oa({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 ${d}`}}),l.data?.error)throw new Error("Error publishing fnet form.")},Oa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet flow."});const{file:n,data:r}=await na({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 ${n}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${n}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${n}`);const i=`${r.env.ATOM_API_URL}/v1/auth/token`,c=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let l=await ra({method:"POST",url:i,data:{username:c,password:p},headers:{"Content-Type":"application/json"}});const d=l.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${i}`);a.isDirty=!0;const m=sa.inc(o.version,"patch");o.params.version=m,o.version=m,s.set("version",m);const u=`${r.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(l=await ra({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 ${d}`}}),l.data?.error)throw new Error("Error publishing fnet flow.");const f=l.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const y=await ca({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new pa;w.append("file",ia.createReadStream(h));const v=await ra.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${f}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(v.data?.error)throw new Error("Error uploading fnet flow.")},Ca=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet node."});const{file:n,data:r}=await da({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 ${n}`);if(!r.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${n}`);if(!r.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${n}`);const i=`${r.env.ATOM_API_URL}/v1/auth/token`,c=r.env.ATOM_API_USERNAME,p=r.env.ATOM_API_PASSWORD;let l=await ma({method:"POST",url:i,data:{username:c,password:p},headers:{"Content-Type":"application/json"}});const d=l.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${i}`);a.isDirty=!0;const m=la.inc(o.version,"patch");o.params.version=m,o.version=m,s.set("version",m);const u=`${r.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(l=await ma({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 ${d}`}}),l.data?.error)throw new Error("Error publishing fnet node.");const f=l.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const y=await fa({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new ga;w.append("file",ua.createReadStream(h));const v=await ma.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${f}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(v.data?.error)throw new Error("Error uploading fnet node.")},Ra=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 ya({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=va.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=wa(t.params);p.dependencies=wa(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await ha(l)}};const Ma=l,Fa=d,qa=n,La=r,Na=m,Ua=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:Ba}=g,za=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)}))}))}},Ja=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=ie.resolve(a.project.projectDir),r=je({dir:ie.resolve(n,"./app")});if(r.file){let e=await ce({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 ce({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=je({dir:ie.resolve(n,"./cli")});if(i.file){let e=await ce({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 ce({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=je({dir:ie.resolve(n,"./src")});if(e.file){let t=await ce({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 ce({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=Reflect.has(s,"app_entry_uses_jsx")?!0===s.app_entry_uses_jsx:!0===s.src_entry_uses_jsx,p=Reflect.has(s,"cli_entry_uses_jsx")?!0===s.cli_entry_uses_jsx:!0===s.src_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:`${ie.normalize(s.app.dir||".")}`,files:[ie.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=ne({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=ne(d,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=ne({},s.replace_options||s.replace?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=ne(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=ne(s.browsersync_options,t.browsersync_options),t.replace_options=ne(s.replace_options,t.replace_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.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,_e(e),be(e),ve(e),we(e),he(e),ge(e),ye(e),fe(e),ue(e),me(e),de(e),pe(e),le(e)},Wa=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 De({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"}))}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"})},Ka=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=xe.resolve(a.projectDir,"src/app");ke.existsSync(r)||ke.mkdirSync(r,{recursive:!0});let i=["index.js.njk"];!1!==e.doc.features.app.html&&i.push("index.html.njk"),await Ae({pattern:i,dir:xe.resolve(n,"src/app"),outDir:r,context:s})},Ga=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:Ie.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&i.push({file:Ie.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(!Pe.existsSync(s))throw new Error(`App file not found: ${s}`);const n=await Ee({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 Te({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=Se.compile(Pe.readFileSync(Ie.resolve(p,"package.json.njk"),"utf8"),Se.configure(p)).render(c),d=t.projectDir,m=Ie.resolve(d,"package.json");Pe.writeFileSync(m,l,"utf8");const u=Ie.resolve(t.project.projectDir,"fnet");if(Pe.existsSync(u)){const e=Ie.resolve(t.projectDir,"fnet");Pe.existsSync(e)||Pe.mkdirSync(e);const a=Pe.readdirSync(u);for(const t of a){const a=Ie.resolve(u,t);if(!Pe.lstatSync(a).isFile())continue;const o=Ie.resolve(e,t);Pe.copyFileSync(a,o)}}},Ha=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=Oe.resolve(a.projectDir,"src/cli");$e.existsSync(r)||$e.mkdirSync(r,{recursive:!0}),await Ce({pattern:["index.js.njk"],dir:Oe.resolve(n,"src/cli"),outDir:r,context:s})},Xa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},n=Me.resolve(a.projectDir,"src","default/index.js");if(!Re.existsSync(n))throw new Error(`Entry file not found: ${n}`);const r=(await qe({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=Fe.compile(Re.readFileSync(Me.resolve(p,"rollup.config.mjs.njk"),"utf8"),Fe.configure(p)).render(s);const d=a.projectDir;let m=Me.resolve(d,"rollup.config.mjs");Re.writeFileSync(m,l,"utf8")},Ya=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 Be({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=Ue.compile(Le.readFileSync(Ne.resolve(p,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=a.projectDir,m=Ne.resolve(d,"src/default/to.args.js");Le.writeFileSync(m,l,"utf8")},Za=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},n=a.templateCommonDir,r=We.compile(ze.readFileSync(Je.resolve(n,".gitignore.njk"),"utf8"),We.configure(n)).render(s),i=a.projectDir,c=Je.resolve(i,".gitignore");ze.writeFileSync(c,r,"utf8")},Qa=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=He.compile(Ke.readFileSync(Ge.resolve(n,"tsconfig.json.njk"),"utf8"),He.configure(n)).render(s),i=a.projectDir,c=Ge.resolve(i,"tsconfig.json");Ke.writeFileSync(c,r,"utf8")},Va=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=Ze.resolve(t.project.projectDir,"fnet/how-to.md");if(Ye.existsSync(o)){const e=Ye.readFileSync(o,"utf8");a.howto=e}const n=Ze.resolve(t.project.projectDir,"fnet/input.yaml");if(Ye.existsSync(n)){const e=await Qe({file:n,tags:t.tags});a.input=e.content}const r=t.templateCommonDir,i=Xe.compile(Ye.readFileSync(Ze.resolve(r,`${s}.njk`),"utf8"),Xe.configure(r)).render(a),c=Ze.resolve(e,`${s}`);Ye.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=Xe.compile(Ye.readFileSync(Ze.resolve(c,`${s}.njk`),"utf8"),Xe.configure(c)).render(i),l=t.projectDir,d=Ze.resolve(l,`${s}`);Ye.writeFileSync(d,p,"utf8")}},eo=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=et.join("src","**","*");if(0!==Ve.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},to=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!==tt.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},ao=async({setInProgress:e,atom:t,context:a})=>{const o=a.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.")},oo=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==ot.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},so=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.type)await ka({...e});else if("red"===s.type)await Da({...e});else if("npm"===s.type)await ja({...e});else if("gcs"===s.type)await _a({...e});else if("gitlab"===s.type)await ba({...e});else if("fnet-package"===s.type)await Ta({...e});else if("fnet-form"===s.type)await $a({...e});else if("fnet-node"===s.type)await Ca({...e});else if("fnet-flow"===s.type)await Oa({...e});else{let e;if("nextjs"===s.type?e=Ia:"webos"===s.type?e=Pa:"electron"===s.type?e=Sa:"docker"===s.type?e=Ea:"ios"===s.type?e=xa:"macos"===s.type?e=Aa:"rust"===s.type&&(e=Ra),!e)return;await e({atom:t,target:s,onProgress:n,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:i}),r.isDirty=!0}},{Atom:no}=y,ro=M,io=t,co=b,po=F,lo=q;var mo=class{#e;#t;#a;#o;#s;#n;#r;#i;#c;#p;#l;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new za,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:no,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 Ua(),this.#c=this.#t.buildId||Ba(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 io({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 Ja(this.#y),await Wa(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 no.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"];Ma.existsSync(e)&&Ma.readdirSync(e).forEach((o=>{a.includes(o)||(t=La.rm("-rf",Fa.join(e,o)))}));let o=e;if(!Ma.existsSync(o)&&(t=La.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=Fa.join(e,"src"),!Ma.existsSync(o)&&(t=La.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=Fa.join(e,"src","default"),!Ma.existsSync()&&(t=La.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Na.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=ro({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 no.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await no.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await no.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=Fa.resolve(this.#t.projectSrcDir,"index.js"),a=await co({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 po({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=Fa.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=Fa.relative(Fa.join(this.#t.projectDir,"src","default"),e);if(!Ma.existsSync(e)){Ma.mkdirSync(Fa.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Ma.writeFileSync(e,t,"utf8")}a.relativePath=t.split(Fa.sep).join("/"),this.#a.typesDir=`./types/${Fa.basename(o)}/src`}else{const e=Fa.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Ma.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=Na.compile(Ma.readFileSync(Fa.resolve(t,Fa.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=Fa.resolve(o,Fa.join("src","default","index.js"));Ma.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:qa.stringify(o)},n=this.#t.templateDir,r=Na.compile(Ma.readFileSync(Fa.resolve(n,`${e}.njk`),"utf8"),this.#o).render(s),i=this.#t.projectDir,c=Fa.resolve(i,`${e}`);Ma.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 no.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 no.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:a}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const o=Object.keys(t.doc||{}),s=a||{};for(let e=0;e<o.length;e++){const a=t.doc[o[e]];a.name=o[e];const n=s.get(o[e]);await so({...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 no.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await no.update(o,{id:o.id})):o=await no.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(lo.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 Va(this.#y),await Qa(this.#y),await Za(this.#y),await Ya(this.#y),await Ha(this.#y),await Ka(this.#y),await Xa(this.#y),await Ga(this.#y),await eo(this.#y),await to(this.#y),this.#f&&(await ao(this.#y),await oo(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 uo=l,fo=d;var go=function({baseDir:e=__dirname}){let t=e;for(;t!==fo.parse(t).root;){const e=fo.join(t,"node_modules");if(uo.existsSync(e))return e;t=fo.dirname(t)}return null};const yo=process.cwd(),{spawn:ho}=e;t({name:["redis"],dir:yo,optional:!0});const wo=a,vo=o,bo=s,_o=n,jo=r,Do=i,ko=t,xo=c,Ao=p,So=mo,Po=go({baseDir:__dirname}),Io="win32"===process.platform?";":":";process.env.PATH=`${wo.join(Po,"/.bin")}${Io}${process.env.PATH}`;let Eo=vo(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=wo.resolve(Po,"@fnet/cli-project-node/dist/template/project"),a=wo.resolve(yo,e.name);bo.existsSync(a)||bo.mkdirSync(a),await Ao({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=jo.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(jo.which("git")&&(o=jo.exec("git init --initial-branch=main",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(jo.which("code")&&e.vscode&&(o=jo.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=wo.resolve(Po,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=wo.basename(a),e.update){if(await Ao({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==jo.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 $o(e),a=new So(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 $o({...e,mode:"all"}),a=new So(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 $o({...e,mode:"file"}),a=new So(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 To(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 $o(e),{projectDir:s}=t,n=process.argv.slice(3);ho(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 $o(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:wo.resolve(Po,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:wo.resolve(Po,"./@fnet/cli-project-common/dist/template/default"),projectDir:wo.resolve(yo,`./.output/${e.id}`),tags:e.ftag};{const t=await async function({tags:e}){const t=wo.resolve(yo,"node.yaml");if(!bo.existsSync(t))throw new Error("node.yaml file not found in current directory.");const{raw:a,parsed:o}=await Do({file:t,tags:e}),s=wo.dirname(t),n={libraryAtom:{doc:{...o},fileName:"index"},projectDir:s,projectFilePath:t,projectFileContent:a,projectFileParsed:o};let r=wo.resolve(s,"fnet/targets.yaml");if(!bo.existsSync(r)&&(r=wo.resolve(s,"node.devops.yaml"),bo.existsSync(r))){const e=wo.resolve(s,"fnet");bo.existsSync(e)||bo.mkdirSync(e),bo.copyFileSync(r,wo.resolve(s,"fnet/targets.yaml")),bo.unlinkSync(r)}if(bo.existsSync(r)){const{raw:t,parsed:a}=await Do({file:r,tags:e}),o=_o.parseDocument(t);n.devops={filePath:r,fileContent:t,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{bo.writeFileSync(n.devops.filePath,o.toString())}}}const i=wo.resolve(s,"readme.md");if(bo.existsSync(i)){const e=bo.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:wo.resolve(Po,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:wo.resolve(Po,"./@fnet/cli-project-common/dist/template/default"),projectDir:wo.resolve(t.projectDir,"./.workspace"),projectSrcDir:wo.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}Eo=Eo.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 $o(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 xo({schema:n,format:"yaml"}),i=wo.resolve(o,".fnet");bo.existsSync(i)||bo.mkdirSync(i);const c=wo.resolve(i,`${e.name}.fnet`);bo.writeFileSync(c,r)}catch(e){console.error(e.message),process.exit(1)}})),Eo=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 $o(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=wo.resolve(o,".fnet"),i=wo.resolve(r,`${e.name}.fnet`),c=await xo({schema:n,format:"yaml",ref:i});bo.existsSync(r)||bo.mkdirSync(r),bo.writeFileSync(i,c)}catch(e){console.error(e.message),process.exit(1)}}))}(Eo),Eo=To(Eo,{bin:"npm"}),Eo=To(Eo,{bin:"node"}),Eo=To(Eo,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Eo=To(Eo,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Eo=To(Eo,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Eo=To(Eo,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Eo=To(Eo,{bin:"npx"}),Eo=To(Eo,{bin:"cdk"}),Eo=To(Eo,{bin:"aws"}),Eo=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 $o(e),{projectDir:o}=t,s=e.config,n=await ko({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);ho(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)}}))}(Eo,{name:"with"}),Eo.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"),y=require("nanoid"),w=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}=w,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=V;const le=x,pe=p,de=d,fe=k,me=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})},ue=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;Y({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]]},features:o,packageDevDependencies:n})},ge=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})},he=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})},ye=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})},ve=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ne({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:n})},be=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;oe({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:n})},xe=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ae({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:n})},ke=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})},_e=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;se({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:o,packageDevDependencies:n})},je=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})},De=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features,a=o.css&&!1!==o.css.enabled;let i=[];if(a){i.push(["rollup-plugin-postcss","^4"]),i.push(["sass","^1.66"]);(o.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":i.push(["postcss-import","^15"]);break;case"postcss-url":i.push(["postcss-url","^10"]);break;case"postcss-preset-env":i.push(["postcss-preset-env","^9"]);break;case"autoprefixer":i.push(["autoprefixer","^10"]);break;case"cssnano":i.push(["cssnano","^6"])}}))}ce({feature:{name:"css",packages:i},features:o,packageDevDependencies:n})};function Pe({dir:e,name:t="index"}){let n=de.resolve(e,`./${t}.tsx`);if(pe.existsSync(n)||(n=de.resolve(e,`./${t}.ts`)),pe.existsSync(n)||(n=de.resolve(e,`./${t}.jsx`)),pe.existsSync(n)||(n=de.resolve(e,`./${t}.js`)),!pe.existsSync(n))return{};const o=n,a=de.extname(n);return{file:o,ext:a,ts:".ts"===a||".tsx"===a,name:t}}const Se=_;const Ae=p,Te=d,Ee=l;const $e=f,Oe=p,Ie=d,Ce=k,Ne=_;const Re=p,Me=d,Fe=l;const qe=p,Ue=d,Le=f,Be=k;const Je=p,ze=d,We=f,Ke=j;const Ge=p,He=d,Ve=f;const Xe=p,Ye=d,Ze=f;const Qe=f,et=p,tt=d,nt=r;const ot=s,at=n;const it=s;const st=s;const rt=s;const ct=D,lt=t;const pt=p,dt=d,ft=P,mt=D,ut=t;const gt=p,ht=d,yt=P,wt=s,vt=t;const bt=p,xt=d,kt=S,_t=f,jt=A,Dt=t;const Pt=a,St=n,At=t;const Tt=t,Et=T,$t=m,Ot=P;const It=t,Ct=E,Nt=m,Rt=P;const Mt=t,Ft=$,qt=m,Ut=P;const Lt=t,Bt=O,Jt=m,zt=P;const Wt=t,Kt=I,Gt=m,Ht=P;const Vt=t,Xt=C,Yt=m,Zt=P;const Qt=p,en=d,tn=P,nn=D,on=t,an=v.default;const sn=P,rn=t,cn=v.default;const ln=P,pn=t,dn=v.default,fn=a,mn=D,un=N;const gn=P,hn=t,yn=v.default,wn=a,vn=D,bn=N;const xn=t,kn=R,_n=m,jn=P;const Dn=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 lt({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 ct({cmd:s}),n.isDirty=!0)},Pn=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=dt.resolve(s,"package.json"),c=pt.readFileSync(r),l=JSON.parse(c);l.name=o.params.name,l.version=ft.inc(o.params.version,"patch"),delete l.scripts,delete l.devDependencies,pt.writeFileSync(r,JSON.stringify(l,null,"\t"));const{file:p,data:d}=await ut({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='${dt.resolve(dt.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 mt({cmd:f}),pt.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}))},Sn=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=ht.resolve(s,"package.json"),c=gt.readFileSync(r),l=JSON.parse(c);l.name=a.params.name,l.version=yt.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 ."},gt.writeFileSync(r,JSON.stringify(l,null,"\t"));const d=(await vt({name:n.npmConfig||"npm",dir:n.projectDir,tags:n.tags}))?.data;if(gt.writeFileSync(ht.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===a.dryRun)return;if(0!==wt.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");gt.writeFileSync(r,c),o.isDirty=!0,a.params.version=l.version,i.get("params").set("version",l.version)},An=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||jt.util.generateId(),label:`${p}/${e.id?e.id:kt.hostname()}/${e.name}/${a.deploy.name||a.deploy.template}`},function:{id:jt.util.generateId(),name:e.doc.name,initialize:{content:bt.readFileSync(xt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:jt.util.generateId(),...a.params?.inject,payload:"json"===a.params?.inject?.payloadType?`'${JSON.stringify(a.params?.inject?.payload)}'`:a.params?.inject?.payload},debug:{id:jt.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||jt.util.generateId(),label:`${p}/${e.id?e.id:kt.hostname()}/${a.deploy.name||a.deploy.template}`},function:{id:jt.util.generateId(),name:e.doc.name,initialize:{content:bt.readFileSync(xt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:jt.util.generateId(),schedules:t},debug:{id:jt.util.generateId()}}}}else{if("http"!==a.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:a.deploy.id||jt.util.generateId(),label:`${p}/${e.id?e.id:kt.hostname()}/${a.deploy.name||a.deploy.template}`},function:{id:jt.util.generateId(),name:e.doc.name,initialize:{content:bt.readFileSync(xt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:jt.util.generateId(),method:a.params.method||"get",url:a.params.url},httpout:{id:jt.util.generateId()},debug:{id:jt.util.generateId()}}}}let f=_t.compile(bt.readFileSync(xt.resolve(l,`deploy/node-red/${a.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(bt.writeFileSync(xt.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===a.dryRun)return;o.isDirty=!0;const m=(await Dt({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}},Tn=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 At({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:Pt.readFileSync(St.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Pt.readFileSync(St.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Pt.readFileSync(St.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})},En=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 Tt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Ot.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=$t(t.params);l.dependencies=$t(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Et(p)}},$n=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 It({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Rt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=Nt(t.params);l.dependencies=Nt(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ct(p)}},On=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 Mt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Ut.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=qt(t.params);l.dependencies=qt(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ft(p)}},In=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 Lt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=zt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=Jt(t.params);l.dependencies=Jt(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Bt(p)}},Cn=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 Wt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Ht.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=Gt(t.params);l.dependencies=Gt(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Kt(p)}},Nn=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 Vt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=Zt.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=Yt(t.params);l.dependencies=Yt(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Xt(p)}},Rn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:a})=>{await e({message:"Deploying it as fnet package."});const i=t.projectDir,s=en.resolve(i,"package.json"),r=Qt.readFileSync(s),c=JSON.parse(r);c.name=o.params.name,c.version=tn.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,Qt.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await on({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 an({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='${en.resolve(en.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 nn({cmd:h}),Qt.writeFileSync(s,r),!0===o.dryRun)return;n.isDirty=!0,o.params.version=c.version,a.get("params").set("version",c.version);const y=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(u=await an({method:"POST",url:y,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.")},Mn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:a})=>{await e({message:"Deploying it as fnet form."});const i=sn.inc(o.params.version,"patch"),{file:s,data:r}=await rn({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 cn({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 cn({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.")},Fn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:a})=>{await e({message:"Deploying it as fnet flow."});const i=ln.inc(o.params.version,"patch"),{file:s,data:r}=await pn({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 dn({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 dn({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 mn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const y=JSON.parse(h.stdout).path;let w=new un;w.append("file",fn.createReadStream(y));const v=await dn.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...w.getHeaders(),Authorization:`Bearer ${f}`},data:w});if(v.data?.error)throw new Error("Error uploading fnet flow.")},qn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:a})=>{await e({message:"Deploying it as fnet node."});const i=gn.inc(o.params.version,"patch"),{file:s,data:r}=await hn({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 yn({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 yn({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 vn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const y=JSON.parse(h.stdout).path;let w=new bn;w.append("file",wn.createReadStream(y));const v=await yn.request({method:"POST",maxBodyLength:1/0,url:`${r.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...w.getHeaders(),Authorization:`Bearer ${f}`},data:w});if(v.data?.error)throw new Error("Error uploading fnet node.")},Un=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 xn({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:i.tags}):void 0,c=jn.inc(t.params.version||"0.1.0","patch");t.params.version=c,s.get("params").set("version",c);const l=_n(t.params);l.dependencies=_n(a);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await kn(p)}};const Ln=m;async function Bn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Ln(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||Ln(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await o(t.definition.condition));await t({node:e}),n({node:e})}var Jn={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=Bn},resolve:Bn};const zn=q,Wn=Jn;var Kn={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>zn({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=>zn({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 Wn.init(e)}};const Gn=m;async function Hn({node:e,resolveTypeCommon:t,resolveNextBlock:n}){if(e.context.transform=e.context.transform||Gn(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||Gn(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),n({node:e})}var Vn={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=Hn},resolve:Hn};const Xn=m;async function Yn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=Xn(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 Zn={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=Yn},resolve:Yn};const Qn=m,eo=L,to=B;async function no({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Qn(e.definition);e.context.transform.for.in=await o(e.definition.for.in),await t({node:e}),n({node:e})}var oo={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]=[eo(e.definition.for,t),to(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=no},resolve:no};var ao={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 io=m;async function so({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||io(e.definition);const o=e.context.transform;o.raise=await n(o.raise),await t({node:e})}var ro={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=so},resolve:so};const co=m;async function lo({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||co(e.definition);const o=e.context.transform;o.return=await n(o.return),await t({node:e})}var po={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=lo},resolve:lo};const fo=m;async function mo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||fo(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 uo={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=mo},resolve:mo};const go=uo;var ho={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 go.init(e)}};const yo=uo;var wo={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 yo.init(e)}};const vo=uo;var bo={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 vo.init(e)}};async function xo({node:e}){e.context.next=e.childs[0]}var ko={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=xo},resolve:xo};const _o=m;async function jo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||_o(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 Do={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=jo},resolve:jo};const Po=m;async function So({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:a}){e.context.transform=e.context.transform||Po(e.definition),await t({node:e})}var Ao={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=So},resolve:So};const To=m;async function Eo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||To(e.definition);const a=e.context.transform;a.next=await o(a.next),await t({node:e}),n({node:e})}var $o={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Eo},resolve:Eo};const Oo=uo;var Io={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 Oo.init(e)}};const Co=uo;var No={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 Co.init(e)}};const Ro=uo;var Mo={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 Ro.init(e)}};const Fo=p,qo=d,Uo=i,Lo=s,Bo=f,Jo=m,zo=u,Wo=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:Ko}=y,Go=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)}))}))}},Ho=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=de.resolve(n.project.projectDir),s=Pe({dir:de.resolve(i,"./app")});if(s.file){let e=await fe({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 fe({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=Pe({dir:de.resolve(i,"./cli")});if(r.file){let e=await fe({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 fe({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=Pe({dir:de.resolve(i,"./src")});if(e.file){let t=await fe({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 fe({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=Reflect.has(a,"app_entry_uses_jsx")?!0===a.app_entry_uses_jsx:!0===a.src_entry_uses_jsx,l=Reflect.has(a,"cli_entry_uses_jsx")?!0===a.cli_entry_uses_jsx:!0===a.src_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:`${de.normalize(a.app.dir||".")}`,files:[de.normalize("./dist/**/*")],cors:!0,open:!1};a.babel_options=le({targets:{browsers:"last 9 versions, not dead",node:"18"}},a.babel_options||a.babel?.options),a.browsersync_options=le(d,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=le({},a.replace_options||a.replace?.options||{}),Reflect.has(a.browsersync_options,"proxy")&&delete a.browsersync_options.server,a.rollup=a.rollup||{},a.rollup_output=le(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=le(a.browsersync_options,t.browsersync_options),t.replace_options=le(a.replace_options,t.replace_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.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,De(e),je(e),_e(e),ke(e),xe(e),ve(e),be(e),we(e),ye(e),he(e),ge(e),me(e),ue(e)},Vo=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 Se({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"}))}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"})},Xo=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=Te.resolve(n.projectDir,"src/app");Ae.existsSync(s)||Ae.mkdirSync(s,{recursive:!0});let r=["index.js.njk"];!1!==e.doc.features.app.html&&r.push("index.html.njk"),await Ee({pattern:r,dir:Te.resolve(i,"src/app"),outDir:s,context:a})},Yo=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:Ie.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&r.push({file:Ie.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(!Oe.existsSync(a))throw new Error(`App file not found: ${a}`);const i=await Ce({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 Ne({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=$e.compile(Oe.readFileSync(Ie.resolve(l,"package.json.njk"),"utf8"),$e.configure(l)).render(c),d=t.projectDir,f=Ie.resolve(d,"package.json");Oe.writeFileSync(f,p,"utf8");const m=Ie.resolve(t.project.projectDir,"fnet");if(Oe.existsSync(m)){const e=Ie.resolve(t.projectDir,"fnet");Oe.existsSync(e)||Oe.mkdirSync(e);const n=Oe.readdirSync(m);for(const t of n){const n=Ie.resolve(m,t);if(!Oe.lstatSync(n).isFile())continue;const o=Ie.resolve(e,t);Oe.copyFileSync(n,o)}}},Zo=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=Me.resolve(n.projectDir,"src/cli");Re.existsSync(s)||Re.mkdirSync(s,{recursive:!0}),await Fe({pattern:["index.js.njk"],dir:Me.resolve(i,"src/cli"),outDir:s,context:a})},Qo=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating rollup file."});const a={atom:e,packageDependencies:o},i=Ue.resolve(n.projectDir,"src","default/index.js");if(!qe.existsSync(i))throw new Error(`Entry file not found: ${i}`);const s=(await Be({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=Le.compile(qe.readFileSync(Ue.resolve(l,"rollup.config.mjs.njk"),"utf8"),Le.configure(l)).render(a);const d=n.projectDir;let f=Ue.resolve(d,"rollup.config.mjs");qe.writeFileSync(f,p,"utf8")},ea=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 Ke({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=We.compile(Je.readFileSync(ze.resolve(l,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=n.projectDir,f=ze.resolve(d,"src/default/to.args.js");Je.writeFileSync(f,p,"utf8")},ta=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const a={atom:e,packageDependencies:o},i=n.templateCommonDir,s=Ve.compile(Ge.readFileSync(He.resolve(i,".gitignore.njk"),"utf8"),Ve.configure(i)).render(a),r=n.projectDir,c=He.resolve(r,".gitignore");Ge.writeFileSync(c,s,"utf8")},na=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=Ze.compile(Xe.readFileSync(Ye.resolve(i,"tsconfig.json.njk"),"utf8"),Ze.configure(i)).render(a),r=n.projectDir,c=Ye.resolve(r,"tsconfig.json");Xe.writeFileSync(c,s,"utf8")},oa=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=tt.resolve(t.project.projectDir,"fnet/how-to.md");if(et.existsSync(o)){const e=et.readFileSync(o,"utf8");n.howto=e}const i=tt.resolve(t.project.projectDir,"fnet/input.yaml");if(et.existsSync(i)){const e=await nt({file:i,tags:t.tags});n.input=e.content}const s=t.templateCommonDir,r=Qe.compile(et.readFileSync(tt.resolve(s,`${a}.njk`),"utf8"),Qe.configure(s)).render(n),c=tt.resolve(e,`${a}`);et.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=Qe.compile(et.readFileSync(tt.resolve(c,`${a}.njk`),"utf8"),Qe.configure(c)).render(r),p=t.projectDir,d=tt.resolve(p,`${a}`);et.writeFileSync(d,l,"utf8")}},aa=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Prettifiying source files."});let o=at.join("src","**","*");if(0!==ot.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n}).code)throw new Error("Couldnt format files.")},ia=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!==it.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},sa=async({setInProgress:e,atom:t,context:n})=>{const o=n.projectDir;await e({message:"Installing npm packages."});if(0!==st.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},ra=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Building main project."});if(0!==rt.exec("npm run build",{cwd:n}).code)throw new Error("Couldnt build project.")},ca=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 Tn({...e});else if("red"===a.name)await An({...e});else if("npm"===a.name)await Sn({...e});else if("gcs"===a.name)await Pn({...e});else if("gitlab"===a.name)await Dn({...e});else if("fnet-package"===a.name)await Rn({...e});else if("fnet-form"===a.name)await Mn({...e});else if("fnet-node"===a.name)await qn({...e});else if("fnet-flow"===a.name)await Fn({...e});else{let e;if("nextjs"===a.name?e=Cn:"webos"===a.name?e=In:"electron"===a.name?e=On:"docker"===a.name?e=Nn:"ios"===a.name?e=En:"macos"===a.name?e=$n:"rust"===a.name&&(e=Un),!e)return;await e({atom:t,target:a,onProgress:i,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),s.isDirty=!0}},{Atom:la}=w,pa=M,da=_,fa=F,ma=t,ua=k,ga=q,ha=r,ya=U,wa=Kn,va=Vn,ba=Zn,xa=oo,ka=Jn,_a=ao,ja=ro,Da=po,Pa=uo,Sa=ho,Aa=wo,Ta=bo,Ea=ko,$a=Do,Oa=Ao,Ia=$o,Ca=Io,Na=No,Ra=Mo,Ma=({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 Fa=class{#e;#t;#n;#o;#a;#i;#s;#r;#c;#l;#p;#d;#f;#m;#u;#g;#h;#y;#w;#v;#b;constructor(e){this.#e=new Go,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:la,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#b={initNode:this.initNode.bind(this),cloneDeep:Jo,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Ma,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 Wo(),this.#p=this.#t.buildId||Ko(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.#y=["all","deploy"].includes(this.#u),this.#w=["all","deploy","build","file","bpmn"].includes(this.#u),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#m=(await ma({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 Ho(this.#v),await Vo(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 la.get({id:e}),this.#o="string"==typeof this.#n.doc.content?(await ha({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),Fo.statSync(e).isDirectory()?(Fo.readdirSync(e).forEach((t=>{const n=qo.join(e,t);this.#x(n)})),Fo.rmSync(e)):Fo.unlinkSync(e)}#k(e,t){const n=Fo.existsSync(e),o=n&&Fo.statSync(e);n&&o.isDirectory()?(Fo.mkdirSync(t,{recursive:!0}),Fo.readdirSync(e).forEach((n=>{this.#k(qo.join(e,n),qo.join(t,n))}))):Fo.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,n=["node_modules"];if(Fo.existsSync(e)){const t=Fo.readdirSync(e);for(const o of t)if(!n.includes(o)){const t=qo.join(e,o);Fo.rmSync(t,{recursive:!0})}}Fo.existsSync(e)||Fo.mkdirSync(e,{recursive:!0});const o=qo.join(e,"src");Fo.existsSync(o)||Fo.mkdirSync(o,{recursive:!0});const a=qo.join(o,"core");this.#k(t,a);const i=qo.join(o,"default","blocks");Fo.existsSync(i)||Fo.mkdirSync(i,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#a=Bo.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 va.hits(t))await va.init(t);else if(await xa.hits(t))await xa.init(t);else if(await ka.hits(t))await ka.init(t);else if(await wa.hits(t))await wa.init(t);else if(await _a.hits(t))await _a.init(t);else if(await ba.hits(t))await ba.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 Aa.hits(t))await Aa.init(t);else if(await Ta.hits(t))await Ta.init(t);else if(await Na.hits(t))await Na.init(t);else if(await Ra.hits(t))await Ra.init(t);else if(await $a.hits(t))await $a.init(t);else if(await Oa.hits(t))await Oa.init(t);else if(await Ca.hits(t))await Ca.init(t);else if(await Ea.hits(t))await Ea.init(t);else{if(!await Ia.hits(t))throw new Error("Undefined step type.");await Ia.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=qo.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=Ko(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",definition:e.definition},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,libRef:o});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,libRef:t}){const n=pa({url:e});if(!n)throw new Error(`Invalid package name: ${e}`);if(n.protocol||(n.protocol=this.#f),"ac:"===n.protocol){const t=n.pathname.split("/");if(1===t.length)return await la.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await la.first({where:{name:t[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await la.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===n.protocol){const e=qo.resolve(this.#t.projectSrcDir,`${n.pathname}.js`),t=[],o=await ua({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(t.find((t=>t.package===e.package)))continue;const n=(await da({name:e.package,groupBy:{minor:!0}}))[0][0];t.push({package:e.package,subpath:e.subpath,version:`^${n}`,type:"npm"})}return{name:n.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:t},protocol:n.protocol}}if("npm:"===n.protocol){const e=(await da({name:n.pathname,groupBy:{minor:!0}}))[0][0];return{name:n.pathname,doc:{type:"workflow.lib",subtype:"flow"===t?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:n.pathname,version:`^${e}`,type:"npm"}]},protocol:n.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=Jo(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=qo.resolve(this.#t.projectSrcDir,`${n.fileName||n.name}.js`),t=qo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!Fo.existsSync(e)){Fo.mkdirSync(qo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Fo.writeFileSync(e,t,"utf8")}n.relativePath=t.split(qo.sep).join("/"),this.#n.typesDir=`./types/${qo.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;Fo.writeFileSync(qo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,n=Bo.compile(Fo.readFileSync(qo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#a).render({...e,ui:{package:"@flownet/react-app"}}),o=this.#t.projectDir,a=qo.resolve(o,"src/default/index.js");Fo.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=Bo.compile(Fo.readFileSync(qo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#a).render(e),o=this.#t.projectDir,a=qo.resolve(o,`src/default/${e.codeKey}.js`);Fo.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=Bo.compile(Fo.readFileSync(qo.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=qo.resolve(t,`src/default/blocks/${n}`);Fo.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(zo(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 ga({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:Uo.stringify(o)},i=this.#t.templateDir,s=Bo.compile(Fo.readFileSync(qo.resolve(i,`${e}.njk`),"utf8"),this.#a).render(a),r=this.#t.projectDir,c=qo.resolve(r,`${e}`);Fo.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const n={content:Uo.stringify(this.#o)},o=this.#t.templateDir,a=Bo.compile(Fo.readFileSync(qo.resolve(o,`${e}.njk`),"utf8"),this.#a).render(n),i=this.#t.projectDir,s=qo.resolve(i,`${e}`);Fo.writeFileSync(s,a,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=Lo.exec("prettier --write .",{cwd:qo.resolve(e,"src")});if(0!==t.code)throw new Error(t.stderr)}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&await n.save()}}else if(this.#n.id){const e=await la.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 la.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 ca({...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 la.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await la.update(o,{id:o.id})):o=await la.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(ya.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#w&&!this.#g)return await this.createNetwork();try{const e=this.#w?await fa({root:this.#l}):void 0;if(this.#g){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#w){const t=this.#t.project?.projectDir||this.#t.projectDir;Fo.writeFileSync(qo.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 oa(this.#v),await na(this.#v),await ta(this.#v),await ea(this.#v),await Zo(this.#v),await Xo(this.#v),await Qo(this.#v),await Yo(this.#v),await aa(this.#v),await ia(this.#v),this.#h&&(await sa(this.#v),await ra(this.#v),this.#y&&await this.deploy())}await this._cache_set(this.#d,{status:"COMPLETED",data:{network:e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await fa({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 qa=p,Ua=d;var La=function({baseDir:e=__dirname}){let t=e;for(;t!==Ua.parse(t).root;){const e=Ua.join(t,"node_modules");if(qa.existsSync(e))return e;t=Ua.dirname(t)}return null};const Ba=process.cwd(),{spawn:Ja}=e;t({name:["redis"],dir:Ba,optional:!0});const za=n,Wa=o,Ka=a,Ga=i,Ha=s,Va=r,Xa=t,Ya=c,Za=l,Qa=Fa,ei=La({baseDir:__dirname}),ti="win32"===process.platform?";":":";process.env.PATH=`${za.join(ei,"/.bin")}${ti}${process.env.PATH}`;let ni=Wa(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=za.resolve(ei,"./@fnet/cli-project-flow/dist/template/project"),n=za.resolve(Ba,e.name);Ka.existsSync(n)||Ka.mkdirSync(n),await Za({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0});let o=Ha.exec("fnet build",{cwd:n});if(0!==o.code)throw new Error("Failed to build project.");if(Ha.which("git")&&(o=Ha.exec("git init --initial-branch=main",{cwd:n}),0!==o.code))throw new Error("Failed to initialize git.");if(Ha.which("code")&&e.vscode&&(o=Ha.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=za.resolve(ei,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd();if(e.name=za.basename(n),e.update){if(await Za({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0}),0!==Ha.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 ai(e),n=new Qa(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 ai({...e,mode:"all"}),n=new Qa(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 ai({...e,mode:"file"}),n=new Qa(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 oi(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 ai(e),{projectDir:a}=t,i=process.argv.slice(3);Ja(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 ai(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:za.resolve(Ba,`./.output/${e.id}`),templateDir:za.resolve(ei,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:za.resolve(ei,"./@fnet/cli-project-common/dist/template/default"),coreDir:za.resolve(ei,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=za.resolve(Ba,"flow.yaml");if(!Ka.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const{raw:n,parsed:o}=await Va({file:t,tags:e}),a=za.dirname(t),i=o.main||"flow.main.yaml";let s=za.resolve(a,i);if(!Ka.existsSync(s)&&(s=za.resolve(a,i+".yaml"),!Ka.existsSync(s)))throw new Error(`${i} file not found in ${s}.`);const{raw:r,parsed:c}=await Va({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=za.resolve(a,"fnet/targets.yaml");if(!Ka.existsSync(p)&&(p=za.resolve(a,"flow.devops.yaml"),Ka.existsSync(p))){const e=za.resolve(a,"fnet");Ka.existsSync(e)||Ka.mkdirSync(e),Ka.copyFileSync(p,za.resolve(a,"fnet/targets.yaml")),Ka.unlinkSync(p)}if(Ka.existsSync(p)){const{raw:t,parsed:n}=await Va({file:p,tags:e}),o=Ga.parseDocument(t);l.devops={filePath:p,fileContent:t,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{Ka.writeFileSync(l.devops.filePath,o.toString())}}}const d=za.resolve(a,"readme.md");if(Ka.existsSync(d)){const e=Ka.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:za.resolve(ei,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:za.resolve(ei,"./@fnet/cli-project-common/dist/template/default"),coreDir:za.resolve(ei,"./@fnet/cli-project-flow/dist/template/core"),projectDir:za.resolve(t.projectDir,"./.workspace"),projectSrcDir:za.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}ni=ni.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 ai(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 Ya({schema:i,format:"yaml"}),r=za.resolve(o,".fnet");Ka.existsSync(r)||Ka.mkdirSync(r);const c=za.resolve(r,`${e.name}.fnet`);Ka.writeFileSync(c,s)}catch(e){console.error(e.message),process.exit(1)}})),ni=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 ai(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=za.resolve(o,".fnet"),r=za.resolve(s,`${e.name}.fnet`),c=await Ya({schema:i,format:"yaml",ref:r});Ka.existsSync(s)||Ka.mkdirSync(s),Ka.writeFileSync(r,c)}catch(e){console.error(e.message),process.exit(1)}}))}(ni),ni=oi(ni,{bin:"npm"}),ni=oi(ni,{bin:"node"}),ni=oi(ni,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),ni=oi(ni,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),ni=oi(ni,{name:"app",bin:"npm",preArgs:["run","app","--"]}),ni=oi(ni,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),ni=oi(ni,{bin:"npx"}),ni=oi(ni,{bin:"cdk"}),ni=oi(ni,{bin:"aws"}),ni=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 ai(e),{projectDir:o}=t,a=e.config,i=await Xa({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);Ja(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)}}))}(ni,{name:"with"}),ni.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"),i=require("fs"),a=require("yaml"),s=require("shelljs"),r=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),f=require("nunjucks"),m=require("lodash.clonedeep"),u=require("isobject"),g=require("redis"),h=require("@flownet/lib-is-redis-online"),y=require("nanoid"),w=require("@flownet/lib-atom-api-js"),v=require("axios"),b=require("qs"),x=require("lodash.merge"),k=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),_=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}=w,K=v.default,G=b;const H=x;var V=({feature:e,features:t,packageDevDependencies:n})=>{const{name:o,packages:i,options:a,extraCheck:s}=e,r=`${o}_enabled`,c=t.rollup_output||{},l=Object.keys(c);let p=a||{};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&&i.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 ie=V;const ae=V;const se=V;const re=V;const ce=V;const le=x,pe=p,de=d,fe=k,me=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})},ue=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;Y({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]]},features:o,packageDevDependencies:n})},ge=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})},he=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})},ye=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})},ve=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ne({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:n})},be=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;oe({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:n})},xe=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ie({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:n})},ke=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ae({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:o,packageDevDependencies:n})},je=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,i={};!0===o.app?.enabled&&(i.targets=i.targets||[],i.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:i},features:o,packageDevDependencies:n})},De=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features,i=o.css&&!1!==o.css.enabled;let a=[];if(i){a.push(["rollup-plugin-postcss","^4"]),a.push(["sass","^1.66"]);(o.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":a.push(["postcss-import","^15"]);break;case"postcss-url":a.push(["postcss-url","^10"]);break;case"postcss-preset-env":a.push(["postcss-preset-env","^9"]);break;case"autoprefixer":a.push(["autoprefixer","^10"]);break;case"cssnano":a.push(["cssnano","^6"])}}))}ce({feature:{name:"css",packages:a},features:o,packageDevDependencies:n})};function Pe({dir:e,name:t="index"}){let n=de.resolve(e,`./${t}.tsx`);if(pe.existsSync(n)||(n=de.resolve(e,`./${t}.ts`)),pe.existsSync(n)||(n=de.resolve(e,`./${t}.jsx`)),pe.existsSync(n)||(n=de.resolve(e,`./${t}.js`)),!pe.existsSync(n))return{};const o=n,i=de.extname(n);return{file:o,ext:i,ts:".ts"===i||".tsx"===i,name:t}}const Se=j;const Ae=p,Te=d,Ee=l;const $e=f,Oe=p,Ie=d,Ce=k,Ne=j;const Re=p,Me=d,Fe=l;const qe=p,Ue=d,Le=f,Be=k;const Je=p,ze=d,We=f,Ke=_;const Ge=p,He=d,Ve=f;const Xe=p,Ye=d,Ze=f;const Qe=f,et=p,tt=d,nt=r;const ot=s,it=n;const at=s;const st=s;const rt=s;const ct=D,lt=t;const pt=p,dt=d,ft=P,mt=D,ut=t;const gt=p,ht=d,yt=P,wt=s,vt=t;const bt=p,xt=d,kt=S,jt=f,_t=A,Dt=t;const Pt=i,St=n,At=t;const Tt=t,Et=T,$t=m,Ot=P;const It=t,Ct=E,Nt=m,Rt=P;const Mt=t,Ft=$,qt=m,Ut=P;const Lt=t,Bt=O,Jt=m,zt=P;const Wt=t,Kt=I,Gt=m,Ht=P;const Vt=t,Xt=C,Yt=m,Zt=P;const Qt=p,en=d,tn=P,nn=D,on=t,an=v.default;const sn=P,rn=t,cn=v.default;const ln=P,pn=t,dn=v.default,fn=i,mn=D,un=N;const gn=P,hn=t,yn=v.default,wn=i,vn=D,bn=N;const xn=t,kn=R,jn=m,_n=P;const Dn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const a=t.projectDir;let s="fnet-to-gitlab";const r=o.params.config||"gitlab",c=await lt({name:r,dir:t.projectDir,tags:t.tags});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;s+=` --projectGroupId=${l.projectGroupId}`,s+=` --projectPath='${a}'`,s+=` --projectName='${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 ct({cmd:s}),n.isDirty=!0)},Pn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,registerToPackageManager:i,yamlTarget:a})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,r=dt.resolve(s,"package.json"),c=pt.readFileSync(r),l=JSON.parse(c);l.name=o.params.name,l.version=ft.inc(o.version,"patch"),delete l.scripts,delete l.devDependencies,pt.writeFileSync(r,JSON.stringify(l,null,"\t"));const{file:p,data:d}=await ut({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='${dt.resolve(dt.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 mt({cmd:f}),pt.writeFileSync(r,c),!0!==o.dryRun&&(n.isDirty=!0,o.version=l.version,a.set("version",l.version),await i({target:o,packageJSON:l}))},Sn=async({atom:e,setInProgress:t,context:n,deploymentProject:o,deploymentProjectTarget:i,yamlTarget:a})=>{await t({message:"Deploying it as npm package."});const s=n.projectDir,r=ht.resolve(s,"package.json"),c=gt.readFileSync(r),l=JSON.parse(c);l.name=i.params.name,l.version=yt.inc(i.version,"patch");const p=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&p&&"string"==typeof p&&(l.bin={[p]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete l.scripts,delete l.devDependencies,l.scripts={serve:"npx serve ."},gt.writeFileSync(r,JSON.stringify(l,null,"\t"));const d=(await vt({name:n.npmConfig||"npm",dir:n.projectDir,tags:n.tags}))?.data;if(gt.writeFileSync(ht.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${d.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==wt.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");gt.writeFileSync(r,c),o.isDirty=!0,i.version=l.version,a.set("version",l.version)},An=async({atom:e,setInProgress:t,context:n,deploymentProject:o,deploymentProjectTarget:i,buildId:a,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"===i.deploy.template)d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||_t.util.generateId(),label:`${p}/${e.id?e.id:kt.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:_t.util.generateId(),name:e.doc.name,initialize:{content:bt.readFileSync(xt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:_t.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:_t.util.generateId()}}};else if("cronjob"===i.deploy.template){let t=i.params?.schedules?cloneDeep(i.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||_t.util.generateId(),label:`${p}/${e.id?e.id:kt.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:_t.util.generateId(),name:e.doc.name,initialize:{content:bt.readFileSync(xt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:_t.util.generateId(),schedules:t},debug:{id:_t.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||_t.util.generateId(),label:`${p}/${e.id?e.id:kt.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:_t.util.generateId(),name:e.doc.name,initialize:{content:bt.readFileSync(xt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:_t.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:_t.util.generateId()},debug:{id:_t.util.generateId()}}}}let f=jt.compile(bt.readFileSync(xt.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(bt.writeFileSync(xt.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;o.isDirty=!0;const m=(await Dt({name:n.redConfig||"red",dir:n.projectDir,tags:n.tags}))?.data,u=i.deploy.url||m.env.RED_URL,g={};if(!1!==i.deploy.auth&&(g.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:g}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:f,headers:g});else{const e=await axios({method:"POST",url:`${u}/flow`,data:f,headers:g});i.deploy.id=e.data.id}},Tn=async({atom:e,Atom:t,setInProgress:n,context:o,packageDependencies:i,deploymentProject:a,deploymentProjectTarget:s})=>{await n({message:"Deploying it as workflow lib."});const r=(await At({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(a.isDirty=!0,s.deploy.id){if(c=await t.get({id:s.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;s.deploy.id=c.id}const f=o.projectDir;c.doc.contents=[{content:Pt.readFileSync(St.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Pt.readFileSync(St.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Pt.readFileSync(St.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=i,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},En=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as ios-app package."});const r=t?.config?await Tt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Ot.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=$t(t.params);l.dependencies=$t(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Et(p)}},$n=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as macos-app package."});const r=t?.config?await It({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Rt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Nt(t.params);l.dependencies=Nt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ct(p)}},On=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as electron package."});const r=t?.config?await Mt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Ut.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=qt(t.params);l.dependencies=qt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ft(p)}},In=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as webos package."});const r=t?.config?await Lt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=zt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Jt(t.params);l.dependencies=Jt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Bt(p)}},Cn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as nextjs package."});const r=t?.config?await Wt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Ht.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Gt(t.params);l.dependencies=Gt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Kt(p)}},Nn=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as docker package."});const r=t?.config?await Vt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Zt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Yt(t.params);l.dependencies=Yt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Xt(p)}},Rn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet package."});const a=t.projectDir,s=en.resolve(a,"package.json"),r=Qt.readFileSync(s),c=JSON.parse(r);c.name=o.params.name,c.version=tn.inc(o.version,"patch"),delete c.scripts,delete c.devDependencies,Qt.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await on({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 an({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='${en.resolve(en.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,h+=` --dir='${a}'`,h+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",h+=` --destDir='${c.name}/${c.version}'`,h+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(h+=` --domain='${p.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(h+=" --dryRun"),await nn({cmd:h}),Qt.writeFileSync(s,r),!0===o.dryRun)return;n.isDirty=!0,o.version=c.version,i.set("version",c.version);const y=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(u=await an({method:"POST",url:y,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.")},Mn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet form."});const{file:a,data:s}=await rn({name:o.config||"fnet-form",dir:t.projectDir,tags:t.tags});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const r=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await cn({method:"POST",url:r,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${r}`);n.isDirty=!0;const f=sn.inc(o.version,"patch");o.params.version=f,o.version=f,i.set("version",f);const m=`${s.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await cn({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet form.")},Fn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet flow."});const{file:a,data:s}=await pn({name:o.config||"fnet-flow",dir:t.project.projectDir,tags:t.tags});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const r=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await dn({method:"POST",url:r,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${r}`);n.isDirty=!0;const f=ln.inc(o.version,"patch");o.params.version=f,o.version=f,i.set("version",f);const m=`${s.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await dn({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet flow.");const u=p.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const h=await mn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const y=JSON.parse(h.stdout).path;let w=new un;w.append("file",fn.createReadStream(y));const v=await dn.request({method:"POST",maxBodyLength:1/0,url:`${s.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(v.data?.error)throw new Error("Error uploading fnet flow.")},qn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet node."});const{file:a,data:s}=await hn({name:o.config||"fnet-node",dir:t.project.projectDir,tags:t.tags});if(!s.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!s.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!s.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const r=`${s.env.ATOM_API_URL}/v1/auth/token`,c=s.env.ATOM_API_USERNAME,l=s.env.ATOM_API_PASSWORD;let p=await yn({method:"POST",url:r,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${r}`);n.isDirty=!0;const f=gn.inc(o.version,"patch");o.params.version=f,o.version=f,i.set("version",f);const m=`${s.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await yn({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet node.");const u=p.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const h=await vn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const y=JSON.parse(h.stdout).path;let w=new bn;w.append("file",wn.createReadStream(y));const v=await yn.request({method:"POST",maxBodyLength:1/0,url:`${s.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(v.data?.error)throw new Error("Error uploading fnet node.")},Un=async({atom:e,target:t,onProgress:n,projectDir:o,dependencies:i,context:a,yamlTarget:s})=>{n&&await n({message:"Deploying it as Rust package."});const r=t?.config?await xn({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=_n.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=jn(t.params);l.dependencies=jn(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await kn(p)}};const Ln=m;async function Bn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Ln(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||Ln(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await o(t.definition.condition));await t({node:e}),n({node:e})}var Jn={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],i=`${n}`;o.hasOwnProperty("default")&&(i="default",o=o.default);const a={name:o.condition||i,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=Bn},resolve:Bn};const zn=q,Wn=Jn;var Kn={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>zn({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=>zn({expression:e})))),i=[],a=o.find((e=>"if"===e?.processor)),s=t.definition[a.expression];i.push({name:`${t.name}_if`,definition:s,processor:a}),delete t.definition[a.expression];const r=o.filter((e=>"elseif"===e?.processor));let c=0;for(const e of r){const n=t.definition[e.expression];i.push({name:`${t.name}_elseif_${c++}`,definition:n,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of i)t.definition.switch.push({condition:e.processor.statement,...e.definition});await Wn.init(e)}};const Gn=m;async function Hn({node:e,resolveTypeCommon:t,resolveNextBlock:n}){if(e.context.transform=e.context.transform||Gn(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||Gn(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),n({node:e})}var Vn={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=Hn},resolve:Hn};const Xn=m;async function Yn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=Xn(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],n=Object.keys(t)[0],a=t[n],s={key:await o(n),value:await o(a)};i.assign[e]=s}await t({node:e}),n({node:e})}var Zn={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=Yn},resolve:Yn};const Qn=m,eo=L,to=B;async function no({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Qn(e.definition);e.context.transform.for.in=await o(e.definition.for.in),await t({node:e}),n({node:e})}var oo={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]=[eo(e.definition.for,t),to(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],i=Object.keys(o)[0],a={name:i,childs:[],parent:e,definition:o[i],index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=no},resolve:no};var io={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:i}){}};const ao=m;async function so({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||ao(e.definition);const o=e.context.transform;o.raise=await n(o.raise),await t({node:e})}var ro={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=so},resolve:so};const co=m;async function lo({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||co(e.definition);const o=e.context.transform;o.return=await n(o.return),await t({node:e})}var po={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=lo},resolve:lo};const fo=m;async function mo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||fo(e.definition);const i=e.context.transform;i.args&&(i.args=await o(i.args)),i.result&&(i.result=await o(i.result));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.call)),await t({node:e}),n({node:e})}var uo={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call";for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],i=Object.keys(o)[0],a={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=mo},resolve:mo};const go=uo;var ho={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(e){const{node:t}=e,n="shell",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/shell",o.args="string"===i?{...o.args,cmd:o[n]}:o[n],delete o[n],await go.init(e)}};const yo=uo;var wo={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(e){const{node:t}=e,n="config",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/config",o.args="string"===i?{...o.args,name:o[n]}:o[n],delete o[n],await yo.init(e)}};const vo=uo;var bo={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(e){const{node:t}=e,n="yaml",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/yaml",o.args="string"===i?{...o.args,file:o[n]}:o[n],delete o[n],await vo.init(e)}};async function xo({node:e}){e.context.next=e.childs[0]}var ko={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],i={name:n,childs:[],parent:e,definition:o[n],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=xo},resolve:xo};const jo=m;async function _o({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||jo(e.definition);const i=e.context.transform;i.props&&(i.props=await o(i.props));const a=e.workflow.parent;e.context.lib=a.context.libs.find((e=>e.name===i.form)),await t({node:e}),n({node:e})}var Do={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],i=Object.keys(o)[0],a={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(a),await t({node:a})}e.resolve=_o},resolve:_o};const Po=m;async function So({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){e.context.transform=e.context.transform||Po(e.definition),await t({node:e})}var Ao={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=So},resolve:So};const To=m;async function Eo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||To(e.definition);const i=e.context.transform;i.next=await o(i.next),await t({node:e}),n({node:e})}var $o={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Eo},resolve:Eo};const Oo=uo;var Io={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,n="prompt",o=t.definition,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@fnet/prompt",o.args="string"===i?{...o.args,message:o[n]}:o[n],delete o[n],await Oo.init(e)}};const Co=uo;var No={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,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@flownet/lib-load-browser-script-url",o.args="string"===i?{...o.args,src:o[n]}:o[n],delete o[n],await Co.init(e)}};const Ro=uo;var Mo={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,i=typeof o[n];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${n} usage`);o.call="npm:@flownet/lib-load-browser-link-url",o.args="string"===i?{...o.args,src:o[n]}:o[n],delete o[n],await Ro.init(e)}};const Fo=p,qo=d,Uo=a,Lo=s,Bo=f,Jo=m,zo=u,Wo=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:Ko}=y,Go=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)}))}))}},Ho=async e=>{const{atom:t,context:n,packageDevDependencies:o}=e;t.doc.features=t.doc.features||{};const i=t.doc.features;i.project=i.project||{},i.project.format=i.project.format||i.project_format||"esm",i.project_format=i.project.format,i.dts_enabled=!0===i.dts||void 0!==i.dts&&!1!==i.dts,i.hasOwnProperty("all_parsed_imports")||(i.all_parsed_imports=!0);const a=de.resolve(n.project.projectDir),s=Pe({dir:de.resolve(a,"./app")});if(s.file){let e=await fe({file:s.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));i.app_uses_jsx=t,i.app_has_entry=!0,e=await fe({file:s.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),i.app_entry_uses_jsx=t,i.app_entry_is_ts=s.ts,i.app_entry_ext=s.ext}const r=Pe({dir:de.resolve(a,"./cli")});if(r.file){let e=await fe({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));i.cli_uses_jsx=t,i.cli_has_entry=!0,e=await fe({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),i.cli_entry_uses_jsx=t,i.cli_entry_is_ts=r.ts,i.cli_entry_ext=r.ext}if("workflow.lib"===t.type){const e=Pe({dir:de.resolve(a,"./src")});if(e.file){let t=await fe({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));i.src_uses_jsx=n,i.src_has_entry=!0,t=await fe({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),i.src_entry_uses_jsx=n,i.src_entry_is_ts=e.ts,i.src_entry_ext=e.ext}}const c=Reflect.has(i,"app_entry_uses_jsx")?!0===i.app_entry_uses_jsx:!0===i.src_entry_uses_jsx,l=Reflect.has(i,"cli_entry_uses_jsx")?!0===i.cli_entry_uses_jsx:!0===i.src_entry_uses_jsx;i.form_enabled=!0===t.doc.form||!0===t.doc.form?.enabled||!0===i.form||!0===i.form?.enabled,i.multiple_enabled=i.multiple_enabled||!0===i.multiple||!0===i.multiple?.enabled,!1===i.app?i.app={enabled:!1}:!0===i.app?i.app={enabled:!0,extend:!0===i.app_has_entry,export:!0,react:c}:i.app={enabled:!0,extend:!0===i.app_has_entry,export:!0,react:c,...i.app||{}},i.app.enabled=!0===i.app.enabled&&(!0===t.doc.features.form_enabled||!0===i.app.extend||!0===i.app.enabled),i.app.format=i.app.format||"esm",i.app.folder=i.app.folder||i.app.format||"default",!1===i.cli?i.cli={enabled:!1}:!0===i.cli?i.cli={enabled:!0,extend:!0===i.cli_has_entry,export:!0,react:l}:i.cli={enabled:!0,extend:!0===i.cli_has_entry,export:!0,react:l,...i.cli||{}},i.cli.enabled=!0===i.cli.enabled&&(!1===t.doc.features.form_enabled||!0===i.cli.extend||!0===i.cli.enabled),i.cli.format=i.cli.format||"esm",i.cli.folder=i.cli.folder||i.cli.folder||"esm",i.cli.node_options=i.cli.node?.options||i.cli.node_options||"";const p={cjs:{format:"cjs",context:i.form_enabled?"window":"global",babel:!0===i.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==i.cjs,copy:!1},esm:{format:"esm",context:i.form_enabled?"window":"global",babel:!0===i.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!1!==i.esm,copy:!0},iife:{format:"iife",context:i.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==i.iife,terser:!0,copy:!1}};!0===i.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===i.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===i.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===i.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===i.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===i.app.enabled&&(i.app.dir=`./dist/app/${i.app.folder}`,p.app={format:i.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:i.app.dir,terser:!0,output_exports:!1===i.app.export?"none":"auto"}),!0===i.cli.enabled&&(i.cli.dir=`./dist/cli/${i.cli.folder}`,p.cli={format:i.cli.format,context:"global",babel:!0===i.src_uses_jsx||!0===i.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:i.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===i.cli.export?"none":"auto"});const d={server:".",startPath:`${de.normalize(i.app.dir||".")}`,files:[de.normalize("./dist/**/*")],cors:!0,open:!1};i.babel_options=le({targets:{browsers:"last 9 versions, not dead",node:"18"}},i.babel_options||i.babel?.options),i.browsersync_options=le(d,i.browsersync_options||i.browsersync?.options||{}),i.replace_options=le({},i.replace_options||i.replace?.options||{}),Reflect.has(i.browsersync_options,"proxy")&&delete i.browsersync_options.server,i.rollup=i.rollup||{},i.rollup_output=le(p,i.rollup_output||i.rollup?.output||{}),i.preact_enabled=!0===i.preact||i.preact&&!1!==i.preact?.enabled;let f=Object.keys(p);for(const e of f){const t=p[e];t&&(!1!==i.rollup[e]?(t.babel_options=t.babel_options||i.babel_options,t.browsersync_options=le(i.browsersync_options,t.browsersync_options),t.replace_options=le(i.replace_options,t.replace_options),i.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"),i.form_enabled&&(t.babel=!0)):delete i.rollup_output[e])}f=Object.keys(i.rollup_output),i.babel_enabled=f.some((e=>!0===i.rollup_output[e].babel)),i.browser_enabled=f.some((e=>!0===i.rollup_output[e].babel)),i.browsersync_enabled=!1!==i.browsersync&&f.some((e=>!0===i.rollup_output[e].browsersync)),i.browsersync_enabled=i.browsersync_enabled&&i.app.enabled,i.dependency_auto_enabled=!1!==i.dependency_auto&&!1!==i.dependency_auto?.enabled,i.npm_install_flags=i.npm_install_flags||"",i.react_version=i.react_version||i.react?.version||18,De(e),_e(e),je(e),ke(e),xe(e),ve(e),be(e),we(e),ye(e),he(e),ge(e),me(e),ue(e)},Vo=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 Se({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"}))}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"})},Xo=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating app folder"});const i={atom:e,packageDependencies:o,ts:Date.now()},a=n.templateDir,s=Te.resolve(n.projectDir,"src/app");Ae.existsSync(s)||Ae.mkdirSync(s,{recursive:!0});let r=["index.js.njk"];!1!==e.doc.features.app.html&&r.push("index.html.njk"),await Ee({pattern:r,dir:Te.resolve(a,"src/app"),outDir:s,context:i})},Yo=async({atom:e,context:t,packageDependencies:n,packageDevDependencies:o,setInProgress:i})=>{await i({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 a=n.find((e=>"react"===e.package)),s=n.find((e=>"react-dom"===e.package));a&&!s?n.push({package:"react-dom",version:a.version}):a&&s&&(s.version=a.version),a&&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:Ie.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&r.push({file:Ie.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const t of r){const i=t.file;if(!Oe.existsSync(i))throw new Error(`App file not found: ${i}`);const a=await Ce({file:i,recursive:!0}),s=!0===e.doc.features.all_parsed_imports?a.all:a.required;for await(const e of s){if("npm"!==e.type)continue;if(n.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const i=(await Ne({name:e.package,groupBy:{minor:!0}}))[0][0];(!0===t.dev?o:n).push({package:e.package,subpath:e.subpath,version:`^${i}`,type:"npm"})}}const c={atom:e,packageDependencies:n,packageDevDependencies:o},l=t.templateCommonDir,p=$e.compile(Oe.readFileSync(Ie.resolve(l,"package.json.njk"),"utf8"),$e.configure(l)).render(c),d=t.projectDir,f=Ie.resolve(d,"package.json");Oe.writeFileSync(f,p,"utf8");const m=Ie.resolve(t.project.projectDir,"fnet");if(Oe.existsSync(m)){const e=Ie.resolve(t.projectDir,"fnet");Oe.existsSync(e)||Oe.mkdirSync(e);const n=Oe.readdirSync(m);for(const t of n){const n=Ie.resolve(m,t);if(!Oe.lstatSync(n).isFile())continue;const o=Ie.resolve(e,t);Oe.copyFileSync(n,o)}}},Zo=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={atom:e,packageDependencies:o},a=n.templateDir,s=Me.resolve(n.projectDir,"src/cli");Re.existsSync(s)||Re.mkdirSync(s,{recursive:!0}),await Fe({pattern:["index.js.njk"],dir:Me.resolve(a,"src/cli"),outDir:s,context:i})},Qo=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:o},a=Ue.resolve(n.projectDir,"src","default/index.js");if(!qe.existsSync(a))throw new Error(`Entry file not found: ${a}`);const s=(await Be({file:a,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&s.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(s.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<s.length;e++){const 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=Le.compile(qe.readFileSync(Ue.resolve(l,"rollup.config.mjs.njk"),"utf8"),Le.configure(l)).render(i);const d=n.projectDir;let f=Ue.resolve(d,"rollup.config.mjs");qe.writeFileSync(f,p,"utf8")},ei=async({atom:e,setInProgress:t,context:n,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let i={};const a=e.doc.inputs||[],s=[],r=e.doc.input;if(r?i=await Ke({schema:r}):a.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&s.push(e);const t={};Reflect.has(e,"type")&&(t.type=e.type),Reflect.has(e,"default")&&(t.default=e.default),Reflect.has(e,"choices")&&(t.choices=e.choices),(Reflect.has(e,"describe")||Reflect.has(e,"description"))&&(t.describe=e.describe||e.description),Reflect.has(e,"alias")&&(t.alias=e.alias),Reflect.has(e,"required")&&!0===e.required&&(t.required=!0),Reflect.has(e,"hidden")&&!0===e.hidden&&(t.hidden=!0),Reflect.has(e,"array")&&!0===e.array&&(t.array=!0),Reflect.has(e,"normalize")&&!0===e.normalize&&(t.normalize=!0),Reflect.has(e,"nargs")&&(t.nargs=e.nargs),i[e.name]=t})),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const t=e.doc.features.cli.fargs,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),i.fargs=n,i.ftag=o}const c={options:i,imports:s,atom:e},l=n.templateDir,p=We.compile(Je.readFileSync(ze.resolve(l,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=n.projectDir,f=ze.resolve(d,"src/default/to.args.js");Je.writeFileSync(f,p,"utf8")},ti=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:o},a=n.templateCommonDir,s=Ve.compile(Ge.readFileSync(He.resolve(a,".gitignore.njk"),"utf8"),Ve.configure(a)).render(i),r=n.projectDir,c=He.resolve(r,".gitignore");Ge.writeFileSync(c,s,"utf8")},ni=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:o},a=n.templateCommonDir,s=Ze.compile(Xe.readFileSync(Ye.resolve(a,"tsconfig.json.njk"),"utf8"),Ze.configure(a)).render(i),r=n.projectDir,c=Ye.resolve(r,"tsconfig.json");Xe.writeFileSync(c,s,"utf8")},oi=async({atom:e,context:t,setInProgress:n,Atom:o})=>{const i="readme.md",a=`Creating ${i}`;if(await n({message:a}),t.project?.readme){const e=t.projectDir,n={content:t.project.readme.doc.content},o=tt.resolve(t.project.projectDir,"fnet/how-to.md");if(et.existsSync(o)){const e=et.readFileSync(o,"utf8");n.howto=e}const a=tt.resolve(t.project.projectDir,"fnet/input.yaml");if(et.existsSync(a)){const e=await nt({file:a,tags:t.tags});n.input=e.content}const s=t.templateCommonDir,r=Qe.compile(et.readFileSync(tt.resolve(s,`${i}.njk`),"utf8"),Qe.configure(s)).render(n),c=tt.resolve(e,`${i}`);et.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:a,...s}=n.doc,r={content:a},c=t.templateCommonDir,l=Qe.compile(et.readFileSync(tt.resolve(c,`${i}.njk`),"utf8"),Qe.configure(c)).render(r),p=t.projectDir,d=tt.resolve(p,`${i}`);et.writeFileSync(d,l,"utf8")}},ii=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Prettifiying source files."});let o=it.join("src","**","*");if(0!==ot.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n}).code)throw new Error("Couldnt format files.")},ai=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!==at.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},si=async({setInProgress:e,atom:t,context:n})=>{const o=n.projectDir;await e({message:"Installing npm packages."});if(0!==st.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},ri=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Building main project."});if(0!==rt.exec("npm run build",{cwd:n}).code)throw new Error("Couldnt build project.")},ci=async e=>{const{atom:t,packageDependencies:n,context:o,deploymentProjectTarget:i,setInProgress:a,deploymentProject:s,yamlTarget:r}=e;if(!0===i.enabled)if("lib"===i.type)await Tn({...e});else if("red"===i.type)await An({...e});else if("npm"===i.type)await Sn({...e});else if("gcs"===i.type)await Pn({...e});else if("gitlab"===i.type)await Dn({...e});else if("fnet-package"===i.type)await Rn({...e});else if("fnet-form"===i.type)await Mn({...e});else if("fnet-node"===i.type)await qn({...e});else if("fnet-flow"===i.type)await Fn({...e});else{let e;if("nextjs"===i.type?e=Cn:"webos"===i.type?e=In:"electron"===i.type?e=On:"docker"===i.type?e=Nn:"ios"===i.type?e=En:"macos"===i.type?e=$n:"rust"===i.type&&(e=Un),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),s.isDirty=!0}},{Atom:li}=w,pi=M,di=j,fi=F,mi=t,ui=k,gi=q,hi=r,yi=U,wi=Kn,vi=Vn,bi=Zn,xi=oo,ki=Jn,ji=io,_i=ro,Di=po,Pi=uo,Si=ho,Ai=wo,Ti=bo,Ei=ko,$i=Do,Oi=Ao,Ii=$o,Ci=Io,Ni=No,Ri=Mo,Mi=({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 Fi=class{#e;#t;#n;#o;#i;#a;#s;#r;#c;#l;#p;#d;#f;#m;#u;#g;#h;#y;#w;#v;#b;constructor(e){this.#e=new Go,this.#t=e,this.#a=[],this.#s=[],this.#r={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#v={packageDependencies:this.#a,packageDevDependencies:this.#s,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:li,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#b={initNode:this.initNode.bind(this),cloneDeep:Jo,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Mi,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 Wo(),this.#p=this.#t.buildId||Ko(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.#y=["all","deploy"].includes(this.#u),this.#w=["all","deploy","build","file","bpmn"].includes(this.#u),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#m=(await mi({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 Ho(this.#v),await Vo(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.#a}),await this.resolveNodeTree({root:e}),this.#l=e}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#c=await this.#e.init({config:this.#m}),this.#v.atomAccessToken=this.#c)}async initWorkflow(){const e=this.#t.id;this.#n=this.#t.project?.workflowAtom||await li.get({id:e}),this.#o="string"==typeof this.#n.doc.content?(await hi({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.#a.push({package:"get-value",version:"^3.0"}),this.#a.push({package:"set-value",version:"^4.1"}),this.#n.doc.features.form_enabled?(this.#a.push({package:"react",version:"^18.2"}),this.#a.push({package:"react-dom",version:"^18.2"}),this.#a.push({package:"@flownet/react-app",version:"^0.1"}),this.#a.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#a.push({package:"yargs",version:"^17"}),this.#a.push({package:"chalk",version:"^4"})}#x(e){console.log("filePath",e),Fo.statSync(e).isDirectory()?(Fo.readdirSync(e).forEach((t=>{const n=qo.join(e,t);this.#x(n)})),Fo.rmSync(e)):Fo.unlinkSync(e)}#k(e,t){const n=Fo.existsSync(e),o=n&&Fo.statSync(e);n&&o.isDirectory()?(Fo.mkdirSync(t,{recursive:!0}),Fo.readdirSync(e).forEach((n=>{this.#k(qo.join(e,n),qo.join(t,n))}))):Fo.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,n=["node_modules"];if(Fo.existsSync(e)){const t=Fo.readdirSync(e);for(const o of t)if(!n.includes(o)){const t=qo.join(e,o);Fo.rmSync(t,{recursive:!0})}}Fo.existsSync(e)||Fo.mkdirSync(e,{recursive:!0});const o=qo.join(e,"src");Fo.existsSync(o)||Fo.mkdirSync(o,{recursive:!0});const i=qo.join(o,"core");this.#k(t,i);const a=qo.join(o,"default","blocks");Fo.existsSync(a)||Fo.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=Bo.configure(e,{watch:!1,dev:!0}),this.#v.njEnv=this.#i}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,n]=Object.entries(e)[0];if(n.hasOwnProperty("onerror")){const{onerror:o,...i}=n;e[t]={try:i,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 vi.hits(t))await vi.init(t);else if(await xi.hits(t))await xi.init(t);else if(await ki.hits(t))await ki.init(t);else if(await wi.hits(t))await wi.init(t);else if(await ji.hits(t))await ji.init(t);else if(await bi.hits(t))await bi.init(t);else if(await _i.hits(t))await _i.init(t);else if(await Di.hits(t))await Di.init(t);else if(await Pi.hits(t))await Pi.init(t);else if(await Si.hits(t))await Si.init(t);else if(await Ai.hits(t))await Ai.init(t);else if(await Ti.hits(t))await Ti.init(t);else if(await Ni.hits(t))await Ni.init(t);else if(await Ri.hits(t))await Ri.init(t);else if(await $i.hits(t))await $i.init(t);else if(await Oi.hits(t))await Oi.init(t);else if(await Ci.hits(t))await Ci.init(t);else if(await Ei.hits(t))await Ei.init(t);else{if(!await Ii.hits(t))throw new Error("Undefined step type.");await Ii.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=qo.join(e.parent.indexKey,e.name);e.indexKey=n,t[n]=e;const o=[];let i=e;for(;i?.parent;)o.push(i.index),i=i.parent;o.reverse(),e.codeKey=`B_${o.join("_")}_${e.type}`,e.pathKey=`${o.join(".")}`,e.typeId=Ko(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",definition:e.definition},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||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"},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||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],i=await this.findAtomLibrary({url:o.name,libRef:o});o.atom=i;const a=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));a?.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,libRef:t}){const n=pi({url:e});if(!n)throw new Error(`Invalid package name: ${e}`);if(n.protocol||(n.protocol=this.#f),"ac:"===n.protocol){const t=n.pathname.split("/");if(1===t.length)return await li.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await li.first({where:{name:t[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await li.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===n.protocol){const e=qo.resolve(this.#t.projectSrcDir,`${n.pathname}.js`),t=[],o=await ui({file:e,recursive:!0}),i=!0===this.#n.doc.features.all_parsed_imports?o.all:o.required;for await(const e of i){if("npm"!==e.type)continue;if(t.find((t=>t.package===e.package)))continue;const n=(await di({name:e.package,groupBy:{minor:!0}}))[0][0];t.push({package:e.package,subpath:e.subpath,version:`^${n}`,type:"npm"})}return{name:n.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:t},protocol:n.protocol}}if("npm:"===n.protocol){const e=(await di({name:n.pathname,groupBy:{minor:!0}}))[0][0];return{name:n.pathname,doc:{type:"workflow.lib",subtype:"flow"===t?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:n.pathname,version:`^${e}`,type:"npm"}]},protocol:n.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=Jo(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=qo.resolve(this.#t.projectSrcDir,`${n.fileName||n.name}.js`),t=qo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!Fo.existsSync(e)){Fo.mkdirSync(qo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Fo.writeFileSync(e,t,"utf8")}n.relativePath=t.split(qo.sep).join("/"),this.#n.typesDir=`./types/${qo.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;Fo.writeFileSync(qo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,n=Bo.compile(Fo.readFileSync(qo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),o=this.#t.projectDir,i=qo.resolve(o,"src/default/index.js");Fo.writeFileSync(i,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=Bo.compile(Fo.readFileSync(qo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),o=this.#t.projectDir,i=qo.resolve(o,`src/default/${e.codeKey}.js`);Fo.writeFileSync(i,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=Bo.compile(Fo.readFileSync(qo.resolve(n,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#i),this.#r[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,n=`${e.codeKey}.js`,o=qo.resolve(t,`src/default/blocks/${n}`);Fo.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(zo(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 gi({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,i={content:Uo.stringify(o)},a=this.#t.templateDir,s=Bo.compile(Fo.readFileSync(qo.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=qo.resolve(r,`${e}`);Fo.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const n={content:Uo.stringify(this.#o)},o=this.#t.templateDir,i=Bo.compile(Fo.readFileSync(qo.resolve(o,`${e}.njk`),"utf8"),this.#i).render(n),a=this.#t.projectDir,s=qo.resolve(a,`${e}`);Fo.writeFileSync(s,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=Lo.exec("prettier --write .",{cwd:qo.resolve(e,"src")});if(0!==t.code)throw new Error(t.stderr)}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&await n.save()}}else if(this.#n.id){const e=await li.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 li.update(n,{id:n.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:n}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const o=Object.keys(t.doc||{}),i=n||{};for(let e=0;e<o.length;e++){const n=t.doc[o[e]];n.name=o[e];const a=i.get(o[e]);await ci({...this.#v,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:a})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#t.id)return;let o=await li.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await li.update(o,{id:o.id})):o=await li.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(yi.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#w&&!this.#g)return await this.createNetwork();try{const e=this.#w?await fi({root:this.#l}):void 0;if(this.#g){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#w){const t=this.#t.project?.projectDir||this.#t.projectDir;Fo.writeFileSync(qo.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 oi(this.#v),await ni(this.#v),await ti(this.#v),await ei(this.#v),await Zo(this.#v),await Xo(this.#v),await Qo(this.#v),await Yo(this.#v),await ii(this.#v),await ai(this.#v),this.#h&&(await si(this.#v),await ri(this.#v),this.#y&&await this.deploy())}await this._cache_set(this.#d,{status:"COMPLETED",data:{network:e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await fi({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 qi=p,Ui=d;var Li=function({baseDir:e=__dirname}){let t=e;for(;t!==Ui.parse(t).root;){const e=Ui.join(t,"node_modules");if(qi.existsSync(e))return e;t=Ui.dirname(t)}return null};const Bi=process.cwd(),{spawn:Ji}=e;t({name:["redis"],dir:Bi,optional:!0});const zi=n,Wi=o,Ki=i,Gi=a,Hi=s,Vi=r,Xi=t,Yi=c,Zi=l,Qi=Fi,ea=Li({baseDir:__dirname}),ta="win32"===process.platform?";":":";process.env.PATH=`${zi.join(ea,"/.bin")}${ta}${process.env.PATH}`;let na=Wi(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=zi.resolve(ea,"./@fnet/cli-project-flow/dist/template/project"),n=zi.resolve(Bi,e.name);Ki.existsSync(n)||Ki.mkdirSync(n),await Zi({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0});let o=Hi.exec("fnet build",{cwd:n});if(0!==o.code)throw new Error("Failed to build project.");if(Hi.which("git")&&(o=Hi.exec("git init --initial-branch=main",{cwd:n}),0!==o.code))throw new Error("Failed to initialize git.");if(Hi.which("code")&&e.vscode&&(o=Hi.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=zi.resolve(ea,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd();if(e.name=zi.basename(n),e.update){if(await Zi({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0}),0!==Hi.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 ia(e),n=new Qi(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 ia({...e,mode:"all"}),n=new Qi(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 ia({...e,mode:"file"}),n=new Qi(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 oa(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 ia(e),{projectDir:i}=t,a=process.argv.slice(3);Ji(n,[...o,...a],{cwd:i,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function ia(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:zi.resolve(Bi,`./.output/${e.id}`),templateDir:zi.resolve(ea,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:zi.resolve(ea,"./@fnet/cli-project-common/dist/template/default"),coreDir:zi.resolve(ea,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=zi.resolve(Bi,"flow.yaml");if(!Ki.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const{raw:n,parsed:o}=await Vi({file:t,tags:e}),i=zi.dirname(t),a=o.main||"flow.main.yaml";let s=zi.resolve(i,a);if(!Ki.existsSync(s)&&(s=zi.resolve(i,a+".yaml"),!Ki.existsSync(s)))throw new Error(`${a} file not found in ${s}.`);const{raw:r,parsed:c}=await Vi({file:s,tags:e}),l={workflowAtom:{doc:{...o,"content-type":"yaml",content:r}},projectDir:i,projectFilePath:t,projectFileContent:n,projectFileParsed:o,projectMainFilePath:s,projectMainFileContent:r,projectMainFileParsed:c};let p=zi.resolve(i,"fnet/targets.yaml");if(!Ki.existsSync(p)&&(p=zi.resolve(i,"flow.devops.yaml"),Ki.existsSync(p))){const e=zi.resolve(i,"fnet");Ki.existsSync(e)||Ki.mkdirSync(e),Ki.copyFileSync(p,zi.resolve(i,"fnet/targets.yaml")),Ki.unlinkSync(p)}if(Ki.existsSync(p)){const{raw:t,parsed:n}=await Vi({file:p,tags:e}),o=Gi.parseDocument(t);l.devops={filePath:p,fileContent:t,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{Ki.writeFileSync(l.devops.filePath,o.toString())}}}const d=zi.resolve(i,"readme.md");if(Ki.existsSync(d)){const e=Ki.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:zi.resolve(ea,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:zi.resolve(ea,"./@fnet/cli-project-common/dist/template/default"),coreDir:zi.resolve(ea,"./@fnet/cli-project-flow/dist/template/core"),projectDir:zi.resolve(t.projectDir,"./.workspace"),projectSrcDir:zi.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}na=na.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 ia(e),{project:n}=t,{projectDir:o,projectFileParsed:i}=n,a=i.input;if(!a)throw new Error("Config schema not found in project file.");const s=await Yi({schema:a,format:"yaml"}),r=zi.resolve(o,".fnet");Ki.existsSync(r)||Ki.mkdirSync(r);const c=zi.resolve(r,`${e.name}.fnet`);Ki.writeFileSync(c,s)}catch(e){console.error(e.message),process.exit(1)}})),na=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 ia(e),{project:n}=t,{projectDir:o,projectFileParsed:i}=n,a=i.input;if(!a)throw new Error("Config schema not found in project file.");const s=zi.resolve(o,".fnet"),r=zi.resolve(s,`${e.name}.fnet`),c=await Yi({schema:a,format:"yaml",ref:r});Ki.existsSync(s)||Ki.mkdirSync(s),Ki.writeFileSync(r,c)}catch(e){console.error(e.message),process.exit(1)}}))}(na),na=oa(na,{bin:"npm"}),na=oa(na,{bin:"node"}),na=oa(na,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),na=oa(na,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),na=oa(na,{name:"app",bin:"npm",preArgs:["run","app","--"]}),na=oa(na,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),na=oa(na,{bin:"npx"}),na=oa(na,{bin:"cdk"}),na=oa(na,{bin:"aws"}),na=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 ia(e),{projectDir:o}=t,i=e.config,a=await Xi({name:i,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),s=a?.data?.env||void 0,r=e.command,c=process.argv.slice(5);Ji(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)}}))}(na,{name:"with"}),na.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.59.2",
3
+ "version": "0.60.0",
4
4
  "files": [
5
5
  "dist"
6
6
  ],