@fnet/cli 0.33.5 → 0.33.6

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"),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"),q=require("chalk");const F=g,L=f;const{Api:N}=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,qe=i,Fe=t;const Le=p,Ne=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,At=s,Pt=x,St=C;const It=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)},Et=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}))},$t=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 Fe({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!==qe.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},Tt=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:Le.readFileSync(Ne.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:Le.readFileSync(Ne.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:Le.readFileSync(Ne.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(Le.readFileSync(Ne.resolve(l,`deploy/node-red/${r.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(Le.writeFileSync(Ne.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}},Ot=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})},Ct=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},Mt=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},Rt=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},qt=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},Ft=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)}},Lt=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)}},Nt=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.")},Ut=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.")},zt=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.project.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.project.projectDir}'`,g+=" -p=**/*",g+=" -g",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).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.")},Bt=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.project.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 u=p.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const f=await Pt({cmd:g});if(0!==f.code)throw new Error(f.stderr);const y=JSON.parse(f.stdout).path;let w=new St;w.append("file",At.createReadStream(y));const h=await kt.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 node.")};const Jt=p,Wt=d,Kt=m,Gt=i,Ht=u,Xt=async()=>{if(!await L({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=F.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Yt}=y,Zt=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(N.set_api_url(e.data.url),t)return N.set_req_token(t),void a(t);U({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:z.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)}))}))}},Qt=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},Vt=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"})},ea=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})},ta=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")},aa=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})},oa=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")},ra=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")},sa=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")},na=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")},ia=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")}},ca=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.")},la=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.")},pa=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.")},da=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.")},ma=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:r,setInProgress:s}=e;if(!0===r.enabled)if("lib"===r.name)await Ot({...e});else if("red"===r.name)await Tt({...e});else if("npm"===r.name)await $t({...e});else if("gcs"===r.name)await Et({...e});else if("gitlab"===r.name)await It({...e});else if("macos-app"===r.name)await Mt({...e});else if("ios-app"===r.name)await Ct({...e});else if("electron"===r.name)await Rt({...e});else if("webos"===r.name)await qt({...e});else if("fnet-package"===r.name)await Nt({...e});else if("fnet-form"===r.name)await Ut({...e});else if("fnet-node"===r.name)await Bt({...e});else if("fnet-flow"===r.name)await zt({...e});else{let e;if("nextjs"===r.name?e=Ft:"docker"===r.name&&(e=Lt),!e)return;await e({atom:t,target:r,onProgress:s,projectDir:o.projectDir,dependencies:a})}},{Atom:ua}=w,ga=M,fa=t,ya=v,wa=R,ha=q;var _a=class{#e;#t;#a;#o;#r;#s;#n;#i;#c;#l;#p;#d;#m;#u;#g;#f;#y;constructor(e){this.#e=new Zt,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:ua,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 Xt(),this.#c=this.#t.buildId||Yt(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 fa({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 Qt(this.#y),await Vt(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 ua.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"];Jt.existsSync(e)&&Jt.readdirSync(e).forEach((o=>{a.includes(o)||(t=Gt.rm("-rf",Wt.join(e,o)))}));let o=e;if(!Jt.existsSync(o)&&(t=Gt.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=Wt.join(e,"src"),!Jt.existsSync(o)&&(t=Gt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=Wt.join(e,"src","default"),!Jt.existsSync()&&(t=Gt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Ht.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=ga({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 ua.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await ua.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await ua.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=Wt.resolve(this.#t.projectSrcDir,"index.js"),a=await ya({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 wa({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=Wt.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=Wt.relative(Wt.join(this.#t.projectDir,"src","default"),e);if(!Jt.existsSync(e)){Jt.mkdirSync(Wt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Jt.writeFileSync(e,t,"utf8")}a.relativePath=t.split(Wt.sep).join("/"),this.#a.typesDir=`./types/${Wt.basename(o)}/src`}else{const e=Wt.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Jt.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=Ht.compile(Jt.readFileSync(Wt.resolve(t,Wt.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,r=Wt.resolve(o,Wt.join("src","default","index.js"));Jt.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:Kt.dump(o)},s=this.#t.templateDir,n=Ht.compile(Jt.readFileSync(Wt.resolve(s,`${e}.njk`),"utf8"),this.#o).render(r),i=this.#t.projectDir,c=Wt.resolve(i,`${e}`);Jt.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 ua.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 ua.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 ma({...this.#y,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await ua.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await ua.update(o,{id:o.id})):o=await ua.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(ha.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 ia(this.#y),await na(this.#y),await sa(this.#y),await ra(this.#y),await aa(this.#y),await ea(this.#y),await oa(this.#y),await ta(this.#y),await ca(this.#y),await la(this.#y),this.#g&&(await pa(this.#y),await da(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 ba=p,va=d;var ja=function({baseDir:e=__dirname}){let t=e;for(;t!==va.parse(t).root;){const e=va.join(t,"node_modules");if(ba.existsSync(e))return e;t=va.dirname(t)}return null};const xa=process.cwd(),{spawn:Da}=e;t({name:["redis"],dir:xa,optional:!0});const ka=a,Aa=o,{hideBin:Pa}=r,Sa=s,Ia=n,Ea=i,$a=c,Ta=l,Oa=_a,Ca=ja({baseDir:__dirname}),Ma="win32"===process.platform?";":":";async function Ra(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:ka.resolve(Ca,"./@fnet/cli-project-common/dist/template/default"),projectDir:ka.resolve(xa,`./.output/${e.id}`),coreDir:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/core")};{const t=await async function(){const e=ka.resolve(xa,"node.yaml");if(!Sa.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Sa.readFileSync(e,"utf8"),{parsed:a}=await $a({content:t}),o=ka.dirname(e),r={libraryAtom:{doc:{...a},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},s=ka.resolve(o,"node.devops.yaml");if(Sa.existsSync(s)){const e=Sa.readFileSync(s,"utf8"),t=Ia.parse(e);r.devops={filePath:s,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Sa.writeFileSync(r.devops.filePath,Ia.stringify(r.devops.doc))}}}const n=ka.resolve(o,"readme.md");if(Sa.existsSync(n)){const e=Sa.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:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:ka.resolve(Ca,"./@fnet/cli-project-common/dist/template/default"),coreDir:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/core"),projectDir:ka.resolve(t.projectDir,"./.workspace"),projectSrcDir:ka.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${ka.join(Ca,"/.bin")}${Ma}${process.env.PATH}`,Aa(Pa(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=ka.resolve(Ca,"@fnet/cli-project-node/dist/template/project"),a=ka.resolve(xa,e.name);Sa.existsSync(a)||Sa.mkdirSync(a),await Ta({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=Ea.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Ea.which("git")&&(o=Ea.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(Ea.which("code")&&e.vscode&&(o=Ea.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=ka.resolve(Ca,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=ka.basename(a),e.update){if(await Ta({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==Ea.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 Ra(e),a=new Oa(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 Ra({...e,mode:"all"}),a=new Oa(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 Ra({...e,mode:"file"}),a=new Oa(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 Ra(e),{projectDir:a}=t,o=`npm ${process.argv.slice(3).join(" ")}`;Ea.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 Ra(e),{projectDir:a}=t,o=`node ${process.argv.slice(3).join(" ")}`;Ea.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 Ra(e),{projectDir:a}=t,o=`npm run serve -- ${process.argv.slice(3).join(" ")}`;Ea.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 Ra(e),{projectDir:a}=t,o=`npm run watch -- ${process.argv.slice(3).join(" ")}`;Ea.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 Ra(e),{projectDir:a}=t,o=`npm run app -- ${process.argv.slice(3).join(" ")}`;Ea.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 Ra(e),{projectDir:a}=t,o=process.argv.slice(3);Da("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"),q=require("chalk");const F=g,L=f;const{Api:N}=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,qe=i,Fe=t;const Le=p,Ne=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,At=s,Pt=x,St=C;const It=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)},Et=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}))},$t=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 Fe({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!==qe.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},Tt=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:Le.readFileSync(Ne.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:Le.readFileSync(Ne.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:Le.readFileSync(Ne.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(Le.readFileSync(Ne.resolve(l,`deploy/node-red/${r.deploy.template}.yaml.njk`),"utf8"),i).render(d);if(Le.writeFileSync(Ne.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}},Ot=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})},Ct=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},Mt=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},Rt=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},qt=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},Ft=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)}},Lt=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)}},Nt=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.")},Ut=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.")},zt=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.project.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.project.projectDir}'`,g+=" -p=**/*",g+=" -g",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).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.")},Bt=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.project.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 u=p.data?.upload.id;let g="fnet-dir-zipper";g+=` --sourceDir='${t.project.projectDir}'`,g+=" -p=**/*",g+=" -g",g+=" --stdout_format=json";const f=await Pt({cmd:g});if(0!==f.code)throw new Error(f.stderr);const y=JSON.parse(f.stdout).path;let w=new St;w.append("file",At.createReadStream(y));const h=await kt.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 node.")};const Jt=p,Wt=d,Kt=m,Gt=i,Ht=u,Xt=async()=>{if(!await L({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=F.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:Yt}=y,Zt=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(N.set_api_url(e.data.url),t)return N.set_req_token(t),void a(t);U({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:z.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)}))}))}},Qt=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},Vt=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"})},ea=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})},ta=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")},aa=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})},oa=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")},ra=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")},sa=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")},na=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")},ia=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")}},ca=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.")},la=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.")},pa=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.")},da=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.")},ma=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:r,setInProgress:s}=e;if(!0===r.enabled)if("lib"===r.name)await Ot({...e});else if("red"===r.name)await Tt({...e});else if("npm"===r.name)await $t({...e});else if("gcs"===r.name)await Et({...e});else if("gitlab"===r.name)await It({...e});else if("macos-app"===r.name)await Mt({...e});else if("ios-app"===r.name)await Ct({...e});else if("electron"===r.name)await Rt({...e});else if("webos"===r.name)await qt({...e});else if("fnet-package"===r.name)await Nt({...e});else if("fnet-form"===r.name)await Ut({...e});else if("fnet-node"===r.name)await Bt({...e});else if("fnet-flow"===r.name)await zt({...e});else{let e;if("nextjs"===r.name?e=Ft:"docker"===r.name&&(e=Lt),!e)return;await e({atom:t,target:r,onProgress:s,projectDir:o.projectDir,dependencies:a})}},{Atom:ua}=w,ga=M,fa=t,ya=v,wa=R,ha=q;var _a=class{#e;#t;#a;#o;#r;#s;#n;#i;#c;#l;#p;#d;#m;#u;#g;#f;#y;constructor(e){this.#e=new Zt,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:ua,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 Xt(),this.#c=this.#t.buildId||Yt(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 fa({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 Qt(this.#y),await Vt(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 ua.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"];Jt.existsSync(e)&&Jt.readdirSync(e).forEach((o=>{a.includes(o)||(t=Gt.rm("-rf",Wt.join(e,o)))}));let o=e;if(!Jt.existsSync(o)&&(t=Gt.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=Wt.join(e,"src"),!Jt.existsSync(o)&&(t=Gt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=Wt.join(e,"src","default"),!Jt.existsSync()&&(t=Gt.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=Ht.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=ga({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 ua.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await ua.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await ua.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=Wt.resolve(this.#t.projectSrcDir,"index.js"),a=await ya({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 wa({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=Wt.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=Wt.relative(Wt.join(this.#t.projectDir,"src","default"),e);if(!Jt.existsSync(e)){Jt.mkdirSync(Wt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",Jt.writeFileSync(e,t,"utf8")}a.relativePath=t.split(Wt.sep).join("/"),this.#a.typesDir=`./types/${Wt.basename(o)}/src`}else{const e=Wt.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;Jt.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=Ht.compile(Jt.readFileSync(Wt.resolve(t,Wt.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,r=Wt.resolve(o,Wt.join("src","default","index.js"));Jt.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:Kt.dump(o)},s=this.#t.templateDir,n=Ht.compile(Jt.readFileSync(Wt.resolve(s,`${e}.njk`),"utf8"),this.#o).render(r),i=this.#t.projectDir,c=Wt.resolve(i,`${e}`);Jt.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 ua.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 ua.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 ma({...this.#y,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await ua.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await ua.update(o,{id:o.id})):o=await ua.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(ha.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 ia(this.#y),await na(this.#y),await sa(this.#y),await ra(this.#y),await aa(this.#y),await ea(this.#y),await oa(this.#y),await ta(this.#y),await ca(this.#y),await la(this.#y),this.#g&&(await pa(this.#y),await da(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 ba=p,va=d;var ja=function({baseDir:e=__dirname}){let t=e;for(;t!==va.parse(t).root;){const e=va.join(t,"node_modules");if(ba.existsSync(e))return e;t=va.dirname(t)}return null};const xa=process.cwd(),{spawn:Da}=e;t({name:["redis"],dir:xa,optional:!0});const ka=a,Aa=o,{hideBin:Pa}=r,Sa=s,Ia=n,Ea=i,$a=c,Ta=l,Oa=_a,Ca=ja({baseDir:__dirname}),Ma="win32"===process.platform?";":":";async function Ra(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:ka.resolve(Ca,"./@fnet/cli-project-common/dist/template/default"),projectDir:ka.resolve(xa,`./.output/${e.id}`),coreDir:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/core")};{const t=await async function(){const e=ka.resolve(xa,"node.yaml");if(!Sa.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Sa.readFileSync(e,"utf8"),{parsed:a}=await $a({content:t}),o=ka.dirname(e),r={libraryAtom:{doc:{...a},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},s=ka.resolve(o,"node.devops.yaml");if(Sa.existsSync(s)){const e=Sa.readFileSync(s,"utf8"),t=Ia.parse(e);r.devops={filePath:s,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Sa.writeFileSync(r.devops.filePath,Ia.stringify(r.devops.doc))}}}const n=ka.resolve(o,"readme.md");if(Sa.existsSync(n)){const e=Sa.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:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:ka.resolve(Ca,"./@fnet/cli-project-common/dist/template/default"),coreDir:ka.resolve(Ca,"./@fnet/cli-project-node/dist/template/core"),projectDir:ka.resolve(t.projectDir,"./.workspace"),projectSrcDir:ka.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${ka.join(Ca,"/.bin")}${Ma}${process.env.PATH}`,Aa(Pa(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=ka.resolve(Ca,"@fnet/cli-project-node/dist/template/project"),a=ka.resolve(xa,e.name);Sa.existsSync(a)||Sa.mkdirSync(a),await Ta({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0});let o=Ea.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Ea.which("git")&&(o=Ea.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");if(Ea.which("code")&&e.vscode&&(o=Ea.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=ka.resolve(Ca,"@fnet/cli-project-node/dist/template/project"),a=process.cwd();if(e.name=ka.basename(a),e.update){if(await Ta({dir:t,outDir:a,context:e,copyUnmatchedAlso:!0}),0!==Ea.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 Ra(e),a=new Oa(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 Ra({...e,mode:"all"}),a=new Oa(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 Ra({...e,mode:"file"}),a=new Oa(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 Ra(e),{projectDir:a}=t,o=`npm ${process.argv.slice(3).join(" ")}`;Ea.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 Ra(e),{projectDir:a}=t,o=`node ${process.argv.slice(3).join(" ")}`;Ea.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 Ra(e),{projectDir:a}=t,o=`npm run serve -- ${process.argv.slice(3).join(" ")}`;Ea.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 Ra(e),{projectDir:a}=t,o=`npm run watch -- ${process.argv.slice(3).join(" ")}`;Ea.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 Ra(e),{projectDir:a}=t,o=`npm run app -- ${process.argv.slice(3).join(" ")}`;Ea.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 Ra(e),{projectDir:a}=t,o=process.argv.slice(3);Da("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)}})).command("npx [commands..]","npx - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ra(e),{projectDir:a}=t,o=`npx ${process.argv.slice(3).join(" ")}`;Ea.exec(o,{cwd:a}),process.exit(0)}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.33.5",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.9","@fnet/config":"^0.2.8","@fnet/dir-zipper":"^0.1.5","@fnet/expression":"^0.1.16","@fnet/files-to-gcs":"^0.3.6","@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={};
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.6",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.9","@fnet/cli-project-node":"^0.1.11","@fnet/config":"^0.2.8","@fnet/dir-zipper":"^0.1.5","@fnet/expression":"^0.1.16","@fnet/files-to-gcs":"^0.3.6","@fnet/shell":"^0.1.13","@fnet/yaml":"^0.1.12","@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.33.5",
3
+ "version": "0.33.6",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -32,14 +32,14 @@
32
32
  "@flownet/lib-to-nextjs": "^0.1.12",
33
33
  "@flownet/lib-to-webos": "^0.2.8",
34
34
  "@fnet/cli-project-common": "^0.1.4",
35
- "@fnet/cli-project-flow": "^0.1.7",
36
- "@fnet/cli-project-node": "^0.1.9",
35
+ "@fnet/cli-project-flow": "^0.1.9",
36
+ "@fnet/cli-project-node": "^0.1.11",
37
37
  "@fnet/config": "^0.2.8",
38
38
  "@fnet/dir-zipper": "^0.1.5",
39
39
  "@fnet/expression": "^0.1.16",
40
40
  "@fnet/files-to-gcs": "^0.3.6",
41
41
  "@fnet/shell": "^0.1.13",
42
- "@fnet/yaml": "^0.1.11",
42
+ "@fnet/yaml": "^0.1.12",
43
43
  "@node-red/util": "^3.1.0",
44
44
  "axios": "^1.5.0",
45
45
  "chalk": "^4.1.2",