@fnet/cli 0.62.2 → 0.63.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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"),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("@fnet/up-list-files"),S=require("node:os"),A=require("@node-red/util"),P=require("@flownet/lib-to-ios-app"),I=require("lodash.clonedeep"),E=require("@flownet/lib-to-macos-app"),T=require("@flownet/lib-to-electron"),$=require("@flownet/lib-to-webos"),O=require("@flownet/lib-to-nextjs"),C=require("@flownet/lib-to-docker"),R=require("form-data"),M=require("@fnet/to-rust"),F=require("@flownet/lib-parse-node-url"),q=require("@flownet/lib-pick-npm-versions"),L=require("chalk");const N=u,U=f;const{Api:B}=y,z=h.default,J=w;const W=v;var K=({feature:e,features:t,packageDevDependencies:a})=>{const{name:o,packages:s,options:n,extraCheck:r,explicit:i}=e,c=`${o}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=n||{};const m=t[o]?.options;m&&(d=W(d,m));const u=!t[o]||!1===t[o]?.enabled;l.forEach((e=>{const a=t.rollup_output[e];if(a){if(Reflect.has(a,o)){if(u||!a[o]||!1===a[o]?.enabled)return void delete a[o];!0===a[o]&&(a[o]={enabled:!0,options:d})}else{if(u||i||!1===t[c])return;a[o]={enabled:!0}}a[o]=a[o]||{},a[o].options={...d,...a[o].options}}}));let f=l.some((e=>!0===t.rollup_output[e][o]?.enabled));r&&(f=r()&&f),t[c]=f,f&&s.forEach((e=>a.push({package:e[0],version:e[1]})))};const G=K;const H=K;const X=K;const Y=K;const Z=K;const Q=K;const V=K;const ee=K;const te=K;const ae=K;const oe=K;const se=K;const ne=K;const re=v,ie=l,ce=d,pe=b,le=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;G({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}},explicit:!0},features:o,packageDevDependencies:a})},de=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;H({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:o,packageDevDependencies:a})},me=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;X({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.3"]]},features:o,packageDevDependencies:a})},ue=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Y({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:o,packageDevDependencies:a})},fe=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Z({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:o,packageDevDependencies:a})},ge=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;Q({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:o,packageDevDependencies:a})},ye=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;V({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:a})},he=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;ee({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:a})},we=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;te({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:a})},ve=e=>{const{atom:t,packageDevDependencies:a}=e,o=t.doc.features;ae({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;oe({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:o,packageDevDependencies:a})},_e=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)),se({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:s},features:o,packageDevDependencies:a})},je=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"])}}))}ne({feature:{name:"css",packages:n},features:o,packageDevDependencies:a})};function De({dir:e,name:t="index"}){let a=ce.resolve(e,`./${t}.tsx`);if(ie.existsSync(a)||(a=ce.resolve(e,`./${t}.ts`)),ie.existsSync(a)||(a=ce.resolve(e,`./${t}.jsx`)),ie.existsSync(a)||(a=ce.resolve(e,`./${t}.js`)),!ie.existsSync(a))return{};const o=a,s=ce.extname(a);return{file:o,ext:s,ts:".ts"===s||".tsx"===s,name:t}}const ke=_;const xe=l,Se=d,Ae=p;const Pe=m,Ie=l,Ee=d,Te=b,$e=_;const Oe=l,Ce=d,Re=p;const Me=l,Fe=d,qe=m,Le=b;const Ne=l,Ue=d,Be=m,ze=j;const Je=l,We=d,Ke=m;const Ge=l,He=d,Xe=m;const Ye=m,Ze=l,Qe=d,Ve=i;const et=r,tt=a;const at=r;const ot=r;const st=r;const nt=D,rt=t;const it=l,ct=d,pt=k,lt=D,dt=t;const mt=l,ut=d,ft=k,gt=r,yt=t,ht=x,wt=c,vt=n;const bt=l,_t=d,jt=S,Dt=m,kt=A,xt=t;const St=s,At=a,Pt=t;const It=t,Et=P,Tt=I,$t=k;const Ot=t,Ct=E,Rt=I,Mt=k;const Ft=t,qt=T,Lt=I,Nt=k;const Ut=t,Bt=$,zt=I,Jt=k;const Wt=t,Kt=O,Gt=I,Ht=k;const Xt=t,Yt=C,Zt=I,Qt=k;const Vt=l,ea=d,ta=k,aa=D,oa=t,sa=h.default;const na=k,ra=t,ia=h.default;const ca=k,pa=t,la=h.default,da=s,ma=D,ua=R;const fa=k,ga=t,ya=h.default,ha=s,wa=D,va=R;const ba=t,_a=M,ja=I,Da=k;const ka=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 rt({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 nt({cmd:r}),a.isDirty=!0)},xa=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=ct.resolve(r,"package.json"),c=it.readFileSync(i),p=JSON.parse(c);p.name=o.params.name,p.version=pt.inc(o.version,"patch"),delete p.scripts,delete p.devDependencies,it.writeFileSync(i,JSON.stringify(p,null,"\t"));const{file:l,data:d}=await dt({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='${ct.resolve(ct.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 lt({cmd:m}),it.writeFileSync(i,c),!0!==o.dryRun&&(a.isDirty=!0,o.version=p.version,n.set("version",p.version),await s({target:o,packageJSON:p}))},Sa=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=ut.resolve(r,"package.json"),c=mt.readFileSync(i),p=JSON.parse(c);p.name=s.params.name,p.version=ft.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 ."},mt.writeFileSync(i,JSON.stringify(p,null,"\t"));const d=s.config||"npm";let m=(await yt({name:d,dir:a.projectDir,tags:a.tags,optional:!0}))?.data;if(!m){const e=ht({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===e.length)throw new Error("Couldnt find schema to create npm config");const t=await wt({schema:e[0],tags:a.tags}),o=a.project.projectDir,s=ut.resolve(o,".fnet");mt.existsSync(s)||mt.mkdirSync(s),mt.writeFileSync(ut.resolve(s,`${d}.fnet`),vt.stringify(t)),m=t}if(mt.writeFileSync(ut.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${m.env.NPM_TOKEN}`),!0!==s.dryRun){if(0!==gt.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");mt.writeFileSync(i,c),o.isDirty=!0,s.version=p.version,n.set("version",p.version)}},Aa=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||kt.util.generateId(),label:`${l}/${e.id?e.id:jt.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:kt.util.generateId(),name:e.doc.name,initialize:{content:bt.readFileSync(_t.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:kt.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:kt.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||kt.util.generateId(),label:`${l}/${e.id?e.id:jt.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:kt.util.generateId(),name:e.doc.name,initialize:{content:bt.readFileSync(_t.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:kt.util.generateId(),schedules:t},debug:{id:kt.util.generateId()}}}}else{if("http"!==s.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||kt.util.generateId(),label:`${l}/${e.id?e.id:jt.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:kt.util.generateId(),name:e.doc.name,initialize:{content:bt.readFileSync(_t.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:kt.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:kt.util.generateId()},debug:{id:kt.util.generateId()}}}}let m=Dt.compile(bt.readFileSync(_t.resolve(p,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(bt.writeFileSync(_t.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=(await xt({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}},Pa=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 Pt({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:St.readFileSync(At.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:St.readFileSync(At.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:St.readFileSync(At.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})},Ia=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 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)}},Ea=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as macos-app package."});const i=t?.config?await Ot({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=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)}},Ta=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as electron package."});const i=t?.config?await 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)}},$a=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as webos package."});const i=t?.config?await 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)}},Oa=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s,context:n,yamlTarget:r})=>{a&&await a({message:"Deploying it as nextjs package."});const i=t?.config?await 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)}},Ca=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 Xt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Qt.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 Yt(l)}},Ra=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet package."});const n=t.projectDir,r=ea.resolve(n,"package.json"),i=Vt.readFileSync(r),c=JSON.parse(i);c.name=o.params.name,c.version=ta.inc(o.version,"patch"),delete c.scripts,delete c.devDependencies,Vt.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:p,data:l}=await oa({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 sa({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='${ea.resolve(ea.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 aa({cmd:y}),Vt.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 sa({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.")},Ma=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 ra({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 ia({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=na.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 ia({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.")},Fa=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 pa({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 la({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=ca.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 la({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${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 ma({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new ua;w.append("file",da.createReadStream(h));const v=await la.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.")},qa=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 ga({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 ya({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=fa.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 ya({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 wa({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new va;w.append("file",ha.createReadStream(h));const v=await ya.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.")},La=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 ba({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Da.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=ja(t.params);p.dependencies=ja(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await _a(l)}};const Na=l,Ua=d,Ba=n,za=r,Ja=m,Wa=async()=>{if(!await U({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=N.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Ka}=g,Ga=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(B.set_api_url(e.data.url),t)return B.set_req_token(t),void a(t);z({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:J.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{B.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{B.set_req_token(),o(e)}))}))}},Ha=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=ce.resolve(a.project.projectDir),r=De({dir:ce.resolve(n,"./app")});if(r.file){let e=await pe({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 pe({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=De({dir:ce.resolve(n,"./cli")});if(i.file){let e=await pe({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 pe({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=De({dir:ce.resolve(n,"./src")});if(e.file){let t=await pe({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 pe({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:`${ce.normalize(s.app.dir||".")}`,files:[ce.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=re({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=re(d,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=re({},s.replace_options||s.replace?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=re(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=re(s.browsersync_options,t.browsersync_options),t.replace_options=re(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,je(e),_e(e),be(e),ve(e),we(e),ye(e),he(e),ge(e),fe(e),ue(e),me(e),le(e),de(e)},Xa=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 ke({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"})},Ya=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=Se.resolve(a.projectDir,"src/app");xe.existsSync(r)||xe.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:Se.resolve(n,"src/app"),outDir:r,context:s})},Za=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:Ee.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&i.push({file:Ee.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(!Ie.existsSync(s))throw new Error(`App file not found: ${s}`);const n=await Te({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 $e({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=Pe.compile(Ie.readFileSync(Ee.resolve(p,"package.json.njk"),"utf8"),Pe.configure(p)).render(c),d=t.projectDir,m=Ee.resolve(d,"package.json");Ie.writeFileSync(m,l,"utf8");const u=Ee.resolve(t.project.projectDir,"fnet");if(Ie.existsSync(u)){const e=Ee.resolve(t.projectDir,"fnet");Ie.existsSync(e)||Ie.mkdirSync(e);const a=Ie.readdirSync(u);for(const t of a){const a=Ee.resolve(u,t);if(!Ie.lstatSync(a).isFile())continue;const o=Ee.resolve(e,t);Ie.copyFileSync(a,o)}}},Qa=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=Ce.resolve(a.projectDir,"src/cli");Oe.existsSync(r)||Oe.mkdirSync(r,{recursive:!0}),await Re({pattern:["index.js.njk"],dir:Ce.resolve(n,"src/cli"),outDir:r,context:s})},Va=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},n=Fe.resolve(a.projectDir,"src","default/index.js");if(!Me.existsSync(n))throw new Error(`Entry file not found: ${n}`);const r=(await Le({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=qe.compile(Me.readFileSync(Fe.resolve(p,"rollup.config.mjs.njk"),"utf8"),qe.configure(p)).render(s);const d=a.projectDir;let m=Fe.resolve(d,"rollup.config.mjs");Me.writeFileSync(m,l,"utf8")},eo=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 ze({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=Be.compile(Ne.readFileSync(Ue.resolve(p,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=a.projectDir,m=Ue.resolve(d,"src/default/to.args.js");Ne.writeFileSync(m,l,"utf8")},to=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},n=a.templateCommonDir,r=Ke.compile(Je.readFileSync(We.resolve(n,".gitignore.njk"),"utf8"),Ke.configure(n)).render(s),i=a.projectDir,c=We.resolve(i,".gitignore");Je.writeFileSync(c,r,"utf8")},ao=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=Xe.compile(Ge.readFileSync(He.resolve(n,"tsconfig.json.njk"),"utf8"),Xe.configure(n)).render(s),i=a.projectDir,c=He.resolve(i,"tsconfig.json");Ge.writeFileSync(c,r,"utf8")},oo=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=Qe.resolve(t.project.projectDir,"fnet/how-to.md");if(Ze.existsSync(o)){const e=Ze.readFileSync(o,"utf8");a.howto=e}const n=Qe.resolve(t.project.projectDir,"fnet/input.yaml");if(Ze.existsSync(n)){const e=await Ve({file:n,tags:t.tags});a.input=e.content}const r=t.templateCommonDir,i=Ye.compile(Ze.readFileSync(Qe.resolve(r,`${s}.njk`),"utf8"),Ye.configure(r)).render(a),c=Qe.resolve(e,`${s}`);Ze.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=Ye.compile(Ze.readFileSync(Qe.resolve(c,`${s}.njk`),"utf8"),Ye.configure(c)).render(i),l=t.projectDir,d=Qe.resolve(l,`${s}`);Ze.writeFileSync(d,p,"utf8")}},so=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=tt.join("src","**","*");if(0!==et.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},no=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!==at.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},ro=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==ot.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},io=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==st.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},co=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 Pa({...e});else if("red"===s.type)await Aa({...e});else if("npm"===s.type)await Sa({...e});else if("gcs"===s.type)await xa({...e});else if("gitlab"===s.type)await ka({...e});else if("fnet-package"===s.type)await Ra({...e});else if("fnet-form"===s.type)await Ma({...e});else if("fnet-node"===s.type)await qa({...e});else if("fnet-flow"===s.type)await Fa({...e});else{let e;if("nextjs"===s.type?e=Oa:"webos"===s.type?e=$a:"electron"===s.type?e=Ta:"docker"===s.type?e=Ca:"ios"===s.type?e=Ia:"macos"===s.type?e=Ea:"rust"===s.type&&(e=La),!e)return;await e({atom:t,target:s,onProgress:n,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:i}),r.isDirty=!0}},{Atom:po}=y,lo=F,mo=t,uo=b,fo=q,go=L;var yo=class{#e;#t;#a;#o;#s;#n;#r;#i;#c;#p;#l;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new Ga,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:po,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 Wa(),this.#c=this.#t.buildId||Ka(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 mo({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 Ha(this.#y),await Xa(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 po.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"];Na.existsSync(e)&&Na.readdirSync(e).forEach((o=>{a.includes(o)||(t=za.rm("-rf",Ua.join(e,o)))}));let o=e;if(!Na.existsSync(o)&&(t=za.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=Ua.join(e,"src"),!Na.existsSync(o)&&(t=za.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=Ua.join(e,"src","default"),!Na.existsSync()&&(t=za.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Ja.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=lo({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 po.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await po.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await po.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=Ua.resolve(this.#t.projectSrcDir,"index.js"),a=await uo({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 fo({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=Ua.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=Ua.relative(Ua.join(this.#t.projectDir,"src","default"),e);if(!Na.existsSync(e)){Na.mkdirSync(Ua.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Na.writeFileSync(e,t,"utf8")}a.relativePath=t.split(Ua.sep).join("/"),this.#a.typesDir=`./types/${Ua.basename(o)}/src`}else{const e=Ua.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Na.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=Ja.compile(Na.readFileSync(Ua.resolve(t,Ua.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=Ua.resolve(o,Ua.join("src","default","index.js"));Na.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:Ba.stringify(o)},n=this.#t.templateDir,r=Ja.compile(Na.readFileSync(Ua.resolve(n,`${e}.njk`),"utf8"),this.#o).render(s),i=this.#t.projectDir,c=Ua.resolve(i,`${e}`);Na.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 po.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 po.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 co({...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 po.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await po.update(o,{id:o.id})):o=await po.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(go.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 oo(this.#y),await ao(this.#y),await to(this.#y),await eo(this.#y),await Qa(this.#y),await Ya(this.#y),await Va(this.#y),await Za(this.#y),await so(this.#y),await no(this.#y),this.#f&&(await ro(this.#y),await io(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 ho=l,wo=d;var vo=function({baseDir:e=__dirname}){let t=e;for(;t!==wo.parse(t).root;){const e=wo.join(t,"node_modules");if(ho.existsSync(e))return e;t=wo.dirname(t)}return null};const bo=process.cwd(),{spawn:_o}=e;t({name:["redis"],dir:bo,optional:!0});const jo=a,Do=o,ko=s,xo=n,So=r,Ao=i,Po=t,Io=c,Eo=p,To=yo,$o=vo({baseDir:__dirname}),Oo="win32"===process.platform?";":":";process.env.PATH=`${jo.join($o,"/.bin")}${Oo}${process.env.PATH}`;let Co=Do(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=jo.resolve($o,"@fnet/cli-project-node/dist/template/project"),a=jo.resolve(bo,e.name);ko.existsSync(a)||ko.mkdirSync(a),await Eo({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=So.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(So.which("git")&&(o=So.exec("git init --initial-branch=main",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(So.which("code")&&e.vscode&&(o=So.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=jo.resolve($o,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=jo.basename(a),e.update){if(await Eo({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==So.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 Mo(e),a=new To(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 Mo({...e,mode:"all"}),a=new To(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 Mo({...e,mode:"file"}),a=new To(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 Ro(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 Mo(e),{projectDir:s}=t,n=process.argv.slice(3);_o(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 Mo(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:jo.resolve($o,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:jo.resolve($o,"./@fnet/cli-project-common/dist/template/default"),projectDir:jo.resolve(bo,`./.output/${e.id}`),tags:e.ftag};{const t=await async function({tags:e}){const t=jo.resolve(bo,"node.yaml");if(!ko.existsSync(t))throw new Error("node.yaml file not found in current directory.");const{raw:a,parsed:o}=await Ao({file:t,tags:e}),s=jo.dirname(t),n={libraryAtom:{doc:{...o},fileName:"index"},projectDir:s,projectFilePath:t,projectFileContent:a,projectFileParsed:o};let r=jo.resolve(s,"fnet/targets.yaml");if(!ko.existsSync(r)&&(r=jo.resolve(s,"node.devops.yaml"),ko.existsSync(r))){const e=jo.resolve(s,"fnet");ko.existsSync(e)||ko.mkdirSync(e),ko.copyFileSync(r,jo.resolve(s,"fnet/targets.yaml")),ko.unlinkSync(r)}if(ko.existsSync(r)){const{raw:t,parsed:a}=await Ao({file:r,tags:e}),o=xo.parseDocument(t);n.devops={filePath:r,fileContent:t,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{ko.writeFileSync(n.devops.filePath,o.toString())}}}const i=jo.resolve(s,"readme.md");if(ko.existsSync(i)){const e=ko.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:jo.resolve($o,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:jo.resolve($o,"./@fnet/cli-project-common/dist/template/default"),projectDir:jo.resolve(t.projectDir,"./.workspace"),projectSrcDir:jo.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}Co=Co.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 Mo(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 Io({schema:n,format:"yaml"}),i=jo.resolve(o,".fnet");ko.existsSync(i)||ko.mkdirSync(i);const c=jo.resolve(i,`${e.name}.fnet`);ko.writeFileSync(c,r)}catch(e){console.error(e.message),process.exit(1)}})),Co=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 Mo(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=jo.resolve(o,".fnet"),i=jo.resolve(r,`${e.name}.fnet`),c=await Io({schema:n,format:"yaml",ref:i});ko.existsSync(r)||ko.mkdirSync(r),ko.writeFileSync(i,c)}catch(e){console.error(e.message),process.exit(1)}}))}(Co),Co=Ro(Co,{bin:"npm"}),Co=Ro(Co,{bin:"node"}),Co=Ro(Co,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Co=Ro(Co,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Co=Ro(Co,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Co=Ro(Co,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Co=Ro(Co,{bin:"npx"}),Co=Ro(Co,{bin:"cdk"}),Co=Ro(Co,{bin:"aws"}),Co=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 Mo(e),{projectDir:o}=t,s=e.config,n=await Po({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);_o(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)}}))}(Co,{name:"with"}),Co.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");require("@fnet/yargs-options-from-schema");var j=require("@fnet/shell"),D=require("semver"),k=require("@fnet/up-list-files"),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=v;var W=({feature:e,features:t,packageDevDependencies:a})=>{const{name:o,packages:s,options:n,extraCheck:r,explicit:i}=e,c=`${o}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=n||{};const m=t[o]?.options;m&&(d=J(d,m));const u=!t[o]||!1===t[o]?.enabled;l.forEach((e=>{const a=t.rollup_output[e];if(a){if(Reflect.has(a,o)){if(u||!a[o]||!1===a[o]?.enabled)return void delete a[o];!0===a[o]&&(a[o]={enabled:!0,options:d})}else{if(u||i||!1===t[c])return;a[o]={enabled:!0}}a[o]=a[o]||{},a[o].options={...d,...a[o].options}}}));let f=l.some((e=>!0===t.rollup_output[e][o]?.enabled));r&&(f=r()&&f),t[c]=f,f&&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}},explicit:!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"]],explicit:!0},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"]],expilicit:!0},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},explicit:!0},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,Se=p;const Ae=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;const Be=l,ze=d,Je=m;const We=l,Ke=d,Ge=m;const He=m,Xe=l,Ye=d,Ze=i;const Qe=r,Ve=a;const et=r;const tt=r;const at=r;const ot=j,st=t;const nt=l,rt=d,it=D,ct=j,pt=t;const lt=l,dt=d,mt=D,ut=r,ft=t,gt=k,yt=c,ht=n;const wt=l,vt=d,bt=x,_t=m,jt=S,Dt=t;const kt=s,xt=a,St=t;const At=t,Pt=A,It=P,Et=D;const Tt=t,$t=I,Ot=P,Ct=D;const Rt=t,Mt=E,Ft=P,qt=D;const Lt=t,Nt=T,Ut=P,Bt=D;const zt=t,Jt=$,Wt=P,Kt=D;const Gt=t,Ht=O,Xt=P,Yt=D;const Zt=l,Qt=d,Vt=D,ea=j,ta=t,aa=h.default;const oa=D,sa=t,na=h.default;const ra=D,ia=t,ca=h.default,pa=s,la=j,da=C;const ma=D,ua=t,fa=h.default,ga=s,ya=j,ha=C;const wa=t,va=R,ba=P,_a=D;const ja=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 st({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 ot({cmd:r}),a.isDirty=!0)},Da=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=rt.resolve(r,"package.json"),c=nt.readFileSync(i),p=JSON.parse(c);p.name=o.params.name,p.version=it.inc(o.version,"patch"),delete p.scripts,delete p.devDependencies,nt.writeFileSync(i,JSON.stringify(p,null,"\t"));const{file:l,data:d}=await pt({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='${rt.resolve(rt.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 ct({cmd:m}),nt.writeFileSync(i,c),!0!==o.dryRun&&(a.isDirty=!0,o.version=p.version,n.set("version",p.version),await s({target:o,packageJSON:p}))},ka=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=dt.resolve(r,"package.json"),c=lt.readFileSync(i),p=JSON.parse(c);p.name=s.params.name,p.version=mt.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 ."},lt.writeFileSync(i,JSON.stringify(p,null,"\t"));const d=s.config||"npm";let m=(await ft({name:d,dir:a.projectDir,tags:a.tags,optional:!0}))?.data;if(!m){const e=gt({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===e.length)throw new Error("Couldnt find schema to create npm config");const t=await yt({schema:e[0],tags:a.tags}),o=a.project.projectDir,s=dt.resolve(o,".fnet");lt.existsSync(s)||lt.mkdirSync(s),lt.writeFileSync(dt.resolve(s,`${d}.fnet`),ht.stringify(t)),m=t}if(lt.writeFileSync(dt.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${m.env.NPM_TOKEN}`),!0!==s.dryRun){if(0!==ut.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");lt.writeFileSync(i,c),o.isDirty=!0,s.version=p.version,n.set("version",p.version)}},xa=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||jt.util.generateId(),label:`${l}/${e.id?e.id:bt.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:jt.util.generateId(),name:e.doc.name,initialize:{content:wt.readFileSync(vt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:jt.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:jt.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||jt.util.generateId(),label:`${l}/${e.id?e.id:bt.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:jt.util.generateId(),name:e.doc.name,initialize:{content:wt.readFileSync(vt.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"!==s.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||jt.util.generateId(),label:`${l}/${e.id?e.id:bt.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:jt.util.generateId(),name:e.doc.name,initialize:{content:wt.readFileSync(vt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:jt.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:jt.util.generateId()},debug:{id:jt.util.generateId()}}}}let m=_t.compile(wt.readFileSync(vt.resolve(p,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(wt.writeFileSync(vt.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=(await Dt({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}},Sa=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 St({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:kt.readFileSync(xt.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:kt.readFileSync(xt.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:kt.readFileSync(xt.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})},Aa=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 At({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Et.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=It(t.params);p.dependencies=It(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Pt(l)}},Pa=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 Tt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Ct.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Ot(t.params);p.dependencies=Ot(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await $t(l)}},Ia=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 Rt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=qt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Ft(t.params);p.dependencies=Ft(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Mt(l)}},Ea=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 Lt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Bt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Ut(t.params);p.dependencies=Ut(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Nt(l)}},Ta=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 zt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Kt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Wt(t.params);p.dependencies=Wt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Jt(l)}},$a=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 Gt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=Yt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=Xt(t.params);p.dependencies=Xt(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await Ht(l)}},Oa=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,yamlTarget:s})=>{await e({message:"Deploying it as fnet package."});const n=t.projectDir,r=Qt.resolve(n,"package.json"),i=Zt.readFileSync(r),c=JSON.parse(i);c.name=o.params.name,c.version=Vt.inc(o.version,"patch"),delete c.scripts,delete c.devDependencies,Zt.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:p,data:l}=await ta({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 aa({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='${Qt.resolve(Qt.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 ea({cmd:y}),Zt.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 aa({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.")},Ca=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 sa({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 na({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=oa.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 na({method:"POST",url:u,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),l.data?.error)throw new Error("Error publishing fnet form.")},Ra=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 ia({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 ca({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=ra.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 ca({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 la({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new da;w.append("file",pa.createReadStream(h));const v=await ca.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.")},Ma=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 ua({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 fa({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=ma.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 fa({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 ya({cmd:g});if(0!==y.code)throw new Error(y.stderr);const h=JSON.parse(y.stdout).path;let w=new ha;w.append("file",ga.createReadStream(h));const v=await fa.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.")},Fa=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 wa({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:n.tags}):void 0,c=_a.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,r.set("version",c);const p=ba(t.params);p.dependencies=ba(s);const l={atom:e,params:p,config:i?.config,src:o,dest:o};return{deployer:await va(l)}};const qa=l,La=d,Na=n,Ua=r,Ba=m,za=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:Ja}=g,Wa=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)}))}))}},Ka=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||"",s.json=s.cli.enabled||s.json;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)},Ga=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:"@fnet/args",version:"^0.1"}),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"})},Ha=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})},Xa=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)}}},Ya=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})},Za=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")},Qa=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=[];if(e.doc.input?s=e.doc.input: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 i={options:s,imports:r,atom:e},c=a.templateDir,p=Ue.compile(Le.readFileSync(Ne.resolve(c,"src/default/to.args.js.njk"),"utf8"),o).render(i),l=a.projectDir,d=Ne.resolve(l,"src/default/to.args.js");Le.writeFileSync(d,p,"utf8")},Va=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},n=a.templateCommonDir,r=Je.compile(Be.readFileSync(ze.resolve(n,".gitignore.njk"),"utf8"),Je.configure(n)).render(s),i=a.projectDir,c=ze.resolve(i,".gitignore");Be.writeFileSync(c,r,"utf8")},eo=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=Ge.compile(We.readFileSync(Ke.resolve(n,"tsconfig.json.njk"),"utf8"),Ge.configure(n)).render(s),i=a.projectDir,c=Ke.resolve(i,"tsconfig.json");We.writeFileSync(c,r,"utf8")},to=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=Ye.resolve(t.project.projectDir,"fnet/how-to.md");if(Xe.existsSync(o)){const e=Xe.readFileSync(o,"utf8");a.howto=e}const n=Ye.resolve(t.project.projectDir,"fnet/input.yaml");if(Xe.existsSync(n)){const e=await Ze({file:n,tags:t.tags});a.input=e.content}const r=t.templateCommonDir,i=He.compile(Xe.readFileSync(Ye.resolve(r,`${s}.njk`),"utf8"),He.configure(r)).render(a),c=Ye.resolve(e,`${s}`);Xe.writeFileSync(c,i,"utf8")}else if(e.id){const a=await o.first({type:"wiki",parent_id:e.id});if(!a||"markdown"!==a.doc?.["content-type"])return;const{content:n,...r}=a.doc,i={content:n},c=t.templateCommonDir,p=He.compile(Xe.readFileSync(Ye.resolve(c,`${s}.njk`),"utf8"),He.configure(c)).render(i),l=t.projectDir,d=Ye.resolve(l,`${s}`);Xe.writeFileSync(d,p,"utf8")}},ao=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=Ve.join("src","**","*");if(0!==Qe.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},oo=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!==et.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},so=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==tt.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},no=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==at.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},ro=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 Sa({...e});else if("red"===s.type)await xa({...e});else if("npm"===s.type)await ka({...e});else if("gcs"===s.type)await Da({...e});else if("gitlab"===s.type)await ja({...e});else if("fnet-package"===s.type)await Oa({...e});else if("fnet-form"===s.type)await Ca({...e});else if("fnet-node"===s.type)await Ma({...e});else if("fnet-flow"===s.type)await Ra({...e});else{let e;if("nextjs"===s.type?e=Ta:"webos"===s.type?e=Ea:"electron"===s.type?e=Ia:"docker"===s.type?e=$a:"ios"===s.type?e=Aa:"macos"===s.type?e=Pa:"rust"===s.type&&(e=Fa),!e)return;await e({atom:t,target:s,onProgress:n,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:i}),r.isDirty=!0}},{Atom:io}=y,co=M,po=t,lo=b,mo=F,uo=q;var fo=class{#e;#t;#a;#o;#s;#n;#r;#i;#c;#p;#l;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new Wa,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:io,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 za(),this.#c=this.#t.buildId||Ja(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 po({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 Ka(this.#y),await Ga(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 io.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"];qa.existsSync(e)&&qa.readdirSync(e).forEach((o=>{a.includes(o)||(t=Ua.rm("-rf",La.join(e,o)))}));let o=e;if(!qa.existsSync(o)&&(t=Ua.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=La.join(e,"src"),!qa.existsSync(o)&&(t=Ua.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=La.join(e,"src","default"),!qa.existsSync()&&(t=Ua.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Ba.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=co({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 io.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await io.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await io.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=La.resolve(this.#t.projectSrcDir,"index.js"),a=await lo({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 mo({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=La.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=La.relative(La.join(this.#t.projectDir,"src","default"),e);if(!qa.existsSync(e)){qa.mkdirSync(La.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",qa.writeFileSync(e,t,"utf8")}a.relativePath=t.split(La.sep).join("/"),this.#a.typesDir=`./types/${La.basename(o)}/src`}else{const e=La.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;qa.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=Ba.compile(qa.readFileSync(La.resolve(t,La.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=La.resolve(o,La.join("src","default","index.js"));qa.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:Na.stringify(o)},n=this.#t.templateDir,r=Ba.compile(qa.readFileSync(La.resolve(n,`${e}.njk`),"utf8"),this.#o).render(s),i=this.#t.projectDir,c=La.resolve(i,`${e}`);qa.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 io.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 io.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 ro({...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 io.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await io.update(o,{id:o.id})):o=await io.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(uo.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 to(this.#y),await eo(this.#y),await Va(this.#y),await Qa(this.#y),await Ya(this.#y),await Ha(this.#y),await Za(this.#y),await Xa(this.#y),await ao(this.#y),await oo(this.#y),this.#f&&(await so(this.#y),await no(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 go=l,yo=d;var ho=function({baseDir:e=__dirname}){let t=e;for(;t!==yo.parse(t).root;){const e=yo.join(t,"node_modules");if(go.existsSync(e))return e;t=yo.dirname(t)}return null};const wo=process.cwd(),{spawn:vo}=e;t({name:["redis"],dir:wo,optional:!0});const bo=a,_o=o,jo=s,Do=n,ko=r,xo=i,So=t,Ao=c,Po=p,Io=fo,Eo=ho({baseDir:__dirname}),To="win32"===process.platform?";":":";process.env.PATH=`${bo.join(Eo,"/.bin")}${To}${process.env.PATH}`;let $o=_o(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=bo.resolve(Eo,"@fnet/cli-project-node/dist/template/project"),a=bo.resolve(wo,e.name);jo.existsSync(a)||jo.mkdirSync(a),await Po({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=ko.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(ko.which("git")&&(o=ko.exec("git init --initial-branch=main",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(ko.which("code")&&e.vscode&&(o=ko.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=bo.resolve(Eo,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=bo.basename(a),e.update){if(await Po({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==ko.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 Co(e),a=new Io(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 Co({...e,mode:"all"}),a=new Io(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 Co({...e,mode:"file"}),a=new Io(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 Oo(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 Co(e),{projectDir:s}=t,n=process.argv.slice(3);vo(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 Co(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:bo.resolve(Eo,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:bo.resolve(Eo,"./@fnet/cli-project-common/dist/template/default"),projectDir:bo.resolve(wo,`./.output/${e.id}`),tags:e.ftag};{const t=await async function({tags:e}){const t=bo.resolve(wo,"node.yaml");if(!jo.existsSync(t))throw new Error("node.yaml file not found in current directory.");const{raw:a,parsed:o}=await xo({file:t,tags:e}),s=bo.dirname(t),n={libraryAtom:{doc:{...o},fileName:"index"},projectDir:s,projectFilePath:t,projectFileContent:a,projectFileParsed:o};let r=bo.resolve(s,"fnet/targets.yaml");if(!jo.existsSync(r)&&(r=bo.resolve(s,"node.devops.yaml"),jo.existsSync(r))){const e=bo.resolve(s,"fnet");jo.existsSync(e)||jo.mkdirSync(e),jo.copyFileSync(r,bo.resolve(s,"fnet/targets.yaml")),jo.unlinkSync(r)}if(jo.existsSync(r)){const{raw:t,parsed:a}=await xo({file:r,tags:e}),o=Do.parseDocument(t);n.devops={filePath:r,fileContent:t,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{jo.writeFileSync(n.devops.filePath,o.toString())}}}const i=bo.resolve(s,"readme.md");if(jo.existsSync(i)){const e=jo.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:bo.resolve(Eo,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:bo.resolve(Eo,"./@fnet/cli-project-common/dist/template/default"),projectDir:bo.resolve(t.projectDir,"./.workspace"),projectSrcDir:bo.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}$o=$o.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 Co(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 Ao({schema:n,format:"yaml"}),i=bo.resolve(o,".fnet");jo.existsSync(i)||jo.mkdirSync(i);const c=bo.resolve(i,`${e.name}.fnet`);jo.writeFileSync(c,r)}catch(e){console.error(e.message),process.exit(1)}})),$o=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 Co(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=bo.resolve(o,".fnet"),i=bo.resolve(r,`${e.name}.fnet`),c=await Ao({schema:n,format:"yaml",ref:i});jo.existsSync(r)||jo.mkdirSync(r),jo.writeFileSync(i,c)}catch(e){console.error(e.message),process.exit(1)}}))}($o),$o=Oo($o,{bin:"npm"}),$o=Oo($o,{bin:"node"}),$o=Oo($o,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),$o=Oo($o,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),$o=Oo($o,{name:"app",bin:"npm",preArgs:["run","app","--"]}),$o=Oo($o,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),$o=Oo($o,{bin:"npx"}),$o=Oo($o,{bin:"cdk"}),$o=Oo($o,{bin:"aws"}),$o=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 Co(e),{projectDir:o}=t,s=e.config,n=await So({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);vo(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)}}))}($o,{name:"with"}),$o.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"),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"),S=require("semver"),P=require("@fnet/up-list-files"),A=require("node:os"),T=require("@node-red/util"),E=require("@flownet/lib-to-ios-app"),$=require("@flownet/lib-to-macos-app"),O=require("@flownet/lib-to-electron"),I=require("@flownet/lib-to-webos"),C=require("@flownet/lib-to-nextjs"),N=require("@flownet/lib-to-docker"),R=require("form-data"),M=require("@fnet/to-rust"),F=require("@flownet/lib-parse-node-url"),q=require("@flownet/lib-bpmn-from-flow"),U=require("@fnet/expression"),L=require("chalk"),B=require("lodash.pick"),J=require("lodash.omit");const z=g,W=h;const{Api:K}=w,G=v.default,H=b;const V=x;var X=({feature:e,features:t,packageDevDependencies:n})=>{const{name:o,packages:i,options:a,extraCheck:s,explicit:r}=e,c=`${o}_enabled`,l=t.rollup_output||{},p=Object.keys(l);let d=a||{};const f=t[o]?.options;f&&(d=V(d,f));const m=!t[o]||!1===t[o]?.enabled;p.forEach((e=>{const n=t.rollup_output[e];if(n){if(Reflect.has(n,o)){if(m||!n[o]||!1===n[o]?.enabled)return void delete n[o];!0===n[o]&&(n[o]={enabled:!0,options:d})}else{if(m||r||!1===t[c])return;n[o]={enabled:!0}}n[o]=n[o]||{},n[o].options={...d,...n[o].options}}}));let u=p.some((e=>!0===t.rollup_output[e][o]?.enabled));s&&(u=s()&&u),t[c]=u,u&&i.forEach((e=>n.push({package:e[0],version:e[1]})))};const Y=X;const Z=X;const Q=X;const ee=X;const te=X;const ne=X;const oe=X;const ie=X;const ae=X;const se=X;const re=X;const ce=X;const le=X;const pe=x,de=p,fe=d,me=k,ue=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;Y({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}},explicit:!0},features:o,packageDevDependencies:n})},ge=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;Z({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:o,packageDevDependencies:n})},he=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;Q({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.3"]]},features:o,packageDevDependencies:n})},ye=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ee({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:o,packageDevDependencies:n})},we=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;te({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:o,packageDevDependencies:n})},ve=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ne({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:o,packageDevDependencies:n})},be=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;oe({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:n})},xe=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ie({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:n})},ke=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;ae({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:n})},je=e=>{const{atom:t,packageDevDependencies:n}=e,o=t.doc.features;se({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;re({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:o,packageDevDependencies:n})},De=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)),ce({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:o,packageDevDependencies:n})},Se=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"])}}))}le({feature:{name:"css",packages:a},features:o,packageDevDependencies:n})};function Pe({dir:e,name:t="index"}){let n=fe.resolve(e,`./${t}.tsx`);if(de.existsSync(n)||(n=fe.resolve(e,`./${t}.ts`)),de.existsSync(n)||(n=fe.resolve(e,`./${t}.jsx`)),de.existsSync(n)||(n=fe.resolve(e,`./${t}.js`)),!de.existsSync(n))return{};const o=n,i=fe.extname(n);return{file:o,ext:i,ts:".ts"===i||".tsx"===i,name:t}}const Ae=j;const Te=p,Ee=d,$e=l;const Oe=f,Ie=p,Ce=d,Ne=k,Re=j;const Me=p,Fe=d,qe=l;const Ue=p,Le=d,Be=f,Je=k;const ze=p,We=d,Ke=f,Ge=_;const He=p,Ve=d,Xe=f;const Ye=p,Ze=d,Qe=f;const et=f,tt=p,nt=d,ot=r;const it=s,at=n;const st=s;const rt=s;const ct=s;const lt=D,pt=t;const dt=p,ft=d,mt=S,ut=D,gt=t;const ht=p,yt=d,wt=S,vt=s,bt=t,xt=P,kt=c,jt=a;const _t=p,Dt=d,St=A,Pt=f,At=T,Tt=t;const Et=i,$t=n,Ot=t;const It=t,Ct=E,Nt=m,Rt=S;const Mt=t,Ft=$,qt=m,Ut=S;const Lt=t,Bt=O,Jt=m,zt=S;const Wt=t,Kt=I,Gt=m,Ht=S;const Vt=t,Xt=C,Yt=m,Zt=S;const Qt=t,en=N,tn=m,nn=S;const on=p,an=d,sn=S,rn=D,cn=t,ln=v.default;const pn=S,dn=t,fn=v.default;const mn=S,un=t,gn=v.default,hn=i,yn=D,wn=R;const vn=S,bn=t,xn=v.default,kn=i,jn=D,_n=R;const Dn=t,Sn=M,Pn=m,An=S;const Tn=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 pt({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 lt({cmd:s}),n.isDirty=!0)},En=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=ft.resolve(s,"package.json"),c=dt.readFileSync(r),l=JSON.parse(c);l.name=o.params.name,l.version=mt.inc(o.version,"patch"),delete l.scripts,delete l.devDependencies,dt.writeFileSync(r,JSON.stringify(l,null,"\t"));const{file:p,data:d}=await gt({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='${ft.resolve(ft.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 ut({cmd:f}),dt.writeFileSync(r,c),!0!==o.dryRun&&(n.isDirty=!0,o.version=l.version,a.set("version",l.version),await i({target:o,packageJSON:l}))},$n=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=yt.resolve(s,"package.json"),c=ht.readFileSync(r),l=JSON.parse(c);l.name=i.params.name,l.version=wt.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 ."},ht.writeFileSync(r,JSON.stringify(l,null,"\t"));const d=i.config||"npm";let f=(await bt({name:d,dir:n.projectDir,tags:n.tags,optional:!0}))?.data;if(!f){const e=xt({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===e.length)throw new Error("Couldnt find schema to create npm config");const t=await kt({schema:e[0],tags:n.tags}),o=n.project.projectDir,i=yt.resolve(o,".fnet");ht.existsSync(i)||ht.mkdirSync(i),ht.writeFileSync(yt.resolve(i,`${d}.fnet`),jt.stringify(t)),f=t}if(ht.writeFileSync(yt.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${f.env.NPM_TOKEN}`),!0!==i.dryRun){if(0!==vt.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");ht.writeFileSync(r,c),o.isDirty=!0,i.version=l.version,a.set("version",l.version)}},On=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||At.util.generateId(),label:`${p}/${e.id?e.id:St.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:At.util.generateId(),name:e.doc.name,initialize:{content:_t.readFileSync(Dt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:At.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:At.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||At.util.generateId(),label:`${p}/${e.id?e.id:St.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:At.util.generateId(),name:e.doc.name,initialize:{content:_t.readFileSync(Dt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:At.util.generateId(),schedules:t},debug:{id:At.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||At.util.generateId(),label:`${p}/${e.id?e.id:St.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:At.util.generateId(),name:e.doc.name,initialize:{content:_t.readFileSync(Dt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:At.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:At.util.generateId()},debug:{id:At.util.generateId()}}}}let f=Pt.compile(_t.readFileSync(Dt.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(_t.writeFileSync(Dt.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;o.isDirty=!0;const m=(await Tt({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}},In=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 Ot({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:Et.readFileSync($t.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Et.readFileSync($t.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Et.readFileSync($t.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})},Cn=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 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)}},Nn=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 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)}},Rn=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 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)}},Mn=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 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)}},Fn=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 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)}},qn=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 Qt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=nn.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=tn(t.params);l.dependencies=tn(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await en(p)}},Un=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet package."});const a=t.projectDir,s=an.resolve(a,"package.json"),r=on.readFileSync(s),c=JSON.parse(r);c.name=o.params.name,c.version=sn.inc(o.version,"patch"),delete c.scripts,delete c.devDependencies,on.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await cn({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 ln({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='${an.resolve(an.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 rn({cmd:h}),on.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 ln({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.")},Ln=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 dn({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 fn({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=pn.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 fn({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.")},Bn=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 un({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 gn({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=mn.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 gn({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${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 yn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const y=JSON.parse(h.stdout).path;let w=new wn;w.append("file",hn.createReadStream(y));const v=await gn.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.")},Jn=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 bn({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 xn({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=vn.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 xn({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 jn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const y=JSON.parse(h.stdout).path;let w=new _n;w.append("file",kn.createReadStream(y));const v=await xn.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.")},zn=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 Dn({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=An.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Pn(t.params);l.dependencies=Pn(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Sn(p)}};const Wn=m;async function Kn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Wn(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||Wn(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await o(t.definition.condition));await t({node:e}),n({node:e})}var Gn={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=Kn},resolve:Kn};const Hn=U,Vn=Gn;var Xn={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>Hn({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=>Hn({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 Vn.init(e)}};const Yn=m;async function Zn({node:e,resolveTypeCommon:t,resolveNextBlock:n}){if(e.context.transform=e.context.transform||Yn(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||Yn(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),n({node:e})}var Qn={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=Zn},resolve:Zn};const eo=m;async function to({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=eo(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 no={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=to},resolve:to};const oo=m,io=B,ao=J;async function so({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||oo(e.definition);e.context.transform.for.in=await o(e.definition.for.in),await t({node:e}),n({node:e})}var ro={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]=[io(e.definition.for,t),ao(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=so},resolve:so};var co={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 lo=m;async function po({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||lo(e.definition);const o=e.context.transform;o.raise=await n(o.raise),await t({node:e})}var fo={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=po},resolve:po};const mo=m;async function uo({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||mo(e.definition);const o=e.context.transform;o.return=await n(o.return),await t({node:e})}var go={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=uo},resolve:uo};const ho=m;async function yo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||ho(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 wo={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=yo},resolve:yo};const vo=wo;var bo={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 vo.init(e)}};const xo=wo;var ko={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 xo.init(e)}};const jo=wo;var _o={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 jo.init(e)}};async function Do({node:e}){e.context.next=e.childs[0]}var So={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=Do},resolve:Do};const Po=m;async function Ao({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Po(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 To={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=Ao},resolve:Ao};const Eo=m;async function $o({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){e.context.transform=e.context.transform||Eo(e.definition),await t({node:e})}var Oo={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=$o},resolve:$o};const Io=m;async function Co({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Io(e.definition);const i=e.context.transform;i.next=await o(i.next),await t({node:e}),n({node:e})}var No={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Co},resolve:Co};const Ro=wo;var Mo={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 Ro.init(e)}};const Fo=wo;var qo={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 Fo.init(e)}};const Uo=wo;var Lo={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 Uo.init(e)}};const Bo=p,Jo=d,zo=a,Wo=s,Ko=f,Go=m,Ho=u,Vo=async()=>{if(!await W({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=z.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Xo}=y,Yo=class{init({config:e,accessToken:t}){return new Promise(((n,o)=>{if(K.set_api_url(e.data.url),t)return K.set_req_token(t),void n(t);G({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:H.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{K.set_req_token(e.data.access_token),n(e.data.access_token)})).catch((e=>{K.set_req_token(),o(e)}))}))}},Zo=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=fe.resolve(n.project.projectDir),s=Pe({dir:fe.resolve(a,"./app")});if(s.file){let e=await me({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 me({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:fe.resolve(a,"./cli")});if(r.file){let e=await me({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 me({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:fe.resolve(a,"./src")});if(e.file){let t=await me({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 me({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:`${fe.normalize(i.app.dir||".")}`,files:[fe.normalize("./dist/**/*")],cors:!0,open:!1};i.babel_options=pe({targets:{browsers:"last 9 versions, not dead",node:"18"}},i.babel_options||i.babel?.options),i.browsersync_options=pe(d,i.browsersync_options||i.browsersync?.options||{}),i.replace_options=pe({},i.replace_options||i.replace?.options||{}),Reflect.has(i.browsersync_options,"proxy")&&delete i.browsersync_options.server,i.rollup=i.rollup||{},i.rollup_output=pe(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=pe(i.browsersync_options,t.browsersync_options),t.replace_options=pe(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,Se(e),De(e),_e(e),je(e),ke(e),be(e),xe(e),ve(e),we(e),ye(e),he(e),ue(e),ge(e)},Qo=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 Ae({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"})},ei=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=Ee.resolve(n.projectDir,"src/app");Te.existsSync(s)||Te.mkdirSync(s,{recursive:!0});let r=["index.js.njk"];!1!==e.doc.features.app.html&&r.push("index.html.njk"),await $e({pattern:r,dir:Ee.resolve(a,"src/app"),outDir:s,context:i})},ti=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:Ce.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&r.push({file:Ce.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(!Ie.existsSync(i))throw new Error(`App file not found: ${i}`);const a=await Ne({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 Re({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=Oe.compile(Ie.readFileSync(Ce.resolve(l,"package.json.njk"),"utf8"),Oe.configure(l)).render(c),d=t.projectDir,f=Ce.resolve(d,"package.json");Ie.writeFileSync(f,p,"utf8");const m=Ce.resolve(t.project.projectDir,"fnet");if(Ie.existsSync(m)){const e=Ce.resolve(t.projectDir,"fnet");Ie.existsSync(e)||Ie.mkdirSync(e);const n=Ie.readdirSync(m);for(const t of n){const n=Ce.resolve(m,t);if(!Ie.lstatSync(n).isFile())continue;const o=Ce.resolve(e,t);Ie.copyFileSync(n,o)}}},ni=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=Fe.resolve(n.projectDir,"src/cli");Me.existsSync(s)||Me.mkdirSync(s,{recursive:!0}),await qe({pattern:["index.js.njk"],dir:Fe.resolve(a,"src/cli"),outDir:s,context:i})},oi=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:o},a=Le.resolve(n.projectDir,"src","default/index.js");if(!Ue.existsSync(a))throw new Error(`Entry file not found: ${a}`);const s=(await Je({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=Be.compile(Ue.readFileSync(Le.resolve(l,"rollup.config.mjs.njk"),"utf8"),Be.configure(l)).render(i);const d=n.projectDir;let f=Le.resolve(d,"rollup.config.mjs");Ue.writeFileSync(f,p,"utf8")},ii=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 Ge({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=Ke.compile(ze.readFileSync(We.resolve(l,"src/default/to.args.js.njk"),"utf8"),o).render(c),d=n.projectDir,f=We.resolve(d,"src/default/to.args.js");ze.writeFileSync(f,p,"utf8")},ai=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:o},a=n.templateCommonDir,s=Xe.compile(He.readFileSync(Ve.resolve(a,".gitignore.njk"),"utf8"),Xe.configure(a)).render(i),r=n.projectDir,c=Ve.resolve(r,".gitignore");He.writeFileSync(c,s,"utf8")},si=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=Qe.compile(Ye.readFileSync(Ze.resolve(a,"tsconfig.json.njk"),"utf8"),Qe.configure(a)).render(i),r=n.projectDir,c=Ze.resolve(r,"tsconfig.json");Ye.writeFileSync(c,s,"utf8")},ri=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=nt.resolve(t.project.projectDir,"fnet/how-to.md");if(tt.existsSync(o)){const e=tt.readFileSync(o,"utf8");n.howto=e}const a=nt.resolve(t.project.projectDir,"fnet/input.yaml");if(tt.existsSync(a)){const e=await ot({file:a,tags:t.tags});n.input=e.content}const s=t.templateCommonDir,r=et.compile(tt.readFileSync(nt.resolve(s,`${i}.njk`),"utf8"),et.configure(s)).render(n),c=nt.resolve(e,`${i}`);tt.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=et.compile(tt.readFileSync(nt.resolve(c,`${i}.njk`),"utf8"),et.configure(c)).render(r),p=t.projectDir,d=nt.resolve(p,`${i}`);tt.writeFileSync(d,l,"utf8")}},ci=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Prettifiying source files."});let o=at.join("src","**","*");if(0!==it.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n}).code)throw new Error("Couldnt format files.")},li=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!==st.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},pi=async({setInProgress:e,atom:t,context:n})=>{const o=n.projectDir;await e({message:"Installing npm packages."});if(0!==rt.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},di=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Building main project."});if(0!==ct.exec("npm run build",{cwd:n}).code)throw new Error("Couldnt build project.")},fi=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 In({...e});else if("red"===i.type)await On({...e});else if("npm"===i.type)await $n({...e});else if("gcs"===i.type)await En({...e});else if("gitlab"===i.type)await Tn({...e});else if("fnet-package"===i.type)await Un({...e});else if("fnet-form"===i.type)await Ln({...e});else if("fnet-node"===i.type)await Jn({...e});else if("fnet-flow"===i.type)await Bn({...e});else{let e;if("nextjs"===i.type?e=Fn:"webos"===i.type?e=Mn:"electron"===i.type?e=Rn:"docker"===i.type?e=qn:"ios"===i.type?e=Cn:"macos"===i.type?e=Nn:"rust"===i.type&&(e=zn),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),s.isDirty=!0}},{Atom:mi}=w,ui=F,gi=j,hi=q,yi=t,wi=k,vi=U,bi=r,xi=L,ki=Xn,ji=Qn,_i=no,Di=ro,Si=Gn,Pi=co,Ai=fo,Ti=go,Ei=wo,$i=bo,Oi=ko,Ii=_o,Ci=So,Ni=To,Ri=Oo,Mi=No,Fi=Mo,qi=qo,Ui=Lo,Li=({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 Bi=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 Yo,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:mi,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#b={initNode:this.initNode.bind(this),cloneDeep:Go,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Li,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 Vo(),this.#p=this.#t.buildId||Xo(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 yi({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 Zo(this.#v),await Qo(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 mi.get({id:e}),this.#o="string"==typeof this.#n.doc.content?(await bi({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),Bo.statSync(e).isDirectory()?(Bo.readdirSync(e).forEach((t=>{const n=Jo.join(e,t);this.#x(n)})),Bo.rmSync(e)):Bo.unlinkSync(e)}#k(e,t){const n=Bo.existsSync(e),o=n&&Bo.statSync(e);n&&o.isDirectory()?(Bo.mkdirSync(t,{recursive:!0}),Bo.readdirSync(e).forEach((n=>{this.#k(Jo.join(e,n),Jo.join(t,n))}))):Bo.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,n=["node_modules"];if(Bo.existsSync(e)){const t=Bo.readdirSync(e);for(const o of t)if(!n.includes(o)){const t=Jo.join(e,o);Bo.rmSync(t,{recursive:!0})}}Bo.existsSync(e)||Bo.mkdirSync(e,{recursive:!0});const o=Jo.join(e,"src");Bo.existsSync(o)||Bo.mkdirSync(o,{recursive:!0});const i=Jo.join(o,"core");this.#k(t,i);const a=Jo.join(o,"default","blocks");Bo.existsSync(a)||Bo.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=Ko.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 ji.hits(t))await ji.init(t);else if(await Di.hits(t))await Di.init(t);else if(await Si.hits(t))await Si.init(t);else if(await ki.hits(t))await ki.init(t);else if(await Pi.hits(t))await Pi.init(t);else if(await _i.hits(t))await _i.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 Ei.hits(t))await Ei.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 Ii.hits(t))await Ii.init(t);else if(await qi.hits(t))await qi.init(t);else if(await Ui.hits(t))await Ui.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 Fi.hits(t))await Fi.init(t);else if(await Ci.hits(t))await Ci.init(t);else{if(!await Mi.hits(t))throw new Error("Undefined step type.");await Mi.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=Jo.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=Xo(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=ui({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 mi.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await mi.first({where:{name:t[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await mi.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===n.protocol){const e=Jo.resolve(this.#t.projectSrcDir,`${n.pathname}.js`),t=[],o=await wi({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 gi({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 gi({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=Go(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=Jo.resolve(this.#t.projectSrcDir,`${n.fileName||n.name}.js`),t=Jo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!Bo.existsSync(e)){Bo.mkdirSync(Jo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Bo.writeFileSync(e,t,"utf8")}n.relativePath=t.split(Jo.sep).join("/"),this.#n.typesDir=`./types/${Jo.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;Bo.writeFileSync(Jo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,n=Ko.compile(Bo.readFileSync(Jo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),o=this.#t.projectDir,i=Jo.resolve(o,"src/default/index.js");Bo.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=Ko.compile(Bo.readFileSync(Jo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),o=this.#t.projectDir,i=Jo.resolve(o,`src/default/${e.codeKey}.js`);Bo.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=Ko.compile(Bo.readFileSync(Jo.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=Jo.resolve(t,`src/default/blocks/${n}`);Bo.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(Ho(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 vi({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:zo.stringify(o)},a=this.#t.templateDir,s=Ko.compile(Bo.readFileSync(Jo.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=Jo.resolve(r,`${e}`);Bo.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const n={content:zo.stringify(this.#o)},o=this.#t.templateDir,i=Ko.compile(Bo.readFileSync(Jo.resolve(o,`${e}.njk`),"utf8"),this.#i).render(n),a=this.#t.projectDir,s=Jo.resolve(a,`${e}`);Bo.writeFileSync(s,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=Wo.exec("prettier --write .",{cwd:Jo.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 mi.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 mi.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 fi({...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 mi.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await mi.update(o,{id:o.id})):o=await mi.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(xi.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 hi({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;Bo.writeFileSync(Jo.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 ri(this.#v),await si(this.#v),await ai(this.#v),await ii(this.#v),await ni(this.#v),await ei(this.#v),await oi(this.#v),await ti(this.#v),await ci(this.#v),await li(this.#v),this.#h&&(await pi(this.#v),await di(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 hi({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 Ji=p,zi=d;var Wi=function({baseDir:e=__dirname}){let t=e;for(;t!==zi.parse(t).root;){const e=zi.join(t,"node_modules");if(Ji.existsSync(e))return e;t=zi.dirname(t)}return null};const Ki=process.cwd(),{spawn:Gi}=e;t({name:["redis"],dir:Ki,optional:!0});const Hi=n,Vi=o,Xi=i,Yi=a,Zi=s,Qi=r,ea=t,ta=c,na=l,oa=Bi,ia=Wi({baseDir:__dirname}),aa="win32"===process.platform?";":":";process.env.PATH=`${Hi.join(ia,"/.bin")}${aa}${process.env.PATH}`;let sa=Vi(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=Hi.resolve(ia,"./@fnet/cli-project-flow/dist/template/project"),n=Hi.resolve(Ki,e.name);Xi.existsSync(n)||Xi.mkdirSync(n),await na({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0});let o=Zi.exec("fnet build",{cwd:n});if(0!==o.code)throw new Error("Failed to build project.");if(Zi.which("git")&&(o=Zi.exec("git init --initial-branch=main",{cwd:n}),0!==o.code))throw new Error("Failed to initialize git.");if(Zi.which("code")&&e.vscode&&(o=Zi.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=Hi.resolve(ia,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd();if(e.name=Hi.basename(n),e.update){if(await na({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0}),0!==Zi.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 ca(e),n=new oa(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 ca({...e,mode:"all"}),n=new oa(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 ca({...e,mode:"file"}),n=new oa(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 ra(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 ca(e),{projectDir:i}=t,a=process.argv.slice(3);Gi(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 ca(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:Hi.resolve(Ki,`./.output/${e.id}`),templateDir:Hi.resolve(ia,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Hi.resolve(ia,"./@fnet/cli-project-common/dist/template/default"),coreDir:Hi.resolve(ia,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=Hi.resolve(Ki,"flow.yaml");if(!Xi.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const{raw:n,parsed:o}=await Qi({file:t,tags:e}),i=Hi.dirname(t),a=o.main||"flow.main.yaml";let s=Hi.resolve(i,a);if(!Xi.existsSync(s)&&(s=Hi.resolve(i,a+".yaml"),!Xi.existsSync(s)))throw new Error(`${a} file not found in ${s}.`);const{raw:r,parsed:c}=await Qi({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=Hi.resolve(i,"fnet/targets.yaml");if(!Xi.existsSync(p)&&(p=Hi.resolve(i,"flow.devops.yaml"),Xi.existsSync(p))){const e=Hi.resolve(i,"fnet");Xi.existsSync(e)||Xi.mkdirSync(e),Xi.copyFileSync(p,Hi.resolve(i,"fnet/targets.yaml")),Xi.unlinkSync(p)}if(Xi.existsSync(p)){const{raw:t,parsed:n}=await Qi({file:p,tags:e}),o=Yi.parseDocument(t);l.devops={filePath:p,fileContent:t,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{Xi.writeFileSync(l.devops.filePath,o.toString())}}}const d=Hi.resolve(i,"readme.md");if(Xi.existsSync(d)){const e=Xi.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:Hi.resolve(ia,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Hi.resolve(ia,"./@fnet/cli-project-common/dist/template/default"),coreDir:Hi.resolve(ia,"./@fnet/cli-project-flow/dist/template/core"),projectDir:Hi.resolve(t.projectDir,"./.workspace"),projectSrcDir:Hi.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}sa=sa.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 ca(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 ta({schema:a,format:"yaml"}),r=Hi.resolve(o,".fnet");Xi.existsSync(r)||Xi.mkdirSync(r);const c=Hi.resolve(r,`${e.name}.fnet`);Xi.writeFileSync(c,s)}catch(e){console.error(e.message),process.exit(1)}})),sa=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 ca(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=Hi.resolve(o,".fnet"),r=Hi.resolve(s,`${e.name}.fnet`),c=await ta({schema:a,format:"yaml",ref:r});Xi.existsSync(s)||Xi.mkdirSync(s),Xi.writeFileSync(r,c)}catch(e){console.error(e.message),process.exit(1)}}))}(sa),sa=ra(sa,{bin:"npm"}),sa=ra(sa,{bin:"node"}),sa=ra(sa,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),sa=ra(sa,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),sa=ra(sa,{name:"app",bin:"npm",preArgs:["run","app","--"]}),sa=ra(sa,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),sa=ra(sa,{bin:"npx"}),sa=ra(sa,{bin:"cdk"}),sa=ra(sa,{bin:"aws"}),sa=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 ca(e),{projectDir:o}=t,i=e.config,a=await ea({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);Gi(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)}}))}(sa,{name:"with"}),sa.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");var _=require("@fnet/shell"),D=require("semver"),S=require("@fnet/up-list-files"),P=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,explicit:r}=e,c=`${o}_enabled`,l=t.rollup_output||{},p=Object.keys(l);let d=a||{};const f=t[o]?.options;f&&(d=H(d,f));const m=!t[o]||!1===t[o]?.enabled;p.forEach((e=>{const n=t.rollup_output[e];if(n){if(Reflect.has(n,o)){if(m||!n[o]||!1===n[o]?.enabled)return void delete n[o];!0===n[o]&&(n[o]={enabled:!0,options:d})}else{if(m||r||!1===t[c])return;n[o]={enabled:!0}}n[o]=n[o]||{},n[o].options={...d,...n[o].options}}}));let u=p.some((e=>!0===t.rollup_output[e][o]?.enabled));s&&(u=s()&&u),t[c]=u,u&&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}},explicit:!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"]],explicit:!0},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"]],expilicit:!0},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},explicit:!0},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 Se({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 Pe=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;const Ke=p,Ge=d,He=f;const Ve=p,Xe=d,Ye=f;const Ze=f,Qe=p,et=d,tt=r;const nt=s,ot=n;const it=s;const at=s;const st=s;const rt=_,ct=t;const lt=p,pt=d,dt=D,ft=_,mt=t;const ut=p,gt=d,ht=D,yt=s,wt=t,vt=S,bt=c,xt=a;const kt=p,jt=d,_t=P,Dt=f,St=A,Pt=t;const At=i,Tt=n,Et=t;const $t=t,Ot=T,It=m,Ct=D;const Nt=t,Rt=E,Mt=m,Ft=D;const qt=t,Ut=$,Lt=m,Bt=D;const Jt=t,zt=O,Wt=m,Kt=D;const Gt=t,Ht=I,Vt=m,Xt=D;const Yt=t,Zt=C,Qt=m,en=D;const tn=p,nn=d,on=D,an=_,sn=t,rn=v.default;const cn=D,ln=t,pn=v.default;const dn=D,fn=t,mn=v.default,un=i,gn=_,hn=N;const yn=D,wn=t,vn=v.default,bn=i,xn=_,kn=N;const jn=t,_n=R,Dn=m,Sn=D;const Pn=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 ct({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 rt({cmd:s}),n.isDirty=!0)},An=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=pt.resolve(s,"package.json"),c=lt.readFileSync(r),l=JSON.parse(c);l.name=o.params.name,l.version=dt.inc(o.version,"patch"),delete l.scripts,delete l.devDependencies,lt.writeFileSync(r,JSON.stringify(l,null,"\t"));const{file:p,data:d}=await mt({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='${pt.resolve(pt.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 ft({cmd:f}),lt.writeFileSync(r,c),!0!==o.dryRun&&(n.isDirty=!0,o.version=l.version,a.set("version",l.version),await i({target:o,packageJSON:l}))},Tn=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=gt.resolve(s,"package.json"),c=ut.readFileSync(r),l=JSON.parse(c);l.name=i.params.name,l.version=ht.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 ."},ut.writeFileSync(r,JSON.stringify(l,null,"\t"));const d=i.config||"npm";let f=(await wt({name:d,dir:n.projectDir,tags:n.tags,optional:!0}))?.data;if(!f){const e=vt({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===e.length)throw new Error("Couldnt find schema to create npm config");const t=await bt({schema:e[0],tags:n.tags}),o=n.project.projectDir,i=gt.resolve(o,".fnet");ut.existsSync(i)||ut.mkdirSync(i),ut.writeFileSync(gt.resolve(i,`${d}.fnet`),xt.stringify(t)),f=t}if(ut.writeFileSync(gt.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${f.env.NPM_TOKEN}`),!0!==i.dryRun){if(0!==yt.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");ut.writeFileSync(r,c),o.isDirty=!0,i.version=l.version,a.set("version",l.version)}},En=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||St.util.generateId(),label:`${p}/${e.id?e.id:_t.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:St.util.generateId(),name:e.doc.name,initialize:{content:kt.readFileSync(jt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:St.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:St.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||St.util.generateId(),label:`${p}/${e.id?e.id:_t.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:St.util.generateId(),name:e.doc.name,initialize:{content:kt.readFileSync(jt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:St.util.generateId(),schedules:t},debug:{id:St.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||St.util.generateId(),label:`${p}/${e.id?e.id:_t.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:St.util.generateId(),name:e.doc.name,initialize:{content:kt.readFileSync(jt.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:St.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:St.util.generateId()},debug:{id:St.util.generateId()}}}}let f=Dt.compile(kt.readFileSync(jt.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(kt.writeFileSync(jt.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;o.isDirty=!0;const m=(await Pt({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}},$n=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 Et({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:At.readFileSync(Tt.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:At.readFileSync(Tt.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:At.readFileSync(Tt.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=i,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},On=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 $t({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Ct.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=It(t.params);l.dependencies=It(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ot(p)}},In=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 Nt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Ft.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Mt(t.params);l.dependencies=Mt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Rt(p)}},Cn=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 qt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Bt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Lt(t.params);l.dependencies=Lt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ut(p)}},Nn=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 Jt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Kt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Wt(t.params);l.dependencies=Wt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await zt(p)}},Rn=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 Gt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Xt.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Vt(t.params);l.dependencies=Vt(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await Ht(p)}},Mn=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 Yt({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=en.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 Zt(p)}},Fn=async({setInProgress:e,context:t,deploymentProject:n,deploymentProjectTarget:o,yamlTarget:i})=>{await e({message:"Deploying it as fnet package."});const a=t.projectDir,s=nn.resolve(a,"package.json"),r=tn.readFileSync(s),c=JSON.parse(r);c.name=o.params.name,c.version=on.inc(o.version,"patch"),delete c.scripts,delete c.devDependencies,tn.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await sn({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 rn({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='${nn.resolve(nn.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 an({cmd:h}),tn.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 rn({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.")},qn=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 ln({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 pn({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=cn.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 pn({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.")},Un=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 fn({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 mn({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=dn.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 mn({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 gn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const y=JSON.parse(h.stdout).path;let w=new hn;w.append("file",un.createReadStream(y));const v=await mn.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.")},Ln=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 wn({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 vn({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=yn.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 vn({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 xn({cmd:g});if(0!==h.code)throw new Error(h.stderr);const y=JSON.parse(h.stdout).path;let w=new kn;w.append("file",bn.createReadStream(y));const v=await vn.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.")},Bn=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 jn({name:t.config,dir:o,optional:!0,transferEnv:!1,tags:a.tags}):void 0,c=Sn.inc(t.version||"0.1.0","patch");t.params.version=c,t.version=c,s.set("version",c);const l=Dn(t.params);l.dependencies=Dn(i);const p={atom:e,params:l,config:r?.config,src:o,dest:o};return{deployer:await _n(p)}};const Jn=m;async function zn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Jn(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||Jn(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await o(t.definition.condition));await t({node:e}),n({node:e})}var Wn={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=zn},resolve:zn};const Kn=q,Gn=Wn;var Hn={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>Kn({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=>Kn({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 Gn.init(e)}};const Vn=m;async function Xn({node:e,resolveTypeCommon:t,resolveNextBlock:n}){if(e.context.transform=e.context.transform||Vn(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||Vn(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),n({node:e})}var Yn={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=Xn},resolve:Xn};const Zn=m;async function Qn({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=Zn(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 eo={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=Qn},resolve:Qn};const to=m,no=L,oo=B;async function io({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||to(e.definition);e.context.transform.for.in=await o(e.definition.for.in),await t({node:e}),n({node:e})}var ao={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]=[no(e.definition.for,t),oo(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=io},resolve:io};var so={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 ro=m;async function co({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||ro(e.definition);const o=e.context.transform;o.raise=await n(o.raise),await t({node:e})}var lo={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=co},resolve:co};const po=m;async function fo({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||po(e.definition);const o=e.context.transform;o.return=await n(o.return),await t({node:e})}var mo={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=fo},resolve:fo};const uo=m;async function go({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||uo(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 ho={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=go},resolve:go};const yo=ho;var wo={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 yo.init(e)}};const vo=ho;var bo={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 vo.init(e)}};const xo=ho;var ko={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 xo.init(e)}};async function jo({node:e}){e.context.next=e.childs[0]}var _o={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const 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=jo},resolve:jo};const Do=m;async function So({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||Do(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 Po={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=So},resolve:So};const Ao=m;async function To({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){e.context.transform=e.context.transform||Ao(e.definition),await t({node:e})}var Eo={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=To},resolve:To};const $o=m;async function Oo({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||$o(e.definition);const i=e.context.transform;i.next=await o(i.next),await t({node:e}),n({node:e})}var Io={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Oo},resolve:Oo};const Co=ho;var No={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 Co.init(e)}};const Ro=ho;var Mo={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 Ro.init(e)}};const Fo=ho;var qo={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 Fo.init(e)}};const Uo=p,Lo=d,Bo=a,Jo=s,zo=f,Wo=m,Ko=u,Go=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:Ho}=y,Vo=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)}))}))}},Xo=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=Se({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=Se({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=Se({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||"",i.json=i.cli.enabled||i.json;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)},Yo=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 Pe({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:"@fnet/args",version:"^0.1"}),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"})},Zo=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})},Qo=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)}}},ei=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})},ti=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")},ni=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=[];if(e.doc.input?i=e.doc.input: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 r={options:i,imports:s,atom:e},c=n.templateDir,l=We.compile(Je.readFileSync(ze.resolve(c,"src/default/to.args.js.njk"),"utf8"),o).render(r),p=n.projectDir,d=ze.resolve(p,"src/default/to.args.js");Je.writeFileSync(d,l,"utf8")},oi=async({atom:e,setInProgress:t,context:n,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:o},a=n.templateCommonDir,s=He.compile(Ke.readFileSync(Ge.resolve(a,".gitignore.njk"),"utf8"),He.configure(a)).render(i),r=n.projectDir,c=Ge.resolve(r,".gitignore");Ke.writeFileSync(c,s,"utf8")},ii=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=Ye.compile(Ve.readFileSync(Xe.resolve(a,"tsconfig.json.njk"),"utf8"),Ye.configure(a)).render(i),r=n.projectDir,c=Xe.resolve(r,"tsconfig.json");Ve.writeFileSync(c,s,"utf8")},ai=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=et.resolve(t.project.projectDir,"fnet/how-to.md");if(Qe.existsSync(o)){const e=Qe.readFileSync(o,"utf8");n.howto=e}const a=et.resolve(t.project.projectDir,"fnet/input.yaml");if(Qe.existsSync(a)){const e=await tt({file:a,tags:t.tags});n.input=e.content}const s=t.templateCommonDir,r=Ze.compile(Qe.readFileSync(et.resolve(s,`${i}.njk`),"utf8"),Ze.configure(s)).render(n),c=et.resolve(e,`${i}`);Qe.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=Ze.compile(Qe.readFileSync(et.resolve(c,`${i}.njk`),"utf8"),Ze.configure(c)).render(r),p=t.projectDir,d=et.resolve(p,`${i}`);Qe.writeFileSync(d,l,"utf8")}},si=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Prettifiying source files."});let o=ot.join("src","**","*");if(0!==nt.exec(`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n}).code)throw new Error("Couldnt format files.")},ri=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.")},ci=async({setInProgress:e,atom:t,context:n})=>{const o=n.projectDir;await e({message:"Installing npm packages."});if(0!==at.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},li=async({setInProgress:e,context:t})=>{const n=t.projectDir;await e({message:"Building main project."});if(0!==st.exec("npm run build",{cwd:n}).code)throw new Error("Couldnt build project.")},pi=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 $n({...e});else if("red"===i.type)await En({...e});else if("npm"===i.type)await Tn({...e});else if("gcs"===i.type)await An({...e});else if("gitlab"===i.type)await Pn({...e});else if("fnet-package"===i.type)await Fn({...e});else if("fnet-form"===i.type)await qn({...e});else if("fnet-node"===i.type)await Ln({...e});else if("fnet-flow"===i.type)await Un({...e});else{let e;if("nextjs"===i.type?e=Rn:"webos"===i.type?e=Nn:"electron"===i.type?e=Cn:"docker"===i.type?e=Mn:"ios"===i.type?e=On:"macos"===i.type?e=In:"rust"===i.type&&(e=Bn),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),s.isDirty=!0}},{Atom:di}=w,fi=M,mi=j,ui=F,gi=t,hi=k,yi=q,wi=r,vi=U,bi=Hn,xi=Yn,ki=eo,ji=ao,_i=Wn,Di=so,Si=lo,Pi=mo,Ai=ho,Ti=wo,Ei=bo,$i=ko,Oi=_o,Ii=Po,Ci=Eo,Ni=Io,Ri=No,Mi=Mo,Fi=qo,qi=({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 Ui=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 Vo,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:di,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#b={initNode:this.initNode.bind(this),cloneDeep:Wo,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:qi,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 Go(),this.#p=this.#t.buildId||Ho(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 gi({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 Xo(this.#v),await Yo(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 di.get({id:e}),this.#o="string"==typeof this.#n.doc.content?(await wi({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:"@fnet/args",version:"^0.1"}),this.#a.push({package:"chalk",version:"^4"})}#x(e){console.log("filePath",e),Uo.statSync(e).isDirectory()?(Uo.readdirSync(e).forEach((t=>{const n=Lo.join(e,t);this.#x(n)})),Uo.rmSync(e)):Uo.unlinkSync(e)}#k(e,t){const n=Uo.existsSync(e),o=n&&Uo.statSync(e);n&&o.isDirectory()?(Uo.mkdirSync(t,{recursive:!0}),Uo.readdirSync(e).forEach((n=>{this.#k(Lo.join(e,n),Lo.join(t,n))}))):Uo.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,n=["node_modules"];if(Uo.existsSync(e)){const t=Uo.readdirSync(e);for(const o of t)if(!n.includes(o)){const t=Lo.join(e,o);Uo.rmSync(t,{recursive:!0})}}Uo.existsSync(e)||Uo.mkdirSync(e,{recursive:!0});const o=Lo.join(e,"src");Uo.existsSync(o)||Uo.mkdirSync(o,{recursive:!0});const i=Lo.join(o,"core");this.#k(t,i);const a=Lo.join(o,"default","blocks");Uo.existsSync(a)||Uo.mkdirSync(a,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=zo.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 xi.hits(t))await xi.init(t);else if(await ji.hits(t))await ji.init(t);else if(await _i.hits(t))await _i.init(t);else if(await bi.hits(t))await bi.init(t);else if(await Di.hits(t))await Di.init(t);else if(await ki.hits(t))await ki.init(t);else if(await Si.hits(t))await Si.init(t);else if(await Pi.hits(t))await Pi.init(t);else if(await Ai.hits(t))await Ai.init(t);else if(await Ti.hits(t))await Ti.init(t);else if(await Ei.hits(t))await Ei.init(t);else if(await $i.hits(t))await $i.init(t);else if(await Mi.hits(t))await Mi.init(t);else if(await Fi.hits(t))await Fi.init(t);else if(await Ii.hits(t))await Ii.init(t);else if(await Ci.hits(t))await Ci.init(t);else if(await Ri.hits(t))await Ri.init(t);else if(await Oi.hits(t))await Oi.init(t);else{if(!await Ni.hits(t))throw new Error("Undefined step type.");await Ni.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=Lo.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=Ho(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=fi({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 di.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await di.first({where:{name:t[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await di.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===n.protocol){const e=Lo.resolve(this.#t.projectSrcDir,`${n.pathname}.js`),t=[],o=await hi({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 mi({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 mi({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=Wo(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=Lo.resolve(this.#t.projectSrcDir,`${n.fileName||n.name}.js`),t=Lo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!Uo.existsSync(e)){Uo.mkdirSync(Lo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Uo.writeFileSync(e,t,"utf8")}n.relativePath=t.split(Lo.sep).join("/"),this.#n.typesDir=`./types/${Lo.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;Uo.writeFileSync(Lo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,n=zo.compile(Uo.readFileSync(Lo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),o=this.#t.projectDir,i=Lo.resolve(o,"src/default/index.js");Uo.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=zo.compile(Uo.readFileSync(Lo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),o=this.#t.projectDir,i=Lo.resolve(o,`src/default/${e.codeKey}.js`);Uo.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=zo.compile(Uo.readFileSync(Lo.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=Lo.resolve(t,`src/default/blocks/${n}`);Uo.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(Ko(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 yi({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:Bo.stringify(o)},a=this.#t.templateDir,s=zo.compile(Uo.readFileSync(Lo.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=Lo.resolve(r,`${e}`);Uo.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const n={content:Bo.stringify(this.#o)},o=this.#t.templateDir,i=zo.compile(Uo.readFileSync(Lo.resolve(o,`${e}.njk`),"utf8"),this.#i).render(n),a=this.#t.projectDir,s=Lo.resolve(a,`${e}`);Uo.writeFileSync(s,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=Jo.exec("prettier --write .",{cwd:Lo.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 di.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 di.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 pi({...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 di.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await di.update(o,{id:o.id})):o=await di.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(vi.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 ui({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;Uo.writeFileSync(Lo.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 ai(this.#v),await ii(this.#v),await oi(this.#v),await ni(this.#v),await ei(this.#v),await Zo(this.#v),await ti(this.#v),await Qo(this.#v),await si(this.#v),await ri(this.#v),this.#h&&(await ci(this.#v),await li(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 ui({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 Li=p,Bi=d;var Ji=function({baseDir:e=__dirname}){let t=e;for(;t!==Bi.parse(t).root;){const e=Bi.join(t,"node_modules");if(Li.existsSync(e))return e;t=Bi.dirname(t)}return null};const zi=process.cwd(),{spawn:Wi}=e;t({name:["redis"],dir:zi,optional:!0});const Ki=n,Gi=o,Hi=i,Vi=a,Xi=s,Yi=r,Zi=t,Qi=c,ea=l,ta=Ui,na=Ji({baseDir:__dirname}),oa="win32"===process.platform?";":":";process.env.PATH=`${Ki.join(na,"/.bin")}${oa}${process.env.PATH}`;let ia=Gi(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=Ki.resolve(na,"./@fnet/cli-project-flow/dist/template/project"),n=Ki.resolve(zi,e.name);Hi.existsSync(n)||Hi.mkdirSync(n),await ea({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0});let o=Xi.exec("fnet build",{cwd:n});if(0!==o.code)throw new Error("Failed to build project.");if(Xi.which("git")&&(o=Xi.exec("git init --initial-branch=main",{cwd:n}),0!==o.code))throw new Error("Failed to initialize git.");if(Xi.which("code")&&e.vscode&&(o=Xi.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=Ki.resolve(na,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd();if(e.name=Ki.basename(n),e.update){if(await ea({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0}),0!==Xi.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 sa(e),n=new ta(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 sa({...e,mode:"all"}),n=new ta(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 sa({...e,mode:"file"}),n=new ta(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 aa(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 sa(e),{projectDir:i}=t,a=process.argv.slice(3);Wi(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 sa(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:Ki.resolve(zi,`./.output/${e.id}`),templateDir:Ki.resolve(na,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Ki.resolve(na,"./@fnet/cli-project-common/dist/template/default"),coreDir:Ki.resolve(na,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=Ki.resolve(zi,"flow.yaml");if(!Hi.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const{raw:n,parsed:o}=await Yi({file:t,tags:e}),i=Ki.dirname(t),a=o.main||"flow.main.yaml";let s=Ki.resolve(i,a);if(!Hi.existsSync(s)&&(s=Ki.resolve(i,a+".yaml"),!Hi.existsSync(s)))throw new Error(`${a} file not found in ${s}.`);const{raw:r,parsed:c}=await Yi({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=Ki.resolve(i,"fnet/targets.yaml");if(!Hi.existsSync(p)&&(p=Ki.resolve(i,"flow.devops.yaml"),Hi.existsSync(p))){const e=Ki.resolve(i,"fnet");Hi.existsSync(e)||Hi.mkdirSync(e),Hi.copyFileSync(p,Ki.resolve(i,"fnet/targets.yaml")),Hi.unlinkSync(p)}if(Hi.existsSync(p)){const{raw:t,parsed:n}=await Yi({file:p,tags:e}),o=Vi.parseDocument(t);l.devops={filePath:p,fileContent:t,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{Hi.writeFileSync(l.devops.filePath,o.toString())}}}const d=Ki.resolve(i,"readme.md");if(Hi.existsSync(d)){const e=Hi.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:Ki.resolve(na,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Ki.resolve(na,"./@fnet/cli-project-common/dist/template/default"),coreDir:Ki.resolve(na,"./@fnet/cli-project-flow/dist/template/core"),projectDir:Ki.resolve(t.projectDir,"./.workspace"),projectSrcDir:Ki.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}ia=ia.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 sa(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 Qi({schema:a,format:"yaml"}),r=Ki.resolve(o,".fnet");Hi.existsSync(r)||Hi.mkdirSync(r);const c=Ki.resolve(r,`${e.name}.fnet`);Hi.writeFileSync(c,s)}catch(e){console.error(e.message),process.exit(1)}})),ia=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 sa(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=Ki.resolve(o,".fnet"),r=Ki.resolve(s,`${e.name}.fnet`),c=await Qi({schema:a,format:"yaml",ref:r});Hi.existsSync(s)||Hi.mkdirSync(s),Hi.writeFileSync(r,c)}catch(e){console.error(e.message),process.exit(1)}}))}(ia),ia=aa(ia,{bin:"npm"}),ia=aa(ia,{bin:"node"}),ia=aa(ia,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),ia=aa(ia,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),ia=aa(ia,{name:"app",bin:"npm",preArgs:["run","app","--"]}),ia=aa(ia,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),ia=aa(ia,{bin:"npx"}),ia=aa(ia,{bin:"cdk"}),ia=aa(ia,{bin:"aws"}),ia=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 sa(e),{projectDir:o}=t,i=e.config,a=await Zi({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);Wi(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)}}))}(ia,{name:"with"}),ia.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.62.2",
3
+ "version": "0.63.1",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -44,7 +44,7 @@
44
44
  "@fnet/prompt": "^0.2.10",
45
45
  "@fnet/shell": "^0.1.13",
46
46
  "@fnet/to-rust": "^0.1.2",
47
- "@fnet/up-list-files": "^0.1.7",
47
+ "@fnet/up-list-files": "^0.1.9",
48
48
  "@fnet/yaml": "^0.1.23",
49
49
  "@fnet/yargs-options-from-schema": "^0.1.1",
50
50
  "@node-red/util": "^4.0.2",