@fnet/cli 0.32.2 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e=require("child_process"),t=require("@fnet/config"),a=require("path"),o=require("yargs/yargs"),s=require("yargs/helpers"),r=require("fs"),i=require("yaml"),n=require("shelljs"),c=require("@fnet/yaml"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),m=require("js-yaml"),u=require("nunjucks"),g=require("redis"),f=require("@flownet/lib-is-redis-online"),y=require("nanoid"),w=require("@flownet/lib-atom-api-js"),h=require("axios"),b=require("qs"),_=require("lodash.merge"),v=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),x=require("@fnet/shell"),k=require("semver"),D=require("node:os"),P=require("@node-red/util"),S=require("@flownet/lib-to-ios-app"),I=require("@flownet/lib-to-macos-app"),A=require("@flownet/lib-to-electron"),$=require("@flownet/lib-to-webos"),E=require("@flownet/lib-to-nextjs"),C=require("lodash.clonedeep"),T=require("@flownet/lib-to-docker"),O=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-pick-npm-versions"),M=require("chalk");const R=g,q=f;const{Api:N}=w,z=h.default,L=b;const U=_,B=r,J=a,K=v;function G({dir:e,name:t="index"}){let a=J.resolve(e,`./${t}.tsx`);if(B.existsSync(a)||(a=J.resolve(e,`./${t}.ts`)),B.existsSync(a)||(a=J.resolve(e,`./${t}.jsx`)),B.existsSync(a)||(a=J.resolve(e,`./${t}.js`)),!B.existsSync(a))return{};const o=a,s=J.extname(a);return{file:o,ext:s,ts:".ts"===s||".tsx"===s,name:t}}const W=j;const X=p,H=d,Y=l;const Z=u,Q=p,V=d,ee=v,te=j;const ae=p,oe=d,se=l;const re=p,ie=d,ne=u,ce=v;const le=p,pe=d,de=u;const me=p,ue=d,ge=u;const fe=p,ye=d,we=u;const he=u,be=p,_e=d;const ve=n,je=a;const xe=n;const ke=n;const De=n;const Pe=x,Se=t;const Ie=p,Ae=d,$e=k,Ee=x,Ce=t;const Te=p,Oe=d,Fe=k,Me=n,Re=t;const qe=p,Ne=d,ze=D,Le=u,Ue=P,Be=t;const Je=r,Ke=a,Ge=t;const We=S;const Xe=I;const He=A;const Ye=$;const Ze=E,Qe=C,Ve=_,et=k,tt=d;const at=T,ot=C,st=_,rt=k,it=d;const nt=p,ct=d,lt=k,pt=x,dt=t,mt=h.default;const ut=k,gt=t,ft=h.default;const yt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:s})=>{await e({message:"Deploying it as gitlab project."});const r=t.projectDir;let i="fnet-to-gitlab";const n=o.params.config||"gitlab",c=await Se({name:n,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${n}`);const{data:l}=c.data;i+=` --projectGroupId=${l.projectGroupId}`,i+=` --projectPath='${r}'`,i+=` --projectName='${o.params.name}'`,i+=` --projectBranch='${o.params.branch||"main"}'`,i+=` --gitlabHost='${l.gitlabHost}'`,i+=` --gitlabToken='${l.gitlabToken}'`,i+=` --gitlabUsername='${l.gitlabUsername}'`,i+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await Pe({cmd:i}),a.isDirty=!0)},wt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:s})=>{await e({message:"Deploying it as gcs package."});const r=t.projectDir,i=Ae.resolve(r,"package.json"),n=Ie.readFileSync(i),c=JSON.parse(n);c.name=o.params.name,c.version=$e.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,Ie.writeFileSync(i,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Ce({name:o.config||"gcs",dir:t.projectDir});let d="fnet-upload-files-to-gcs";d+=` --projectId='${p.env.GCS_PROJECT_ID}'`,d+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,d+=` --keyFilename='${Ae.resolve(Ae.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${r}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --metadata.cacheControl='public, max-age=31536000, immutable'",d+=" --verbose",p.env.DOMAIN&&(d+=` --domain='${p.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(d+=" --dryRun"),await Ee({cmd:d}),Ie.writeFileSync(i,n),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=c.version,await s({target:o,packageJSON:c}))},ht=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s})=>{await t({message:"Deploying it as npm package."});const r=a.projectDir,i=Oe.resolve(r,"package.json"),n=Te.readFileSync(i),c=JSON.parse(n);c.name=s.params.name,c.version=Fe.inc(s.params.version,"patch");const l=s.params.bin?.name||s.params.bin;!1!==s.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Te.writeFileSync(i,JSON.stringify(c,null,"\t"));const p=(await Re({name:a.npmConfig||"npm",dir:a.projectDir}))?.data;if(Te.writeFileSync(Oe.resolve(r,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==Me.exec("npm publish --access public",{cwd:r}).code)throw new Error("Couldnt publish to npm");Te.writeFileSync(i,n),o.isDirty=!0,s.params.version=c.version},bt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:r,packageDependencies:i,njEnv:n})=>{await t({message:"Deploying it as node-red flow."});const c=a.projectDir,l=a.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===s.deploy.template)d={atom:e,packageDependencies:i,red:{tab:{id:s.deploy.id||Ue.util.generateId(),label:`${p}/${e.id?e.id:ze.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:Ue.util.generateId(),name:e.doc.name,initialize:{content:qe.readFileSync(Ne.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Ue.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:Ue.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:i,red:{tab:{id:s.deploy.id||Ue.util.generateId(),label:`${p}/${e.id?e.id:ze.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:Ue.util.generateId(),name:e.doc.name,initialize:{content:qe.readFileSync(Ne.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Ue.util.generateId(),schedules:t},debug:{id:Ue.util.generateId()}}}}else{if("http"!==s.deploy.template)return;d={atom:e,packageDependencies:i,red:{tab:{id:s.deploy.id||Ue.util.generateId(),label:`${p}/${e.id?e.id:ze.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:Ue.util.generateId(),name:e.doc.name,initialize:{content:qe.readFileSync(Ne.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Ue.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:Ue.util.generateId()},debug:{id:Ue.util.generateId()}}}}let m=Le.compile(qe.readFileSync(Ne.resolve(l,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),n).render(d);if(qe.writeFileSync(Ne.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=(await Be({name:a.redConfig||"red",dir:a.projectDir}))?.data,g=s.deploy.url||u.env.RED_URL,f={};if(!1!==s.deploy.auth&&(f.Authorization="Bearer "+atomAccessToken),s.deploy.id)!0===s.actions?.delete?(await axios({method:"DELETE",url:`${g}/flow/${s.deploy.id}`,headers:f}),delete s.actions.delete,delete s.deploy.id,s.enabled=!1):await axios({method:"PUT",url:`${g}/flow/${s.deploy.id}`,data:m,headers:f});else{const e=await axios({method:"POST",url:`${g}/flow`,data:m,headers:f});s.deploy.id=e.data.id}},_t=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:s,deploymentProject:r,deploymentProjectTarget:i})=>{await a({message:"Deploying it as workflow lib."});const n=(await Ge({name:"atom",dir:o.projectDir}))?.data;let c,l,p,d=i.deploy.name.split("/");if(1===d.length)l=n.env.ATOM_LIBRARIES_ID,p=i.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:n.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===i.dryRun)return;if(r.isDirty=!0,i.deploy.id){if(c=await t.get({id:i.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;i.deploy.id=c.id}const m=o.projectDir;c.doc.contents=[{content:Je.readFileSync(Ke.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Je.readFileSync(Ke.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Je.readFileSync(Ke.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=s,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},vt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:r,registerToPackageManager:i})=>{await t({message:"Deploying it as ios app package."});const n=a.projectDir;if(!0===s.dryRun)return;const c={projectDir:n,dest:n,atom:e,params:s.params};await We(c),o.isDirty=!0},jt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:r})=>{await t({message:"Deploying it as macos app package."});const i=a.projectDir;if(!0===s.dryRun)return;const n={projectDir:i,dest:i,atom:e,params:s.params};await Xe(n),o.isDirty=!0},xt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:r})=>{await t({message:"Deploying it as electron package."});const i=a.projectDir;if(!0===s.dryRun)return;const n={src:i,dest:i,atom:e,params:s.params};await He(n),o.isDirty=!0},kt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s})=>{await t({message:"Deploying it as webos package."});const r=a.projectDir;if(!0===s.dryRun)return;const i={src:r,dest:r,atom:e,params:s.params};await Ye(i),o.isDirty=!0},Dt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s})=>{a&&await a({message:"Deploying it as nextjs package."});t.params=Ve({name:"nextjs-app",version:"0.1.0"},t.params);const r=et.inc(t.params.version,"patch");t.params.version=r;const i=Qe(t);i.params.dependencies=Qe(s);const n={atom:e,target:i.params,projectDir:o,renderDir:tt.resolve(o,"nextjs")};return{deployer:await Ze(n)}},Pt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s})=>{a&&await a({message:"Deploying it as docker package."});t.params=st({},t.params);const r=rt.inc(t.params.version,"patch");t.params.version=r;const i=ot(t);i.params.dependencies=ot(s);const n={atom:e,target:i.params,projectDir:o,renderDir:it.resolve(o,"docker")};return{deployer:await at(n)}},St=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:s})=>{await e({message:"Deploying it as fnet package."});const r=t.projectDir,i=ct.resolve(r,"package.json"),n=nt.readFileSync(i),c=JSON.parse(n);c.name=o.params.name,c.version=lt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,nt.writeFileSync(i,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await dt({name:o.config||"fnet-package",dir:t.projectDir});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const d=`${p.env.ATOM_API_URL}/v1/auth/token`,m=p.env.ATOM_API_USERNAME,u=p.env.ATOM_API_PASSWORD;let g=await mt({method:"POST",url:d,data:{username:m,password:u},headers:{"Content-Type":"application/json"}});const f=g.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${d}`);let y="fnet-upload-files-to-gcs";if(y+=` --projectId='${p.env.GCS_PROJECT_ID}'`,y+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,y+=` --keyFilename='${ct.resolve(ct.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,y+=` --dir='${r}'`,y+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",y+=` --destDir='${c.name}/${c.version}'`,y+=" --metadata.cacheControl='public, max-age=31536000, immutable'",y+=" --verbose",p.env.DOMAIN&&(y+=` --domain='${p.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(y+=" --dryRun"),await pt({cmd:y}),nt.writeFileSync(i,n),!0===o.dryRun)return;a.isDirty=!0,o.params.version=c.version;const w=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(g=await mt({method:"POST",url:w,data:{name:c.name,version:c.version,version_domain:p.env.DOMAIN,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),g.data?.error)throw new Error("Failed to publish fnet package.")},It=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet form."});const s=ut.inc(o.params.version,"patch"),{file:r,data:i}=await gt({name:o.config||"fnet-form",dir:t.projectDir});if(!i.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${r}`);if(!i.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${r}`);if(!i.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${r}`);const n=`${i.env.ATOM_API_URL}/v1/auth/token`,c=i.env.ATOM_API_USERNAME,l=i.env.ATOM_API_PASSWORD;let p=await ft({method:"POST",url:n,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 ${n}`);a.isDirty=!0,o.params.version=s;const m=`${i.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await ft({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.")};const At=p,$t=d,Et=m,Ct=n,Tt=u,Ot=async()=>{if(!await q({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=R.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Ft}=y,Mt=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(N.set_api_url(e.data.url),t)return N.set_req_token(t),void a(t);z({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:L.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{N.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{N.set_req_token(),o(e)}))}))}},Rt=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const a=e.doc.features;a.hasOwnProperty("all_parsed_imports")||(a.all_parsed_imports=!0);const o=J.resolve(t.project.projectDir),s=G({dir:J.resolve(o,"./app")});if(s.file){let e=await K({file:s.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.app_uses_jsx=t,a.app_has_entry=!0,e=await K({file:s.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.app_entry_uses_jsx=t,a.app_entry_is_ts=s.ts,a.app_entry_ext=s.ext}const r=G({dir:J.resolve(o,"./cli")});if(r.file){let e=await K({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.cli_uses_jsx=t,a.cli_has_entry=!0,e=await K({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.cli_entry_uses_jsx=t,a.cli_entry_is_ts=r.ts,a.cli_entry_ext=r.ext}if("workflow.lib"===e.type){const e=G({dir:J.resolve(o,"./src")});if(e.file){let t=await K({file:e.file,recursive:!0}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.src_uses_jsx=o,a.src_has_entry=!0,t=await K({file:e.file}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.src_entry_uses_jsx=o,a.src_entry_is_ts=e.ts,a.src_entry_ext=e.ext}}const i=!0===a.app_has_entry||!0===a.src_uses_jsx,n=!0===a.cli_has_entry||!0===a.src_uses_jsx;a.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===a.form||!0===a.form?.enabled,a.multiple_enabled=a.multiple_enabled||!0===a.multiple||!0===a.multiple?.enabled,!1===a.app?a.app={enabled:!1}:!0===a.app?a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:i}:a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:i,...a.app||{}},a.app.enabled=!0===a.app.enabled&&(!0===e.doc.features.form_enabled||!0===a.app.extend||!0===a.app.enabled),a.app.format=a.app.format||"esm",a.app.folder=a.app.folder||a.app.format||"default",!1===a.cli?a.cli={enabled:!1}:!0===a.cli?a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:n}:a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:n,...a.cli||{}},a.cli.enabled=!0===a.cli.enabled&&(!1===e.doc.features.form_enabled||!0===a.cli.extend||!0===a.cli.enabled),a.cli.format=a.cli.format||"esm",a.cli.folder=a.cli.folder||a.cli.folder||"esm";const c={cjs:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!0,string:!0},cjsx:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0,string:!0},esmx:{format:"esm",browser:!0,babel:!0,context:a.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0,string:!0},umd:{format:"umd",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1,string:!0}},l={};!0===a.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,babel_options:{targets:{chrome:"79"}}}),!0===a.app.enabled&&(a.app.dir=`./dist/app/${a.app.folder}`,c.app={format:a.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:a.app.dir,terser:!0,output_exports:!1===a.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:a.app.dir})),!0===a.cli.enabled&&(a.cli.dir=`./dist/cli/${a.cli.folder}`,c.cli={format:a.cli.format,context:"global",babel:!0===a.src_uses_jsx||!0===a.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:a.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===a.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${J.normalize(a.app.dir||".")}`,files:[J.normalize("./dist/**/*")],cors:!0,open:!1};a.babel_options=a.babel_options||a.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},a.browsersync_options=U(p,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=U({},a.replace_options||a.replace?.options||{}),a.terser_options=U({},a.terser_options||a.terser?.options||{}),a.css_options=U({},a.css_options||a.css?.options||{}),a.wasm_options=U({},a.wasm_options||a.wasm?.options||{}),a.copy_options=U(l,a.copy_options||a.copy?.options||{}),a.json_options=U({},a.json_options||a.json?.options||{}),a.image_options=U({},a.image_options||a.image?.options||{}),a.analyzer_options=U({summaryOnly:!0,limit:12},a.analyzer_options||a.analyzer?.options||{}),a.visualizer_options=U({},a.visualizer_options||a.visualizer?.options||{}),a.string_options=U({},a.string_options||a.string?.options||{}),a.rollup=a.rollup||{},a.rollup_output=U(c,a.rollup_output||a.rollup?.output||{}),a.string_enabled=!0===a.string||a.string&&!1!==a.string?.enabled;const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==a.rollup[e]?(!0===a.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||a.babel_options,t.browsersync_options=U(a.browsersync_options,t.browsersync_options),t.replace_options=U(a.replace_options,t.replace_options),t.terser_options=U(a.terser_options,t.terser_options),t.css_options=U(a.css_options,t.css_options),t.wasm_options=U(a.wasm_options,t.wasm_options),t.copy_options=U(a.copy_options,t.copy_options),t.json_options=U(a.json_options,t.json_options),t.image_options=U(a.image_options,t.image_options),t.analyzer_options=U(a.analyzer_options,t.analyzer_options),t.visualizer_options=U(a.visualizer_options,t.visualizer_options),t.string_options=U(a.string_options,t.string_options),t.string=a.string_enabled&&t.string,a.form_enabled&&(t.babel=!0)):t.enabled=!1)}a.babel_enabled=d.some((e=>!0===a.rollup_output[e].babel)),a.browser_enabled=d.some((e=>!0===a.rollup_output[e].babel)),a.browsersync_enabled=!1!==a.browsersync&&d.some((e=>!0===a.rollup_output[e].browsersync)),a.browsersync_enabled=a.browsersync_enabled&&a.app.enabled,a.wasm_enabled=!0===a.wasm||a.wasm&&!1!==a.wasm?.enabled,a.css_enabled=!0===a.css||a.css&&!1!==a.css?.enabled,a.json_enabled=!0===a.json||a.json&&!1!==a.json?.enabled,a.terser_enabled=!0===a.terser||a.terser&&!1!==a.terser?.enabled,a.copy_enabled=a.app.enabled||a.copy_enabled||a.copy&&!1!==a.copy?.enabled,a.image_enabled=!0===a.image||a.image&&!1!==a.image?.enabled,a.analyzer_enabled=!0===a.analyzer||a.analyzer&&!1!==a.analyzer?.enabled,a.visualizer_enabled=!0===a.visualizer||a.visualizer&&!1!==a.visualizer?.enabled,a.dependency_auto_enabled=!1!==a.dependency_auto&&!1!==a.dependency_auto?.enabled,a.npm_install_flags=a.npm_install_flags||"",a.react_version=a.react_version||a.react?.version||18},qt=async({atom:e,packageDependencies:t,packageDevDependencies:a})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";a=`^${(await W({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),a.push({package:"@babel/core",version:"^7.23"}),a.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),a.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),a.push({package:"@rollup/plugin-replace",version:"^5.0"}),a.push({package:"rollup",version:"^4.9"}),a.push({package:"rollup-plugin-delete",version:"^2.0"}),a.push({package:"rollup-plugin-dts",version:"^6.0"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),a.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6.0"}),a.push({package:"@babel/preset-env",version:"7.23"}),a.push({package:"@babel/preset-react",version:"7.23"})),e.doc.features.browsersync_enabled&&a.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&a.push({package:"@rollup/plugin-json",version:"^6.0"}),e.doc.features.terser_enabled&&a.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&a.push({package:"@rollup/plugin-wasm",version:"^6.1"}),e.doc.features.image_enabled&&a.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.analyzer_enabled&&a.push({package:"rollup-plugin-analyzer",version:"^3.3"}),e.doc.features.visualizer_enabled&&a.push({package:"rollup-plugin-visualizer",version:"^5.9"}),e.doc.features.string_enabled&&a.push({package:"rollup-plugin-string",version:"^3.0"}),e.doc.features.css_enabled){a.push({package:"rollup-plugin-postcss",version:"4.0"}),a.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":a.push({package:"postcss-import",version:"^15.1"});break;case"postcss-url":a.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":a.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":a.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":a.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&a.push({package:"rollup-plugin-copy",version:"^3.5"})},Nt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const s={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o,ts:Date.now()},r=a.templateDir,i=H.resolve(a.projectDir,"src/app");X.existsSync(i)||X.mkdirSync(i,{recursive:!0}),await Y({pattern:["index.html.njk","index.js.njk"],dir:H.resolve(r,"src/app"),outDir:i,context:s})},zt=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:s})=>{await s({message:"Creating package.json."});const r=a.find((e=>"react"===e.package)),i=a.find((e=>"react-dom"===e.package));r&&!i?a.push({package:"react-dom",version:r.version}):r&&i&&(i.version=r.version),r&&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 n=[];!0===e.doc.features.app.enabled&&n.push(V.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&n.push(V.resolve(t.projectDir,"src/cli/index.js"));for await(const t of n){const s=t;if(!Q.existsSync(s))throw new Error(`App file not found: ${s}`);const r=await ee({file:s,recursive:!0}),i=!0===e.doc.features.all_parsed_imports?r.all:r.required;for await(const e of i){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const t=(await te({name:e.package,groupBy:{minor:!0}}))[0][0];o.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}}const c={atom:e,packageDependencies:a,packageDevDependencies:o},l=t.templateCommonDir,p=Z.compile(Q.readFileSync(V.resolve(l,"package.json.njk"),"utf8"),Z.configure(l)).render(c),d=t.projectDir,m=V.resolve(d,"package.json");Q.writeFileSync(m,p,"utf8")},Lt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const s={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o},r=a.templateDir,i=oe.resolve(a.projectDir,"src/cli");ae.existsSync(i)||ae.mkdirSync(i,{recursive:!0}),await se({pattern:["index.js.njk"],dir:oe.resolve(r,"src/cli"),outDir:i,context:s})},Ut=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},r=ie.resolve(a.projectDir,"src","default/index.js");if(!re.existsSync(r))throw new Error(`Entry file not found: ${r}`);const i=(await ce({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),n=e.doc.features.rollup_output,c=Object.keys(n);for(let e=0;e<c.length;e++){const t=n[c[e]];if(!0===t.browser&&i.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(i.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<i.length;e++){const a=i[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(i)}}const l=a.templateCommonDir,p=ne.compile(re.readFileSync(ie.resolve(l,"rollup.config.js.njk"),"utf8"),ne.configure(l)).render(s),d=a.projectDir,m=ie.resolve(d,"rollup.config.js");re.writeFileSync(m,p,"utf8")},Bt=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const s={},r=e.doc.inputs||[],i=[];r.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&i.push(e);const t={};e.type&&(t.type=e.type),e.default&&(t.default=e.default),e.choices&&(t.choices=e.choices),(e.describe||e.description)&&(t.describe=e.describe||e.description),e.alias&&(t.alias=e.alias),!0===e.required&&(t.required=!0),!0===e.hidden&&(t.hidden=!0),!0===e.array&&(t.array=!0),!0===e.normalize&&(t.normalize=!0),e.nargs&&(t.nargs=e.nargs),s[e.name]=t}));const n={options:s,imports:i,atom:e},c=a.templateDir,l=de.compile(le.readFileSync(pe.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),o).render(n),p=a.projectDir,d=pe.resolve(p,"src/default/to.yargs.js");le.writeFileSync(d,l,"utf8")},Jt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},r=a.templateCommonDir,i=ge.compile(me.readFileSync(ue.resolve(r,".gitignore.njk"),"utf8"),ge.configure(r)).render(s),n=a.projectDir,c=ue.resolve(n,".gitignore");me.writeFileSync(c,i,"utf8")},Kt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const s={atom:e,packageDependencies:o},r=a.templateCommonDir,i=we.compile(fe.readFileSync(ye.resolve(r,"tsconfig.json.njk"),"utf8"),we.configure(r)).render(s),n=a.projectDir,c=ye.resolve(n,"tsconfig.json");fe.writeFileSync(c,i,"utf8")},Gt=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const s="readme.md",r=`Creating ${s}`;if(await a({message:r}),t.project?.readme){const e={content:t.project.readme.doc.content},a=t.templateCommonDir,o=he.compile(be.readFileSync(_e.resolve(a,`${s}.njk`),"utf8"),he.configure(a)).render(e),r=t.projectDir,i=_e.resolve(r,`${s}`);be.writeFileSync(i,o,"utf8")}else if(e.id){const a=await o.first({type:"wiki",parent_id:e.id});if(!a||"markdown"!==a.doc?.["content-type"])return;const{content:r,...i}=a.doc,n={content:r},c=t.templateCommonDir,l=he.compile(be.readFileSync(_e.resolve(c,`${s}.njk`),"utf8"),he.configure(c)).render(n),p=t.projectDir,d=_e.resolve(p,`${s}`);be.writeFileSync(d,l,"utf8")}},Wt=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=je.join("src","**","*");if(0!==ve.exec(`prettier --write ${o} *.{js,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},Xt=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Creating .d.ts"});if(0!==xe.exec("tsc",{cwd:a}).code)throw new Error("Couldnt create .d.ts files.")},Ht=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==ke.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},Yt=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==De.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},Zt=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:s,setInProgress:r}=e;if(!0===s.enabled)if("lib"===s.name)await _t({...e});else if("red"===s.name)await bt({...e});else if("npm"===s.name)await ht({...e});else if("gcs"===s.name)await wt({...e});else if("gitlab"===s.name)await yt({...e});else if("macos-app"===s.name)await jt({...e});else if("ios-app"===s.name)await vt({...e});else if("electron"===s.name)await xt({...e});else if("webos"===s.name)await kt({...e});else if("fnet-package"===s.name)await St({...e});else if("fnet-form"===s.name)await It({...e});else{let e;if("nextjs"===s.name?e=Dt:"docker"===s.name&&(e=Pt),!e)return;await e({atom:t,target:s,onProgress:r,projectDir:o.projectDir,dependencies:a})}},{Atom:Qt}=w,Vt=O,ea=t,ta=v,aa=F,oa=M;var sa=class{#e;#t;#a;#o;#s;#r;#i;#n;#c;#l;#p;#d;#m;#u;#g;#f;#y;constructor(e){this.#e=new Mt,this.#t=e,this.#r=[],this.#i=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#r,packageDevDependencies:this.#i,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Qt,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 Ot(),this.#c=this.#t.buildId||Ft(24),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#g=["all","deploy","build"].includes(this.#m),this.#f=["all","deploy"].includes(this.#m),this.#p=this.#t.protocol,this.#l="BUILD:"+this.#c,this.#d=(await ea({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await Rt(this.#y),await qt(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#n=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#n)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await Qt.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"];At.existsSync(e)&&At.readdirSync(e).forEach((o=>{a.includes(o)||(t=Ct.rm("-rf",$t.join(e,o)))}));let o=e;if(!At.existsSync(o)&&(t=Ct.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=$t.join(e,"src"),!At.existsSync(o)&&(t=Ct.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=$t.join(e,"src","default"),!At.existsSync()&&(t=Ct.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Tt.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.#r})}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 r=s.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));r?.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=Vt({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#p),"ac:"===t.protocol){const a=t.pathname.split("/");if(1===a.length)return await Qt.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await Qt.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Qt.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=$t.resolve(this.#t.projectSrcDir,"index.js"),a=await ta({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 aa({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=$t.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=$t.relative($t.join(this.#t.projectDir,"src","default"),e);if(!At.existsSync(e)){At.mkdirSync($t.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",At.writeFileSync(e,t,"utf8")}a.relativePath=t.split($t.sep).join("/"),this.#a.typesDir=`./types/${$t.basename(o)}/src`}else{const e=$t.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;At.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=Tt.compile(At.readFileSync($t.resolve(t,$t.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=$t.resolve(o,$t.join("src","default","index.js"));At.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:Et.dump(o)},r=this.#t.templateDir,i=Tt.compile(At.readFileSync($t.resolve(r,`${e}.njk`),"utf8"),this.#o).render(s),n=this.#t.projectDir,c=$t.resolve(n,`${e}`);At.writeFileSync(c,i,"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 Qt.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 Qt.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,a=t.doc.targets||[];for(let e=0;e<a.length;e++){const o=a[e];await Zt({...this.#y,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await Qt.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await Qt.update(o,{id:o.id})):o=await Qt.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(oa.blue(e)),await this._cache_set(this.#l,{status:"IN_PROGRESS",message:e})}async build(){try{this.#u&&(await this.createAtomLibFiles({libs:this.#s}),await this.createEngine(),await this.createProjectYaml(),await Gt(this.#y),await Kt(this.#y),await Jt(this.#y),await Bt(this.#y),await Lt(this.#y),await Nt(this.#y),await Ut(this.#y),await zt(this.#y),await Wt(this.#y),await Xt(this.#y),this.#g&&(await Ht(this.#y),await Yt(this.#y),this.#f&&await this.deploy())),await this._cache_set(this.#l,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e.message||e}),console.log(e),e}}};const ra=p,ia=d;var na=function({baseDir:e=__dirname}){let t=e;for(;t!==ia.parse(t).root;){const e=ia.join(t,"node_modules");if(ra.existsSync(e))return e;t=ia.dirname(t)}return null};const ca=process.cwd(),{spawn:la}=e;t({name:["redis"],dir:ca,optional:!0});const pa=a,da=o,{hideBin:ma}=s,ua=r,ga=i,fa=n,ya=c,wa=l,ha=sa,ba=na({baseDir:__dirname}),_a="win32"===process.platform?";":":";async function va(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:pa.resolve(ba,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:pa.resolve(ba,"./@fnet/cli-project-common/dist/template/default"),projectDir:pa.resolve(ca,`./.output/${e.id}`),coreDir:pa.resolve(ba,"./@fnet/cli-project-node/dist/template/core")};{const t=await async function(){const e=pa.resolve(ca,"node.yaml");if(!ua.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=ua.readFileSync(e,"utf8"),{parsed:a}=await ya({content:t}),o=pa.dirname(e),s={libraryAtom:{doc:{...a},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},r=pa.resolve(o,"node.devops.yaml");if(ua.existsSync(r)){const e=ua.readFileSync(r,"utf8"),t=ga.parse(e);s.devops={filePath:r,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{ua.writeFileSync(s.devops.filePath,ga.stringify(s.devops.doc))}}}const i=pa.resolve(o,"readme.md");if(ua.existsSync(i)){const e=ua.readFileSync(i,"utf8");s.readme={filePath:i,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return s}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:pa.resolve(ba,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:pa.resolve(ba,"./@fnet/cli-project-common/dist/template/default"),coreDir:pa.resolve(ba,"./@fnet/cli-project-node/dist/template/core"),projectDir:pa.resolve(t.projectDir,"./.workspace"),projectSrcDir:pa.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${pa.join(ba,"/.bin")}${_a}${process.env.PATH}`,da(ma(process.argv)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0}).option("vscode",{type:"boolean",default:!0,alias:"vs"})),(async e=>{try{const t=pa.resolve(ba,"@fnet/cli-project-node/dist/template/project"),a=pa.resolve(ca,e.name);ua.existsSync(a)||ua.mkdirSync(a),await wa({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=fa.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(fa.which("git")&&(o=fa.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(fa.which("code")&&e.vscode&&(o=fa.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=pa.resolve(ba,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=pa.basename(a),e.update){if(await wa({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==fa.exec("fnode build",{cwd:a}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",alias:"m",default:"build",choices:["all","file","build","deploy","bpmn"]})),(async e=>{try{const t=await va(e),a=new ha(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await va({...e,mode:"all"}),a=new ha(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await va({...e,mode:"file"}),a=new ha(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await va(e),{projectDir:a}=t,o=`npm ${process.argv.slice(3).join(" ")}`;fa.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await va(e),{projectDir:a}=t,o=`node ${process.argv.slice(3).join(" ")}`;fa.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await va(e),{projectDir:a}=t,o=`npm run serve -- ${process.argv.slice(3).join(" ")}`;fa.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await va(e),{projectDir:a}=t,o=`npm run watch -- ${process.argv.slice(3).join(" ")}`;fa.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await va(e),{projectDir:a}=t,o=`npm run app -- ${process.argv.slice(3).join(" ")}`;fa.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await va(e),{projectDir:a}=t,o=process.argv.slice(3);la("npm",["run","cli","--",...o],{cwd:a,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}})).demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
2
+ "use strict";var e=require("child_process"),t=require("@fnet/config"),a=require("path"),o=require("yargs/yargs"),r=require("yargs/helpers"),s=require("fs"),n=require("yaml"),i=require("shelljs"),c=require("@fnet/yaml"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),m=require("js-yaml"),u=require("nunjucks"),g=require("redis"),f=require("@flownet/lib-is-redis-online"),y=require("nanoid"),w=require("@flownet/lib-atom-api-js"),h=require("axios"),_=require("qs"),b=require("lodash.merge"),v=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),x=require("@fnet/shell"),D=require("semver"),k=require("node:os"),A=require("@node-red/util"),P=require("@flownet/lib-to-ios-app"),S=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),E=require("@flownet/lib-to-webos"),$=require("@flownet/lib-to-nextjs"),T=require("lodash.clonedeep"),O=require("@flownet/lib-to-docker"),C=require("form-data"),M=require("@flownet/lib-parse-node-url"),R=require("@flownet/lib-pick-npm-versions"),F=require("chalk");const q=g,N=f;const{Api:L}=w,U=h.default,z=_;const B=b,J=s,W=a,K=v;function G({dir:e,name:t="index"}){let a=W.resolve(e,`./${t}.tsx`);if(J.existsSync(a)||(a=W.resolve(e,`./${t}.ts`)),J.existsSync(a)||(a=W.resolve(e,`./${t}.jsx`)),J.existsSync(a)||(a=W.resolve(e,`./${t}.js`)),!J.existsSync(a))return{};const o=a,r=W.extname(a);return{file:o,ext:r,ts:".ts"===r||".tsx"===r,name:t}}const H=j;const X=p,Y=d,Z=l;const Q=u,V=p,ee=d,te=v,ae=j;const oe=p,re=d,se=l;const ne=p,ie=d,ce=u,le=v;const pe=p,de=d,me=u;const ue=p,ge=d,fe=u;const ye=p,we=d,he=u;const _e=u,be=p,ve=d;const je=i,xe=a;const De=i;const ke=i;const Ae=i;const Pe=x,Se=t;const Ie=p,Ee=d,$e=D,Te=x,Oe=t;const Ce=p,Me=d,Re=D,Fe=i,qe=t;const Ne=p,Le=d,Ue=k,ze=u,Be=A,Je=t;const We=s,Ke=a,Ge=t;const He=P;const Xe=S;const Ye=I;const Ze=E;const Qe=$,Ve=T,et=b,tt=D,at=d;const ot=O,rt=T,st=b,nt=D,it=d;const ct=p,lt=d,pt=D,dt=x,mt=t,ut=h.default;const gt=D,ft=t,yt=h.default;const wt=D,ht=t,_t=h.default,bt=s,vt=x,jt=C;const xt=D,Dt=t,kt=h.default;const At=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:r})=>{await e({message:"Deploying it as gitlab project."});const s=t.projectDir;let n="fnet-to-gitlab";const i=o.params.config||"gitlab",c=await Se({name:i,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${i}`);const{data:l}=c.data;n+=` --projectGroupId=${l.projectGroupId}`,n+=` --projectPath='${s}'`,n+=` --projectName='${o.params.name}'`,n+=` --projectBranch='${o.params.branch||"main"}'`,n+=` --gitlabHost='${l.gitlabHost}'`,n+=` --gitlabToken='${l.gitlabToken}'`,n+=` --gitlabUsername='${l.gitlabUsername}'`,n+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await Pe({cmd:n}),a.isDirty=!0)},Pt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:r})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,n=Ee.resolve(s,"package.json"),i=Ie.readFileSync(n),c=JSON.parse(i);c.name=o.params.name,c.version=$e.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,Ie.writeFileSync(n,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Oe({name:o.config||"gcs",dir:t.projectDir});let d="fnet-files-to-gcs";d+=` --projectId='${p.env.GCS_PROJECT_ID}'`,d+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,d+=` --keyFilename='${Ee.resolve(Ee.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${s}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(d+=` --domain='${p.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(d+=" --dryRun"),await Te({cmd:d}),Ie.writeFileSync(n,i),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=c.version,await r({target:o,packageJSON:c}))},St=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r})=>{await t({message:"Deploying it as npm package."});const s=a.projectDir,n=Me.resolve(s,"package.json"),i=Ce.readFileSync(n),c=JSON.parse(i);c.name=r.params.name,c.version=Re.inc(r.params.version,"patch");const l=r.params.bin?.name||r.params.bin;!1!==r.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Ce.writeFileSync(n,JSON.stringify(c,null,"\t"));const p=(await qe({name:a.npmConfig||"npm",dir:a.projectDir}))?.data;if(Ce.writeFileSync(Me.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===r.dryRun)return;if(0!==Fe.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");Ce.writeFileSync(n,i),o.isDirty=!0,r.params.version=c.version},It=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:s,packageDependencies:n,njEnv:i})=>{await t({message:"Deploying it as node-red flow."});const c=a.projectDir,l=a.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===r.deploy.template)d={atom:e,packageDependencies:n,red:{tab:{id:r.deploy.id||Be.util.generateId(),label:`${p}/${e.id?e.id:Ue.hostname()}/${e.name}/${r.deploy.name||r.deploy.template}`},function:{id:Be.util.generateId(),name:e.doc.name,initialize:{content:Ne.readFileSync(Le.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Be.util.generateId(),...r.params?.inject,payload:"json"===r.params?.inject?.payloadType?`'${JSON.stringify(r.params?.inject?.payload)}'`:r.params?.inject?.payload},debug:{id:Be.util.generateId()}}};else if("cronjob"===r.deploy.template){let t=r.params?.schedules?cloneDeep(r.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:n,red:{tab:{id:r.deploy.id||Be.util.generateId(),label:`${p}/${e.id?e.id:Ue.hostname()}/${r.deploy.name||r.deploy.template}`},function:{id:Be.util.generateId(),name:e.doc.name,initialize:{content:Ne.readFileSync(Le.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Be.util.generateId(),schedules:t},debug:{id:Be.util.generateId()}}}}else{if("http"!==r.deploy.template)return;d={atom:e,packageDependencies:n,red:{tab:{id:r.deploy.id||Be.util.generateId(),label:`${p}/${e.id?e.id:Ue.hostname()}/${r.deploy.name||r.deploy.template}`},function:{id:Be.util.generateId(),name:e.doc.name,initialize:{content:Ne.readFileSync(Le.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Be.util.generateId(),method:r.params.method||"get",url:r.params.url},httpout:{id:Be.util.generateId()},debug:{id:Be.util.generateId()}}}}let m=ze.compile(Ne.readFileSync(Le.resolve(l,`deploy/node-red/${r.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(Ne.writeFileSync(Le.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===r.dryRun)return;o.isDirty=!0;const u=(await Je({name:a.redConfig||"red",dir:a.projectDir}))?.data,g=r.deploy.url||u.env.RED_URL,f={};if(!1!==r.deploy.auth&&(f.Authorization="Bearer "+atomAccessToken),r.deploy.id)!0===r.actions?.delete?(await axios({method:"DELETE",url:`${g}/flow/${r.deploy.id}`,headers:f}),delete r.actions.delete,delete r.deploy.id,r.enabled=!1):await axios({method:"PUT",url:`${g}/flow/${r.deploy.id}`,data:m,headers:f});else{const e=await axios({method:"POST",url:`${g}/flow`,data:m,headers:f});r.deploy.id=e.data.id}},Et=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:r,deploymentProject:s,deploymentProjectTarget:n})=>{await a({message:"Deploying it as workflow lib."});const i=(await Ge({name:"atom",dir:o.projectDir}))?.data;let c,l,p,d=n.deploy.name.split("/");if(1===d.length)l=i.env.ATOM_LIBRARIES_ID,p=n.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:i.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===n.dryRun)return;if(s.isDirty=!0,n.deploy.id){if(c=await t.get({id:n.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;n.deploy.id=c.id}const m=o.projectDir;c.doc.contents=[{content:We.readFileSync(Ke.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:We.readFileSync(Ke.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:We.readFileSync(Ke.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=r,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},$t=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:s,registerToPackageManager:n})=>{await t({message:"Deploying it as ios app package."});const i=a.projectDir;if(!0===r.dryRun)return;const c={projectDir:i,dest:i,atom:e,params:r.params};await He(c),o.isDirty=!0},Tt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:s})=>{await t({message:"Deploying it as macos app package."});const n=a.projectDir;if(!0===r.dryRun)return;const i={projectDir:n,dest:n,atom:e,params:r.params};await Xe(i),o.isDirty=!0},Ot=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r,buildId:s})=>{await t({message:"Deploying it as electron package."});const n=a.projectDir;if(!0===r.dryRun)return;const i={src:n,dest:n,atom:e,params:r.params};await Ye(i),o.isDirty=!0},Ct=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:r})=>{await t({message:"Deploying it as webos package."});const s=a.projectDir;if(!0===r.dryRun)return;const n={src:s,dest:s,atom:e,params:r.params};await Ze(n),o.isDirty=!0},Mt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as nextjs package."});t.params=et({name:"nextjs-app",version:"0.1.0"},t.params);const s=tt.inc(t.params.version,"patch");t.params.version=s;const n=Ve(t);n.params.dependencies=Ve(r);const i={atom:e,target:n.params,projectDir:o,renderDir:at.resolve(o,"nextjs")};return{deployer:await Qe(i)}},Rt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:r})=>{a&&await a({message:"Deploying it as docker package."});t.params=st({},t.params);const s=nt.inc(t.params.version,"patch");t.params.version=s;const n=rt(t);n.params.dependencies=rt(r);const i={atom:e,target:n.params,projectDir:o,renderDir:it.resolve(o,"docker")};return{deployer:await ot(i)}},Ft=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:r})=>{await e({message:"Deploying it as fnet package."});const s=t.projectDir,n=lt.resolve(s,"package.json"),i=ct.readFileSync(n),c=JSON.parse(i);c.name=o.params.name,c.version=pt.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,ct.writeFileSync(n,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await mt({name:o.config||"fnet-package",dir:t.projectDir});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const d=`${p.env.ATOM_API_URL}/v1/auth/token`,m=p.env.ATOM_API_USERNAME,u=p.env.ATOM_API_PASSWORD;let g=await ut({method:"POST",url:d,data:{username:m,password:u},headers:{"Content-Type":"application/json"}});const f=g.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${d}`);let y="fnet-files-to-gcs";if(y+=` --projectId='${p.env.GCS_PROJECT_ID}'`,y+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,y+=` --keyFilename='${lt.resolve(lt.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,y+=` --dir='${s}'`,y+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",y+=` --destDir='${c.name}/${c.version}'`,y+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(y+=` --domain='${p.env.DOMAIN}'`),!0!==o.dry_run&&!0!==o.params.dry_run||(y+=" --dryRun"),await dt({cmd:y}),ct.writeFileSync(n,i),!0===o.dryRun)return;a.isDirty=!0,o.params.version=c.version;const w=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(g=await ut({method:"POST",url:w,data:{name:c.name,version:c.version,version_domain:p.env.DOMAIN,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),g.data?.error)throw new Error("Failed to publish fnet package.")},qt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet form."});const r=gt.inc(o.params.version,"patch"),{file:s,data:n}=await ft({name:o.config||"fnet-form",dir:t.projectDir});if(!n.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!n.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!n.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const i=`${n.env.ATOM_API_URL}/v1/auth/token`,c=n.env.ATOM_API_USERNAME,l=n.env.ATOM_API_PASSWORD;let p=await yt({method:"POST",url:i,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${i}`);a.isDirty=!0,o.params.version=r;const m=`${n.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await yt({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet form.")},Nt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet flow."});const r=wt.inc(o.params.version,"patch"),{file:s,data:n}=await ht({name:o.config||"fnet-flow",dir:t.projectDir});if(!n.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!n.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!n.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const i=`${n.env.ATOM_API_URL}/v1/auth/token`,c=n.env.ATOM_API_USERNAME,l=n.env.ATOM_API_PASSWORD;let p=await _t({method:"POST",url:i,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${i}`);a.isDirty=!0,o.params.version=r;const m=`${n.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await _t({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet flow.");const u=p.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.projectDir}'`,g+=" -p=flow.yaml",g+=" -p=flow.main.yaml",g+=" -p=project.bpmn",g+=" --stdout_format=json";const f=await vt({cmd:g});if(0!==f.code)throw new Error(f.stderr);const y=JSON.parse(f.stdout).zip_file_path;let w=new jt;w.append("file",bt.createReadStream(y));const h=await _t.request({method:"POST",maxBodyLength:1/0,url:`${n.env.ATOM_API_URL}/v1/service/upload/single/${u}`,headers:{...w.getHeaders(),Authorization:`Bearer ${d}`},data:w});if(h.data?.error)throw new Error("Error uploading fnet flow.")},Lt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o})=>{await e({message:"Deploying it as fnet node."});const r=xt.inc(o.params.version,"patch"),{file:s,data:n}=await Dt({name:o.config||"fnet-node",dir:t.projectDir});if(!n.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!n.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!n.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const i=`${n.env.ATOM_API_URL}/v1/auth/token`,c=n.env.ATOM_API_USERNAME,l=n.env.ATOM_API_PASSWORD;let p=await kt({method:"POST",url:i,data:{username:c,password:l},headers:{"Content-Type":"application/json"}});const d=p.data?.access_token;if(!d)throw new Error(`Invalid access_token from ${i}`);a.isDirty=!0,o.params.version=r;const m=`${n.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await kt({method:"POST",url:m,data:{name:o.params.name,version:o.params.version,docs:o.params.docs,configs:o.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet node.")};const Ut=p,zt=d,Bt=m,Jt=i,Wt=u,Kt=async()=>{if(!await N({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=q.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Gt}=y,Ht=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(L.set_api_url(e.data.url),t)return L.set_req_token(t),void a(t);U({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:z.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{L.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{L.set_req_token(),o(e)}))}))}},Xt=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const a=e.doc.features;a.hasOwnProperty("all_parsed_imports")||(a.all_parsed_imports=!0);const o=W.resolve(t.project.projectDir),r=G({dir:W.resolve(o,"./app")});if(r.file){let e=await K({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.app_uses_jsx=t,a.app_has_entry=!0,e=await K({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.app_entry_uses_jsx=t,a.app_entry_is_ts=r.ts,a.app_entry_ext=r.ext}const s=G({dir:W.resolve(o,"./cli")});if(s.file){let e=await K({file:s.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.cli_uses_jsx=t,a.cli_has_entry=!0,e=await K({file:s.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.cli_entry_uses_jsx=t,a.cli_entry_is_ts=s.ts,a.cli_entry_ext=s.ext}if("workflow.lib"===e.type){const e=G({dir:W.resolve(o,"./src")});if(e.file){let t=await K({file:e.file,recursive:!0}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.src_uses_jsx=o,a.src_has_entry=!0,t=await K({file:e.file}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.src_entry_uses_jsx=o,a.src_entry_is_ts=e.ts,a.src_entry_ext=e.ext}}const n=!0===a.app_has_entry||!0===a.src_uses_jsx,i=!0===a.cli_has_entry||!0===a.src_uses_jsx;a.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===a.form||!0===a.form?.enabled,a.multiple_enabled=a.multiple_enabled||!0===a.multiple||!0===a.multiple?.enabled,!1===a.app?a.app={enabled:!1}:!0===a.app?a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:n}:a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:n,...a.app||{}},a.app.enabled=!0===a.app.enabled&&(!0===e.doc.features.form_enabled||!0===a.app.extend||!0===a.app.enabled),a.app.format=a.app.format||"esm",a.app.folder=a.app.folder||a.app.format||"default",!1===a.cli?a.cli={enabled:!1}:!0===a.cli?a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:i}:a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:i,...a.cli||{}},a.cli.enabled=!0===a.cli.enabled&&(!1===e.doc.features.form_enabled||!0===a.cli.extend||!0===a.cli.enabled),a.cli.format=a.cli.format||"esm",a.cli.folder=a.cli.folder||a.cli.folder||"esm";const c={cjs:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!0,string:!0},cjsx:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0,string:!0},esmx:{format:"esm",browser:!0,babel:!0,context:a.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0,string:!0},umd:{format:"umd",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1,string:!0}},l={};!0===a.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,babel_options:{targets:{chrome:"79"}}}),!0===a.app.enabled&&(a.app.dir=`./dist/app/${a.app.folder}`,c.app={format:a.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:a.app.dir,terser:!0,output_exports:!1===a.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:a.app.dir})),!0===a.cli.enabled&&(a.cli.dir=`./dist/cli/${a.cli.folder}`,c.cli={format:a.cli.format,context:"global",babel:!0===a.src_uses_jsx||!0===a.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:a.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===a.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${W.normalize(a.app.dir||".")}`,files:[W.normalize("./dist/**/*")],cors:!0,open:!1};a.babel_options=a.babel_options||a.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},a.browsersync_options=B(p,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=B({},a.replace_options||a.replace?.options||{}),a.terser_options=B({},a.terser_options||a.terser?.options||{}),a.css_options=B({},a.css_options||a.css?.options||{}),a.wasm_options=B({},a.wasm_options||a.wasm?.options||{}),a.copy_options=B(l,a.copy_options||a.copy?.options||{}),a.json_options=B({},a.json_options||a.json?.options||{}),a.image_options=B({},a.image_options||a.image?.options||{}),a.analyzer_options=B({summaryOnly:!0,limit:12},a.analyzer_options||a.analyzer?.options||{}),a.visualizer_options=B({},a.visualizer_options||a.visualizer?.options||{}),a.string_options=B({},a.string_options||a.string?.options||{}),a.rollup=a.rollup||{},a.rollup_output=B(c,a.rollup_output||a.rollup?.output||{}),a.string_enabled=!0===a.string||a.string&&!1!==a.string?.enabled;const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==a.rollup[e]?(!0===a.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||a.babel_options,t.browsersync_options=B(a.browsersync_options,t.browsersync_options),t.replace_options=B(a.replace_options,t.replace_options),t.terser_options=B(a.terser_options,t.terser_options),t.css_options=B(a.css_options,t.css_options),t.wasm_options=B(a.wasm_options,t.wasm_options),t.copy_options=B(a.copy_options,t.copy_options),t.json_options=B(a.json_options,t.json_options),t.image_options=B(a.image_options,t.image_options),t.analyzer_options=B(a.analyzer_options,t.analyzer_options),t.visualizer_options=B(a.visualizer_options,t.visualizer_options),t.string_options=B(a.string_options,t.string_options),t.string=a.string_enabled&&t.string,a.form_enabled&&(t.babel=!0)):t.enabled=!1)}a.babel_enabled=d.some((e=>!0===a.rollup_output[e].babel)),a.browser_enabled=d.some((e=>!0===a.rollup_output[e].babel)),a.browsersync_enabled=!1!==a.browsersync&&d.some((e=>!0===a.rollup_output[e].browsersync)),a.browsersync_enabled=a.browsersync_enabled&&a.app.enabled,a.wasm_enabled=!0===a.wasm||a.wasm&&!1!==a.wasm?.enabled,a.css_enabled=!0===a.css||a.css&&!1!==a.css?.enabled,a.json_enabled=!0===a.json||a.json&&!1!==a.json?.enabled,a.terser_enabled=!0===a.terser||a.terser&&!1!==a.terser?.enabled,a.copy_enabled=a.app.enabled||a.copy_enabled||a.copy&&!1!==a.copy?.enabled,a.image_enabled=!0===a.image||a.image&&!1!==a.image?.enabled,a.analyzer_enabled=!0===a.analyzer||a.analyzer&&!1!==a.analyzer?.enabled,a.visualizer_enabled=!0===a.visualizer||a.visualizer&&!1!==a.visualizer?.enabled,a.dependency_auto_enabled=!1!==a.dependency_auto&&!1!==a.dependency_auto?.enabled,a.npm_install_flags=a.npm_install_flags||"",a.react_version=a.react_version||a.react?.version||18},Yt=async({atom:e,packageDependencies:t,packageDevDependencies:a})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";a=`^${(await H({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),a.push({package:"@babel/core",version:"^7.23"}),a.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),a.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),a.push({package:"@rollup/plugin-replace",version:"^5.0"}),a.push({package:"rollup",version:"^4.9"}),a.push({package:"rollup-plugin-delete",version:"^2.0"}),a.push({package:"rollup-plugin-dts",version:"^6.0"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),a.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6.0"}),a.push({package:"@babel/preset-env",version:"7.23"}),a.push({package:"@babel/preset-react",version:"7.23"})),e.doc.features.browsersync_enabled&&a.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&a.push({package:"@rollup/plugin-json",version:"^6.0"}),e.doc.features.terser_enabled&&a.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&a.push({package:"@rollup/plugin-wasm",version:"^6.1"}),e.doc.features.image_enabled&&a.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.analyzer_enabled&&a.push({package:"rollup-plugin-analyzer",version:"^3.3"}),e.doc.features.visualizer_enabled&&a.push({package:"rollup-plugin-visualizer",version:"^5.9"}),e.doc.features.string_enabled&&a.push({package:"rollup-plugin-string",version:"^3.0"}),e.doc.features.css_enabled){a.push({package:"rollup-plugin-postcss",version:"4.0"}),a.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":a.push({package:"postcss-import",version:"^15.1"});break;case"postcss-url":a.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":a.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":a.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":a.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&a.push({package:"rollup-plugin-copy",version:"^3.5"})},Zt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const r={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o,ts:Date.now()},s=a.templateDir,n=Y.resolve(a.projectDir,"src/app");X.existsSync(n)||X.mkdirSync(n,{recursive:!0}),await Z({pattern:["index.html.njk","index.js.njk"],dir:Y.resolve(s,"src/app"),outDir:n,context:r})},Qt=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:r})=>{await r({message:"Creating package.json."});const s=a.find((e=>"react"===e.package)),n=a.find((e=>"react-dom"===e.package));s&&!n?a.push({package:"react-dom",version:s.version}):s&&n&&(n.version=s.version),s&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const i=[];!0===e.doc.features.app.enabled&&i.push(ee.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&i.push(ee.resolve(t.projectDir,"src/cli/index.js"));for await(const t of i){const r=t;if(!V.existsSync(r))throw new Error(`App file not found: ${r}`);const s=await te({file:r,recursive:!0}),n=!0===e.doc.features.all_parsed_imports?s.all:s.required;for await(const e of n){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const t=(await ae({name:e.package,groupBy:{minor:!0}}))[0][0];o.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}}const c={atom:e,packageDependencies:a,packageDevDependencies:o},l=t.templateCommonDir,p=Q.compile(V.readFileSync(ee.resolve(l,"package.json.njk"),"utf8"),Q.configure(l)).render(c),d=t.projectDir,m=ee.resolve(d,"package.json");V.writeFileSync(m,p,"utf8")},Vt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const r={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o},s=a.templateDir,n=re.resolve(a.projectDir,"src/cli");oe.existsSync(n)||oe.mkdirSync(n,{recursive:!0}),await se({pattern:["index.js.njk"],dir:re.resolve(s,"src/cli"),outDir:n,context:r})},ea=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const r={atom:e,packageDependencies:o},s=ie.resolve(a.projectDir,"src","default/index.js");if(!ne.existsSync(s))throw new Error(`Entry file not found: ${s}`);const n=(await le({file:s,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),i=e.doc.features.rollup_output,c=Object.keys(i);for(let e=0;e<c.length;e++){const t=i[c[e]];if(!0===t.browser&&n.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(n.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<n.length;e++){const a=n[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(n)}}const l=a.templateCommonDir,p=ce.compile(ne.readFileSync(ie.resolve(l,"rollup.config.js.njk"),"utf8"),ce.configure(l)).render(r),d=a.projectDir,m=ie.resolve(d,"rollup.config.js");ne.writeFileSync(m,p,"utf8")},ta=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const r={},s=e.doc.inputs||[],n=[];s.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&n.push(e);const t={};e.type&&(t.type=e.type),e.default&&(t.default=e.default),e.choices&&(t.choices=e.choices),(e.describe||e.description)&&(t.describe=e.describe||e.description),e.alias&&(t.alias=e.alias),!0===e.required&&(t.required=!0),!0===e.hidden&&(t.hidden=!0),!0===e.array&&(t.array=!0),!0===e.normalize&&(t.normalize=!0),e.nargs&&(t.nargs=e.nargs),r[e.name]=t}));const i={options:r,imports:n,atom:e},c=a.templateDir,l=me.compile(pe.readFileSync(de.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),o).render(i),p=a.projectDir,d=de.resolve(p,"src/default/to.yargs.js");pe.writeFileSync(d,l,"utf8")},aa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const r={atom:e,packageDependencies:o},s=a.templateCommonDir,n=fe.compile(ue.readFileSync(ge.resolve(s,".gitignore.njk"),"utf8"),fe.configure(s)).render(r),i=a.projectDir,c=ge.resolve(i,".gitignore");ue.writeFileSync(c,n,"utf8")},oa=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const r={atom:e,packageDependencies:o},s=a.templateCommonDir,n=he.compile(ye.readFileSync(we.resolve(s,"tsconfig.json.njk"),"utf8"),he.configure(s)).render(r),i=a.projectDir,c=we.resolve(i,"tsconfig.json");ye.writeFileSync(c,n,"utf8")},ra=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const r="readme.md",s=`Creating ${r}`;if(await a({message:s}),t.project?.readme){const e={content:t.project.readme.doc.content},a=t.templateCommonDir,o=_e.compile(be.readFileSync(ve.resolve(a,`${r}.njk`),"utf8"),_e.configure(a)).render(e),s=t.projectDir,n=ve.resolve(s,`${r}`);be.writeFileSync(n,o,"utf8")}else if(e.id){const a=await o.first({type:"wiki",parent_id:e.id});if(!a||"markdown"!==a.doc?.["content-type"])return;const{content:s,...n}=a.doc,i={content:s},c=t.templateCommonDir,l=_e.compile(be.readFileSync(ve.resolve(c,`${r}.njk`),"utf8"),_e.configure(c)).render(i),p=t.projectDir,d=ve.resolve(p,`${r}`);be.writeFileSync(d,l,"utf8")}},sa=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=xe.join("src","**","*");if(0!==je.exec(`prettier --write ${o} *.{js,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},na=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Creating .d.ts"});if(0!==De.exec("tsc",{cwd:a}).code)throw new Error("Couldnt create .d.ts files.")},ia=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==ke.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},ca=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==Ae.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},la=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:r,setInProgress:s}=e;if(!0===r.enabled)if("lib"===r.name)await Et({...e});else if("red"===r.name)await It({...e});else if("npm"===r.name)await St({...e});else if("gcs"===r.name)await Pt({...e});else if("gitlab"===r.name)await At({...e});else if("macos-app"===r.name)await Tt({...e});else if("ios-app"===r.name)await $t({...e});else if("electron"===r.name)await Ot({...e});else if("webos"===r.name)await Ct({...e});else if("fnet-package"===r.name)await Ft({...e});else if("fnet-form"===r.name)await qt({...e});else if("fnet-node"===r.name)await Lt({...e});else if("fnet-flow"===r.name)await Nt({...e});else{let e;if("nextjs"===r.name?e=Mt:"docker"===r.name&&(e=Rt),!e)return;await e({atom:t,target:r,onProgress:s,projectDir:o.projectDir,dependencies:a})}},{Atom:pa}=w,da=M,ma=t,ua=v,ga=R,fa=F;var ya=class{#e;#t;#a;#o;#r;#s;#n;#i;#c;#l;#p;#d;#m;#u;#g;#f;#y;constructor(e){this.#e=new Ht,this.#t=e,this.#s=[],this.#n=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#s,packageDevDependencies:this.#n,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:pa,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 Kt(),this.#c=this.#t.buildId||Gt(24),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#g=["all","deploy","build"].includes(this.#m),this.#f=["all","deploy"].includes(this.#m),this.#p=this.#t.protocol,this.#l="BUILD:"+this.#c,this.#d=(await ma({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await Xt(this.#y),await Yt(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#i=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#i)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await pa.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"];Ut.existsSync(e)&&Ut.readdirSync(e).forEach((o=>{a.includes(o)||(t=Jt.rm("-rf",zt.join(e,o)))}));let o=e;if(!Ut.existsSync(o)&&(t=Jt.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=zt.join(e,"src"),!Ut.existsSync(o)&&(t=Jt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=zt.join(e,"src","default"),!Ut.existsSync()&&(t=Jt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Wt.configure(e,{watch:!1,dev:!0}),this.#y.njEnv=this.#o}async initLibs(){const e=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id}];this.#r=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#s})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],r=await this.findAtomLibrary({url:o.name});o.atom=r;const s=r.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=da({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#p),"ac:"===t.protocol){const a=t.pathname.split("/");if(1===a.length)return await pa.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await pa.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await pa.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=zt.resolve(this.#t.projectSrcDir,"index.js"),a=await ua({file:t,recursive:!0}),o=e.doc.dependencies,r=!0===this.#a.doc.features.all_parsed_imports?a.all:a.required;for await(const e of r){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await ga({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=zt.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=zt.relative(zt.join(this.#t.projectDir,"src","default"),e);if(!Ut.existsSync(e)){Ut.mkdirSync(zt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Ut.writeFileSync(e,t,"utf8")}a.relativePath=t.split(zt.sep).join("/"),this.#a.typesDir=`./types/${zt.basename(o)}/src`}else{const e=zt.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Ut.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#r.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},t=this.#t.templateDir,a=Wt.compile(Ut.readFileSync(zt.resolve(t,zt.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,r=zt.resolve(o,zt.join("src","default","index.js"));Ut.writeFileSync(r,a,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:a,...o}=this.#a.doc,r={content:Bt.dump(o)},s=this.#t.templateDir,n=Wt.compile(Ut.readFileSync(zt.resolve(s,`${e}.njk`),"utf8"),this.#o).render(r),i=this.#t.projectDir,c=zt.resolve(i,`${e}`);Ut.writeFileSync(c,n,"utf8")}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&await a.save()}}else if(this.#a.id){const e=await pa.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 pa.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,a=t.doc.targets||[];for(let e=0;e<a.length;e++){const o=a[e];await la({...this.#y,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await pa.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await pa.update(o,{id:o.id})):o=await pa.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(fa.blue(e)),await this._cache_set(this.#l,{status:"IN_PROGRESS",message:e})}async build(){try{this.#u&&(await this.createAtomLibFiles({libs:this.#r}),await this.createEngine(),await this.createProjectYaml(),await ra(this.#y),await oa(this.#y),await aa(this.#y),await ta(this.#y),await Vt(this.#y),await Zt(this.#y),await ea(this.#y),await Qt(this.#y),await sa(this.#y),await na(this.#y),this.#g&&(await ia(this.#y),await ca(this.#y),this.#f&&await this.deploy())),await this._cache_set(this.#l,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e.message||e}),console.log(e),e}}};const wa=p,ha=d;var _a=function({baseDir:e=__dirname}){let t=e;for(;t!==ha.parse(t).root;){const e=ha.join(t,"node_modules");if(wa.existsSync(e))return e;t=ha.dirname(t)}return null};const ba=process.cwd(),{spawn:va}=e;t({name:["redis"],dir:ba,optional:!0});const ja=a,xa=o,{hideBin:Da}=r,ka=s,Aa=n,Pa=i,Sa=c,Ia=l,Ea=ya,$a=_a({baseDir:__dirname}),Ta="win32"===process.platform?";":":";async function Oa(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:ja.resolve($a,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:ja.resolve($a,"./@fnet/cli-project-common/dist/template/default"),projectDir:ja.resolve(ba,`./.output/${e.id}`),coreDir:ja.resolve($a,"./@fnet/cli-project-node/dist/template/core")};{const t=await async function(){const e=ja.resolve(ba,"node.yaml");if(!ka.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=ka.readFileSync(e,"utf8"),{parsed:a}=await Sa({content:t}),o=ja.dirname(e),r={libraryAtom:{doc:{...a},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},s=ja.resolve(o,"node.devops.yaml");if(ka.existsSync(s)){const e=ka.readFileSync(s,"utf8"),t=Aa.parse(e);r.devops={filePath:s,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{ka.writeFileSync(r.devops.filePath,Aa.stringify(r.devops.doc))}}}const n=ja.resolve(o,"readme.md");if(ka.existsSync(n)){const e=ka.readFileSync(n,"utf8");r.readme={filePath:n,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return r}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:ja.resolve($a,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:ja.resolve($a,"./@fnet/cli-project-common/dist/template/default"),coreDir:ja.resolve($a,"./@fnet/cli-project-node/dist/template/core"),projectDir:ja.resolve(t.projectDir,"./.workspace"),projectSrcDir:ja.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${ja.join($a,"/.bin")}${Ta}${process.env.PATH}`,xa(Da(process.argv)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0}).option("vscode",{type:"boolean",default:!0,alias:"vs"})),(async e=>{try{const t=ja.resolve($a,"@fnet/cli-project-node/dist/template/project"),a=ja.resolve(ba,e.name);ka.existsSync(a)||ka.mkdirSync(a),await Ia({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=Pa.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Pa.which("git")&&(o=Pa.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(Pa.which("code")&&e.vscode&&(o=Pa.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=ja.resolve($a,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=ja.basename(a),e.update){if(await Ia({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==Pa.exec("fnode build",{cwd:a}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",alias:"m",default:"build",choices:["all","file","build","deploy","bpmn"]})),(async e=>{try{const t=await Oa(e),a=new Ea(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await Oa({...e,mode:"all"}),a=new Ea(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await Oa({...e,mode:"file"}),a=new Ea(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Oa(e),{projectDir:a}=t,o=`npm ${process.argv.slice(3).join(" ")}`;Pa.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Oa(e),{projectDir:a}=t,o=`node ${process.argv.slice(3).join(" ")}`;Pa.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Oa(e),{projectDir:a}=t,o=`npm run serve -- ${process.argv.slice(3).join(" ")}`;Pa.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Oa(e),{projectDir:a}=t,o=`npm run watch -- ${process.argv.slice(3).join(" ")}`;Pa.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Oa(e),{projectDir:a}=t,o=`npm run app -- ${process.argv.slice(3).join(" ")}`;Pa.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Oa(e),{projectDir:a}=t,o=process.argv.slice(3);va("npm",["run","cli","--",...o],{cwd:a,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}})).demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e=require("child_process"),t=require("@fnet/config"),o=require("path"),n=require("yargs/yargs"),i=require("yargs/helpers"),s=require("fs"),a=require("yaml"),r=require("shelljs"),c=require("@fnet/yaml"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),f=require("js-yaml"),m=require("nunjucks"),u=require("lodash.clonedeep"),h=require("isobject"),y=require("redis"),w=require("@flownet/lib-is-redis-online"),g=require("nanoid"),b=require("@flownet/lib-atom-api-js"),v=require("axios"),x=require("qs"),_=require("lodash.merge"),k=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),D=require("@fnet/shell"),P=require("semver"),S=require("node:os"),T=require("@node-red/util"),A=require("@flownet/lib-to-ios-app"),$=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),E=require("@flownet/lib-to-webos"),C=require("@flownet/lib-to-nextjs"),O=require("@flownet/lib-to-docker"),N=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-bpmn-from-flow"),M=require("@fnet/expression"),R=require("chalk"),q=require("lodash.pick"),B=require("lodash.omit");const J=y,z=w;const{Api:L}=b,U=v.default,K=x;const W=_,G=s,V=o,X=k;function Y({dir:e,name:t="index"}){let o=V.resolve(e,`./${t}.tsx`);if(G.existsSync(o)||(o=V.resolve(e,`./${t}.ts`)),G.existsSync(o)||(o=V.resolve(e,`./${t}.jsx`)),G.existsSync(o)||(o=V.resolve(e,`./${t}.js`)),!G.existsSync(o))return{};const n=o,i=V.extname(o);return{file:n,ext:i,ts:".ts"===i||".tsx"===i,name:t}}const H=j;const Z=p,Q=d,ee=l;const te=m,oe=p,ne=d,ie=k,se=j;const ae=p,re=d,ce=l;const le=p,pe=d,de=m,fe=k;const me=p,ue=d,he=m;const ye=p,we=d,ge=m;const be=p,ve=d,xe=m;const _e=m,ke=p,je=d;const De=r,Pe=o;const Se=r;const Te=r;const Ae=r;const $e=D,Ie=t;const Ee=p,Ce=d,Oe=P,Ne=D,Fe=t;const Me=p,Re=d,qe=P,Be=r,Je=t;const ze=p,Le=d,Ue=S,Ke=m,We=T,Ge=t;const Ve=s,Xe=o,Ye=t;const He=A;const Ze=$;const Qe=I;const et=E;const tt=C,ot=u,nt=_,it=P,st=d;const at=O,rt=u,ct=_,lt=P,pt=d;const dt=p,ft=d,mt=P,ut=D,ht=t,yt=v.default;const wt=P,gt=t,bt=v.default;const vt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const s=t.projectDir;let a="fnet-to-gitlab";const r=n.params.config||"gitlab",c=await Ie({name:r,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;a+=` --projectGroupId=${l.projectGroupId}`,a+=` --projectPath='${s}'`,a+=` --projectName='${n.params.name}'`,a+=` --projectBranch='${n.params.branch||"main"}'`,a+=` --gitlabHost='${l.gitlabHost}'`,a+=` --gitlabToken='${l.gitlabToken}'`,a+=` --gitlabUsername='${l.gitlabUsername}'`,a+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==n.dryRun&&(await $e({cmd:a}),o.isDirty=!0)},xt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,a=Ce.resolve(s,"package.json"),r=Ee.readFileSync(a),c=JSON.parse(r);c.name=n.params.name,c.version=Oe.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,Ee.writeFileSync(a,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Fe({name:n.config||"gcs",dir:t.projectDir});let d="fnet-upload-files-to-gcs";d+=` --projectId='${p.env.GCS_PROJECT_ID}'`,d+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,d+=` --keyFilename='${Ce.resolve(Ce.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${s}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --metadata.cacheControl='public, max-age=31536000, immutable'",d+=" --verbose",p.env.DOMAIN&&(d+=` --domain='${p.env.DOMAIN}'`),!0!==n.dry_run&&!0!==n.params.dry_run||(d+=" --dryRun"),await Ne({cmd:d}),Ee.writeFileSync(a,r),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=c.version,await i({target:n,packageJSON:c}))},_t=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as npm package."});const s=o.projectDir,a=Re.resolve(s,"package.json"),r=Me.readFileSync(a),c=JSON.parse(r);c.name=i.params.name,c.version=qe.inc(i.params.version,"patch");const l=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Me.writeFileSync(a,JSON.stringify(c,null,"\t"));const p=(await Je({name:o.npmConfig||"npm",dir:o.projectDir}))?.data;if(Me.writeFileSync(Re.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==Be.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");Me.writeFileSync(a,r),n.isDirty=!0,i.params.version=c.version},kt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s,packageDependencies:a,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=o.projectDir,l=o.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||We.util.generateId(),label:`${p}/${e.id?e.id:Ue.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:We.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Le.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:We.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:We.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:a,red:{tab:{id:i.deploy.id||We.util.generateId(),label:`${p}/${e.id?e.id:Ue.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:We.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Le.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:We.util.generateId(),schedules:t},debug:{id:We.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||We.util.generateId(),label:`${p}/${e.id?e.id:Ue.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:We.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Le.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:We.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:We.util.generateId()},debug:{id:We.util.generateId()}}}}let f=Ke.compile(ze.readFileSync(Le.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(ze.writeFileSync(Le.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;n.isDirty=!0;const m=(await Ge({name:o.redConfig||"red",dir:o.projectDir}))?.data,u=i.deploy.url||m.env.RED_URL,h={};if(!1!==i.deploy.auth&&(h.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:h}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:f,headers:h});else{const e=await axios({method:"POST",url:`${u}/flow`,data:f,headers:h});i.deploy.id=e.data.id}},jt=async({atom:e,Atom:t,setInProgress:o,context:n,packageDependencies:i,deploymentProject:s,deploymentProjectTarget:a})=>{await o({message:"Deploying it as workflow lib."});const r=(await Ye({name:"atom",dir:n.projectDir}))?.data;let c,l,p,d=a.deploy.name.split("/");if(1===d.length)l=r.env.ATOM_LIBRARIES_ID,p=a.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===a.dryRun)return;if(s.isDirty=!0,a.deploy.id){if(c=await t.get({id:a.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;a.deploy.id=c.id}const f=n.projectDir;c.doc.contents=[{content:Ve.readFileSync(Xe.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Ve.readFileSync(Xe.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Ve.readFileSync(Xe.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=i,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},Dt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s,registerToPackageManager:a})=>{await t({message:"Deploying it as ios app package."});const r=o.projectDir;if(!0===i.dryRun)return;const c={projectDir:r,dest:r,atom:e,params:i.params};await He(c),n.isDirty=!0},Pt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s})=>{await t({message:"Deploying it as macos app package."});const a=o.projectDir;if(!0===i.dryRun)return;const r={projectDir:a,dest:a,atom:e,params:i.params};await Ze(r),n.isDirty=!0},St=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s})=>{await t({message:"Deploying it as electron package."});const a=o.projectDir;if(!0===i.dryRun)return;const r={src:a,dest:a,atom:e,params:i.params};await Qe(r),n.isDirty=!0},Tt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as webos package."});const s=o.projectDir;if(!0===i.dryRun)return;const a={src:s,dest:s,atom:e,params:i.params};await et(a),n.isDirty=!0},At=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as nextjs package."});t.params=nt({name:"nextjs-app",version:"0.1.0"},t.params);const s=it.inc(t.params.version,"patch");t.params.version=s;const a=ot(t);a.params.dependencies=ot(i);const r={atom:e,target:a.params,projectDir:n,renderDir:st.resolve(n,"nextjs")};return{deployer:await tt(r)}},$t=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as docker package."});t.params=ct({},t.params);const s=lt.inc(t.params.version,"patch");t.params.version=s;const a=rt(t);a.params.dependencies=rt(i);const r={atom:e,target:a.params,projectDir:n,renderDir:pt.resolve(n,"docker")};return{deployer:await at(r)}},It=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as fnet package."});const s=t.projectDir,a=ft.resolve(s,"package.json"),r=dt.readFileSync(a),c=JSON.parse(r);c.name=n.params.name,c.version=mt.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,dt.writeFileSync(a,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await ht({name:n.config||"fnet-package",dir:t.projectDir});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const d=`${p.env.ATOM_API_URL}/v1/auth/token`,f=p.env.ATOM_API_USERNAME,m=p.env.ATOM_API_PASSWORD;let u=await yt({method:"POST",url:d,data:{username:f,password:m},headers:{"Content-Type":"application/json"}});const h=u.data?.access_token;if(!h)throw new Error(`Invalid access_token from ${d}`);let y="fnet-upload-files-to-gcs";if(y+=` --projectId='${p.env.GCS_PROJECT_ID}'`,y+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,y+=` --keyFilename='${ft.resolve(ft.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,y+=` --dir='${s}'`,y+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",y+=` --destDir='${c.name}/${c.version}'`,y+=" --metadata.cacheControl='public, max-age=31536000, immutable'",y+=" --verbose",p.env.DOMAIN&&(y+=` --domain='${p.env.DOMAIN}'`),!0!==n.dry_run&&!0!==n.params.dry_run||(y+=" --dryRun"),await ut({cmd:y}),dt.writeFileSync(a,r),!0===n.dryRun)return;o.isDirty=!0,n.params.version=c.version;const w=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(u=await yt({method:"POST",url:w,data:{name:c.name,version:c.version,version_domain:p.env.DOMAIN,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`}}),u.data?.error)throw new Error("Failed to publish fnet package.")},Et=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet form."});const i=wt.inc(n.params.version,"patch"),{file:s,data:a}=await gt({name:n.config||"fnet-form",dir:t.projectDir});if(!a.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!a.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!a.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const r=`${a.env.ATOM_API_URL}/v1/auth/token`,c=a.env.ATOM_API_USERNAME,l=a.env.ATOM_API_PASSWORD;let p=await bt({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}`);o.isDirty=!0,n.params.version=i;const f=`${a.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await bt({method:"POST",url:f,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet form.")};const Ct=u;async function Ot({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Ct(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||Ct(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await t({node:e}),o({node:e})}var Nt={hits:async function({node:e}){if(!e.definition.hasOwnProperty("switch"))return!1;const t=e.definition.switch||[];if(!t.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===t.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const o=t.filter((e=>e.hasOwnProperty("default")));if(o.length>1)throw new Error("Switch must have only one default");if(1===o.length&&!t[t.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");return!0},init:async function({node:e,initNode:t}){e.type="switch",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let o=0;o<e.definition.switch.length;o++){let n=e.definition.switch[o],i=`${o}`;n.hasOwnProperty("default")&&(i="default",n=n.default);const s={name:n.condition||i,childs:[],parent:e,definition:n,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=Ot},resolve:Ot};const Ft=M,Mt=Nt;var Rt={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>Ft({expression:e}))))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,o=Object.keys(t.definition),n=await Promise.all(o.map((e=>Ft({expression:e})))),i=[],s=n.find((e=>"if"===e?.processor)),a=t.definition[s.expression];i.push({name:`${t.name}_if`,definition:a,processor:s}),delete t.definition[s.expression];const r=n.filter((e=>"elseif"===e?.processor));let c=0;for(const e of r){const o=t.definition[e.expression];i.push({name:`${t.name}_elseif_${c++}`,definition:o,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of i)t.definition.switch.push({condition:e.processor.statement,...e.definition});await Mt.init(e)}};const qt=u;async function Bt({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||qt(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||qt(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var Jt={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:t}){if(e.type="tryexcept",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const o="try",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}if(e.definition.except){const o="except",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}e.resolve=Bt},resolve:Bt};const zt=u;async function Lt({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=zt(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],o=Object.keys(t)[0],s=t[o],a={key:await n(o),value:await n(s)};i.assign[e]=a}await t({node:e}),o({node:e})}var Ut={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=Lt},resolve:Lt};const Kt=u,Wt=q,Gt=B;async function Vt({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Kt(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await t({node:e}),o({node:e})}var Xt={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[o,n]=[Wt(e.definition.for,t),Gt(e.definition.for,t)];e.definition.for=o,e.definition.for.steps=[{[`${e.name}_step`]:n}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let o=0;o<e.definition.for.steps.length;o++){const n=e.definition.for.steps[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=Vt},resolve:Vt};var Yt={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){}};const Ht=u;async function Zt({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||Ht(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var Qt={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=Zt},resolve:Zt};const eo=u;async function to({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||eo(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var oo={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=to},resolve:to};const no=u;async function io({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||no(e.definition);const i=e.context.transform;i.args&&(i.args=await n(i.args)),i.result&&(i.result=await n(i.result));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.call)),await t({node:e}),o({node:e})}var so={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call";for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=io},resolve:io};const ao=so;var ro={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(e){const{node:t}=e,o="shell",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/shell",n.args="string"===i?{...n.args,cmd:n[o]}:n[o],delete n[o],await ao.init(e)}};const co=so;var lo={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(e){const{node:t}=e,o="config",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/config",n.args="string"===i?{...n.args,name:n[o]}:n[o],delete n[o],await co.init(e)}};const po=so;var fo={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(e){const{node:t}=e,o="yaml",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/yaml",n.args="string"===i?{...n.args,file:n[o]}:n[o],delete n[o],await po.init(e)}};async function mo({node:e}){e.context.next=e.childs[0]}var uo={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const o=e.definition.steps||[];for await(const n of o){const o=Object.keys(n)[0],i={name:o,childs:[],parent:e,definition:n[o],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=mo},resolve:mo};const ho=u;async function yo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||ho(e.definition);const i=e.context.transform;i.props&&(i.props=await n(i.props));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.form)),await t({node:e}),o({node:e})}var wo={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form";for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=yo},resolve:yo};const go=u;async function bo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||go(e.definition),await t({node:e})}var vo={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=bo},resolve:bo};const xo=u;async function _o({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||xo(e.definition);const i=e.context.transform;i.next=await n(i.next),await t({node:e}),o({node:e})}var ko={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=_o},resolve:_o};const jo=so;var Do={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,o="prompt",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/prompt",n.args="string"===i?{...n.args,message:n[o]}:n[o],delete n[o],await jo.init(e)}};const Po=so;var So={hits:async function({node:e}){return e.definition.hasOwnProperty("html-script")},init:async function(e){const{node:t}=e,o="html-script",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@flownet/lib-load-browser-script-url",n.args="string"===i?{...n.args,src:n[o]}:n[o],delete n[o],await Po.init(e)}};const To=so;var Ao={hits:async function({node:e}){return e.definition.hasOwnProperty("html-link")},init:async function(e){const{node:t}=e,o="html-link",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@flownet/lib-load-browser-link-url",n.args="string"===i?{...n.args,src:n[o]}:n[o],delete n[o],await To.init(e)}};const $o=p,Io=d,Eo=f,Co=r,Oo=m,No=u,Fo=h,Mo=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:Ro}=g,qo=class{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(L.set_api_url(e.data.url),t)return L.set_req_token(t),void o(t);U({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:K.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{L.set_req_token(e.data.access_token),o(e.data.access_token)})).catch((e=>{L.set_req_token(),n(e)}))}))}},Bo=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const o=e.doc.features;o.hasOwnProperty("all_parsed_imports")||(o.all_parsed_imports=!0);const n=V.resolve(t.project.projectDir),i=Y({dir:V.resolve(n,"./app")});if(i.file){let e=await X({file:i.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.app_uses_jsx=t,o.app_has_entry=!0,e=await X({file:i.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.app_entry_uses_jsx=t,o.app_entry_is_ts=i.ts,o.app_entry_ext=i.ext}const s=Y({dir:V.resolve(n,"./cli")});if(s.file){let e=await X({file:s.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.cli_uses_jsx=t,o.cli_has_entry=!0,e=await X({file:s.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.cli_entry_uses_jsx=t,o.cli_entry_is_ts=s.ts,o.cli_entry_ext=s.ext}if("workflow.lib"===e.type){const e=Y({dir:V.resolve(n,"./src")});if(e.file){let t=await X({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.src_uses_jsx=n,o.src_has_entry=!0,t=await X({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.src_entry_uses_jsx=n,o.src_entry_is_ts=e.ts,o.src_entry_ext=e.ext}}const a=!0===o.app_has_entry||!0===o.src_uses_jsx,r=!0===o.cli_has_entry||!0===o.src_uses_jsx;o.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===o.form||!0===o.form?.enabled,o.multiple_enabled=o.multiple_enabled||!0===o.multiple||!0===o.multiple?.enabled,!1===o.app?o.app={enabled:!1}:!0===o.app?o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:a}:o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:a,...o.app||{}},o.app.enabled=!0===o.app.enabled&&(!0===e.doc.features.form_enabled||!0===o.app.extend||!0===o.app.enabled),o.app.format=o.app.format||"esm",o.app.folder=o.app.folder||o.app.format||"default",!1===o.cli?o.cli={enabled:!1}:!0===o.cli?o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r}:o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r,...o.cli||{}},o.cli.enabled=!0===o.cli.enabled&&(!1===e.doc.features.form_enabled||!0===o.cli.extend||!0===o.cli.enabled),o.cli.format=o.cli.format||"esm",o.cli.folder=o.cli.folder||o.cli.folder||"esm";const c={cjs:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!0,string:!0},cjsx:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0,string:!0},esmx:{format:"esm",browser:!0,babel:!0,context:o.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0,string:!0},umd:{format:"umd",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1,string:!0}},l={};!0===o.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,babel_options:{targets:{chrome:"79"}}}),!0===o.app.enabled&&(o.app.dir=`./dist/app/${o.app.folder}`,c.app={format:o.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:o.app.dir,terser:!0,output_exports:!1===o.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:o.app.dir})),!0===o.cli.enabled&&(o.cli.dir=`./dist/cli/${o.cli.folder}`,c.cli={format:o.cli.format,context:"global",babel:!0===o.src_uses_jsx||!0===o.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:o.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===o.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${V.normalize(o.app.dir||".")}`,files:[V.normalize("./dist/**/*")],cors:!0,open:!1};o.babel_options=o.babel_options||o.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},o.browsersync_options=W(p,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=W({},o.replace_options||o.replace?.options||{}),o.terser_options=W({},o.terser_options||o.terser?.options||{}),o.css_options=W({},o.css_options||o.css?.options||{}),o.wasm_options=W({},o.wasm_options||o.wasm?.options||{}),o.copy_options=W(l,o.copy_options||o.copy?.options||{}),o.json_options=W({},o.json_options||o.json?.options||{}),o.image_options=W({},o.image_options||o.image?.options||{}),o.analyzer_options=W({summaryOnly:!0,limit:12},o.analyzer_options||o.analyzer?.options||{}),o.visualizer_options=W({},o.visualizer_options||o.visualizer?.options||{}),o.string_options=W({},o.string_options||o.string?.options||{}),o.rollup=o.rollup||{},o.rollup_output=W(c,o.rollup_output||o.rollup?.output||{}),o.string_enabled=!0===o.string||o.string&&!1!==o.string?.enabled;const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==o.rollup[e]?(!0===o.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||o.babel_options,t.browsersync_options=W(o.browsersync_options,t.browsersync_options),t.replace_options=W(o.replace_options,t.replace_options),t.terser_options=W(o.terser_options,t.terser_options),t.css_options=W(o.css_options,t.css_options),t.wasm_options=W(o.wasm_options,t.wasm_options),t.copy_options=W(o.copy_options,t.copy_options),t.json_options=W(o.json_options,t.json_options),t.image_options=W(o.image_options,t.image_options),t.analyzer_options=W(o.analyzer_options,t.analyzer_options),t.visualizer_options=W(o.visualizer_options,t.visualizer_options),t.string_options=W(o.string_options,t.string_options),t.string=o.string_enabled&&t.string,o.form_enabled&&(t.babel=!0)):t.enabled=!1)}o.babel_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browser_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browsersync_enabled=!1!==o.browsersync&&d.some((e=>!0===o.rollup_output[e].browsersync)),o.browsersync_enabled=o.browsersync_enabled&&o.app.enabled,o.wasm_enabled=!0===o.wasm||o.wasm&&!1!==o.wasm?.enabled,o.css_enabled=!0===o.css||o.css&&!1!==o.css?.enabled,o.json_enabled=!0===o.json||o.json&&!1!==o.json?.enabled,o.terser_enabled=!0===o.terser||o.terser&&!1!==o.terser?.enabled,o.copy_enabled=o.app.enabled||o.copy_enabled||o.copy&&!1!==o.copy?.enabled,o.image_enabled=!0===o.image||o.image&&!1!==o.image?.enabled,o.analyzer_enabled=!0===o.analyzer||o.analyzer&&!1!==o.analyzer?.enabled,o.visualizer_enabled=!0===o.visualizer||o.visualizer&&!1!==o.visualizer?.enabled,o.dependency_auto_enabled=!1!==o.dependency_auto&&!1!==o.dependency_auto?.enabled,o.npm_install_flags=o.npm_install_flags||"",o.react_version=o.react_version||o.react?.version||18},Jo=async({atom:e,packageDependencies:t,packageDevDependencies:o})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let o="^18.2";o=`^${(await H({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:o}),t.push({package:"react-dom",version:o}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),o.push({package:"@babel/core",version:"^7.23"}),o.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),o.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),o.push({package:"@rollup/plugin-replace",version:"^5.0"}),o.push({package:"rollup",version:"^4.9"}),o.push({package:"rollup-plugin-delete",version:"^2.0"}),o.push({package:"rollup-plugin-dts",version:"^6.0"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),o.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6.0"}),o.push({package:"@babel/preset-env",version:"7.23"}),o.push({package:"@babel/preset-react",version:"7.23"})),e.doc.features.browsersync_enabled&&o.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&o.push({package:"@rollup/plugin-json",version:"^6.0"}),e.doc.features.terser_enabled&&o.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&o.push({package:"@rollup/plugin-wasm",version:"^6.1"}),e.doc.features.image_enabled&&o.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.analyzer_enabled&&o.push({package:"rollup-plugin-analyzer",version:"^3.3"}),e.doc.features.visualizer_enabled&&o.push({package:"rollup-plugin-visualizer",version:"^5.9"}),e.doc.features.string_enabled&&o.push({package:"rollup-plugin-string",version:"^3.0"}),e.doc.features.css_enabled){o.push({package:"rollup-plugin-postcss",version:"4.0"}),o.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":o.push({package:"postcss-import",version:"^15.1"});break;case"postcss-url":o.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":o.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":o.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":o.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&o.push({package:"rollup-plugin-copy",version:"^3.5"})},zo=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n,ts:Date.now()},s=o.templateDir,a=Q.resolve(o.projectDir,"src/app");Z.existsSync(a)||Z.mkdirSync(a,{recursive:!0}),await ee({pattern:["index.html.njk","index.js.njk"],dir:Q.resolve(s,"src/app"),outDir:a,context:i})},Lo=async({atom:e,context:t,packageDependencies:o,packageDevDependencies:n,setInProgress:i})=>{await i({message:"Creating package.json."});const s=o.find((e=>"react"===e.package)),a=o.find((e=>"react-dom"===e.package));s&&!a?o.push({package:"react-dom",version:s.version}):s&&a&&(a.version=s.version),s&&e.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push(ne.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&r.push(ne.resolve(t.projectDir,"src/cli/index.js"));for await(const t of r){const i=t;if(!oe.existsSync(i))throw new Error(`App file not found: ${i}`);const s=await ie({file:i,recursive:!0}),a=!0===e.doc.features.all_parsed_imports?s.all:s.required;for await(const e of a){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;if(n.find((t=>t.package===e.package)))continue;const t=(await se({name:e.package,groupBy:{minor:!0}}))[0][0];n.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}}const c={atom:e,packageDependencies:o,packageDevDependencies:n},l=t.templateCommonDir,p=te.compile(oe.readFileSync(ne.resolve(l,"package.json.njk"),"utf8"),te.configure(l)).render(c),d=t.projectDir,f=ne.resolve(d,"package.json");oe.writeFileSync(f,p,"utf8")},Uo=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n},s=o.templateDir,a=re.resolve(o.projectDir,"src/cli");ae.existsSync(a)||ae.mkdirSync(a,{recursive:!0}),await ce({pattern:["index.js.njk"],dir:re.resolve(s,"src/cli"),outDir:a,context:i})},Ko=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:n},s=pe.resolve(o.projectDir,"src","default/index.js");if(!le.existsSync(s))throw new Error(`Entry file not found: ${s}`);const a=(await fe({file:s,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&&a.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(a.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<a.length;e++){const o=a[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(a)}}const l=o.templateCommonDir,p=de.compile(le.readFileSync(pe.resolve(l,"rollup.config.js.njk"),"utf8"),de.configure(l)).render(i),d=o.projectDir,f=pe.resolve(d,"rollup.config.js");le.writeFileSync(f,p,"utf8")},Wo=async({atom:e,setInProgress:t,context:o,njEnv:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const i={},s=e.doc.inputs||[],a=[];s.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&a.push(e);const t={};e.type&&(t.type=e.type),e.default&&(t.default=e.default),e.choices&&(t.choices=e.choices),(e.describe||e.description)&&(t.describe=e.describe||e.description),e.alias&&(t.alias=e.alias),!0===e.required&&(t.required=!0),!0===e.hidden&&(t.hidden=!0),!0===e.array&&(t.array=!0),!0===e.normalize&&(t.normalize=!0),e.nargs&&(t.nargs=e.nargs),i[e.name]=t}));const r={options:i,imports:a,atom:e},c=o.templateDir,l=he.compile(me.readFileSync(ue.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),n).render(r),p=o.projectDir,d=ue.resolve(p,"src/default/to.yargs.js");me.writeFileSync(d,l,"utf8")},Go=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},s=o.templateCommonDir,a=ge.compile(ye.readFileSync(we.resolve(s,".gitignore.njk"),"utf8"),ge.configure(s)).render(i),r=o.projectDir,c=we.resolve(r,".gitignore");ye.writeFileSync(c,a,"utf8")},Vo=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:n},s=o.templateCommonDir,a=xe.compile(be.readFileSync(ve.resolve(s,"tsconfig.json.njk"),"utf8"),xe.configure(s)).render(i),r=o.projectDir,c=ve.resolve(r,"tsconfig.json");be.writeFileSync(c,a,"utf8")},Xo=async({atom:e,context:t,setInProgress:o,Atom:n})=>{const i="readme.md",s=`Creating ${i}`;if(await o({message:s}),t.project?.readme){const e={content:t.project.readme.doc.content},o=t.templateCommonDir,n=_e.compile(ke.readFileSync(je.resolve(o,`${i}.njk`),"utf8"),_e.configure(o)).render(e),s=t.projectDir,a=je.resolve(s,`${i}`);ke.writeFileSync(a,n,"utf8")}else if(e.id){const o=await n.first({type:"wiki",parent_id:e.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:s,...a}=o.doc,r={content:s},c=t.templateCommonDir,l=_e.compile(ke.readFileSync(je.resolve(c,`${i}.njk`),"utf8"),_e.configure(c)).render(r),p=t.projectDir,d=je.resolve(p,`${i}`);ke.writeFileSync(d,l,"utf8")}},Yo=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});let n=Pe.join("src","**","*");if(0!==De.exec(`prettier --write ${n} *.{js,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o}).code)throw new Error("Couldnt format files.")},Ho=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Creating .d.ts"});if(0!==Se.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},Zo=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==Te.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},Qo=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==Ae.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},en=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:s}=e;if(!0===i.enabled)if("lib"===i.name)await jt({...e});else if("red"===i.name)await kt({...e});else if("npm"===i.name)await _t({...e});else if("gcs"===i.name)await xt({...e});else if("gitlab"===i.name)await vt({...e});else if("macos-app"===i.name)await Pt({...e});else if("ios-app"===i.name)await Dt({...e});else if("electron"===i.name)await St({...e});else if("webos"===i.name)await Tt({...e});else if("fnet-package"===i.name)await It({...e});else if("fnet-form"===i.name)await Et({...e});else{let e;if("nextjs"===i.name?e=At:"docker"===i.name&&(e=$t),!e)return;await e({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o})}},{Atom:tn}=b,on=N,nn=j,sn=F,an=t,rn=k,cn=M,ln=c,pn=R,dn=Rt,fn=Jt,mn=Ut,un=Xt,hn=Nt,yn=Yt,wn=Qt,gn=oo,bn=so,vn=ro,xn=lo,_n=fo,kn=uo,jn=wo,Dn=vo,Pn=ko,Sn=Do,Tn=So,An=Ao,$n=({node:e})=>{const t=e.definition;if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let o=e.parent;for(;o.parent;){const n=o.childs.find((e=>e.name===t.next));if(n){e.context.next=n;break}o=o.parent}}else{let t=e.parent,o=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(void 0!==t.blockAutoJumpToParent||void 0!==t.blockAutoJumpToSibling){if(t.blockAutoJumpToParent){const n=t.childs.find((e=>e.index===o));n&&(e.context.next=n);break}t.blockAutoJumpToParent||(o=t.index+1,t=t.parent)}else{const n=t.childs.find((e=>e.index===o));if(n){e.context.next=n;break}o=t.index+1,t=t.parent}}};var In=class{#e;#t;#o;#n;#i;#s;#a;#r;#c;#l;#p;#d;#f;#m;#u;#h;#y;#w;#g;#b;#v;constructor(e){this.#e=new qo,this.#t=e,this.#s=[],this.#a=[],this.#r={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#b={packageDependencies:this.#s,packageDevDependencies:this.#a,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:tn,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#v={initNode:this.initNode.bind(this),cloneDeep:No,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:$n,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await Mo(),this.#p=this.#t.buildId||Ro(24),this.#b.buildId=this.#p,this.#u=this.#t.mode,this.#h=["all","deploy","build","file"].includes(this.#u),this.#y=["all","deploy","build"].includes(this.#u),this.#w=["all","deploy"].includes(this.#u),this.#g=["all","deploy","build","file","bpmn"].includes(this.#u),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#m=(await an({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await Bo(this.#b),await Jo(this.#b),await this.transformWorkflow({workflow:this.#n});const e=await this.initNodeTree({workflow:this.#n});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#s}),await this.resolveNodeTree({root:e}),this.#l=e}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#c=await this.#e.init({config:this.#m}),this.#b.atomAccessToken=this.#c)}async initWorkflow(){const e=this.#t.id;this.#o=this.#t.project?.workflowAtom||await tn.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await ln({content:this.#o.doc.content})).parsed:this.#o.doc.content;let t=this.#o.doc.bundleName;t=t||(this.#o.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#o.doc.bundleName=t,this.#o.type=this.#o.type||"workflow",this.#b.atom=this.#o}async initDependencies(){this.#s.push({package:"get-value",version:"^3.0"}),this.#s.push({package:"set-value",version:"^4.1"}),this.#o.doc.features.form_enabled?(this.#s.push({package:"react",version:"^18.2"}),this.#s.push({package:"react-dom",version:"^18.2"}),this.#s.push({package:"@flownet/react-app",version:"^0.1"}),this.#s.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#s.push({package:"yargs",version:"^17"}),this.#s.push({package:"chalk",version:"^4"})}#x(e){$o.statSync(e).isDirectory()?($o.readdirSync(e).forEach((t=>{const o=Io.join(e,t);this.#x(o)})),$o.rmdirSync(e)):$o.unlinkSync(e)}#_(e,t){const o=$o.existsSync(e),n=o&&$o.statSync(e);o&&n.isDirectory()?($o.mkdirSync(t,{recursive:!0}),$o.readdirSync(e).forEach((o=>{this.#_(Io.join(e,o),Io.join(t,o))}))):$o.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,o=["node_modules"];if($o.existsSync(e)){const t=$o.readdirSync(e);for(const n of t)if(!o.includes(n)){const t=Io.join(e,n);this.#x(t)}}$o.existsSync(e)||$o.mkdirSync(e,{recursive:!0});const n=Io.join(e,"src");$o.existsSync(n)||$o.mkdirSync(n,{recursive:!0});const i=Io.join(n,"core");this.#_(t,i);const s=Io.join(n,"default","blocks");$o.existsSync(s)||$o.mkdirSync(s,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=Oo.configure(e,{watch:!1,dev:!0}),this.#b.njEnv=this.#i}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,o]=Object.entries(e)[0];if(o.hasOwnProperty("onerror")){const{onerror:n,...i}=o;e[t]={try:i,except:n}}if(e[t].hasOwnProperty("steps")){const o=e[t].steps;if(!Array.isArray(o))throw new Error("Steps must be an array.");e[t].steps=o.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),o={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#o}};t.forEach((t=>{const n={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:o,definition:e[t],index:o.childs.length,depth:o.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};o.childs.push(n)}));for await(const e of o.childs)await this.initNode({node:e});return o}async initNode({node:e}){const t={...this.#v,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await fn.hits(t))await fn.init(t);else if(await un.hits(t))await un.init(t);else if(await hn.hits(t))await hn.init(t);else if(await dn.hits(t))await dn.init(t);else if(await yn.hits(t))await yn.init(t);else if(await mn.hits(t))await mn.init(t);else if(await wn.hits(t))await wn.init(t);else if(await gn.hits(t))await gn.init(t);else if(await bn.hits(t))await bn.init(t);else if(await vn.hits(t))await vn.init(t);else if(await xn.hits(t))await xn.init(t);else if(await _n.hits(t))await _n.init(t);else if(await Tn.hits(t))await Tn.init(t);else if(await An.hits(t))await An.init(t);else if(await jn.hits(t))await jn.init(t);else if(await Dn.hits(t))await Dn.init(t);else if(await Sn.hits(t))await Sn.init(t);else if(await kn.hits(t))await kn.init(t);else{if(!await Pn.hits(t))throw new Error("Undefined step type.");await Pn.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const o of e.childs)await this.initNodeIndex({node:o,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const o=Io.join(e.parent.indexKey,e.name);e.indexKey=o,t[o]=e;const n=[];let i=e;for(;i?.parent;)n.push(i.index),i=i.parent;n.reverse(),e.codeKey=`B_${n.join("_")}_${e.type}`,e.pathKey=`${n.join(".")}`,e.typeId=Ro(24);for await(const o of e.childs)await this.initNodeIndex({node:o,index:t})}async initNodeCalls({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"call"===n.type&&o.push(n)}return e.context.calls=o,o}async initNodeCallLibs({root:e}){const t=[],o=e.context.calls;for await(const e of o){const o=e.definition.call,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.call,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"form"===n.type&&o.push(n)}return e.context.forms=o,o}async initNodeFormLibs({root:e}){const t=[],o=e.context.forms;for await(const e of o){const o=e.definition.form,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.form,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const o=e.filter((e=>"atom"===e.type));for(let e=0;e<o.length;e++){const n=o[e],i=await this.findAtomLibrary({url:n.name});n.atom=i;const s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const o=t.find((t=>t.package===e.package));o?"string"==typeof e.path?(o.path||[]).some((t=>t===e.path))||(o.path=o.path||[],o.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(o.path||[]).some((t=>t===e))||(o.path=o.path||[],o.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=on({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#f),"ac:"===t.protocol){const o=t.pathname.split("/");if(1===o.length)return await tn.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await tn.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await tn.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=Io.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await rn({file:e,recursive:!0}),i=!0===this.#o.doc.features.all_parsed_imports?n.all:n.required;for await(const e of i){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=(await nn({name:e.package,groupBy:{minor:!0}}))[0][0];o.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:o},protocol:t.protocol}}if("npm:"===t.protocol){const e=(await nn({name:t.pathname,groupBy:{minor:!0}}))[0][0];return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:[{package:t.pathname,version:`^${e}`,type:"npm"}]},protocol:t.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=No(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const o=t.params[e];if("string"==typeof o)t.params[e]={key:o,hasDefault:!1};else{const n=Object.keys(o)[0];t.params[e]={key:n,hasDefault:!0,default:o[n]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#v,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:e}){await this.setInProgress({message:"Creating external lib files."}),this.#o.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const o=t[e].atom,n=this.#t.projectDir;if("local:"===o.protocol){const e=Io.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=Io.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!$o.existsSync(e)){$o.mkdirSync(Io.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",$o.writeFileSync(e,t,"utf8")}o.relativePath=t.split(Io.sep).join("/"),this.#o.typesDir=`./types/${Io.basename(n)}/src`}else if("npm:"===o.protocol)o.relativePath=o.name;else{const e=`${n}/src/libs/${o.id}.js`,t=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;$o.writeFileSync(Io.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=Oo.compile($o.readFileSync(Io.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=Io.resolve(n,"src/default/index.js");$o.writeFileSync(i,o,"utf8")}async createNodeTree({root:e}){await this.setInProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:e}){const t=this.#t.templateDir,o=Oo.compile($o.readFileSync(Io.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=Io.resolve(n,`src/default/${e.codeKey}.js`);$o.writeFileSync(i,o,"utf8");for await(const t of e.childs)await this.createType({node:t})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:e}){let t=this.#r[e.type];if(t)return t;const o=this.#t.templateDir;return t=Oo.compile($o.readFileSync(Io.resolve(o,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#i),this.#r[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,o=`${e.codeKey}.js`,n=Io.resolve(t,`src/default/blocks/${o}`);$o.writeFileSync(n,e.context.render,"utf8"),e.context.fileName=o,e.context.filePath=n}async transformExpression(e){let t=await this.transformValue(e);return t=JSON.stringify(t),t=this.replaceSpecialPattern(t),t}async transformValue(e){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=await this.transformValue(e[t]);else if(Fo(e)){const t=Object.keys(e);for(let o=0;o<t.length;o++)e[t[o]]=await this.transformValue(e[t[o]])}else if("string"==typeof e){const t=await cn({expression:e});if(t){const{processor:o,statement:n}=t;switch(o){case"v":e=`$::v.${n}::`;break;case"e":e=`$::${n}::`;break;case"m":e=`$::closure.module['${n}']::`;break;case"f":e=`$::closure.form.${n}::`;break;case"for":e=`$::caller.for.${n}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const e="flow.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:o,...n}=this.#o.doc,i={content:Eo.dump(n)},s=this.#t.templateDir,a=Oo.compile($o.readFileSync(Io.resolve(s,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=Io.resolve(r,`${e}`);$o.writeFileSync(c,a,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:Eo.dump(this.#n)},n=this.#t.templateDir,i=Oo.compile($o.readFileSync(Io.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),s=this.#t.projectDir,a=Io.resolve(s,`${e}`);$o.writeFileSync(a,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=Co.exec("prettier --write .",{cwd:Io.resolve(e,"src")});if(0!==t.code)throw new Error(t.stderr)}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&await o.save()}}else if(this.#o.id){const e=await tn.list({type:"workflow.deploy",parent_id:this.#o.id});for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&(o=await tn.update(o,{id:o.id}))}}}async deployProject(e){const{deploymentProject:t}=e,o=t.doc.targets;for(let e=0;e<o.length;e++){const n=o[e];await en({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await tn.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await tn.update(n,{id:n.id})):n=await tn.create({parent_id:this.#m.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:o.version}]}})}async setInProgress({message:e}){console.log(pn.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#g&&!this.#h)return await this.createNetwork();try{const e=this.#g?await sn({root:this.#l}):void 0;this.#h&&(await this.initWorkflowDir(),await this.initNunjucks(),this.#g&&$o.writeFileSync(Io.resolve(this.#t.projectDir,"./project.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 Xo(this.#b),await Vo(this.#b),await Go(this.#b),await Wo(this.#b),await Uo(this.#b),await zo(this.#b),await Ko(this.#b),await Lo(this.#b),await Yo(this.#b),await Ho(this.#b),this.#y&&(await Zo(this.#b),await Qo(this.#b),this.#w&&await this.deploy())),await this._cache_set(this.#d,{status:"COMPLETED",data:{network:e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await sn({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 En=p,Cn=d;var On=function({baseDir:e=__dirname}){let t=e;for(;t!==Cn.parse(t).root;){const e=Cn.join(t,"node_modules");if(En.existsSync(e))return e;t=Cn.dirname(t)}return null};const Nn=process.cwd(),{spawn:Fn}=e;t({name:["redis"],dir:Nn,optional:!0});const Mn=o,Rn=n,{hideBin:qn}=i,Bn=s,Jn=a,zn=r,Ln=c,Un=l,Kn=In,Wn=On({baseDir:__dirname}),Gn="win32"===process.platform?";":":";async function Vn(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:Mn.resolve(Nn,`./.output/${e.id}`),templateDir:Mn.resolve(Wn,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Mn.resolve(Wn,"./@fnet/cli-project-common/dist/template/default"),coreDir:Mn.resolve(Wn,"./@fnet/cli-project-flow/dist/template/core")}}{const t=await async function(e){const t=Mn.resolve(Nn,"flow.yaml");if(!Bn.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const o=Bn.readFileSync(t,"utf8"),{parsed:n}=await Ln({content:o}),i=Mn.dirname(t),s=n.main||"flow.main.yaml";let a=Mn.resolve(i,s);if(!Bn.existsSync(a)&&(a=Mn.resolve(i,s+".yaml"),!Bn.existsSync(a)))throw new Error(`${s} file not found in ${a}.`);const r=Bn.readFileSync(a,"utf8"),{parsed:c}=await Ln({content:r}),l={workflowAtom:{doc:{...n,"content-type":"yaml",content:r}},projectDir:i,projectFilePath:t,projectFileContent:o,projectFileParsed:n,projectMainFilePath:a,projectMainFileContent:r,projectMainFileParsed:c},p=Mn.resolve(i,"flow.devops.yaml");if(Bn.existsSync(p)){const e=Bn.readFileSync(p,"utf8"),t=Jn.parse(e);l.devops={filePath:p,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{Bn.writeFileSync(l.devops.filePath,Jn.stringify(l.devops.doc))}}}const d=Mn.resolve(i,"readme.md");if(Bn.existsSync(d)){const e=Bn.readFileSync(d,"utf8");l.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Mn.resolve(Wn,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Mn.resolve(Wn,"./@fnet/cli-project-common/dist/template/default"),coreDir:Mn.resolve(Wn,"./@fnet/cli-project-flow/dist/template/core"),projectDir:Mn.resolve(t.projectDir,"./.workspace"),projectSrcDir:Mn.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${Mn.join(Wn,"/.bin")}${Gn}${process.env.PATH}`,Rn(qn(process.argv)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"}).option("vscode",{type:"boolean",default:!0,alias:"vs"})),(async e=>{try{const t=Mn.resolve(Wn,"./@fnet/cli-project-flow/dist/template/project"),o=Mn.resolve(Nn,e.name);Bn.existsSync(o)||Bn.mkdirSync(o),await Un({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0});let n=zn.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(zn.which("git")&&(n=zn.exec("git init",{cwd:o}),0!==n.code))throw new Error("Failed to initialize git.");if(zn.which("code")&&e.vscode&&(n=zn.exec(`cd ${o} && code .`),0!==n.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=Mn.resolve(Wn,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd();if(e.name=Mn.basename(o),e.update){if(await Un({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0}),0!==zn.exec("fnet build",{cwd:o}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flow net project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",alias:"m",default:"build",choices:["all","file","build","deploy","bpmn"]})),(async e=>{try{const t=await Vn(e),o=new Kn(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow net project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await Vn({...e,mode:"all"}),o=new Kn(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await Vn({...e,mode:"file"}),o=new Kn(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Vn(e),{projectDir:o}=t,n=`npm ${process.argv.slice(3).join(" ")}`;zn.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Vn(e),{projectDir:o}=t,n=`node ${process.argv.slice(3).join(" ")}`;zn.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Vn(e),{projectDir:o}=t,n=`npm run serve -- ${process.argv.slice(3).join(" ")}`;zn.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Vn(e),{projectDir:o}=t,n=`npm run watch -- ${process.argv.slice(3).join(" ")}`;zn.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Vn(e),{projectDir:o}=t,n=`npm run app -- ${process.argv.slice(3).join(" ")}`;zn.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Vn(e),{projectDir:o}=t,n=process.argv.slice(3);Fn("npm",["run","cli","--",...n],{cwd:o,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}})).demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
2
+ "use strict";var e=require("child_process"),t=require("@fnet/config"),o=require("path"),n=require("yargs/yargs"),i=require("yargs/helpers"),s=require("fs"),a=require("yaml"),r=require("shelljs"),c=require("@fnet/yaml"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),f=require("js-yaml"),m=require("nunjucks"),u=require("lodash.clonedeep"),h=require("isobject"),w=require("redis"),y=require("@flownet/lib-is-redis-online"),g=require("nanoid"),b=require("@flownet/lib-atom-api-js"),v=require("axios"),x=require("qs"),_=require("lodash.merge"),k=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),D=require("@fnet/shell"),P=require("semver"),S=require("node:os"),A=require("@node-red/util"),T=require("@flownet/lib-to-ios-app"),E=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),$=require("@flownet/lib-to-webos"),O=require("@flownet/lib-to-nextjs"),C=require("@flownet/lib-to-docker"),N=require("form-data"),M=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-bpmn-from-flow"),R=require("@fnet/expression"),q=require("chalk"),U=require("lodash.pick"),B=require("lodash.omit");const L=w,z=y;const{Api:J}=b,W=v.default,K=x;const G=_,V=s,X=o,H=k;function Y({dir:e,name:t="index"}){let o=X.resolve(e,`./${t}.tsx`);if(V.existsSync(o)||(o=X.resolve(e,`./${t}.ts`)),V.existsSync(o)||(o=X.resolve(e,`./${t}.jsx`)),V.existsSync(o)||(o=X.resolve(e,`./${t}.js`)),!V.existsSync(o))return{};const n=o,i=X.extname(o);return{file:n,ext:i,ts:".ts"===i||".tsx"===i,name:t}}const Z=j;const Q=p,ee=d,te=l;const oe=m,ne=p,ie=d,se=k,ae=j;const re=p,ce=d,le=l;const pe=p,de=d,fe=m,me=k;const ue=p,he=d,we=m;const ye=p,ge=d,be=m;const ve=p,xe=d,_e=m;const ke=m,je=p,De=d;const Pe=r,Se=o;const Ae=r;const Te=r;const Ee=r;const Ie=D,$e=t;const Oe=p,Ce=d,Ne=P,Me=D,Fe=t;const Re=p,qe=d,Ue=P,Be=r,Le=t;const ze=p,Je=d,We=S,Ke=m,Ge=A,Ve=t;const Xe=s,He=o,Ye=t;const Ze=T;const Qe=E;const et=I;const tt=$;const ot=O,nt=u,it=_,st=P,at=d;const rt=C,ct=u,lt=_,pt=P,dt=d;const ft=p,mt=d,ut=P,ht=D,wt=t,yt=v.default;const gt=P,bt=t,vt=v.default;const xt=P,_t=t,kt=v.default,jt=s,Dt=D,Pt=N;const St=P,At=t,Tt=v.default;const Et=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const s=t.projectDir;let a="fnet-to-gitlab";const r=n.params.config||"gitlab",c=await $e({name:r,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;a+=` --projectGroupId=${l.projectGroupId}`,a+=` --projectPath='${s}'`,a+=` --projectName='${n.params.name}'`,a+=` --projectBranch='${n.params.branch||"main"}'`,a+=` --gitlabHost='${l.gitlabHost}'`,a+=` --gitlabToken='${l.gitlabToken}'`,a+=` --gitlabUsername='${l.gitlabUsername}'`,a+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==n.dryRun&&(await Ie({cmd:a}),o.isDirty=!0)},It=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,a=Ce.resolve(s,"package.json"),r=Oe.readFileSync(a),c=JSON.parse(r);c.name=n.params.name,c.version=Ne.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,Oe.writeFileSync(a,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Fe({name:n.config||"gcs",dir:t.projectDir});let d="fnet-files-to-gcs";d+=` --projectId='${p.env.GCS_PROJECT_ID}'`,d+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,d+=` --keyFilename='${Ce.resolve(Ce.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${s}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(d+=` --domain='${p.env.DOMAIN}'`),!0!==n.dry_run&&!0!==n.params.dry_run||(d+=" --dryRun"),await Me({cmd:d}),Oe.writeFileSync(a,r),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=c.version,await i({target:n,packageJSON:c}))},$t=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as npm package."});const s=o.projectDir,a=qe.resolve(s,"package.json"),r=Re.readFileSync(a),c=JSON.parse(r);c.name=i.params.name,c.version=Ue.inc(i.params.version,"patch");const l=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Re.writeFileSync(a,JSON.stringify(c,null,"\t"));const p=(await Le({name:o.npmConfig||"npm",dir:o.projectDir}))?.data;if(Re.writeFileSync(qe.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==Be.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");Re.writeFileSync(a,r),n.isDirty=!0,i.params.version=c.version},Ot=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s,packageDependencies:a,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=o.projectDir,l=o.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||Ge.util.generateId(),label:`${p}/${e.id?e.id:We.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Ge.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Je.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Ge.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Ge.util.generateId()}}};else if("cronjob"===i.deploy.template){let t=i.params?.schedules?cloneDeep(i.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||Ge.util.generateId(),label:`${p}/${e.id?e.id:We.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Ge.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Je.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Ge.util.generateId(),schedules:t},debug:{id:Ge.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||Ge.util.generateId(),label:`${p}/${e.id?e.id:We.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Ge.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Je.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Ge.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Ge.util.generateId()},debug:{id:Ge.util.generateId()}}}}let f=Ke.compile(ze.readFileSync(Je.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(ze.writeFileSync(Je.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;n.isDirty=!0;const m=(await Ve({name:o.redConfig||"red",dir:o.projectDir}))?.data,u=i.deploy.url||m.env.RED_URL,h={};if(!1!==i.deploy.auth&&(h.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:h}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:f,headers:h});else{const e=await axios({method:"POST",url:`${u}/flow`,data:f,headers:h});i.deploy.id=e.data.id}},Ct=async({atom:e,Atom:t,setInProgress:o,context:n,packageDependencies:i,deploymentProject:s,deploymentProjectTarget:a})=>{await o({message:"Deploying it as workflow lib."});const r=(await Ye({name:"atom",dir:n.projectDir}))?.data;let c,l,p,d=a.deploy.name.split("/");if(1===d.length)l=r.env.ATOM_LIBRARIES_ID,p=a.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===a.dryRun)return;if(s.isDirty=!0,a.deploy.id){if(c=await t.get({id:a.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;a.deploy.id=c.id}const f=n.projectDir;c.doc.contents=[{content:Xe.readFileSync(He.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Xe.readFileSync(He.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Xe.readFileSync(He.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})},Nt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s,registerToPackageManager:a})=>{await t({message:"Deploying it as ios app package."});const r=o.projectDir;if(!0===i.dryRun)return;const c={projectDir:r,dest:r,atom:e,params:i.params};await Ze(c),n.isDirty=!0},Mt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s})=>{await t({message:"Deploying it as macos app package."});const a=o.projectDir;if(!0===i.dryRun)return;const r={projectDir:a,dest:a,atom:e,params:i.params};await Qe(r),n.isDirty=!0},Ft=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s})=>{await t({message:"Deploying it as electron package."});const a=o.projectDir;if(!0===i.dryRun)return;const r={src:a,dest:a,atom:e,params:i.params};await et(r),n.isDirty=!0},Rt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as webos package."});const s=o.projectDir;if(!0===i.dryRun)return;const a={src:s,dest:s,atom:e,params:i.params};await tt(a),n.isDirty=!0},qt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as nextjs package."});t.params=it({name:"nextjs-app",version:"0.1.0"},t.params);const s=st.inc(t.params.version,"patch");t.params.version=s;const a=nt(t);a.params.dependencies=nt(i);const r={atom:e,target:a.params,projectDir:n,renderDir:at.resolve(n,"nextjs")};return{deployer:await ot(r)}},Ut=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as docker package."});t.params=lt({},t.params);const s=pt.inc(t.params.version,"patch");t.params.version=s;const a=ct(t);a.params.dependencies=ct(i);const r={atom:e,target:a.params,projectDir:n,renderDir:dt.resolve(n,"docker")};return{deployer:await rt(r)}},Bt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as fnet package."});const s=t.projectDir,a=mt.resolve(s,"package.json"),r=ft.readFileSync(a),c=JSON.parse(r);c.name=n.params.name,c.version=ut.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,ft.writeFileSync(a,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await wt({name:n.config||"fnet-package",dir:t.projectDir});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const d=`${p.env.ATOM_API_URL}/v1/auth/token`,f=p.env.ATOM_API_USERNAME,m=p.env.ATOM_API_PASSWORD;let u=await yt({method:"POST",url:d,data:{username:f,password:m},headers:{"Content-Type":"application/json"}});const h=u.data?.access_token;if(!h)throw new Error(`Invalid access_token from ${d}`);let w="fnet-files-to-gcs";if(w+=` --projectId='${p.env.GCS_PROJECT_ID}'`,w+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,w+=` --keyFilename='${mt.resolve(mt.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,w+=` --dir='${s}'`,w+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",w+=` --destDir='${c.name}/${c.version}'`,w+=" --metadata.cacheControl='public, max-age=31536000, immutable'",p.env.DOMAIN&&(w+=` --domain='${p.env.DOMAIN}'`),!0!==n.dry_run&&!0!==n.params.dry_run||(w+=" --dryRun"),await ht({cmd:w}),ft.writeFileSync(a,r),!0===n.dryRun)return;o.isDirty=!0,n.params.version=c.version;const y=`${p.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(u=await yt({method:"POST",url:y,data:{name:c.name,version:c.version,version_domain:p.env.DOMAIN,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`}}),u.data?.error)throw new Error("Failed to publish fnet package.")},Lt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet form."});const i=gt.inc(n.params.version,"patch"),{file:s,data:a}=await bt({name:n.config||"fnet-form",dir:t.projectDir});if(!a.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!a.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!a.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const r=`${a.env.ATOM_API_URL}/v1/auth/token`,c=a.env.ATOM_API_USERNAME,l=a.env.ATOM_API_PASSWORD;let p=await vt({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}`);o.isDirty=!0,n.params.version=i;const f=`${a.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(p=await vt({method:"POST",url:f,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet form.")},zt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet flow."});const i=xt.inc(n.params.version,"patch"),{file:s,data:a}=await _t({name:n.config||"fnet-flow",dir:t.projectDir});if(!a.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!a.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!a.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const r=`${a.env.ATOM_API_URL}/v1/auth/token`,c=a.env.ATOM_API_USERNAME,l=a.env.ATOM_API_PASSWORD;let p=await kt({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}`);o.isDirty=!0,n.params.version=i;const f=`${a.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(p=await kt({method:"POST",url:f,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet flow.");const m=p.data?.upload.id;let u="fnet-dir-zipper";u+=` --sourceDir='${t.projectDir}'`,u+=" -p=flow.yaml",u+=" -p=flow.main.yaml",u+=" -p=project.bpmn",u+=" --stdout_format=json";const h=await Dt({cmd:u});if(0!==h.code)throw new Error(h.stderr);const w=JSON.parse(h.stdout).zip_file_path;let y=new Pt;y.append("file",jt.createReadStream(w));const g=await kt.request({method:"POST",maxBodyLength:1/0,url:`${a.env.ATOM_API_URL}/v1/service/upload/single/${m}`,headers:{...y.getHeaders(),Authorization:`Bearer ${d}`},data:y});if(g.data?.error)throw new Error("Error uploading fnet flow.")},Jt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n})=>{await e({message:"Deploying it as fnet node."});const i=St.inc(n.params.version,"patch"),{file:s,data:a}=await At({name:n.config||"fnet-node",dir:t.projectDir});if(!a.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!a.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!a.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const r=`${a.env.ATOM_API_URL}/v1/auth/token`,c=a.env.ATOM_API_USERNAME,l=a.env.ATOM_API_PASSWORD;let p=await Tt({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}`);o.isDirty=!0,n.params.version=i;const f=`${a.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(p=await Tt({method:"POST",url:f,data:{name:n.params.name,version:n.params.version,docs:n.params.docs,configs:n.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`}}),p.data?.error)throw new Error("Error publishing fnet node.")};const Wt=u;async function Kt({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Wt(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||Wt(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await t({node:e}),o({node:e})}var Gt={hits:async function({node:e}){if(!e.definition.hasOwnProperty("switch"))return!1;const t=e.definition.switch||[];if(!t.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===t.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const o=t.filter((e=>e.hasOwnProperty("default")));if(o.length>1)throw new Error("Switch must have only one default");if(1===o.length&&!t[t.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");return!0},init:async function({node:e,initNode:t}){e.type="switch",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let o=0;o<e.definition.switch.length;o++){let n=e.definition.switch[o],i=`${o}`;n.hasOwnProperty("default")&&(i="default",n=n.default);const s={name:n.condition||i,childs:[],parent:e,definition:n,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=Kt},resolve:Kt};const Vt=R,Xt=Gt;var Ht={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>Vt({expression:e}))))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,o=Object.keys(t.definition),n=await Promise.all(o.map((e=>Vt({expression:e})))),i=[],s=n.find((e=>"if"===e?.processor)),a=t.definition[s.expression];i.push({name:`${t.name}_if`,definition:a,processor:s}),delete t.definition[s.expression];const r=n.filter((e=>"elseif"===e?.processor));let c=0;for(const e of r){const o=t.definition[e.expression];i.push({name:`${t.name}_elseif_${c++}`,definition:o,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of i)t.definition.switch.push({condition:e.processor.statement,...e.definition});await Xt.init(e)}};const Yt=u;async function Zt({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||Yt(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||Yt(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var Qt={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:t}){if(e.type="tryexcept",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const o="try",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}if(e.definition.except){const o="except",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}e.resolve=Zt},resolve:Zt};const eo=u;async function to({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){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],o=Object.keys(t)[0],s=t[o],a={key:await n(o),value:await n(s)};i.assign[e]=a}await t({node:e}),o({node:e})}var oo={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 no=u,io=U,so=B;async function ao({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||no(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await t({node:e}),o({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"],[o,n]=[io(e.definition.for,t),so(e.definition.for,t)];e.definition.for=o,e.definition.for.steps=[{[`${e.name}_step`]:n}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let o=0;o<e.definition.for.steps.length;o++){const n=e.definition.for.steps[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=ao},resolve:ao};var co={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){}};const lo=u;async function po({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||lo(e.definition);const n=e.context.transform;n.raise=await o(n.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=u;async function uo({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||mo(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var ho={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 wo=u;async function yo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||wo(e.definition);const i=e.context.transform;i.args&&(i.args=await n(i.args)),i.result&&(i.result=await n(i.result));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.call)),await t({node:e}),o({node:e})}var go={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call";for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=yo},resolve:yo};const bo=go;var vo={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(e){const{node:t}=e,o="shell",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/shell",n.args="string"===i?{...n.args,cmd:n[o]}:n[o],delete n[o],await bo.init(e)}};const xo=go;var _o={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(e){const{node:t}=e,o="config",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/config",n.args="string"===i?{...n.args,name:n[o]}:n[o],delete n[o],await xo.init(e)}};const ko=go;var jo={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(e){const{node:t}=e,o="yaml",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/yaml",n.args="string"===i?{...n.args,file:n[o]}:n[o],delete n[o],await ko.init(e)}};async function Do({node:e}){e.context.next=e.childs[0]}var Po={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const o=e.definition.steps||[];for await(const n of o){const o=Object.keys(n)[0],i={name:o,childs:[],parent:e,definition:n[o],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=Do},resolve:Do};const So=u;async function Ao({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||So(e.definition);const i=e.context.transform;i.props&&(i.props=await n(i.props));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.form)),await t({node:e}),o({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 o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=Ao},resolve:Ao};const Eo=u;async function Io({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||Eo(e.definition),await t({node:e})}var $o={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Io},resolve:Io};const Oo=u;async function Co({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Oo(e.definition);const i=e.context.transform;i.next=await n(i.next),await t({node:e}),o({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 Mo=go;var Fo={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,o="prompt",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/prompt",n.args="string"===i?{...n.args,message:n[o]}:n[o],delete n[o],await Mo.init(e)}};const Ro=go;var qo={hits:async function({node:e}){return e.definition.hasOwnProperty("html-script")},init:async function(e){const{node:t}=e,o="html-script",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@flownet/lib-load-browser-script-url",n.args="string"===i?{...n.args,src:n[o]}:n[o],delete n[o],await Ro.init(e)}};const Uo=go;var Bo={hits:async function({node:e}){return e.definition.hasOwnProperty("html-link")},init:async function(e){const{node:t}=e,o="html-link",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@flownet/lib-load-browser-link-url",n.args="string"===i?{...n.args,src:n[o]}:n[o],delete n[o],await Uo.init(e)}};const Lo=p,zo=d,Jo=f,Wo=r,Ko=m,Go=u,Vo=h,Xo=async()=>{if(!await z({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=L.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Ho}=g,Yo=class{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(J.set_api_url(e.data.url),t)return J.set_req_token(t),void o(t);W({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:K.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{J.set_req_token(e.data.access_token),o(e.data.access_token)})).catch((e=>{J.set_req_token(),n(e)}))}))}},Zo=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const o=e.doc.features;o.hasOwnProperty("all_parsed_imports")||(o.all_parsed_imports=!0);const n=X.resolve(t.project.projectDir),i=Y({dir:X.resolve(n,"./app")});if(i.file){let e=await H({file:i.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.app_uses_jsx=t,o.app_has_entry=!0,e=await H({file:i.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.app_entry_uses_jsx=t,o.app_entry_is_ts=i.ts,o.app_entry_ext=i.ext}const s=Y({dir:X.resolve(n,"./cli")});if(s.file){let e=await H({file:s.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.cli_uses_jsx=t,o.cli_has_entry=!0,e=await H({file:s.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.cli_entry_uses_jsx=t,o.cli_entry_is_ts=s.ts,o.cli_entry_ext=s.ext}if("workflow.lib"===e.type){const e=Y({dir:X.resolve(n,"./src")});if(e.file){let t=await H({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.src_uses_jsx=n,o.src_has_entry=!0,t=await H({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.src_entry_uses_jsx=n,o.src_entry_is_ts=e.ts,o.src_entry_ext=e.ext}}const a=!0===o.app_has_entry||!0===o.src_uses_jsx,r=!0===o.cli_has_entry||!0===o.src_uses_jsx;o.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===o.form||!0===o.form?.enabled,o.multiple_enabled=o.multiple_enabled||!0===o.multiple||!0===o.multiple?.enabled,!1===o.app?o.app={enabled:!1}:!0===o.app?o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:a}:o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:a,...o.app||{}},o.app.enabled=!0===o.app.enabled&&(!0===e.doc.features.form_enabled||!0===o.app.extend||!0===o.app.enabled),o.app.format=o.app.format||"esm",o.app.folder=o.app.folder||o.app.format||"default",!1===o.cli?o.cli={enabled:!1}:!0===o.cli?o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r}:o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r,...o.cli||{}},o.cli.enabled=!0===o.cli.enabled&&(!1===e.doc.features.form_enabled||!0===o.cli.extend||!0===o.cli.enabled),o.cli.format=o.cli.format||"esm",o.cli.folder=o.cli.folder||o.cli.folder||"esm";const c={cjs:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!0,string:!0},cjsx:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0,string:!0},esmx:{format:"esm",browser:!0,babel:!0,context:o.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0,string:!0},umd:{format:"umd",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1,string:!0}},l={};!0===o.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,babel_options:{targets:{chrome:"79"}}}),!0===o.app.enabled&&(o.app.dir=`./dist/app/${o.app.folder}`,c.app={format:o.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:o.app.dir,terser:!0,output_exports:!1===o.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:o.app.dir})),!0===o.cli.enabled&&(o.cli.dir=`./dist/cli/${o.cli.folder}`,c.cli={format:o.cli.format,context:"global",babel:!0===o.src_uses_jsx||!0===o.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:o.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===o.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${X.normalize(o.app.dir||".")}`,files:[X.normalize("./dist/**/*")],cors:!0,open:!1};o.babel_options=o.babel_options||o.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},o.browsersync_options=G(p,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=G({},o.replace_options||o.replace?.options||{}),o.terser_options=G({},o.terser_options||o.terser?.options||{}),o.css_options=G({},o.css_options||o.css?.options||{}),o.wasm_options=G({},o.wasm_options||o.wasm?.options||{}),o.copy_options=G(l,o.copy_options||o.copy?.options||{}),o.json_options=G({},o.json_options||o.json?.options||{}),o.image_options=G({},o.image_options||o.image?.options||{}),o.analyzer_options=G({summaryOnly:!0,limit:12},o.analyzer_options||o.analyzer?.options||{}),o.visualizer_options=G({},o.visualizer_options||o.visualizer?.options||{}),o.string_options=G({},o.string_options||o.string?.options||{}),o.rollup=o.rollup||{},o.rollup_output=G(c,o.rollup_output||o.rollup?.output||{}),o.string_enabled=!0===o.string||o.string&&!1!==o.string?.enabled;const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==o.rollup[e]?(!0===o.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||o.babel_options,t.browsersync_options=G(o.browsersync_options,t.browsersync_options),t.replace_options=G(o.replace_options,t.replace_options),t.terser_options=G(o.terser_options,t.terser_options),t.css_options=G(o.css_options,t.css_options),t.wasm_options=G(o.wasm_options,t.wasm_options),t.copy_options=G(o.copy_options,t.copy_options),t.json_options=G(o.json_options,t.json_options),t.image_options=G(o.image_options,t.image_options),t.analyzer_options=G(o.analyzer_options,t.analyzer_options),t.visualizer_options=G(o.visualizer_options,t.visualizer_options),t.string_options=G(o.string_options,t.string_options),t.string=o.string_enabled&&t.string,o.form_enabled&&(t.babel=!0)):t.enabled=!1)}o.babel_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browser_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browsersync_enabled=!1!==o.browsersync&&d.some((e=>!0===o.rollup_output[e].browsersync)),o.browsersync_enabled=o.browsersync_enabled&&o.app.enabled,o.wasm_enabled=!0===o.wasm||o.wasm&&!1!==o.wasm?.enabled,o.css_enabled=!0===o.css||o.css&&!1!==o.css?.enabled,o.json_enabled=!0===o.json||o.json&&!1!==o.json?.enabled,o.terser_enabled=!0===o.terser||o.terser&&!1!==o.terser?.enabled,o.copy_enabled=o.app.enabled||o.copy_enabled||o.copy&&!1!==o.copy?.enabled,o.image_enabled=!0===o.image||o.image&&!1!==o.image?.enabled,o.analyzer_enabled=!0===o.analyzer||o.analyzer&&!1!==o.analyzer?.enabled,o.visualizer_enabled=!0===o.visualizer||o.visualizer&&!1!==o.visualizer?.enabled,o.dependency_auto_enabled=!1!==o.dependency_auto&&!1!==o.dependency_auto?.enabled,o.npm_install_flags=o.npm_install_flags||"",o.react_version=o.react_version||o.react?.version||18},Qo=async({atom:e,packageDependencies:t,packageDevDependencies:o})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let o="^18.2";o=`^${(await Z({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:o}),t.push({package:"react-dom",version:o}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),o.push({package:"@babel/core",version:"^7.23"}),o.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),o.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),o.push({package:"@rollup/plugin-replace",version:"^5.0"}),o.push({package:"rollup",version:"^4.9"}),o.push({package:"rollup-plugin-delete",version:"^2.0"}),o.push({package:"rollup-plugin-dts",version:"^6.0"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),o.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6.0"}),o.push({package:"@babel/preset-env",version:"7.23"}),o.push({package:"@babel/preset-react",version:"7.23"})),e.doc.features.browsersync_enabled&&o.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&o.push({package:"@rollup/plugin-json",version:"^6.0"}),e.doc.features.terser_enabled&&o.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&o.push({package:"@rollup/plugin-wasm",version:"^6.1"}),e.doc.features.image_enabled&&o.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.analyzer_enabled&&o.push({package:"rollup-plugin-analyzer",version:"^3.3"}),e.doc.features.visualizer_enabled&&o.push({package:"rollup-plugin-visualizer",version:"^5.9"}),e.doc.features.string_enabled&&o.push({package:"rollup-plugin-string",version:"^3.0"}),e.doc.features.css_enabled){o.push({package:"rollup-plugin-postcss",version:"4.0"}),o.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":o.push({package:"postcss-import",version:"^15.1"});break;case"postcss-url":o.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":o.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":o.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":o.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&o.push({package:"rollup-plugin-copy",version:"^3.5"})},en=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n,ts:Date.now()},s=o.templateDir,a=ee.resolve(o.projectDir,"src/app");Q.existsSync(a)||Q.mkdirSync(a,{recursive:!0}),await te({pattern:["index.html.njk","index.js.njk"],dir:ee.resolve(s,"src/app"),outDir:a,context:i})},tn=async({atom:e,context:t,packageDependencies:o,packageDevDependencies:n,setInProgress:i})=>{await i({message:"Creating package.json."});const s=o.find((e=>"react"===e.package)),a=o.find((e=>"react-dom"===e.package));s&&!a?o.push({package:"react-dom",version:s.version}):s&&a&&(a.version=s.version),s&&e.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push(ie.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&r.push(ie.resolve(t.projectDir,"src/cli/index.js"));for await(const t of r){const i=t;if(!ne.existsSync(i))throw new Error(`App file not found: ${i}`);const s=await se({file:i,recursive:!0}),a=!0===e.doc.features.all_parsed_imports?s.all:s.required;for await(const e of a){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;if(n.find((t=>t.package===e.package)))continue;const t=(await ae({name:e.package,groupBy:{minor:!0}}))[0][0];n.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}}const c={atom:e,packageDependencies:o,packageDevDependencies:n},l=t.templateCommonDir,p=oe.compile(ne.readFileSync(ie.resolve(l,"package.json.njk"),"utf8"),oe.configure(l)).render(c),d=t.projectDir,f=ie.resolve(d,"package.json");ne.writeFileSync(f,p,"utf8")},on=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n},s=o.templateDir,a=ce.resolve(o.projectDir,"src/cli");re.existsSync(a)||re.mkdirSync(a,{recursive:!0}),await le({pattern:["index.js.njk"],dir:ce.resolve(s,"src/cli"),outDir:a,context:i})},nn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:n},s=de.resolve(o.projectDir,"src","default/index.js");if(!pe.existsSync(s))throw new Error(`Entry file not found: ${s}`);const a=(await me({file:s,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&&a.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(a.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<a.length;e++){const o=a[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(a)}}const l=o.templateCommonDir,p=fe.compile(pe.readFileSync(de.resolve(l,"rollup.config.js.njk"),"utf8"),fe.configure(l)).render(i),d=o.projectDir,f=de.resolve(d,"rollup.config.js");pe.writeFileSync(f,p,"utf8")},sn=async({atom:e,setInProgress:t,context:o,njEnv:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const i={},s=e.doc.inputs||[],a=[];s.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&a.push(e);const t={};e.type&&(t.type=e.type),e.default&&(t.default=e.default),e.choices&&(t.choices=e.choices),(e.describe||e.description)&&(t.describe=e.describe||e.description),e.alias&&(t.alias=e.alias),!0===e.required&&(t.required=!0),!0===e.hidden&&(t.hidden=!0),!0===e.array&&(t.array=!0),!0===e.normalize&&(t.normalize=!0),e.nargs&&(t.nargs=e.nargs),i[e.name]=t}));const r={options:i,imports:a,atom:e},c=o.templateDir,l=we.compile(ue.readFileSync(he.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),n).render(r),p=o.projectDir,d=he.resolve(p,"src/default/to.yargs.js");ue.writeFileSync(d,l,"utf8")},an=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},s=o.templateCommonDir,a=be.compile(ye.readFileSync(ge.resolve(s,".gitignore.njk"),"utf8"),be.configure(s)).render(i),r=o.projectDir,c=ge.resolve(r,".gitignore");ye.writeFileSync(c,a,"utf8")},rn=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:n},s=o.templateCommonDir,a=_e.compile(ve.readFileSync(xe.resolve(s,"tsconfig.json.njk"),"utf8"),_e.configure(s)).render(i),r=o.projectDir,c=xe.resolve(r,"tsconfig.json");ve.writeFileSync(c,a,"utf8")},cn=async({atom:e,context:t,setInProgress:o,Atom:n})=>{const i="readme.md",s=`Creating ${i}`;if(await o({message:s}),t.project?.readme){const e={content:t.project.readme.doc.content},o=t.templateCommonDir,n=ke.compile(je.readFileSync(De.resolve(o,`${i}.njk`),"utf8"),ke.configure(o)).render(e),s=t.projectDir,a=De.resolve(s,`${i}`);je.writeFileSync(a,n,"utf8")}else if(e.id){const o=await n.first({type:"wiki",parent_id:e.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:s,...a}=o.doc,r={content:s},c=t.templateCommonDir,l=ke.compile(je.readFileSync(De.resolve(c,`${i}.njk`),"utf8"),ke.configure(c)).render(r),p=t.projectDir,d=De.resolve(p,`${i}`);je.writeFileSync(d,l,"utf8")}},ln=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});let n=Se.join("src","**","*");if(0!==Pe.exec(`prettier --write ${n} *.{js,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o}).code)throw new Error("Couldnt format files.")},pn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Creating .d.ts"});if(0!==Ae.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},dn=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==Te.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},fn=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==Ee.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},mn=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:s}=e;if(!0===i.enabled)if("lib"===i.name)await Ct({...e});else if("red"===i.name)await Ot({...e});else if("npm"===i.name)await $t({...e});else if("gcs"===i.name)await It({...e});else if("gitlab"===i.name)await Et({...e});else if("macos-app"===i.name)await Mt({...e});else if("ios-app"===i.name)await Nt({...e});else if("electron"===i.name)await Ft({...e});else if("webos"===i.name)await Rt({...e});else if("fnet-package"===i.name)await Bt({...e});else if("fnet-form"===i.name)await Lt({...e});else if("fnet-node"===i.name)await Jt({...e});else if("fnet-flow"===i.name)await zt({...e});else{let e;if("nextjs"===i.name?e=qt:"docker"===i.name&&(e=Ut),!e)return;await e({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o})}},{Atom:un}=b,hn=M,wn=j,yn=F,gn=t,bn=k,vn=R,xn=c,_n=q,kn=Ht,jn=Qt,Dn=oo,Pn=ro,Sn=Gt,An=co,Tn=fo,En=ho,In=go,$n=vo,On=_o,Cn=jo,Nn=Po,Mn=To,Fn=$o,Rn=No,qn=Fo,Un=qo,Bn=Bo,Ln=({node:e})=>{const t=e.definition;if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let o=e.parent;for(;o.parent;){const n=o.childs.find((e=>e.name===t.next));if(n){e.context.next=n;break}o=o.parent}}else{let t=e.parent,o=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(void 0!==t.blockAutoJumpToParent||void 0!==t.blockAutoJumpToSibling){if(t.blockAutoJumpToParent){const n=t.childs.find((e=>e.index===o));n&&(e.context.next=n);break}t.blockAutoJumpToParent||(o=t.index+1,t=t.parent)}else{const n=t.childs.find((e=>e.index===o));if(n){e.context.next=n;break}o=t.index+1,t=t.parent}}};var zn=class{#e;#t;#o;#n;#i;#s;#a;#r;#c;#l;#p;#d;#f;#m;#u;#h;#w;#y;#g;#b;#v;constructor(e){this.#e=new Yo,this.#t=e,this.#s=[],this.#a=[],this.#r={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#b={packageDependencies:this.#s,packageDevDependencies:this.#a,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:un,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#v={initNode:this.initNode.bind(this),cloneDeep:Go,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Ln,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await Xo(),this.#p=this.#t.buildId||Ho(24),this.#b.buildId=this.#p,this.#u=this.#t.mode,this.#h=["all","deploy","build","file"].includes(this.#u),this.#w=["all","deploy","build"].includes(this.#u),this.#y=["all","deploy"].includes(this.#u),this.#g=["all","deploy","build","file","bpmn"].includes(this.#u),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#m=(await gn({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await Zo(this.#b),await Qo(this.#b),await this.transformWorkflow({workflow:this.#n});const e=await this.initNodeTree({workflow:this.#n});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#s}),await this.resolveNodeTree({root:e}),this.#l=e}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#c=await this.#e.init({config:this.#m}),this.#b.atomAccessToken=this.#c)}async initWorkflow(){const e=this.#t.id;this.#o=this.#t.project?.workflowAtom||await un.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await xn({content:this.#o.doc.content})).parsed:this.#o.doc.content;let t=this.#o.doc.bundleName;t=t||(this.#o.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#o.doc.bundleName=t,this.#o.type=this.#o.type||"workflow",this.#b.atom=this.#o}async initDependencies(){this.#s.push({package:"get-value",version:"^3.0"}),this.#s.push({package:"set-value",version:"^4.1"}),this.#o.doc.features.form_enabled?(this.#s.push({package:"react",version:"^18.2"}),this.#s.push({package:"react-dom",version:"^18.2"}),this.#s.push({package:"@flownet/react-app",version:"^0.1"}),this.#s.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#s.push({package:"yargs",version:"^17"}),this.#s.push({package:"chalk",version:"^4"})}#x(e){Lo.statSync(e).isDirectory()?(Lo.readdirSync(e).forEach((t=>{const o=zo.join(e,t);this.#x(o)})),Lo.rmdirSync(e)):Lo.unlinkSync(e)}#_(e,t){const o=Lo.existsSync(e),n=o&&Lo.statSync(e);o&&n.isDirectory()?(Lo.mkdirSync(t,{recursive:!0}),Lo.readdirSync(e).forEach((o=>{this.#_(zo.join(e,o),zo.join(t,o))}))):Lo.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,o=["node_modules"];if(Lo.existsSync(e)){const t=Lo.readdirSync(e);for(const n of t)if(!o.includes(n)){const t=zo.join(e,n);this.#x(t)}}Lo.existsSync(e)||Lo.mkdirSync(e,{recursive:!0});const n=zo.join(e,"src");Lo.existsSync(n)||Lo.mkdirSync(n,{recursive:!0});const i=zo.join(n,"core");this.#_(t,i);const s=zo.join(n,"default","blocks");Lo.existsSync(s)||Lo.mkdirSync(s,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=Ko.configure(e,{watch:!1,dev:!0}),this.#b.njEnv=this.#i}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,o]=Object.entries(e)[0];if(o.hasOwnProperty("onerror")){const{onerror:n,...i}=o;e[t]={try:i,except:n}}if(e[t].hasOwnProperty("steps")){const o=e[t].steps;if(!Array.isArray(o))throw new Error("Steps must be an array.");e[t].steps=o.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),o={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#o}};t.forEach((t=>{const n={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:o,definition:e[t],index:o.childs.length,depth:o.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};o.childs.push(n)}));for await(const e of o.childs)await this.initNode({node:e});return o}async initNode({node:e}){const t={...this.#v,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await jn.hits(t))await jn.init(t);else if(await Pn.hits(t))await Pn.init(t);else if(await Sn.hits(t))await Sn.init(t);else if(await kn.hits(t))await kn.init(t);else if(await An.hits(t))await An.init(t);else if(await Dn.hits(t))await Dn.init(t);else if(await Tn.hits(t))await Tn.init(t);else if(await En.hits(t))await En.init(t);else if(await In.hits(t))await In.init(t);else if(await $n.hits(t))await $n.init(t);else if(await On.hits(t))await On.init(t);else if(await Cn.hits(t))await Cn.init(t);else if(await Un.hits(t))await Un.init(t);else if(await Bn.hits(t))await Bn.init(t);else if(await Mn.hits(t))await Mn.init(t);else if(await Fn.hits(t))await Fn.init(t);else if(await qn.hits(t))await qn.init(t);else if(await Nn.hits(t))await Nn.init(t);else{if(!await Rn.hits(t))throw new Error("Undefined step type.");await Rn.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const o of e.childs)await this.initNodeIndex({node:o,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const o=zo.join(e.parent.indexKey,e.name);e.indexKey=o,t[o]=e;const n=[];let i=e;for(;i?.parent;)n.push(i.index),i=i.parent;n.reverse(),e.codeKey=`B_${n.join("_")}_${e.type}`,e.pathKey=`${n.join(".")}`,e.typeId=Ho(24);for await(const o of e.childs)await this.initNodeIndex({node:o,index:t})}async initNodeCalls({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"call"===n.type&&o.push(n)}return e.context.calls=o,o}async initNodeCallLibs({root:e}){const t=[],o=e.context.calls;for await(const e of o){const o=e.definition.call,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.call,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"form"===n.type&&o.push(n)}return e.context.forms=o,o}async initNodeFormLibs({root:e}){const t=[],o=e.context.forms;for await(const e of o){const o=e.definition.form,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.form,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const o=e.filter((e=>"atom"===e.type));for(let e=0;e<o.length;e++){const n=o[e],i=await this.findAtomLibrary({url:n.name});n.atom=i;const s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const o=t.find((t=>t.package===e.package));o?"string"==typeof e.path?(o.path||[]).some((t=>t===e.path))||(o.path=o.path||[],o.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(o.path||[]).some((t=>t===e))||(o.path=o.path||[],o.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=hn({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#f),"ac:"===t.protocol){const o=t.pathname.split("/");if(1===o.length)return await un.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await un.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await un.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=zo.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await bn({file:e,recursive:!0}),i=!0===this.#o.doc.features.all_parsed_imports?n.all:n.required;for await(const e of i){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=(await wn({name:e.package,groupBy:{minor:!0}}))[0][0];o.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:o},protocol:t.protocol}}if("npm:"===t.protocol){const e=(await wn({name:t.pathname,groupBy:{minor:!0}}))[0][0];return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:[{package:t.pathname,version:`^${e}`,type:"npm"}]},protocol:t.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=Go(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const o=t.params[e];if("string"==typeof o)t.params[e]={key:o,hasDefault:!1};else{const n=Object.keys(o)[0];t.params[e]={key:n,hasDefault:!0,default:o[n]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#v,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:e}){await this.setInProgress({message:"Creating external lib files."}),this.#o.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const o=t[e].atom,n=this.#t.projectDir;if("local:"===o.protocol){const e=zo.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=zo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!Lo.existsSync(e)){Lo.mkdirSync(zo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Lo.writeFileSync(e,t,"utf8")}o.relativePath=t.split(zo.sep).join("/"),this.#o.typesDir=`./types/${zo.basename(n)}/src`}else if("npm:"===o.protocol)o.relativePath=o.name;else{const e=`${n}/src/libs/${o.id}.js`,t=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;Lo.writeFileSync(zo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=Ko.compile(Lo.readFileSync(zo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=zo.resolve(n,"src/default/index.js");Lo.writeFileSync(i,o,"utf8")}async createNodeTree({root:e}){await this.setInProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:e}){const t=this.#t.templateDir,o=Ko.compile(Lo.readFileSync(zo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=zo.resolve(n,`src/default/${e.codeKey}.js`);Lo.writeFileSync(i,o,"utf8");for await(const t of e.childs)await this.createType({node:t})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:e}){let t=this.#r[e.type];if(t)return t;const o=this.#t.templateDir;return t=Ko.compile(Lo.readFileSync(zo.resolve(o,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#i),this.#r[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,o=`${e.codeKey}.js`,n=zo.resolve(t,`src/default/blocks/${o}`);Lo.writeFileSync(n,e.context.render,"utf8"),e.context.fileName=o,e.context.filePath=n}async transformExpression(e){let t=await this.transformValue(e);return t=JSON.stringify(t),t=this.replaceSpecialPattern(t),t}async transformValue(e){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=await this.transformValue(e[t]);else if(Vo(e)){const t=Object.keys(e);for(let o=0;o<t.length;o++)e[t[o]]=await this.transformValue(e[t[o]])}else if("string"==typeof e){const t=await vn({expression:e});if(t){const{processor:o,statement:n}=t;switch(o){case"v":e=`$::v.${n}::`;break;case"e":e=`$::${n}::`;break;case"m":e=`$::closure.module['${n}']::`;break;case"f":e=`$::closure.form.${n}::`;break;case"for":e=`$::caller.for.${n}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const e="flow.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:o,...n}=this.#o.doc,i={content:Jo.dump(n)},s=this.#t.templateDir,a=Ko.compile(Lo.readFileSync(zo.resolve(s,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=zo.resolve(r,`${e}`);Lo.writeFileSync(c,a,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:Jo.dump(this.#n)},n=this.#t.templateDir,i=Ko.compile(Lo.readFileSync(zo.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),s=this.#t.projectDir,a=zo.resolve(s,`${e}`);Lo.writeFileSync(a,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=Wo.exec("prettier --write .",{cwd:zo.resolve(e,"src")});if(0!==t.code)throw new Error(t.stderr)}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&await o.save()}}else if(this.#o.id){const e=await un.list({type:"workflow.deploy",parent_id:this.#o.id});for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&(o=await un.update(o,{id:o.id}))}}}async deployProject(e){const{deploymentProject:t}=e,o=t.doc.targets;for(let e=0;e<o.length;e++){const n=o[e];await mn({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await un.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await un.update(n,{id:n.id})):n=await un.create({parent_id:this.#m.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:o.version}]}})}async setInProgress({message:e}){console.log(_n.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#g&&!this.#h)return await this.createNetwork();try{const e=this.#g?await yn({root:this.#l}):void 0;this.#h&&(await this.initWorkflowDir(),await this.initNunjucks(),this.#g&&Lo.writeFileSync(zo.resolve(this.#t.projectDir,"./project.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 cn(this.#b),await rn(this.#b),await an(this.#b),await sn(this.#b),await on(this.#b),await en(this.#b),await nn(this.#b),await tn(this.#b),await ln(this.#b),await pn(this.#b),this.#w&&(await dn(this.#b),await fn(this.#b),this.#y&&await this.deploy())),await this._cache_set(this.#d,{status:"COMPLETED",data:{network:e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await yn({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 Jn=p,Wn=d;var Kn=function({baseDir:e=__dirname}){let t=e;for(;t!==Wn.parse(t).root;){const e=Wn.join(t,"node_modules");if(Jn.existsSync(e))return e;t=Wn.dirname(t)}return null};const Gn=process.cwd(),{spawn:Vn}=e;t({name:["redis"],dir:Gn,optional:!0});const Xn=o,Hn=n,{hideBin:Yn}=i,Zn=s,Qn=a,ei=r,ti=c,oi=l,ni=zn,ii=Kn({baseDir:__dirname}),si="win32"===process.platform?";":":";async function ai(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:Xn.resolve(Gn,`./.output/${e.id}`),templateDir:Xn.resolve(ii,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Xn.resolve(ii,"./@fnet/cli-project-common/dist/template/default"),coreDir:Xn.resolve(ii,"./@fnet/cli-project-flow/dist/template/core")}}{const t=await async function(e){const t=Xn.resolve(Gn,"flow.yaml");if(!Zn.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const o=Zn.readFileSync(t,"utf8"),{parsed:n}=await ti({content:o}),i=Xn.dirname(t),s=n.main||"flow.main.yaml";let a=Xn.resolve(i,s);if(!Zn.existsSync(a)&&(a=Xn.resolve(i,s+".yaml"),!Zn.existsSync(a)))throw new Error(`${s} file not found in ${a}.`);const r=Zn.readFileSync(a,"utf8"),{parsed:c}=await ti({content:r}),l={workflowAtom:{doc:{...n,"content-type":"yaml",content:r}},projectDir:i,projectFilePath:t,projectFileContent:o,projectFileParsed:n,projectMainFilePath:a,projectMainFileContent:r,projectMainFileParsed:c},p=Xn.resolve(i,"flow.devops.yaml");if(Zn.existsSync(p)){const e=Zn.readFileSync(p,"utf8"),t=Qn.parse(e);l.devops={filePath:p,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{Zn.writeFileSync(l.devops.filePath,Qn.stringify(l.devops.doc))}}}const d=Xn.resolve(i,"readme.md");if(Zn.existsSync(d)){const e=Zn.readFileSync(d,"utf8");l.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Xn.resolve(ii,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:Xn.resolve(ii,"./@fnet/cli-project-common/dist/template/default"),coreDir:Xn.resolve(ii,"./@fnet/cli-project-flow/dist/template/core"),projectDir:Xn.resolve(t.projectDir,"./.workspace"),projectSrcDir:Xn.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${Xn.join(ii,"/.bin")}${si}${process.env.PATH}`,Hn(Yn(process.argv)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"}).option("vscode",{type:"boolean",default:!0,alias:"vs"})),(async e=>{try{const t=Xn.resolve(ii,"./@fnet/cli-project-flow/dist/template/project"),o=Xn.resolve(Gn,e.name);Zn.existsSync(o)||Zn.mkdirSync(o),await oi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0});let n=ei.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(ei.which("git")&&(n=ei.exec("git init",{cwd:o}),0!==n.code))throw new Error("Failed to initialize git.");if(ei.which("code")&&e.vscode&&(n=ei.exec(`cd ${o} && code .`),0!==n.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=Xn.resolve(ii,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd();if(e.name=Xn.basename(o),e.update){if(await oi({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0}),0!==ei.exec("fnet build",{cwd:o}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flow net project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",alias:"m",default:"build",choices:["all","file","build","deploy","bpmn"]})),(async e=>{try{const t=await ai(e),o=new ni(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow net project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await ai({...e,mode:"all"}),o=new ni(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await ai({...e,mode:"file"}),o=new ni(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ai(e),{projectDir:o}=t,n=`npm ${process.argv.slice(3).join(" ")}`;ei.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ai(e),{projectDir:o}=t,n=`node ${process.argv.slice(3).join(" ")}`;ei.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ai(e),{projectDir:o}=t,n=`npm run serve -- ${process.argv.slice(3).join(" ")}`;ei.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ai(e),{projectDir:o}=t,n=`npm run watch -- ${process.argv.slice(3).join(" ")}`;ei.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ai(e),{projectDir:o}=t,n=`npm run app -- ${process.argv.slice(3).join(" ")}`;ei.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ai(e),{projectDir:o}=t,n=process.argv.slice(3);Vn("npm",["run","cli","--",...n],{cwd:o,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}})).demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e,t,i=require("@fnet/config"),s=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),c=require("path"),d=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),p=require("keycloak-connect"),w=require("qs");function _(){if(t)return e;t=1;const i=s,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=i.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}}var f,b,m,y,k={name:"@fnet/cli",version:"0.32.2",files:["dist"],scripts:{start:"node src/index.js",build:"rollup --config --bundleConfigAsCjs",deploy:"npm install && npm run build && npm publish --access public",watch:"rollup --config --watch --sourcemap --bundleConfigAsCjs --environment DEVELOPMENT"},repository:{type:"git",url:"git+https://gitlab.com/fnetai/cli.git"},license:"MIT",dependencies:{"@flownet/lib-atom-api-js":"^0.1.10","@flownet/lib-bpmn-from-flow":"^0.1.8","@flownet/lib-is-redis-online":"^0.1.13","@flownet/lib-list-npm-versions":"^0.1.31","@flownet/lib-parse-imports-js":"^0.2.1","@flownet/lib-parse-node-url":"^0.1.16","@flownet/lib-pick-npm-versions":"^0.1.12","@flownet/lib-render-templates-dir":"^0.1.12","@flownet/lib-to-docker":"^0.1.2","@flownet/lib-to-electron":"^0.2.1","@flownet/lib-to-gitlab":"^0.1.21","@flownet/lib-to-ios-app":"^0.2.5","@flownet/lib-to-macos-app":"^0.2.3","@flownet/lib-to-nextjs":"^0.1.12","@flownet/lib-to-webos":"^0.2.8","@flownet/lib-upload-files-to-gcs":"^0.3.2","@fnet/cli-project-common":"^0.1.4","@fnet/cli-project-flow":"^0.1.5","@fnet/cli-project-node":"^0.1.5","@fnet/config":"^0.2.8","@fnet/expression":"^0.1.16","@fnet/shell":"^0.1.13","@fnet/yaml":"^0.1.11","@node-red/util":"^3.1.0",axios:"^1.5.0",chalk:"^4.1.2",cors:"^2.8.5",express:"^4.18.2","express-session":"^1.17.3","get-value":"^3.0.1",helmet:"^5.1.1",isobject:"^4.0.0","js-yaml":"^4.1.0","keycloak-connect":"^23.0.4","lodash.clonedeep":"^4.5.0","lodash.merge":"^4.6.2","lodash.omit":"^4.5.0","lodash.pick":"^4.4.0",minimist:"^1.2.8",nanoid:"^3.3.6",nunjucks:"^3.2.4",prettier:"^3.0.3",qs:"^6.11.2",redis:"^4.6.10","request-ip":"^3.3.0",semver:"^7.5.4",serve:"^14.2.1","set-value":"^4.1.0",shelljs:"^0.8.5",typescript:"^5.2.2",uuid:"^9.0.1",yaml:"^2.3.2",yargs:"^17.7.2"},bin:{fnet:"dist/builder/wf-cli.js",flib:"dist/builder/lib-cli.js",fsrv:"dist/index.js",fnode:"dist/builder/lib-cli.js"},devDependencies:{"@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.1","@rollup/plugin-replace":"^5.0.2","@rollup/plugin-terser":"^0.4.3",rollup:"^4.9.6"}};const g=process.cwd(),j=i;(async function(){await j({name:["server","redis"],dir:g,optional:!0});const e=await _()();if(!e)throw new Error("Redis is offline.");const t=k,i=n,s=o,r=l,v=function(){if(b)return f;b=1;const e=n,t=c,i=d,{nanoid:s}=a;return f=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/workflow/builder/create",this._buildHandler.bind(this)),t.post("/workflow/builder/status",this._statusHandler.bind(this)),t.post("/workflow/builder/network",this._networkHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,i){await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_networkHandler(e,t){this._network({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const i=e.body.id;if(!i)throw new Error("Build Id is not defined.");const s="BUILD:"+i;this._cache_get(s).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=all`;return i.exec(o,{async:!0,cwd:this.#e}),{id:n}}async _network(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=bpmn`;i.exec(o,{cwd:this.#e});const l="BUILD:"+n;return await this._cache_get(l)}}}(),E=function(){if(y)return m;y=1;const e=n,t=c,i=d,{nanoid:s}=a;return m=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/library/builder/create",this._buildHandler.bind(this)),t.post("/library/builder/status",this._statusHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,i){await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const i=e.body.id;if(!i)throw new Error("Build Id is not defined.");const s="BUILD:"+i;this._cache_get(s).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Library Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/lib-cli.js")} build --id=${r} --buildId=${n} --mode=all}`;return i.exec(o,{async:!0,cwd:this.#e}),{id:n}}}}(),x=u,q=h,S=new(0,q.MemoryStore),I=new p({store:S}),R=i(),T=w;R.set("query parser",(function(e){return T.parse(e,{depth:12})})),R.use(q({secret:process.env.SESSION_SECRET,resave:!1,saveUninitialized:!0,store:S})),R.use(r()),R.use(s()),R.use(i.json({limit:"1024kb"})),R.get("/healthz",(function(e,t){t.sendStatus(200)})),R.use(x.mw()),R.use(I.middleware()),new v({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),new E({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),R.listen(process.env.HTTP_PORT||8080),console.log(`[${t.version}] ${t.name} started.`)})().catch((e=>{console.error(e.message),process.exit(1)})),module.exports={};
2
+ "use strict";var e,t,i=require("@fnet/config"),s=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),c=require("path"),d=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),p=require("keycloak-connect"),w=require("qs");function _(){if(t)return e;t=1;const i=s,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=i.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}}var f,b,m,y,k={name:"@fnet/cli",version:"0.33.0",files:["dist"],scripts:{start:"node src/index.js",build:"rollup --config --bundleConfigAsCjs",deploy:"npm install && npm run build && npm publish --access public",watch:"rollup --config --watch --sourcemap --bundleConfigAsCjs --environment DEVELOPMENT"},repository:{type:"git",url:"git+https://gitlab.com/fnetai/cli.git"},license:"MIT",dependencies:{"@flownet/lib-atom-api-js":"^0.1.10","@flownet/lib-bpmn-from-flow":"^0.1.8","@flownet/lib-is-redis-online":"^0.1.13","@flownet/lib-list-npm-versions":"^0.1.31","@flownet/lib-parse-imports-js":"^0.2.1","@flownet/lib-parse-node-url":"^0.1.16","@flownet/lib-pick-npm-versions":"^0.1.12","@flownet/lib-render-templates-dir":"^0.1.12","@flownet/lib-to-docker":"^0.1.2","@flownet/lib-to-electron":"^0.2.1","@flownet/lib-to-gitlab":"^0.1.21","@flownet/lib-to-ios-app":"^0.2.5","@flownet/lib-to-macos-app":"^0.2.3","@flownet/lib-to-nextjs":"^0.1.12","@flownet/lib-to-webos":"^0.2.8","@fnet/cli-project-common":"^0.1.4","@fnet/cli-project-flow":"^0.1.7","@fnet/cli-project-node":"^0.1.7","@fnet/config":"^0.2.8","@fnet/dir-zipper":"^0.1.3","@fnet/expression":"^0.1.16","@fnet/files-to-gcs":"^0.3.4","@fnet/shell":"^0.1.13","@fnet/yaml":"^0.1.11","@node-red/util":"^3.1.0",axios:"^1.5.0",chalk:"^4.1.2",cors:"^2.8.5",express:"^4.18.2","express-session":"^1.17.3","form-data":"^4.0.0","get-value":"^3.0.1",helmet:"^5.1.1",isobject:"^4.0.0","js-yaml":"^4.1.0","keycloak-connect":"^23.0.4","lodash.clonedeep":"^4.5.0","lodash.merge":"^4.6.2","lodash.omit":"^4.5.0","lodash.pick":"^4.4.0",minimist:"^1.2.8",nanoid:"^3.3.6",nunjucks:"^3.2.4",prettier:"^3.0.3",qs:"^6.11.2",redis:"^4.6.10","request-ip":"^3.3.0",semver:"^7.5.4",serve:"^14.2.1","set-value":"^4.1.0",shelljs:"^0.8.5",typescript:"^5.2.2",uuid:"^9.0.1",yaml:"^2.3.2",yargs:"^17.7.2"},bin:{fnet:"dist/builder/wf-cli.js",flib:"dist/builder/lib-cli.js",fsrv:"dist/index.js",fnode:"dist/builder/lib-cli.js"},devDependencies:{"@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.1","@rollup/plugin-replace":"^5.0.2","@rollup/plugin-terser":"^0.4.3",rollup:"^4.9.6"}};const g=process.cwd(),j=i;(async function(){await j({name:["server","redis"],dir:g,optional:!0});const e=await _()();if(!e)throw new Error("Redis is offline.");const t=k,i=n,s=o,r=l,v=function(){if(b)return f;b=1;const e=n,t=c,i=d,{nanoid:s}=a;return f=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/workflow/builder/create",this._buildHandler.bind(this)),t.post("/workflow/builder/status",this._statusHandler.bind(this)),t.post("/workflow/builder/network",this._networkHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,i){await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_networkHandler(e,t){this._network({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const i=e.body.id;if(!i)throw new Error("Build Id is not defined.");const s="BUILD:"+i;this._cache_get(s).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=all`;return i.exec(o,{async:!0,cwd:this.#e}),{id:n}}async _network(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=bpmn`;i.exec(o,{cwd:this.#e});const l="BUILD:"+n;return await this._cache_get(l)}}}(),E=function(){if(y)return m;y=1;const e=n,t=c,i=d,{nanoid:s}=a;return m=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/library/builder/create",this._buildHandler.bind(this)),t.post("/library/builder/status",this._statusHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,i){await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const i=e.body.id;if(!i)throw new Error("Build Id is not defined.");const s="BUILD:"+i;this._cache_get(s).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Library Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/lib-cli.js")} build --id=${r} --buildId=${n} --mode=all}`;return i.exec(o,{async:!0,cwd:this.#e}),{id:n}}}}(),x=u,q=h,S=new(0,q.MemoryStore),I=new p({store:S}),R=i(),T=w;R.set("query parser",(function(e){return T.parse(e,{depth:12})})),R.use(q({secret:process.env.SESSION_SECRET,resave:!1,saveUninitialized:!0,store:S})),R.use(r()),R.use(s()),R.use(i.json({limit:"1024kb"})),R.get("/healthz",(function(e,t){t.sendStatus(200)})),R.use(x.mw()),R.use(I.middleware()),new v({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),new E({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),R.listen(process.env.HTTP_PORT||8080),console.log(`[${t.version}] ${t.name} started.`)})().catch((e=>{console.error(e.message),process.exit(1)})),module.exports={};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fnet/cli",
3
- "version": "0.32.2",
3
+ "version": "0.33.0",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -31,12 +31,13 @@
31
31
  "@flownet/lib-to-macos-app": "^0.2.3",
32
32
  "@flownet/lib-to-nextjs": "^0.1.12",
33
33
  "@flownet/lib-to-webos": "^0.2.8",
34
- "@flownet/lib-upload-files-to-gcs": "^0.3.2",
35
34
  "@fnet/cli-project-common": "^0.1.4",
36
- "@fnet/cli-project-flow": "^0.1.5",
37
- "@fnet/cli-project-node": "^0.1.5",
35
+ "@fnet/cli-project-flow": "^0.1.7",
36
+ "@fnet/cli-project-node": "^0.1.7",
38
37
  "@fnet/config": "^0.2.8",
38
+ "@fnet/dir-zipper": "^0.1.3",
39
39
  "@fnet/expression": "^0.1.16",
40
+ "@fnet/files-to-gcs": "^0.3.4",
40
41
  "@fnet/shell": "^0.1.13",
41
42
  "@fnet/yaml": "^0.1.11",
42
43
  "@node-red/util": "^3.1.0",
@@ -45,6 +46,7 @@
45
46
  "cors": "^2.8.5",
46
47
  "express": "^4.18.2",
47
48
  "express-session": "^1.17.3",
49
+ "form-data": "^4.0.0",
48
50
  "get-value": "^3.0.1",
49
51
  "helmet": "^5.1.1",
50
52
  "isobject": "^4.0.0",