@fnet/cli 0.27.2 → 0.27.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.
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e=require("child_process"),t=require("@fnet/config"),a=require("path"),o=require("yargs/yargs"),s=require("yargs/helpers"),i=require("fs"),r=require("yaml"),n=require("shelljs"),c=require("@fnet/yaml"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),m=require("js-yaml"),u=require("nunjucks"),g=require("redis"),y=require("@flownet/lib-is-redis-online"),f=require("nanoid"),b=require("@flownet/lib-atom-api-js"),h=require("axios"),w=require("qs"),_=require("lodash.merge"),v=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),x=require("@fnet/shell"),k=require("semver"),D=require("node:os"),S=require("@node-red/util"),I=require("@flownet/lib-to-ios-app"),P=require("@flownet/lib-to-macos-app"),C=require("@flownet/lib-to-electron"),$=require("@flownet/lib-to-webos"),E=require("@flownet/lib-to-nextjs"),A=require("lodash.clonedeep"),F=require("@flownet/lib-parse-node-url"),T=require("@flownet/lib-pick-npm-versions"),q=require("chalk");const z=g,O=y;const{Api:R}=b,N=h.default,L=w;const M=_,B=i,J=a,K=v;const U=j;const G=p,X=d,H=l;const Y=u,W=p,Z=d,Q=v,V=j;const ee=p,te=d,ae=l;const oe=p,se=d,ie=u,re=v;const ne=p,ce=d,le=u;const pe=p,de=d,me=u;const ue=p,ge=d,ye=u;const fe=u,be=p,he=d;const we=n;const _e=n;const ve=n;const je=n;const xe=x,ke=t;const De=p,Se=d,Ie=k,Pe=x,Ce=t;const $e=p,Ee=d,Ae=k,Fe=n,Te=t;const qe=p,ze=d,Oe=D,Re=u,Ne=S,Le=t;const Me=i,Be=a,Je=t;const Ke=I;const Ue=P;const Ge=C;const Xe=$;const He=E,Ye=A,We=_,Ze=k,Qe=d;const Ve=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:s})=>{await e({message:"Deploying it as gitlab project."});const i=t.projectDir;let r="fnet-to-gitlab";const n=o.params.config||"gitlab",c=await ke({name:n,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${n}`);const{data:l}=c.data;r+=` --projectGroupId=${l.projectGroupId}`,r+=` --projectPath='${i}'`,r+=` --projectName='${o.params.name}'`,r+=` --projectBranch='${o.params.branch||"main"}'`,r+=` --gitlabHost='${l.gitlabHost}'`,r+=` --gitlabToken='${l.gitlabToken}'`,r+=` --gitlabUsername='${l.gitlabUsername}'`,r+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await xe({cmd:r}),a.isDirty=!0)},et=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:s})=>{await e({message:"Deploying it as gcs package."});const i=t.projectDir,r=Se.resolve(i,"package.json"),n=De.readFileSync(r),c=JSON.parse(n);c.name=o.params.name,c.version=Ie.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,De.writeFileSync(r,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Ce({name:o.params.config||t.gcsConfig||"gcs",dir:t.projectDir});let d="fnet-upload-files-to-gcs";d+=` --projectId='${p.env.GCS_PROJECT_ID}'`,d+=` --bucketName='${p.env.GCS_BUCKET_NAME}'`,d+=` --keyFilename='${Se.resolve(Se.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${i}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --headers.cacheControl='public, max-age=31536000, immutable'",d+=" --verbose",p.env.DOMAIN&&(d+=` --domain='${p.env.DOMAIN}'`),!0===o.dryRun&&(d+=" --dryRun"),await Pe({cmd:d}),De.writeFileSync(r,n),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=c.version,await s({target:o,packageJSON:c}))},tt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s})=>{await t({message:"Deploying it as npm package."});const i=a.projectDir,r=Ee.resolve(i,"package.json"),n=$e.readFileSync(r),c=JSON.parse(n);c.name=s.params.name,c.version=Ae.inc(s.params.version,"patch");const l=s.params.bin?.name||s.params.bin;!1!==s.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},$e.writeFileSync(r,JSON.stringify(c,null,"\t"));const p=(await Te({name:a.npmConfig||"npm",dir:a.projectDir}))?.data;if($e.writeFileSync(Ee.resolve(i,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==Fe.exec("npm publish --access public",{cwd:i}).code)throw new Error("Couldnt publish to npm");$e.writeFileSync(r,n),o.isDirty=!0,s.params.version=c.version},at=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i,packageDependencies:r,njEnv:n})=>{await t({message:"Deploying it as node-red flow."});const c=a.projectDir,l=a.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===s.deploy.template)d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||Ne.util.generateId(),label:`${p}/${e.id?e.id:Oe.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:Ne.util.generateId(),name:e.doc.name,initialize:{content:qe.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Ne.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:Ne.util.generateId()}}};else if("cronjob"===s.deploy.template){let t=s.params?.schedules?cloneDeep(s.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||Ne.util.generateId(),label:`${p}/${e.id?e.id:Oe.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:Ne.util.generateId(),name:e.doc.name,initialize:{content:qe.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Ne.util.generateId(),schedules:t},debug:{id:Ne.util.generateId()}}}}else{if("http"!==s.deploy.template)return;d={atom:e,packageDependencies:r,red:{tab:{id:s.deploy.id||Ne.util.generateId(),label:`${p}/${e.id?e.id:Oe.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:Ne.util.generateId(),name:e.doc.name,initialize:{content:qe.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Ne.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:Ne.util.generateId()},debug:{id:Ne.util.generateId()}}}}let m=Re.compile(qe.readFileSync(ze.resolve(l,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),n).render(d);if(qe.writeFileSync(ze.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=(await Le({name:a.redConfig||"red",dir:a.projectDir}))?.data,g=s.deploy.url||u.env.RED_URL,y={};if(!1!==s.deploy.auth&&(y.Authorization="Bearer "+atomAccessToken),s.deploy.id)!0===s.actions?.delete?(await axios({method:"DELETE",url:`${g}/flow/${s.deploy.id}`,headers:y}),delete s.actions.delete,delete s.deploy.id,s.enabled=!1):await axios({method:"PUT",url:`${g}/flow/${s.deploy.id}`,data:m,headers:y});else{const e=await axios({method:"POST",url:`${g}/flow`,data:m,headers:y});s.deploy.id=e.data.id}},ot=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:s,deploymentProject:i,deploymentProjectTarget:r})=>{await a({message:"Deploying it as workflow lib."});const n=(await Je({name:"atom",dir:o.projectDir}))?.data;let c,l,p,d=r.deploy.name.split("/");if(1===d.length)l=n.env.ATOM_LIBRARIES_ID,p=r.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:n.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===r.dryRun)return;if(i.isDirty=!0,r.deploy.id){if(c=await t.get({id:r.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;r.deploy.id=c.id}const m=o.projectDir;c.doc.contents=[{content:Me.readFileSync(Be.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Me.readFileSync(Be.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Me.readFileSync(Be.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=s,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},st=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i,registerToPackageManager:r})=>{await t({message:"Deploying it as ios app package."});const n=a.projectDir;if(!0===s.dryRun)return;const c={projectDir:n,dest:n,atom:e,params:s.params};await Ke(c),o.isDirty=!0},it=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i})=>{await t({message:"Deploying it as macos app package."});const r=a.projectDir;if(!0===s.dryRun)return;const n={projectDir:r,dest:r,atom:e,params:s.params};await Ue(n),o.isDirty=!0},rt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i})=>{await t({message:"Deploying it as electron package."});const r=a.projectDir;if(!0===s.dryRun)return;const n={src:r,dest:r,atom:e,params:s.params};await Ge(n),o.isDirty=!0},nt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s})=>{await t({message:"Deploying it as webos package."});const i=a.projectDir;if(!0===s.dryRun)return;const r={src:i,dest:i,atom:e,params:s.params};await Xe(r),o.isDirty=!0},ct=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s})=>{a&&await a({message:"Deploying it as nextjs package."});t.params=We({name:"nextjs-app",version:"0.1.0"},t.params);const i=Ze.inc(t.params.version,"patch");t.params.version=i;const r=Ye(t);r.params.dependencies=Ye(s);const n={atom:e,target:r.params,projectDir:o,renderDir:Qe.resolve(o,"nextjs")};return{deployer:await He(n)}};const lt=p,pt=d,dt=m,mt=n,ut=u,gt=async()=>{if(!await O({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=z.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:yt}=f,ft=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(R.set_api_url(e.data.url),t)return R.set_req_token(t),void a(t);N({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:L.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{R.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{R.set_req_token(),o(e)}))}))}},bt=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const a=e.doc.features;a.hasOwnProperty("all_parsed_imports")||(a.all_parsed_imports=!0);const o=J.resolve(t.project.projectDir),s=J.resolve(o,"./app/index.js");if(B.existsSync(s)){let e=await K({file:s,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.app_uses_jsx=t,a.app_has_entry=!0,e=await K({file:s}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.app_entry_uses_jsx=t}const i=J.resolve(o,"./cli/index.js");if(B.existsSync(i)){let e=await K({file:i,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.cli_uses_jsx=t,a.cli_has_entry=!0,e=await K({file:i}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.cli_entry_uses_jsx=t}if("workflow.lib"===e.type){const e=J.resolve(o,"./src/index.js");if(B.existsSync(e)){let t=await K({file:e,recursive:!0}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));a.src_uses_jsx=o,a.src_has_entry=!0,t=await K({file:e}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),a.src_entry_uses_jsx=o}}const r=!0===a.app_has_entry||!0===a.src_uses_jsx,n=!0===a.cli_has_entry||!0===a.src_uses_jsx;a.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===a.form||!0===a.form?.enabled,a.multiple_enabled=a.multiple_enabled||!0===a.multiple||!0===a.multiple?.enabled,!1===a.app?a.app={enabled:!1}:!0===a.app?a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:r}:a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:r,...a.app||{}},a.app.enabled=!0===a.app.enabled&&(!0===e.doc.features.form_enabled||!0===a.app.extend||!0===a.app.enabled),a.app.format=a.app.format||"esm",a.app.folder=a.app.folder||a.app.format||"default",!1===a.cli?a.cli={enabled:!1}:!0===a.cli?a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:n}:a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:n,...a.cli||{}},a.cli.enabled=!0===a.cli.enabled&&(!1===e.doc.features.form_enabled||!0===a.cli.extend||!0===a.cli.enabled),a.cli.format=a.cli.format||"esm",a.cli.folder=a.cli.folder||a.cli.folder||"esm";const c={cjs:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!0,string:!0},cjsx:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0,string:!0},esmx:{format:"esm",browser:!0,babel:!0,context:a.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0,string:!0},umd:{format:"umd",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1,string:!0}},l={};!0===a.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,babel_options:{targets:{chrome:"79"}}}),!0===a.app.enabled&&(a.app.dir=`./dist/app/${a.app.folder}`,c.app={format:a.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:a.app.dir,terser:!0,output_exports:!1===a.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:a.app.dir})),!0===a.cli.enabled&&(a.cli.dir=`./dist/cli/${a.cli.folder}`,c.cli={format:a.cli.format,context:"global",babel:!0===a.src_uses_jsx||!0===a.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:a.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===a.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${a.app.dir}`,files:["./dist/**/*"]};a.babel_options=a.babel_options||a.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},a.browsersync_options=M(p,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=M({},a.replace_options||a.replace?.options||{}),a.terser_options=M({},a.terser_options||a.terser?.options||{}),a.css_options=M({},a.css_options||a.css?.options||{}),a.wasm_options=M({},a.wasm_options||a.wasm?.options||{}),a.copy_options=M(l,a.copy_options||a.copy?.options||{}),a.json_options=M({},a.json_options||a.json?.options||{}),a.image_options=M({},a.image_options||a.image?.options||{}),a.analyzer_options=M({summaryOnly:!0,limit:12},a.analyzer_options||a.analyzer?.options||{}),a.visualizer_options=M({},a.visualizer_options||a.visualizer?.options||{}),a.string_options=M({},a.string_options||a.string?.options||{}),a.rollup=a.rollup||{},a.rollup_output=M(c,a.rollup_output||a.rollup?.output||{}),a.string_enabled=!0===a.string||a.string&&!1!==a.string?.enabled;const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==a.rollup[e]?(!0===a.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||a.babel_options,t.browsersync_options=M(a.browsersync_options,t.browsersync_options),t.replace_options=M(a.replace_options,t.replace_options),t.terser_options=M(a.terser_options,t.terser_options),t.css_options=M(a.css_options,t.css_options),t.wasm_options=M(a.wasm_options,t.wasm_options),t.copy_options=M(a.copy_options,t.copy_options),t.json_options=M(a.json_options,t.json_options),t.image_options=M(a.image_options,t.image_options),t.analyzer_options=M(a.analyzer_options,t.analyzer_options),t.visualizer_options=M(a.visualizer_options,t.visualizer_options),t.string_options=M(a.string_options,t.string_options),t.string=a.string_enabled&&t.string,a.form_enabled&&(t.babel=!0)):t.enabled=!1)}a.babel_enabled=d.some((e=>!0===a.rollup_output[e].babel)),a.browser_enabled=d.some((e=>!0===a.rollup_output[e].babel)),a.browsersync_enabled=d.some((e=>!0===a.rollup_output[e].browsersync)),a.browsersync_enabled=a.browsersync_enabled&&a.app.enabled,a.wasm_enabled=!0===a.wasm||a.wasm&&!1!==a.wasm?.enabled,a.css_enabled=!0===a.css||a.css&&!1!==a.css?.enabled,a.json_enabled=!0===a.json||a.json&&!1!==a.json?.enabled,a.terser_enabled=!0===a.terser||a.terser&&!1!==a.terser?.enabled,a.copy_enabled=a.app.enabled||a.copy_enabled||a.copy&&!1!==a.copy?.enabled,a.image_enabled=!0===a.image||a.image&&!1!==a.image?.enabled,a.analyzer_enabled=!0===a.analyzer||a.analyzer&&!1!==a.analyzer?.enabled,a.visualizer_enabled=!0===a.visualizer||a.visualizer&&!1!==a.visualizer?.enabled,a.dependency_auto_enabled=!1!==a.dependency_auto&&!1!==a.dependency_auto?.enabled,a.npm_install_flags=a.npm_install_flags||"",a.react_version=a.react_version||a.react?.version||18},ht=async({atom:e,packageDependencies:t,packageDevDependencies:a})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";a=`^${(await U({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),t.push({package:"chalk",version:"^4"}),a.push({package:"@babel/core",version:"^7.23"}),a.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),a.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),a.push({package:"@rollup/plugin-replace",version:"^5.0"}),a.push({package:"rollup",version:"^3.26"}),a.push({package:"rollup-plugin-delete",version:"^2.0"}),a.push({package:"rollup-plugin-dts",version:"^6.0"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),a.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6.0"}),a.push({package:"@babel/preset-env",version:"7.22"}),a.push({package:"@babel/preset-react",version:"7.22"})),e.doc.features.browsersync_enabled&&a.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&a.push({package:"@rollup/plugin-json",version:"^6.0"}),e.doc.features.terser_enabled&&a.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&a.push({package:"@rollup/plugin-wasm",version:"^6.1"}),e.doc.features.image_enabled&&a.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.analyzer_enabled&&a.push({package:"rollup-plugin-analyzer",version:"^3.3"}),e.doc.features.visualizer_enabled&&a.push({package:"rollup-plugin-visualizer",version:"^5.9"}),e.doc.features.string_enabled&&a.push({package:"rollup-plugin-string",version:"^3.0"}),e.doc.features.css_enabled){a.push({package:"rollup-plugin-postcss",version:"4.0"}),a.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":a.push({package:"postcss-import",version:"^15.1"});break;case"postcss-url":a.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":a.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":a.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":a.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&a.push({package:"rollup-plugin-copy",version:"^3.5"})},wt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const s={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o,ts:Date.now()},i=a.templateDir,r=X.resolve(a.projectDir,"src/app");G.existsSync(r)||G.mkdirSync(r,{recursive:!0}),await H({pattern:["index.html.njk","index.js.njk"],dir:X.resolve(i,"src/app"),outDir:r,context:s})},_t=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:s})=>{await s({message:"Creating package.json."});const i=a.find((e=>"react"===e.package)),r=a.find((e=>"react-dom"===e.package));i&&!r?a.push({package:"react-dom",version:i.version}):i&&r&&(r.version=i.version),i&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const n=[];!0===e.doc.features.app.enabled&&n.push(Z.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&n.push(Z.resolve(t.projectDir,"src/cli/index.js"));for await(const t of n){const s=t;if(!W.existsSync(s))throw new Error(`App file not found: ${s}`);const i=await Q({file:s,recursive:!0}),r=!0===e.doc.features.all_parsed_imports?i.all:i.required;for await(const e of r){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const t=(await V({name:e.package,groupBy:{minor:!0}}))[0][0];o.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}}const c={atom:e,packageDependencies:a,packageDevDependencies:o},l=t.templateCommonDir,p=Y.compile(W.readFileSync(Z.resolve(l,"package.json.njk"),"utf8"),Y.configure(l)).render(c),d=t.projectDir,m=Z.resolve(d,"package.json");W.writeFileSync(m,p,"utf8")},vt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const s={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o},i=a.templateDir,r=te.resolve(a.projectDir,"src/cli");ee.existsSync(r)||ee.mkdirSync(r,{recursive:!0}),await ae({pattern:["index.js.njk"],dir:te.resolve(i,"src/cli"),outDir:r,context:s})},jt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},i=se.resolve(a.projectDir,"src","default/index.js");if(!oe.existsSync(i))throw new Error(`Entry file not found: ${i}`);const r=(await re({file:i,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),n=e.doc.features.rollup_output,c=Object.keys(n);for(let e=0;e<c.length;e++){const t=n[c[e]];if(!0===t.browser&&r.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(r.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<r.length;e++){const a=r[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(r)}}const l=a.templateCommonDir,p=ie.compile(oe.readFileSync(se.resolve(l,"rollup.config.js.njk"),"utf8"),ie.configure(l)).render(s),d=a.projectDir,m=se.resolve(d,"rollup.config.js");oe.writeFileSync(m,p,"utf8")},xt=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const s={},i=e.doc.inputs||[],r=[];i.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&r.push(e);const t={};e.type&&(t.type=e.type),e.default&&(t.default=e.default),e.choices&&(t.choices=e.choices),(e.describe||e.description)&&(t.describe=e.describe||e.description),e.alias&&(t.alias=e.alias),!0===e.required&&(t.required=!0),!0===e.hidden&&(t.hidden=!0),!0===e.array&&(t.array=!0),!0===e.normalize&&(t.normalize=!0),e.nargs&&(t.nargs=e.nargs),s[e.name]=t}));const n={options:s,imports:r,atom:e},c=a.templateDir,l=le.compile(ne.readFileSync(ce.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),o).render(n),p=a.projectDir,d=ce.resolve(p,"src/default/to.yargs.js");ne.writeFileSync(d,l,"utf8")},kt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},i=a.templateCommonDir,r=me.compile(pe.readFileSync(de.resolve(i,".gitignore.njk"),"utf8"),me.configure(i)).render(s),n=a.projectDir,c=de.resolve(n,".gitignore");pe.writeFileSync(c,r,"utf8")},Dt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const s={atom:e,packageDependencies:o},i=a.templateCommonDir,r=ye.compile(ue.readFileSync(ge.resolve(i,"tsconfig.json.njk"),"utf8"),ye.configure(i)).render(s),n=a.projectDir,c=ge.resolve(n,"tsconfig.json");ue.writeFileSync(c,r,"utf8")},St=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const s="readme.md",i=`Creating ${s}`;if(await a({message:i}),t.project?.readme){const e={content:t.project.readme.doc.content},a=t.templateCommonDir,o=fe.compile(be.readFileSync(he.resolve(a,`${s}.njk`),"utf8"),fe.configure(a)).render(e),i=t.projectDir,r=he.resolve(i,`${s}`);be.writeFileSync(r,o,"utf8")}else if(e.id){const a=await o.first({type:"wiki",parent_id:e.id});if(!a||"markdown"!==a.doc?.["content-type"])return;const{content:i,...r}=a.doc,n={content:i},c=t.templateCommonDir,l=fe.compile(be.readFileSync(he.resolve(c,`${s}.njk`),"utf8"),fe.configure(c)).render(n),p=t.projectDir,d=he.resolve(p,`${s}`);be.writeFileSync(d,l,"utf8")}},It=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});if(0!==we.exec("prettier --write src/**/* bin/* *.{js,json,yaml,html} --no-error-on-unmatched-pattern",{cwd:a}).code)throw new Error("Couldnt format files.")},Pt=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Creating .d.ts"});if(0!==_e.exec("tsc",{cwd:a}).code)throw new Error("Couldnt create .d.ts files.")},Ct=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==ve.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},$t=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==je.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},Et=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:s,setInProgress:i}=e;if(!0===s.enabled)if("lib"===s.name)await ot({...e});else if("red"===s.name)await at({...e});else if("npm"===s.name)await tt({...e});else if("gcs"===s.name)await et({...e});else if("gitlab"===s.name)await Ve({...e});else if("macos-app"===s.name)await it({...e});else if("ios-app"===s.name)await st({...e});else if("electron"===s.name)await rt({...e});else if("webos"===s.name)await nt({...e});else{let e;if("nextjs"===s.name&&(e=ct),!e)return;await e({atom:t,target:s,onProgress:i,projectDir:o.projectDir,dependencies:a})}},{Atom:At}=b,Ft=F,Tt=t,qt=v,zt=T,Ot=q;var Rt=class{#e;#t;#a;#o;#s;#i;#r;#n;#c;#l;#p;#d;#m;#u;#g;#y;#f;constructor(e){this.#e=new ft,this.#t=e,this.#i=[],this.#r=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#f={packageDependencies:this.#i,packageDevDependencies:this.#r,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:At,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,a){this._redis_client&&await this._redis_client.SETEX(e,a||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await gt(),this.#c=this.#t.buildId||yt(24),this.#f.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#g=["all","deploy","build"].includes(this.#m),this.#y=["all","deploy"].includes(this.#m),this.#p=this.#t.protocol,this.#l="BUILD:"+this.#c,this.#d=(await Tt({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await bt(this.#f),await ht(this.#f),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#n=await this.#e.init({config:this.#d}),this.#f.atomAccessToken=this.#n)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await At.get({id:e});let t=this.#a.doc.bundleName;t=t||(this.#a.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#a.doc.bundleName=t,this.#a.type=this.#a.type||"workflow.lib",this.#f.atom=this.#a}async initLibraryDir(){const e=this.#t.projectDir;let t;const a=["node_modules"];if(lt.existsSync(e)&&lt.readdirSync(e).forEach((o=>{a.includes(o)||(t=mt.rm("-rf",pt.join(e,o)))})),t=mt.exec(`mkdir -p ${e}`),0!==t.code)throw new Error("Couldnt create workflow dir.");if(t=mt.exec(`mkdir ${e}/src`),0!==t.code)throw new Error("Couldnt create library/src dir.");if(t=mt.exec(`mkdir ${e}/src/default`),0!==t.code)throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=ut.configure(e,{watch:!1,dev:!0}),this.#f.njEnv=this.#o}async initLibs(){const e=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id}];this.#s=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#i})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],s=await this.findAtomLibrary({url:o.name});o.atom=s;const i=s.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));i?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=Ft({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#p),"ac:"===t.protocol){const a=t.pathname.split("/");if(1===a.length)return await At.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await At.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await At.first({where:{name:a[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===t.protocol){const e=this.#a;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=pt.resolve(this.#t.projectSrcDir,"index.js"),a=await qt({file:t,recursive:!0}),o=e.doc.dependencies,s=!0===this.#a.doc.features.all_parsed_imports?a.all:a.required;for await(const e of s){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await zt({name:e.package,count:1});o.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:e}){await this.setInProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const t=e.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const a=t[e].atom,o=this.#t.projectDir;if("local:"===a.protocol){const e=pt.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=pt.relative(`${this.#t.projectDir}/src/default/`,e);if(!lt.existsSync(e)){lt.mkdirSync(pt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",lt.writeFileSync(e,t,"utf8")}a.relativePath=t,this.#a.typesDir=`./types/${pt.basename(o)}/src`}else{const e=`${o}/src/libs/${a.id}.js`,t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;lt.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#s.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},t=this.#t.templateDir,a=ut.compile(lt.readFileSync(pt.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=pt.resolve(o,"src/default/index.js");lt.writeFileSync(s,a,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:a,...o}=this.#a.doc,s={content:dt.dump(o)},i=this.#t.templateDir,r=ut.compile(lt.readFileSync(pt.resolve(i,`${e}.njk`),"utf8"),this.#o).render(s),n=this.#t.projectDir,c=pt.resolve(n,`${e}`);lt.writeFileSync(c,r,"utf8")}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&await a.save()}}else if(this.#a.id){const e=await At.list({type:"library.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&(a=await At.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,a=t.doc.targets||[];for(let e=0;e<a.length;e++){const o=a[e];await Et({...this.#f,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await At.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await At.update(o,{id:o.id})):o=await At.create({parent_id:this.#d.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:a.version}]}})}async setInProgress({message:e}){console.log(Ot.blue(e)),await this._cache_set(this.#l,{status:"IN_PROGRESS",message:e})}async build(){try{this.#u&&(await this.createAtomLibFiles({libs:this.#s}),await this.createEngine(),await this.createProjectYaml(),await St(this.#f),await Dt(this.#f),await kt(this.#f),await xt(this.#f),await vt(this.#f),await wt(this.#f),await jt(this.#f),await _t(this.#f),await It(this.#f),await Pt(this.#f),this.#g&&(await Ct(this.#f),await $t(this.#f),this.#y&&await this.deploy())),await this._cache_set(this.#l,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e.message||e}),console.log(e),e}}};const Nt=p,Lt=d;var Mt=function({baseDir:e=__dirname}){let t=e;for(;t!==Lt.parse(t).root;){const e=Lt.join(t,"node_modules");if(Nt.existsSync(e))return e;t=Lt.dirname(t)}return null};const Bt=process.cwd(),{spawn:Jt}=e;t({name:["redis"],dir:Bt,optional:!0});const Kt=a,Ut=o,{hideBin:Gt}=s,Xt=i,Ht=r,Yt=n,Wt=c,Zt=l,Qt=Rt,Vt=Mt({baseDir:__dirname});async function ea(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Kt.resolve(Vt,"./@flownet/template-node-library/default"),templateCommonDir:Kt.resolve(Vt,"./@flownet/template-node-common/default"),projectDir:Kt.resolve(Bt,`./.output/${e.id}`),coreDir:Kt.resolve(Vt,"./@flownet/template-node-library/core")};{const t=await async function(){const e=Kt.resolve(Bt,"node.yaml");if(!Xt.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Xt.readFileSync(e,"utf8"),{parsed:a}=await Wt({content:t}),o=Kt.dirname(e),s={libraryAtom:{doc:{...a,"content-type":"javascript",language:"js"},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},i=Kt.resolve(o,"node.devops.yaml");if(Xt.existsSync(i)){const e=Xt.readFileSync(i,"utf8"),t=Ht.parse(e);s.devops={filePath:i,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Xt.writeFileSync(s.devops.filePath,Ht.stringify(s.devops.doc))}}}const r=Kt.resolve(o,"readme.md");if(Xt.existsSync(r)){const e=Xt.readFileSync(r,"utf8");s.readme={filePath:r,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return s}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Kt.resolve(Vt,"./@flownet/template-node-library/default"),templateCommonDir:Kt.resolve(Vt,"./@flownet/template-node-common/default"),coreDir:Kt.resolve(Vt,"./@flownet/template-node-library/core"),projectDir:Kt.resolve(t.projectDir,"./.workspace"),projectSrcDir:Kt.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${Vt}/.bin:${process.env.PATH}`,Ut(Gt(process.argv)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0})),(async e=>{try{const t=Kt.resolve(Vt,"@flownet/template-node-library/project"),a=Kt.resolve(Bt,e.name);Xt.existsSync(a)||Xt.mkdirSync(a),await Zt({dir:t,outDir:a,context:e});let o=Yt.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Yt.which("git")&&(o=Yt.exec("git init",{cwd:a}),0!==o.code))throw new Error("Failed to initialize git.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("build","Build flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",alias:"m",default:"build",choices:["all","file","build","deploy","bpmn"]})),(async e=>{try{const t=await ea(e),a=new Qt(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await ea({...e,mode:"all"}),a=new Qt(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"})),(async e=>{try{const t=await ea({...e,mode:"file"}),a=new Qt(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ea(e),{projectDir:a}=t,o=`npm ${process.argv.slice(3).join(" ")}`;Yt.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ea(e),{projectDir:a}=t,o=`node ${process.argv.slice(3).join(" ")}`;Yt.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ea(e),{projectDir:a}=t,o=`npm run serve -- ${process.argv.slice(3).join(" ")}`;Yt.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ea(e),{projectDir:a}=t,o=`npm run watch -- ${process.argv.slice(3).join(" ")}`;Yt.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ea(e),{projectDir:a}=t,o=`npm run app -- ${process.argv.slice(3).join(" ")}`;Yt.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ea(e),{projectDir:a}=t,o=process.argv.slice(3);Jt("npm",["run","cli","--",...o],{cwd:a,stdio:"inherit"}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}})).demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
2
+ "use strict";var e=require("child_process"),t=require("@fnet/config"),a=require("path"),o=require("yargs/yargs"),s=require("yargs/helpers"),i=require("fs"),n=require("yaml"),r=require("shelljs"),c=require("@fnet/yaml"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),m=require("js-yaml"),u=require("nunjucks"),g=require("redis"),y=require("@flownet/lib-is-redis-online"),f=require("nanoid"),b=require("@flownet/lib-atom-api-js"),h=require("axios"),w=require("qs"),_=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),v=require("@flownet/lib-list-npm-versions"),x=require("@fnet/shell"),k=require("semver"),D=require("node:os"),S=require("@node-red/util"),I=require("@flownet/lib-to-ios-app"),P=require("@flownet/lib-to-macos-app"),C=require("@flownet/lib-to-electron"),$=require("@flownet/lib-to-webos"),E=require("@flownet/lib-to-nextjs"),A=require("lodash.clonedeep"),F=require("@flownet/lib-parse-node-url"),T=require("@flownet/lib-pick-npm-versions"),q=require("chalk");const z=g,O=y;const{Api:R}=b,N=h.default,L=w;const M=_,B=i,J=a,K=j;const U=v;const G=p,X=d,H=l;const Y=u,W=p,Z=d,Q=j,V=v;const ee=p,te=d,ae=l;const oe=p,se=d,ie=u,ne=j;const re=p,ce=d,le=u;const pe=p,de=d,me=u;const ue=p,ge=d,ye=u;const fe=u,be=p,he=d;const we=r,_e=a;const je=r;const ve=r;const xe=r;const ke=x,De=t;const Se=p,Ie=d,Pe=k,Ce=x,$e=t;const Ee=p,Ae=d,Fe=k,Te=r,qe=t;const ze=p,Oe=d,Re=D,Ne=u,Le=S,Me=t;const Be=i,Je=a,Ke=t;const Ue=I;const Ge=P;const Xe=C;const He=$;const Ye=E,We=A,Ze=_,Qe=k,Ve=d;const et=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 De({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 ke({cmd:n}),a.isDirty=!0)},tt=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:s})=>{await e({message:"Deploying it as gcs package."});const i=t.projectDir,n=Ie.resolve(i,"package.json"),r=Se.readFileSync(n),c=JSON.parse(r);c.name=o.params.name,c.version=Pe.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,Se.writeFileSync(n,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await $e({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='${Ie.resolve(Ie.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 Ce({cmd:d}),Se.writeFileSync(n,r),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=c.version,await s({target:o,packageJSON:c}))},at=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s})=>{await t({message:"Deploying it as npm package."});const i=a.projectDir,n=Ae.resolve(i,"package.json"),r=Ee.readFileSync(n),c=JSON.parse(r);c.name=s.params.name,c.version=Fe.inc(s.params.version,"patch");const l=s.params.bin?.name||s.params.bin;!1!==s.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Ee.writeFileSync(n,JSON.stringify(c,null,"\t"));const p=(await qe({name:a.npmConfig||"npm",dir:a.projectDir}))?.data;if(Ee.writeFileSync(Ae.resolve(i,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==Te.exec("npm publish --access public",{cwd:i}).code)throw new Error("Couldnt publish to npm");Ee.writeFileSync(n,r),o.isDirty=!0,s.params.version=c.version},ot=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||Le.util.generateId(),label:`${p}/${e.id?e.id:Re.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:Le.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Oe.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Le.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:Le.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||Le.util.generateId(),label:`${p}/${e.id?e.id:Re.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:Le.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Oe.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Le.util.generateId(),schedules:t},debug:{id:Le.util.generateId()}}}}else{if("http"!==s.deploy.template)return;d={atom:e,packageDependencies:n,red:{tab:{id:s.deploy.id||Le.util.generateId(),label:`${p}/${e.id?e.id:Re.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:Le.util.generateId(),name:e.doc.name,initialize:{content:ze.readFileSync(Oe.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Le.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:Le.util.generateId()},debug:{id:Le.util.generateId()}}}}let m=Ne.compile(ze.readFileSync(Oe.resolve(l,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(ze.writeFileSync(Oe.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=(await Me({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}},st=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 Ke({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:Be.readFileSync(Je.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Be.readFileSync(Je.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Be.readFileSync(Je.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})},it=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 Ue(c),o.isDirty=!0},nt=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 Ge(r),o.isDirty=!0},rt=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i})=>{await t({message:"Deploying it as electron package."});const n=a.projectDir;if(!0===s.dryRun)return;const r={src:n,dest:n,atom:e,params:s.params};await Xe(r),o.isDirty=!0},ct=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 He(n),o.isDirty=!0},lt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s})=>{a&&await a({message:"Deploying it as nextjs package."});t.params=Ze({name:"nextjs-app",version:"0.1.0"},t.params);const i=Qe.inc(t.params.version,"patch");t.params.version=i;const n=We(t);n.params.dependencies=We(s);const r={atom:e,target:n.params,projectDir:o,renderDir:Ve.resolve(o,"nextjs")};return{deployer:await Ye(r)}};const pt=p,dt=d,mt=m,ut=r,gt=u,yt=async()=>{if(!await O({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=z.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:ft}=f,bt=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)}))}))}},ht=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||"esm",a.cli.folder=a.cli.folder||a.cli.folder||"esm";const c={cjs:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!0,string:!0},cjsx:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0,string:!0},esmx:{format:"esm",browser:!0,babel:!0,context:a.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0,string:!0},umd:{format:"umd",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1,string:!0}},l={};!0===a.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,babel_options:{targets:{chrome:"79"}}}),!0===a.app.enabled&&(a.app.dir=`./dist/app/${a.app.folder}`,c.app={format:a.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:a.app.dir,terser:!0,output_exports:!1===a.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:a.app.dir})),!0===a.cli.enabled&&(a.cli.dir=`./dist/cli/${a.cli.folder}`,c.cli={format:a.cli.format,context:"global",babel:!0===a.src_uses_jsx||!0===a.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:a.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===a.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${a.app.dir}`,files:["./dist/**/*"]};a.babel_options=a.babel_options||a.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},a.browsersync_options=M(p,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=M({},a.replace_options||a.replace?.options||{}),a.terser_options=M({},a.terser_options||a.terser?.options||{}),a.css_options=M({},a.css_options||a.css?.options||{}),a.wasm_options=M({},a.wasm_options||a.wasm?.options||{}),a.copy_options=M(l,a.copy_options||a.copy?.options||{}),a.json_options=M({},a.json_options||a.json?.options||{}),a.image_options=M({},a.image_options||a.image?.options||{}),a.analyzer_options=M({summaryOnly:!0,limit:12},a.analyzer_options||a.analyzer?.options||{}),a.visualizer_options=M({},a.visualizer_options||a.visualizer?.options||{}),a.string_options=M({},a.string_options||a.string?.options||{}),a.rollup=a.rollup||{},a.rollup_output=M(c,a.rollup_output||a.rollup?.output||{}),a.string_enabled=!0===a.string||a.string&&!1!==a.string?.enabled;const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==a.rollup[e]?(!0===a.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||a.babel_options,t.browsersync_options=M(a.browsersync_options,t.browsersync_options),t.replace_options=M(a.replace_options,t.replace_options),t.terser_options=M(a.terser_options,t.terser_options),t.css_options=M(a.css_options,t.css_options),t.wasm_options=M(a.wasm_options,t.wasm_options),t.copy_options=M(a.copy_options,t.copy_options),t.json_options=M(a.json_options,t.json_options),t.image_options=M(a.image_options,t.image_options),t.analyzer_options=M(a.analyzer_options,t.analyzer_options),t.visualizer_options=M(a.visualizer_options,t.visualizer_options),t.string_options=M(a.string_options,t.string_options),t.string=a.string_enabled&&t.string,a.form_enabled&&(t.babel=!0)):t.enabled=!1)}a.babel_enabled=d.some((e=>!0===a.rollup_output[e].babel)),a.browser_enabled=d.some((e=>!0===a.rollup_output[e].babel)),a.browsersync_enabled=d.some((e=>!0===a.rollup_output[e].browsersync)),a.browsersync_enabled=a.browsersync_enabled&&a.app.enabled,a.wasm_enabled=!0===a.wasm||a.wasm&&!1!==a.wasm?.enabled,a.css_enabled=!0===a.css||a.css&&!1!==a.css?.enabled,a.json_enabled=!0===a.json||a.json&&!1!==a.json?.enabled,a.terser_enabled=!0===a.terser||a.terser&&!1!==a.terser?.enabled,a.copy_enabled=a.app.enabled||a.copy_enabled||a.copy&&!1!==a.copy?.enabled,a.image_enabled=!0===a.image||a.image&&!1!==a.image?.enabled,a.analyzer_enabled=!0===a.analyzer||a.analyzer&&!1!==a.analyzer?.enabled,a.visualizer_enabled=!0===a.visualizer||a.visualizer&&!1!==a.visualizer?.enabled,a.dependency_auto_enabled=!1!==a.dependency_auto&&!1!==a.dependency_auto?.enabled,a.npm_install_flags=a.npm_install_flags||"",a.react_version=a.react_version||a.react?.version||18},wt=async({atom:e,packageDependencies:t,packageDevDependencies:a})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";a=`^${(await U({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),t.push({package:"chalk",version:"^4"}),a.push({package:"@babel/core",version:"^7.23"}),a.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),a.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),a.push({package:"@rollup/plugin-replace",version:"^5.0"}),a.push({package:"rollup",version:"^3.26"}),a.push({package:"rollup-plugin-delete",version:"^2.0"}),a.push({package:"rollup-plugin-dts",version:"^6.0"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),a.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6.0"}),a.push({package:"@babel/preset-env",version:"7.22"}),a.push({package:"@babel/preset-react",version:"7.22"})),e.doc.features.browsersync_enabled&&a.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&a.push({package:"@rollup/plugin-json",version:"^6.0"}),e.doc.features.terser_enabled&&a.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&a.push({package:"@rollup/plugin-wasm",version:"^6.1"}),e.doc.features.image_enabled&&a.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.analyzer_enabled&&a.push({package:"rollup-plugin-analyzer",version:"^3.3"}),e.doc.features.visualizer_enabled&&a.push({package:"rollup-plugin-visualizer",version:"^5.9"}),e.doc.features.string_enabled&&a.push({package:"rollup-plugin-string",version:"^3.0"}),e.doc.features.css_enabled){a.push({package:"rollup-plugin-postcss",version:"4.0"}),a.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":a.push({package:"postcss-import",version:"^15.1"});break;case"postcss-url":a.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":a.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":a.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":a.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&a.push({package:"rollup-plugin-copy",version:"^3.5"})},_t=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=X.resolve(a.projectDir,"src/app");G.existsSync(n)||G.mkdirSync(n,{recursive:!0}),await H({pattern:["index.html.njk","index.js.njk"],dir:X.resolve(i,"src/app"),outDir:n,context:s})},jt=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(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 s=t;if(!W.existsSync(s))throw new Error(`App file not found: ${s}`);const i=await Q({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 V({name:e.package,groupBy:{minor:!0}}))[0][0];o.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}}const c={atom:e,packageDependencies:a,packageDevDependencies:o},l=t.templateCommonDir,p=Y.compile(W.readFileSync(Z.resolve(l,"package.json.njk"),"utf8"),Y.configure(l)).render(c),d=t.projectDir,m=Z.resolve(d,"package.json");W.writeFileSync(m,p,"utf8")},vt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const s={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o},i=a.templateDir,n=te.resolve(a.projectDir,"src/cli");ee.existsSync(n)||ee.mkdirSync(n,{recursive:!0}),await ae({pattern:["index.js.njk"],dir:te.resolve(i,"src/cli"),outDir:n,context:s})},xt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},i=se.resolve(a.projectDir,"src","default/index.js");if(!oe.existsSync(i))throw new Error(`Entry file not found: ${i}`);const n=(await ne({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=ie.compile(oe.readFileSync(se.resolve(l,"rollup.config.js.njk"),"utf8"),ie.configure(l)).render(s),d=a.projectDir,m=se.resolve(d,"rollup.config.js");oe.writeFileSync(m,p,"utf8")},kt=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=le.compile(re.readFileSync(ce.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),o).render(r),p=a.projectDir,d=ce.resolve(p,"src/default/to.yargs.js");re.writeFileSync(d,l,"utf8")},Dt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},i=a.templateCommonDir,n=me.compile(pe.readFileSync(de.resolve(i,".gitignore.njk"),"utf8"),me.configure(i)).render(s),r=a.projectDir,c=de.resolve(r,".gitignore");pe.writeFileSync(c,n,"utf8")},St=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=ye.compile(ue.readFileSync(ge.resolve(i,"tsconfig.json.njk"),"utf8"),ye.configure(i)).render(s),r=a.projectDir,c=ge.resolve(r,"tsconfig.json");ue.writeFileSync(c,n,"utf8")},It=async({atom:e,context:t,setInProgress:a,Atom:o})=>{const s="readme.md",i=`Creating ${s}`;if(await a({message:i}),t.project?.readme){const e={content:t.project.readme.doc.content},a=t.templateCommonDir,o=fe.compile(be.readFileSync(he.resolve(a,`${s}.njk`),"utf8"),fe.configure(a)).render(e),i=t.projectDir,n=he.resolve(i,`${s}`);be.writeFileSync(n,o,"utf8")}else if(e.id){const a=await o.first({type:"wiki",parent_id:e.id});if(!a||"markdown"!==a.doc?.["content-type"])return;const{content:i,...n}=a.doc,r={content:i},c=t.templateCommonDir,l=fe.compile(be.readFileSync(he.resolve(c,`${s}.njk`),"utf8"),fe.configure(c)).render(r),p=t.projectDir,d=he.resolve(p,`${s}`);be.writeFileSync(d,l,"utf8")}},Pt=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});let o=_e.join("src","**","*");if(0!==we.exec(`prettier --write ${o} *.{js,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:a}).code)throw new Error("Couldnt format files.")},Ct=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Creating .d.ts"});if(0!==je.exec("tsc",{cwd:a}).code)throw new Error("Couldnt create .d.ts files.")},$t=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==ve.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},Et=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==xe.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},At=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:s,setInProgress:i}=e;if(!0===s.enabled)if("lib"===s.name)await st({...e});else if("red"===s.name)await ot({...e});else if("npm"===s.name)await at({...e});else if("gcs"===s.name)await tt({...e});else if("gitlab"===s.name)await et({...e});else if("macos-app"===s.name)await nt({...e});else if("ios-app"===s.name)await it({...e});else if("electron"===s.name)await rt({...e});else if("webos"===s.name)await ct({...e});else{let e;if("nextjs"===s.name&&(e=lt),!e)return;await e({atom:t,target:s,onProgress:i,projectDir:o.projectDir,dependencies:a})}},{Atom:Ft}=b,Tt=F,qt=t,zt=j,Ot=T,Rt=q;var Nt=class{#e;#t;#a;#o;#s;#i;#n;#r;#c;#l;#p;#d;#m;#u;#g;#y;#f;constructor(e){this.#e=new bt,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:Ft,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 yt(),this.#c=this.#t.buildId||ft(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 qt({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 ht(this.#f),await wt(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 Ft.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"];pt.existsSync(e)&&pt.readdirSync(e).forEach((o=>{a.includes(o)||(t=ut.rm("-rf",dt.join(e,o)))}));let o=e;if(!pt.existsSync(o)&&(t=ut.exec(`mkdir "${e}"`),0!==t.code))throw new Error("Couldnt create workflow dir.");if(o=dt.join(e,"src"),!pt.existsSync(o)&&(t=ut.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src dir.");if(o=dt.join(e,"src","default"),!pt.existsSync()&&(t=ut.exec(`mkdir "${o}"`),0!==t.code))throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=gt.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=Tt({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 Ft.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await Ft.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Ft.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=dt.resolve(this.#t.projectSrcDir,"index.js"),a=await zt({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 Ot({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=dt.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=dt.relative(dt.join(this.#t.projectDir,"src","default"),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")}a.relativePath=t.split(dt.sep).join("/"),this.#a.typesDir=`./types/${dt.basename(o)}/src`}else{const e=dt.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;pt.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=gt.compile(pt.readFileSync(dt.resolve(t,dt.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=dt.resolve(o,dt.join("src","default","index.js"));pt.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:mt.dump(o)},i=this.#t.templateDir,n=gt.compile(pt.readFileSync(dt.resolve(i,`${e}.njk`),"utf8"),this.#o).render(s),r=this.#t.projectDir,c=dt.resolve(r,`${e}`);pt.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 Ft.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 Ft.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 At({...this.#f,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await Ft.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await Ft.update(o,{id:o.id})):o=await Ft.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(Rt.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 It(this.#f),await St(this.#f),await Dt(this.#f),await kt(this.#f),await vt(this.#f),await _t(this.#f),await xt(this.#f),await jt(this.#f),await Pt(this.#f),await Ct(this.#f),this.#g&&(await $t(this.#f),await Et(this.#f),this.#y&&await this.deploy())),await this._cache_set(this.#l,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e.message||e}),console.log(e),e}}};const Lt=p,Mt=d;var Bt=function({baseDir:e=__dirname}){let t=e;for(;t!==Mt.parse(t).root;){const e=Mt.join(t,"node_modules");if(Lt.existsSync(e))return e;t=Mt.dirname(t)}return null};const Jt=process.cwd(),{spawn:Kt}=e;t({name:["redis"],dir:Jt,optional:!0});const Ut=a,Gt=o,{hideBin:Xt}=s,Ht=i,Yt=n,Wt=r,Zt=c,Qt=l,Vt=Nt,ea=Bt({baseDir:__dirname}),ta="win32"===process.platform?";":":";async function aa(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Ut.resolve(ea,"./@flownet/template-node-library/default"),templateCommonDir:Ut.resolve(ea,"./@flownet/template-node-common/default"),projectDir:Ut.resolve(Jt,`./.output/${e.id}`),coreDir:Ut.resolve(ea,"./@flownet/template-node-library/core")};{const t=await async function(){const e=Ut.resolve(Jt,"node.yaml");if(!Ht.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Ht.readFileSync(e,"utf8"),{parsed:a}=await Zt({content:t}),o=Ut.dirname(e),s={libraryAtom:{doc:{...a,"content-type":"javascript",language:"js"},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},i=Ut.resolve(o,"node.devops.yaml");if(Ht.existsSync(i)){const e=Ht.readFileSync(i,"utf8"),t=Yt.parse(e);s.devops={filePath:i,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Ht.writeFileSync(s.devops.filePath,Yt.stringify(s.devops.doc))}}}const n=Ut.resolve(o,"readme.md");if(Ht.existsSync(n)){const e=Ht.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:Ut.resolve(ea,"./@flownet/template-node-library/default"),templateCommonDir:Ut.resolve(ea,"./@flownet/template-node-common/default"),coreDir:Ut.resolve(ea,"./@flownet/template-node-library/core"),projectDir:Ut.resolve(t.projectDir,"./.workspace"),projectSrcDir:Ut.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${Ut.join(ea,"/.bin")}${ta}${process.env.PATH}`,Gt(Xt(process.argv)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0})),(async e=>{try{const t=Ut.resolve(ea,"@flownet/template-node-library/project"),a=Ut.resolve(Jt,e.name);Ht.existsSync(a)||Ht.mkdirSync(a),await Qt({dir:t,outDir:a,context:e});let o=Wt.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Wt.which("git")&&(o=Wt.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 aa(e),a=new Vt(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 aa({...e,mode:"all"}),a=new Vt(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 aa({...e,mode:"file"}),a=new Vt(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await aa(e),{projectDir:a}=t,o=`npm ${process.argv.slice(3).join(" ")}`;Wt.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await aa(e),{projectDir:a}=t,o=`node ${process.argv.slice(3).join(" ")}`;Wt.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await aa(e),{projectDir:a}=t,o=`npm run serve -- ${process.argv.slice(3).join(" ")}`;Wt.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await aa(e),{projectDir:a}=t,o=`npm run watch -- ${process.argv.slice(3).join(" ")}`;Wt.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await aa(e),{projectDir:a}=t,o=`npm run app -- ${process.argv.slice(3).join(" ")}`;Wt.exec(o,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await aa(e),{projectDir:a}=t,o=process.argv.slice(3);Kt("npm",["run","cli","--",...o],{cwd:a,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}})).demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e=require("child_process"),t=require("@fnet/config"),o=require("path"),n=require("yargs/yargs"),i=require("yargs/helpers"),s=require("fs"),a=require("yaml"),r=require("shelljs"),c=require("@fnet/yaml"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),f=require("js-yaml"),m=require("nunjucks"),u=require("lodash.clonedeep"),h=require("isobject"),w=require("redis"),y=require("@flownet/lib-is-redis-online"),g=require("nanoid"),b=require("@flownet/lib-atom-api-js"),x=require("axios"),v=require("qs"),k=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),_=require("@flownet/lib-list-npm-versions"),D=require("@fnet/shell"),P=require("semver"),S=require("node:os"),T=require("@node-red/util"),C=require("@flownet/lib-to-ios-app"),$=require("@flownet/lib-to-macos-app"),E=require("@flownet/lib-to-electron"),I=require("@flownet/lib-to-webos"),N=require("@flownet/lib-to-nextjs"),A=require("@flownet/lib-parse-node-url"),O=require("@flownet/lib-bpmn-from-flow"),F=require("@fnet/expression"),q=require("chalk"),B=require("lodash.pick"),J=require("lodash.omit");const M=w,z=y;const{Api:R}=b,L=x.default,K=v;const U=k,W=s,G=o,V=j;const X=_;const H=p,Y=d,Z=l;const Q=m,ee=p,te=d,oe=j,ne=_;const ie=p,se=d,ae=l;const re=p,ce=d,le=m,pe=j;const de=p,fe=d,me=m;const ue=p,he=d,we=m;const ye=p,ge=d,be=m;const xe=m,ve=p,ke=d;const je=r;const _e=r;const De=r;const Pe=r;const Se=D,Te=t;const Ce=p,$e=d,Ee=P,Ie=D,Ne=t;const Ae=p,Oe=d,Fe=P,qe=r,Be=t;const Je=p,Me=d,ze=S,Re=m,Le=T,Ke=t;const Ue=s,We=o,Ge=t;const Ve=C;const Xe=$;const He=E;const Ye=I;const Ze=N,Qe=u,et=k,tt=P,ot=d;const nt=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const s=t.projectDir;let a="fnet-to-gitlab";const r=n.params.config||"gitlab",c=await Te({name:r,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;a+=` --projectGroupId=${l.projectGroupId}`,a+=` --projectPath='${s}'`,a+=` --projectName='${n.params.name}'`,a+=` --projectBranch='${n.params.branch||"main"}'`,a+=` --gitlabHost='${l.gitlabHost}'`,a+=` --gitlabToken='${l.gitlabToken}'`,a+=` --gitlabUsername='${l.gitlabUsername}'`,a+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==n.dryRun&&(await Se({cmd:a}),o.isDirty=!0)},it=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,a=$e.resolve(s,"package.json"),r=Ce.readFileSync(a),c=JSON.parse(r);c.name=n.params.name,c.version=Ee.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,Ce.writeFileSync(a,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Ne({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='${$e.resolve($e.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${s}'`,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 Ie({cmd:d}),Ce.writeFileSync(a,r),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=c.version,await i({target:n,packageJSON:c}))},st=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as npm package."});const s=o.projectDir,a=Oe.resolve(s,"package.json"),r=Ae.readFileSync(a),c=JSON.parse(r);c.name=i.params.name,c.version=Fe.inc(i.params.version,"patch");const l=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Ae.writeFileSync(a,JSON.stringify(c,null,"\t"));const p=(await Be({name:o.npmConfig||"npm",dir:o.projectDir}))?.data;if(Ae.writeFileSync(Oe.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==qe.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");Ae.writeFileSync(a,r),n.isDirty=!0,i.params.version=c.version},at=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s,packageDependencies:a,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=o.projectDir,l=o.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||Le.util.generateId(),label:`${p}/${e.id?e.id:ze.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Le.util.generateId(),name:e.doc.name,initialize:{content:Je.readFileSync(Me.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Le.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Le.util.generateId()}}};else if("cronjob"===i.deploy.template){let t=i.params?.schedules?cloneDeep(i.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||Le.util.generateId(),label:`${p}/${e.id?e.id:ze.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Le.util.generateId(),name:e.doc.name,initialize:{content:Je.readFileSync(Me.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Le.util.generateId(),schedules:t},debug:{id:Le.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||Le.util.generateId(),label:`${p}/${e.id?e.id:ze.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Le.util.generateId(),name:e.doc.name,initialize:{content:Je.readFileSync(Me.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Le.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Le.util.generateId()},debug:{id:Le.util.generateId()}}}}let f=Re.compile(Je.readFileSync(Me.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(Je.writeFileSync(Me.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;n.isDirty=!0;const m=(await Ke({name:o.redConfig||"red",dir:o.projectDir}))?.data,u=i.deploy.url||m.env.RED_URL,h={};if(!1!==i.deploy.auth&&(h.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:h}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:f,headers:h});else{const e=await axios({method:"POST",url:`${u}/flow`,data:f,headers:h});i.deploy.id=e.data.id}},rt=async({atom:e,Atom:t,setInProgress:o,context:n,packageDependencies:i,deploymentProject:s,deploymentProjectTarget:a})=>{await o({message:"Deploying it as workflow lib."});const r=(await Ge({name:"atom",dir:n.projectDir}))?.data;let c,l,p,d=a.deploy.name.split("/");if(1===d.length)l=r.env.ATOM_LIBRARIES_ID,p=a.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:r.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===a.dryRun)return;if(s.isDirty=!0,a.deploy.id){if(c=await t.get({id:a.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;a.deploy.id=c.id}const f=n.projectDir;c.doc.contents=[{content:Ue.readFileSync(We.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Ue.readFileSync(We.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Ue.readFileSync(We.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=i,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},ct=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s,registerToPackageManager:a})=>{await t({message:"Deploying it as ios app package."});const r=o.projectDir;if(!0===i.dryRun)return;const c={projectDir:r,dest:r,atom:e,params:i.params};await Ve(c),n.isDirty=!0},lt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s})=>{await t({message:"Deploying it as macos app package."});const a=o.projectDir;if(!0===i.dryRun)return;const r={projectDir:a,dest:a,atom:e,params:i.params};await Xe(r),n.isDirty=!0},pt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s})=>{await t({message:"Deploying it as electron package."});const a=o.projectDir;if(!0===i.dryRun)return;const r={src:a,dest:a,atom:e,params:i.params};await He(r),n.isDirty=!0},dt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as webos package."});const s=o.projectDir;if(!0===i.dryRun)return;const a={src:s,dest:s,atom:e,params:i.params};await Ye(a),n.isDirty=!0},ft=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as nextjs package."});t.params=et({name:"nextjs-app",version:"0.1.0"},t.params);const s=tt.inc(t.params.version,"patch");t.params.version=s;const a=Qe(t);a.params.dependencies=Qe(i);const r={atom:e,target:a.params,projectDir:n,renderDir:ot.resolve(n,"nextjs")};return{deployer:await Ze(r)}};const mt=u;async function ut({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||mt(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||mt(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await t({node:e}),o({node:e})}var ht={hits:async function({node:e}){if(!e.definition.hasOwnProperty("switch"))return!1;const t=e.definition.switch||[];if(!t.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===t.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const o=t.filter((e=>e.hasOwnProperty("default")));if(o.length>1)throw new Error("Switch must have only one default");if(1===o.length&&!t[t.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");return!0},init:async function({node:e,initNode:t}){e.type="switch",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let o=0;o<e.definition.switch.length;o++){let n=e.definition.switch[o],i=`${o}`;n.hasOwnProperty("default")&&(i="default",n=n.default);const s={name:n.condition||i,childs:[],parent:e,definition:n,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=ut},resolve:ut};const wt=F,yt=ht;var gt={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>wt({expression:e}))))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,o=Object.keys(t.definition),n=await Promise.all(o.map((e=>wt({expression:e})))),i=[],s=n.find((e=>"if"===e?.processor)),a=t.definition[s.expression];i.push({name:`${t.name}_if`,definition:a,processor:s}),delete t.definition[s.expression];const r=n.filter((e=>"elseif"===e?.processor));let c=0;for(const e of r){const o=t.definition[e.expression];i.push({name:`${t.name}_elseif_${c++}`,definition:o,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of i)t.definition.switch.push({condition:e.processor.statement,...e.definition});await yt.init(e)}};const bt=u;async function xt({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||bt(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||bt(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var vt={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:t}){if(e.type="tryexcept",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const o="try",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}if(e.definition.except){const o="except",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}e.resolve=xt},resolve:xt};const kt=u;async function jt({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=kt(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],o=Object.keys(t)[0],s=t[o],a={key:await n(o),value:await n(s)};i.assign[e]=a}await t({node:e}),o({node:e})}var _t={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=jt},resolve:jt};const Dt=u,Pt=B,St=J;async function Tt({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Dt(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await t({node:e}),o({node:e})}var Ct={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[o,n]=[Pt(e.definition.for,t),St(e.definition.for,t)];e.definition.for=o,e.definition.for.steps=[{[`${e.name}_step`]:n}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let o=0;o<e.definition.for.steps.length;o++){const n=e.definition.for.steps[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=Tt},resolve:Tt};var $t={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){}};const Et=u;async function It({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||Et(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var Nt={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=It},resolve:It};const At=u;async function Ot({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||At(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var Ft={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=Ot},resolve:Ot};const qt=u;async function Bt({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||qt(e.definition);const i=e.context.transform;i.args&&(i.args=await n(i.args)),i.result&&(i.result=await n(i.result));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.call)),await t({node:e}),o({node:e})}var Jt={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call";for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=Bt},resolve:Bt};const Mt=Jt;var zt={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(e){const{node:t}=e,o="shell",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/shell",n.args="string"===i?{...n.args,cmd:n[o]}:n[o],delete n[o],await Mt.init(e)}};const Rt=Jt;var Lt={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(e){const{node:t}=e,o="config",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/config",n.args="string"===i?{...n.args,name:n[o]}:n[o],delete n[o],await Rt.init(e)}};const Kt=Jt;var Ut={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(e){const{node:t}=e,o="yaml",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/yaml",n.args="string"===i?{...n.args,file:n[o]}:n[o],delete n[o],await Kt.init(e)}};async function Wt({node:e}){e.context.next=e.childs[0]}var Gt={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const o=e.definition.steps||[];for await(const n of o){const o=Object.keys(n)[0],i={name:o,childs:[],parent:e,definition:n[o],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=Wt},resolve:Wt};const Vt=u;async function Xt({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Vt(e.definition);const i=e.context.transform;i.props&&(i.props=await n(i.props));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.form)),await t({node:e}),o({node:e})}var Ht={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form";for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=Xt},resolve:Xt};const Yt=u;async function Zt({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||Yt(e.definition),await t({node:e})}var Qt={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Zt},resolve:Zt};const eo=u;async function to({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||eo(e.definition);const i=e.context.transform;i.next=await n(i.next),await t({node:e}),o({node:e})}var oo={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=to},resolve:to};const no=Jt;var io={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,o="prompt",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/prompt",n.args="string"===i?{...n.args,message:n[o]}:n[o],delete n[o],await no.init(e)}};const so=Jt;var ao={hits:async function({node:e}){return e.definition.hasOwnProperty("html-script")},init:async function(e){const{node:t}=e,o="html-script",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@flownet/lib-load-browser-script-url",n.args="string"===i?{...n.args,src:n[o]}:n[o],delete n[o],await so.init(e)}};const ro=Jt;var co={hits:async function({node:e}){return e.definition.hasOwnProperty("html-link")},init:async function(e){const{node:t}=e,o="html-link",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@flownet/lib-load-browser-link-url",n.args="string"===i?{...n.args,src:n[o]}:n[o],delete n[o],await ro.init(e)}};const lo=p,po=d,fo=f,mo=r,uo=m,ho=u,wo=h,yo=async()=>{if(!await z({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=M.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:go}=g,bo=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);L({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:K.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{R.set_req_token(e.data.access_token),o(e.data.access_token)})).catch((e=>{R.set_req_token(),n(e)}))}))}},xo=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=G.resolve(t.project.projectDir),i=G.resolve(n,"./app/index.js");if(W.existsSync(i)){let e=await V({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 V({file:i}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.app_entry_uses_jsx=t}const s=G.resolve(n,"./cli/index.js");if(W.existsSync(s)){let e=await V({file:s,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 V({file:s}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.cli_entry_uses_jsx=t}if("workflow.lib"===e.type){const e=G.resolve(n,"./src/index.js");if(W.existsSync(e)){let t=await V({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 V({file:e}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.src_entry_uses_jsx=n}}const a=!0===o.app_has_entry||!0===o.src_uses_jsx,r=!0===o.cli_has_entry||!0===o.src_uses_jsx;o.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===o.form||!0===o.form?.enabled,o.multiple_enabled=o.multiple_enabled||!0===o.multiple||!0===o.multiple?.enabled,!1===o.app?o.app={enabled:!1}:!0===o.app?o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:a}:o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:a,...o.app||{}},o.app.enabled=!0===o.app.enabled&&(!0===e.doc.features.form_enabled||!0===o.app.extend||!0===o.app.enabled),o.app.format=o.app.format||"esm",o.app.folder=o.app.folder||o.app.format||"default",!1===o.cli?o.cli={enabled:!1}:!0===o.cli?o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r}:o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r,...o.cli||{}},o.cli.enabled=!0===o.cli.enabled&&(!1===e.doc.features.form_enabled||!0===o.cli.extend||!0===o.cli.enabled),o.cli.format=o.cli.format||"esm",o.cli.folder=o.cli.folder||o.cli.folder||"esm";const c={cjs:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!0,string:!0},cjsx:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0,string:!0},esmx:{format:"esm",browser:!0,babel:!0,context:o.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0,string:!0},umd:{format:"umd",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1,string:!0}},l={};!0===o.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,babel_options:{targets:{chrome:"79"}}}),!0===o.app.enabled&&(o.app.dir=`./dist/app/${o.app.folder}`,c.app={format:o.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:o.app.dir,terser:!0,output_exports:!1===o.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:o.app.dir})),!0===o.cli.enabled&&(o.cli.dir=`./dist/cli/${o.cli.folder}`,c.cli={format:o.cli.format,context:"global",babel:!0===o.src_uses_jsx||!0===o.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:o.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===o.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${o.app.dir}`,files:["./dist/**/*"]};o.babel_options=o.babel_options||o.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},o.browsersync_options=U(p,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=U({},o.replace_options||o.replace?.options||{}),o.terser_options=U({},o.terser_options||o.terser?.options||{}),o.css_options=U({},o.css_options||o.css?.options||{}),o.wasm_options=U({},o.wasm_options||o.wasm?.options||{}),o.copy_options=U(l,o.copy_options||o.copy?.options||{}),o.json_options=U({},o.json_options||o.json?.options||{}),o.image_options=U({},o.image_options||o.image?.options||{}),o.analyzer_options=U({summaryOnly:!0,limit:12},o.analyzer_options||o.analyzer?.options||{}),o.visualizer_options=U({},o.visualizer_options||o.visualizer?.options||{}),o.string_options=U({},o.string_options||o.string?.options||{}),o.rollup=o.rollup||{},o.rollup_output=U(c,o.rollup_output||o.rollup?.output||{}),o.string_enabled=!0===o.string||o.string&&!1!==o.string?.enabled;const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==o.rollup[e]?(!0===o.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||o.babel_options,t.browsersync_options=U(o.browsersync_options,t.browsersync_options),t.replace_options=U(o.replace_options,t.replace_options),t.terser_options=U(o.terser_options,t.terser_options),t.css_options=U(o.css_options,t.css_options),t.wasm_options=U(o.wasm_options,t.wasm_options),t.copy_options=U(o.copy_options,t.copy_options),t.json_options=U(o.json_options,t.json_options),t.image_options=U(o.image_options,t.image_options),t.analyzer_options=U(o.analyzer_options,t.analyzer_options),t.visualizer_options=U(o.visualizer_options,t.visualizer_options),t.string_options=U(o.string_options,t.string_options),t.string=o.string_enabled&&t.string,o.form_enabled&&(t.babel=!0)):t.enabled=!1)}o.babel_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browser_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browsersync_enabled=d.some((e=>!0===o.rollup_output[e].browsersync)),o.browsersync_enabled=o.browsersync_enabled&&o.app.enabled,o.wasm_enabled=!0===o.wasm||o.wasm&&!1!==o.wasm?.enabled,o.css_enabled=!0===o.css||o.css&&!1!==o.css?.enabled,o.json_enabled=!0===o.json||o.json&&!1!==o.json?.enabled,o.terser_enabled=!0===o.terser||o.terser&&!1!==o.terser?.enabled,o.copy_enabled=o.app.enabled||o.copy_enabled||o.copy&&!1!==o.copy?.enabled,o.image_enabled=!0===o.image||o.image&&!1!==o.image?.enabled,o.analyzer_enabled=!0===o.analyzer||o.analyzer&&!1!==o.analyzer?.enabled,o.visualizer_enabled=!0===o.visualizer||o.visualizer&&!1!==o.visualizer?.enabled,o.dependency_auto_enabled=!1!==o.dependency_auto&&!1!==o.dependency_auto?.enabled,o.npm_install_flags=o.npm_install_flags||"",o.react_version=o.react_version||o.react?.version||18},vo=async({atom:e,packageDependencies:t,packageDevDependencies:o})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let o="^18.2";o=`^${(await X({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.analyzer_enabled&&o.push({package:"rollup-plugin-analyzer",version:"^3.3"}),e.doc.features.visualizer_enabled&&o.push({package:"rollup-plugin-visualizer",version:"^5.9"}),e.doc.features.string_enabled&&o.push({package:"rollup-plugin-string",version:"^3.0"}),e.doc.features.css_enabled){o.push({package:"rollup-plugin-postcss",version:"4.0"}),o.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":o.push({package:"postcss-import",version:"^15.1"});break;case"postcss-url":o.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":o.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":o.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":o.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&o.push({package:"rollup-plugin-copy",version:"^3.5"})},ko=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n,ts:Date.now()},s=o.templateDir,a=Y.resolve(o.projectDir,"src/app");H.existsSync(a)||H.mkdirSync(a,{recursive:!0}),await Z({pattern:["index.html.njk","index.js.njk"],dir:Y.resolve(s,"src/app"),outDir:a,context:i})},jo=async({atom:e,context:t,packageDependencies:o,packageDevDependencies:n,setInProgress:i})=>{await i({message:"Creating package.json."});const s=o.find((e=>"react"===e.package)),a=o.find((e=>"react-dom"===e.package));s&&!a?o.push({package:"react-dom",version:s.version}):s&&a&&(a.version=s.version),s&&e.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push(te.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&r.push(te.resolve(t.projectDir,"src/cli/index.js"));for await(const t of r){const i=t;if(!ee.existsSync(i))throw new Error(`App file not found: ${i}`);const s=await oe({file:i,recursive:!0}),a=!0===e.doc.features.all_parsed_imports?s.all:s.required;for await(const e of a){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;if(n.find((t=>t.package===e.package)))continue;const t=(await ne({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=Q.compile(ee.readFileSync(te.resolve(l,"package.json.njk"),"utf8"),Q.configure(l)).render(c),d=t.projectDir,f=te.resolve(d,"package.json");ee.writeFileSync(f,p,"utf8")},_o=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n},s=o.templateDir,a=se.resolve(o.projectDir,"src/cli");ie.existsSync(a)||ie.mkdirSync(a,{recursive:!0}),await ae({pattern:["index.js.njk"],dir:se.resolve(s,"src/cli"),outDir:a,context:i})},Do=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:n},s=ce.resolve(o.projectDir,"src","default/index.js");if(!re.existsSync(s))throw new Error(`Entry file not found: ${s}`);const a=(await pe({file:s,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&a.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(a.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<a.length;e++){const o=a[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(a)}}const l=o.templateCommonDir,p=le.compile(re.readFileSync(ce.resolve(l,"rollup.config.js.njk"),"utf8"),le.configure(l)).render(i),d=o.projectDir,f=ce.resolve(d,"rollup.config.js");re.writeFileSync(f,p,"utf8")},Po=async({atom:e,setInProgress:t,context:o,njEnv:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const i={},s=e.doc.inputs||[],a=[];s.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&a.push(e);const t={};e.type&&(t.type=e.type),e.default&&(t.default=e.default),e.choices&&(t.choices=e.choices),(e.describe||e.description)&&(t.describe=e.describe||e.description),e.alias&&(t.alias=e.alias),!0===e.required&&(t.required=!0),!0===e.hidden&&(t.hidden=!0),!0===e.array&&(t.array=!0),!0===e.normalize&&(t.normalize=!0),e.nargs&&(t.nargs=e.nargs),i[e.name]=t}));const r={options:i,imports:a,atom:e},c=o.templateDir,l=me.compile(de.readFileSync(fe.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),n).render(r),p=o.projectDir,d=fe.resolve(p,"src/default/to.yargs.js");de.writeFileSync(d,l,"utf8")},So=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},s=o.templateCommonDir,a=we.compile(ue.readFileSync(he.resolve(s,".gitignore.njk"),"utf8"),we.configure(s)).render(i),r=o.projectDir,c=he.resolve(r,".gitignore");ue.writeFileSync(c,a,"utf8")},To=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:n},s=o.templateCommonDir,a=be.compile(ye.readFileSync(ge.resolve(s,"tsconfig.json.njk"),"utf8"),be.configure(s)).render(i),r=o.projectDir,c=ge.resolve(r,"tsconfig.json");ye.writeFileSync(c,a,"utf8")},Co=async({atom:e,context:t,setInProgress:o,Atom:n})=>{const i="readme.md",s=`Creating ${i}`;if(await o({message:s}),t.project?.readme){const e={content:t.project.readme.doc.content},o=t.templateCommonDir,n=xe.compile(ve.readFileSync(ke.resolve(o,`${i}.njk`),"utf8"),xe.configure(o)).render(e),s=t.projectDir,a=ke.resolve(s,`${i}`);ve.writeFileSync(a,n,"utf8")}else if(e.id){const o=await n.first({type:"wiki",parent_id:e.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:s,...a}=o.doc,r={content:s},c=t.templateCommonDir,l=xe.compile(ve.readFileSync(ke.resolve(c,`${i}.njk`),"utf8"),xe.configure(c)).render(r),p=t.projectDir,d=ke.resolve(p,`${i}`);ve.writeFileSync(d,l,"utf8")}},$o=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});if(0!==je.exec("prettier --write src/**/* bin/* *.{js,json,yaml,html} --no-error-on-unmatched-pattern",{cwd:o}).code)throw new Error("Couldnt format files.")},Eo=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Creating .d.ts"});if(0!==_e.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},Io=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==De.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},No=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==Pe.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},Ao=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:s}=e;if(!0===i.enabled)if("lib"===i.name)await rt({...e});else if("red"===i.name)await at({...e});else if("npm"===i.name)await st({...e});else if("gcs"===i.name)await it({...e});else if("gitlab"===i.name)await nt({...e});else if("macos-app"===i.name)await lt({...e});else if("ios-app"===i.name)await ct({...e});else if("electron"===i.name)await pt({...e});else if("webos"===i.name)await dt({...e});else{let e;if("nextjs"===i.name&&(e=ft),!e)return;await e({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o})}},{Atom:Oo}=b,Fo=A,qo=_,Bo=O,Jo=t,Mo=j,zo=F,Ro=c,Lo=q,Ko=gt,Uo=vt,Wo=_t,Go=Ct,Vo=ht,Xo=$t,Ho=Nt,Yo=Ft,Zo=Jt,Qo=zt,en=Lt,tn=Ut,on=Gt,nn=Ht,sn=Qt,an=oo,rn=io,cn=ao,ln=co,pn=({node:e})=>{const t=e.definition;if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let o=e.parent;for(;o.parent;){const n=o.childs.find((e=>e.name===t.next));if(n){e.context.next=n;break}o=o.parent}}else{let t=e.parent,o=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(void 0!==t.blockAutoJumpToParent||void 0!==t.blockAutoJumpToSibling){if(t.blockAutoJumpToParent){const n=t.childs.find((e=>e.index===o));n&&(e.context.next=n);break}t.blockAutoJumpToParent||(o=t.index+1,t=t.parent)}else{const n=t.childs.find((e=>e.index===o));if(n){e.context.next=n;break}o=t.index+1,t=t.parent}}};var dn=class{#e;#t;#o;#n;#i;#s;#a;#r;#c;#l;#p;#d;#f;#m;#u;#h;#w;#y;#g;#b;#x;constructor(e){this.#e=new bo,this.#t=e,this.#s=[],this.#a=[],this.#r={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#b={packageDependencies:this.#s,packageDevDependencies:this.#a,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Oo,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#x={initNode:this.initNode.bind(this),cloneDeep:ho,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:pn,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await yo(),this.#p=this.#t.buildId||go(24),this.#b.buildId=this.#p,this.#u=this.#t.mode,this.#h=["all","deploy","build","file"].includes(this.#u),this.#w=["all","deploy","build"].includes(this.#u),this.#y=["all","deploy"].includes(this.#u),this.#g=["all","deploy","build","file","bpmn"].includes(this.#u),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#m=(await Jo({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await xo(this.#b),await vo(this.#b),await this.transformWorkflow({workflow:this.#n});const e=await this.initNodeTree({workflow:this.#n});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#s}),await this.resolveNodeTree({root:e}),this.#l=e}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#c=await this.#e.init({config:this.#m}),this.#b.atomAccessToken=this.#c)}async initWorkflow(){const e=this.#t.id;this.#o=this.#t.project?.workflowAtom||await Oo.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await Ro({content:this.#o.doc.content})).parsed:this.#o.doc.content;let t=this.#o.doc.bundleName;t=t||(this.#o.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#o.doc.bundleName=t,this.#o.type=this.#o.type||"workflow",this.#b.atom=this.#o}async initDependencies(){this.#s.push({package:"get-value",version:"^3.0"}),this.#s.push({package:"set-value",version:"^4.1"}),this.#o.doc.features.form_enabled?(this.#s.push({package:"react",version:"^18.2"}),this.#s.push({package:"react-dom",version:"^18.2"}),this.#s.push({package:"@flownet/react-app",version:"^0.1"}),this.#s.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#s.push({package:"yargs",version:"^17"}),this.#s.push({package:"chalk",version:"^4"})}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir;let o;const n=["node_modules"];if(lo.existsSync(e)&&lo.readdirSync(e).forEach((t=>{n.includes(t)||(o=mo.rm("-rf",po.join(e,t)))})),o=mo.exec(`mkdir -p ${e}`),0!==o.code)throw new Error("Couldnt create workflow dir.");if(o=mo.exec(`mkdir ${e}/src`),0!==o.code)throw new Error("Couldnt create workflow/src dir.");if(o=mo.exec(`cp -a ${t} ${e}/src`),0!==o.code)throw new Error("Couldnt create workflow/src/core dir.");if(o=mo.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=uo.configure(e,{watch:!1,dev:!0}),this.#b.njEnv=this.#i}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,o]=Object.entries(e)[0];if(o.hasOwnProperty("onerror")){const{onerror:n,...i}=o;e[t]={try:i,except:n}}if(e[t].hasOwnProperty("steps")){const o=e[t].steps;if(!Array.isArray(o))throw new Error("Steps must be an array.");e[t].steps=o.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),o={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#o}};t.forEach((t=>{const n={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:o,definition:e[t],index:o.childs.length,depth:o.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};o.childs.push(n)}));for await(const e of o.childs)await this.initNode({node:e});return o}async initNode({node:e}){const t={...this.#x,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await Uo.hits(t))await Uo.init(t);else if(await Go.hits(t))await Go.init(t);else if(await Vo.hits(t))await Vo.init(t);else if(await Ko.hits(t))await Ko.init(t);else if(await Xo.hits(t))await Xo.init(t);else if(await Wo.hits(t))await Wo.init(t);else if(await Ho.hits(t))await Ho.init(t);else if(await Yo.hits(t))await Yo.init(t);else if(await Zo.hits(t))await Zo.init(t);else if(await Qo.hits(t))await Qo.init(t);else if(await en.hits(t))await en.init(t);else if(await tn.hits(t))await tn.init(t);else if(await cn.hits(t))await cn.init(t);else if(await ln.hits(t))await ln.init(t);else if(await nn.hits(t))await nn.init(t);else if(await sn.hits(t))await sn.init(t);else if(await rn.hits(t))await rn.init(t);else if(await on.hits(t))await on.init(t);else{if(!await an.hits(t))throw new Error("Undefined step type.");await an.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const o of e.childs)await this.initNodeIndex({node:o,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const o=po.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=go(24);for await(const o of e.childs)await this.initNodeIndex({node:o,index:t})}async initNodeCalls({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"call"===n.type&&o.push(n)}return e.context.calls=o,o}async initNodeCallLibs({root:e}){const t=[],o=e.context.calls;for await(const e of o){const o=e.definition.call,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.call,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"form"===n.type&&o.push(n)}return e.context.forms=o,o}async initNodeFormLibs({root:e}){const t=[],o=e.context.forms;for await(const e of o){const o=e.definition.form,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.form,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const o=e.filter((e=>"atom"===e.type));for(let e=0;e<o.length;e++){const n=o[e],i=await this.findAtomLibrary({url:n.name});n.atom=i;const s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const o=t.find((t=>t.package===e.package));o?"string"==typeof e.path?(o.path||[]).some((t=>t===e.path))||(o.path=o.path||[],o.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(o.path||[]).some((t=>t===e))||(o.path=o.path||[],o.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=Fo({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#f),"ac:"===t.protocol){const o=t.pathname.split("/");if(1===o.length)return await Oo.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await Oo.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Oo.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=po.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await Mo({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 qo({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 qo({name:t.pathname,groupBy:{minor:!0}}))[0][0];return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:[{package:t.pathname,version:`^${e}`,type:"npm"}]},protocol:t.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=ho(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const o=t.params[e];if("string"==typeof o)t.params[e]={key:o,hasDefault:!1};else{const n=Object.keys(o)[0];t.params[e]={key:n,hasDefault:!0,default:o[n]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#x,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:e}){await this.setInProgress({message:"Creating external lib files."}),this.#o.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const o=t[e].atom,n=this.#t.projectDir;if("local:"===o.protocol){const e=po.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=po.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!lo.existsSync(e)){lo.mkdirSync(po.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",lo.writeFileSync(e,t,"utf8")}o.relativePath=t,this.#o.typesDir=`./types/${po.basename(n)}/src`}else if("npm:"===o.protocol)o.relativePath=o.name;else{const e=`${n}/src/libs/${o.id}.js`,t=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;lo.writeFileSync(e,t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=uo.compile(lo.readFileSync(po.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=po.resolve(n,"src/default/index.js");lo.writeFileSync(i,o,"utf8")}async createNodeTree({root:e}){await this.setInProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:e}){const t=this.#t.templateDir,o=uo.compile(lo.readFileSync(po.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=po.resolve(n,`src/default/${e.codeKey}.js`);lo.writeFileSync(i,o,"utf8");for await(const t of e.childs)await this.createType({node:t})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:e}){let t=this.#r[e.type];if(t)return t;const o=this.#t.templateDir;return t=uo.compile(lo.readFileSync(po.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=po.resolve(t,`src/default/blocks/${o}`);lo.writeFileSync(n,e.context.render,"utf8"),e.context.fileName=o,e.context.filePath=n}async transformExpression(e){let t=await this.transformValue(e);return t=JSON.stringify(t),t=this.replaceSpecialPattern(t),t}async transformValue(e){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=await this.transformValue(e[t]);else if(wo(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 zo({expression:e});if(t){const{processor:o,statement:n}=t;switch(o){case"v":e=`$::v.${n}::`;break;case"e":e=`$::${n}::`;break;case"m":e=`$::closure.module['${n}']::`;break;case"f":e=`$::closure.form.${n}::`;break;case"for":e=`$::caller.for.${n}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const e="flow.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:o,...n}=this.#o.doc,i={content:fo.dump(n)},s=this.#t.templateDir,a=uo.compile(lo.readFileSync(po.resolve(s,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=po.resolve(r,`${e}`);lo.writeFileSync(c,a,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:fo.dump(this.#n)},n=this.#t.templateDir,i=uo.compile(lo.readFileSync(po.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),s=this.#t.projectDir,a=po.resolve(s,`${e}`);lo.writeFileSync(a,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=mo.exec("prettier --write .",{cwd:po.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 Oo.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 Oo.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 Ao({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await Oo.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await Oo.update(n,{id:n.id})):n=await Oo.create({parent_id:this.#m.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:o.version}]}})}async setInProgress({message:e}){console.log(Lo.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#g&&!this.#h)return await this.createNetwork();try{const e=this.#g?await Bo({root:this.#l}):void 0;this.#h&&(await this.initWorkflowDir(),await this.initNunjucks(),this.#g&&lo.writeFileSync(po.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 Co(this.#b),await To(this.#b),await So(this.#b),await Po(this.#b),await _o(this.#b),await ko(this.#b),await Do(this.#b),await jo(this.#b),await $o(this.#b),await Eo(this.#b),this.#w&&(await Io(this.#b),await No(this.#b),this.#y&&await this.deploy())),await this._cache_set(this.#d,{status:"COMPLETED",data:{network:e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await Bo({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 fn=p,mn=d;var un=function({baseDir:e=__dirname}){let t=e;for(;t!==mn.parse(t).root;){const e=mn.join(t,"node_modules");if(fn.existsSync(e))return e;t=mn.dirname(t)}return null};const hn=process.cwd(),{spawn:wn}=e;t({name:["redis"],dir:hn,optional:!0});const yn=o,gn=n,{hideBin:bn}=i,xn=s,vn=a,kn=r,jn=c,_n=l,Dn=dn,Pn=un({baseDir:__dirname});async function Sn(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:yn.resolve(hn,`./.output/${e.id}`),templateDir:yn.resolve(Pn,"./@flownet/template-node-workflow/default"),templateCommonDir:yn.resolve(Pn,"./@flownet/template-node-common/default"),coreDir:yn.resolve(Pn,"./@flownet/template-node-workflow/core")}}{const t=await async function(e){const t=yn.resolve(hn,"flow.yaml");if(!xn.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const o=xn.readFileSync(t,"utf8"),{parsed:n}=await jn({content:o}),i=yn.dirname(t),s=n.main||"flow.main.yaml";let a=yn.resolve(i,s);if(!xn.existsSync(a)&&(a=yn.resolve(i,s+".yaml"),!xn.existsSync(a)))throw new Error(`${s} file not found in ${a}.`);const r=xn.readFileSync(a,"utf8"),{parsed:c}=await jn({content:r}),l={workflowAtom:{doc:{...n,"content-type":"yaml",content:r}},projectDir:i,projectFilePath:t,projectFileContent:o,projectFileParsed:n,projectMainFilePath:a,projectMainFileContent:r,projectMainFileParsed:c},p=yn.resolve(i,"flow.devops.yaml");if(xn.existsSync(p)){const e=xn.readFileSync(p,"utf8"),t=vn.parse(e);l.devops={filePath:p,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{xn.writeFileSync(l.devops.filePath,vn.stringify(l.devops.doc))}}}const d=yn.resolve(i,"readme.md");if(xn.existsSync(d)){const e=xn.readFileSync(d,"utf8");l.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:yn.resolve(Pn,"./@flownet/template-node-workflow/default"),templateCommonDir:yn.resolve(Pn,"./@flownet/template-node-common/default"),coreDir:yn.resolve(Pn,"./@flownet/template-node-workflow/core"),projectDir:yn.resolve(t.projectDir,"./.workspace"),projectSrcDir:yn.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${Pn}/.bin:${process.env.PATH}`,gn(bn(process.argv)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"})),(async e=>{try{const t=yn.resolve(Pn,"./@flownet/template-node-workflow/project"),o=yn.resolve(hn,e.name);xn.existsSync(o)||xn.mkdirSync(o),await _n({dir:t,outDir:o,context:e});let n=kn.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(kn.which("git")&&(n=kn.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 Sn(e),o=new Dn(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 Sn({...e,mode:"all"}),o=new Dn(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 Sn({...e,mode:"file"}),o=new Dn(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Sn(e),{projectDir:o}=t,n=`npm ${process.argv.slice(3).join(" ")}`;kn.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Sn(e),{projectDir:o}=t,n=`node ${process.argv.slice(3).join(" ")}`;kn.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Sn(e),{projectDir:o}=t,n=`npm run serve -- ${process.argv.slice(3).join(" ")}`;kn.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Sn(e),{projectDir:o}=t,n=`npm run watch -- ${process.argv.slice(3).join(" ")}`;kn.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Sn(e),{projectDir:o}=t,n=`npm run app -- ${process.argv.slice(3).join(" ")}`;kn.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Sn(e),{projectDir:o}=t,n=process.argv.slice(3);wn("npm",["run","cli","--",...n],{cwd:o,stdio:"inherit"}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}})).demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
2
+ "use strict";var e=require("child_process"),t=require("@fnet/config"),o=require("path"),n=require("yargs/yargs"),i=require("yargs/helpers"),s=require("fs"),a=require("yaml"),r=require("shelljs"),c=require("@fnet/yaml"),l=require("@flownet/lib-render-templates-dir"),p=require("node:fs"),d=require("node:path"),f=require("js-yaml"),m=require("nunjucks"),u=require("lodash.clonedeep"),h=require("isobject"),y=require("redis"),w=require("@flownet/lib-is-redis-online"),g=require("nanoid"),b=require("@flownet/lib-atom-api-js"),x=require("axios"),v=require("qs"),k=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),_=require("@flownet/lib-list-npm-versions"),D=require("@fnet/shell"),P=require("semver"),S=require("node:os"),T=require("@node-red/util"),$=require("@flownet/lib-to-ios-app"),C=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),E=require("@flownet/lib-to-webos"),N=require("@flownet/lib-to-nextjs"),A=require("@flownet/lib-parse-node-url"),O=require("@flownet/lib-bpmn-from-flow"),F=require("@fnet/expression"),q=require("chalk"),B=require("lodash.pick"),J=require("lodash.omit");const M=y,z=w;const{Api:R}=b,L=x.default,K=v;const U=k,W=s,G=o,V=j;const X=_;const H=p,Y=d,Z=l;const Q=m,ee=p,te=d,oe=j,ne=_;const ie=p,se=d,ae=l;const re=p,ce=d,le=m,pe=j;const de=p,fe=d,me=m;const ue=p,he=d,ye=m;const we=p,ge=d,be=m;const xe=m,ve=p,ke=d;const je=r,_e=o;const De=r;const Pe=r;const Se=r;const Te=D,$e=t;const Ce=p,Ie=d,Ee=P,Ne=D,Ae=t;const Oe=p,Fe=d,qe=P,Be=r,Je=t;const Me=p,ze=d,Re=S,Le=m,Ke=T,Ue=t;const We=s,Ge=o,Ve=t;const Xe=$;const He=C;const Ye=I;const Ze=E;const Qe=N,et=u,tt=k,ot=P,nt=d;const it=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,buildId:i})=>{await e({message:"Deploying it as gitlab project."});const s=t.projectDir;let a="fnet-to-gitlab";const r=n.params.config||"gitlab",c=await $e({name:r,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;a+=` --projectGroupId=${l.projectGroupId}`,a+=` --projectPath='${s}'`,a+=` --projectName='${n.params.name}'`,a+=` --projectBranch='${n.params.branch||"main"}'`,a+=` --gitlabHost='${l.gitlabHost}'`,a+=` --gitlabToken='${l.gitlabToken}'`,a+=` --gitlabUsername='${l.gitlabUsername}'`,a+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==n.dryRun&&(await Te({cmd:a}),o.isDirty=!0)},st=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,a=Ie.resolve(s,"package.json"),r=Ce.readFileSync(a),c=JSON.parse(r);c.name=n.params.name,c.version=Ee.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,Ce.writeFileSync(a,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Ae({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='${Ie.resolve(Ie.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${s}'`,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 Ne({cmd:d}),Ce.writeFileSync(a,r),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=c.version,await i({target:n,packageJSON:c}))},at=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as npm package."});const s=o.projectDir,a=Fe.resolve(s,"package.json"),r=Oe.readFileSync(a),c=JSON.parse(r);c.name=i.params.name,c.version=qe.inc(i.params.version,"patch");const l=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/esm/index.js",[e.doc.name]:"dist/cli/esm/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Oe.writeFileSync(a,JSON.stringify(c,null,"\t"));const p=(await Je({name:o.npmConfig||"npm",dir:o.projectDir}))?.data;if(Oe.writeFileSync(Fe.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==Be.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");Oe.writeFileSync(a,r),n.isDirty=!0,i.params.version=c.version},rt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s,packageDependencies:a,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=o.projectDir,l=o.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||Ke.util.generateId(),label:`${p}/${e.id?e.id:Re.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Ke.util.generateId(),name:e.doc.name,initialize:{content:Me.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Ke.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Ke.util.generateId()}}};else if("cronjob"===i.deploy.template){let t=i.params?.schedules?cloneDeep(i.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||Ke.util.generateId(),label:`${p}/${e.id?e.id:Re.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Ke.util.generateId(),name:e.doc.name,initialize:{content:Me.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Ke.util.generateId(),schedules:t},debug:{id:Ke.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||Ke.util.generateId(),label:`${p}/${e.id?e.id:Re.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Ke.util.generateId(),name:e.doc.name,initialize:{content:Me.readFileSync(ze.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Ke.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Ke.util.generateId()},debug:{id:Ke.util.generateId()}}}}let f=Le.compile(Me.readFileSync(ze.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(Me.writeFileSync(ze.resolve(c,"node-red.yaml"),f),f=yaml.load(f),!0===i.dryRun)return;n.isDirty=!0;const m=(await Ue({name:o.redConfig||"red",dir:o.projectDir}))?.data,u=i.deploy.url||m.env.RED_URL,h={};if(!1!==i.deploy.auth&&(h.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:h}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:f,headers:h});else{const e=await axios({method:"POST",url:`${u}/flow`,data:f,headers:h});i.deploy.id=e.data.id}},ct=async({atom:e,Atom:t,setInProgress:o,context:n,packageDependencies:i,deploymentProject:s,deploymentProjectTarget:a})=>{await o({message:"Deploying it as workflow lib."});const r=(await Ve({name:"atom",dir:n.projectDir}))?.data;let c,l,p,d=a.deploy.name.split("/");if(1===d.length)l=r.env.ATOM_LIBRARIES_ID,p=a.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:r.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===a.dryRun)return;if(s.isDirty=!0,a.deploy.id){if(c=await t.get({id:a.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;a.deploy.id=c.id}const f=n.projectDir;c.doc.contents=[{content:We.readFileSync(Ge.resolve(f,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:We.readFileSync(Ge.resolve(f,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:We.readFileSync(Ge.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=i,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},lt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s,registerToPackageManager:a})=>{await t({message:"Deploying it as ios app package."});const r=o.projectDir;if(!0===i.dryRun)return;const c={projectDir:r,dest:r,atom:e,params:i.params};await Xe(c),n.isDirty=!0},pt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s})=>{await t({message:"Deploying it as macos app package."});const a=o.projectDir;if(!0===i.dryRun)return;const r={projectDir:a,dest:a,atom:e,params:i.params};await He(r),n.isDirty=!0},dt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s})=>{await t({message:"Deploying it as electron package."});const a=o.projectDir;if(!0===i.dryRun)return;const r={src:a,dest:a,atom:e,params:i.params};await Ye(r),n.isDirty=!0},ft=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as webos package."});const s=o.projectDir;if(!0===i.dryRun)return;const a={src:s,dest:s,atom:e,params:i.params};await Ze(a),n.isDirty=!0},mt=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as nextjs package."});t.params=tt({name:"nextjs-app",version:"0.1.0"},t.params);const s=ot.inc(t.params.version,"patch");t.params.version=s;const a=et(t);a.params.dependencies=et(i);const r={atom:e,target:a.params,projectDir:n,renderDir:nt.resolve(n,"nextjs")};return{deployer:await Qe(r)}};const ut=u;async function ht({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||ut(e.definition);for(const t of e.childs)t.context.transform=t.context.transform||ut(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await t({node:e}),o({node:e})}var yt={hits:async function({node:e}){if(!e.definition.hasOwnProperty("switch"))return!1;const t=e.definition.switch||[];if(!t.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===t.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const o=t.filter((e=>e.hasOwnProperty("default")));if(o.length>1)throw new Error("Switch must have only one default");if(1===o.length&&!t[t.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");return!0},init:async function({node:e,initNode:t}){e.type="switch",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let o=0;o<e.definition.switch.length;o++){let n=e.definition.switch[o],i=`${o}`;n.hasOwnProperty("default")&&(i="default",n=n.default);const s={name:n.condition||i,childs:[],parent:e,definition:n,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=ht},resolve:ht};const wt=F,gt=yt;var bt={hits:async function({node:e}){const t=Object.keys(e.definition);return 1===(await Promise.all(t.map((e=>wt({expression:e}))))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,o=Object.keys(t.definition),n=await Promise.all(o.map((e=>wt({expression:e})))),i=[],s=n.find((e=>"if"===e?.processor)),a=t.definition[s.expression];i.push({name:`${t.name}_if`,definition:a,processor:s}),delete t.definition[s.expression];const r=n.filter((e=>"elseif"===e?.processor));let c=0;for(const e of r){const o=t.definition[e.expression];i.push({name:`${t.name}_elseif_${c++}`,definition:o,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of i)t.definition.switch.push({condition:e.processor.statement,...e.definition});await gt.init(e)}};const xt=u;async function vt({node:e,resolveTypeCommon:t,resolveNextBlock:o}){if(e.context.transform=e.context.transform||xt(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||xt(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await t({node:e}),o({node:e})}var kt={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:t}){if(e.type="tryexcept",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const o="try",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}if(e.definition.except){const o="except",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}e.resolve=vt},resolve:vt};const jt=u;async function _t({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=jt(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],o=Object.keys(t)[0],s=t[o],a={key:await n(o),value:await n(s)};i.assign[e]=a}await t({node:e}),o({node:e})}var Dt={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",e.resolve=_t},resolve:_t};const Pt=u,St=B,Tt=J;async function $t({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Pt(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await t({node:e}),o({node:e})}var Ct={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[o,n]=[St(e.definition.for,t),Tt(e.definition.for,t)];e.definition.for=o,e.definition.for.steps=[{[`${e.name}_step`]:n}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let o=0;o<e.definition.for.steps.length;o++){const n=e.definition.for.steps[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=$t},resolve:$t};var It={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){}};const Et=u;async function Nt({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||Et(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var At={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=Nt},resolve:Nt};const Ot=u;async function Ft({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||Ot(e.definition);const n=e.context.transform;n.return=await o(n.return),await t({node:e})}var qt={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=Ft},resolve:Ft};const Bt=u;async function Jt({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Bt(e.definition);const i=e.context.transform;i.args&&(i.args=await n(i.args)),i.result&&(i.result=await n(i.result));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.call)),await t({node:e}),o({node:e})}var Mt={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call";for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=Jt},resolve:Jt};const zt=Mt;var Rt={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(e){const{node:t}=e,o="shell",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/shell",n.args="string"===i?{...n.args,cmd:n[o]}:n[o],delete n[o],await zt.init(e)}};const Lt=Mt;var Kt={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(e){const{node:t}=e,o="config",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/config",n.args="string"===i?{...n.args,name:n[o]}:n[o],delete n[o],await Lt.init(e)}};const Ut=Mt;var Wt={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(e){const{node:t}=e,o="yaml",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/yaml",n.args="string"===i?{...n.args,file:n[o]}:n[o],delete n[o],await Ut.init(e)}};async function Gt({node:e}){e.context.next=e.childs[0]}var Vt={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const o=e.definition.steps||[];for await(const n of o){const o=Object.keys(n)[0],i={name:o,childs:[],parent:e,definition:n[o],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=Gt},resolve:Gt};const Xt=u;async function Ht({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||Xt(e.definition);const i=e.context.transform;i.props&&(i.props=await n(i.props));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.form)),await t({node:e}),o({node:e})}var Yt={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form";for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=Ht},resolve:Ht};const Zt=u;async function Qt({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||Zt(e.definition),await t({node:e})}var eo={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Qt},resolve:Qt};const to=u;async function oo({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||to(e.definition);const i=e.context.transform;i.next=await n(i.next),await t({node:e}),o({node:e})}var no={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=oo},resolve:oo};const io=Mt;var so={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(e){const{node:t}=e,o="prompt",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@fnet/prompt",n.args="string"===i?{...n.args,message:n[o]}:n[o],delete n[o],await io.init(e)}};const ao=Mt;var ro={hits:async function({node:e}){return e.definition.hasOwnProperty("html-script")},init:async function(e){const{node:t}=e,o="html-script",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@flownet/lib-load-browser-script-url",n.args="string"===i?{...n.args,src:n[o]}:n[o],delete n[o],await ao.init(e)}};const co=Mt;var lo={hits:async function({node:e}){return e.definition.hasOwnProperty("html-link")},init:async function(e){const{node:t}=e,o="html-link",n=t.definition,i=typeof n[o];if("string"!==i&&"object"!==i)throw new Error(`Unsupported ${o} usage`);n.call="npm:@flownet/lib-load-browser-link-url",n.args="string"===i?{...n.args,src:n[o]}:n[o],delete n[o],await co.init(e)}};const po=p,fo=d,mo=f,uo=r,ho=m,yo=u,wo=h,go=async()=>{if(!await z({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=M.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:bo}=g,xo=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);L({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:K.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{R.set_req_token(e.data.access_token),o(e.data.access_token)})).catch((e=>{R.set_req_token(),n(e)}))}))}},vo=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=G.resolve(t.project.projectDir),i=G.resolve(n,"./app/index.js");if(W.existsSync(i)){let e=await V({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 V({file:i}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.app_entry_uses_jsx=t}const s=G.resolve(n,"./cli/index.js");if(W.existsSync(s)){let e=await V({file:s,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 V({file:s}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.cli_entry_uses_jsx=t}if("workflow.lib"===e.type){const e=G.resolve(n,"./src/index.js");if(W.existsSync(e)){let t=await V({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 V({file:e}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),o.src_entry_uses_jsx=n}}const a=!0===o.app_has_entry||!0===o.src_uses_jsx,r=!0===o.cli_has_entry||!0===o.src_uses_jsx;o.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===o.form||!0===o.form?.enabled,o.multiple_enabled=o.multiple_enabled||!0===o.multiple||!0===o.multiple?.enabled,!1===o.app?o.app={enabled:!1}:!0===o.app?o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:a}:o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:a,...o.app||{}},o.app.enabled=!0===o.app.enabled&&(!0===e.doc.features.form_enabled||!0===o.app.extend||!0===o.app.enabled),o.app.format=o.app.format||"esm",o.app.folder=o.app.folder||o.app.format||"default",!1===o.cli?o.cli={enabled:!1}:!0===o.cli?o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r}:o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r,...o.cli||{}},o.cli.enabled=!0===o.cli.enabled&&(!1===e.doc.features.form_enabled||!0===o.cli.extend||!0===o.cli.enabled),o.cli.format=o.cli.format||"esm",o.cli.folder=o.cli.folder||o.cli.folder||"esm";const c={cjs:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!0,string:!0},cjsx:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0,string:!0},esm:{format:"esm",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0,copy:!0,string:!0},esmx:{format:"esm",browser:!0,babel:!0,context:o.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0,string:!0},iife:{format:"iife",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0,string:!0},umd:{format:"umd",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1,string:!0}},l={};!0===o.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,string:!0,babel_options:{targets:{chrome:"79"}}}),!0===o.app.enabled&&(o.app.dir=`./dist/app/${o.app.folder}`,c.app={format:o.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:o.app.dir,terser:!0,output_exports:!1===o.app.export?"none":"auto",string:!0},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:o.app.dir})),!0===o.cli.enabled&&(o.cli.dir=`./dist/cli/${o.cli.folder}`,c.cli={format:o.cli.format,context:"global",babel:!0===o.src_uses_jsx||!0===o.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:o.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===o.cli.export?"none":"auto",string:!0});const p={server:".",startPath:`${o.app.dir}`,files:["./dist/**/*"]};o.babel_options=o.babel_options||o.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},o.browsersync_options=U(p,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=U({},o.replace_options||o.replace?.options||{}),o.terser_options=U({},o.terser_options||o.terser?.options||{}),o.css_options=U({},o.css_options||o.css?.options||{}),o.wasm_options=U({},o.wasm_options||o.wasm?.options||{}),o.copy_options=U(l,o.copy_options||o.copy?.options||{}),o.json_options=U({},o.json_options||o.json?.options||{}),o.image_options=U({},o.image_options||o.image?.options||{}),o.analyzer_options=U({summaryOnly:!0,limit:12},o.analyzer_options||o.analyzer?.options||{}),o.visualizer_options=U({},o.visualizer_options||o.visualizer?.options||{}),o.string_options=U({},o.string_options||o.string?.options||{}),o.rollup=o.rollup||{},o.rollup_output=U(c,o.rollup_output||o.rollup?.output||{}),o.string_enabled=!0===o.string||o.string&&!1!==o.string?.enabled;const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==o.rollup[e]?(!0===o.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||o.babel_options,t.browsersync_options=U(o.browsersync_options,t.browsersync_options),t.replace_options=U(o.replace_options,t.replace_options),t.terser_options=U(o.terser_options,t.terser_options),t.css_options=U(o.css_options,t.css_options),t.wasm_options=U(o.wasm_options,t.wasm_options),t.copy_options=U(o.copy_options,t.copy_options),t.json_options=U(o.json_options,t.json_options),t.image_options=U(o.image_options,t.image_options),t.analyzer_options=U(o.analyzer_options,t.analyzer_options),t.visualizer_options=U(o.visualizer_options,t.visualizer_options),t.string_options=U(o.string_options,t.string_options),t.string=o.string_enabled&&t.string,o.form_enabled&&(t.babel=!0)):t.enabled=!1)}o.babel_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browser_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browsersync_enabled=d.some((e=>!0===o.rollup_output[e].browsersync)),o.browsersync_enabled=o.browsersync_enabled&&o.app.enabled,o.wasm_enabled=!0===o.wasm||o.wasm&&!1!==o.wasm?.enabled,o.css_enabled=!0===o.css||o.css&&!1!==o.css?.enabled,o.json_enabled=!0===o.json||o.json&&!1!==o.json?.enabled,o.terser_enabled=!0===o.terser||o.terser&&!1!==o.terser?.enabled,o.copy_enabled=o.app.enabled||o.copy_enabled||o.copy&&!1!==o.copy?.enabled,o.image_enabled=!0===o.image||o.image&&!1!==o.image?.enabled,o.analyzer_enabled=!0===o.analyzer||o.analyzer&&!1!==o.analyzer?.enabled,o.visualizer_enabled=!0===o.visualizer||o.visualizer&&!1!==o.visualizer?.enabled,o.dependency_auto_enabled=!1!==o.dependency_auto&&!1!==o.dependency_auto?.enabled,o.npm_install_flags=o.npm_install_flags||"",o.react_version=o.react_version||o.react?.version||18},ko=async({atom:e,packageDependencies:t,packageDevDependencies:o})=>{if("workflow"===e.type&&(t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let o="^18.2";o=`^${(await X({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.analyzer_enabled&&o.push({package:"rollup-plugin-analyzer",version:"^3.3"}),e.doc.features.visualizer_enabled&&o.push({package:"rollup-plugin-visualizer",version:"^5.9"}),e.doc.features.string_enabled&&o.push({package:"rollup-plugin-string",version:"^3.0"}),e.doc.features.css_enabled){o.push({package:"rollup-plugin-postcss",version:"4.0"}),o.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":o.push({package:"postcss-import",version:"^15.1"});break;case"postcss-url":o.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":o.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":o.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":o.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&o.push({package:"rollup-plugin-copy",version:"^3.5"})},jo=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n,ts:Date.now()},s=o.templateDir,a=Y.resolve(o.projectDir,"src/app");H.existsSync(a)||H.mkdirSync(a,{recursive:!0}),await Z({pattern:["index.html.njk","index.js.njk"],dir:Y.resolve(s,"src/app"),outDir:a,context:i})},_o=async({atom:e,context:t,packageDependencies:o,packageDevDependencies:n,setInProgress:i})=>{await i({message:"Creating package.json."});const s=o.find((e=>"react"===e.package)),a=o.find((e=>"react-dom"===e.package));s&&!a?o.push({package:"react-dom",version:s.version}):s&&a&&(a.version=s.version),s&&e.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push(te.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&r.push(te.resolve(t.projectDir,"src/cli/index.js"));for await(const t of r){const i=t;if(!ee.existsSync(i))throw new Error(`App file not found: ${i}`);const s=await oe({file:i,recursive:!0}),a=!0===e.doc.features.all_parsed_imports?s.all:s.required;for await(const e of a){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;if(n.find((t=>t.package===e.package)))continue;const t=(await ne({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=Q.compile(ee.readFileSync(te.resolve(l,"package.json.njk"),"utf8"),Q.configure(l)).render(c),d=t.projectDir,f=te.resolve(d,"package.json");ee.writeFileSync(f,p,"utf8")},Do=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:n},s=o.templateDir,a=se.resolve(o.projectDir,"src/cli");ie.existsSync(a)||ie.mkdirSync(a,{recursive:!0}),await ae({pattern:["index.js.njk"],dir:se.resolve(s,"src/cli"),outDir:a,context:i})},Po=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:n},s=ce.resolve(o.projectDir,"src","default/index.js");if(!re.existsSync(s))throw new Error(`Entry file not found: ${s}`);const a=(await pe({file:s,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&a.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(a.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<a.length;e++){const o=a[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(a)}}const l=o.templateCommonDir,p=le.compile(re.readFileSync(ce.resolve(l,"rollup.config.js.njk"),"utf8"),le.configure(l)).render(i),d=o.projectDir,f=ce.resolve(d,"rollup.config.js");re.writeFileSync(f,p,"utf8")},So=async({atom:e,setInProgress:t,context:o,njEnv:n})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const i={},s=e.doc.inputs||[],a=[];s.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&a.push(e);const t={};e.type&&(t.type=e.type),e.default&&(t.default=e.default),e.choices&&(t.choices=e.choices),(e.describe||e.description)&&(t.describe=e.describe||e.description),e.alias&&(t.alias=e.alias),!0===e.required&&(t.required=!0),!0===e.hidden&&(t.hidden=!0),!0===e.array&&(t.array=!0),!0===e.normalize&&(t.normalize=!0),e.nargs&&(t.nargs=e.nargs),i[e.name]=t}));const r={options:i,imports:a,atom:e},c=o.templateDir,l=me.compile(de.readFileSync(fe.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),n).render(r),p=o.projectDir,d=fe.resolve(p,"src/default/to.yargs.js");de.writeFileSync(d,l,"utf8")},To=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},s=o.templateCommonDir,a=ye.compile(ue.readFileSync(he.resolve(s,".gitignore.njk"),"utf8"),ye.configure(s)).render(i),r=o.projectDir,c=he.resolve(r,".gitignore");ue.writeFileSync(c,a,"utf8")},$o=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:n},s=o.templateCommonDir,a=be.compile(we.readFileSync(ge.resolve(s,"tsconfig.json.njk"),"utf8"),be.configure(s)).render(i),r=o.projectDir,c=ge.resolve(r,"tsconfig.json");we.writeFileSync(c,a,"utf8")},Co=async({atom:e,context:t,setInProgress:o,Atom:n})=>{const i="readme.md",s=`Creating ${i}`;if(await o({message:s}),t.project?.readme){const e={content:t.project.readme.doc.content},o=t.templateCommonDir,n=xe.compile(ve.readFileSync(ke.resolve(o,`${i}.njk`),"utf8"),xe.configure(o)).render(e),s=t.projectDir,a=ke.resolve(s,`${i}`);ve.writeFileSync(a,n,"utf8")}else if(e.id){const o=await n.first({type:"wiki",parent_id:e.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:s,...a}=o.doc,r={content:s},c=t.templateCommonDir,l=xe.compile(ve.readFileSync(ke.resolve(c,`${i}.njk`),"utf8"),xe.configure(c)).render(r),p=t.projectDir,d=ke.resolve(p,`${i}`);ve.writeFileSync(d,l,"utf8")}},Io=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});let n=_e.join("src","**","*");if(0!==je.exec(`prettier --write ${n} *.{js,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o}).code)throw new Error("Couldnt format files.")},Eo=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Creating .d.ts"});if(0!==De.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},No=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==Pe.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},Ao=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==Se.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},Oo=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:s}=e;if(!0===i.enabled)if("lib"===i.name)await ct({...e});else if("red"===i.name)await rt({...e});else if("npm"===i.name)await at({...e});else if("gcs"===i.name)await st({...e});else if("gitlab"===i.name)await it({...e});else if("macos-app"===i.name)await pt({...e});else if("ios-app"===i.name)await lt({...e});else if("electron"===i.name)await dt({...e});else if("webos"===i.name)await ft({...e});else{let e;if("nextjs"===i.name&&(e=mt),!e)return;await e({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o})}},{Atom:Fo}=b,qo=A,Bo=_,Jo=O,Mo=t,zo=j,Ro=F,Lo=c,Ko=q,Uo=bt,Wo=kt,Go=Dt,Vo=Ct,Xo=yt,Ho=It,Yo=At,Zo=qt,Qo=Mt,en=Rt,tn=Kt,on=Wt,nn=Vt,sn=Yt,an=eo,rn=no,cn=so,ln=ro,pn=lo,dn=({node:e})=>{const t=e.definition;if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let o=e.parent;for(;o.parent;){const n=o.childs.find((e=>e.name===t.next));if(n){e.context.next=n;break}o=o.parent}}else{let t=e.parent,o=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(void 0!==t.blockAutoJumpToParent||void 0!==t.blockAutoJumpToSibling){if(t.blockAutoJumpToParent){const n=t.childs.find((e=>e.index===o));n&&(e.context.next=n);break}t.blockAutoJumpToParent||(o=t.index+1,t=t.parent)}else{const n=t.childs.find((e=>e.index===o));if(n){e.context.next=n;break}o=t.index+1,t=t.parent}}};var fn=class{#e;#t;#o;#n;#i;#s;#a;#r;#c;#l;#p;#d;#f;#m;#u;#h;#y;#w;#g;#b;#x;constructor(e){this.#e=new xo,this.#t=e,this.#s=[],this.#a=[],this.#r={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#b={packageDependencies:this.#s,packageDevDependencies:this.#a,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Fo,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#x={initNode:this.initNode.bind(this),cloneDeep:yo,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:dn,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await go(),this.#p=this.#t.buildId||bo(24),this.#b.buildId=this.#p,this.#u=this.#t.mode,this.#h=["all","deploy","build","file"].includes(this.#u),this.#y=["all","deploy","build"].includes(this.#u),this.#w=["all","deploy"].includes(this.#u),this.#g=["all","deploy","build","file","bpmn"].includes(this.#u),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#m=(await Mo({optional:!0,name:"atom",dir:this.#t.projectDir}))?.data;try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await vo(this.#b),await ko(this.#b),await this.transformWorkflow({workflow:this.#n});const e=await this.initNodeTree({workflow:this.#n});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#s}),await this.resolveNodeTree({root:e}),this.#l=e}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#c=await this.#e.init({config:this.#m}),this.#b.atomAccessToken=this.#c)}async initWorkflow(){const e=this.#t.id;this.#o=this.#t.project?.workflowAtom||await Fo.get({id:e}),this.#n="string"==typeof this.#o.doc.content?(await Lo({content:this.#o.doc.content})).parsed:this.#o.doc.content;let t=this.#o.doc.bundleName;t=t||(this.#o.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#o.doc.bundleName=t,this.#o.type=this.#o.type||"workflow",this.#b.atom=this.#o}async initDependencies(){this.#s.push({package:"get-value",version:"^3.0"}),this.#s.push({package:"set-value",version:"^4.1"}),this.#o.doc.features.form_enabled?(this.#s.push({package:"react",version:"^18.2"}),this.#s.push({package:"react-dom",version:"^18.2"}),this.#s.push({package:"@flownet/react-app",version:"^0.1"}),this.#s.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#s.push({package:"yargs",version:"^17"}),this.#s.push({package:"chalk",version:"^4"})}#v(e){po.statSync(e).isDirectory()?(po.readdirSync(e).forEach((t=>{const o=fo.join(e,t);this.#v(o)})),po.rmdirSync(e)):po.unlinkSync(e)}#k(e,t){const o=po.existsSync(e),n=o&&po.statSync(e);o&&n.isDirectory()?(po.mkdirSync(t,{recursive:!0}),po.readdirSync(e).forEach((o=>{this.#k(fo.join(e,o),fo.join(t,o))}))):po.copyFileSync(e,t)}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir,o=["node_modules"];if(po.existsSync(e)){const t=po.readdirSync(e);for(const n of t)if(!o.includes(n)){const t=fo.join(e,n);this.#v(t)}}po.existsSync(e)||po.mkdirSync(e,{recursive:!0});const n=fo.join(e,"src");po.existsSync(n)||po.mkdirSync(n,{recursive:!0});const i=fo.join(n,"core");this.#k(t,i);const s=fo.join(n,"default","blocks");po.existsSync(s)||po.mkdirSync(s,{recursive:!0})}async initNunjucks(){const e=this.#t.templateDir;this.#i=ho.configure(e,{watch:!1,dev:!0}),this.#b.njEnv=this.#i}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,o]=Object.entries(e)[0];if(o.hasOwnProperty("onerror")){const{onerror:n,...i}=o;e[t]={try:i,except:n}}if(e[t].hasOwnProperty("steps")){const o=e[t].steps;if(!Array.isArray(o))throw new Error("Steps must be an array.");e[t].steps=o.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),o={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#o}};t.forEach((t=>{const n={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:o,definition:e[t],index:o.childs.length,depth:o.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};o.childs.push(n)}));for await(const e of o.childs)await this.initNode({node:e});return o}async initNode({node:e}){const t={...this.#x,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await Wo.hits(t))await Wo.init(t);else if(await Vo.hits(t))await Vo.init(t);else if(await Xo.hits(t))await Xo.init(t);else if(await Uo.hits(t))await Uo.init(t);else if(await Ho.hits(t))await Ho.init(t);else if(await Go.hits(t))await Go.init(t);else if(await Yo.hits(t))await Yo.init(t);else if(await Zo.hits(t))await Zo.init(t);else if(await Qo.hits(t))await Qo.init(t);else if(await en.hits(t))await en.init(t);else if(await tn.hits(t))await tn.init(t);else if(await on.hits(t))await on.init(t);else if(await ln.hits(t))await ln.init(t);else if(await pn.hits(t))await pn.init(t);else if(await sn.hits(t))await sn.init(t);else if(await an.hits(t))await an.init(t);else if(await cn.hits(t))await cn.init(t);else if(await nn.hits(t))await nn.init(t);else{if(!await rn.hits(t))throw new Error("Undefined step type.");await rn.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const o of e.childs)await this.initNodeIndex({node:o,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const o=fo.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=bo(24);for await(const o of e.childs)await this.initNodeIndex({node:o,index:t})}async initNodeCalls({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"call"===n.type&&o.push(n)}return e.context.calls=o,o}async initNodeCallLibs({root:e}){const t=[],o=e.context.calls;for await(const e of o){const o=e.definition.call,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.call,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"form"===n.type&&o.push(n)}return e.context.forms=o,o}async initNodeFormLibs({root:e}){const t=[],o=e.context.forms;for await(const e of o){const o=e.definition.form,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.form,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const o=e.filter((e=>"atom"===e.type));for(let e=0;e<o.length;e++){const n=o[e],i=await this.findAtomLibrary({url:n.name});n.atom=i;const s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const o=t.find((t=>t.package===e.package));o?"string"==typeof e.path?(o.path||[]).some((t=>t===e.path))||(o.path=o.path||[],o.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(o.path||[]).some((t=>t===e))||(o.path=o.path||[],o.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=qo({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#f),"ac:"===t.protocol){const o=t.pathname.split("/");if(1===o.length)return await Fo.first({where:{name:e,parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await Fo.first({where:{name:o[0],parent_id:this.#m.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Fo.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=fo.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await zo({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 Bo({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 Bo({name:t.pathname,groupBy:{minor:!0}}))[0][0];return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:[{package:t.pathname,version:`^${e}`,type:"npm"}]},protocol:t.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=yo(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const o=t.params[e];if("string"==typeof o)t.params[e]={key:o,hasDefault:!1};else{const n=Object.keys(o)[0];t.params[e]={key:n,hasDefault:!0,default:o[n]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#x,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:e}){await this.setInProgress({message:"Creating external lib files."}),this.#o.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const o=t[e].atom,n=this.#t.projectDir;if("local:"===o.protocol){const e=fo.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=fo.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!po.existsSync(e)){po.mkdirSync(fo.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",po.writeFileSync(e,t,"utf8")}o.relativePath=t.split(fo.sep).join("/"),this.#o.typesDir=`./types/${fo.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;po.writeFileSync(fo.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=ho.compile(po.readFileSync(fo.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=fo.resolve(n,"src/default/index.js");po.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=ho.compile(po.readFileSync(fo.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=fo.resolve(n,`src/default/${e.codeKey}.js`);po.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=ho.compile(po.readFileSync(fo.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=fo.resolve(t,`src/default/blocks/${o}`);po.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(wo(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 Ro({expression:e});if(t){const{processor:o,statement:n}=t;switch(o){case"v":e=`$::v.${n}::`;break;case"e":e=`$::${n}::`;break;case"m":e=`$::closure.module['${n}']::`;break;case"f":e=`$::closure.form.${n}::`;break;case"for":e=`$::caller.for.${n}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const e="flow.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:o,...n}=this.#o.doc,i={content:mo.dump(n)},s=this.#t.templateDir,a=ho.compile(po.readFileSync(fo.resolve(s,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=fo.resolve(r,`${e}`);po.writeFileSync(c,a,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:mo.dump(this.#n)},n=this.#t.templateDir,i=ho.compile(po.readFileSync(fo.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),s=this.#t.projectDir,a=fo.resolve(s,`${e}`);po.writeFileSync(a,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=uo.exec("prettier --write .",{cwd:fo.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 Fo.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 Fo.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 Oo({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await Fo.first({name:t.params.name,parent_id:this.#m.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await Fo.update(n,{id:n.id})):n=await Fo.create({parent_id:this.#m.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:o.version}]}})}async setInProgress({message:e}){console.log(Ko.blue(e)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:e})}async build(){if(this.#g&&!this.#h)return await this.createNetwork();try{const e=this.#g?await Jo({root:this.#l}):void 0;this.#h&&(await this.initWorkflowDir(),await this.initNunjucks(),this.#g&&po.writeFileSync(fo.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 Co(this.#b),await $o(this.#b),await To(this.#b),await So(this.#b),await Do(this.#b),await jo(this.#b),await Po(this.#b),await _o(this.#b),await Io(this.#b),await Eo(this.#b),this.#y&&(await No(this.#b),await Ao(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 Jo({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 mn=p,un=d;var hn=function({baseDir:e=__dirname}){let t=e;for(;t!==un.parse(t).root;){const e=un.join(t,"node_modules");if(mn.existsSync(e))return e;t=un.dirname(t)}return null};const yn=process.cwd(),{spawn:wn}=e;t({name:["redis"],dir:yn,optional:!0});const gn=o,bn=n,{hideBin:xn}=i,vn=s,kn=a,jn=r,_n=c,Dn=l,Pn=fn,Sn=hn({baseDir:__dirname}),Tn="win32"===process.platform?";":":";async function $n(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:gn.resolve(yn,`./.output/${e.id}`),templateDir:gn.resolve(Sn,"./@flownet/template-node-workflow/default"),templateCommonDir:gn.resolve(Sn,"./@flownet/template-node-common/default"),coreDir:gn.resolve(Sn,"./@flownet/template-node-workflow/core")}}{const t=await async function(e){const t=gn.resolve(yn,"flow.yaml");if(!vn.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const o=vn.readFileSync(t,"utf8"),{parsed:n}=await _n({content:o}),i=gn.dirname(t),s=n.main||"flow.main.yaml";let a=gn.resolve(i,s);if(!vn.existsSync(a)&&(a=gn.resolve(i,s+".yaml"),!vn.existsSync(a)))throw new Error(`${s} file not found in ${a}.`);const r=vn.readFileSync(a,"utf8"),{parsed:c}=await _n({content:r}),l={workflowAtom:{doc:{...n,"content-type":"yaml",content:r}},projectDir:i,projectFilePath:t,projectFileContent:o,projectFileParsed:n,projectMainFilePath:a,projectMainFileContent:r,projectMainFileParsed:c},p=gn.resolve(i,"flow.devops.yaml");if(vn.existsSync(p)){const e=vn.readFileSync(p,"utf8"),t=kn.parse(e);l.devops={filePath:p,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{vn.writeFileSync(l.devops.filePath,kn.stringify(l.devops.doc))}}}const d=gn.resolve(i,"readme.md");if(vn.existsSync(d)){const e=vn.readFileSync(d,"utf8");l.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:gn.resolve(Sn,"./@flownet/template-node-workflow/default"),templateCommonDir:gn.resolve(Sn,"./@flownet/template-node-common/default"),coreDir:gn.resolve(Sn,"./@flownet/template-node-workflow/core"),projectDir:gn.resolve(t.projectDir,"./.workspace"),projectSrcDir:gn.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${gn.join(Sn,"/.bin")}${Tn}${process.env.PATH}`,bn(xn(process.argv)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"})),(async e=>{try{const t=gn.resolve(Sn,"./@flownet/template-node-workflow/project"),o=gn.resolve(yn,e.name);vn.existsSync(o)||vn.mkdirSync(o),await Dn({dir:t,outDir:o,context:e});let n=jn.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(jn.which("git")&&(n=jn.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 $n(e),o=new Pn(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 $n({...e,mode:"all"}),o=new Pn(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 $n({...e,mode:"file"}),o=new Pn(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await $n(e),{projectDir:o}=t,n=`npm ${process.argv.slice(3).join(" ")}`;jn.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await $n(e),{projectDir:o}=t,n=`node ${process.argv.slice(3).join(" ")}`;jn.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await $n(e),{projectDir:o}=t,n=`npm run serve -- ${process.argv.slice(3).join(" ")}`;jn.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await $n(e),{projectDir:o}=t,n=`npm run watch -- ${process.argv.slice(3).join(" ")}`;jn.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await $n(e),{projectDir:o}=t,n=`npm run app -- ${process.argv.slice(3).join(" ")}`;jn.exec(n,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.help(!1).version(!1)),(async e=>{try{const t=await $n(e),{projectDir:o}=t,n=process.argv.slice(3);wn("npm",["run","cli","--",...n],{cwd:o,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}})).demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e,t,i=require("@fnet/config"),s=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),d=require("path"),c=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),p=require("keycloak-connect"),w=require("qs");function _(){if(t)return e;t=1;const i=s,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=i.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}}var f,b,m,y,k={name:"@fnet/cli",version:"0.27.2",files:["dist"],scripts:{start:"node src/index.js",build:"rollup --config --bundleConfigAsCjs",deploy:"npm install && npm run build && npm publish --access public",watch:"rollup --config --watch --sourcemap --bundleConfigAsCjs --environment DEVELOPMENT"},repository:{type:"git",url:"git+https://gitlab.com/fnetai/cli.git"},license:"MIT",dependencies:{"@flownet/lib-atom-api-js":"^0.1.10","@flownet/lib-bpmn-from-flow":"^0.1.8","@flownet/lib-is-redis-online":"^0.1.13","@flownet/lib-list-npm-versions":"^0.1.31","@flownet/lib-parse-imports-js":"^0.2.1","@flownet/lib-parse-node-url":"^0.1.16","@flownet/lib-pick-npm-versions":"^0.1.12","@flownet/lib-render-templates-dir":"^0.1.12","@flownet/lib-to-electron":"^0.2.1","@flownet/lib-to-gitlab":"^0.1.21","@flownet/lib-to-ios-app":"^0.2.5","@flownet/lib-to-macos-app":"^0.2.3","@flownet/lib-to-nextjs":"^0.1.12","@flownet/lib-to-webos":"^0.2.8","@flownet/lib-upload-files-to-gcs":"^0.2.2","@flownet/template-node-common":"^0.19.2","@flownet/template-node-library":"^0.15.2","@flownet/template-node-workflow":"^0.16.0","@fnet/config":"^0.2.6","@fnet/expression":"^0.1.16","@fnet/shell":"^0.1.12","@fnet/yaml":"^0.1.11","@node-red/util":"^3.1.0",axios:"^1.5.0",chalk:"^4.1.2",cors:"^2.8.5",express:"^4.18.2","express-session":"^1.17.3","get-value":"^3.0.1",helmet:"^5.1.1",isobject:"^4.0.0","js-yaml":"^4.1.0","keycloak-connect":"^22.0.3","lodash.clonedeep":"^4.5.0","lodash.merge":"^4.6.2","lodash.omit":"^4.5.0","lodash.pick":"^4.4.0",minimist:"^1.2.8",nanoid:"^3.3.6",nunjucks:"^3.2.4",prettier:"^3.0.3",qs:"^6.11.2",redis:"^4.6.10","request-ip":"^3.3.0",semver:"^7.5.4",serve:"^14.2.1","set-value":"^4.1.0",shelljs:"^0.8.5",typescript:"^5.2.2",uuid:"^9.0.1",yaml:"^2.3.2",yargs:"^17.7.2"},bin:{fnet:"dist/builder/wf-cli.js",flib:"dist/builder/lib-cli.js",fsrv:"dist/index.js",fnode:"dist/builder/lib-cli.js"},devDependencies:{"@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.1","@rollup/plugin-replace":"^5.0.2","@rollup/plugin-terser":"^0.4.3",rollup:"^3.29.1"}};const g=process.cwd(),v=i;(async function(){await v({name:["server","redis"],dir:g,optional:!0});const e=await _()();if(!e)throw new Error("Redis is offline.");const t=k,i=n,s=o,r=l,j=function(){if(b)return f;b=1;const e=n,t=d,i=c,{nanoid:s}=a;return f=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/workflow/builder/create",this._buildHandler.bind(this)),t.post("/workflow/builder/status",this._statusHandler.bind(this)),t.post("/workflow/builder/network",this._networkHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,i){await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_networkHandler(e,t){this._network({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const i=e.body.id;if(!i)throw new Error("Build Id is not defined.");const s="BUILD:"+i;this._cache_get(s).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=all`;return i.exec(o,{async:!0,cwd:this.#e}),{id:n}}async _network(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=bpmn`;i.exec(o,{cwd:this.#e});const l="BUILD:"+n;return await this._cache_get(l)}}}(),E=function(){if(y)return m;y=1;const e=n,t=d,i=c,{nanoid:s}=a;return m=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/library/builder/create",this._buildHandler.bind(this)),t.post("/library/builder/status",this._statusHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,i){await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const i=e.body.id;if(!i)throw new Error("Build Id is not defined.");const s="BUILD:"+i;this._cache_get(s).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Library Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/lib-cli.js")} build --id=${r} --buildId=${n} --mode=all}`;return i.exec(o,{async:!0,cwd:this.#e}),{id:n}}}}(),x=u,q=h,S=new(0,q.MemoryStore),I=new p({store:S}),R=i(),T=w;R.set("query parser",(function(e){return T.parse(e,{depth:12})})),R.use(q({secret:process.env.SESSION_SECRET,resave:!1,saveUninitialized:!0,store:S})),R.use(r()),R.use(s()),R.use(i.json({limit:"1024kb"})),R.get("/healthz",(function(e,t){t.sendStatus(200)})),R.use(x.mw()),R.use(I.middleware()),new j({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),new E({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),R.listen(process.env.HTTP_PORT||8080),console.log(`[${t.version}] ${t.name} started.`)})().catch((e=>{console.error(e.message),process.exit(1)})),module.exports={};
2
+ "use strict";var e,t,i=require("@fnet/config"),s=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),d=require("path"),c=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),p=require("keycloak-connect"),w=require("qs");function _(){if(t)return e;t=1;const i=s,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=i.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}}var f,b,m,y,k={name:"@fnet/cli",version:"0.27.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"},repository:{type:"git",url:"git+https://gitlab.com/fnetai/cli.git"},license:"MIT",dependencies:{"@flownet/lib-atom-api-js":"^0.1.10","@flownet/lib-bpmn-from-flow":"^0.1.8","@flownet/lib-is-redis-online":"^0.1.13","@flownet/lib-list-npm-versions":"^0.1.31","@flownet/lib-parse-imports-js":"^0.2.1","@flownet/lib-parse-node-url":"^0.1.16","@flownet/lib-pick-npm-versions":"^0.1.12","@flownet/lib-render-templates-dir":"^0.1.12","@flownet/lib-to-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.20.0","@flownet/template-node-library":"^0.16.0","@flownet/template-node-workflow":"^0.17.0","@fnet/config":"^0.2.6","@fnet/expression":"^0.1.16","@fnet/shell":"^0.1.12","@fnet/yaml":"^0.1.11","@node-red/util":"^3.1.0",axios:"^1.5.0",chalk:"^4.1.2",cors:"^2.8.5",express:"^4.18.2","express-session":"^1.17.3","get-value":"^3.0.1",helmet:"^5.1.1",isobject:"^4.0.0","js-yaml":"^4.1.0","keycloak-connect":"^22.0.3","lodash.clonedeep":"^4.5.0","lodash.merge":"^4.6.2","lodash.omit":"^4.5.0","lodash.pick":"^4.4.0",minimist:"^1.2.8",nanoid:"^3.3.6",nunjucks:"^3.2.4",prettier:"^3.0.3",qs:"^6.11.2",redis:"^4.6.10","request-ip":"^3.3.0",semver:"^7.5.4",serve:"^14.2.1","set-value":"^4.1.0",shelljs:"^0.8.5",typescript:"^5.2.2",uuid:"^9.0.1",yaml:"^2.3.2",yargs:"^17.7.2"},bin:{fnet:"dist/builder/wf-cli.js",flib:"dist/builder/lib-cli.js",fsrv:"dist/index.js",fnode:"dist/builder/lib-cli.js"},devDependencies:{"@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.1","@rollup/plugin-replace":"^5.0.2","@rollup/plugin-terser":"^0.4.3",rollup:"^3.29.1"}};const g=process.cwd(),v=i;(async function(){await v({name:["server","redis"],dir:g,optional:!0});const e=await _()();if(!e)throw new Error("Redis is offline.");const t=k,i=n,s=o,r=l,j=function(){if(b)return f;b=1;const e=n,t=d,i=c,{nanoid:s}=a;return f=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/workflow/builder/create",this._buildHandler.bind(this)),t.post("/workflow/builder/status",this._statusHandler.bind(this)),t.post("/workflow/builder/network",this._networkHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,i){await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_networkHandler(e,t){this._network({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const i=e.body.id;if(!i)throw new Error("Build Id is not defined.");const s="BUILD:"+i;this._cache_get(s).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=all`;return i.exec(o,{async:!0,cwd:this.#e}),{id:n}}async _network(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=bpmn`;i.exec(o,{cwd:this.#e});const l="BUILD:"+n;return await this._cache_get(l)}}}(),E=function(){if(y)return m;y=1;const e=n,t=d,i=c,{nanoid:s}=a;return m=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/library/builder/create",this._buildHandler.bind(this)),t.post("/library/builder/status",this._statusHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,i){await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const i=e.body.id;if(!i)throw new Error("Build Id is not defined.");const s="BUILD:"+i;this._cache_get(s).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Library Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/lib-cli.js")} build --id=${r} --buildId=${n} --mode=all}`;return i.exec(o,{async:!0,cwd:this.#e}),{id:n}}}}(),x=u,q=h,S=new(0,q.MemoryStore),I=new p({store:S}),R=i(),T=w;R.set("query parser",(function(e){return T.parse(e,{depth:12})})),R.use(q({secret:process.env.SESSION_SECRET,resave:!1,saveUninitialized:!0,store:S})),R.use(r()),R.use(s()),R.use(i.json({limit:"1024kb"})),R.get("/healthz",(function(e,t){t.sendStatus(200)})),R.use(x.mw()),R.use(I.middleware()),new j({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),new E({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),R.listen(process.env.HTTP_PORT||8080),console.log(`[${t.version}] ${t.name} started.`)})().catch((e=>{console.error(e.message),process.exit(1)})),module.exports={};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fnet/cli",
3
- "version": "0.27.2",
3
+ "version": "0.27.4",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -31,9 +31,9 @@
31
31
  "@flownet/lib-to-nextjs": "^0.1.12",
32
32
  "@flownet/lib-to-webos": "^0.2.8",
33
33
  "@flownet/lib-upload-files-to-gcs": "^0.2.2",
34
- "@flownet/template-node-common": "^0.19.2",
35
- "@flownet/template-node-library": "^0.15.2",
36
- "@flownet/template-node-workflow": "^0.16.0",
34
+ "@flownet/template-node-common": "^0.20.0",
35
+ "@flownet/template-node-library": "^0.16.0",
36
+ "@flownet/template-node-workflow": "^0.17.0",
37
37
  "@fnet/config": "^0.2.6",
38
38
  "@fnet/expression": "^0.1.16",
39
39
  "@fnet/shell": "^0.1.12",