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