@fnet/cli 0.25.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builder/lib-cli.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +3 -3
package/dist/builder/lib-cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("child_process"),t=require("@fnet/config"),a=require("path"),o=require("yargs/yargs"),s=require("yargs/helpers"),i=require("fs"),r=require("yaml"),n=require("shelljs"),c=require("@fnet/yaml"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),m=require("js-yaml"),u=require("nunjucks"),g=require("redis"),y=require("@flownet/lib-is-redis-online"),f=require("nanoid"),b=require("@flownet/lib-atom-api-js"),h=require("axios"),w=require("qs"),_=require("lodash.merge"),v=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),x=require("@fnet/shell"),k=require("semver"),D=require("node:os"),S=require("@node-red/util"),I=require("@flownet/lib-to-ios-app"),P=require("@flownet/lib-to-macos-app"),C=require("@flownet/lib-to-electron"),$=require("@flownet/lib-to-webos"),E=require("@flownet/lib-to-nextjs"),A=require("lodash.clonedeep"),F=require("@flownet/lib-parse-node-url"),T=require("@flownet/lib-pick-npm-versions"),q=require("chalk");const z=g,O=y;const{Api:R}=b,N=h.default,L=w;const M=_,B=i,J=a,K=v;const U=j;const G=p,X=d,H=l;const Y=u,W=p,Z=d,Q=v,V=j;const ee=p,te=d,ae=l;const oe=p,se=d,ie=u,re=v;const ne=p,ce=d,le=u;const pe=p,de=d,me=u;const ue=p,ge=d,ye=u;const fe=u,be=p,he=d;const we=n;const _e=n;const ve=n;const je=n;const xe=x,ke=t;const De=p,Se=d,Ie=k,Pe=x,Ce=t;const $e=p,Ee=d,Ae=k,Fe=n,Te=t;const qe=p,ze=d,Oe=D,Re=u,Ne=S,Le=t;const Me=i,Be=a,Je=t;const Ke=I;const Ue=P;const Ge=C;const Xe=$;const He=E,Ye=A,We=_,Ze=k,Qe=d;const Ve=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:s})=>{await e({message:"Deploying it as gitlab project."});const i=t.projectDir;let r="fnet-to-gitlab";const n=o.params.config||"gitlab",c=await ke({name:n,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${n}`);const{data:l}=c.data;r+=` --projectGroupId=${l.projectGroupId}`,r+=` --projectPath='${i}'`,r+=` --projectName='${o.params.name}'`,r+=` --projectBranch='${o.params.branch||"main"}'`,r+=` --gitlabHost='${l.gitlabHost}'`,r+=` --gitlabToken='${l.gitlabToken}'`,r+=` --gitlabUsername='${l.gitlabUsername}'`,r+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await xe({cmd:r}),a.isDirty=!0)},et=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:s})=>{await e({message:"Deploying it as gcs package."});const i=t.projectDir,r=Se.resolve(i,"package.json"),n=De.readFileSync(r),c=JSON.parse(n);c.name=o.params.name,c.version=Ie.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,De.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Ce({name:o.params.config||t.gcsConfig||"gcs",dir:t.projectDir});let d="fnet-upload-files-to-gcs";d+=` --projectId='${p.env.GCS_PROJECT_ID}'`,d+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,d+=` --keyFilename='${Se.resolve(Se.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${i}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --headers.cacheControl='public, max-age=31536000, immutable'",d+=" --verbose",p.env.DOMAIN&&(d+=` --domain='${p.env.DOMAIN}'`),!0===o.dryRun&&(d+=" --dryRun"),await Pe({cmd:d}),De.writeFileSync(r,n),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=c.version,await s({target:o,packageJSON:c}))},tt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s})=>{await t({message:"Deploying it as npm package."});const i=a.projectDir,r=Ee.resolve(i,"package.json"),n=$e.readFileSync(r),c=JSON.parse(n);c.name=s.params.name,c.version=Ae.inc(s.params.version,"patch");const l=s.params.bin?.name||s.params.bin;!1!==s.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},$e.writeFileSync(r,JSON.stringify(c,null,"\t"));const p=(await Te({name:a.npmConfig||"npm",dir:a.projectDir}))?.data;if($e.writeFileSync(Ee.resolve(i,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==Fe.exec("npm publish --access public",{cwd:i}).code)throw new Error("Couldnt publish to npm");$e.writeFileSync(r,n),o.isDirty=!0,s.params.version=c.version},at=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i,packageDependencies:r,njEnv:n})=>{await t({message:"Deploying it as node-red flow."});const c=a.projectDir,l=a.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===s.deploy.template)d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||Ne.util.generateId(),label:`${p}/${e.id?e.id:Oe.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:Ne.util.generateId(),name:e.doc.name,initialize:{content:qe.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Ne.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:Ne.util.generateId()}}};else if("cronjob"===s.deploy.template){let t=s.params?.schedules?cloneDeep(s.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||Ne.util.generateId(),label:`${p}/${e.id?e.id:Oe.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:Ne.util.generateId(),name:e.doc.name,initialize:{content:qe.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Ne.util.generateId(),schedules:t},debug:{id:Ne.util.generateId()}}}}else{if("http"!==s.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||Ne.util.generateId(),label:`${p}/${e.id?e.id:Oe.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:Ne.util.generateId(),name:e.doc.name,initialize:{content:qe.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Ne.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:Ne.util.generateId()},debug:{id:Ne.util.generateId()}}}}let m=Re.compile(qe.readFileSync(ze.resolve(l,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),n).render(d);if(qe.writeFileSync(ze.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=(await Le({name:a.redConfig||"red",dir:a.projectDir}))?.data,g=s.deploy.url||u.env.RED_URL,y={};if(!1!==s.deploy.auth&&(y.Authorization="Bearer "+atomAccessToken),s.deploy.id)!0===s.actions?.delete?(await axios({method:"DELETE",url:`${g}/flow/${s.deploy.id}`,headers:y}),delete s.actions.delete,delete s.deploy.id,s.enabled=!1):await axios({method:"PUT",url:`${g}/flow/${s.deploy.id}`,data:m,headers:y});else{const e=await axios({method:"POST",url:`${g}/flow`,data:m,headers:y});s.deploy.id=e.data.id}},ot=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:s,deploymentProject:i,deploymentProjectTarget:r})=>{await a({message:"Deploying it as workflow lib."});const n=(await Je({name:"atom",dir:o.projectDir}))?.data;let c,l,p,d=r.deploy.name.split("/");if(1===d.length)l=n.env.ATOM_LIBRARIES_ID,p=r.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:n.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===r.dryRun)return;if(i.isDirty=!0,r.deploy.id){if(c=await t.get({id:r.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;r.deploy.id=c.id}const m=o.projectDir;c.doc.contents=[{content:Me.readFileSync(Be.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Me.readFileSync(Be.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Me.readFileSync(Be.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=s,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},st=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i,registerToPackageManager:r})=>{await t({message:"Deploying it as ios app package."});const n=a.projectDir;if(!0===s.dryRun)return;const c={projectDir:n,dest:n,atom:e,params:s.params};await Ke(c),o.isDirty=!0},it=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i})=>{await t({message:"Deploying it as macos app package."});const r=a.projectDir;if(!0===s.dryRun)return;const n={projectDir:r,dest:r,atom:e,params:s.params};await Ue(n),o.isDirty=!0},rt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i})=>{await t({message:"Deploying it as electron package."});const r=a.projectDir;if(!0===s.dryRun)return;const n={src:r,dest:r,atom:e,params:s.params};await Ge(n),o.isDirty=!0},nt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s})=>{await t({message:"Deploying it as webos package."});const i=a.projectDir;if(!0===s.dryRun)return;const r={src:i,dest:i,atom:e,params:s.params};await Xe(r),o.isDirty=!0},ct=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s})=>{a&&await a({message:"Deploying it as nextjs package."});t.params=We({name:"nextjs-app",version:"0.1.0"},t.params);const i=Ze.inc(t.params.version,"patch");t.params.version=i;const r=Ye(t);r.params.dependencies=Ye(s);const n={atom:e,target:r.params,projectDir:o,renderDir:Qe.resolve(o,"nextjs")};return{deployer:await He(n)}};const lt=p,pt=d,dt=m,mt=n,ut=u,gt=async()=>{if(!await O({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=z.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:yt}=f,ft=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(R.set_api_url(e.data.url),t)return R.set_req_token(t),void a(t);N({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:L.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{R.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{R.set_req_token(),o(e)}))}))}},bt=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const a=e.doc.features;a.hasOwnProperty("all_parsed_imports")||(a.all_parsed_imports=!0);const o=J.resolve(t.project.projectDir),s=J.resolve(o,"./app/index.js");if(B.existsSync(s)){let e=await K({file:s,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.app_uses_jsx=t,a.app_has_entry=!0,e=await K({file:s}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.app_entry_uses_jsx=t}const i=J.resolve(o,"./cli/index.js");if(B.existsSync(i)){let e=await K({file:i,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:i}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.cli_entry_uses_jsx=t}if("workflow.lib"===e.type){const e=J.resolve(o,"./src/index.js");if(B.existsSync(e)){let t=await K({file:e,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}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.src_entry_uses_jsx=o}}const r=!0===a.app_has_entry||!0===a.src_uses_jsx,n=!0===a.cli_has_entry||!0===a.src_uses_jsx;a.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===a.form||!0===a.form?.enabled,a.multiple_enabled=a.multiple_enabled||!0===a.multiple||!0===a.multiple?.enabled,!1===a.app?a.app={enabled:!1}:!0===a.app?a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:r}:a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:r,...a.app||{}},a.app.enabled=!0===a.app.enabled&&(!0===e.doc.features.form_enabled||!0===a.app.extend||!0===a.app.enabled),a.app.format=a.app.format||"esm",a.app.folder=a.app.folder||a.app.format||"default",!1===a.cli?a.cli={enabled:!1}:!0===a.cli?a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:n}:a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:n,...a.cli||{}},a.cli.enabled=!0===a.cli.enabled&&(!1===e.doc.features.form_enabled||!0===a.cli.extend||!0===a.cli.enabled),a.cli.format=a.cli.format||"esm",a.cli.folder=a.cli.folder||a.cli.folder||"esm";const c={cjs:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!0,string:!0},cjsx:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0,string:!0},esmx:{format:"esm",browser:!0,babel:!0,context:a.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0,string:!0},umd:{format:"umd",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1,string:!0}},l={};!0===a.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,babel_options:{targets:{chrome:"79"}}}),!0===a.app.enabled&&(a.app.dir=`./dist/app/${a.app.folder}`,c.app={format:a.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:a.app.dir,terser:!0,output_exports:!1===a.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:a.app.dir})),!0===a.cli.enabled&&(a.cli.dir=`./dist/cli/${a.cli.folder}`,c.cli={format:a.cli.format,context:"global",babel:!0===a.src_uses_jsx||!0===a.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:a.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===a.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${a.app.dir}`,files:["./dist/**/*"]};a.babel_options=a.babel_options||a.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},a.browsersync_options=M(p,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=M({},a.replace_options||a.replace?.options||{}),a.terser_options=M({},a.terser_options||a.terser?.options||{}),a.css_options=M({},a.css_options||a.css?.options||{}),a.wasm_options=M({},a.wasm_options||a.wasm?.options||{}),a.copy_options=M(l,a.copy_options||a.copy?.options||{}),a.json_options=M({},a.json_options||a.json?.options||{}),a.image_options=M({},a.image_options||a.image?.options||{}),a.analyzer_options=M({summaryOnly:!0,limit:12},a.analyzer_options||a.analyzer?.options||{}),a.visualizer_options=M({},a.visualizer_options||a.visualizer?.options||{}),a.string_options=M({},a.string_options||a.string?.options||{}),a.rollup=a.rollup||{},a.rollup_output=M(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=M(a.browsersync_options,t.browsersync_options),t.replace_options=M(a.replace_options,t.replace_options),t.terser_options=M(a.terser_options,t.terser_options),t.css_options=M(a.css_options,t.css_options),t.wasm_options=M(a.wasm_options,t.wasm_options),t.copy_options=M(a.copy_options,t.copy_options),t.json_options=M(a.json_options,t.json_options),t.image_options=M(a.image_options,t.image_options),t.analyzer_options=M(a.analyzer_options,t.analyzer_options),t.visualizer_options=M(a.visualizer_options,t.visualizer_options),t.string_options=M(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=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},ht=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 U({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"}),t.push({package:"chalk",version:"^4"}),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:"^3.26"}),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.22"}),a.push({package:"@babel/preset-react",version:"7.22"})),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"})},wt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const s={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o,ts:Date.now()},i=a.templateDir,r=X.resolve(a.projectDir,"src/app");G.existsSync(r)||G.mkdirSync(r,{recursive:!0}),await H({pattern:["index.html.njk","index.js.njk"],dir:X.resolve(i,"src/app"),outDir:r,context:s})},_t=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:s})=>{await s({message:"Creating package.json."});const i=a.find((e=>"react"===e.package)),r=a.find((e=>"react-dom"===e.package));i&&!r?a.push({package:"react-dom",version:i.version}):i&&r&&(r.version=i.version),i&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const n=[];!0===e.doc.features.app.enabled&&n.push(Z.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&n.push(Z.resolve(t.projectDir,"src/cli/index.js"));for await(const t of n){const s=t;if(!W.existsSync(s))throw new Error(`App file not found: ${s}`);const i=await Q({file:s,recursive:!0}),r=!0===e.doc.features.all_parsed_imports?i.all:i.required;for await(const e of r){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const t=(await V({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=Y.compile(W.readFileSync(Z.resolve(l,"package.json.njk"),"utf8"),Y.configure(l)).render(c),d=t.projectDir,m=Z.resolve(d,"package.json");W.writeFileSync(m,p,"utf8")},vt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const s={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o},i=a.templateDir,r=te.resolve(a.projectDir,"src/cli");ee.existsSync(r)||ee.mkdirSync(r,{recursive:!0}),await ae({pattern:["index.js.njk"],dir:te.resolve(i,"src/cli"),outDir:r,context:s})},jt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},i=se.resolve(a.projectDir,"src","default/index.js");if(!oe.existsSync(i))throw new Error(`Entry file not found: ${i}`);const r=(await re({file:i,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),n=e.doc.features.rollup_output,c=Object.keys(n);for(let e=0;e<c.length;e++){const t=n[c[e]];if(!0===t.browser&&r.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(r.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<r.length;e++){const a=r[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(r)}}const l=a.templateCommonDir,p=ie.compile(oe.readFileSync(se.resolve(l,"rollup.config.js.njk"),"utf8"),ie.configure(l)).render(s),d=a.projectDir,m=se.resolve(d,"rollup.config.js");oe.writeFileSync(m,p,"utf8")},xt=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const s={},i=e.doc.inputs||[],r=[];i.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&r.push(e);const t={};e.type&&(t.type=e.type),e.default&&(t.default=e.default),e.choices&&(t.choices=e.choices),(e.describe||e.description)&&(t.describe=e.describe||e.description),e.alias&&(t.alias=e.alias),!0===e.required&&(t.required=!0),!0===e.hidden&&(t.hidden=!0),!0===e.array&&(t.array=!0),!0===e.normalize&&(t.normalize=!0),e.nargs&&(t.nargs=e.nargs),s[e.name]=t}));const n={options:s,imports:r,atom:e},c=a.templateDir,l=le.compile(ne.readFileSync(ce.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),o).render(n),p=a.projectDir,d=ce.resolve(p,"src/default/to.yargs.js");ne.writeFileSync(d,l,"utf8")},kt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},i=a.templateCommonDir,r=me.compile(pe.readFileSync(de.resolve(i,".gitignore.njk"),"utf8"),me.configure(i)).render(s),n=a.projectDir,c=de.resolve(n,".gitignore");pe.writeFileSync(c,r,"utf8")},Dt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const s={atom:e,packageDependencies:o},i=a.templateCommonDir,r=ye.compile(ue.readFileSync(ge.resolve(i,"tsconfig.json.njk"),"utf8"),ye.configure(i)).render(s),n=a.projectDir,c=ge.resolve(n,"tsconfig.json");ue.writeFileSync(c,r,"utf8")},St=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const s="readme.md",i=`Creating ${s}`;if(await a({message:i}),t.project?.readme){const e={content:t.project.readme.doc.content},a=t.templateCommonDir,o=fe.compile(be.readFileSync(he.resolve(a,`${s}.njk`),"utf8"),fe.configure(a)).render(e),i=t.projectDir,r=he.resolve(i,`${s}`);be.writeFileSync(r,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:i,...r}=a.doc,n={content:i},c=t.templateCommonDir,l=fe.compile(be.readFileSync(he.resolve(c,`${s}.njk`),"utf8"),fe.configure(c)).render(n),p=t.projectDir,d=he.resolve(p,`${s}`);be.writeFileSync(d,l,"utf8")}},It=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});if(0!==we.exec("prettier --write src/**/* bin/* *.{js,json,yaml,html} --no-error-on-unmatched-pattern",{cwd:a}).code)throw new Error("Couldnt format files.")},Pt=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Creating .d.ts"});if(0!==_e.exec("tsc",{cwd:a}).code)throw new Error("Couldnt create .d.ts files.")},Ct=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==ve.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},$t=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==je.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},Et=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:s,setInProgress:i}=e;if(!0===s.enabled)if("lib"===s.name)await ot({...e});else if("red"===s.name)await at({...e});else if("npm"===s.name)await tt({...e});else if("gcs"===s.name)await et({...e});else if("gitlab"===s.name)await Ve({...e});else if("macos-app"===s.name)await it({...e});else if("ios-app"===s.name)await st({...e});else if("electron"===s.name)await rt({...e});else if("webos"===s.name)await nt({...e});else{let e;if("nextjs"===s.name&&(e=ct),!e)return;await e({atom:t,target:s,onProgress:i,projectDir:o.projectDir,dependencies:a})}},{Atom:At}=b,Ft=F,Tt=t,qt=v,zt=T,Ot=q;var Rt=class{#e;#t;#a;#o;#s;#i;#r;#n;#c;#l;#p;#d;#m;#u;#g;#y;#f;constructor(e){this.#e=new ft,this.#t=e,this.#i=[],this.#r=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#f={packageDependencies:this.#i,packageDevDependencies:this.#r,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:At,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 gt(),this.#c=this.#t.buildId||yt(24),this.#f.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.#y=["all","deploy"].includes(this.#m),this.#p=this.#t.protocol,this.#l="BUILD:"+this.#c,this.#d=(await Tt({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 bt(this.#f),await ht(this.#f),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#n=await this.#e.init({config:this.#d}),this.#f.atomAccessToken=this.#n)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await At.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.#f.atom=this.#a}async initLibraryDir(){const e=this.#t.projectDir;let t;const a=["node_modules"];if(lt.existsSync(e)&<.readdirSync(e).forEach((o=>{a.includes(o)||(t=mt.rm("-rf",pt.join(e,o)))})),t=mt.exec(`mkdir -p ${e}`),0!==t.code)throw new Error("Couldnt create workflow dir.");if(t=mt.exec(`mkdir ${e}/src`),0!==t.code)throw new Error("Couldnt create library/src dir.");if(t=mt.exec(`mkdir ${e}/src/default`),0!==t.code)throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=ut.configure(e,{watch:!1,dev:!0}),this.#f.njEnv=this.#o}async initLibs(){const e=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id}];this.#s=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#i})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],s=await this.findAtomLibrary({url:o.name});o.atom=s;const i=s.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));i?.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=Ft({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 At.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await At.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await At.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=pt.resolve(this.#t.projectSrcDir,"index.js"),a=await qt({file:t,recursive:!0}),o=e.doc.dependencies,s=!0===this.#a.doc.features.all_parsed_imports?a.all:a.required;for await(const e of s){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await zt({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=pt.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=pt.relative(`${this.#t.projectDir}/src/default/`,e);if(!lt.existsSync(e)){lt.mkdirSync(pt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",lt.writeFileSync(e,t,"utf8")}a.relativePath=t,this.#a.typesDir=`./types/${pt.basename(o)}/src`}else{const e=`${o}/src/libs/${a.id}.js`,t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;lt.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#s.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},t=this.#t.templateDir,a=ut.compile(lt.readFileSync(pt.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=pt.resolve(o,"src/default/index.js");lt.writeFileSync(s,a,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:a,...o}=this.#a.doc,s={content:dt.dump(o)},i=this.#t.templateDir,r=ut.compile(lt.readFileSync(pt.resolve(i,`${e}.njk`),"utf8"),this.#o).render(s),n=this.#t.projectDir,c=pt.resolve(n,`${e}`);lt.writeFileSync(c,r,"utf8")}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&await a.save()}}else if(this.#a.id){const e=await At.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 At.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 Et({...this.#f,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await At.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await At.update(o,{id:o.id})):o=await At.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(Ot.blue(e)),await this._cache_set(this.#l,{status:"IN_PROGRESS",message:e})}async build(){try{this.#u&&(await this.createAtomLibFiles({libs:this.#s}),await this.createEngine(),await this.createProjectYaml(),await St(this.#f),await Dt(this.#f),await kt(this.#f),await xt(this.#f),await vt(this.#f),await wt(this.#f),await jt(this.#f),await _t(this.#f),await It(this.#f),await Pt(this.#f),this.#g&&(await Ct(this.#f),await $t(this.#f),this.#y&&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}),e}}};const Nt=p,Lt=d;var Mt=function({baseDir:e=__dirname}){let t=e;for(;t!==Lt.parse(t).root;){const e=Lt.join(t,"node_modules");if(Nt.existsSync(e))return e;t=Lt.dirname(t)}return null};const Bt=process.cwd(),{spawn:Jt}=e;t({name:["redis"],dir:Bt,optional:!0});const Kt=a,Ut=o,{hideBin:Gt}=s,Xt=i,Ht=r,Yt=n,Wt=c,Zt=l,Qt=Rt,Vt=Mt({baseDir:__dirname});async function ea(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Kt.resolve(Vt,"./@flownet/template-node-library/default"),templateCommonDir:Kt.resolve(Vt,"./@flownet/template-node-common/default"),projectDir:Kt.resolve(Bt,`./.output/${e.id}`),coreDir:Kt.resolve(Vt,"./@flownet/template-node-library/core")};{const t=await async function(){const e=Kt.resolve(Bt,"node.yaml");if(!Xt.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Xt.readFileSync(e,"utf8"),{parsed:a}=await Wt({content:t}),o=Kt.dirname(e),s={libraryAtom:{doc:{...a,"content-type":"javascript",language:"js"},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},i=Kt.resolve(o,"node.devops.yaml");if(Xt.existsSync(i)){const e=Xt.readFileSync(i,"utf8"),t=Ht.parse(e);s.devops={filePath:i,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Xt.writeFileSync(s.devops.filePath,Ht.stringify(s.devops.doc))}}}const r=Kt.resolve(o,"readme.md");if(Xt.existsSync(r)){const e=Xt.readFileSync(r,"utf8");s.readme={filePath:r,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return s}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Kt.resolve(Vt,"./@flownet/template-node-library/default"),templateCommonDir:Kt.resolve(Vt,"./@flownet/template-node-common/default"),coreDir:Kt.resolve(Vt,"./@flownet/template-node-library/core"),projectDir:Kt.resolve(t.projectDir,"./.workspace"),projectSrcDir:Kt.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${Vt}/.bin:${process.env.PATH}`,Ut(Gt(process.argv)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0})),(async e=>{try{const t=Kt.resolve(Vt,"@flownet/template-node-library/project"),a=Kt.resolve(Bt,e.name);Xt.existsSync(a)||Xt.mkdirSync(a),await Zt({dir:t,outDir:a,context:e});let o=Yt.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Yt.which("git")&&(o=Yt.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization 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 ea(e),a=new Qt(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 ea({...e,mode:"all"}),a=new Qt(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 ea({...e,mode:"file"}),a=new Qt(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 ea(e),{projectDir:a}=t,o=`npm ${process.argv.slice(3).join(" ")}`;Yt.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 ea(e),{projectDir:a}=t,o=`node ${process.argv.slice(3).join(" ")}`;Yt.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 ea(e),{projectDir:a}=t,o=`npm run serve -- ${process.argv.slice(3).join(" ")}`;Yt.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 ea(e),{projectDir:a}=t,o=`npm run watch -- ${process.argv.slice(3).join(" ")}`;Yt.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 ea(e),{projectDir:a}=t,o=`npm run app -- ${process.argv.slice(3).join(" ")}`;Yt.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 ea(e),{projectDir:a}=t,o=process.argv.slice(3);Jt("npm",["run","cli","--",...o],{cwd:a,stdio:"inherit"}).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"),s=require("yargs/helpers"),i=require("fs"),r=require("yaml"),n=require("shelljs"),c=require("@fnet/yaml"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),m=require("js-yaml"),u=require("nunjucks"),g=require("redis"),y=require("@flownet/lib-is-redis-online"),f=require("nanoid"),b=require("@flownet/lib-atom-api-js"),h=require("axios"),w=require("qs"),_=require("lodash.merge"),v=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),x=require("@fnet/shell"),k=require("semver"),D=require("node:os"),S=require("@node-red/util"),I=require("@flownet/lib-to-ios-app"),P=require("@flownet/lib-to-macos-app"),C=require("@flownet/lib-to-electron"),$=require("@flownet/lib-to-webos"),E=require("@flownet/lib-to-nextjs"),A=require("lodash.clonedeep"),F=require("@flownet/lib-parse-node-url"),T=require("@flownet/lib-pick-npm-versions"),q=require("chalk");const z=g,O=y;const{Api:R}=b,N=h.default,L=w;const M=_,B=i,J=a,K=v;const U=j;const G=p,X=d,H=l;const Y=u,W=p,Z=d,Q=v,V=j;const ee=p,te=d,ae=l;const oe=p,se=d,ie=u,re=v;const ne=p,ce=d,le=u;const pe=p,de=d,me=u;const ue=p,ge=d,ye=u;const fe=u,be=p,he=d;const we=n;const _e=n;const ve=n;const je=n;const xe=x,ke=t;const De=p,Se=d,Ie=k,Pe=x,Ce=t;const $e=p,Ee=d,Ae=k,Fe=n,Te=t;const qe=p,ze=d,Oe=D,Re=u,Ne=S,Le=t;const Me=i,Be=a,Je=t;const Ke=I;const Ue=P;const Ge=C;const Xe=$;const He=E,Ye=A,We=_,Ze=k,Qe=d;const Ve=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:s})=>{await e({message:"Deploying it as gitlab project."});const i=t.projectDir;let r="fnet-to-gitlab";const n=o.params.config||"gitlab",c=await ke({name:n,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${n}`);const{data:l}=c.data;r+=` --projectGroupId=${l.projectGroupId}`,r+=` --projectPath='${i}'`,r+=` --projectName='${o.params.name}'`,r+=` --projectBranch='${o.params.branch||"main"}'`,r+=` --gitlabHost='${l.gitlabHost}'`,r+=` --gitlabToken='${l.gitlabToken}'`,r+=` --gitlabUsername='${l.gitlabUsername}'`,r+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await xe({cmd:r}),a.isDirty=!0)},et=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:s})=>{await e({message:"Deploying it as gcs package."});const i=t.projectDir,r=Se.resolve(i,"package.json"),n=De.readFileSync(r),c=JSON.parse(n);c.name=o.params.name,c.version=Ie.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,De.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Ce({name:o.params.config||t.gcsConfig||"gcs",dir:t.projectDir});let d="fnet-upload-files-to-gcs";d+=` --projectId='${p.env.GCS_PROJECT_ID}'`,d+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,d+=` --keyFilename='${Se.resolve(Se.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${i}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --headers.cacheControl='public, max-age=31536000, immutable'",d+=" --verbose",p.env.DOMAIN&&(d+=` --domain='${p.env.DOMAIN}'`),!0===o.dryRun&&(d+=" --dryRun"),await Pe({cmd:d}),De.writeFileSync(r,n),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=c.version,await s({target:o,packageJSON:c}))},tt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s})=>{await t({message:"Deploying it as npm package."});const i=a.projectDir,r=Ee.resolve(i,"package.json"),n=$e.readFileSync(r),c=JSON.parse(n);c.name=s.params.name,c.version=Ae.inc(s.params.version,"patch");const l=s.params.bin?.name||s.params.bin;!1!==s.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},$e.writeFileSync(r,JSON.stringify(c,null,"\t"));const p=(await Te({name:a.npmConfig||"npm",dir:a.projectDir}))?.data;if($e.writeFileSync(Ee.resolve(i,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==Fe.exec("npm publish --access public",{cwd:i}).code)throw new Error("Couldnt publish to npm");$e.writeFileSync(r,n),o.isDirty=!0,s.params.version=c.version},at=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i,packageDependencies:r,njEnv:n})=>{await t({message:"Deploying it as node-red flow."});const c=a.projectDir,l=a.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===s.deploy.template)d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||Ne.util.generateId(),label:`${p}/${e.id?e.id:Oe.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:Ne.util.generateId(),name:e.doc.name,initialize:{content:qe.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Ne.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:Ne.util.generateId()}}};else if("cronjob"===s.deploy.template){let t=s.params?.schedules?cloneDeep(s.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||Ne.util.generateId(),label:`${p}/${e.id?e.id:Oe.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:Ne.util.generateId(),name:e.doc.name,initialize:{content:qe.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Ne.util.generateId(),schedules:t},debug:{id:Ne.util.generateId()}}}}else{if("http"!==s.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||Ne.util.generateId(),label:`${p}/${e.id?e.id:Oe.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:Ne.util.generateId(),name:e.doc.name,initialize:{content:qe.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Ne.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:Ne.util.generateId()},debug:{id:Ne.util.generateId()}}}}let m=Re.compile(qe.readFileSync(ze.resolve(l,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),n).render(d);if(qe.writeFileSync(ze.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=(await Le({name:a.redConfig||"red",dir:a.projectDir}))?.data,g=s.deploy.url||u.env.RED_URL,y={};if(!1!==s.deploy.auth&&(y.Authorization="Bearer "+atomAccessToken),s.deploy.id)!0===s.actions?.delete?(await axios({method:"DELETE",url:`${g}/flow/${s.deploy.id}`,headers:y}),delete s.actions.delete,delete s.deploy.id,s.enabled=!1):await axios({method:"PUT",url:`${g}/flow/${s.deploy.id}`,data:m,headers:y});else{const e=await axios({method:"POST",url:`${g}/flow`,data:m,headers:y});s.deploy.id=e.data.id}},ot=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:s,deploymentProject:i,deploymentProjectTarget:r})=>{await a({message:"Deploying it as workflow lib."});const n=(await Je({name:"atom",dir:o.projectDir}))?.data;let c,l,p,d=r.deploy.name.split("/");if(1===d.length)l=n.env.ATOM_LIBRARIES_ID,p=r.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:n.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===r.dryRun)return;if(i.isDirty=!0,r.deploy.id){if(c=await t.get({id:r.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;r.deploy.id=c.id}const m=o.projectDir;c.doc.contents=[{content:Me.readFileSync(Be.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Me.readFileSync(Be.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Me.readFileSync(Be.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=s,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},st=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i,registerToPackageManager:r})=>{await t({message:"Deploying it as ios app package."});const n=a.projectDir;if(!0===s.dryRun)return;const c={projectDir:n,dest:n,atom:e,params:s.params};await Ke(c),o.isDirty=!0},it=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i})=>{await t({message:"Deploying it as macos app package."});const r=a.projectDir;if(!0===s.dryRun)return;const n={projectDir:r,dest:r,atom:e,params:s.params};await Ue(n),o.isDirty=!0},rt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i})=>{await t({message:"Deploying it as electron package."});const r=a.projectDir;if(!0===s.dryRun)return;const n={src:r,dest:r,atom:e,params:s.params};await Ge(n),o.isDirty=!0},nt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s})=>{await t({message:"Deploying it as webos package."});const i=a.projectDir;if(!0===s.dryRun)return;const r={src:i,dest:i,atom:e,params:s.params};await Xe(r),o.isDirty=!0},ct=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s})=>{a&&await a({message:"Deploying it as nextjs package."});t.params=We({name:"nextjs-app",version:"0.1.0"},t.params);const i=Ze.inc(t.params.version,"patch");t.params.version=i;const r=Ye(t);r.params.dependencies=Ye(s);const n={atom:e,target:r.params,projectDir:o,renderDir:Qe.resolve(o,"nextjs")};return{deployer:await He(n)}};const lt=p,pt=d,dt=m,mt=n,ut=u,gt=async()=>{if(!await O({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=z.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:yt}=f,ft=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(R.set_api_url(e.data.url),t)return R.set_req_token(t),void a(t);N({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:L.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{R.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{R.set_req_token(),o(e)}))}))}},bt=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const a=e.doc.features;a.hasOwnProperty("all_parsed_imports")||(a.all_parsed_imports=!0);const o=J.resolve(t.project.projectDir),s=J.resolve(o,"./app/index.js");if(B.existsSync(s)){let e=await K({file:s,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.app_uses_jsx=t,a.app_has_entry=!0,e=await K({file:s}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.app_entry_uses_jsx=t}const i=J.resolve(o,"./cli/index.js");if(B.existsSync(i)){let e=await K({file:i,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:i}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.cli_entry_uses_jsx=t}if("workflow.lib"===e.type){const e=J.resolve(o,"./src/index.js");if(B.existsSync(e)){let t=await K({file:e,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}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.src_entry_uses_jsx=o}}const r=!0===a.app_has_entry||!0===a.src_uses_jsx,n=!0===a.cli_has_entry||!0===a.src_uses_jsx;a.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===a.form||!0===a.form?.enabled,a.multiple_enabled=a.multiple_enabled||!0===a.multiple||!0===a.multiple?.enabled,!1===a.app?a.app={enabled:!1}:!0===a.app?a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:r}:a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:r,...a.app||{}},a.app.enabled=!0===a.app.enabled&&(!0===e.doc.features.form_enabled||!0===a.app.extend||!0===a.app.enabled),a.app.format=a.app.format||"esm",a.app.folder=a.app.folder||a.app.format||"default",!1===a.cli?a.cli={enabled:!1}:!0===a.cli?a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:n}:a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:n,...a.cli||{}},a.cli.enabled=!0===a.cli.enabled&&(!1===e.doc.features.form_enabled||!0===a.cli.extend||!0===a.cli.enabled),a.cli.format=a.cli.format||"esm",a.cli.folder=a.cli.folder||a.cli.folder||"esm";const c={cjs:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!0,string:!0},cjsx:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0,string:!0},esmx:{format:"esm",browser:!0,babel:!0,context:a.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0,string:!0},umd:{format:"umd",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1,string:!0}},l={};!0===a.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,babel_options:{targets:{chrome:"79"}}}),!0===a.app.enabled&&(a.app.dir=`./dist/app/${a.app.folder}`,c.app={format:a.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:a.app.dir,terser:!0,output_exports:!1===a.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:a.app.dir})),!0===a.cli.enabled&&(a.cli.dir=`./dist/cli/${a.cli.folder}`,c.cli={format:a.cli.format,context:"global",babel:!0===a.src_uses_jsx||!0===a.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:a.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===a.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${a.app.dir}`,files:["./dist/**/*"]};a.babel_options=a.babel_options||a.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},a.browsersync_options=M(p,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=M({},a.replace_options||a.replace?.options||{}),a.terser_options=M({},a.terser_options||a.terser?.options||{}),a.css_options=M({},a.css_options||a.css?.options||{}),a.wasm_options=M({},a.wasm_options||a.wasm?.options||{}),a.copy_options=M(l,a.copy_options||a.copy?.options||{}),a.json_options=M({},a.json_options||a.json?.options||{}),a.image_options=M({},a.image_options||a.image?.options||{}),a.analyzer_options=M({summaryOnly:!0,limit:12},a.analyzer_options||a.analyzer?.options||{}),a.visualizer_options=M({},a.visualizer_options||a.visualizer?.options||{}),a.string_options=M({},a.string_options||a.string?.options||{}),a.rollup=a.rollup||{},a.rollup_output=M(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=M(a.browsersync_options,t.browsersync_options),t.replace_options=M(a.replace_options,t.replace_options),t.terser_options=M(a.terser_options,t.terser_options),t.css_options=M(a.css_options,t.css_options),t.wasm_options=M(a.wasm_options,t.wasm_options),t.copy_options=M(a.copy_options,t.copy_options),t.json_options=M(a.json_options,t.json_options),t.image_options=M(a.image_options,t.image_options),t.analyzer_options=M(a.analyzer_options,t.analyzer_options),t.visualizer_options=M(a.visualizer_options,t.visualizer_options),t.string_options=M(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=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},ht=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 U({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"}),t.push({package:"chalk",version:"^4"}),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:"^3.26"}),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.22"}),a.push({package:"@babel/preset-react",version:"7.22"})),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"})},wt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const s={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o,ts:Date.now()},i=a.templateDir,r=X.resolve(a.projectDir,"src/app");G.existsSync(r)||G.mkdirSync(r,{recursive:!0}),await H({pattern:["index.html.njk","index.js.njk"],dir:X.resolve(i,"src/app"),outDir:r,context:s})},_t=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:s})=>{await s({message:"Creating package.json."});const i=a.find((e=>"react"===e.package)),r=a.find((e=>"react-dom"===e.package));i&&!r?a.push({package:"react-dom",version:i.version}):i&&r&&(r.version=i.version),i&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const n=[];!0===e.doc.features.app.enabled&&n.push(Z.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&n.push(Z.resolve(t.projectDir,"src/cli/index.js"));for await(const t of n){const s=t;if(!W.existsSync(s))throw new Error(`App file not found: ${s}`);const i=await Q({file:s,recursive:!0}),r=!0===e.doc.features.all_parsed_imports?i.all:i.required;for await(const e of r){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const t=(await V({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=Y.compile(W.readFileSync(Z.resolve(l,"package.json.njk"),"utf8"),Y.configure(l)).render(c),d=t.projectDir,m=Z.resolve(d,"package.json");W.writeFileSync(m,p,"utf8")},vt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const s={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o},i=a.templateDir,r=te.resolve(a.projectDir,"src/cli");ee.existsSync(r)||ee.mkdirSync(r,{recursive:!0}),await ae({pattern:["index.js.njk"],dir:te.resolve(i,"src/cli"),outDir:r,context:s})},jt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},i=se.resolve(a.projectDir,"src","default/index.js");if(!oe.existsSync(i))throw new Error(`Entry file not found: ${i}`);const r=(await re({file:i,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),n=e.doc.features.rollup_output,c=Object.keys(n);for(let e=0;e<c.length;e++){const t=n[c[e]];if(!0===t.browser&&r.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(r.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<r.length;e++){const a=r[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(r)}}const l=a.templateCommonDir,p=ie.compile(oe.readFileSync(se.resolve(l,"rollup.config.js.njk"),"utf8"),ie.configure(l)).render(s),d=a.projectDir,m=se.resolve(d,"rollup.config.js");oe.writeFileSync(m,p,"utf8")},xt=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const s={},i=e.doc.inputs||[],r=[];i.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&r.push(e);const t={};e.type&&(t.type=e.type),e.default&&(t.default=e.default),e.choices&&(t.choices=e.choices),(e.describe||e.description)&&(t.describe=e.describe||e.description),e.alias&&(t.alias=e.alias),!0===e.required&&(t.required=!0),!0===e.hidden&&(t.hidden=!0),!0===e.array&&(t.array=!0),!0===e.normalize&&(t.normalize=!0),e.nargs&&(t.nargs=e.nargs),s[e.name]=t}));const n={options:s,imports:r,atom:e},c=a.templateDir,l=le.compile(ne.readFileSync(ce.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),o).render(n),p=a.projectDir,d=ce.resolve(p,"src/default/to.yargs.js");ne.writeFileSync(d,l,"utf8")},kt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},i=a.templateCommonDir,r=me.compile(pe.readFileSync(de.resolve(i,".gitignore.njk"),"utf8"),me.configure(i)).render(s),n=a.projectDir,c=de.resolve(n,".gitignore");pe.writeFileSync(c,r,"utf8")},Dt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const s={atom:e,packageDependencies:o},i=a.templateCommonDir,r=ye.compile(ue.readFileSync(ge.resolve(i,"tsconfig.json.njk"),"utf8"),ye.configure(i)).render(s),n=a.projectDir,c=ge.resolve(n,"tsconfig.json");ue.writeFileSync(c,r,"utf8")},St=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const s="readme.md",i=`Creating ${s}`;if(await a({message:i}),t.project?.readme){const e={content:t.project.readme.doc.content},a=t.templateCommonDir,o=fe.compile(be.readFileSync(he.resolve(a,`${s}.njk`),"utf8"),fe.configure(a)).render(e),i=t.projectDir,r=he.resolve(i,`${s}`);be.writeFileSync(r,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:i,...r}=a.doc,n={content:i},c=t.templateCommonDir,l=fe.compile(be.readFileSync(he.resolve(c,`${s}.njk`),"utf8"),fe.configure(c)).render(n),p=t.projectDir,d=he.resolve(p,`${s}`);be.writeFileSync(d,l,"utf8")}},It=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});if(0!==we.exec("prettier --write src/**/* bin/* *.{js,json,yaml,html} --no-error-on-unmatched-pattern",{cwd:a}).code)throw new Error("Couldnt format files.")},Pt=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Creating .d.ts"});if(0!==_e.exec("tsc",{cwd:a}).code)throw new Error("Couldnt create .d.ts files.")},Ct=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==ve.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},$t=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==je.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},Et=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:s,setInProgress:i}=e;if(!0===s.enabled)if("lib"===s.name)await ot({...e});else if("red"===s.name)await at({...e});else if("npm"===s.name)await tt({...e});else if("gcs"===s.name)await et({...e});else if("gitlab"===s.name)await Ve({...e});else if("macos-app"===s.name)await it({...e});else if("ios-app"===s.name)await st({...e});else if("electron"===s.name)await rt({...e});else if("webos"===s.name)await nt({...e});else{let e;if("nextjs"===s.name&&(e=ct),!e)return;await e({atom:t,target:s,onProgress:i,projectDir:o.projectDir,dependencies:a})}},{Atom:At}=b,Ft=F,Tt=t,qt=v,zt=T,Ot=q;var Rt=class{#e;#t;#a;#o;#s;#i;#r;#n;#c;#l;#p;#d;#m;#u;#g;#y;#f;constructor(e){this.#e=new ft,this.#t=e,this.#i=[],this.#r=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#f={packageDependencies:this.#i,packageDevDependencies:this.#r,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:At,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 gt(),this.#c=this.#t.buildId||yt(24),this.#f.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.#y=["all","deploy"].includes(this.#m),this.#p=this.#t.protocol,this.#l="BUILD:"+this.#c,this.#d=(await Tt({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 bt(this.#f),await ht(this.#f),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#n=await this.#e.init({config:this.#d}),this.#f.atomAccessToken=this.#n)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await At.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.#f.atom=this.#a}async initLibraryDir(){const e=this.#t.projectDir;let t;const a=["node_modules"];if(lt.existsSync(e)&<.readdirSync(e).forEach((o=>{a.includes(o)||(t=mt.rm("-rf",pt.join(e,o)))})),t=mt.exec(`mkdir -p ${e}`),0!==t.code)throw new Error("Couldnt create workflow dir.");if(t=mt.exec(`mkdir ${e}/src`),0!==t.code)throw new Error("Couldnt create library/src dir.");if(t=mt.exec(`mkdir ${e}/src/default`),0!==t.code)throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=ut.configure(e,{watch:!1,dev:!0}),this.#f.njEnv=this.#o}async initLibs(){const e=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id}];this.#s=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#i})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],s=await this.findAtomLibrary({url:o.name});o.atom=s;const i=s.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));i?.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=Ft({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 At.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await At.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await At.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=pt.resolve(this.#t.projectSrcDir,"index.js"),a=await qt({file:t,recursive:!0}),o=e.doc.dependencies,s=!0===this.#a.doc.features.all_parsed_imports?a.all:a.required;for await(const e of s){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await zt({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=pt.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=pt.relative(`${this.#t.projectDir}/src/default/`,e);if(!lt.existsSync(e)){lt.mkdirSync(pt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",lt.writeFileSync(e,t,"utf8")}a.relativePath=t,this.#a.typesDir=`./types/${pt.basename(o)}/src`}else{const e=`${o}/src/libs/${a.id}.js`,t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;lt.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#s.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},t=this.#t.templateDir,a=ut.compile(lt.readFileSync(pt.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=pt.resolve(o,"src/default/index.js");lt.writeFileSync(s,a,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:a,...o}=this.#a.doc,s={content:dt.dump(o)},i=this.#t.templateDir,r=ut.compile(lt.readFileSync(pt.resolve(i,`${e}.njk`),"utf8"),this.#o).render(s),n=this.#t.projectDir,c=pt.resolve(n,`${e}`);lt.writeFileSync(c,r,"utf8")}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&await a.save()}}else if(this.#a.id){const e=await At.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 At.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 Et({...this.#f,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await At.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await At.update(o,{id:o.id})):o=await At.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(Ot.blue(e)),await this._cache_set(this.#l,{status:"IN_PROGRESS",message:e})}async build(){try{this.#u&&(await this.createAtomLibFiles({libs:this.#s}),await this.createEngine(),await this.createProjectYaml(),await St(this.#f),await Dt(this.#f),await kt(this.#f),await xt(this.#f),await vt(this.#f),await wt(this.#f),await jt(this.#f),await _t(this.#f),await It(this.#f),await Pt(this.#f),this.#g&&(await Ct(this.#f),await $t(this.#f),this.#y&&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 Nt=p,Lt=d;var Mt=function({baseDir:e=__dirname}){let t=e;for(;t!==Lt.parse(t).root;){const e=Lt.join(t,"node_modules");if(Nt.existsSync(e))return e;t=Lt.dirname(t)}return null};const Bt=process.cwd(),{spawn:Jt}=e;t({name:["redis"],dir:Bt,optional:!0});const Kt=a,Ut=o,{hideBin:Gt}=s,Xt=i,Ht=r,Yt=n,Wt=c,Zt=l,Qt=Rt,Vt=Mt({baseDir:__dirname});async function ea(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Kt.resolve(Vt,"./@flownet/template-node-library/default"),templateCommonDir:Kt.resolve(Vt,"./@flownet/template-node-common/default"),projectDir:Kt.resolve(Bt,`./.output/${e.id}`),coreDir:Kt.resolve(Vt,"./@flownet/template-node-library/core")};{const t=await async function(){const e=Kt.resolve(Bt,"node.yaml");if(!Xt.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Xt.readFileSync(e,"utf8"),{parsed:a}=await Wt({content:t}),o=Kt.dirname(e),s={libraryAtom:{doc:{...a,"content-type":"javascript",language:"js"},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},i=Kt.resolve(o,"node.devops.yaml");if(Xt.existsSync(i)){const e=Xt.readFileSync(i,"utf8"),t=Ht.parse(e);s.devops={filePath:i,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Xt.writeFileSync(s.devops.filePath,Ht.stringify(s.devops.doc))}}}const r=Kt.resolve(o,"readme.md");if(Xt.existsSync(r)){const e=Xt.readFileSync(r,"utf8");s.readme={filePath:r,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return s}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Kt.resolve(Vt,"./@flownet/template-node-library/default"),templateCommonDir:Kt.resolve(Vt,"./@flownet/template-node-common/default"),coreDir:Kt.resolve(Vt,"./@flownet/template-node-library/core"),projectDir:Kt.resolve(t.projectDir,"./.workspace"),projectSrcDir:Kt.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${Vt}/.bin:${process.env.PATH}`,Ut(Gt(process.argv)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0})),(async e=>{try{const t=Kt.resolve(Vt,"@flownet/template-node-library/project"),a=Kt.resolve(Bt,e.name);Xt.existsSync(a)||Xt.mkdirSync(a),await Zt({dir:t,outDir:a,context:e});let o=Yt.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Yt.which("git")&&(o=Yt.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization 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 ea(e),a=new Qt(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 ea({...e,mode:"all"}),a=new Qt(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 ea({...e,mode:"file"}),a=new Qt(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 ea(e),{projectDir:a}=t,o=`npm ${process.argv.slice(3).join(" ")}`;Yt.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 ea(e),{projectDir:a}=t,o=`node ${process.argv.slice(3).join(" ")}`;Yt.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 ea(e),{projectDir:a}=t,o=`npm run serve -- ${process.argv.slice(3).join(" ")}`;Yt.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 ea(e),{projectDir:a}=t,o=`npm run watch -- ${process.argv.slice(3).join(" ")}`;Yt.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 ea(e),{projectDir:a}=t,o=`npm run app -- ${process.argv.slice(3).join(" ")}`;Yt.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 ea(e),{projectDir:a}=t,o=process.argv.slice(3);Jt("npm",["run","cli","--",...o],{cwd:a,stdio:"inherit"}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}})).demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e,t,i=require("@fnet/config"),s=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),d=require("path"),c=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.
|
|
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"),d=require("path"),c=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.26.0",files:["dist"],scripts:{start:"node src/index.js",build:"rollup --config --bundleConfigAsCjs",deploy:"npm install && npm run build && npm publish --access public",watch:"rollup --config --watch --sourcemap --bundleConfigAsCjs --environment DEVELOPMENT"},repository:{type:"git",url:"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-electron":"^0.2.1","@flownet/lib-to-gitlab":"^0.1.21","@flownet/lib-to-ios-app":"^0.2.5","@flownet/lib-to-macos-app":"^0.2.3","@flownet/lib-to-nextjs":"^0.1.12","@flownet/lib-to-webos":"^0.2.8","@flownet/lib-upload-files-to-gcs":"^0.2.2","@flownet/template-node-common":"^0.19.2","@flownet/template-node-library":"^0.15.2","@flownet/template-node-workflow":"^0.15.1","@fnet/config":"^0.2.6","@fnet/expression":"^0.1.16","@fnet/shell":"^0.1.12","@fnet/yaml":"^0.1.10","@node-red/util":"^3.1.0",axios:"^1.5.0",chalk:"^4.1.2",cors:"^2.8.5",express:"^4.18.2","express-session":"^1.17.3","get-value":"^3.0.1",helmet:"^5.1.1",isobject:"^4.0.0","js-yaml":"^4.1.0","keycloak-connect":"^22.0.3","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:"^3.29.1"}};const g=process.cwd(),v=i;(async function(){await v({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,j=function(){if(b)return f;b=1;const e=n,t=d,i=c,{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=d,i=c,{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 j({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.
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist"
|
|
6
6
|
],
|
|
@@ -31,11 +31,11 @@
|
|
|
31
31
|
"@flownet/lib-to-nextjs": "^0.1.12",
|
|
32
32
|
"@flownet/lib-to-webos": "^0.2.8",
|
|
33
33
|
"@flownet/lib-upload-files-to-gcs": "^0.2.2",
|
|
34
|
-
"@flownet/template-node-common": "^0.19.
|
|
34
|
+
"@flownet/template-node-common": "^0.19.2",
|
|
35
35
|
"@flownet/template-node-library": "^0.15.2",
|
|
36
36
|
"@flownet/template-node-workflow": "^0.15.1",
|
|
37
37
|
"@fnet/config": "^0.2.6",
|
|
38
|
-
"@fnet/expression": "^0.1.
|
|
38
|
+
"@fnet/expression": "^0.1.16",
|
|
39
39
|
"@fnet/shell": "^0.1.12",
|
|
40
40
|
"@fnet/yaml": "^0.1.10",
|
|
41
41
|
"@node-red/util": "^3.1.0",
|