@fnet/cli 0.18.1 → 0.18.4
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/builder/wf-cli.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +7 -6
- package/readme.md +1 -1
package/dist/builder/lib-cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("@flownet/lib-load-fnet-config"),t=require("path"),a=require("yargs/yargs"),o=require("yargs/helpers"),s=require("fs"),i=require("yaml"),n=require("shelljs"),r=require("@fnet/yaml"),c=require("@flownet/lib-render-templates-dir"),l=require("node:fs"),p=require("node:path"),d=require("js-yaml"),m=require("nunjucks"),u=require("redis"),g=require("@flownet/lib-is-redis-online"),y=require("nanoid"),f=require("@flownet/lib-atom-api-js"),b=require("axios"),w=require("qs"),h=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),_=require("@flownet/lib-list-npm-versions"),v=require("@fnet/shell"),x=require("semver"),k=require("node:os"),D=require("@node-red/util"),S=require("@flownet/lib-to-ios-app"),$=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),P=require("@flownet/lib-to-webos"),C=require("@flownet/lib-to-nextjs"),E=require("lodash.clonedeep"),A=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-pick-npm-versions"),T=require("chalk");const q=u,O=g;const{Api:R}=f,N=b.default,L=w;const M=h,B=s,J=t,K=j;const U=_;const z=l,G=p,X=c;const H=m,Y=l,W=p,Z=j,Q=_;const V=l,ee=p,te=c;const ae=l,oe=p,se=m,ie=j;const ne=l,re=p,ce=m;const le=l,pe=p,de=m;const me=l,ue=p,ge=m;const ye=m,fe=l,be=p;const we=n;const he=n;const je=n;const _e=n;const ve=v,xe=e;const ke=l,De=p,Se=x,$e=v,Ie=e;const Pe=l,Ce=p,Ee=x,Ae=n,Fe=e;const Te=l,qe=p,Oe=k,Re=m,Ne=D,Le=e;const Me=s,Be=t,Je=e;const Ke=S;const Ue=$;const ze=I;const Ge=P;const Xe=C,He=E,Ye=h,We=x,Ze=p;const Qe=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:s})=>{await e({message:"Deploying it as gitlab project."});const i=t.projectDir;let n="fnet-to-gitlab";const r=o.params.config||"gitlab",c=await xe({name:r,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;n+=` --projectGroupId=${l.projectGroupId}`,n+=` --projectPath='${i}'`,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 ve({cmd:n}),a.isDirty=!0)},Ve=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:s})=>{await e({message:"Deploying it as gcs package."});const i=t.projectDir,n=De.resolve(i,"package.json"),r=ke.readFileSync(n),c=JSON.parse(r);c.name=o.params.name,c.version=Se.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,ke.writeFileSync(n,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Ie({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='${De.resolve(De.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 $e({cmd:d}),ke.writeFileSync(n,r),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=c.version,await s({target:o,packageJSON:c}))},et=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s})=>{await t({message:"Deploying it as npm package."});const i=a.projectDir,n=Ce.resolve(i,"package.json"),r=Pe.readFileSync(n),c=JSON.parse(r);c.name=s.params.name,c.version=Ee.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/cjs/index.js",[e.doc.name]:"dist/cli/cjs/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Pe.writeFileSync(n,JSON.stringify(c,null,"\t"));const p=(await Fe({name:a.npmConfig||"npm",dir:a.projectDir}))?.data;if(Pe.writeFileSync(Ce.resolve(i,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==Ae.exec("npm publish --access public",{cwd:i}).code)throw new Error("Couldnt publish to npm");Pe.writeFileSync(n,r),o.isDirty=!0,s.params.version=c.version},tt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i,packageDependencies:n,njEnv:r})=>{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:n,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:Te.readFileSync(qe.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:n,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:Te.readFileSync(qe.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:n,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:Te.readFileSync(qe.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(Te.readFileSync(qe.resolve(l,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(Te.writeFileSync(qe.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}},at=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:s,deploymentProject:i,deploymentProjectTarget:n})=>{await a({message:"Deploying it as workflow lib."});const r=(await Je({name:"atom",dir:o.projectDir}))?.data;let c,l,p,d=n.deploy.name.split("/");if(1===d.length)l=r.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:r.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===n.dryRun)return;if(i.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: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})},ot=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i,registerToPackageManager:n})=>{await t({message:"Deploying it as ios app package."});const r=a.projectDir;if(!0===s.dryRun)return;const c={projectDir:r,dest:r,atom:e,params:s.params};await Ke(c),o.isDirty=!0},st=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i})=>{await t({message:"Deploying it as macos app package."});const n=a.projectDir;if(!0===s.dryRun)return;const r={projectDir:n,dest:n,atom:e,params:s.params};await Ue(r),o.isDirty=!0},it=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i})=>{await t({message:"Deploying it as electron package."});const n=a.projectDir;if(!0===s.dryRun)return;const r={src:n,dest:n,atom:e,params:s.params};await ze(r),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 n={src:i,dest:i,atom:e,params:s.params};await Ge(n),o.isDirty=!0},rt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s})=>{a&&await a({message:"Deploying it as nextjs package."});t.params=Ye({name:"nextjs-app",version:"0.1.0"},t.params);const i=We.inc(t.params.version,"patch");t.params.version=i;const n=He(t);n.params.dependencies=He(s);const r={atom:e,target:n.params,projectDir:o,renderDir:Ze.resolve(o,"nextjs")};return{deployer:await Xe(r)}};const ct=l,lt=p,pt=d,dt=n,mt=m,ut=async()=>{if(!await O({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=q.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:gt}=y,yt=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)}))}))}},ft=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 n=!0===a.app_has_entry||!0===a.src_uses_jsx,r=!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:r}:a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:r,...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||"cjs",a.cli.folder=a.cli.folder||a.cli.folder||"cjs";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},cjsx:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!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},esmx:{format:"esm",browser:!0,babel:!0,context:a.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0},iife:{format:"iife",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0},umd:{format:"umd",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1}},l={};!0===a.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!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"},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"});const p={server:".",startPath:`${a.app.dir}/index.html`,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.rollup=a.rollup||{},a.rollup_output=M(c,a.rollup_output||a.rollup?.output||{});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),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.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},bt=async({atom:e,packageDependencies:t,packageDevDependencies:a})=>{if("workflow"===e.type&&(t.push({package:"eventemitter3",version:"^4.0"}),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.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,n=G.resolve(a.projectDir,"src/app");z.existsSync(n)||z.mkdirSync(n,{recursive:!0}),await X({pattern:["index.html.njk","index.js.njk"],dir:G.resolve(i,"src/app"),outDir:n,context:s})},ht=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)),n=a.find((e=>"react-dom"===e.package));i&&!n?a.push({package:"react-dom",version:i.version}):i&&n&&(n.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 r=[];!0===e.doc.features.app.enabled&&r.push(W.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&r.push(W.resolve(t.projectDir,"src/cli/index.js"));for await(const t of r){const s=t;if(!Y.existsSync(s))throw new Error(`App file not found: ${s}`);const i=await Z({file:s,recursive:!0}),n=!0===e.doc.features.all_parsed_imports?i.all:i.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 Q({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=H.compile(Y.readFileSync(W.resolve(l,"package.json.njk"),"utf8"),H.configure(l)).render(c),d=t.projectDir,m=W.resolve(d,"package.json");Y.writeFileSync(m,p,"utf8")},jt=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,n=ee.resolve(a.projectDir,"src/cli");V.existsSync(n)||V.mkdirSync(n,{recursive:!0}),await te({pattern:["index.js.njk"],dir:ee.resolve(i,"src/cli"),outDir:n,context:s})},_t=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},i=oe.resolve(a.projectDir,"src","default/index.js");if(!ae.existsSync(i))throw new Error(`Entry file not found: ${i}`);const n=(await ie({file:i,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&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=se.compile(ae.readFileSync(oe.resolve(l,"rollup.config.js.njk"),"utf8"),se.configure(l)).render(s),d=a.projectDir,m=oe.resolve(d,"rollup.config.js");ae.writeFileSync(m,p,"utf8")},vt=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||[],n=[];i.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),s[e.name]=t}));const r={options:s,imports:n,atom:e},c=a.templateDir,l=ce.compile(ne.readFileSync(re.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),o).render(r),p=a.projectDir,d=re.resolve(p,"src/default/to.yargs.js");ne.writeFileSync(d,l,"utf8")},xt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},i=a.templateCommonDir,n=de.compile(le.readFileSync(pe.resolve(i,".gitignore.njk"),"utf8"),de.configure(i)).render(s),r=a.projectDir,c=pe.resolve(r,".gitignore");le.writeFileSync(c,n,"utf8")},kt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const s={atom:e,packageDependencies:o},i=a.templateCommonDir,n=ge.compile(me.readFileSync(ue.resolve(i,"tsconfig.json.njk"),"utf8"),ge.configure(i)).render(s),r=a.projectDir,c=ue.resolve(r,"tsconfig.json");me.writeFileSync(c,n,"utf8")},Dt=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=ye.compile(fe.readFileSync(be.resolve(a,`${s}.njk`),"utf8"),ye.configure(a)).render(e),i=t.projectDir,n=be.resolve(i,`${s}`);fe.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:i,...n}=a.doc,r={content:i},c=t.templateCommonDir,l=ye.compile(fe.readFileSync(be.resolve(c,`${s}.njk`),"utf8"),ye.configure(c)).render(r),p=t.projectDir,d=be.resolve(p,`${s}`);fe.writeFileSync(d,l,"utf8")}},St=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.")},$t=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Creating .d.ts"});if(0!==he.exec("tsc",{cwd:a}).code)throw new Error("Couldnt create .d.ts files.")},It=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==je.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},Pt=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==_e.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},Ct=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:s,setInProgress:i}=e;if(!0===s.enabled)if("lib"===s.name)await at({...e});else if("red"===s.name)await tt({...e});else if("npm"===s.name)await et({...e});else if("gcs"===s.name)await Ve({...e});else if("gitlab"===s.name)await Qe({...e});else if("macos-app"===s.name)await st({...e});else if("ios-app"===s.name)await ot({...e});else if("electron"===s.name)await it({...e});else if("webos"===s.name)await nt({...e});else{let e;if("nextjs"===s.name&&(e=rt),!e)return;await e({atom:t,target:s,onProgress:i,projectDir:o.projectDir,dependencies:a})}},{Atom:Et}=f,At=A,Ft=e,Tt=j,qt=F,Ot=T;var Rt=class{#e;#t;#a;#o;#s;#i;#n;#r;#c;#l;#p;#d;#m;#u;#g;#y;#f;constructor(e){this.#e=new yt,this.#t=e,this.#i=[],this.#n=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#f={packageDependencies:this.#i,packageDevDependencies:this.#n,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Et,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 ut(),this.#c=this.#t.buildId||gt(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 Ft({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 ft(this.#f),await bt(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.#r=await this.#e.init({config:this.#d}),this.#f.atomAccessToken=this.#r)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await Et.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(ct.existsSync(e)&&ct.readdirSync(e).forEach((o=>{a.includes(o)||(t=dt.rm("-rf",lt.join(e,o)))})),t=dt.exec(`mkdir -p ${e}`),0!==t.code)throw new Error("Couldnt create workflow dir.");if(t=dt.exec(`mkdir ${e}/src`),0!==t.code)throw new Error("Couldnt create library/src dir.");if(t=dt.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=mt.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=At({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 Et.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await Et.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Et.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=lt.resolve(this.#t.projectSrcDir,"index.js"),a=await Tt({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 qt({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=lt.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=lt.relative(`${this.#t.projectDir}/src/default/`,e);if(!ct.existsSync(e)){ct.mkdirSync(lt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",ct.writeFileSync(e,t,"utf8")}a.relativePath=t,this.#a.typesDir=`./types/${lt.basename(o)}/src`}else{const e=`${o}/src/libs/${a.id}.js`,t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;ct.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=mt.compile(ct.readFileSync(lt.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=lt.resolve(o,"src/default/index.js");ct.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:pt.dump(o)},i=this.#t.templateDir,n=mt.compile(ct.readFileSync(lt.resolve(i,`${e}.njk`),"utf8"),this.#o).render(s),r=this.#t.projectDir,c=lt.resolve(r,`${e}`);ct.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 Et.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 Et.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 Ct({...this.#f,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await Et.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await Et.update(o,{id:o.id})):o=await Et.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 Dt(this.#f),await kt(this.#f),await xt(this.#f),await vt(this.#f),await jt(this.#f),await wt(this.#f),await _t(this.#f),await ht(this.#f),await St(this.#f),await $t(this.#f),this.#g&&(await It(this.#f),await Pt(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=l,Lt=p;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();e({name:["redis"],dir:Bt,optional:!0});const Jt=t,Kt=a,{hideBin:Ut}=o,zt=s,Gt=i,Xt=n,Ht=r,Yt=c,Wt=Rt,Zt=Mt({baseDir:__dirname});async function Qt(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Jt.resolve(Zt,"./@flownet/template-node-library/default"),templateCommonDir:Jt.resolve(Zt,"./@flownet/template-node-common/default"),projectDir:Jt.resolve(Bt,`./.output/${e.id}`),coreDir:Jt.resolve(Zt,"./@flownet/template-node-library/core")};{const t=await async function(){const e=Jt.resolve(Bt,"node.yaml");if(!zt.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=zt.readFileSync(e,"utf8"),{parsed:a}=await Ht({content:t}),o=Jt.dirname(e),s={libraryAtom:{doc:{...a,"content-type":"javascript",language:"js"},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},i=Jt.resolve(o,"node.devops.yaml");if(zt.existsSync(i)){const e=zt.readFileSync(i,"utf8"),t=Gt.parse(e);s.devops={filePath:i,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{zt.writeFileSync(s.devops.filePath,Gt.stringify(s.devops.doc))}}}const n=Jt.resolve(o,"fnet.readme.md");if(zt.existsSync(n)){const e=zt.readFileSync(n,"utf8");s.readme={filePath:n,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return s}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Jt.resolve(Zt,"./@flownet/template-node-library/default"),templateCommonDir:Jt.resolve(Zt,"./@flownet/template-node-common/default"),coreDir:Jt.resolve(Zt,"./@flownet/template-node-library/core"),projectDir:Jt.resolve(t.projectDir,"./.workspace"),projectSrcDir:Jt.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${Zt}/.bin:${process.env.PATH}`,Kt(Ut(process.argv)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0})),(async e=>{try{const t=Jt.resolve(Zt,"@flownet/template-node-library/project"),a=Jt.resolve(Bt,e.name);zt.existsSync(a)||zt.mkdirSync(a),await Yt({dir:t,outDir:a,context:e});let o=Xt.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Xt.which("git")&&(o=Xt.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 Qt(e),a=new Wt(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 Qt({...e,mode:"all"}),a=new Wt(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 Qt({...e,mode:"file"}),a=new Wt(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.option("id",{type:"string"})),(async e=>{try{const t=await Qt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm ${o.join(" ")} ${s}`;Xt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Qt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`node ${o.join(" ")} ${s}`;Xt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Qt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run serve ${o.join(" ")} ${s}`;Xt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Qt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run watch ${o.join(" ")} ${s}`;Xt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run watch - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Qt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run app ${o.join(" ")} ${s}`;Xt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Qt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run cli ${o.join(" ")} ${s}`;Xt.exec(i,{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={};
|
|
2
|
+
"use strict";var e=require("@fnet/config"),t=require("path"),a=require("yargs/yargs"),o=require("yargs/helpers"),s=require("fs"),i=require("yaml"),n=require("shelljs"),r=require("@fnet/yaml"),c=require("@flownet/lib-render-templates-dir"),l=require("node:fs"),p=require("node:path"),d=require("js-yaml"),m=require("nunjucks"),u=require("redis"),g=require("@flownet/lib-is-redis-online"),y=require("nanoid"),f=require("@flownet/lib-atom-api-js"),b=require("axios"),w=require("qs"),h=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),_=require("@flownet/lib-list-npm-versions"),v=require("@fnet/shell"),x=require("semver"),k=require("node:os"),D=require("@node-red/util"),S=require("@flownet/lib-to-ios-app"),$=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),P=require("@flownet/lib-to-webos"),C=require("@flownet/lib-to-nextjs"),E=require("lodash.clonedeep"),A=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-pick-npm-versions"),T=require("chalk");const q=u,O=g;const{Api:R}=f,N=b.default,L=w;const M=h,B=s,J=t,K=j;const U=_;const z=l,G=p,X=c;const H=m,Y=l,W=p,Z=j,Q=_;const V=l,ee=p,te=c;const ae=l,oe=p,se=m,ie=j;const ne=l,re=p,ce=m;const le=l,pe=p,de=m;const me=l,ue=p,ge=m;const ye=m,fe=l,be=p;const we=n;const he=n;const je=n;const _e=n;const ve=v,xe=e;const ke=l,De=p,Se=x,$e=v,Ie=e;const Pe=l,Ce=p,Ee=x,Ae=n,Fe=e;const Te=l,qe=p,Oe=k,Re=m,Ne=D,Le=e;const Me=s,Be=t,Je=e;const Ke=S;const Ue=$;const ze=I;const Ge=P;const Xe=C,He=E,Ye=h,We=x,Ze=p;const Qe=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:s})=>{await e({message:"Deploying it as gitlab project."});const i=t.projectDir;let n="fnet-to-gitlab";const r=o.params.config||"gitlab",c=await xe({name:r,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;n+=` --projectGroupId=${l.projectGroupId}`,n+=` --projectPath='${i}'`,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 ve({cmd:n}),a.isDirty=!0)},Ve=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:s})=>{await e({message:"Deploying it as gcs package."});const i=t.projectDir,n=De.resolve(i,"package.json"),r=ke.readFileSync(n),c=JSON.parse(r);c.name=o.params.name,c.version=Se.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,ke.writeFileSync(n,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Ie({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='${De.resolve(De.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 $e({cmd:d}),ke.writeFileSync(n,r),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=c.version,await s({target:o,packageJSON:c}))},et=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s})=>{await t({message:"Deploying it as npm package."});const i=a.projectDir,n=Ce.resolve(i,"package.json"),r=Pe.readFileSync(n),c=JSON.parse(r);c.name=s.params.name,c.version=Ee.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/cjs/index.js",[e.doc.name]:"dist/cli/cjs/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Pe.writeFileSync(n,JSON.stringify(c,null,"\t"));const p=(await Fe({name:a.npmConfig||"npm",dir:a.projectDir}))?.data;if(Pe.writeFileSync(Ce.resolve(i,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==Ae.exec("npm publish --access public",{cwd:i}).code)throw new Error("Couldnt publish to npm");Pe.writeFileSync(n,r),o.isDirty=!0,s.params.version=c.version},tt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i,packageDependencies:n,njEnv:r})=>{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:n,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:Te.readFileSync(qe.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:n,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:Te.readFileSync(qe.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:n,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:Te.readFileSync(qe.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(Te.readFileSync(qe.resolve(l,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(Te.writeFileSync(qe.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}},at=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:s,deploymentProject:i,deploymentProjectTarget:n})=>{await a({message:"Deploying it as workflow lib."});const r=(await Je({name:"atom",dir:o.projectDir}))?.data;let c,l,p,d=n.deploy.name.split("/");if(1===d.length)l=r.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:r.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===n.dryRun)return;if(i.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: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})},ot=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i,registerToPackageManager:n})=>{await t({message:"Deploying it as ios app package."});const r=a.projectDir;if(!0===s.dryRun)return;const c={projectDir:r,dest:r,atom:e,params:s.params};await Ke(c),o.isDirty=!0},st=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i})=>{await t({message:"Deploying it as macos app package."});const n=a.projectDir;if(!0===s.dryRun)return;const r={projectDir:n,dest:n,atom:e,params:s.params};await Ue(r),o.isDirty=!0},it=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i})=>{await t({message:"Deploying it as electron package."});const n=a.projectDir;if(!0===s.dryRun)return;const r={src:n,dest:n,atom:e,params:s.params};await ze(r),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 n={src:i,dest:i,atom:e,params:s.params};await Ge(n),o.isDirty=!0},rt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s})=>{a&&await a({message:"Deploying it as nextjs package."});t.params=Ye({name:"nextjs-app",version:"0.1.0"},t.params);const i=We.inc(t.params.version,"patch");t.params.version=i;const n=He(t);n.params.dependencies=He(s);const r={atom:e,target:n.params,projectDir:o,renderDir:Ze.resolve(o,"nextjs")};return{deployer:await Xe(r)}};const ct=l,lt=p,pt=d,dt=n,mt=m,ut=async()=>{if(!await O({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=q.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:gt}=y,yt=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)}))}))}},ft=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 n=!0===a.app_has_entry||!0===a.src_uses_jsx,r=!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:r}:a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:r,...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||"cjs",a.cli.folder=a.cli.folder||a.cli.folder||"cjs";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},cjsx:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!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},esmx:{format:"esm",browser:!0,babel:!0,context:a.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0},iife:{format:"iife",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0},umd:{format:"umd",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1}},l={};!0===a.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!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"},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"});const p={server:".",startPath:`${a.app.dir}/index.html`,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.rollup=a.rollup||{},a.rollup_output=M(c,a.rollup_output||a.rollup?.output||{});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),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.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},bt=async({atom:e,packageDependencies:t,packageDevDependencies:a})=>{if("workflow"===e.type&&(t.push({package:"eventemitter3",version:"^4.0"}),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.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,n=G.resolve(a.projectDir,"src/app");z.existsSync(n)||z.mkdirSync(n,{recursive:!0}),await X({pattern:["index.html.njk","index.js.njk"],dir:G.resolve(i,"src/app"),outDir:n,context:s})},ht=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)),n=a.find((e=>"react-dom"===e.package));i&&!n?a.push({package:"react-dom",version:i.version}):i&&n&&(n.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 r=[];!0===e.doc.features.app.enabled&&r.push(W.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&r.push(W.resolve(t.projectDir,"src/cli/index.js"));for await(const t of r){const s=t;if(!Y.existsSync(s))throw new Error(`App file not found: ${s}`);const i=await Z({file:s,recursive:!0}),n=!0===e.doc.features.all_parsed_imports?i.all:i.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 Q({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=H.compile(Y.readFileSync(W.resolve(l,"package.json.njk"),"utf8"),H.configure(l)).render(c),d=t.projectDir,m=W.resolve(d,"package.json");Y.writeFileSync(m,p,"utf8")},jt=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,n=ee.resolve(a.projectDir,"src/cli");V.existsSync(n)||V.mkdirSync(n,{recursive:!0}),await te({pattern:["index.js.njk"],dir:ee.resolve(i,"src/cli"),outDir:n,context:s})},_t=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},i=oe.resolve(a.projectDir,"src","default/index.js");if(!ae.existsSync(i))throw new Error(`Entry file not found: ${i}`);const n=(await ie({file:i,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&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=se.compile(ae.readFileSync(oe.resolve(l,"rollup.config.js.njk"),"utf8"),se.configure(l)).render(s),d=a.projectDir,m=oe.resolve(d,"rollup.config.js");ae.writeFileSync(m,p,"utf8")},vt=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||[],n=[];i.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),s[e.name]=t}));const r={options:s,imports:n,atom:e},c=a.templateDir,l=ce.compile(ne.readFileSync(re.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),o).render(r),p=a.projectDir,d=re.resolve(p,"src/default/to.yargs.js");ne.writeFileSync(d,l,"utf8")},xt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},i=a.templateCommonDir,n=de.compile(le.readFileSync(pe.resolve(i,".gitignore.njk"),"utf8"),de.configure(i)).render(s),r=a.projectDir,c=pe.resolve(r,".gitignore");le.writeFileSync(c,n,"utf8")},kt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const s={atom:e,packageDependencies:o},i=a.templateCommonDir,n=ge.compile(me.readFileSync(ue.resolve(i,"tsconfig.json.njk"),"utf8"),ge.configure(i)).render(s),r=a.projectDir,c=ue.resolve(r,"tsconfig.json");me.writeFileSync(c,n,"utf8")},Dt=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=ye.compile(fe.readFileSync(be.resolve(a,`${s}.njk`),"utf8"),ye.configure(a)).render(e),i=t.projectDir,n=be.resolve(i,`${s}`);fe.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:i,...n}=a.doc,r={content:i},c=t.templateCommonDir,l=ye.compile(fe.readFileSync(be.resolve(c,`${s}.njk`),"utf8"),ye.configure(c)).render(r),p=t.projectDir,d=be.resolve(p,`${s}`);fe.writeFileSync(d,l,"utf8")}},St=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.")},$t=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Creating .d.ts"});if(0!==he.exec("tsc",{cwd:a}).code)throw new Error("Couldnt create .d.ts files.")},It=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==je.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},Pt=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==_e.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},Ct=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:s,setInProgress:i}=e;if(!0===s.enabled)if("lib"===s.name)await at({...e});else if("red"===s.name)await tt({...e});else if("npm"===s.name)await et({...e});else if("gcs"===s.name)await Ve({...e});else if("gitlab"===s.name)await Qe({...e});else if("macos-app"===s.name)await st({...e});else if("ios-app"===s.name)await ot({...e});else if("electron"===s.name)await it({...e});else if("webos"===s.name)await nt({...e});else{let e;if("nextjs"===s.name&&(e=rt),!e)return;await e({atom:t,target:s,onProgress:i,projectDir:o.projectDir,dependencies:a})}},{Atom:Et}=f,At=A,Ft=e,Tt=j,qt=F,Ot=T;var Rt=class{#e;#t;#a;#o;#s;#i;#n;#r;#c;#l;#p;#d;#m;#u;#g;#y;#f;constructor(e){this.#e=new yt,this.#t=e,this.#i=[],this.#n=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#f={packageDependencies:this.#i,packageDevDependencies:this.#n,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Et,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 ut(),this.#c=this.#t.buildId||gt(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 Ft({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 ft(this.#f),await bt(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.#r=await this.#e.init({config:this.#d}),this.#f.atomAccessToken=this.#r)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await Et.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(ct.existsSync(e)&&ct.readdirSync(e).forEach((o=>{a.includes(o)||(t=dt.rm("-rf",lt.join(e,o)))})),t=dt.exec(`mkdir -p ${e}`),0!==t.code)throw new Error("Couldnt create workflow dir.");if(t=dt.exec(`mkdir ${e}/src`),0!==t.code)throw new Error("Couldnt create library/src dir.");if(t=dt.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=mt.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=At({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 Et.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await Et.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Et.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=lt.resolve(this.#t.projectSrcDir,"index.js"),a=await Tt({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 qt({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=lt.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=lt.relative(`${this.#t.projectDir}/src/default/`,e);if(!ct.existsSync(e)){ct.mkdirSync(lt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",ct.writeFileSync(e,t,"utf8")}a.relativePath=t,this.#a.typesDir=`./types/${lt.basename(o)}/src`}else{const e=`${o}/src/libs/${a.id}.js`,t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;ct.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=mt.compile(ct.readFileSync(lt.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=lt.resolve(o,"src/default/index.js");ct.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:pt.dump(o)},i=this.#t.templateDir,n=mt.compile(ct.readFileSync(lt.resolve(i,`${e}.njk`),"utf8"),this.#o).render(s),r=this.#t.projectDir,c=lt.resolve(r,`${e}`);ct.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 Et.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 Et.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 Ct({...this.#f,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await Et.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await Et.update(o,{id:o.id})):o=await Et.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 Dt(this.#f),await kt(this.#f),await xt(this.#f),await vt(this.#f),await jt(this.#f),await wt(this.#f),await _t(this.#f),await ht(this.#f),await St(this.#f),await $t(this.#f),this.#g&&(await It(this.#f),await Pt(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=l,Lt=p;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();e({name:["redis"],dir:Bt,optional:!0});const Jt=t,Kt=a,{hideBin:Ut}=o,zt=s,Gt=i,Xt=n,Ht=r,Yt=c,Wt=Rt,Zt=Mt({baseDir:__dirname});async function Qt(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Jt.resolve(Zt,"./@flownet/template-node-library/default"),templateCommonDir:Jt.resolve(Zt,"./@flownet/template-node-common/default"),projectDir:Jt.resolve(Bt,`./.output/${e.id}`),coreDir:Jt.resolve(Zt,"./@flownet/template-node-library/core")};{const t=await async function(){const e=Jt.resolve(Bt,"node.yaml");if(!zt.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=zt.readFileSync(e,"utf8"),{parsed:a}=await Ht({content:t}),o=Jt.dirname(e),s={libraryAtom:{doc:{...a,"content-type":"javascript",language:"js"},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},i=Jt.resolve(o,"node.devops.yaml");if(zt.existsSync(i)){const e=zt.readFileSync(i,"utf8"),t=Gt.parse(e);s.devops={filePath:i,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{zt.writeFileSync(s.devops.filePath,Gt.stringify(s.devops.doc))}}}const n=Jt.resolve(o,"readme.md");if(zt.existsSync(n)){const e=zt.readFileSync(n,"utf8");s.readme={filePath:n,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return s}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Jt.resolve(Zt,"./@flownet/template-node-library/default"),templateCommonDir:Jt.resolve(Zt,"./@flownet/template-node-common/default"),coreDir:Jt.resolve(Zt,"./@flownet/template-node-library/core"),projectDir:Jt.resolve(t.projectDir,"./.workspace"),projectSrcDir:Jt.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${Zt}/.bin:${process.env.PATH}`,Kt(Ut(process.argv)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0})),(async e=>{try{const t=Jt.resolve(Zt,"@flownet/template-node-library/project"),a=Jt.resolve(Bt,e.name);zt.existsSync(a)||zt.mkdirSync(a),await Yt({dir:t,outDir:a,context:e});let o=Xt.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Xt.which("git")&&(o=Xt.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 Qt(e),a=new Wt(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 Qt({...e,mode:"all"}),a=new Wt(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 Qt({...e,mode:"file"}),a=new Wt(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.option("id",{type:"string"})),(async e=>{try{const t=await Qt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm ${o.join(" ")} ${s}`;Xt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Qt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`node ${o.join(" ")} ${s}`;Xt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Qt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run serve ${o.join(" ")} ${s}`;Xt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Qt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run watch ${o.join(" ")} ${s}`;Xt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run watch - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Qt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run app ${o.join(" ")} ${s}`;Xt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Qt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run cli ${o.join(" ")} ${s}`;Xt.exec(i,{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/builder/wf-cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("@flownet/lib-load-fnet-config"),t=require("path"),o=require("yargs/yargs"),n=require("yargs/helpers"),i=require("fs"),a=require("yaml"),s=require("shelljs"),r=require("@fnet/yaml"),c=require("@flownet/lib-render-templates-dir"),l=require("node:fs"),p=require("node:path"),d=require("js-yaml"),m=require("nunjucks"),f=require("lodash.clonedeep"),u=require("isobject"),y=require("redis"),h=require("@flownet/lib-is-redis-online"),w=require("nanoid"),g=require("@flownet/lib-atom-api-js"),b=require("axios"),x=require("qs"),k=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),v=require("@flownet/lib-list-npm-versions"),_=require("@fnet/shell"),D=require("semver"),T=require("node:os"),P=require("@node-red/util"),S=require("@flownet/lib-to-ios-app"),$=require("@flownet/lib-to-macos-app"),C=require("@flownet/lib-to-electron"),I=require("@flownet/lib-to-webos"),E=require("@flownet/lib-to-nextjs"),N=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-bpmn-from-flow"),O=require("@fnet/expression"),A=require("chalk");const B=y,q=h;const{Api:R}=g,M=b.default,J=x;const L=k,K=i,U=t,W=j;const z=v;const G=l,X=p,Y=c;const H=m,V=l,Z=p,Q=j,ee=v;const te=l,oe=p,ne=c;const ie=l,ae=p,se=m,re=j;const ce=l,le=p,pe=m;const de=l,me=p,fe=m;const ue=l,ye=p,he=m;const we=m,ge=l,be=p;const xe=s;const ke=s;const je=s;const ve=s;const _e=_,De=e;const Te=l,Pe=p,Se=D,$e=_,Ce=e;const Ie=l,Ee=p,Ne=D,Fe=s,Oe=e;const Ae=l,Be=p,qe=T,Re=m,Me=P,Je=e;const Le=i,Ke=t,Ue=e;const We=S;const ze=$;const Ge=C;const Xe=I;const Ye=E,He=f,Ve=k,Ze=D,Qe=p;const et=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const a=t.projectDir;let s="fnet-to-gitlab";const r=n.params.config||"gitlab",c=await De({name:r,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;s+=` --projectGroupId=${l.projectGroupId}`,s+=` --projectPath='${a}'`,s+=` --projectName='${n.params.name}'`,s+=` --projectBranch='${n.params.branch||"main"}'`,s+=` --gitlabHost='${l.gitlabHost}'`,s+=` --gitlabToken='${l.gitlabToken}'`,s+=` --gitlabUsername='${l.gitlabUsername}'`,s+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==n.dryRun&&(await _e({cmd:s}),o.isDirty=!0)},tt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as gcs package."});const a=t.projectDir,s=Pe.resolve(a,"package.json"),r=Te.readFileSync(s),c=JSON.parse(r);c.name=n.params.name,c.version=Se.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,Te.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Ce({name:n.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='${Pe.resolve(Pe.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${a}'`,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===n.dryRun&&(d+=" --dryRun"),await $e({cmd:d}),Te.writeFileSync(s,r),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=c.version,await i({target:n,packageJSON:c}))},ot=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as npm package."});const a=o.projectDir,s=Ee.resolve(a,"package.json"),r=Ie.readFileSync(s),c=JSON.parse(r);c.name=i.params.name,c.version=Ne.inc(i.params.version,"patch");const l=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/cjs/index.js",[e.doc.name]:"dist/cli/cjs/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Ie.writeFileSync(s,JSON.stringify(c,null,"\t"));const p=(await Oe({name:o.npmConfig||"npm",dir:o.projectDir}))?.data;if(Ie.writeFileSync(Ee.resolve(a,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==Fe.exec("npm publish --access public",{cwd:a}).code)throw new Error("Couldnt publish to npm");Ie.writeFileSync(s,r),n.isDirty=!0,i.params.version=c.version},nt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a,packageDependencies:s,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=o.projectDir,l=o.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Me.util.generateId(),label:`${p}/${e.id?e.id:qe.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Me.util.generateId(),name:e.doc.name,initialize:{content:Ae.readFileSync(Be.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Me.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Me.util.generateId()}}};else if("cronjob"===i.deploy.template){let t=i.params?.schedules?cloneDeep(i.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Me.util.generateId(),label:`${p}/${e.id?e.id:qe.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Me.util.generateId(),name:e.doc.name,initialize:{content:Ae.readFileSync(Be.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Me.util.generateId(),schedules:t},debug:{id:Me.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Me.util.generateId(),label:`${p}/${e.id?e.id:qe.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Me.util.generateId(),name:e.doc.name,initialize:{content:Ae.readFileSync(Be.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Me.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Me.util.generateId()},debug:{id:Me.util.generateId()}}}}let m=Re.compile(Ae.readFileSync(Be.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(Ae.writeFileSync(Be.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===i.dryRun)return;n.isDirty=!0;const f=(await Je({name:o.redConfig||"red",dir:o.projectDir}))?.data,u=i.deploy.url||f.env.RED_URL,y={};if(!1!==i.deploy.auth&&(y.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:y}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:m,headers:y});else{const e=await axios({method:"POST",url:`${u}/flow`,data:m,headers:y});i.deploy.id=e.data.id}},it=async({atom:e,Atom:t,setInProgress:o,context:n,packageDependencies:i,deploymentProject:a,deploymentProjectTarget:s})=>{await o({message:"Deploying it as workflow lib."});const r=(await Ue({name:"atom",dir:n.projectDir}))?.data;let c,l,p,d=s.deploy.name.split("/");if(1===d.length)l=r.env.ATOM_LIBRARIES_ID,p=s.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:r.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===s.dryRun)return;if(a.isDirty=!0,s.deploy.id){if(c=await t.get({id:s.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;s.deploy.id=c.id}const m=n.projectDir;c.doc.contents=[{content:Le.readFileSync(Ke.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Le.readFileSync(Ke.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Le.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=i,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},at=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a,registerToPackageManager:s})=>{await t({message:"Deploying it as ios app package."});const r=o.projectDir;if(!0===i.dryRun)return;const c={projectDir:r,dest:r,atom:e,params:i.params};await We(c),n.isDirty=!0},st=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a})=>{await t({message:"Deploying it as macos app package."});const s=o.projectDir;if(!0===i.dryRun)return;const r={projectDir:s,dest:s,atom:e,params:i.params};await ze(r),n.isDirty=!0},rt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a})=>{await t({message:"Deploying it as electron package."});const s=o.projectDir;if(!0===i.dryRun)return;const r={src:s,dest:s,atom:e,params:i.params};await Ge(r),n.isDirty=!0},ct=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as webos package."});const a=o.projectDir;if(!0===i.dryRun)return;const s={src:a,dest:a,atom:e,params:i.params};await Xe(s),n.isDirty=!0},lt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as nextjs package."});t.params=Ve({name:"nextjs-app",version:"0.1.0"},t.params);const a=Ze.inc(t.params.version,"patch");t.params.version=a;const s=He(t);s.params.dependencies=He(i);const r={atom:e,target:s.params,projectDir:n,renderDir:Qe.resolve(n,"nextjs")};return{deployer:await Ye(r)}};const pt=l,dt=p,mt=d,ft=s,ut=m,yt=f,ht=u,wt=async()=>{if(!await q({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=B.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:gt}=w,bt=class{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(R.set_api_url(e.data.url),t)return R.set_req_token(t),void o(t);M({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:J.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{R.set_req_token(e.data.access_token),o(e.data.access_token)})).catch((e=>{R.set_req_token(),n(e)}))}))}},xt=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const o=e.doc.features;o.hasOwnProperty("all_parsed_imports")||(o.all_parsed_imports=!0);const n=U.resolve(t.project.projectDir),i=U.resolve(n,"./app/index.js");if(K.existsSync(i)){let e=await W({file:i,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.app_uses_jsx=t,o.app_has_entry=!0,e=await W({file:i}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.app_entry_uses_jsx=t}const a=U.resolve(n,"./cli/index.js");if(K.existsSync(a)){let e=await W({file:a,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.cli_uses_jsx=t,o.cli_has_entry=!0,e=await W({file:a}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.cli_entry_uses_jsx=t}if("workflow.lib"===e.type){const e=U.resolve(n,"./src/index.js");if(K.existsSync(e)){let t=await W({file:e,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.src_uses_jsx=n,o.src_has_entry=!0,t=await W({file:e}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.src_entry_uses_jsx=n}}const s=!0===o.app_has_entry||!0===o.src_uses_jsx,r=!0===o.cli_has_entry||!0===o.src_uses_jsx;o.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===o.form||!0===o.form?.enabled,o.multiple_enabled=o.multiple_enabled||!0===o.multiple||!0===o.multiple?.enabled,!1===o.app?o.app={enabled:!1}:!0===o.app?o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:s}:o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:s,...o.app||{}},o.app.enabled=!0===o.app.enabled&&(!0===e.doc.features.form_enabled||!0===o.app.extend||!0===o.app.enabled),o.app.format=o.app.format||"esm",o.app.folder=o.app.folder||o.app.format||"default",!1===o.cli?o.cli={enabled:!1}:!0===o.cli?o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r}:o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r,...o.cli||{}},o.cli.enabled=!0===o.cli.enabled&&(!1===e.doc.features.form_enabled||!0===o.cli.extend||!0===o.cli.enabled),o.cli.format=o.cli.format||"cjs",o.cli.folder=o.cli.folder||o.cli.folder||"cjs";const c={cjs:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!0},cjsx:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0},esm:{format:"esm",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0},esmx:{format:"esm",browser:!0,babel:!0,context:o.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0},iife:{format:"iife",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0},umd:{format:"umd",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1}},l={};!0===o.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,babel_options:{targets:{chrome:"79"}}}),!0===o.app.enabled&&(o.app.dir=`./dist/app/${o.app.folder}`,c.app={format:o.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:o.app.dir,terser:!0,output_exports:!1===o.app.export?"none":"auto"},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:o.app.dir})),!0===o.cli.enabled&&(o.cli.dir=`./dist/cli/${o.cli.folder}`,c.cli={format:o.cli.format,context:"global",babel:!0===o.src_uses_jsx||!0===o.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:o.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===o.cli.export?"none":"auto"});const p={server:".",startPath:`${o.app.dir}/index.html`,files:["./dist/**/*"]};o.babel_options=o.babel_options||o.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},o.browsersync_options=L(p,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=L({},o.replace_options||o.replace?.options||{}),o.terser_options=L({},o.terser_options||o.terser?.options||{}),o.css_options=L({},o.css_options||o.css?.options||{}),o.wasm_options=L({},o.wasm_options||o.wasm?.options||{}),o.copy_options=L(l,o.copy_options||o.copy?.options||{}),o.json_options=L({},o.json_options||o.json?.options||{}),o.image_options=L({},o.image_options||o.image?.options||{}),o.rollup=o.rollup||{},o.rollup_output=L(c,o.rollup_output||o.rollup?.output||{});const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==o.rollup[e]?(!0===o.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||o.babel_options,t.browsersync_options=L(o.browsersync_options,t.browsersync_options),t.replace_options=L(o.replace_options,t.replace_options),t.terser_options=L(o.terser_options,t.terser_options),t.css_options=L(o.css_options,t.css_options),t.wasm_options=L(o.wasm_options,t.wasm_options),t.copy_options=L(o.copy_options,t.copy_options),t.json_options=L(o.json_options,t.json_options),t.image_options=L(o.image_options,t.image_options),o.form_enabled&&(t.babel=!0)):t.enabled=!1)}o.babel_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browser_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browsersync_enabled=d.some((e=>!0===o.rollup_output[e].browsersync)),o.browsersync_enabled=o.browsersync_enabled&&o.app.enabled,o.wasm_enabled=!0===o.wasm||o.wasm&&!1!==o.wasm?.enabled,o.css_enabled=!0===o.css||o.css&&!1!==o.css?.enabled,o.json_enabled=!0===o.json||o.json&&!1!==o.json?.enabled,o.terser_enabled=!0===o.terser||o.terser&&!1!==o.terser?.enabled,o.copy_enabled=o.app.enabled||o.copy_enabled||o.copy&&!1!==o.copy?.enabled,o.image_enabled=!0===o.image||o.image&&!1!==o.image?.enabled,o.dependency_auto_enabled=!1!==o.dependency_auto&&!1!==o.dependency_auto?.enabled,o.npm_install_flags=o.npm_install_flags||"",o.react_version=o.react_version||o.react?.version||18},kt=async({atom:e,packageDependencies:t,packageDevDependencies:o})=>{if("workflow"===e.type&&(t.push({package:"eventemitter3",version:"^4.0"}),t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let o="^18.2";o=`^${(await z({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:o}),t.push({package:"react-dom",version:o}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),t.push({package:"chalk",version:"^4"}),o.push({package:"@babel/core",version:"^7.23"}),o.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),o.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),o.push({package:"@rollup/plugin-replace",version:"^5.0"}),o.push({package:"rollup",version:"^3.26"}),o.push({package:"rollup-plugin-delete",version:"^2.0"}),o.push({package:"rollup-plugin-dts",version:"^6.0"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),o.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6.0"}),o.push({package:"@babel/preset-env",version:"7.22"}),o.push({package:"@babel/preset-react",version:"7.22"})),e.doc.features.browsersync_enabled&&o.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&o.push({package:"@rollup/plugin-json",version:"^6.0"}),e.doc.features.terser_enabled&&o.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&o.push({package:"@rollup/plugin-wasm",version:"^6.1"}),e.doc.features.image_enabled&&o.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.css_enabled){o.push({package:"rollup-plugin-postcss",version:"4.0"}),o.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":o.push({package:"postcss-import",version:"^15.1"});break;case"postcss-url":o.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":o.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":o.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":o.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&o.push({package:"rollup-plugin-copy",version:"^3.5"})},jt=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n,ts:Date.now()},a=o.templateDir,s=X.resolve(o.projectDir,"src/app");G.existsSync(s)||G.mkdirSync(s,{recursive:!0}),await Y({pattern:["index.html.njk","index.js.njk"],dir:X.resolve(a,"src/app"),outDir:s,context:i})},vt=async({atom:e,context:t,packageDependencies:o,packageDevDependencies:n,setInProgress:i})=>{await i({message:"Creating package.json."});const a=o.find((e=>"react"===e.package)),s=o.find((e=>"react-dom"===e.package));a&&!s?o.push({package:"react-dom",version:a.version}):a&&s&&(s.version=a.version),a&&e.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push(Z.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&r.push(Z.resolve(t.projectDir,"src/cli/index.js"));for await(const t of r){const i=t;if(!V.existsSync(i))throw new Error(`App file not found: ${i}`);const a=await Q({file:i,recursive:!0}),s=!0===e.doc.features.all_parsed_imports?a.all:a.required;for await(const e of s){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;if(n.find((t=>t.package===e.package)))continue;const t=(await ee({name:e.package,groupBy:{minor:!0}}))[0][0];n.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}}const c={atom:e,packageDependencies:o,packageDevDependencies:n},l=t.templateCommonDir,p=H.compile(V.readFileSync(Z.resolve(l,"package.json.njk"),"utf8"),H.configure(l)).render(c),d=t.projectDir,m=Z.resolve(d,"package.json");V.writeFileSync(m,p,"utf8")},_t=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n},a=o.templateDir,s=oe.resolve(o.projectDir,"src/cli");te.existsSync(s)||te.mkdirSync(s,{recursive:!0}),await ne({pattern:["index.js.njk"],dir:oe.resolve(a,"src/cli"),outDir:s,context:i})},Dt=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:n},a=ae.resolve(o.projectDir,"src","default/index.js");if(!ie.existsSync(a))throw new Error(`Entry file not found: ${a}`);const s=(await re({file:a,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&s.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(s.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<s.length;e++){const o=s[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(s)}}const l=o.templateCommonDir,p=se.compile(ie.readFileSync(ae.resolve(l,"rollup.config.js.njk"),"utf8"),se.configure(l)).render(i),d=o.projectDir,m=ae.resolve(d,"rollup.config.js");ie.writeFileSync(m,p,"utf8")},Tt=async({atom:e,setInProgress:t,context:o,njEnv:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const i={},a=e.doc.inputs||[],s=[];a.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&s.push(e);const t={};e.type&&(t.type=e.type),e.default&&(t.default=e.default),e.choices&&(t.choices=e.choices),(e.describe||e.description)&&(t.describe=e.describe||e.description),e.alias&&(t.alias=e.alias),!0===e.required&&(t.required=!0),!0===e.hidden&&(t.hidden=!0),!0===e.array&&(t.array=!0),!0===e.normalize&&(t.normalize=!0),e.nargs&&(t.nargs=e.nargs),i[e.name]=t}));const r={options:i,imports:s,atom:e},c=o.templateDir,l=pe.compile(ce.readFileSync(le.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),n).render(r),p=o.projectDir,d=le.resolve(p,"src/default/to.yargs.js");ce.writeFileSync(d,l,"utf8")},Pt=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},a=o.templateCommonDir,s=fe.compile(de.readFileSync(me.resolve(a,".gitignore.njk"),"utf8"),fe.configure(a)).render(i),r=o.projectDir,c=me.resolve(r,".gitignore");de.writeFileSync(c,s,"utf8")},St=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:n},a=o.templateCommonDir,s=he.compile(ue.readFileSync(ye.resolve(a,"tsconfig.json.njk"),"utf8"),he.configure(a)).render(i),r=o.projectDir,c=ye.resolve(r,"tsconfig.json");ue.writeFileSync(c,s,"utf8")},$t=async({atom:e,context:t,setInProgress:o,Atom:n})=>{const i="readme.md",a=`Creating ${i}`;if(await o({message:a}),t.project?.readme){const e={content:t.project.readme.doc.content},o=t.templateCommonDir,n=we.compile(ge.readFileSync(be.resolve(o,`${i}.njk`),"utf8"),we.configure(o)).render(e),a=t.projectDir,s=be.resolve(a,`${i}`);ge.writeFileSync(s,n,"utf8")}else if(e.id){const o=await n.first({type:"wiki",parent_id:e.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:a,...s}=o.doc,r={content:a},c=t.templateCommonDir,l=we.compile(ge.readFileSync(be.resolve(c,`${i}.njk`),"utf8"),we.configure(c)).render(r),p=t.projectDir,d=be.resolve(p,`${i}`);ge.writeFileSync(d,l,"utf8")}},Ct=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});if(0!==xe.exec("prettier --write src/**/* bin/* *.{js,json,yaml,html} --no-error-on-unmatched-pattern",{cwd:o}).code)throw new Error("Couldnt format files.")},It=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Creating .d.ts"});if(0!==ke.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},Et=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==je.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},Nt=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==ve.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},Ft=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:a}=e;if(!0===i.enabled)if("lib"===i.name)await it({...e});else if("red"===i.name)await nt({...e});else if("npm"===i.name)await ot({...e});else if("gcs"===i.name)await tt({...e});else if("gitlab"===i.name)await et({...e});else if("macos-app"===i.name)await st({...e});else if("ios-app"===i.name)await at({...e});else if("electron"===i.name)await rt({...e});else if("webos"===i.name)await ct({...e});else{let e;if("nextjs"===i.name&&(e=lt),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:n.projectDir,dependencies:o})}},{Atom:Ot}=g,At=N,Bt=v,qt=F,Rt=e,Mt=j,Jt=O,Lt=r,Kt=A;var Ut=class{#e;#t;#o;#n;#i;#a;#s;#r;#c;#l;#p;#d;#m;#f;#u;#y;#h;#w;#g;#b;constructor(e){this.#e=new bt,this.#t=e,this.#a=[],this.#s=[],this.#r={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#b={packageDependencies:this.#a,packageDevDependencies:this.#s,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Ot,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await wt(),this.#p=this.#t.buildId||gt(24),this.#b.buildId=this.#p,this.#u=this.#t.mode,this.#y=["all","deploy","build","file"].includes(this.#u),this.#h=["all","deploy","build"].includes(this.#u),this.#w=["all","deploy"].includes(this.#u),this.#g=["all","deploy","build","file","bpmn"].includes(this.#u),this.#m=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#f=(await Rt({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await xt(this.#b),await kt(this.#b),await this.transformWorkflow({workflow:this.#n});const e=await this.initNodeTree({workflow:this.#n});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#a}),await this.resolveNodeTree({root:e}),this.#l=e}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#c=await this.#e.init({config:this.#f}))}async initWorkflow(){const e=this.#t.id;this.#o=this.#t.project?.workflowAtom||await Ot.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await Lt({content:this.#o.doc.content})).parsed:this.#o.doc.content;let t=this.#o.doc.bundleName;t=t||(this.#o.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#o.doc.bundleName=t,this.#o.type=this.#o.type||"workflow",this.#b.atom=this.#o}async initDependencies(){this.#a.push({package:"eventemitter3",version:"^4.0"}),this.#a.push({package:"get-value",version:"^3.0"}),this.#a.push({package:"set-value",version:"^4.1"}),this.#o.doc.features.form_enabled?(this.#a.push({package:"react",version:"^18.2"}),this.#a.push({package:"react-dom",version:"^18.2"}),this.#a.push({package:"@flownet/react-app",version:"^0.1"}),this.#a.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#a.push({package:"yargs",version:"^17"}),this.#a.push({package:"chalk",version:"^4"})}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir;let o;const n=["node_modules"];if(pt.existsSync(e)&&pt.readdirSync(e).forEach((t=>{n.includes(t)||(o=ft.rm("-rf",dt.join(e,t)))})),o=ft.exec(`mkdir -p ${e}`),0!==o.code)throw new Error("Couldnt create workflow dir.");if(o=ft.exec(`mkdir ${e}/src`),0!==o.code)throw new Error("Couldnt create workflow/src dir.");if(o=ft.exec(`cp -a ${t} ${e}/src`),0!==o.code)throw new Error("Couldnt create workflow/src/core dir.");if(o=ft.exec(`mkdir -p ${e}/src/default/blocks`),0!==o.code)throw new Error("Couldnt create workflow/src/default/blocks dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#i=ut.configure(e,{watch:!1,dev:!0}),this.#b.njEnv=this.#i}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,o]=Object.entries(e)[0];if(o.hasOwnProperty("onerror")){const{onerror:n,...i}=o;e[t]={try:i,except:n}}if(e[t].hasOwnProperty("steps")){const o=e[t].steps;if(!Array.isArray(o))throw new Error("Steps must be an array.");e[t].steps=o.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),o={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#o}};t.forEach((t=>{const n={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:o,definition:e[t],index:o.childs.length,depth:o.depth+1,context:{},blockAutoJumpToParent:!0};o.childs.push(n)}));for await(const e of o.childs)await this.initNode({node:e});return o}async initNode({node:e}){if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except"))await this.initBlockTypeTryExcept({node:e});else if(e.definition.hasOwnProperty("for"))await this.initBlockTypeFor({node:e});else if(e.definition.hasOwnProperty("switch"))await this.initBlockTypeSwitch({node:e});else if(e.definition.hasOwnProperty("parallel"))await this.initBlockTypeParallel({node:e});else if(e.definition.hasOwnProperty("raise"))await this.initBlockTypeRaise({node:e});else if(e.definition.hasOwnProperty("return"))await this.initBlockTypeReturn({node:e});else if(e.definition.hasOwnProperty("assign"))await this.initBlockTypeAssign({node:e});else if(e.definition.hasOwnProperty("call"))await this.initBlockTypeCall({node:e});else if(e.definition.hasOwnProperty("form"))await this.initBlockTypeForm({node:e});else if(e.definition.hasOwnProperty("shell"))await this.initBlockTypeShell({node:e});else if(e.definition.hasOwnProperty("config"))await this.initBlockTypeConfig({node:e});else if(e.definition.hasOwnProperty("yaml"))await this.initBlockTypeYaml({node:e});else if(e.definition.hasOwnProperty("operation"))await this.initBlockTypeOperation({node:e});else if(e.definition.hasOwnProperty("steps"))await this.initBlockTypeSteps({node:e});else{if(!e.definition.hasOwnProperty("next"))throw new Error("Undefined step type.");await this.initBlockTypeJump({node:e})}}async initBlockTypeTryExcept({node:e}){if(e.type="tryexcept",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!0,e.definition.try){const t="try",o={name:t,childs:[],parent:e,definition:e.definition[t],index:e.childs.length,context:{}};e.childs.push(o),await this.initNode({node:o})}if(e.definition.except){const t="except",o={name:t,childs:[],parent:e,definition:e.definition[t],index:e.childs.length,context:{}};e.childs.push(o),await this.initNode({node:o})}}async initBlockTypeSwitch({node:e}){e.type="switch",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let t=0;t<e.definition.switch.length;t++){const o=e.definition.switch[t],n={name:`${t}`,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(n),o.hasOwnProperty("steps")?await this.initNode({node:n}):(n.depth=e.depth+1,n.type="jump")}}async initBlockTypeFor({node:e}){e.type="for",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1;for(let t=0;t<e.definition.for.steps.length;t++){const o=e.definition.for.steps[t],n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],index:e.childs.length,context:{}};e.childs.push(i),await this.initNode({node:i})}}async initBlockTypeSteps({node:e}){e.type||(e.type="steps");const t=e.definition.steps||[];for await(const o of t){const t=Object.keys(o)[0],n={name:t,childs:[],parent:e,definition:o[t],index:e.childs.length,context:{}};e.childs.push(n),await this.initNode({node:n})}}async initBlockTypeAssign({node:e}){e.type="assign"}async initBlockTypeCall({node:e}){e.type="call";for(let t=0;t<e.definition.modules?.length;t++){const o=e.definition.modules[t],n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],module:!0,blockAutoJumpToParent:!0,index:e.childs.length,context:{}};e.childs.push(i),await this.initNode({node:i})}}async initBlockTypeForm({node:e}){e.type="form";for(let t=0;t<e.definition.modules?.length;t++){const o=e.definition.modules[t],n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],module:!0,blockAutoJumpToParent:!0,index:e.childs.length,context:{}};e.childs.push(i),await this.initNode({node:i})}}async initBlockTypeReturn({node:e}){e.type="return"}async initBlockTypeRaise({node:e}){e.type="raise"}async initBlockTypeJump({node:e}){e.type="jump"}async initBlockTypeOperation({node:e}){e.type="operation"}async initBlockTypeParallel({node:e}){e.type="parallel"}async initBlockTypeShell({node:e}){const t="shell",o=e.definition,n=typeof o[t];if("string"!==n&&"object"!==n)throw new Error(`Unsupported ${t} usage`);o.call="npm:@fnet/shell",o.args="string"===n?{cmd:o[t]}:o[t],delete o[t],await this.initBlockTypeCall({node:e})}async initBlockTypeConfig({node:e}){const t="config",o=e.definition,n=typeof o[t];if("string"!==n&&"object"!==n)throw new Error(`Unsupported ${t} usage`);o.call="npm:@fnet/config",o.args="string"===n?{name:o[t]}:o[t],delete o[t],await this.initBlockTypeCall({node:e})}async initBlockTypeYaml({node:e}){const t="yaml",o=e.definition,n=typeof o[t];if("string"!==n&&"object"!==n)throw new Error(`Unsupported ${t} usage`);o.call="npm:@fnet/yaml",o.args="string"===n?{file:o[t]}:o[t],delete o[t],await this.initBlockTypeCall({node:e})}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const o of e.childs)await this.initNodeIndex({node:o,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const o=dt.join(e.parent.indexKey,e.name);e.indexKey=o,t[o]=e;const n=[];let i=e;for(;i?.parent;)n.push(i.index),i=i.parent;n.reverse(),e.codeKey=`B_${n.join("_")}_${e.type}`,e.pathKey=`${n.join(".")}`,e.typeId=gt(24);for await(const o of e.childs)await this.initNodeIndex({node:o,index:t})}async initNodeCalls({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"call"===n.type&&o.push(n)}return e.context.calls=o,o}async initNodeCallLibs({root:e}){const t=[],o=e.context.calls;for await(const e of o){const o=e.definition.call,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.call,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"form"===n.type&&o.push(n)}return e.context.forms=o,o}async initNodeFormLibs({root:e}){const t=[],o=e.context.forms;for await(const e of o){const o=e.definition.form,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.form,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const o=e.filter((e=>"atom"===e.type));for(let e=0;e<o.length;e++){const n=o[e],i=await this.findAtomLibrary({url:n.name});n.atom=i;const a=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));a?.forEach((e=>{const o=t.find((t=>t.package===e.package));o?"string"==typeof e.path?(o.path||[]).some((t=>t===e.path))||(o.path=o.path||[],o.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(o.path||[]).some((t=>t===e))||(o.path=o.path||[],o.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=At({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#m),"ac:"===t.protocol){const o=t.pathname.split("/");if(1===o.length)return await Ot.first({where:{name:e,parent_id:this.#f.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await Ot.first({where:{name:o[0],parent_id:this.#f.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Ot.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=dt.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await Mt({file:e,recursive:!0}),i=!0===this.#o.doc.features.all_parsed_imports?n.all:n.required;for await(const e of i){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=(await Bt({name:e.package,groupBy:{minor:!0}}))[0][0];o.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:o},protocol:t.protocol}}if("npm:"===t.protocol){const e=(await Bt({name:t.pathname,groupBy:{minor:!0}}))[0][0];return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:[{package:t.pathname,version:`^${e}`,type:"npm"}]},protocol:t.protocol}}}}resolveNextBlock({node:e}){const t=e.definition;if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let o=e.parent;for(;o.parent;){const n=o.childs.find((e=>e.name===t.next));if(n){e.context.next=n;break}o=o.parent}}else{if(!0===e.module)return;let t=e.parent,o=e.index+1;for(;t.parent;){if(t.blockAutoJumpToParent&&!0===t.blockAutoJumpToSibling){if(!0===t.blockAutoJumpToParent)break;o=t.index+1,t=t.parent;continue}const n=t.childs.find((e=>e.index===o));if(n){e.context.next=n;break}if(!0===t.blockAutoJumpToParent)break;o=t.index+1,t=t.parent}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=yt(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const o=t.params[e];if("string"==typeof o)t.params[e]={key:o,hasDefault:!1};else{const n=Object.keys(o)[0];t.params[e]={key:n,hasDefault:!0,default:o[n]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){"assign"===e.type?await this.resolveTypeAssign({node:e}):"return"===e.type?await this.resolveTypeReturn({node:e}):"call"===e.type?await this.resolveTypeCall({node:e}):"form"===e.type?await this.resolveTypeForm({node:e}):"raise"===e.type?await this.resolveTypeRaise({node:e}):"switch"===e.type?await this.resolveTypeSwitch({node:e}):"jump"===e.type?await this.resolveTypeJump({node:e}):"tryexcept"===e.type?await this.resolveTypeTryExcept({node:e}):"for"===e.type?await this.resolveTypeFor({node:e}):"operation"===e.type?await this.resolveTypeOperation({node:e}):"steps"===e.type&&await this.resolveTypeSteps({node:e});for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeAssign({node:e}){e.context.transform=yt(e.definition);const t=e.context.transform;for(let e=0;e<t.assign?.length;e++){let o=t.assign[e],n=Object.keys(o)[0],i=o[n],a={key:await this.transformExpression(n),value:await this.transformExpression(i)};t.assign[e]=a}await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeSteps({node:e}){e.context.next=e.childs[0]}async resolveTypeReturn({node:e}){e.context.transform=e.context.transform||yt(e.definition);const t=e.context.transform;t.return=await this.transformExpression(t.return),await this.resolveTypeCommon({node:e})}async resolveTypeCall({node:e}){e.context.transform=e.context.transform||yt(e.definition);const t=e.context.transform;t.args&&(t.args=await this.transformExpression(t.args)),t.result&&(t.result=await this.transformExpression(t.result));const o=e.workflow.parent;e.context.lib=o.context.libs.find((e=>e.name===t.call)),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeForm({node:e}){e.context.transform=e.context.transform||yt(e.definition);const t=e.context.transform;t.props&&(t.props=await this.transformExpression(t.props));const o=e.workflow.parent;e.context.lib=o.context.libs.find((e=>e.name===t.form)),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeRaise({node:e}){e.context.transform=e.context.transform||yt(e.definition);const t=e.context.transform;t.raise=await this.transformExpression(t.raise),await this.resolveTypeCommon({node:e})}async resolveTypeSwitch({node:e}){e.context.transform=e.context.transform||yt(e.definition),e.context.transform;for(const t of e.childs)t.context.transform=t.context.transform||yt(t.definition),t.context.transform.condition=await this.transformExpression(t.definition.condition);await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeJump({node:e}){e.context.transform=e.context.transform||yt(e.definition);const t=e.context.transform;t.next=await this.transformExpression(t.next),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeTryExcept({node:e}){if(e.context.transform=e.context.transform||yt(e.definition),e.context.transform,e.context.try=e.childs.find((e=>"try"===e.name)),e.context.except=e.childs.find((e=>"except"===e.name)),e.context.except){const t=e.context.except;t.context.transform=t.context.transform||yt(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeFor({node:e}){e.context.transform=e.context.transform||yt(e.definition);e.context.transform.for.in=await this.transformExpression(e.definition.for.in),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeOperation({node:e}){e.context.transform=e.context.transform||yt(e.definition),await this.resolveTypeCommon({node:e})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:e}){await this.setInProgress({message:"Creating external lib files."}),this.#o.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const o=t[e].atom,n=this.#t.projectDir;if("local:"===o.protocol){const e=dt.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=dt.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!pt.existsSync(e)){pt.mkdirSync(dt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",pt.writeFileSync(e,t,"utf8")}o.relativePath=t,this.#o.typesDir=`./types/${dt.basename(n)}/src`}else if("npm:"===o.protocol)o.relativePath=o.name;else{const e=`${n}/src/libs/${o.id}.js`,t=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;pt.writeFileSync(e,t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=ut.compile(pt.readFileSync(dt.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=dt.resolve(n,"src/default/index.js");pt.writeFileSync(i,o,"utf8")}async createNodeTree({root:e}){await this.setInProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:e}){const t=this.#t.templateDir,o=ut.compile(pt.readFileSync(dt.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=dt.resolve(n,`src/default/${e.codeKey}.js`);pt.writeFileSync(i,o,"utf8");for await(const t of e.childs)await this.createType({node:t})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:e}){let t=this.#r[e.type];if(t)return t;const o=this.#t.templateDir;return t=ut.compile(pt.readFileSync(dt.resolve(o,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#i),this.#r[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,o=`${e.codeKey}.js`,n=dt.resolve(t,`src/default/blocks/${o}`);pt.writeFileSync(n,e.context.render,"utf8"),e.context.fileName=o,e.context.filePath=n}async transformExpression(e){let t=await this.transformValue(e);return t=JSON.stringify(t),t=this.replaceSpecialPattern(t),t}async transformValue(e){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=await this.transformValue(e[t]);else if(ht(e)){const t=Object.keys(e);for(let o=0;o<t.length;o++)e[t[o]]=await this.transformValue(e[t[o]])}else if("string"==typeof e){const t=await Jt({expression:e});if(t){const{processor:o,statement:n}=t;switch(o){case"v":e=`$::v.${n}::`;break;case"e":e=`$::${n}::`;break;case"m":e=`$::closure.module['${n}']::`;break;case"f":e=`$::closure.form.${n}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const e="flow.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:o,...n}=this.#o.doc,i={content:mt.dump(n)},a=this.#t.templateDir,s=ut.compile(pt.readFileSync(dt.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=dt.resolve(r,`${e}`);pt.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:mt.dump(this.#n)},n=this.#t.templateDir,i=ut.compile(pt.readFileSync(dt.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),a=this.#t.projectDir,s=dt.resolve(a,`${e}`);pt.writeFileSync(s,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=ft.exec("prettier --write .",{cwd:dt.resolve(e,"src")});if(0!==t.code)throw new Error(t.stderr)}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&await o.save()}}else if(this.#o.id){const e=await Ot.list({type:"workflow.deploy",parent_id:this.#o.id});for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&(o=await Ot.update(o,{id:o.id}))}}}async deployProject(e){const{deploymentProject:t}=e,o=t.doc.targets;for(let e=0;e<o.length;e++){const n=o[e];await Ft({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await Ot.first({name:t.params.name,parent_id:this.#f.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await Ot.update(n,{id:n.id})):n=await Ot.create({parent_id:this.#f.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:o.version}]}})}async setInProgress({message:e}){console.log(Kt.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#g&&!this.#y)return await this.createNetwork();try{const e=this.#g?await qt({root:this.#l}):void 0;this.#y&&(await this.initWorkflowDir(),await this.initNunjucks(),this.#g&&pt.writeFileSync(dt.resolve(this.#t.projectDir,"./project.bpmn"),e.diagramXML,"utf8"),await this.createAtomLibFiles({root:this.#l}),await this.createEngine({root:this.#l}),await this.createNodeTree({root:this.#l}),await this.createProjectYaml(),await this.createProjectMainYaml(),await $t(this.#b),await St(this.#b),await Pt(this.#b),await Tt(this.#b),await _t(this.#b),await jt(this.#b),await Dt(this.#b),await vt(this.#b),await Ct(this.#b),await It(this.#b),this.#h&&(await Et(this.#b),await Nt(this.#b),this.#w&&await this.deploy())),await this._cache_set(this.#d,{status:"COMPLETED",data:{network:e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await qt({root:this.#l});await this._cache_set(this.#d,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}};const Wt=l,zt=p;var Gt=function({baseDir:e=__dirname}){let t=e;for(;t!==zt.parse(t).root;){const e=zt.join(t,"node_modules");if(Wt.existsSync(e))return e;t=zt.dirname(t)}return null};const Xt=process.cwd();e({name:["redis"],dir:Xt,optional:!0});const Yt=t,Ht=o,{hideBin:Vt}=n,Zt=i,Qt=a,eo=s,to=r,oo=c,no=Ut,io=Gt({baseDir:__dirname});async function ao(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:Yt.resolve(Xt,`./.output/${e.id}`),templateDir:Yt.resolve(io,"./@flownet/template-node-workflow/default"),templateCommonDir:Yt.resolve(io,"./@flownet/template-node-common/default"),coreDir:Yt.resolve(io,"./@flownet/template-node-workflow/core")}}{const t=await async function(e){const t=Yt.resolve(Xt,"flow.yaml");if(!Zt.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const o=Zt.readFileSync(t,"utf8"),{parsed:n}=await to({content:o}),i=Yt.dirname(t),a=Yt.resolve(i,"flow.main.yaml");if(!Zt.existsSync(t))throw new Error("flow.main.yaml file not found in current directory.");const s=Zt.readFileSync(a,"utf8"),{parsed:r}=await to({content:s}),c={workflowAtom:{doc:{...n,"content-type":"yaml",content:s}},projectDir:i,projectFilePath:t,projectFileContent:o,projectFileParsed:n,projectMainFilePath:a,projectMainFileContent:s,projectMainFileParsed:r},l=Yt.resolve(i,"flow.devops.yaml");if(Zt.existsSync(l)){const e=Zt.readFileSync(l,"utf8"),t=Qt.parse(e);c.devops={filePath:l,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{Zt.writeFileSync(c.devops.filePath,Qt.stringify(c.devops.doc))}}}const p=Yt.resolve(i,"fnet.readme.md");if(Zt.existsSync(p)){const e=Zt.readFileSync(p,"utf8");c.readme={filePath:p,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return c}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Yt.resolve(io,"./@flownet/template-node-workflow/default"),templateCommonDir:Yt.resolve(io,"./@flownet/template-node-common/default"),coreDir:Yt.resolve(io,"./@flownet/template-node-workflow/core"),projectDir:Yt.resolve(t.projectDir,"./.workspace"),projectSrcDir:Yt.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${io}/.bin:${process.env.PATH}`,Ht(Vt(process.argv)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"})),(async e=>{try{const t=Yt.resolve(io,"./@flownet/template-node-workflow/project"),o=Yt.resolve(Xt,e.name);Zt.existsSync(o)||Zt.mkdirSync(o),await oo({dir:t,outDir:o,context:e});let n=eo.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(eo.which("git")&&(n=eo.exec("git init",{cwd:o}),0!==n.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 net project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",alias:"m",default:"build",choices:["all","file","build","deploy","bpmn"]})),(async e=>{try{const t=await ao(e),o=new no(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow net project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await ao({...e,mode:"all"}),o=new no(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await ao({...e,mode:"file"}),o=new no(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ao(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),a=`npm ${n.join(" ")} ${i}`;eo.exec(a,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ao(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),a=`node ${n.join(" ")} ${i}`;eo.exec(a,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ao(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),a=`npm run serve ${n.join(" ")} ${i}`;eo.exec(a,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ao(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),a=`npm run watch ${n.join(" ")} ${i}`;eo.exec(a,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ao(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),a=`npm run app ${n.join(" ")} ${i}`;eo.exec(a,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ao(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),a=`npm run cli ${n.join(" ")} ${i}`;eo.exec(a,{cwd:o}),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={};
|
|
2
|
+
"use strict";var e=require("@fnet/config"),t=require("path"),o=require("yargs/yargs"),n=require("yargs/helpers"),i=require("fs"),a=require("yaml"),s=require("shelljs"),r=require("@fnet/yaml"),c=require("@flownet/lib-render-templates-dir"),l=require("node:fs"),p=require("node:path"),d=require("js-yaml"),m=require("nunjucks"),f=require("lodash.clonedeep"),u=require("isobject"),y=require("redis"),h=require("@flownet/lib-is-redis-online"),w=require("nanoid"),g=require("@flownet/lib-atom-api-js"),b=require("axios"),x=require("qs"),k=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),v=require("@flownet/lib-list-npm-versions"),_=require("@fnet/shell"),D=require("semver"),T=require("node:os"),P=require("@node-red/util"),S=require("@flownet/lib-to-ios-app"),$=require("@flownet/lib-to-macos-app"),C=require("@flownet/lib-to-electron"),I=require("@flownet/lib-to-webos"),E=require("@flownet/lib-to-nextjs"),N=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-bpmn-from-flow"),O=require("@fnet/expression"),A=require("chalk");const B=y,q=h;const{Api:R}=g,M=b.default,J=x;const L=k,K=i,U=t,W=j;const z=v;const G=l,X=p,Y=c;const H=m,V=l,Z=p,Q=j,ee=v;const te=l,oe=p,ne=c;const ie=l,ae=p,se=m,re=j;const ce=l,le=p,pe=m;const de=l,me=p,fe=m;const ue=l,ye=p,he=m;const we=m,ge=l,be=p;const xe=s;const ke=s;const je=s;const ve=s;const _e=_,De=e;const Te=l,Pe=p,Se=D,$e=_,Ce=e;const Ie=l,Ee=p,Ne=D,Fe=s,Oe=e;const Ae=l,Be=p,qe=T,Re=m,Me=P,Je=e;const Le=i,Ke=t,Ue=e;const We=S;const ze=$;const Ge=C;const Xe=I;const Ye=E,He=f,Ve=k,Ze=D,Qe=p;const et=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const a=t.projectDir;let s="fnet-to-gitlab";const r=n.params.config||"gitlab",c=await De({name:r,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;s+=` --projectGroupId=${l.projectGroupId}`,s+=` --projectPath='${a}'`,s+=` --projectName='${n.params.name}'`,s+=` --projectBranch='${n.params.branch||"main"}'`,s+=` --gitlabHost='${l.gitlabHost}'`,s+=` --gitlabToken='${l.gitlabToken}'`,s+=` --gitlabUsername='${l.gitlabUsername}'`,s+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==n.dryRun&&(await _e({cmd:s}),o.isDirty=!0)},tt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as gcs package."});const a=t.projectDir,s=Pe.resolve(a,"package.json"),r=Te.readFileSync(s),c=JSON.parse(r);c.name=n.params.name,c.version=Se.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,Te.writeFileSync(s,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Ce({name:n.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='${Pe.resolve(Pe.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${a}'`,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===n.dryRun&&(d+=" --dryRun"),await $e({cmd:d}),Te.writeFileSync(s,r),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=c.version,await i({target:n,packageJSON:c}))},ot=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as npm package."});const a=o.projectDir,s=Ee.resolve(a,"package.json"),r=Ie.readFileSync(s),c=JSON.parse(r);c.name=i.params.name,c.version=Ne.inc(i.params.version,"patch");const l=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/cjs/index.js",[e.doc.name]:"dist/cli/cjs/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Ie.writeFileSync(s,JSON.stringify(c,null,"\t"));const p=(await Oe({name:o.npmConfig||"npm",dir:o.projectDir}))?.data;if(Ie.writeFileSync(Ee.resolve(a,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==Fe.exec("npm publish --access public",{cwd:a}).code)throw new Error("Couldnt publish to npm");Ie.writeFileSync(s,r),n.isDirty=!0,i.params.version=c.version},nt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a,packageDependencies:s,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=o.projectDir,l=o.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Me.util.generateId(),label:`${p}/${e.id?e.id:qe.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Me.util.generateId(),name:e.doc.name,initialize:{content:Ae.readFileSync(Be.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Me.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Me.util.generateId()}}};else if("cronjob"===i.deploy.template){let t=i.params?.schedules?cloneDeep(i.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Me.util.generateId(),label:`${p}/${e.id?e.id:qe.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Me.util.generateId(),name:e.doc.name,initialize:{content:Ae.readFileSync(Be.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Me.util.generateId(),schedules:t},debug:{id:Me.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:s,red:{tab:{id:i.deploy.id||Me.util.generateId(),label:`${p}/${e.id?e.id:qe.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Me.util.generateId(),name:e.doc.name,initialize:{content:Ae.readFileSync(Be.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Me.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Me.util.generateId()},debug:{id:Me.util.generateId()}}}}let m=Re.compile(Ae.readFileSync(Be.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(Ae.writeFileSync(Be.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===i.dryRun)return;n.isDirty=!0;const f=(await Je({name:o.redConfig||"red",dir:o.projectDir}))?.data,u=i.deploy.url||f.env.RED_URL,y={};if(!1!==i.deploy.auth&&(y.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:y}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:m,headers:y});else{const e=await axios({method:"POST",url:`${u}/flow`,data:m,headers:y});i.deploy.id=e.data.id}},it=async({atom:e,Atom:t,setInProgress:o,context:n,packageDependencies:i,deploymentProject:a,deploymentProjectTarget:s})=>{await o({message:"Deploying it as workflow lib."});const r=(await Ue({name:"atom",dir:n.projectDir}))?.data;let c,l,p,d=s.deploy.name.split("/");if(1===d.length)l=r.env.ATOM_LIBRARIES_ID,p=s.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:r.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===s.dryRun)return;if(a.isDirty=!0,s.deploy.id){if(c=await t.get({id:s.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;s.deploy.id=c.id}const m=n.projectDir;c.doc.contents=[{content:Le.readFileSync(Ke.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Le.readFileSync(Ke.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Le.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=i,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},at=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a,registerToPackageManager:s})=>{await t({message:"Deploying it as ios app package."});const r=o.projectDir;if(!0===i.dryRun)return;const c={projectDir:r,dest:r,atom:e,params:i.params};await We(c),n.isDirty=!0},st=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a})=>{await t({message:"Deploying it as macos app package."});const s=o.projectDir;if(!0===i.dryRun)return;const r={projectDir:s,dest:s,atom:e,params:i.params};await ze(r),n.isDirty=!0},rt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:a})=>{await t({message:"Deploying it as electron package."});const s=o.projectDir;if(!0===i.dryRun)return;const r={src:s,dest:s,atom:e,params:i.params};await Ge(r),n.isDirty=!0},ct=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as webos package."});const a=o.projectDir;if(!0===i.dryRun)return;const s={src:a,dest:a,atom:e,params:i.params};await Xe(s),n.isDirty=!0},lt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as nextjs package."});t.params=Ve({name:"nextjs-app",version:"0.1.0"},t.params);const a=Ze.inc(t.params.version,"patch");t.params.version=a;const s=He(t);s.params.dependencies=He(i);const r={atom:e,target:s.params,projectDir:n,renderDir:Qe.resolve(n,"nextjs")};return{deployer:await Ye(r)}};const pt=l,dt=p,mt=d,ft=s,ut=m,yt=f,ht=u,wt=async()=>{if(!await q({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=B.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:gt}=w,bt=class{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(R.set_api_url(e.data.url),t)return R.set_req_token(t),void o(t);M({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:J.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{R.set_req_token(e.data.access_token),o(e.data.access_token)})).catch((e=>{R.set_req_token(),n(e)}))}))}},xt=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const o=e.doc.features;o.hasOwnProperty("all_parsed_imports")||(o.all_parsed_imports=!0);const n=U.resolve(t.project.projectDir),i=U.resolve(n,"./app/index.js");if(K.existsSync(i)){let e=await W({file:i,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.app_uses_jsx=t,o.app_has_entry=!0,e=await W({file:i}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.app_entry_uses_jsx=t}const a=U.resolve(n,"./cli/index.js");if(K.existsSync(a)){let e=await W({file:a,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.cli_uses_jsx=t,o.cli_has_entry=!0,e=await W({file:a}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.cli_entry_uses_jsx=t}if("workflow.lib"===e.type){const e=U.resolve(n,"./src/index.js");if(K.existsSync(e)){let t=await W({file:e,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));o.src_uses_jsx=n,o.src_has_entry=!0,t=await W({file:e}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.src_entry_uses_jsx=n}}const s=!0===o.app_has_entry||!0===o.src_uses_jsx,r=!0===o.cli_has_entry||!0===o.src_uses_jsx;o.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===o.form||!0===o.form?.enabled,o.multiple_enabled=o.multiple_enabled||!0===o.multiple||!0===o.multiple?.enabled,!1===o.app?o.app={enabled:!1}:!0===o.app?o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:s}:o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:s,...o.app||{}},o.app.enabled=!0===o.app.enabled&&(!0===e.doc.features.form_enabled||!0===o.app.extend||!0===o.app.enabled),o.app.format=o.app.format||"esm",o.app.folder=o.app.folder||o.app.format||"default",!1===o.cli?o.cli={enabled:!1}:!0===o.cli?o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r}:o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r,...o.cli||{}},o.cli.enabled=!0===o.cli.enabled&&(!1===e.doc.features.form_enabled||!0===o.cli.extend||!0===o.cli.enabled),o.cli.format=o.cli.format||"cjs",o.cli.folder=o.cli.folder||o.cli.folder||"cjs";const c={cjs:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!0},cjsx:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0},esm:{format:"esm",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0},esmx:{format:"esm",browser:!0,babel:!0,context:o.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0},iife:{format:"iife",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0},umd:{format:"umd",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1}},l={};!0===o.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,babel_options:{targets:{chrome:"79"}}}),!0===o.app.enabled&&(o.app.dir=`./dist/app/${o.app.folder}`,c.app={format:o.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:o.app.dir,terser:!0,output_exports:!1===o.app.export?"none":"auto"},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:o.app.dir})),!0===o.cli.enabled&&(o.cli.dir=`./dist/cli/${o.cli.folder}`,c.cli={format:o.cli.format,context:"global",babel:!0===o.src_uses_jsx||!0===o.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:o.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===o.cli.export?"none":"auto"});const p={server:".",startPath:`${o.app.dir}/index.html`,files:["./dist/**/*"]};o.babel_options=o.babel_options||o.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},o.browsersync_options=L(p,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=L({},o.replace_options||o.replace?.options||{}),o.terser_options=L({},o.terser_options||o.terser?.options||{}),o.css_options=L({},o.css_options||o.css?.options||{}),o.wasm_options=L({},o.wasm_options||o.wasm?.options||{}),o.copy_options=L(l,o.copy_options||o.copy?.options||{}),o.json_options=L({},o.json_options||o.json?.options||{}),o.image_options=L({},o.image_options||o.image?.options||{}),o.rollup=o.rollup||{},o.rollup_output=L(c,o.rollup_output||o.rollup?.output||{});const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==o.rollup[e]?(!0===o.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||o.babel_options,t.browsersync_options=L(o.browsersync_options,t.browsersync_options),t.replace_options=L(o.replace_options,t.replace_options),t.terser_options=L(o.terser_options,t.terser_options),t.css_options=L(o.css_options,t.css_options),t.wasm_options=L(o.wasm_options,t.wasm_options),t.copy_options=L(o.copy_options,t.copy_options),t.json_options=L(o.json_options,t.json_options),t.image_options=L(o.image_options,t.image_options),o.form_enabled&&(t.babel=!0)):t.enabled=!1)}o.babel_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browser_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browsersync_enabled=d.some((e=>!0===o.rollup_output[e].browsersync)),o.browsersync_enabled=o.browsersync_enabled&&o.app.enabled,o.wasm_enabled=!0===o.wasm||o.wasm&&!1!==o.wasm?.enabled,o.css_enabled=!0===o.css||o.css&&!1!==o.css?.enabled,o.json_enabled=!0===o.json||o.json&&!1!==o.json?.enabled,o.terser_enabled=!0===o.terser||o.terser&&!1!==o.terser?.enabled,o.copy_enabled=o.app.enabled||o.copy_enabled||o.copy&&!1!==o.copy?.enabled,o.image_enabled=!0===o.image||o.image&&!1!==o.image?.enabled,o.dependency_auto_enabled=!1!==o.dependency_auto&&!1!==o.dependency_auto?.enabled,o.npm_install_flags=o.npm_install_flags||"",o.react_version=o.react_version||o.react?.version||18},kt=async({atom:e,packageDependencies:t,packageDevDependencies:o})=>{if("workflow"===e.type&&(t.push({package:"eventemitter3",version:"^4.0"}),t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let o="^18.2";o=`^${(await z({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:o}),t.push({package:"react-dom",version:o}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),t.push({package:"chalk",version:"^4"}),o.push({package:"@babel/core",version:"^7.23"}),o.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),o.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),o.push({package:"@rollup/plugin-replace",version:"^5.0"}),o.push({package:"rollup",version:"^3.26"}),o.push({package:"rollup-plugin-delete",version:"^2.0"}),o.push({package:"rollup-plugin-dts",version:"^6.0"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),o.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6.0"}),o.push({package:"@babel/preset-env",version:"7.22"}),o.push({package:"@babel/preset-react",version:"7.22"})),e.doc.features.browsersync_enabled&&o.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&o.push({package:"@rollup/plugin-json",version:"^6.0"}),e.doc.features.terser_enabled&&o.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&o.push({package:"@rollup/plugin-wasm",version:"^6.1"}),e.doc.features.image_enabled&&o.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.css_enabled){o.push({package:"rollup-plugin-postcss",version:"4.0"}),o.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":o.push({package:"postcss-import",version:"^15.1"});break;case"postcss-url":o.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":o.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":o.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":o.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&o.push({package:"rollup-plugin-copy",version:"^3.5"})},jt=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n,ts:Date.now()},a=o.templateDir,s=X.resolve(o.projectDir,"src/app");G.existsSync(s)||G.mkdirSync(s,{recursive:!0}),await Y({pattern:["index.html.njk","index.js.njk"],dir:X.resolve(a,"src/app"),outDir:s,context:i})},vt=async({atom:e,context:t,packageDependencies:o,packageDevDependencies:n,setInProgress:i})=>{await i({message:"Creating package.json."});const a=o.find((e=>"react"===e.package)),s=o.find((e=>"react-dom"===e.package));a&&!s?o.push({package:"react-dom",version:a.version}):a&&s&&(s.version=a.version),a&&e.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push(Z.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&r.push(Z.resolve(t.projectDir,"src/cli/index.js"));for await(const t of r){const i=t;if(!V.existsSync(i))throw new Error(`App file not found: ${i}`);const a=await Q({file:i,recursive:!0}),s=!0===e.doc.features.all_parsed_imports?a.all:a.required;for await(const e of s){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;if(n.find((t=>t.package===e.package)))continue;const t=(await ee({name:e.package,groupBy:{minor:!0}}))[0][0];n.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}}const c={atom:e,packageDependencies:o,packageDevDependencies:n},l=t.templateCommonDir,p=H.compile(V.readFileSync(Z.resolve(l,"package.json.njk"),"utf8"),H.configure(l)).render(c),d=t.projectDir,m=Z.resolve(d,"package.json");V.writeFileSync(m,p,"utf8")},_t=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n},a=o.templateDir,s=oe.resolve(o.projectDir,"src/cli");te.existsSync(s)||te.mkdirSync(s,{recursive:!0}),await ne({pattern:["index.js.njk"],dir:oe.resolve(a,"src/cli"),outDir:s,context:i})},Dt=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:n},a=ae.resolve(o.projectDir,"src","default/index.js");if(!ie.existsSync(a))throw new Error(`Entry file not found: ${a}`);const s=(await re({file:a,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&s.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(s.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<s.length;e++){const o=s[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(s)}}const l=o.templateCommonDir,p=se.compile(ie.readFileSync(ae.resolve(l,"rollup.config.js.njk"),"utf8"),se.configure(l)).render(i),d=o.projectDir,m=ae.resolve(d,"rollup.config.js");ie.writeFileSync(m,p,"utf8")},Tt=async({atom:e,setInProgress:t,context:o,njEnv:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const i={},a=e.doc.inputs||[],s=[];a.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&s.push(e);const t={};e.type&&(t.type=e.type),e.default&&(t.default=e.default),e.choices&&(t.choices=e.choices),(e.describe||e.description)&&(t.describe=e.describe||e.description),e.alias&&(t.alias=e.alias),!0===e.required&&(t.required=!0),!0===e.hidden&&(t.hidden=!0),!0===e.array&&(t.array=!0),!0===e.normalize&&(t.normalize=!0),e.nargs&&(t.nargs=e.nargs),i[e.name]=t}));const r={options:i,imports:s,atom:e},c=o.templateDir,l=pe.compile(ce.readFileSync(le.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),n).render(r),p=o.projectDir,d=le.resolve(p,"src/default/to.yargs.js");ce.writeFileSync(d,l,"utf8")},Pt=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},a=o.templateCommonDir,s=fe.compile(de.readFileSync(me.resolve(a,".gitignore.njk"),"utf8"),fe.configure(a)).render(i),r=o.projectDir,c=me.resolve(r,".gitignore");de.writeFileSync(c,s,"utf8")},St=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:n},a=o.templateCommonDir,s=he.compile(ue.readFileSync(ye.resolve(a,"tsconfig.json.njk"),"utf8"),he.configure(a)).render(i),r=o.projectDir,c=ye.resolve(r,"tsconfig.json");ue.writeFileSync(c,s,"utf8")},$t=async({atom:e,context:t,setInProgress:o,Atom:n})=>{const i="readme.md",a=`Creating ${i}`;if(await o({message:a}),t.project?.readme){const e={content:t.project.readme.doc.content},o=t.templateCommonDir,n=we.compile(ge.readFileSync(be.resolve(o,`${i}.njk`),"utf8"),we.configure(o)).render(e),a=t.projectDir,s=be.resolve(a,`${i}`);ge.writeFileSync(s,n,"utf8")}else if(e.id){const o=await n.first({type:"wiki",parent_id:e.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:a,...s}=o.doc,r={content:a},c=t.templateCommonDir,l=we.compile(ge.readFileSync(be.resolve(c,`${i}.njk`),"utf8"),we.configure(c)).render(r),p=t.projectDir,d=be.resolve(p,`${i}`);ge.writeFileSync(d,l,"utf8")}},Ct=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});if(0!==xe.exec("prettier --write src/**/* bin/* *.{js,json,yaml,html} --no-error-on-unmatched-pattern",{cwd:o}).code)throw new Error("Couldnt format files.")},It=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Creating .d.ts"});if(0!==ke.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},Et=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==je.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},Nt=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==ve.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},Ft=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:a}=e;if(!0===i.enabled)if("lib"===i.name)await it({...e});else if("red"===i.name)await nt({...e});else if("npm"===i.name)await ot({...e});else if("gcs"===i.name)await tt({...e});else if("gitlab"===i.name)await et({...e});else if("macos-app"===i.name)await st({...e});else if("ios-app"===i.name)await at({...e});else if("electron"===i.name)await rt({...e});else if("webos"===i.name)await ct({...e});else{let e;if("nextjs"===i.name&&(e=lt),!e)return;await e({atom:t,target:i,onProgress:a,projectDir:n.projectDir,dependencies:o})}},{Atom:Ot}=g,At=N,Bt=v,qt=F,Rt=e,Mt=j,Jt=O,Lt=r,Kt=A;var Ut=class{#e;#t;#o;#n;#i;#a;#s;#r;#c;#l;#p;#d;#m;#f;#u;#y;#h;#w;#g;#b;constructor(e){this.#e=new bt,this.#t=e,this.#a=[],this.#s=[],this.#r={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#b={packageDependencies:this.#a,packageDevDependencies:this.#s,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Ot,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await wt(),this.#p=this.#t.buildId||gt(24),this.#b.buildId=this.#p,this.#u=this.#t.mode,this.#y=["all","deploy","build","file"].includes(this.#u),this.#h=["all","deploy","build"].includes(this.#u),this.#w=["all","deploy"].includes(this.#u),this.#g=["all","deploy","build","file","bpmn"].includes(this.#u),this.#m=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#f=(await Rt({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await xt(this.#b),await kt(this.#b),await this.transformWorkflow({workflow:this.#n});const e=await this.initNodeTree({workflow:this.#n});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#a}),await this.resolveNodeTree({root:e}),this.#l=e}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#c=await this.#e.init({config:this.#f}))}async initWorkflow(){const e=this.#t.id;this.#o=this.#t.project?.workflowAtom||await Ot.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await Lt({content:this.#o.doc.content})).parsed:this.#o.doc.content;let t=this.#o.doc.bundleName;t=t||(this.#o.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#o.doc.bundleName=t,this.#o.type=this.#o.type||"workflow",this.#b.atom=this.#o}async initDependencies(){this.#a.push({package:"eventemitter3",version:"^4.0"}),this.#a.push({package:"get-value",version:"^3.0"}),this.#a.push({package:"set-value",version:"^4.1"}),this.#o.doc.features.form_enabled?(this.#a.push({package:"react",version:"^18.2"}),this.#a.push({package:"react-dom",version:"^18.2"}),this.#a.push({package:"@flownet/react-app",version:"^0.1"}),this.#a.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#a.push({package:"yargs",version:"^17"}),this.#a.push({package:"chalk",version:"^4"})}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir;let o;const n=["node_modules"];if(pt.existsSync(e)&&pt.readdirSync(e).forEach((t=>{n.includes(t)||(o=ft.rm("-rf",dt.join(e,t)))})),o=ft.exec(`mkdir -p ${e}`),0!==o.code)throw new Error("Couldnt create workflow dir.");if(o=ft.exec(`mkdir ${e}/src`),0!==o.code)throw new Error("Couldnt create workflow/src dir.");if(o=ft.exec(`cp -a ${t} ${e}/src`),0!==o.code)throw new Error("Couldnt create workflow/src/core dir.");if(o=ft.exec(`mkdir -p ${e}/src/default/blocks`),0!==o.code)throw new Error("Couldnt create workflow/src/default/blocks dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#i=ut.configure(e,{watch:!1,dev:!0}),this.#b.njEnv=this.#i}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,o]=Object.entries(e)[0];if(o.hasOwnProperty("onerror")){const{onerror:n,...i}=o;e[t]={try:i,except:n}}if(e[t].hasOwnProperty("steps")){const o=e[t].steps;if(!Array.isArray(o))throw new Error("Steps must be an array.");e[t].steps=o.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),o={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#o}};t.forEach((t=>{const n={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:o,definition:e[t],index:o.childs.length,depth:o.depth+1,context:{},blockAutoJumpToParent:!0};o.childs.push(n)}));for await(const e of o.childs)await this.initNode({node:e});return o}async initNode({node:e}){if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except"))await this.initBlockTypeTryExcept({node:e});else if(e.definition.hasOwnProperty("for"))await this.initBlockTypeFor({node:e});else if(e.definition.hasOwnProperty("switch"))await this.initBlockTypeSwitch({node:e});else if(e.definition.hasOwnProperty("parallel"))await this.initBlockTypeParallel({node:e});else if(e.definition.hasOwnProperty("raise"))await this.initBlockTypeRaise({node:e});else if(e.definition.hasOwnProperty("return"))await this.initBlockTypeReturn({node:e});else if(e.definition.hasOwnProperty("assign"))await this.initBlockTypeAssign({node:e});else if(e.definition.hasOwnProperty("call"))await this.initBlockTypeCall({node:e});else if(e.definition.hasOwnProperty("form"))await this.initBlockTypeForm({node:e});else if(e.definition.hasOwnProperty("shell"))await this.initBlockTypeShell({node:e});else if(e.definition.hasOwnProperty("config"))await this.initBlockTypeConfig({node:e});else if(e.definition.hasOwnProperty("yaml"))await this.initBlockTypeYaml({node:e});else if(e.definition.hasOwnProperty("operation"))await this.initBlockTypeOperation({node:e});else if(e.definition.hasOwnProperty("steps"))await this.initBlockTypeSteps({node:e});else{if(!e.definition.hasOwnProperty("next"))throw new Error("Undefined step type.");await this.initBlockTypeJump({node:e})}}async initBlockTypeTryExcept({node:e}){if(e.type="tryexcept",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!0,e.definition.try){const t="try",o={name:t,childs:[],parent:e,definition:e.definition[t],index:e.childs.length,context:{}};e.childs.push(o),await this.initNode({node:o})}if(e.definition.except){const t="except",o={name:t,childs:[],parent:e,definition:e.definition[t],index:e.childs.length,context:{}};e.childs.push(o),await this.initNode({node:o})}}async initBlockTypeSwitch({node:e}){e.type="switch",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let t=0;t<e.definition.switch.length;t++){const o=e.definition.switch[t],n={name:`${t}`,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(n),o.hasOwnProperty("steps")?await this.initNode({node:n}):(n.depth=e.depth+1,n.type="jump")}}async initBlockTypeFor({node:e}){e.type="for",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1;for(let t=0;t<e.definition.for.steps.length;t++){const o=e.definition.for.steps[t],n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],index:e.childs.length,context:{}};e.childs.push(i),await this.initNode({node:i})}}async initBlockTypeSteps({node:e}){e.type||(e.type="steps");const t=e.definition.steps||[];for await(const o of t){const t=Object.keys(o)[0],n={name:t,childs:[],parent:e,definition:o[t],index:e.childs.length,context:{}};e.childs.push(n),await this.initNode({node:n})}}async initBlockTypeAssign({node:e}){e.type="assign"}async initBlockTypeCall({node:e}){e.type="call";for(let t=0;t<e.definition.modules?.length;t++){const o=e.definition.modules[t],n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],module:!0,blockAutoJumpToParent:!0,index:e.childs.length,context:{}};e.childs.push(i),await this.initNode({node:i})}}async initBlockTypeForm({node:e}){e.type="form";for(let t=0;t<e.definition.modules?.length;t++){const o=e.definition.modules[t],n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],module:!0,blockAutoJumpToParent:!0,index:e.childs.length,context:{}};e.childs.push(i),await this.initNode({node:i})}}async initBlockTypeReturn({node:e}){e.type="return"}async initBlockTypeRaise({node:e}){e.type="raise"}async initBlockTypeJump({node:e}){e.type="jump"}async initBlockTypeOperation({node:e}){e.type="operation"}async initBlockTypeParallel({node:e}){e.type="parallel"}async initBlockTypeShell({node:e}){const t="shell",o=e.definition,n=typeof o[t];if("string"!==n&&"object"!==n)throw new Error(`Unsupported ${t} usage`);o.call="npm:@fnet/shell",o.args="string"===n?{cmd:o[t]}:o[t],delete o[t],await this.initBlockTypeCall({node:e})}async initBlockTypeConfig({node:e}){const t="config",o=e.definition,n=typeof o[t];if("string"!==n&&"object"!==n)throw new Error(`Unsupported ${t} usage`);o.call="npm:@fnet/config",o.args="string"===n?{name:o[t]}:o[t],delete o[t],await this.initBlockTypeCall({node:e})}async initBlockTypeYaml({node:e}){const t="yaml",o=e.definition,n=typeof o[t];if("string"!==n&&"object"!==n)throw new Error(`Unsupported ${t} usage`);o.call="npm:@fnet/yaml",o.args="string"===n?{file:o[t]}:o[t],delete o[t],await this.initBlockTypeCall({node:e})}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const o of e.childs)await this.initNodeIndex({node:o,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const o=dt.join(e.parent.indexKey,e.name);e.indexKey=o,t[o]=e;const n=[];let i=e;for(;i?.parent;)n.push(i.index),i=i.parent;n.reverse(),e.codeKey=`B_${n.join("_")}_${e.type}`,e.pathKey=`${n.join(".")}`,e.typeId=gt(24);for await(const o of e.childs)await this.initNodeIndex({node:o,index:t})}async initNodeCalls({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"call"===n.type&&o.push(n)}return e.context.calls=o,o}async initNodeCallLibs({root:e}){const t=[],o=e.context.calls;for await(const e of o){const o=e.definition.call,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.call,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"form"===n.type&&o.push(n)}return e.context.forms=o,o}async initNodeFormLibs({root:e}){const t=[],o=e.context.forms;for await(const e of o){const o=e.definition.form,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.form,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const o=e.filter((e=>"atom"===e.type));for(let e=0;e<o.length;e++){const n=o[e],i=await this.findAtomLibrary({url:n.name});n.atom=i;const a=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));a?.forEach((e=>{const o=t.find((t=>t.package===e.package));o?"string"==typeof e.path?(o.path||[]).some((t=>t===e.path))||(o.path=o.path||[],o.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(o.path||[]).some((t=>t===e))||(o.path=o.path||[],o.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=At({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#m),"ac:"===t.protocol){const o=t.pathname.split("/");if(1===o.length)return await Ot.first({where:{name:e,parent_id:this.#f.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await Ot.first({where:{name:o[0],parent_id:this.#f.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Ot.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=dt.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await Mt({file:e,recursive:!0}),i=!0===this.#o.doc.features.all_parsed_imports?n.all:n.required;for await(const e of i){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=(await Bt({name:e.package,groupBy:{minor:!0}}))[0][0];o.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:o},protocol:t.protocol}}if("npm:"===t.protocol){const e=(await Bt({name:t.pathname,groupBy:{minor:!0}}))[0][0];return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:[{package:t.pathname,version:`^${e}`,type:"npm"}]},protocol:t.protocol}}}}resolveNextBlock({node:e}){const t=e.definition;if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let o=e.parent;for(;o.parent;){const n=o.childs.find((e=>e.name===t.next));if(n){e.context.next=n;break}o=o.parent}}else{if(!0===e.module)return;let t=e.parent,o=e.index+1;for(;t.parent;){if(t.blockAutoJumpToParent&&!0===t.blockAutoJumpToSibling){if(!0===t.blockAutoJumpToParent)break;o=t.index+1,t=t.parent;continue}const n=t.childs.find((e=>e.index===o));if(n){e.context.next=n;break}if(!0===t.blockAutoJumpToParent)break;o=t.index+1,t=t.parent}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=yt(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const o=t.params[e];if("string"==typeof o)t.params[e]={key:o,hasDefault:!1};else{const n=Object.keys(o)[0];t.params[e]={key:n,hasDefault:!0,default:o[n]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){"assign"===e.type?await this.resolveTypeAssign({node:e}):"return"===e.type?await this.resolveTypeReturn({node:e}):"call"===e.type?await this.resolveTypeCall({node:e}):"form"===e.type?await this.resolveTypeForm({node:e}):"raise"===e.type?await this.resolveTypeRaise({node:e}):"switch"===e.type?await this.resolveTypeSwitch({node:e}):"jump"===e.type?await this.resolveTypeJump({node:e}):"tryexcept"===e.type?await this.resolveTypeTryExcept({node:e}):"for"===e.type?await this.resolveTypeFor({node:e}):"operation"===e.type?await this.resolveTypeOperation({node:e}):"steps"===e.type&&await this.resolveTypeSteps({node:e});for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeAssign({node:e}){e.context.transform=yt(e.definition);const t=e.context.transform;for(let e=0;e<t.assign?.length;e++){let o=t.assign[e],n=Object.keys(o)[0],i=o[n],a={key:await this.transformExpression(n),value:await this.transformExpression(i)};t.assign[e]=a}await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeSteps({node:e}){e.context.next=e.childs[0]}async resolveTypeReturn({node:e}){e.context.transform=e.context.transform||yt(e.definition);const t=e.context.transform;t.return=await this.transformExpression(t.return),await this.resolveTypeCommon({node:e})}async resolveTypeCall({node:e}){e.context.transform=e.context.transform||yt(e.definition);const t=e.context.transform;t.args&&(t.args=await this.transformExpression(t.args)),t.result&&(t.result=await this.transformExpression(t.result));const o=e.workflow.parent;e.context.lib=o.context.libs.find((e=>e.name===t.call)),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeForm({node:e}){e.context.transform=e.context.transform||yt(e.definition);const t=e.context.transform;t.props&&(t.props=await this.transformExpression(t.props));const o=e.workflow.parent;e.context.lib=o.context.libs.find((e=>e.name===t.form)),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeRaise({node:e}){e.context.transform=e.context.transform||yt(e.definition);const t=e.context.transform;t.raise=await this.transformExpression(t.raise),await this.resolveTypeCommon({node:e})}async resolveTypeSwitch({node:e}){e.context.transform=e.context.transform||yt(e.definition),e.context.transform;for(const t of e.childs)t.context.transform=t.context.transform||yt(t.definition),t.context.transform.condition=await this.transformExpression(t.definition.condition);await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeJump({node:e}){e.context.transform=e.context.transform||yt(e.definition);const t=e.context.transform;t.next=await this.transformExpression(t.next),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeTryExcept({node:e}){if(e.context.transform=e.context.transform||yt(e.definition),e.context.transform,e.context.try=e.childs.find((e=>"try"===e.name)),e.context.except=e.childs.find((e=>"except"===e.name)),e.context.except){const t=e.context.except;t.context.transform=t.context.transform||yt(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeFor({node:e}){e.context.transform=e.context.transform||yt(e.definition);e.context.transform.for.in=await this.transformExpression(e.definition.for.in),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeOperation({node:e}){e.context.transform=e.context.transform||yt(e.definition),await this.resolveTypeCommon({node:e})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:e}){await this.setInProgress({message:"Creating external lib files."}),this.#o.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const o=t[e].atom,n=this.#t.projectDir;if("local:"===o.protocol){const e=dt.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=dt.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!pt.existsSync(e)){pt.mkdirSync(dt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",pt.writeFileSync(e,t,"utf8")}o.relativePath=t,this.#o.typesDir=`./types/${dt.basename(n)}/src`}else if("npm:"===o.protocol)o.relativePath=o.name;else{const e=`${n}/src/libs/${o.id}.js`,t=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;pt.writeFileSync(e,t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=ut.compile(pt.readFileSync(dt.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=dt.resolve(n,"src/default/index.js");pt.writeFileSync(i,o,"utf8")}async createNodeTree({root:e}){await this.setInProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:e}){const t=this.#t.templateDir,o=ut.compile(pt.readFileSync(dt.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=dt.resolve(n,`src/default/${e.codeKey}.js`);pt.writeFileSync(i,o,"utf8");for await(const t of e.childs)await this.createType({node:t})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:e}){let t=this.#r[e.type];if(t)return t;const o=this.#t.templateDir;return t=ut.compile(pt.readFileSync(dt.resolve(o,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#i),this.#r[e.type]=t,t}createStepFile({node:e}){const t=this.#t.projectDir,o=`${e.codeKey}.js`,n=dt.resolve(t,`src/default/blocks/${o}`);pt.writeFileSync(n,e.context.render,"utf8"),e.context.fileName=o,e.context.filePath=n}async transformExpression(e){let t=await this.transformValue(e);return t=JSON.stringify(t),t=this.replaceSpecialPattern(t),t}async transformValue(e){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=await this.transformValue(e[t]);else if(ht(e)){const t=Object.keys(e);for(let o=0;o<t.length;o++)e[t[o]]=await this.transformValue(e[t[o]])}else if("string"==typeof e){const t=await Jt({expression:e});if(t){const{processor:o,statement:n}=t;switch(o){case"v":e=`$::v.${n}::`;break;case"e":e=`$::${n}::`;break;case"m":e=`$::closure.module['${n}']::`;break;case"f":e=`$::closure.form.${n}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const e="flow.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:o,...n}=this.#o.doc,i={content:mt.dump(n)},a=this.#t.templateDir,s=ut.compile(pt.readFileSync(dt.resolve(a,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=dt.resolve(r,`${e}`);pt.writeFileSync(c,s,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:mt.dump(this.#n)},n=this.#t.templateDir,i=ut.compile(pt.readFileSync(dt.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),a=this.#t.projectDir,s=dt.resolve(a,`${e}`);pt.writeFileSync(s,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=ft.exec("prettier --write .",{cwd:dt.resolve(e,"src")});if(0!==t.code)throw new Error(t.stderr)}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&await o.save()}}else if(this.#o.id){const e=await Ot.list({type:"workflow.deploy",parent_id:this.#o.id});for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&(o=await Ot.update(o,{id:o.id}))}}}async deployProject(e){const{deploymentProject:t}=e,o=t.doc.targets;for(let e=0;e<o.length;e++){const n=o[e];await Ft({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await Ot.first({name:t.params.name,parent_id:this.#f.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await Ot.update(n,{id:n.id})):n=await Ot.create({parent_id:this.#f.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:o.version}]}})}async setInProgress({message:e}){console.log(Kt.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#g&&!this.#y)return await this.createNetwork();try{const e=this.#g?await qt({root:this.#l}):void 0;this.#y&&(await this.initWorkflowDir(),await this.initNunjucks(),this.#g&&pt.writeFileSync(dt.resolve(this.#t.projectDir,"./project.bpmn"),e.diagramXML,"utf8"),await this.createAtomLibFiles({root:this.#l}),await this.createEngine({root:this.#l}),await this.createNodeTree({root:this.#l}),await this.createProjectYaml(),await this.createProjectMainYaml(),await $t(this.#b),await St(this.#b),await Pt(this.#b),await Tt(this.#b),await _t(this.#b),await jt(this.#b),await Dt(this.#b),await vt(this.#b),await Ct(this.#b),await It(this.#b),this.#h&&(await Et(this.#b),await Nt(this.#b),this.#w&&await this.deploy())),await this._cache_set(this.#d,{status:"COMPLETED",data:{network:e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await qt({root:this.#l});await this._cache_set(this.#d,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}};const Wt=l,zt=p;var Gt=function({baseDir:e=__dirname}){let t=e;for(;t!==zt.parse(t).root;){const e=zt.join(t,"node_modules");if(Wt.existsSync(e))return e;t=zt.dirname(t)}return null};const Xt=process.cwd();e({name:["redis"],dir:Xt,optional:!0});const Yt=t,Ht=o,{hideBin:Vt}=n,Zt=i,Qt=a,eo=s,to=r,oo=c,no=Ut,io=Gt({baseDir:__dirname});async function ao(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:Yt.resolve(Xt,`./.output/${e.id}`),templateDir:Yt.resolve(io,"./@flownet/template-node-workflow/default"),templateCommonDir:Yt.resolve(io,"./@flownet/template-node-common/default"),coreDir:Yt.resolve(io,"./@flownet/template-node-workflow/core")}}{const t=await async function(e){const t=Yt.resolve(Xt,"flow.yaml");if(!Zt.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const o=Zt.readFileSync(t,"utf8"),{parsed:n}=await to({content:o}),i=Yt.dirname(t),a=Yt.resolve(i,"flow.main.yaml");if(!Zt.existsSync(t))throw new Error("flow.main.yaml file not found in current directory.");const s=Zt.readFileSync(a,"utf8"),{parsed:r}=await to({content:s}),c={workflowAtom:{doc:{...n,"content-type":"yaml",content:s}},projectDir:i,projectFilePath:t,projectFileContent:o,projectFileParsed:n,projectMainFilePath:a,projectMainFileContent:s,projectMainFileParsed:r},l=Yt.resolve(i,"flow.devops.yaml");if(Zt.existsSync(l)){const e=Zt.readFileSync(l,"utf8"),t=Qt.parse(e);c.devops={filePath:l,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{Zt.writeFileSync(c.devops.filePath,Qt.stringify(c.devops.doc))}}}const p=Yt.resolve(i,"readme.md");if(Zt.existsSync(p)){const e=Zt.readFileSync(p,"utf8");c.readme={filePath:p,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return c}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Yt.resolve(io,"./@flownet/template-node-workflow/default"),templateCommonDir:Yt.resolve(io,"./@flownet/template-node-common/default"),coreDir:Yt.resolve(io,"./@flownet/template-node-workflow/core"),projectDir:Yt.resolve(t.projectDir,"./.workspace"),projectSrcDir:Yt.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${io}/.bin:${process.env.PATH}`,Ht(Vt(process.argv)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"})),(async e=>{try{const t=Yt.resolve(io,"./@flownet/template-node-workflow/project"),o=Yt.resolve(Xt,e.name);Zt.existsSync(o)||Zt.mkdirSync(o),await oo({dir:t,outDir:o,context:e});let n=eo.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(eo.which("git")&&(n=eo.exec("git init",{cwd:o}),0!==n.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 net project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",alias:"m",default:"build",choices:["all","file","build","deploy","bpmn"]})),(async e=>{try{const t=await ao(e),o=new no(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow net project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await ao({...e,mode:"all"}),o=new no(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await ao({...e,mode:"file"}),o=new no(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ao(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),a=`npm ${n.join(" ")} ${i}`;eo.exec(a,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ao(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),a=`node ${n.join(" ")} ${i}`;eo.exec(a,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ao(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),a=`npm run serve ${n.join(" ")} ${i}`;eo.exec(a,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ao(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),a=`npm run watch ${n.join(" ")} ${i}`;eo.exec(a,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ao(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),a=`npm run app ${n.join(" ")} ${i}`;eo.exec(a,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ao(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),a=`npm run cli ${n.join(" ")} ${i}`;eo.exec(a,{cwd:o}),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,s=require("@
|
|
2
|
+
"use strict";var e,t,s=require("@fnet/config"),i=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"),w=require("keycloak-connect"),p=require("qs");function _(){if(t)return e;t=1;const s=i,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=s.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.18.4",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"},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.13.2","@flownet/template-node-library":"^0.13.1","@flownet/template-node-workflow":"^0.13.1","@fnet/config":"^0.2.5","@fnet/expression":"^0.1.9","@fnet/shell":"^0.1.12","@fnet/yaml":"^0.1.9","@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",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 v=process.cwd(),g=s;(async function(){await g({name:["server","redis"],dir:v,optional:!0});const e=await _()();if(!e)throw new Error("Redis is offline.");const t=k,s=n,i=o,r=l,j=function(){if(b)return f;b=1;const e=n,t=d,s=c,{nanoid:i}=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,s){await this._redis_client.SETEX(e,s||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 s=e.body.id;if(!s)throw new Error("Build Id is not defined.");const i="BUILD:"+s;this._cache_get(i).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=i(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=all`;return s.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=i(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=bpmn`;s.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,s=c,{nanoid:i}=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,s){await this._redis_client.SETEX(e,s||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 s=e.body.id;if(!s)throw new Error("Build Id is not defined.");const i="BUILD:"+s;this._cache_get(i).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=i(24),o=`node ${t.resolve(__dirname,"builder/lib-cli.js")} build --id=${r} --buildId=${n} --mode=all}`;return s.exec(o,{async:!0,cwd:this.#e}),{id:n}}}}(),x=u,q=h,S=new(0,q.MemoryStore),I=new w({store:S}),R=s(),T=p;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(i()),R.use(s.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:v,redisClient:e}).join("/v1",R),new E({keycloak:I,wdir:v,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.18.
|
|
3
|
+
"version": "0.18.4",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist"
|
|
6
6
|
],
|
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
"deploy": "npm install && npm run build && npm publish --access public",
|
|
11
11
|
"watch": "rollup --config --watch --sourcemap --bundleConfigAsCjs --environment DEVELOPMENT"
|
|
12
12
|
},
|
|
13
|
+
"license": "MIT",
|
|
13
14
|
"dependencies": {
|
|
14
15
|
"@flownet/lib-atom-api-js": "^0.1.10",
|
|
15
16
|
"@flownet/lib-bpmn-from-flow": "^0.1.8",
|
|
16
17
|
"@flownet/lib-is-redis-online": "^0.1.13",
|
|
17
18
|
"@flownet/lib-list-npm-versions": "^0.1.31",
|
|
18
|
-
"@flownet/lib-load-fnet-config": "^0.2.4",
|
|
19
19
|
"@flownet/lib-parse-imports-js": "^0.2.1",
|
|
20
20
|
"@flownet/lib-parse-node-url": "^0.1.16",
|
|
21
21
|
"@flownet/lib-pick-npm-versions": "^0.1.12",
|
|
@@ -27,12 +27,13 @@
|
|
|
27
27
|
"@flownet/lib-to-nextjs": "^0.1.12",
|
|
28
28
|
"@flownet/lib-to-webos": "^0.2.8",
|
|
29
29
|
"@flownet/lib-upload-files-to-gcs": "^0.2.2",
|
|
30
|
-
"@flownet/template-node-common": "^0.13.
|
|
30
|
+
"@flownet/template-node-common": "^0.13.2",
|
|
31
31
|
"@flownet/template-node-library": "^0.13.1",
|
|
32
32
|
"@flownet/template-node-workflow": "^0.13.1",
|
|
33
|
-
"@fnet/
|
|
34
|
-
"@fnet/
|
|
35
|
-
"@fnet/
|
|
33
|
+
"@fnet/config": "^0.2.5",
|
|
34
|
+
"@fnet/expression": "^0.1.9",
|
|
35
|
+
"@fnet/shell": "^0.1.12",
|
|
36
|
+
"@fnet/yaml": "^0.1.9",
|
|
36
37
|
"@node-red/util": "^3.1.0",
|
|
37
38
|
"axios": "^1.5.0",
|
|
38
39
|
"chalk": "^4.1.2",
|
package/readme.md
CHANGED
|
@@ -7,7 +7,7 @@ This tool is in its early stages of development. Changes in its usage are highly
|
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
|
|
10
|
-
The `@fnet/cli` is a command-line interface tool designed to facilitate the development and deployment of flow-based projects within the
|
|
10
|
+
The `@fnet/cli` is a command-line interface tool designed to facilitate the development and deployment of flow-based projects within the fnet ecosystem. It simplifies the processes of creating, managing, and deploying flow-based projects, acting as a bridge between developers and the fnet platform.
|
|
11
11
|
|
|
12
12
|
## Prerequisites
|
|
13
13
|
|