@fnet/cli 0.21.0 → 0.21.2

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