@fnet/cli 0.14.4 → 0.14.6
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("@flownet/lib-load-fnet-config"),t=require("path"),o=require("yargs/yargs"),a=require("yargs/helpers"),s=require("fs"),i=require("yaml"),n=require("shelljs"),r=require("@flownet/lib-render-templates-dir"),c=require("node:fs"),l=require("node:path"),p=require("js-yaml"),d=require("nunjucks"),m=require("redis"),u=require("@flownet/lib-is-redis-online"),g=require("nanoid"),f=require("@flownet/lib-atom-api-js"),y=require("axios"),b=require("qs"),w=require("lodash.merge"),h=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),_=require("@fnet/shell"),v=require("semver"),x=require("node:os"),k=require("@node-red/util"),D=require("@flownet/lib-to-ios-app"),$=require("@flownet/lib-to-macos-app"),S=require("@flownet/lib-to-electron"),I=require("@flownet/lib-to-webos"),P=require("@flownet/lib-to-nextjs"),C=require("lodash.clonedeep"),E=require("@flownet/lib-parse-node-url"),A=require("@flownet/lib-pick-npm-versions"),F=require("chalk");const T=m,q=u;const{Api:O}=f,R=y.default,L=b;const N=w,M=s,B=t,J=h;const K=j;const U=c,z=l,G=r;const H=d,X=c,Y=l,W=h,Z=j;const Q=c,V=l,ee=r;const te=c,oe=l,ae=d,se=h;const ie=c,ne=l,re=d;const ce=c,le=l,pe=d;const de=c,me=l,ue=d;const ge=d,fe=c,ye=l;const be=n;const we=n;const he=n;const je=n;const _e=_,ve=e;const xe=c,ke=l,De=v,$e=_,Se=e;const Ie=c,Pe=l,Ce=v,Ee=n,Ae=e;const Fe=c,Te=l,qe=x,Oe=d,Re=k,Le=e;const Ne=s,Me=t,Be=e;const Je=D;const Ke=$;const Ue=S;const ze=I;const Ge=P,He=C,Xe=w,Ye=v,We=l;const Ze=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:a,buildId:s})=>{await e({message:"Deploying it as gitlab project."});const i=t.projectDir;let n="fnet-to-gitlab";const r=a.params.config||"gitlab",c=ve({name:r,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;n+=` --projectGroupId=${l.projectGroupId}`,n+=` --projectPath='${i}'`,n+=` --projectName='${a.params.name}'`,n+=` --projectBranch='${a.params.branch||"main"}'`,n+=` --gitlabHost='${l.gitlabHost}'`,n+=` --gitlabToken='${l.gitlabToken}'`,n+=` --gitlabUsername='${l.gitlabUsername}'`,n+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==a.dryRun&&(await _e({cmd:n}),o.isDirty=!0)},Qe=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:a,registerToPackageManager:s})=>{await e({message:"Deploying it as gcs package."});const i=t.projectDir,n=ke.resolve(i,"package.json"),r=xe.readFileSync(n),c=JSON.parse(r);c.name=a.params.name,c.version=De.inc(a.params.version,"patch"),delete c.scripts,delete c.devDependencies,xe.writeFileSync(n,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Se({name:a.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='${ke.resolve(ke.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${i}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --headers.cacheControl='public, max-age=31536000, immutable'",!0===a.dryRun&&(d+=" --dryRun"),await $e({cmd:d}),xe.writeFileSync(n,r),!0!==a.dryRun&&(o.isDirty=!0,a.params.version=c.version,await s({target:a,packageJSON:c}))},Ve=async({atom:e,setInProgress:t,context:o,deploymentProject:a,deploymentProjectTarget:s})=>{await t({message:"Deploying it as npm package."});const i=o.projectDir,n=Pe.resolve(i,"package.json"),r=Ie.readFileSync(n),c=JSON.parse(r);c.name=s.params.name,c.version=Ce.inc(s.params.version,"patch");const l=s.params.bin?.name||s.params.bin;!1!==s.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/cjs/index.js",[e.doc.name]:"dist/cli/cjs/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Ie.writeFileSync(n,JSON.stringify(c,null,"\t"));const p=await(Ae({name:o.npmConfig||"npm",dir:o.projectDir})?.data);if(Ie.writeFileSync(Pe.resolve(i,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==Ee.exec("npm publish --access public",{cwd:i}).code)throw new Error("Couldnt publish to npm");Ie.writeFileSync(n,r),a.isDirty=!0,s.params.version=c.version},et=async({atom:e,setInProgress:t,context:o,deploymentProject:a,deploymentProjectTarget:s,buildId:i,packageDependencies:n,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"===s.deploy.template)d={atom:e,packageDependencies:n,red:{tab:{id:s.deploy.id||Re.util.generateId(),label:`${p}/${e.id?e.id:qe.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:Re.util.generateId(),name:e.doc.name,initialize:{content:Fe.readFileSync(Te.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Re.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:Re.util.generateId()}}};else if("cronjob"===s.deploy.template){let t=s.params?.schedules?cloneDeep(s.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:n,red:{tab:{id:s.deploy.id||Re.util.generateId(),label:`${p}/${e.id?e.id:qe.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:Re.util.generateId(),name:e.doc.name,initialize:{content:Fe.readFileSync(Te.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Re.util.generateId(),schedules:t},debug:{id:Re.util.generateId()}}}}else{if("http"!==s.deploy.template)return;d={atom:e,packageDependencies:n,red:{tab:{id:s.deploy.id||Re.util.generateId(),label:`${p}/${e.id?e.id:qe.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:Re.util.generateId(),name:e.doc.name,initialize:{content:Fe.readFileSync(Te.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Re.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:Re.util.generateId()},debug:{id:Re.util.generateId()}}}}let m=Oe.compile(Fe.readFileSync(Te.resolve(l,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(Fe.writeFileSync(Te.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;a.isDirty=!0;const u=await(Le({name:o.redConfig||"red",dir:o.projectDir})?.data),g=s.deploy.url||u.env.RED_URL,f={};if(!1!==s.deploy.auth&&(f.Authorization="Bearer "+atomAccessToken),s.deploy.id)!0===s.actions?.delete?(await axios({method:"DELETE",url:`${g}/flow/${s.deploy.id}`,headers:f}),delete s.actions.delete,delete s.deploy.id,s.enabled=!1):await axios({method:"PUT",url:`${g}/flow/${s.deploy.id}`,data:m,headers:f});else{const e=await axios({method:"POST",url:`${g}/flow`,data:m,headers:f});s.deploy.id=e.data.id}},tt=async({atom:e,Atom:t,setInProgress:o,context:a,packageDependencies:s,deploymentProject:i,deploymentProjectTarget:n})=>{await o({message:"Deploying it as workflow lib."});const r=await(Be({name:"atom",dir:a.projectDir})?.data);let c,l,p,d=n.deploy.name.split("/");if(1===d.length)l=r.env.ATOM_LIBRARIES_ID,p=n.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:r.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===n.dryRun)return;if(i.isDirty=!0,n.deploy.id){if(c=await t.get({id:n.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;n.deploy.id=c.id}const m=a.projectDir;c.doc.contents=[{content:Ne.readFileSync(Me.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Ne.readFileSync(Me.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Ne.readFileSync(Me.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=s,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},ot=async({atom:e,setInProgress:t,context:o,deploymentProject:a,deploymentProjectTarget:s,buildId:i,registerToPackageManager:n})=>{await t({message:"Deploying it as ios app package."});const r=o.projectDir;if(!0===s.dryRun)return;const c={projectDir:r,dest:r,atom:e,params:s.params};await Je(c),a.isDirty=!0},at=async({atom:e,setInProgress:t,context:o,deploymentProject:a,deploymentProjectTarget:s,buildId:i})=>{await t({message:"Deploying it as macos app package."});const n=o.projectDir;if(!0===s.dryRun)return;const r={projectDir:n,dest:n,atom:e,params:s.params};await Ke(r),a.isDirty=!0},st=async({atom:e,setInProgress:t,context:o,deploymentProject:a,deploymentProjectTarget:s,buildId:i})=>{await t({message:"Deploying it as electron package."});const n=o.projectDir;if(!0===s.dryRun)return;const r={src:n,dest:n,atom:e,params:s.params};await Ue(r),a.isDirty=!0},it=async({atom:e,setInProgress:t,context:o,deploymentProject:a,deploymentProjectTarget:s})=>{await t({message:"Deploying it as webos package."});const i=o.projectDir;if(!0===s.dryRun)return;const n={src:i,dest:i,atom:e,params:s.params};await ze(n),a.isDirty=!0},nt=async({atom:e,target:t,onProgress:o,projectDir:a,dependencies:s})=>{o&&await o({message:"Deploying it as nextjs package."});t.params=Xe({name:"nextjs-app",version:"0.1.0"},t.params);const i=Ye.inc(t.params.version,"patch");t.params.version=i;const n=He(t);n.params.dependencies=He(s);const r={atom:e,target:n.params,projectDir:a,renderDir:We.resolve(a,"nextjs")};return{deployer:await Ge(r)}};const rt=c,ct=l,lt=p,pt=n,dt=d,mt=async()=>{if(!await q({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=T.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:ut}=g,gt=class{init({config:e,accessToken:t}){return new Promise(((o,a)=>{if(O.set_api_url(e.data.url),t)return O.set_req_token(t),void o(t);R({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:L.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{O.set_req_token(e.data.access_token),o(e.data.access_token)})).catch((e=>{O.set_req_token(),a(e)}))}))}},ft=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const o=e.doc.features;if(o.hasOwnProperty("all_parsed_imports")||(o.all_parsed_imports=!0),"workflow.lib"===e.type){const e=B.resolve(t.project.projectDir),a=B.resolve(e,"./src/index.js");if(M.existsSync(a)){const e=(await J({file:a,recursive:!0})).all.some((e=>!0===e.usesJSX&&"local"===e.type));o.src_uses_jsx=e}const s=B.resolve(e,"./app/index.js");if(M.existsSync(s)){const e=(await J({file:s,recursive:!0})).all.some((e=>!0===e.usesJSX&&"local"===e.type));o.app_uses_jsx=e}const i=B.resolve(e,"./cli/index.js");if(M.existsSync(i)){const e=(await J({file:i,recursive:!0})).all.some((e=>!0===e.usesJSX&&"local"===e.type));o.cli_uses_jsx=e}}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:!1,export:!0,react:!0===o.app_uses_jsx}:o.app={enabled:!0,extend:!1,export:!0,react:!0===o.app_uses_jsx,...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:!1,export:!0}:o.cli={enabled:!0,extend:!1,export:!0,...o.cli||{}},o.cli.enabled=!0===o.cli.enabled&&(!1===e.doc.features.form_enabled||!0===o.cli.extend||!0===o.cli.enabled),o.cli.format=o.cli.format||"cjs",o.cli.folder=o.cli.folder||o.cli.folder||"cjs";const a={cjs:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,copy:!0,replace:!0,terser:!1,enabled:!0},cjsx:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0},esm:{format:"esm",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0},esmx:{format:"esm",browser:!0,babel:!0,context:o.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0},iife:{format:"iife",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0},umd:{format:"umd",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1}},s={};!0===o.webos&&(a.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,babel_options:{targets:{chrome:"79"}}}),!0===o.app.enabled&&(o.app.dir=`./dist/app/${o.app.folder}`,a.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"},s.targets=s.targets||[],s.targets.push({src:"./src/app/index.html",dest:o.app.dir})),!0===o.cli.enabled&&(o.cli.dir=`./dist/cli/${o.cli.folder}`,a.cli={format:o.cli.format,context:"global",babel:!0===o.src_uses_jsx||!0===o.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:o.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===o.cli.export?"none":"auto"});const i={server:".",startPath:`${o.app.dir}/index.html`,files:["./dist/**/*"]};o.babel_options=o.babel_options||o.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},o.browsersync_options=N(i,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=N({},o.replace_options||o.replace?.options||{}),o.terser_options=N({},o.terser_options||o.terser?.options||{}),o.css_options=N({},o.css_options||o.css?.options||{}),o.wasm_options=N({},o.wasm_options||o.wasm?.options||{}),o.copy_options=N(s,o.copy_options||o.copy?.options||{}),o.json_options=N({},o.json_options||o.json?.options||{}),o.image_options=N({},o.image_options||o.image?.options||{}),o.rollup=o.rollup||{},o.rollup_output=N(a,o.rollup_output||o.rollup?.output||{});const n=Object.keys(a);for(const e of n){const t=a[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=N(o.browsersync_options,t.browsersync_options),t.replace_options=N(o.replace_options,t.replace_options),t.terser_options=N(o.terser_options,t.terser_options),t.css_options=N(o.css_options,t.css_options),t.wasm_options=N(o.wasm_options,t.wasm_options),t.copy_options=N(o.copy_options,t.copy_options),t.json_options=N(o.json_options,t.json_options),t.image_options=N(o.image_options,t.image_options),o.form_enabled&&(t.babel=!0)):t.enabled=!1)}o.babel_enabled=n.some((e=>!0===o.rollup_output[e].babel)),o.browser_enabled=n.some((e=>!0===o.rollup_output[e].babel)),o.browsersync_enabled=n.some((e=>!0===o.rollup_output[e].browsersync)),o.browsersync_enabled=o.browsersync_enabled&&o.app.enabled,o.wasm_enabled=!0===o.wasm||o.wasm&&!1!==o.wasm?.enabled,o.css_enabled=!0===o.css||o.css&&!1!==o.css?.enabled,o.json_enabled=!0===o.json||o.json&&!1!==o.json?.enabled,o.terser_enabled=!0===o.terser||o.terser&&!1!==o.terser?.enabled,o.copy_enabled=o.app.enabled||o.copy_enabled||o.copy&&!1!==o.copy?.enabled,o.image_enabled=!0===o.image||o.image&&!1!==o.image?.enabled,o.dependency_auto_enabled=!1!==o.dependency_auto&&!1!==o.dependency_auto?.enabled,o.npm_install_flags=o.npm_install_flags||"",o.react_version=o.react_version||o.react?.version||18},yt=async({atom:e,packageDependencies:t,packageDevDependencies:o})=>{if("workflow"===e.type&&(t.push({package:"eventemitter3",version:"^4.0"}),t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let o="^18.2";o=`^${(await K({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:o}),t.push({package:"react-dom",version:o}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),t.push({package:"chalk",version:"^4"}),o.push({package:"@babel/core",version:"^7.23"}),o.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),o.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),o.push({package:"@rollup/plugin-replace",version:"^5.0"}),o.push({package:"rollup",version:"^3.26"}),o.push({package:"rollup-plugin-delete",version:"^2.0"}),o.push({package:"rollup-plugin-dts",version:"^6.0"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),o.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6.0"}),o.push({package:"@babel/preset-env",version:"7.22"}),o.push({package:"@babel/preset-react",version:"7.22"})),e.doc.features.browsersync_enabled&&o.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&o.push({package:"@rollup/plugin-json",version:"^6.0"}),e.doc.features.terser_enabled&&o.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&o.push({package:"@rollup/plugin-wasm",version:"^6.1"}),e.doc.features.image_enabled&&o.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.css_enabled){o.push({package:"rollup-plugin-postcss",version:"4.0"}),o.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":o.push({package:"postcss-import",version:"^15.1"});break;case"postcss-url":o.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":o.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":o.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":o.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&o.push({package:"rollup-plugin-copy",version:"^3.5"})},bt=async({atom:e,setInProgress:t,context:o,packageDependencies:a})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const s={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:a,ts:Date.now()},i=o.templateDir,n=z.resolve(o.projectDir,"src/app");U.existsSync(n)||U.mkdirSync(n,{recursive:!0}),await G({pattern:["index.html.njk","index.js.njk"],dir:z.resolve(i,"src/app"),outDir:n,context:s})},wt=async({atom:e,context:t,packageDependencies:o,packageDevDependencies:a,setInProgress:s})=>{await s({message:"Creating package.json."});const i=o.find((e=>"react"===e.package)),n=o.find((e=>"react-dom"===e.package));i&&!n?o.push({package:"react-dom",version:i.version}):i&&n&&(n.version=i.version),i&&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(Y.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&r.push(Y.resolve(t.projectDir,"src/cli/index.js"));for await(const t of r){const s=t;if(!X.existsSync(s))throw new Error(`App file not found: ${s}`);const i=await W({file:s,recursive:!0}),n=!0===e.doc.features.all_parsed_imports?i.all:i.required;for await(const e of n){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;if(a.find((t=>t.package===e.package)))continue;const t=(await Z({name:e.package,groupBy:{minor:!0}}))[0][0];a.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}}const c={atom:e,packageDependencies:o,packageDevDependencies:a},l=t.templateCommonDir,p=H.compile(X.readFileSync(Y.resolve(l,"package.json.njk"),"utf8"),H.configure(l)).render(c),d=t.projectDir,m=Y.resolve(d,"package.json");X.writeFileSync(m,p,"utf8")},ht=async({atom:e,setInProgress:t,context:o,packageDependencies:a})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const s={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:a},i=o.templateDir,n=V.resolve(o.projectDir,"src/cli");Q.existsSync(n)||Q.mkdirSync(n,{recursive:!0}),await ee({pattern:["index.js.njk"],dir:V.resolve(i,"src/cli"),outDir:n,context:s})},jt=async({atom:e,setInProgress:t,context:o,packageDependencies:a})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:a},i=oe.resolve(o.projectDir,"src","default/index.js");if(!te.existsSync(i))throw new Error(`Entry file not found: ${i}`);const n=(await se({file:i,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&n.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(n.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<n.length;e++){const o=n[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(n)}}const l=o.templateCommonDir,p=ae.compile(te.readFileSync(oe.resolve(l,"rollup.config.js.njk"),"utf8"),ae.configure(l)).render(s),d=o.projectDir,m=oe.resolve(d,"rollup.config.js");te.writeFileSync(m,p,"utf8")},_t=async({atom:e,setInProgress:t,context:o,njEnv:a})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const s={},i=e.doc.inputs||[],n=[];i.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&n.push(e);const t={};e.type&&(t.type=e.type),e.default&&(t.default=e.default),e.choices&&(t.choices=e.choices),(e.describe||e.description)&&(t.describe=e.describe||e.description),e.alias&&(t.alias=e.alias),!0===e.required&&(t.required=!0),!0===e.hidden&&(t.hidden=!0),!0===e.array&&(t.array=!0),!0===e.normalize&&(t.normalize=!0),e.nargs&&(t.nargs=e.nargs),s[e.name]=t}));const r={options:s,imports:n,atom:e},c=o.templateDir,l=re.compile(ie.readFileSync(ne.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),a).render(r),p=o.projectDir,d=ne.resolve(p,"src/default/to.yargs.js");ie.writeFileSync(d,l,"utf8")},vt=async({atom:e,setInProgress:t,context:o,packageDependencies:a})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:a},i=o.templateCommonDir,n=pe.compile(ce.readFileSync(le.resolve(i,".gitignore.njk"),"utf8"),pe.configure(i)).render(s),r=o.projectDir,c=le.resolve(r,".gitignore");ce.writeFileSync(c,n,"utf8")},xt=async({atom:e,setInProgress:t,context:o,packageDependencies:a})=>{await t({message:"Creating tsconfig.json."});const s={atom:e,packageDependencies:a},i=o.templateCommonDir,n=ue.compile(de.readFileSync(me.resolve(i,"tsconfig.json.njk"),"utf8"),ue.configure(i)).render(s),r=o.projectDir,c=me.resolve(r,"tsconfig.json");de.writeFileSync(c,n,"utf8")},kt=async({atom:e,context:t,setInProgress:o,Atom:a})=>{const s="readme.md",i=`Creating ${s}`;if(await o({message:i}),t.project?.readme){const e={content:t.project.readme.doc.content},o=t.templateCommonDir,a=ge.compile(fe.readFileSync(ye.resolve(o,`${s}.njk`),"utf8"),ge.configure(o)).render(e),i=t.projectDir,n=ye.resolve(i,`${s}`);fe.writeFileSync(n,a,"utf8")}else if(e.id){const o=await a.first({type:"wiki",parent_id:e.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:i,...n}=o.doc,r={content:i},c=t.templateCommonDir,l=ge.compile(fe.readFileSync(ye.resolve(c,`${s}.njk`),"utf8"),ge.configure(c)).render(r),p=t.projectDir,d=ye.resolve(p,`${s}`);fe.writeFileSync(d,l,"utf8")}},Dt=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});if(0!==be.exec("prettier --write src/**/* bin/* *.{js,json,yaml,html} --no-error-on-unmatched-pattern",{cwd:o}).code)throw new Error("Couldnt format files.")},$t=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Creating .d.ts"});if(0!==we.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},St=async({setInProgress:e,atom:t,context:o})=>{const a=o.projectDir;await e({message:"Installing npm packages."});if(0!==he.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:a}).code)throw new Error("Couldnt install npm packages.")},It=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==je.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},Pt=async e=>{const{atom:t,packageDependencies:o,context:a,deploymentProjectTarget:s,setInProgress:i}=e;if(!0===s.enabled)if("lib"===s.name)await tt({...e});else if("red"===s.name)await et({...e});else if("npm"===s.name)await Ve({...e});else if("gcs"===s.name)await Qe({...e});else if("gitlab"===s.name)await Ze({...e});else if("macos-app"===s.name)await at({...e});else if("ios-app"===s.name)await ot({...e});else if("electron"===s.name)await st({...e});else if("webos"===s.name)await it({...e});else{let e;if("nextjs"===s.name&&(e=nt),!e)return;await e({atom:t,target:s,onProgress:i,projectDir:a.projectDir,dependencies:o})}},{Atom:Ct}=f,Et=E,At=e,Ft=h,Tt=A,qt=F;var Ot=class{#e;#t;#o;#a;#s;#i;#n;#r;#c;#l;#p;#d;#m;#u;#g;#f;#y;constructor(e){this.#e=new gt,this.#t=e,this.#i=[],this.#n=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#i,packageDevDependencies:this.#n,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Ct,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await mt(),this.#c=this.#t.buildId||ut(24),this.#y.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.#f=["all","deploy"].includes(this.#m),this.#p=this.#t.protocol,this.#l="BUILD:"+this.#c,this.#d=await(At({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir})?.data);try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await ft(this.#y),await yt(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#r=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#r)}async initLibrary(){const e=this.#t.id;this.#o=this.#t.project?.libraryAtom||await Ct.get({id:e});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.lib",this.#y.atom=this.#o}async initLibraryDir(){const e=this.#t.projectDir;let t;const o=["node_modules"];if(rt.existsSync(e)&&rt.readdirSync(e).forEach((a=>{o.includes(a)||(t=pt.rm("-rf",ct.join(e,a)))})),t=pt.exec(`mkdir -p ${e}`),0!==t.code)throw new Error("Couldnt create workflow dir.");if(t=pt.exec(`mkdir ${e}/src`),0!==t.code)throw new Error("Couldnt create library/src dir.");if(t=pt.exec(`mkdir ${e}/src/default`),0!==t.code)throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#a=dt.configure(e,{watch:!1,dev:!0}),this.#y.njEnv=this.#a}async initLibs(){const e=[{name:this.#o.doc.name,type:"atom",parent_id:this.#o.parent_id}];this.#s=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#i})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const o=e.filter((e=>"atom"===e.type));for(let e=0;e<o.length;e++){const a=o[e],s=await this.findAtomLibrary({url:a.name});a.atom=s;const i=s.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));i?.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=Et({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#p),"ac:"===t.protocol){const o=t.pathname.split("/");if(1===o.length)return await Ct.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await Ct.first({where:{name:o[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Ct.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===t.protocol){const e=this.#o;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=ct.resolve(this.#t.projectSrcDir,"index.js"),o=await Ft({file:t,recursive:!0}),a=e.doc.dependencies,s=!0===this.#o.doc.features.all_parsed_imports?o.all:o.required;for await(const e of s){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;const t=await Tt({name:e.package,count:1});a.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.#o.typesDir="./types";const t=e.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const o=t[e].atom,a=this.#t.projectDir;if("local:"===o.protocol){const e=ct.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=ct.relative(`${this.#t.projectDir}/src/default/`,e);if(!rt.existsSync(e)){rt.mkdirSync(ct.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",rt.writeFileSync(e,t,"utf8")}o.relativePath=t,this.#o.typesDir=`./types/${ct.basename(a)}/src`}else{const e=`${a}/src/libs/${o.id}.js`,t=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;rt.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.#o,atom:this.#o},t=this.#t.templateDir,o=dt.compile(rt.readFileSync(ct.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#a).render(e),a=this.#t.projectDir,s=ct.resolve(a,"src/default/index.js");rt.writeFileSync(s,o,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:o,...a}=this.#o.doc,s={content:lt.dump(a)},i=this.#t.templateDir,n=dt.compile(rt.readFileSync(ct.resolve(i,`${e}.njk`),"utf8"),this.#a).render(s),r=this.#t.projectDir,c=ct.resolve(r,`${e}`);rt.writeFileSync(c,n,"utf8")}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&await o.save()}}else if(this.#o.id){const e=await Ct.list({type:"library.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 Ct.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 a=o[e];await Pt({...this.#y,deploymentProject:t,deploymentProjectTarget:a})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let a=await Ct.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});a?(a.doc.versions.splice(0,0,{v:o.version}),await Ct.update(a,{id:a.id})):a=await Ct.create({parent_id:this.#d.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:o.version}]}})}async setInProgress({message:e}){console.log(qt.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 kt(this.#y),await xt(this.#y),await vt(this.#y),await _t(this.#y),await ht(this.#y),await bt(this.#y),await jt(this.#y),await wt(this.#y),await Dt(this.#y),await $t(this.#y),this.#g&&(await St(this.#y),await It(this.#y),this.#f&&await this.deploy())),await this._cache_set(this.#l,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e.message||e}),e}}};const Rt=c,Lt=l;var Nt=function({baseDir:e=__dirname}){let t=e;for(;t!==Lt.parse(t).root;){const e=Lt.join(t,"node_modules");if(Rt.existsSync(e))return e;t=Lt.dirname(t)}return null};const Mt=process.cwd();e({name:["redis"],dir:Mt,optional:!0});const Bt=t,Jt=o,{hideBin:Kt}=a,Ut=s,zt=i,Gt=n,Ht=r,Xt=Ot,Yt=Nt({baseDir:__dirname});async function Wt(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Bt.resolve(Yt,"./@flownet/template-node-library/default"),templateCommonDir:Bt.resolve(Yt,"./@flownet/template-node-common/default"),projectDir:Bt.resolve(Mt,`./.output/${e.id}`),coreDir:Bt.resolve(Yt,"./@flownet/template-node-library/core")};{const t=await async function(){const e=Bt.resolve(Mt,"node.yaml");if(!Ut.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Ut.readFileSync(e,"utf8"),o=zt.parse(t),a=Bt.dirname(e),s={libraryAtom:{doc:{...o,"content-type":"javascript",language:"js"},fileName:"index"},projectDir:a,projectFilePath:e,projectFileContent:t,projectFileParsed:o},i=Bt.resolve(a,"node.devops.yaml");if(Ut.existsSync(i)){const e=Ut.readFileSync(i,"utf8"),t=zt.parse(e);s.devops={filePath:i,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Ut.writeFileSync(s.devops.filePath,zt.stringify(s.devops.doc))}}}const n=Bt.resolve(a,"node.readme.md");if(Ut.existsSync(n)){const e=Ut.readFileSync(n,"utf8");s.readme={filePath:n,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return s}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Bt.resolve(Yt,"./@flownet/template-node-library/default"),templateCommonDir:Bt.resolve(Yt,"./@flownet/template-node-common/default"),coreDir:Bt.resolve(Yt,"./@flownet/template-node-library/core"),projectDir:Bt.resolve(t.projectDir,"./.workspace"),projectSrcDir:Bt.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${Yt}/.bin:${process.env.PATH}`,Jt(Kt(process.argv)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0})),(async e=>{try{const t=Bt.resolve(Yt,"@flownet/template-node-library/project"),o=Bt.resolve(Mt,e.name);Ut.existsSync(o)||Ut.mkdirSync(o),await Ht({dir:t,outDir:o,context:e});let a=Gt.exec("fnode build",{cwd:o});if(0!==a.code)throw new Error("Failed to build project.");if(Gt.which("git")&&(a=Gt.exec("git init",{cwd:o}),0!==a.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 Wt(e),o=new Xt(t);await o.init(),await o.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 Wt({...e,mode:"all"}),o=new Xt(t);await o.init(),await o.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 Wt({...e,mode:"file"}),o=new Xt(t);await o.init(),await o.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Wt(e),{projectDir:o}=t,a=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm ${a.join(" ")} ${s}`;Gt.exec(i,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Wt(e),{projectDir:o}=t,a=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`node ${a.join(" ")} ${s}`;Gt.exec(i,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Wt(e),{projectDir:o}=t,a=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run serve ${a.join(" ")} ${s}`;Gt.exec(i,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Wt(e),{projectDir:o}=t,a=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run watch ${a.join(" ")} ${s}`;Gt.exec(i,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run watch - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Wt(e),{projectDir:o}=t,a=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run app ${a.join(" ")} ${s}`;Gt.exec(i,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Wt(e),{projectDir:o}=t,a=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run cli ${a.join(" ")} ${s}`;Gt.exec(i,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
|
|
2
|
+
"use strict";var e=require("@flownet/lib-load-fnet-config"),t=require("path"),a=require("yargs/yargs"),o=require("yargs/helpers"),s=require("fs"),i=require("yaml"),n=require("shelljs"),r=require("@flownet/lib-render-templates-dir"),c=require("node:fs"),l=require("node:path"),p=require("js-yaml"),d=require("nunjucks"),m=require("redis"),u=require("@flownet/lib-is-redis-online"),g=require("nanoid"),y=require("@flownet/lib-atom-api-js"),f=require("axios"),b=require("qs"),h=require("lodash.merge"),w=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),_=require("@fnet/shell"),v=require("semver"),x=require("node:os"),k=require("@node-red/util"),D=require("@flownet/lib-to-ios-app"),$=require("@flownet/lib-to-macos-app"),S=require("@flownet/lib-to-electron"),I=require("@flownet/lib-to-webos"),P=require("@flownet/lib-to-nextjs"),C=require("lodash.clonedeep"),E=require("@flownet/lib-parse-node-url"),A=require("@flownet/lib-pick-npm-versions"),F=require("chalk");const T=m,q=u;const{Api:O}=y,R=f.default,L=b;const N=h,M=s,B=t,J=w;const K=j;const U=c,z=l,G=r;const H=d,X=c,Y=l,W=w,Z=j;const Q=c,V=l,ee=r;const te=c,ae=l,oe=d,se=w;const ie=c,ne=l,re=d;const ce=c,le=l,pe=d;const de=c,me=l,ue=d;const ge=d,ye=c,fe=l;const be=n;const he=n;const we=n;const je=n;const _e=_,ve=e;const xe=c,ke=l,De=v,$e=_,Se=e;const Ie=c,Pe=l,Ce=v,Ee=n,Ae=e;const Fe=c,Te=l,qe=x,Oe=d,Re=k,Le=e;const Ne=s,Me=t,Be=e;const Je=D;const Ke=$;const Ue=S;const ze=I;const Ge=P,He=C,Xe=h,Ye=v,We=l;const Ze=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,buildId:s})=>{await e({message:"Deploying it as gitlab project."});const i=t.projectDir;let n="fnet-to-gitlab";const r=o.params.config||"gitlab",c=ve({name:r,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;n+=` --projectGroupId=${l.projectGroupId}`,n+=` --projectPath='${i}'`,n+=` --projectName='${o.params.name}'`,n+=` --projectBranch='${o.params.branch||"main"}'`,n+=` --gitlabHost='${l.gitlabHost}'`,n+=` --gitlabToken='${l.gitlabToken}'`,n+=` --gitlabUsername='${l.gitlabUsername}'`,n+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==o.dryRun&&(await _e({cmd:n}),a.isDirty=!0)},Qe=async({setInProgress:e,context:t,deploymentProject:a,deploymentProjectTarget:o,registerToPackageManager:s})=>{await e({message:"Deploying it as gcs package."});const i=t.projectDir,n=ke.resolve(i,"package.json"),r=xe.readFileSync(n),c=JSON.parse(r);c.name=o.params.name,c.version=De.inc(o.params.version,"patch"),delete c.scripts,delete c.devDependencies,xe.writeFileSync(n,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await Se({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='${ke.resolve(ke.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${i}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --headers.cacheControl='public, max-age=31536000, immutable'",!0===o.dryRun&&(d+=" --dryRun"),await $e({cmd:d}),xe.writeFileSync(n,r),!0!==o.dryRun&&(a.isDirty=!0,o.params.version=c.version,await s({target:o,packageJSON:c}))},Ve=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s})=>{await t({message:"Deploying it as npm package."});const i=a.projectDir,n=Pe.resolve(i,"package.json"),r=Ie.readFileSync(n),c=JSON.parse(r);c.name=s.params.name,c.version=Ce.inc(s.params.version,"patch");const l=s.params.bin?.name||s.params.bin;!1!==s.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/cjs/index.js",[e.doc.name]:"dist/cli/cjs/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Ie.writeFileSync(n,JSON.stringify(c,null,"\t"));const p=await(Ae({name:a.npmConfig||"npm",dir:a.projectDir})?.data);if(Ie.writeFileSync(Pe.resolve(i,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===s.dryRun)return;if(0!==Ee.exec("npm publish --access public",{cwd:i}).code)throw new Error("Couldnt publish to npm");Ie.writeFileSync(n,r),o.isDirty=!0,s.params.version=c.version},et=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i,packageDependencies:n,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=a.projectDir,l=a.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===s.deploy.template)d={atom:e,packageDependencies:n,red:{tab:{id:s.deploy.id||Re.util.generateId(),label:`${p}/${e.id?e.id:qe.hostname()}/${e.name}/${s.deploy.name||s.deploy.template}`},function:{id:Re.util.generateId(),name:e.doc.name,initialize:{content:Fe.readFileSync(Te.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Re.util.generateId(),...s.params?.inject,payload:"json"===s.params?.inject?.payloadType?`'${JSON.stringify(s.params?.inject?.payload)}'`:s.params?.inject?.payload},debug:{id:Re.util.generateId()}}};else if("cronjob"===s.deploy.template){let t=s.params?.schedules?cloneDeep(s.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:n,red:{tab:{id:s.deploy.id||Re.util.generateId(),label:`${p}/${e.id?e.id:qe.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:Re.util.generateId(),name:e.doc.name,initialize:{content:Fe.readFileSync(Te.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Re.util.generateId(),schedules:t},debug:{id:Re.util.generateId()}}}}else{if("http"!==s.deploy.template)return;d={atom:e,packageDependencies:n,red:{tab:{id:s.deploy.id||Re.util.generateId(),label:`${p}/${e.id?e.id:qe.hostname()}/${s.deploy.name||s.deploy.template}`},function:{id:Re.util.generateId(),name:e.doc.name,initialize:{content:Fe.readFileSync(Te.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Re.util.generateId(),method:s.params.method||"get",url:s.params.url},httpout:{id:Re.util.generateId()},debug:{id:Re.util.generateId()}}}}let m=Oe.compile(Fe.readFileSync(Te.resolve(l,`deploy/node-red/${s.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(Fe.writeFileSync(Te.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===s.dryRun)return;o.isDirty=!0;const u=await(Le({name:a.redConfig||"red",dir:a.projectDir})?.data),g=s.deploy.url||u.env.RED_URL,y={};if(!1!==s.deploy.auth&&(y.Authorization="Bearer "+atomAccessToken),s.deploy.id)!0===s.actions?.delete?(await axios({method:"DELETE",url:`${g}/flow/${s.deploy.id}`,headers:y}),delete s.actions.delete,delete s.deploy.id,s.enabled=!1):await axios({method:"PUT",url:`${g}/flow/${s.deploy.id}`,data:m,headers:y});else{const e=await axios({method:"POST",url:`${g}/flow`,data:m,headers:y});s.deploy.id=e.data.id}},tt=async({atom:e,Atom:t,setInProgress:a,context:o,packageDependencies:s,deploymentProject:i,deploymentProjectTarget:n})=>{await a({message:"Deploying it as workflow lib."});const r=await(Be({name:"atom",dir:o.projectDir})?.data);let c,l,p,d=n.deploy.name.split("/");if(1===d.length)l=r.env.ATOM_LIBRARIES_ID,p=n.deploy.name;else{if(2!==d.length)throw new Error("Wrong name path.");{const e=await t.first({where:{name:d[0],parent_id:r.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");l=e.id,p=d[1]}}if(!0===n.dryRun)return;if(i.isDirty=!0,n.deploy.id){if(c=await t.get({id:n.deploy.id}),!c)return}else{if(c=await t.create({parent_id:l,doc:{name:p,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!c)return;n.deploy.id=c.id}const m=o.projectDir;c.doc.contents=[{content:Ne.readFileSync(Me.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Ne.readFileSync(Me.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Ne.readFileSync(Me.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=s,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},at=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i,registerToPackageManager:n})=>{await t({message:"Deploying it as ios app package."});const r=a.projectDir;if(!0===s.dryRun)return;const c={projectDir:r,dest:r,atom:e,params:s.params};await Je(c),o.isDirty=!0},ot=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i})=>{await t({message:"Deploying it as macos app package."});const n=a.projectDir;if(!0===s.dryRun)return;const r={projectDir:n,dest:n,atom:e,params:s.params};await Ke(r),o.isDirty=!0},st=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s,buildId:i})=>{await t({message:"Deploying it as electron package."});const n=a.projectDir;if(!0===s.dryRun)return;const r={src:n,dest:n,atom:e,params:s.params};await Ue(r),o.isDirty=!0},it=async({atom:e,setInProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:s})=>{await t({message:"Deploying it as webos package."});const i=a.projectDir;if(!0===s.dryRun)return;const n={src:i,dest:i,atom:e,params:s.params};await ze(n),o.isDirty=!0},nt=async({atom:e,target:t,onProgress:a,projectDir:o,dependencies:s})=>{a&&await a({message:"Deploying it as nextjs package."});t.params=Xe({name:"nextjs-app",version:"0.1.0"},t.params);const i=Ye.inc(t.params.version,"patch");t.params.version=i;const n=He(t);n.params.dependencies=He(s);const r={atom:e,target:n.params,projectDir:o,renderDir:We.resolve(o,"nextjs")};return{deployer:await Ge(r)}};const rt=c,ct=l,lt=p,pt=n,dt=d,mt=async()=>{if(!await q({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=T.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:ut}=g,gt=class{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(O.set_api_url(e.data.url),t)return O.set_req_token(t),void a(t);R({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:L.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{O.set_req_token(e.data.access_token),a(e.data.access_token)})).catch((e=>{O.set_req_token(),o(e)}))}))}},yt=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const a=e.doc.features;a.hasOwnProperty("all_parsed_imports")||(a.all_parsed_imports=!0);const o=B.resolve(t.project.projectDir),s=B.resolve(o,"./app/index.js");if(M.existsSync(s)){const e=(await J({file:s,recursive:!0})).all.some((e=>!0===e.usesJSX&&"local"===e.type));a.app_uses_jsx=e,a.app_has_entry=!0}const i=B.resolve(o,"./cli/index.js");if(M.existsSync(i)){const e=(await J({file:i,recursive:!0})).all.some((e=>!0===e.usesJSX&&"local"===e.type));a.cli_uses_jsx=e,a.cli_has_entry=!0}if("workflow.lib"===e.type){const e=B.resolve(o,"./src/index.js");if(M.existsSync(e)){const t=(await J({file:e,recursive:!0})).all.some((e=>!0===e.usesJSX&&"local"===e.type));a.src_uses_jsx=t,a.src_has_entry=!0}}const n=!0===a.app_has_entry||!0===a.src_uses_jsx,r=!0===a.cli_has_entry||!0===a.src_uses_jsx;a.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===a.form||!0===a.form?.enabled,a.multiple_enabled=a.multiple_enabled||!0===a.multiple||!0===a.multiple?.enabled,!1===a.app?a.app={enabled:!1}:!0===a.app?a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:n}:a.app={enabled:!0,extend:!0===a.app_has_entry,export:!0,react:n,...a.app||{}},a.app.enabled=!0===a.app.enabled&&(!0===e.doc.features.form_enabled||!0===a.app.extend||!0===a.app.enabled),a.app.format=a.app.format||"esm",a.app.folder=a.app.folder||a.app.format||"default",!1===a.cli?a.cli={enabled:!1}:!0===a.cli?a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:r}:a.cli={enabled:!0,extend:!0===a.cli_has_entry,export:!0,react:r,...a.cli||{}},a.cli.enabled=!0===a.cli.enabled&&(!1===e.doc.features.form_enabled||!0===a.cli.extend||!0===a.cli.enabled),a.cli.format=a.cli.format||"cjs",a.cli.folder=a.cli.folder||a.cli.folder||"cjs";const c={cjs:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,copy:!0,replace:!0,terser:!1,enabled:!0},cjsx:{format:"cjs",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0},esm:{format:"esm",context:a.form_enabled?"window":"global",babel:!0===a.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0},esmx:{format:"esm",browser:!0,babel:!0,context:a.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0},iife:{format:"iife",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0},umd:{format:"umd",context:a.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1}},l={};!0===a.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,babel_options:{targets:{chrome:"79"}}}),!0===a.app.enabled&&(a.app.dir=`./dist/app/${a.app.folder}`,c.app={format:a.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:a.app.dir,terser:!0,output_exports:!1===a.app.export?"none":"auto"},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:a.app.dir})),!0===a.cli.enabled&&(a.cli.dir=`./dist/cli/${a.cli.folder}`,c.cli={format:a.cli.format,context:"global",babel:!0===a.src_uses_jsx||!0===a.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:a.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===a.cli.export?"none":"auto"});const p={server:".",startPath:`${a.app.dir}/index.html`,files:["./dist/**/*"]};a.babel_options=a.babel_options||a.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},a.browsersync_options=N(p,a.browsersync_options||a.browsersync?.options||{}),a.replace_options=N({},a.replace_options||a.replace?.options||{}),a.terser_options=N({},a.terser_options||a.terser?.options||{}),a.css_options=N({},a.css_options||a.css?.options||{}),a.wasm_options=N({},a.wasm_options||a.wasm?.options||{}),a.copy_options=N(l,a.copy_options||a.copy?.options||{}),a.json_options=N({},a.json_options||a.json?.options||{}),a.image_options=N({},a.image_options||a.image?.options||{}),a.rollup=a.rollup||{},a.rollup_output=N(c,a.rollup_output||a.rollup?.output||{});const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==a.rollup[e]?(!0===a.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||a.babel_options,t.browsersync_options=N(a.browsersync_options,t.browsersync_options),t.replace_options=N(a.replace_options,t.replace_options),t.terser_options=N(a.terser_options,t.terser_options),t.css_options=N(a.css_options,t.css_options),t.wasm_options=N(a.wasm_options,t.wasm_options),t.copy_options=N(a.copy_options,t.copy_options),t.json_options=N(a.json_options,t.json_options),t.image_options=N(a.image_options,t.image_options),a.form_enabled&&(t.babel=!0)):t.enabled=!1)}a.babel_enabled=d.some((e=>!0===a.rollup_output[e].babel)),a.browser_enabled=d.some((e=>!0===a.rollup_output[e].babel)),a.browsersync_enabled=d.some((e=>!0===a.rollup_output[e].browsersync)),a.browsersync_enabled=a.browsersync_enabled&&a.app.enabled,a.wasm_enabled=!0===a.wasm||a.wasm&&!1!==a.wasm?.enabled,a.css_enabled=!0===a.css||a.css&&!1!==a.css?.enabled,a.json_enabled=!0===a.json||a.json&&!1!==a.json?.enabled,a.terser_enabled=!0===a.terser||a.terser&&!1!==a.terser?.enabled,a.copy_enabled=a.app.enabled||a.copy_enabled||a.copy&&!1!==a.copy?.enabled,a.image_enabled=!0===a.image||a.image&&!1!==a.image?.enabled,a.dependency_auto_enabled=!1!==a.dependency_auto&&!1!==a.dependency_auto?.enabled,a.npm_install_flags=a.npm_install_flags||"",a.react_version=a.react_version||a.react?.version||18},ft=async({atom:e,packageDependencies:t,packageDevDependencies:a})=>{if("workflow"===e.type&&(t.push({package:"eventemitter3",version:"^4.0"}),t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";a=`^${(await K({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),t.push({package:"chalk",version:"^4"}),a.push({package:"@babel/core",version:"^7.23"}),a.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),a.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),a.push({package:"@rollup/plugin-replace",version:"^5.0"}),a.push({package:"rollup",version:"^3.26"}),a.push({package:"rollup-plugin-delete",version:"^2.0"}),a.push({package:"rollup-plugin-dts",version:"^6.0"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),a.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6.0"}),a.push({package:"@babel/preset-env",version:"7.22"}),a.push({package:"@babel/preset-react",version:"7.22"})),e.doc.features.browsersync_enabled&&a.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&a.push({package:"@rollup/plugin-json",version:"^6.0"}),e.doc.features.terser_enabled&&a.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&a.push({package:"@rollup/plugin-wasm",version:"^6.1"}),e.doc.features.image_enabled&&a.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.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"})},bt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating index.html."});const s={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o,ts:Date.now()},i=a.templateDir,n=z.resolve(a.projectDir,"src/app");U.existsSync(n)||U.mkdirSync(n,{recursive:!0}),await G({pattern:["index.html.njk","index.js.njk"],dir:z.resolve(i,"src/app"),outDir:n,context:s})},ht=async({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setInProgress:s})=>{await s({message:"Creating package.json."});const i=a.find((e=>"react"===e.package)),n=a.find((e=>"react-dom"===e.package));i&&!n?a.push({package:"react-dom",version:i.version}):i&&n&&(n.version=i.version),i&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push(Y.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&r.push(Y.resolve(t.projectDir,"src/cli/index.js"));for await(const t of r){const s=t;if(!X.existsSync(s))throw new Error(`App file not found: ${s}`);const i=await W({file:s,recursive:!0}),n=!0===e.doc.features.all_parsed_imports?i.all:i.required;for await(const e of n){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;if(o.find((t=>t.package===e.package)))continue;const t=(await Z({name:e.package,groupBy:{minor:!0}}))[0][0];o.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}}const c={atom:e,packageDependencies:a,packageDevDependencies:o},l=t.templateCommonDir,p=H.compile(X.readFileSync(Y.resolve(l,"package.json.njk"),"utf8"),H.configure(l)).render(c),d=t.projectDir,m=Y.resolve(d,"package.json");X.writeFileSync(m,p,"utf8")},wt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const s={workflowAtom:e,libraryAtom:e,atom:e,packageDependencies:o},i=a.templateDir,n=V.resolve(a.projectDir,"src/cli");Q.existsSync(n)||Q.mkdirSync(n,{recursive:!0}),await ee({pattern:["index.js.njk"],dir:V.resolve(i,"src/cli"),outDir:n,context:s})},jt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating rollup file."});const s={atom:e,packageDependencies:o},i=ae.resolve(a.projectDir,"src","default/index.js");if(!te.existsSync(i))throw new Error(`Entry file not found: ${i}`);const n=(await se({file:i,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&n.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(n.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<n.length;e++){const a=n[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(n)}}const l=a.templateCommonDir,p=oe.compile(te.readFileSync(ae.resolve(l,"rollup.config.js.njk"),"utf8"),oe.configure(l)).render(s),d=a.projectDir,m=ae.resolve(d,"rollup.config.js");te.writeFileSync(m,p,"utf8")},_t=async({atom:e,setInProgress:t,context:a,njEnv:o})=>{if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});const s={},i=e.doc.inputs||[],n=[];i.forEach((e=>{if(!1===e.cli||!e.name)return;e.import&&n.push(e);const t={};e.type&&(t.type=e.type),e.default&&(t.default=e.default),e.choices&&(t.choices=e.choices),(e.describe||e.description)&&(t.describe=e.describe||e.description),e.alias&&(t.alias=e.alias),!0===e.required&&(t.required=!0),!0===e.hidden&&(t.hidden=!0),!0===e.array&&(t.array=!0),!0===e.normalize&&(t.normalize=!0),e.nargs&&(t.nargs=e.nargs),s[e.name]=t}));const r={options:s,imports:n,atom:e},c=a.templateDir,l=re.compile(ie.readFileSync(ne.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),o).render(r),p=a.projectDir,d=ne.resolve(p,"src/default/to.yargs.js");ie.writeFileSync(d,l,"utf8")},vt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating .gitignore"});const s={atom:e,packageDependencies:o},i=a.templateCommonDir,n=pe.compile(ce.readFileSync(le.resolve(i,".gitignore.njk"),"utf8"),pe.configure(i)).render(s),r=a.projectDir,c=le.resolve(r,".gitignore");ce.writeFileSync(c,n,"utf8")},xt=async({atom:e,setInProgress:t,context:a,packageDependencies:o})=>{await t({message:"Creating tsconfig.json."});const s={atom:e,packageDependencies:o},i=a.templateCommonDir,n=ue.compile(de.readFileSync(me.resolve(i,"tsconfig.json.njk"),"utf8"),ue.configure(i)).render(s),r=a.projectDir,c=me.resolve(r,"tsconfig.json");de.writeFileSync(c,n,"utf8")},kt=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=ge.compile(ye.readFileSync(fe.resolve(a,`${s}.njk`),"utf8"),ge.configure(a)).render(e),i=t.projectDir,n=fe.resolve(i,`${s}`);ye.writeFileSync(n,o,"utf8")}else if(e.id){const a=await o.first({type:"wiki",parent_id:e.id});if(!a||"markdown"!==a.doc?.["content-type"])return;const{content:i,...n}=a.doc,r={content:i},c=t.templateCommonDir,l=ge.compile(ye.readFileSync(fe.resolve(c,`${s}.njk`),"utf8"),ge.configure(c)).render(r),p=t.projectDir,d=fe.resolve(p,`${s}`);ye.writeFileSync(d,l,"utf8")}},Dt=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Prettifiying source files."});if(0!==be.exec("prettier --write src/**/* bin/* *.{js,json,yaml,html} --no-error-on-unmatched-pattern",{cwd:a}).code)throw new Error("Couldnt format files.")},$t=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Creating .d.ts"});if(0!==he.exec("tsc",{cwd:a}).code)throw new Error("Couldnt create .d.ts files.")},St=async({setInProgress:e,atom:t,context:a})=>{const o=a.projectDir;await e({message:"Installing npm packages."});if(0!==we.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o}).code)throw new Error("Couldnt install npm packages.")},It=async({setInProgress:e,context:t})=>{const a=t.projectDir;await e({message:"Building main project."});if(0!==je.exec("npm run build",{cwd:a}).code)throw new Error("Couldnt build project.")},Pt=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:s,setInProgress:i}=e;if(!0===s.enabled)if("lib"===s.name)await tt({...e});else if("red"===s.name)await et({...e});else if("npm"===s.name)await Ve({...e});else if("gcs"===s.name)await Qe({...e});else if("gitlab"===s.name)await Ze({...e});else if("macos-app"===s.name)await ot({...e});else if("ios-app"===s.name)await at({...e});else if("electron"===s.name)await st({...e});else if("webos"===s.name)await it({...e});else{let e;if("nextjs"===s.name&&(e=nt),!e)return;await e({atom:t,target:s,onProgress:i,projectDir:o.projectDir,dependencies:a})}},{Atom:Ct}=y,Et=E,At=e,Ft=w,Tt=A,qt=F;var Ot=class{#e;#t;#a;#o;#s;#i;#n;#r;#c;#l;#p;#d;#m;#u;#g;#y;#f;constructor(e){this.#e=new gt,this.#t=e,this.#i=[],this.#n=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#f={packageDependencies:this.#i,packageDevDependencies:this.#n,setInProgress:this.setInProgress.bind(this),context:this.#t,Atom:Ct,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 mt(),this.#c=this.#t.buildId||ut(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(At({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 yt(this.#f),await ft(this.#f),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#r=await this.#e.init({config:this.#d}),this.#f.atomAccessToken=this.#r)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await Ct.get({id:e});let t=this.#a.doc.bundleName;t=t||(this.#a.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#a.doc.bundleName=t,this.#a.type=this.#a.type||"workflow.lib",this.#f.atom=this.#a}async initLibraryDir(){const e=this.#t.projectDir;let t;const a=["node_modules"];if(rt.existsSync(e)&&rt.readdirSync(e).forEach((o=>{a.includes(o)||(t=pt.rm("-rf",ct.join(e,o)))})),t=pt.exec(`mkdir -p ${e}`),0!==t.code)throw new Error("Couldnt create workflow dir.");if(t=pt.exec(`mkdir ${e}/src`),0!==t.code)throw new Error("Couldnt create library/src dir.");if(t=pt.exec(`mkdir ${e}/src/default`),0!==t.code)throw new Error("Couldnt create library/src/default dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=dt.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=Et({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 Ct.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await Ct.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Ct.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=ct.resolve(this.#t.projectSrcDir,"index.js"),a=await Ft({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 Tt({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=ct.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=ct.relative(`${this.#t.projectDir}/src/default/`,e);if(!rt.existsSync(e)){rt.mkdirSync(ct.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",rt.writeFileSync(e,t,"utf8")}a.relativePath=t,this.#a.typesDir=`./types/${ct.basename(o)}/src`}else{const e=`${o}/src/libs/${a.id}.js`,t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;rt.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=dt.compile(rt.readFileSync(ct.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#o).render(e),o=this.#t.projectDir,s=ct.resolve(o,"src/default/index.js");rt.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:lt.dump(o)},i=this.#t.templateDir,n=dt.compile(rt.readFileSync(ct.resolve(i,`${e}.njk`),"utf8"),this.#o).render(s),r=this.#t.projectDir,c=ct.resolve(r,`${e}`);rt.writeFileSync(c,n,"utf8")}async deploy(){if(await this.setInProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&await a.save()}}else if(this.#a.id){const e=await Ct.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 Ct.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 Pt({...this.#f,deploymentProject:t,deploymentProjectTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await Ct.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await Ct.update(o,{id:o.id})):o=await Ct.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(qt.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 kt(this.#f),await xt(this.#f),await vt(this.#f),await _t(this.#f),await wt(this.#f),await bt(this.#f),await jt(this.#f),await ht(this.#f),await Dt(this.#f),await $t(this.#f),this.#g&&(await St(this.#f),await It(this.#f),this.#y&&await this.deploy())),await this._cache_set(this.#l,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#l,{status:"FAILED",message:e.message||e}),e}}};const Rt=c,Lt=l;var Nt=function({baseDir:e=__dirname}){let t=e;for(;t!==Lt.parse(t).root;){const e=Lt.join(t,"node_modules");if(Rt.existsSync(e))return e;t=Lt.dirname(t)}return null};const Mt=process.cwd();e({name:["redis"],dir:Mt,optional:!0});const Bt=t,Jt=a,{hideBin:Kt}=o,Ut=s,zt=i,Gt=n,Ht=r,Xt=Ot,Yt=Nt({baseDir:__dirname});async function Wt(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:Bt.resolve(Yt,"./@flownet/template-node-library/default"),templateCommonDir:Bt.resolve(Yt,"./@flownet/template-node-common/default"),projectDir:Bt.resolve(Mt,`./.output/${e.id}`),coreDir:Bt.resolve(Yt,"./@flownet/template-node-library/core")};{const t=await async function(){const e=Bt.resolve(Mt,"node.yaml");if(!Ut.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=Ut.readFileSync(e,"utf8"),a=zt.parse(t),o=Bt.dirname(e),s={libraryAtom:{doc:{...a,"content-type":"javascript",language:"js"},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:a},i=Bt.resolve(o,"node.devops.yaml");if(Ut.existsSync(i)){const e=Ut.readFileSync(i,"utf8"),t=zt.parse(e);s.devops={filePath:i,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{Ut.writeFileSync(s.devops.filePath,zt.stringify(s.devops.doc))}}}const n=Bt.resolve(o,"node.readme.md");if(Ut.existsSync(n)){const e=Ut.readFileSync(n,"utf8");s.readme={filePath:n,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return s}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Bt.resolve(Yt,"./@flownet/template-node-library/default"),templateCommonDir:Bt.resolve(Yt,"./@flownet/template-node-common/default"),coreDir:Bt.resolve(Yt,"./@flownet/template-node-library/core"),projectDir:Bt.resolve(t.projectDir,"./.workspace"),projectSrcDir:Bt.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${Yt}/.bin:${process.env.PATH}`,Jt(Kt(process.argv)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0})),(async e=>{try{const t=Bt.resolve(Yt,"@flownet/template-node-library/project"),a=Bt.resolve(Mt,e.name);Ut.existsSync(a)||Ut.mkdirSync(a),await Ht({dir:t,outDir:a,context:e});let o=Gt.exec("fnode build",{cwd:a});if(0!==o.code)throw new Error("Failed to build project.");if(Gt.which("git")&&(o=Gt.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 Wt(e),a=new Xt(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 Wt({...e,mode:"all"}),a=new Xt(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 Wt({...e,mode:"file"}),a=new Xt(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Wt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm ${o.join(" ")} ${s}`;Gt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Wt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`node ${o.join(" ")} ${s}`;Gt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Wt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run serve ${o.join(" ")} ${s}`;Gt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Wt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run watch ${o.join(" ")} ${s}`;Gt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run watch - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Wt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run app ${o.join(" ")} ${s}`;Gt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await Wt(e),{projectDir:a}=t,o=e.commands||[],s=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),i=`npm run cli ${o.join(" ")} ${s}`;Gt.exec(i,{cwd:a}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
|
package/dist/builder/wf-cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("@flownet/lib-load-fnet-config"),t=require("path"),o=require("yargs/yargs"),n=require("yargs/helpers"),i=require("fs"),s=require("yaml"),a=require("shelljs"),r=require("@flownet/lib-render-templates-dir"),c=require("node:fs"),l=require("node:path"),p=require("js-yaml"),d=require("nunjucks"),m=require("lodash.clonedeep"),f=require("isobject"),u=require("redis"),y=require("@flownet/lib-is-redis-online"),h=require("nanoid"),w=require("@flownet/lib-atom-api-js"),g=require("axios"),b=require("qs"),x=require("lodash.merge"),k=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),v=require("@fnet/shell"),_=require("semver"),D=require("node:os"),T=require("@node-red/util"),P=require("@flownet/lib-to-ios-app"),S=require("@flownet/lib-to-macos-app"),$=require("@flownet/lib-to-electron"),C=require("@flownet/lib-to-webos"),I=require("@flownet/lib-to-nextjs"),E=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-bpmn-from-flow"),N=require("@fnet/expression"),O=require("chalk");const A=u,B=y;const{Api:q}=w,R=g.default,M=b;const J=x,L=i,K=t,U=k;const W=j;const z=c,G=l,H=r;const Y=d,X=c,V=l,Z=k,Q=j;const ee=c,te=l,oe=r;const ne=c,ie=l,se=d,ae=k;const re=c,ce=l,le=d;const pe=c,de=l,me=d;const fe=c,ue=l,ye=d;const he=d,we=c,ge=l;const be=a;const xe=a;const ke=a;const je=a;const ve=v,_e=e;const De=c,Te=l,Pe=_,Se=v,$e=e;const Ce=c,Ie=l,Ee=_,Fe=a,Ne=e;const Oe=c,Ae=l,Be=D,qe=d,Re=T,Me=e;const Je=i,Le=t,Ke=e;const Ue=P;const We=S;const ze=$;const Ge=C;const He=I,Ye=m,Xe=x,Ve=_,Ze=l;const Qe=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=_e({name:r,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;a+=` --projectGroupId=${l.projectGroupId}`,a+=` --projectPath='${s}'`,a+=` --projectName='${n.params.name}'`,a+=` --projectBranch='${n.params.branch||"main"}'`,a+=` --gitlabHost='${l.gitlabHost}'`,a+=` --gitlabToken='${l.gitlabToken}'`,a+=` --gitlabUsername='${l.gitlabUsername}'`,a+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==n.dryRun&&(await ve({cmd:a}),o.isDirty=!0)},et=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,a=Te.resolve(s,"package.json"),r=De.readFileSync(a),c=JSON.parse(r);c.name=n.params.name,c.version=Pe.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,De.writeFileSync(a,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await $e({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='${Te.resolve(Te.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${s}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --headers.cacheControl='public, max-age=31536000, immutable'",!0===n.dryRun&&(d+=" --dryRun"),await Se({cmd:d}),De.writeFileSync(a,r),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=c.version,await i({target:n,packageJSON:c}))},tt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as npm package."});const s=o.projectDir,a=Ie.resolve(s,"package.json"),r=Ce.readFileSync(a),c=JSON.parse(r);c.name=i.params.name,c.version=Ee.inc(i.params.version,"patch");const l=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/cjs/index.js",[e.doc.name]:"dist/cli/cjs/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Ce.writeFileSync(a,JSON.stringify(c,null,"\t"));const p=await(Ne({name:o.npmConfig||"npm",dir:o.projectDir})?.data);if(Ce.writeFileSync(Ie.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==Fe.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");Ce.writeFileSync(a,r),n.isDirty=!0,i.params.version=c.version},ot=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s,packageDependencies:a,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=o.projectDir,l=o.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||Re.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Re.util.generateId(),name:e.doc.name,initialize:{content:Oe.readFileSync(Ae.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Re.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Re.util.generateId()}}};else if("cronjob"===i.deploy.template){let t=i.params?.schedules?cloneDeep(i.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||Re.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Re.util.generateId(),name:e.doc.name,initialize:{content:Oe.readFileSync(Ae.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Re.util.generateId(),schedules:t},debug:{id:Re.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||Re.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Re.util.generateId(),name:e.doc.name,initialize:{content:Oe.readFileSync(Ae.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Re.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Re.util.generateId()},debug:{id:Re.util.generateId()}}}}let m=qe.compile(Oe.readFileSync(Ae.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(Oe.writeFileSync(Ae.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===i.dryRun)return;n.isDirty=!0;const f=await(Me({name:o.redConfig||"red",dir:o.projectDir})?.data),u=i.deploy.url||f.env.RED_URL,y={};if(!1!==i.deploy.auth&&(y.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:y}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:m,headers:y});else{const e=await axios({method:"POST",url:`${u}/flow`,data:m,headers:y});i.deploy.id=e.data.id}},nt=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(Ke({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 m=n.projectDir;c.doc.contents=[{content:Je.readFileSync(Le.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Je.readFileSync(Le.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Je.readFileSync(Le.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=i,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},it=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 Ue(c),n.isDirty=!0},st=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 We(r),n.isDirty=!0},at=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 ze(r),n.isDirty=!0},rt=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 Ge(a),n.isDirty=!0},ct=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as nextjs package."});t.params=Xe({name:"nextjs-app",version:"0.1.0"},t.params);const s=Ve.inc(t.params.version,"patch");t.params.version=s;const a=Ye(t);a.params.dependencies=Ye(i);const r={atom:e,target:a.params,projectDir:n,renderDir:Ze.resolve(n,"nextjs")};return{deployer:await He(r)}};const lt=c,pt=l,dt=p,mt=a,ft=d,ut=m,yt=f,ht=async()=>{if(!await B({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=A.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:wt}=h,gt=class{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(q.set_api_url(e.data.url),t)return q.set_req_token(t),void o(t);R({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=>{q.set_req_token(e.data.access_token),o(e.data.access_token)})).catch((e=>{q.set_req_token(),n(e)}))}))}},bt=async({atom:e,context:t})=>{e.doc.features=e.doc.features||{};const o=e.doc.features;if(o.hasOwnProperty("all_parsed_imports")||(o.all_parsed_imports=!0),"workflow.lib"===e.type){const e=K.resolve(t.project.projectDir),n=K.resolve(e,"./src/index.js");if(L.existsSync(n)){const e=(await U({file:n,recursive:!0})).all.some((e=>!0===e.usesJSX&&"local"===e.type));o.src_uses_jsx=e}const i=K.resolve(e,"./app/index.js");if(L.existsSync(i)){const e=(await U({file:i,recursive:!0})).all.some((e=>!0===e.usesJSX&&"local"===e.type));o.app_uses_jsx=e}const s=K.resolve(e,"./cli/index.js");if(L.existsSync(s)){const e=(await U({file:s,recursive:!0})).all.some((e=>!0===e.usesJSX&&"local"===e.type));o.cli_uses_jsx=e}}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:!1,export:!0,react:!0===o.app_uses_jsx}:o.app={enabled:!0,extend:!1,export:!0,react:!0===o.app_uses_jsx,...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:!1,export:!0}:o.cli={enabled:!0,extend:!1,export:!0,...o.cli||{}},o.cli.enabled=!0===o.cli.enabled&&(!1===e.doc.features.form_enabled||!0===o.cli.extend||!0===o.cli.enabled),o.cli.format=o.cli.format||"cjs",o.cli.folder=o.cli.folder||o.cli.folder||"cjs";const n={cjs:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,copy:!0,replace:!0,terser:!1,enabled:!0},cjsx:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0},esm:{format:"esm",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0},esmx:{format:"esm",browser:!0,babel:!0,context:o.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0},iife:{format:"iife",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0},umd:{format:"umd",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1}},i={};!0===o.webos&&(n.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,babel_options:{targets:{chrome:"79"}}}),!0===o.app.enabled&&(o.app.dir=`./dist/app/${o.app.folder}`,n.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"},i.targets=i.targets||[],i.targets.push({src:"./src/app/index.html",dest:o.app.dir})),!0===o.cli.enabled&&(o.cli.dir=`./dist/cli/${o.cli.folder}`,n.cli={format:o.cli.format,context:"global",babel:!0===o.src_uses_jsx||!0===o.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:o.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===o.cli.export?"none":"auto"});const s={server:".",startPath:`${o.app.dir}/index.html`,files:["./dist/**/*"]};o.babel_options=o.babel_options||o.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},o.browsersync_options=J(s,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=J({},o.replace_options||o.replace?.options||{}),o.terser_options=J({},o.terser_options||o.terser?.options||{}),o.css_options=J({},o.css_options||o.css?.options||{}),o.wasm_options=J({},o.wasm_options||o.wasm?.options||{}),o.copy_options=J(i,o.copy_options||o.copy?.options||{}),o.json_options=J({},o.json_options||o.json?.options||{}),o.image_options=J({},o.image_options||o.image?.options||{}),o.rollup=o.rollup||{},o.rollup_output=J(n,o.rollup_output||o.rollup?.output||{});const a=Object.keys(n);for(const e of a){const t=n[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=J(o.browsersync_options,t.browsersync_options),t.replace_options=J(o.replace_options,t.replace_options),t.terser_options=J(o.terser_options,t.terser_options),t.css_options=J(o.css_options,t.css_options),t.wasm_options=J(o.wasm_options,t.wasm_options),t.copy_options=J(o.copy_options,t.copy_options),t.json_options=J(o.json_options,t.json_options),t.image_options=J(o.image_options,t.image_options),o.form_enabled&&(t.babel=!0)):t.enabled=!1)}o.babel_enabled=a.some((e=>!0===o.rollup_output[e].babel)),o.browser_enabled=a.some((e=>!0===o.rollup_output[e].babel)),o.browsersync_enabled=a.some((e=>!0===o.rollup_output[e].browsersync)),o.browsersync_enabled=o.browsersync_enabled&&o.app.enabled,o.wasm_enabled=!0===o.wasm||o.wasm&&!1!==o.wasm?.enabled,o.css_enabled=!0===o.css||o.css&&!1!==o.css?.enabled,o.json_enabled=!0===o.json||o.json&&!1!==o.json?.enabled,o.terser_enabled=!0===o.terser||o.terser&&!1!==o.terser?.enabled,o.copy_enabled=o.app.enabled||o.copy_enabled||o.copy&&!1!==o.copy?.enabled,o.image_enabled=!0===o.image||o.image&&!1!==o.image?.enabled,o.dependency_auto_enabled=!1!==o.dependency_auto&&!1!==o.dependency_auto?.enabled,o.npm_install_flags=o.npm_install_flags||"",o.react_version=o.react_version||o.react?.version||18},xt=async({atom:e,packageDependencies:t,packageDevDependencies:o})=>{if("workflow"===e.type&&(t.push({package:"eventemitter3",version:"^4.0"}),t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let o="^18.2";o=`^${(await W({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:o}),t.push({package:"react-dom",version:o}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),t.push({package:"chalk",version:"^4"}),o.push({package:"@babel/core",version:"^7.23"}),o.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),o.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),o.push({package:"@rollup/plugin-replace",version:"^5.0"}),o.push({package:"rollup",version:"^3.26"}),o.push({package:"rollup-plugin-delete",version:"^2.0"}),o.push({package:"rollup-plugin-dts",version:"^6.0"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),o.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6.0"}),o.push({package:"@babel/preset-env",version:"7.22"}),o.push({package:"@babel/preset-react",version:"7.22"})),e.doc.features.browsersync_enabled&&o.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&o.push({package:"@rollup/plugin-json",version:"^6.0"}),e.doc.features.terser_enabled&&o.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&o.push({package:"@rollup/plugin-wasm",version:"^6.1"}),e.doc.features.image_enabled&&o.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.css_enabled){o.push({package:"rollup-plugin-postcss",version:"4.0"}),o.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":o.push({package:"postcss-import",version:"^15.1"});break;case"postcss-url":o.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":o.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":o.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":o.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&o.push({package:"rollup-plugin-copy",version:"^3.5"})},kt=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=G.resolve(o.projectDir,"src/app");z.existsSync(a)||z.mkdirSync(a,{recursive:!0}),await H({pattern:["index.html.njk","index.js.njk"],dir:G.resolve(s,"src/app"),outDir:a,context:i})},jt=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(V.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&r.push(V.resolve(t.projectDir,"src/cli/index.js"));for await(const t of r){const i=t;if(!X.existsSync(i))throw new Error(`App file not found: ${i}`);const s=await Z({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 Q({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=Y.compile(X.readFileSync(V.resolve(l,"package.json.njk"),"utf8"),Y.configure(l)).render(c),d=t.projectDir,m=V.resolve(d,"package.json");X.writeFileSync(m,p,"utf8")},vt=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=te.resolve(o.projectDir,"src/cli");ee.existsSync(a)||ee.mkdirSync(a,{recursive:!0}),await oe({pattern:["index.js.njk"],dir:te.resolve(s,"src/cli"),outDir:a,context:i})},_t=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:n},s=ie.resolve(o.projectDir,"src","default/index.js");if(!ne.existsSync(s))throw new Error(`Entry file not found: ${s}`);const a=(await ae({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=se.compile(ne.readFileSync(ie.resolve(l,"rollup.config.js.njk"),"utf8"),se.configure(l)).render(i),d=o.projectDir,m=ie.resolve(d,"rollup.config.js");ne.writeFileSync(m,p,"utf8")},Dt=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=le.compile(re.readFileSync(ce.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),n).render(r),p=o.projectDir,d=ce.resolve(p,"src/default/to.yargs.js");re.writeFileSync(d,l,"utf8")},Tt=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},s=o.templateCommonDir,a=me.compile(pe.readFileSync(de.resolve(s,".gitignore.njk"),"utf8"),me.configure(s)).render(i),r=o.projectDir,c=de.resolve(r,".gitignore");pe.writeFileSync(c,a,"utf8")},Pt=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=ye.compile(fe.readFileSync(ue.resolve(s,"tsconfig.json.njk"),"utf8"),ye.configure(s)).render(i),r=o.projectDir,c=ue.resolve(r,"tsconfig.json");fe.writeFileSync(c,a,"utf8")},St=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=he.compile(we.readFileSync(ge.resolve(o,`${i}.njk`),"utf8"),he.configure(o)).render(e),s=t.projectDir,a=ge.resolve(s,`${i}`);we.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=he.compile(we.readFileSync(ge.resolve(c,`${i}.njk`),"utf8"),he.configure(c)).render(r),p=t.projectDir,d=ge.resolve(p,`${i}`);we.writeFileSync(d,l,"utf8")}},$t=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});if(0!==be.exec("prettier --write src/**/* bin/* *.{js,json,yaml,html} --no-error-on-unmatched-pattern",{cwd:o}).code)throw new Error("Couldnt format files.")},Ct=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Creating .d.ts"});if(0!==xe.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},It=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==ke.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},Et=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==je.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},Ft=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:s}=e;if(!0===i.enabled)if("lib"===i.name)await nt({...e});else if("red"===i.name)await ot({...e});else if("npm"===i.name)await tt({...e});else if("gcs"===i.name)await et({...e});else if("gitlab"===i.name)await Qe({...e});else if("macos-app"===i.name)await st({...e});else if("ios-app"===i.name)await it({...e});else if("electron"===i.name)await at({...e});else if("webos"===i.name)await rt({...e});else{let e;if("nextjs"===i.name&&(e=ct),!e)return;await e({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o})}},{Atom:Nt}=w,Ot=E,At=j,Bt=F,qt=e,Rt=k,Mt=N,Jt=O;var Lt=class{#e;#t;#o;#n;#i;#s;#a;#r;#c;#l;#p;#d;#m;#f;#u;#y;#h;#w;#g;#b;constructor(e){this.#e=new gt,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:Nt,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await ht(),this.#p=this.#t.buildId||wt(24),this.#b.buildId=this.#p,this.#u=this.#t.mode,this.#y=["all","deploy","build","file"].includes(this.#u),this.#h=["all","deploy","build"].includes(this.#u),this.#w=["all","deploy"].includes(this.#u),this.#g=["all","deploy","build","file","bpmn"].includes(this.#u),this.#m=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#f=await(qt({optional:!0,name:"atom",dir:this.#t.projectDir})?.data);try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await bt(this.#b),await xt(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.#f}))}async initWorkflow(){const e=this.#t.id;this.#o=this.#t.project?.workflowAtom||await Nt.get({id:e}),this.#n="string"==typeof this.#o.doc.content?dt.load(this.#o.doc.content):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:"eventemitter3",version:"^4.0"}),this.#s.push({package:"get-value",version:"^3.0"}),this.#s.push({package:"set-value",version:"^4.1"}),this.#o.doc.features.form_enabled?(this.#s.push({package:"react",version:"^18.2"}),this.#s.push({package:"react-dom",version:"^18.2"}),this.#s.push({package:"@flownet/react-app",version:"^0.1"}),this.#s.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#s.push({package:"yargs",version:"^17"}),this.#s.push({package:"chalk",version:"^4"})}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir;let o;const n=["node_modules"];if(lt.existsSync(e)&<.readdirSync(e).forEach((t=>{n.includes(t)||(o=mt.rm("-rf",pt.join(e,t)))})),o=mt.exec(`mkdir -p ${e}`),0!==o.code)throw new Error("Couldnt create workflow dir.");if(o=mt.exec(`mkdir ${e}/src`),0!==o.code)throw new Error("Couldnt create workflow/src dir.");if(o=mt.exec(`cp -a ${t} ${e}/src`),0!==o.code)throw new Error("Couldnt create workflow/src/core dir.");if(o=mt.exec(`mkdir -p ${e}/src/default/blocks`),0!==o.code)throw new Error("Couldnt create workflow/src/default/blocks dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#i=ft.configure(e,{watch:!1,dev:!0}),this.#b.njEnv=this.#i}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,o]=Object.entries(e)[0];if(o.hasOwnProperty("onerror")){const{onerror:n,...i}=o;e[t]={try:i,except:n}}if(e[t].hasOwnProperty("steps")){const o=e[t].steps;if(!Array.isArray(o))throw new Error("Steps must be an array.");e[t].steps=o.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),o={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#o}};t.forEach((t=>{const n={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:o,definition:e[t],index:o.childs.length,depth:o.depth+1,context:{},blockAutoJumpToParent:!0};o.childs.push(n)}));for await(const e of o.childs)await this.initNode({node:e});return o}async initNode({node:e}){if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except"))await this.initBlockTypeTryExcept({node:e});else if(e.definition.hasOwnProperty("for"))await this.initBlockTypeFor({node:e});else if(e.definition.hasOwnProperty("switch"))await this.initBlockTypeSwitch({node:e});else if(e.definition.hasOwnProperty("parallel"))await this.initBlockTypeParallel({node:e});else if(e.definition.hasOwnProperty("raise"))await this.initBlockTypeRaise({node:e});else if(e.definition.hasOwnProperty("return"))await this.initBlockTypeReturn({node:e});else if(e.definition.hasOwnProperty("assign"))await this.initBlockTypeAssign({node:e});else if(e.definition.hasOwnProperty("call"))await this.initBlockTypeCall({node:e});else if(e.definition.hasOwnProperty("form"))await this.initBlockTypeForm({node:e});else if(e.definition.hasOwnProperty("shell"))await this.initBlockTypeShell({node:e});else if(e.definition.hasOwnProperty("config"))await this.initBlockTypeConfig({node:e});else if(e.definition.hasOwnProperty("operation"))await this.initBlockTypeOperation({node:e});else if(e.definition.hasOwnProperty("steps"))await this.initBlockTypeSteps({node:e});else{if(!e.definition.hasOwnProperty("next"))throw new Error("Undefined step type.");await this.initBlockTypeJump({node:e})}}async initBlockTypeTryExcept({node:e}){if(e.type="tryexcept",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!0,e.definition.try){const t="try",o={name:t,childs:[],parent:e,definition:e.definition[t],index:e.childs.length,context:{}};e.childs.push(o),await this.initNode({node:o})}if(e.definition.except){const t="except",o={name:t,childs:[],parent:e,definition:e.definition[t],index:e.childs.length,context:{}};e.childs.push(o),await this.initNode({node:o})}}async initBlockTypeSwitch({node:e}){e.type="switch",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let t=0;t<e.definition.switch.length;t++){const o=e.definition.switch[t],n={name:`${t}`,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(n),o.hasOwnProperty("steps")?await this.initNode({node:n}):(n.depth=e.depth+1,n.type="jump")}}async initBlockTypeFor({node:e}){e.type="for",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1;for(let t=0;t<e.definition.for.steps.length;t++){const o=e.definition.for.steps[t],n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],index:e.childs.length,context:{}};e.childs.push(i),await this.initNode({node:i})}}async initBlockTypeSteps({node:e}){e.type||(e.type="steps");const t=e.definition.steps||[];for await(const o of t){const t=Object.keys(o)[0],n={name:t,childs:[],parent:e,definition:o[t],index:e.childs.length,context:{}};e.childs.push(n),await this.initNode({node:n})}}async initBlockTypeAssign({node:e}){e.type="assign"}async initBlockTypeCall({node:e}){e.type="call";for(let t=0;t<e.definition.modules?.length;t++){const o=e.definition.modules[t],n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],module:!0,blockAutoJumpToParent:!0,index:e.childs.length,context:{}};e.childs.push(i),await this.initNode({node:i})}}async initBlockTypeForm({node:e}){e.type="form";for(let t=0;t<e.definition.modules?.length;t++){const o=e.definition.modules[t],n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],module:!0,blockAutoJumpToParent:!0,index:e.childs.length,context:{}};e.childs.push(i),await this.initNode({node:i})}}async initBlockTypeReturn({node:e}){e.type="return"}async initBlockTypeRaise({node:e}){e.type="raise"}async initBlockTypeJump({node:e}){e.type="jump"}async initBlockTypeOperation({node:e}){e.type="operation"}async initBlockTypeParallel({node:e}){e.type="parallel"}async initBlockTypeShell({node:e}){const t="shell",o=e.definition,n=typeof o[t];if("string"!==n&&"object"!==n)throw new Error(`Unsupported ${t} usage`);o.call="npm:@fnet/shell",o.args="string"===n?{cmd:o[t]}:o[t],delete o[t],await this.initBlockTypeCall({node:e})}async initBlockTypeConfig({node:e}){const t="config",o=e.definition,n=typeof o[t];if("string"!==n&&"object"!==n)throw new Error(`Unsupported ${t} usage`);o.call="npm:@fnet/config",o.args="string"===n?{name:o[t]}:o[t],delete o[t],await this.initBlockTypeCall({node:e})}async 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=pt.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=wt(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=Ot({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#m),"ac:"===t.protocol){const o=t.pathname.split("/");if(1===o.length)return await Nt.first({where:{name:e,parent_id:this.#f.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await Nt.first({where:{name:o[0],parent_id:this.#f.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Nt.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=pt.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await Rt({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 At({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 At({name:t.pathname,groupBy:{minor:!0}}))[0][0];return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:[{package:t.pathname,version:`^${e}`,type:"npm"}]},protocol:t.protocol}}}}resolveNextBlock({node:e}){const t=e.definition;if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let o=e.parent;for(;o.parent;){const n=o.childs.find((e=>e.name===t.next));if(n){e.context.next=n;break}o=o.parent}}else{if(!0===e.module)return;let t=e.parent,o=e.index+1;for(;t.parent;){if(t.blockAutoJumpToParent&&!0===t.blockAutoJumpToSibling){if(!0===t.blockAutoJumpToParent)break;o=t.index+1,t=t.parent;continue}const n=t.childs.find((e=>e.index===o));if(n){e.context.next=n;break}if(!0===t.blockAutoJumpToParent)break;o=t.index+1,t=t.parent}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=ut(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const o=t.params[e];if("string"==typeof o)t.params[e]={key:o,hasDefault:!1};else{const n=Object.keys(o)[0];t.params[e]={key:n,hasDefault:!0,default:o[n]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){"assign"===e.type?await this.resolveTypeAssign({node:e}):"return"===e.type?await this.resolveTypeReturn({node:e}):"call"===e.type?await this.resolveTypeCall({node:e}):"form"===e.type?await this.resolveTypeForm({node:e}):"raise"===e.type?await this.resolveTypeRaise({node:e}):"switch"===e.type?await this.resolveTypeSwitch({node:e}):"jump"===e.type?await this.resolveTypeJump({node:e}):"tryexcept"===e.type?await this.resolveTypeTryExcept({node:e}):"for"===e.type?await this.resolveTypeFor({node:e}):"operation"===e.type?await this.resolveTypeOperation({node:e}):"steps"===e.type&&await this.resolveTypeSteps({node:e});for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeAssign({node:e}){e.context.transform=ut(e.definition);const t=e.context.transform;for(let e=0;e<t.assign?.length;e++){let o=t.assign[e],n=Object.keys(o)[0],i=o[n],s={key:await this.transformExpression(n),value:await this.transformExpression(i)};t.assign[e]=s}await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeSteps({node:e}){e.context.next=e.childs[0]}async resolveTypeReturn({node:e}){e.context.transform=e.context.transform||ut(e.definition);const t=e.context.transform;t.return=await this.transformExpression(t.return),await this.resolveTypeCommon({node:e})}async resolveTypeCall({node:e}){e.context.transform=e.context.transform||ut(e.definition);const t=e.context.transform;t.args&&(t.args=await this.transformExpression(t.args)),t.result&&(t.result=await this.transformExpression(t.result));const o=e.workflow.parent;e.context.lib=o.context.libs.find((e=>e.name===t.call)),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeForm({node:e}){e.context.transform=e.context.transform||ut(e.definition);const t=e.context.transform;t.props&&(t.props=await this.transformExpression(t.props));const o=e.workflow.parent;e.context.lib=o.context.libs.find((e=>e.name===t.form)),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeRaise({node:e}){e.context.transform=e.context.transform||ut(e.definition);const t=e.context.transform;t.raise=await this.transformExpression(t.raise),await this.resolveTypeCommon({node:e})}async resolveTypeSwitch({node:e}){e.context.transform=e.context.transform||ut(e.definition),e.context.transform;for(const t of e.childs)t.context.transform=t.context.transform||ut(t.definition),t.context.transform.condition=await this.transformExpression(t.definition.condition);await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeJump({node:e}){e.context.transform=e.context.transform||ut(e.definition);const t=e.context.transform;t.next=await this.transformExpression(t.next),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeTryExcept({node:e}){if(e.context.transform=e.context.transform||ut(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||ut(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeFor({node:e}){e.context.transform=e.context.transform||ut(e.definition);e.context.transform.for.in=await this.transformExpression(e.definition.for.in),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeOperation({node:e}){e.context.transform=e.context.transform||ut(e.definition),await this.resolveTypeCommon({node:e})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:e}){await this.setInProgress({message:"Creating external lib files."}),this.#o.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const o=t[e].atom,n=this.#t.projectDir;if("local:"===o.protocol){const e=pt.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=pt.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!lt.existsSync(e)){lt.mkdirSync(pt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",lt.writeFileSync(e,t,"utf8")}o.relativePath=t,this.#o.typesDir=`./types/${pt.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;lt.writeFileSync(e,t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=ft.compile(lt.readFileSync(pt.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=pt.resolve(n,"src/default/index.js");lt.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=ft.compile(lt.readFileSync(pt.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=pt.resolve(n,`src/default/${e.codeKey}.js`);lt.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=ft.compile(lt.readFileSync(pt.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=pt.resolve(t,`src/default/blocks/${o}`);lt.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(yt(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 Mt({expression:e});if(t){const{processor:o,statement:n}=t;switch(o){case"var":case"vs":case"v":e=`$::v.${n}::`;break;case"exp":case"e":e=`$::${n}::`;break;case"mod":case"m":e=`$::closure.module['${n}']::`;break;case"form":case"f":e=`$::closure.form.${n}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const e="flow.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:o,...n}=this.#o.doc,i={content:dt.dump(n)},s=this.#t.templateDir,a=ft.compile(lt.readFileSync(pt.resolve(s,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=pt.resolve(r,`${e}`);lt.writeFileSync(c,a,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:dt.dump(this.#n)},n=this.#t.templateDir,i=ft.compile(lt.readFileSync(pt.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),s=this.#t.projectDir,a=pt.resolve(s,`${e}`);lt.writeFileSync(a,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=mt.exec("prettier --write .",{cwd:pt.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 Nt.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 Nt.update(o,{id:o.id}))}}}async deployProject(e){const{deploymentProject:t}=e,o=t.doc.targets;for(let e=0;e<o.length;e++){const n=o[e];await Ft({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await Nt.first({name:t.params.name,parent_id:this.#f.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await Nt.update(n,{id:n.id})):n=await Nt.create({parent_id:this.#f.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:o.version}]}})}async setInProgress({message:e}){console.log(Jt.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 Bt({root:this.#l}):void 0;this.#y&&(await this.initWorkflowDir(),await this.initNunjucks(),this.#g&<.writeFileSync(pt.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 St(this.#b),await Pt(this.#b),await Tt(this.#b),await Dt(this.#b),await vt(this.#b),await kt(this.#b),await _t(this.#b),await jt(this.#b),await $t(this.#b),await Ct(this.#b),this.#h&&(await It(this.#b),await Et(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 Bt({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 Kt=c,Ut=l;var Wt=function({baseDir:e=__dirname}){let t=e;for(;t!==Ut.parse(t).root;){const e=Ut.join(t,"node_modules");if(Kt.existsSync(e))return e;t=Ut.dirname(t)}return null};const zt=process.cwd();e({name:["redis"],dir:zt,optional:!0});const Gt=t,Ht=o,{hideBin:Yt}=n,Xt=i,Vt=s,Zt=a,Qt=r,eo=Lt,to=Wt({baseDir:__dirname});async function oo(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:Gt.resolve(zt,`./.output/${e.id}`),templateDir:Gt.resolve(to,"./@flownet/template-node-workflow/default"),templateCommonDir:Gt.resolve(to,"./@flownet/template-node-common/default"),coreDir:Gt.resolve(to,"./@flownet/template-node-workflow/core")}}{const t=await async function(e){const t=Gt.resolve(zt,"flow.yaml");if(!Xt.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const o=Xt.readFileSync(t,"utf8"),n=Vt.parse(o),i=Gt.dirname(t),s=Gt.resolve(i,"flow.main.yaml");if(!Xt.existsSync(t))throw new Error("flow.main.yaml file not found in current directory.");const a=Xt.readFileSync(s,"utf8"),r=Vt.parse(a),c={workflowAtom:{doc:{...n,"content-type":"yaml",content:a}},projectDir:i,projectFilePath:t,projectFileContent:o,projectFileParsed:n,projectMainFilePath:s,projectMainFileContent:a,projectMainFileParsed:r},l=Gt.resolve(i,"flow.devops.yaml");if(Xt.existsSync(l)){const e=Xt.readFileSync(l,"utf8"),t=Vt.parse(e);c.devops={filePath:l,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{Xt.writeFileSync(c.devops.filePath,Vt.stringify(c.devops.doc))}}}const p=Gt.resolve(i,"flow.readme.md");if(Xt.existsSync(p)){const e=Xt.readFileSync(p,"utf8");c.readme={filePath:p,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return c}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Gt.resolve(to,"./@flownet/template-node-workflow/default"),templateCommonDir:Gt.resolve(to,"./@flownet/template-node-common/default"),coreDir:Gt.resolve(to,"./@flownet/template-node-workflow/core"),projectDir:Gt.resolve(t.projectDir,"./.workspace"),projectSrcDir:Gt.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${to}/.bin:${process.env.PATH}`,Ht(Yt(process.argv)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"})),(async e=>{try{const t=Gt.resolve(to,"./@flownet/template-node-workflow/project"),o=Gt.resolve(zt,e.name);Xt.existsSync(o)||Xt.mkdirSync(o),await Qt({dir:t,outDir:o,context:e});let n=Zt.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(Zt.which("git")&&(n=Zt.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 oo(e),o=new eo(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 oo({...e,mode:"all"}),o=new eo(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 oo({...e,mode:"file"}),o=new eo(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await oo(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),s=`npm ${n.join(" ")} ${i}`;Zt.exec(s,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await oo(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),s=`node ${n.join(" ")} ${i}`;Zt.exec(s,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await oo(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),s=`npm run serve ${n.join(" ")} ${i}`;Zt.exec(s,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await oo(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),s=`npm run watch ${n.join(" ")} ${i}`;Zt.exec(s,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await oo(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),s=`npm run app ${n.join(" ")} ${i}`;Zt.exec(s,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await oo(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),s=`npm run cli ${n.join(" ")} ${i}`;Zt.exec(s,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
|
|
2
|
+
"use strict";var e=require("@flownet/lib-load-fnet-config"),t=require("path"),o=require("yargs/yargs"),n=require("yargs/helpers"),i=require("fs"),s=require("yaml"),a=require("shelljs"),r=require("@flownet/lib-render-templates-dir"),c=require("node:fs"),l=require("node:path"),p=require("js-yaml"),d=require("nunjucks"),m=require("lodash.clonedeep"),f=require("isobject"),u=require("redis"),y=require("@flownet/lib-is-redis-online"),h=require("nanoid"),w=require("@flownet/lib-atom-api-js"),g=require("axios"),b=require("qs"),x=require("lodash.merge"),k=require("@flownet/lib-parse-imports-js"),j=require("@flownet/lib-list-npm-versions"),v=require("@fnet/shell"),_=require("semver"),D=require("node:os"),T=require("@node-red/util"),P=require("@flownet/lib-to-ios-app"),S=require("@flownet/lib-to-macos-app"),$=require("@flownet/lib-to-electron"),C=require("@flownet/lib-to-webos"),I=require("@flownet/lib-to-nextjs"),E=require("@flownet/lib-parse-node-url"),F=require("@flownet/lib-bpmn-from-flow"),N=require("@fnet/expression"),O=require("chalk");const A=u,B=y;const{Api:q}=w,R=g.default,M=b;const J=x,L=i,K=t,U=k;const W=j;const z=c,G=l,H=r;const Y=d,X=c,V=l,Z=k,Q=j;const ee=c,te=l,oe=r;const ne=c,ie=l,se=d,ae=k;const re=c,ce=l,le=d;const pe=c,de=l,me=d;const fe=c,ue=l,ye=d;const he=d,we=c,ge=l;const be=a;const xe=a;const ke=a;const je=a;const ve=v,_e=e;const De=c,Te=l,Pe=_,Se=v,$e=e;const Ce=c,Ie=l,Ee=_,Fe=a,Ne=e;const Oe=c,Ae=l,Be=D,qe=d,Re=T,Me=e;const Je=i,Le=t,Ke=e;const Ue=P;const We=S;const ze=$;const Ge=C;const He=I,Ye=m,Xe=x,Ve=_,Ze=l;const Qe=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=_e({name:r,dir:t.projectDir});if(!c)throw new Error(`Couldnt load config ${r}`);const{data:l}=c.data;a+=` --projectGroupId=${l.projectGroupId}`,a+=` --projectPath='${s}'`,a+=` --projectName='${n.params.name}'`,a+=` --projectBranch='${n.params.branch||"main"}'`,a+=` --gitlabHost='${l.gitlabHost}'`,a+=` --gitlabToken='${l.gitlabToken}'`,a+=` --gitlabUsername='${l.gitlabUsername}'`,a+=` --gitlabUserEmail='${l.gitlabUserEmail}'`,!0!==n.dryRun&&(await ve({cmd:a}),o.isDirty=!0)},et=async({setInProgress:e,context:t,deploymentProject:o,deploymentProjectTarget:n,registerToPackageManager:i})=>{await e({message:"Deploying it as gcs package."});const s=t.projectDir,a=Te.resolve(s,"package.json"),r=De.readFileSync(a),c=JSON.parse(r);c.name=n.params.name,c.version=Pe.inc(n.params.version,"patch"),delete c.scripts,delete c.devDependencies,De.writeFileSync(a,JSON.stringify(c,null,"\t"));const{file:l,data:p}=await $e({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='${Te.resolve(Te.dirname(l),p.env.GCS_UPLOADER_KEY_FILE)}'`,d+=` --dir='${s}'`,d+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",d+=` --destDir='${c.name}/${c.version}'`,d+=" --headers.cacheControl='public, max-age=31536000, immutable'",!0===n.dryRun&&(d+=" --dryRun"),await Se({cmd:d}),De.writeFileSync(a,r),!0!==n.dryRun&&(o.isDirty=!0,n.params.version=c.version,await i({target:n,packageJSON:c}))},tt=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i})=>{await t({message:"Deploying it as npm package."});const s=o.projectDir,a=Ie.resolve(s,"package.json"),r=Ce.readFileSync(a),c=JSON.parse(r);c.name=i.params.name,c.version=Ee.inc(i.params.version,"patch");const l=i.params.bin?.name||i.params.bin;!1!==i.params.bin?.enabled&&l&&"string"==typeof l&&(c.bin={[l]:"dist/cli/cjs/index.js",[e.doc.name]:"dist/cli/cjs/index.js"}),delete c.scripts,delete c.devDependencies,c.scripts={serve:"npx serve ."},Ce.writeFileSync(a,JSON.stringify(c,null,"\t"));const p=await(Ne({name:o.npmConfig||"npm",dir:o.projectDir})?.data);if(Ce.writeFileSync(Ie.resolve(s,".npmrc"),`//registry.npmjs.org/:_authToken=${p.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==Fe.exec("npm publish --access public",{cwd:s}).code)throw new Error("Couldnt publish to npm");Ce.writeFileSync(a,r),n.isDirty=!0,i.params.version=c.version},ot=async({atom:e,setInProgress:t,context:o,deploymentProject:n,deploymentProjectTarget:i,buildId:s,packageDependencies:a,njEnv:r})=>{await t({message:"Deploying it as node-red flow."});const c=o.projectDir,l=o.templateDir,p="workflow"===e.type?"WF":"LIB";let d;if("simple"===i.deploy.template)d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||Re.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${e.name}/${i.deploy.name||i.deploy.template}`},function:{id:Re.util.generateId(),name:e.doc.name,initialize:{content:Oe.readFileSync(Ae.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},inject:{id:Re.util.generateId(),...i.params?.inject,payload:"json"===i.params?.inject?.payloadType?`'${JSON.stringify(i.params?.inject?.payload)}'`:i.params?.inject?.payload},debug:{id:Re.util.generateId()}}};else if("cronjob"===i.deploy.template){let t=i.params?.schedules?cloneDeep(i.params?.schedules):void 0;t?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||Re.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Re.util.generateId(),name:e.doc.name,initialize:{content:Oe.readFileSync(Ae.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},cronjob:{id:Re.util.generateId(),schedules:t},debug:{id:Re.util.generateId()}}}}else{if("http"!==i.deploy.template)return;d={atom:e,packageDependencies:a,red:{tab:{id:i.deploy.id||Re.util.generateId(),label:`${p}/${e.id?e.id:Be.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Re.util.generateId(),name:e.doc.name,initialize:{content:Oe.readFileSync(Ae.resolve(c,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:e.doc.bundleName}},httpin:{id:Re.util.generateId(),method:i.params.method||"get",url:i.params.url},httpout:{id:Re.util.generateId()},debug:{id:Re.util.generateId()}}}}let m=qe.compile(Oe.readFileSync(Ae.resolve(l,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),r).render(d);if(Oe.writeFileSync(Ae.resolve(c,"node-red.yaml"),m),m=yaml.load(m),!0===i.dryRun)return;n.isDirty=!0;const f=await(Me({name:o.redConfig||"red",dir:o.projectDir})?.data),u=i.deploy.url||f.env.RED_URL,y={};if(!1!==i.deploy.auth&&(y.Authorization="Bearer "+atomAccessToken),i.deploy.id)!0===i.actions?.delete?(await axios({method:"DELETE",url:`${u}/flow/${i.deploy.id}`,headers:y}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await axios({method:"PUT",url:`${u}/flow/${i.deploy.id}`,data:m,headers:y});else{const e=await axios({method:"POST",url:`${u}/flow`,data:m,headers:y});i.deploy.id=e.data.id}},nt=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(Ke({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 m=n.projectDir;c.doc.contents=[{content:Je.readFileSync(Le.resolve(m,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:Je.readFileSync(Le.resolve(m,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:Je.readFileSync(Le.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],c.doc.name=p,c.doc.dependencies=i,"workflow.lib"===e.type?c.doc.subtype="library":"workflow"===e.type&&(c.doc.subtype="workflow"),c=await t.update(c,{id:c.id})},it=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 Ue(c),n.isDirty=!0},st=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 We(r),n.isDirty=!0},at=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 ze(r),n.isDirty=!0},rt=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 Ge(a),n.isDirty=!0},ct=async({atom:e,target:t,onProgress:o,projectDir:n,dependencies:i})=>{o&&await o({message:"Deploying it as nextjs package."});t.params=Xe({name:"nextjs-app",version:"0.1.0"},t.params);const s=Ve.inc(t.params.version,"patch");t.params.version=s;const a=Ye(t);a.params.dependencies=Ye(i);const r={atom:e,target:a.params,projectDir:n,renderDir:Ze.resolve(n,"nextjs")};return{deployer:await He(r)}};const lt=c,pt=l,dt=p,mt=a,ft=d,ut=m,yt=f,ht=async()=>{if(!await B({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=A.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},{nanoid:wt}=h,gt=class{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(q.set_api_url(e.data.url),t)return q.set_req_token(t),void o(t);R({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=>{q.set_req_token(e.data.access_token),o(e.data.access_token)})).catch((e=>{q.set_req_token(),n(e)}))}))}},bt=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=K.resolve(t.project.projectDir),i=K.resolve(n,"./app/index.js");if(L.existsSync(i)){const e=(await U({file:i,recursive:!0})).all.some((e=>!0===e.usesJSX&&"local"===e.type));o.app_uses_jsx=e,o.app_has_entry=!0}const s=K.resolve(n,"./cli/index.js");if(L.existsSync(s)){const e=(await U({file:s,recursive:!0})).all.some((e=>!0===e.usesJSX&&"local"===e.type));o.cli_uses_jsx=e,o.cli_has_entry=!0}if("workflow.lib"===e.type){const e=K.resolve(n,"./src/index.js");if(L.existsSync(e)){const t=(await U({file:e,recursive:!0})).all.some((e=>!0===e.usesJSX&&"local"===e.type));o.src_uses_jsx=t,o.src_has_entry=!0}}const a=!0===o.app_has_entry||!0===o.src_uses_jsx,r=!0===o.cli_has_entry||!0===o.src_uses_jsx;o.form_enabled=!0===e.doc.form||!0===e.doc.form?.enabled||!0===o.form||!0===o.form?.enabled,o.multiple_enabled=o.multiple_enabled||!0===o.multiple||!0===o.multiple?.enabled,!1===o.app?o.app={enabled:!1}:!0===o.app?o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:a}:o.app={enabled:!0,extend:!0===o.app_has_entry,export:!0,react:a,...o.app||{}},o.app.enabled=!0===o.app.enabled&&(!0===e.doc.features.form_enabled||!0===o.app.extend||!0===o.app.enabled),o.app.format=o.app.format||"esm",o.app.folder=o.app.folder||o.app.format||"default",!1===o.cli?o.cli={enabled:!1}:!0===o.cli?o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r}:o.cli={enabled:!0,extend:!0===o.cli_has_entry,export:!0,react:r,...o.cli||{}},o.cli.enabled=!0===o.cli.enabled&&(!1===e.doc.features.form_enabled||!0===o.cli.extend||!0===o.cli.enabled),o.cli.format=o.cli.format||"cjs",o.cli.folder=o.cli.folder||o.cli.folder||"cjs";const c={cjs:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,copy:!0,replace:!0,terser:!1,enabled:!0},cjsx:{format:"cjs",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!0,replace:!0,enabled:!1,terser:!0},esm:{format:"esm",context:o.form_enabled?"window":"global",babel:!0===o.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!0},esmx:{format:"esm",browser:!0,babel:!0,context:o.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1,terser:!0},iife:{format:"iife",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0,terser:!0},umd:{format:"umd",context:o.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1,terser:!1}},l={};!0===o.webos&&(c.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,babel_options:{targets:{chrome:"79"}}}),!0===o.app.enabled&&(o.app.dir=`./dist/app/${o.app.folder}`,c.app={format:o.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:o.app.dir,terser:!0,output_exports:!1===o.app.export?"none":"auto"},l.targets=l.targets||[],l.targets.push({src:"./src/app/index.html",dest:o.app.dir})),!0===o.cli.enabled&&(o.cli.dir=`./dist/cli/${o.cli.folder}`,c.cli={format:o.cli.format,context:"global",babel:!0===o.src_uses_jsx||!0===o.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:o.cli.dir,banner:"#!/usr/bin/env node",terser:!1,output_exports:!1===o.cli.export?"none":"auto"});const p={server:".",startPath:`${o.app.dir}/index.html`,files:["./dist/**/*"]};o.babel_options=o.babel_options||o.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},o.browsersync_options=J(p,o.browsersync_options||o.browsersync?.options||{}),o.replace_options=J({},o.replace_options||o.replace?.options||{}),o.terser_options=J({},o.terser_options||o.terser?.options||{}),o.css_options=J({},o.css_options||o.css?.options||{}),o.wasm_options=J({},o.wasm_options||o.wasm?.options||{}),o.copy_options=J(l,o.copy_options||o.copy?.options||{}),o.json_options=J({},o.json_options||o.json?.options||{}),o.image_options=J({},o.image_options||o.image?.options||{}),o.rollup=o.rollup||{},o.rollup_output=J(c,o.rollup_output||o.rollup?.output||{});const d=Object.keys(c);for(const e of d){const t=c[e];t&&(!1!==o.rollup[e]?(!0===o.rollup[e]&&(t.enabled=!0),t.babel_options=t.babel_options||o.babel_options,t.browsersync_options=J(o.browsersync_options,t.browsersync_options),t.replace_options=J(o.replace_options,t.replace_options),t.terser_options=J(o.terser_options,t.terser_options),t.css_options=J(o.css_options,t.css_options),t.wasm_options=J(o.wasm_options,t.wasm_options),t.copy_options=J(o.copy_options,t.copy_options),t.json_options=J(o.json_options,t.json_options),t.image_options=J(o.image_options,t.image_options),o.form_enabled&&(t.babel=!0)):t.enabled=!1)}o.babel_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browser_enabled=d.some((e=>!0===o.rollup_output[e].babel)),o.browsersync_enabled=d.some((e=>!0===o.rollup_output[e].browsersync)),o.browsersync_enabled=o.browsersync_enabled&&o.app.enabled,o.wasm_enabled=!0===o.wasm||o.wasm&&!1!==o.wasm?.enabled,o.css_enabled=!0===o.css||o.css&&!1!==o.css?.enabled,o.json_enabled=!0===o.json||o.json&&!1!==o.json?.enabled,o.terser_enabled=!0===o.terser||o.terser&&!1!==o.terser?.enabled,o.copy_enabled=o.app.enabled||o.copy_enabled||o.copy&&!1!==o.copy?.enabled,o.image_enabled=!0===o.image||o.image&&!1!==o.image?.enabled,o.dependency_auto_enabled=!1!==o.dependency_auto&&!1!==o.dependency_auto?.enabled,o.npm_install_flags=o.npm_install_flags||"",o.react_version=o.react_version||o.react?.version||18},xt=async({atom:e,packageDependencies:t,packageDevDependencies:o})=>{if("workflow"===e.type&&(t.push({package:"eventemitter3",version:"^4.0"}),t.push({package:"get-value",version:"^3.0"}),t.push({package:"set-value",version:"^4.1"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let o="^18.2";o=`^${(await W({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:o}),t.push({package:"react-dom",version:o}),"workflow"===e.type&&(t.push({package:"@flownet/react-app",version:"^0.1"}),t.push({package:"@flownet/react-app-state",version:"^0.1"}))}if(!0===e.doc.features.cli.enabled&&t.push({package:"yargs",version:"^17"}),t.push({package:"chalk",version:"^4"}),o.push({package:"@babel/core",version:"^7.23"}),o.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),o.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),o.push({package:"@rollup/plugin-replace",version:"^5.0"}),o.push({package:"rollup",version:"^3.26"}),o.push({package:"rollup-plugin-delete",version:"^2.0"}),o.push({package:"rollup-plugin-dts",version:"^6.0"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),o.push({package:"@rollup/plugin-alias",version:"^5.0"}),e.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6.0"}),o.push({package:"@babel/preset-env",version:"7.22"}),o.push({package:"@babel/preset-react",version:"7.22"})),e.doc.features.browsersync_enabled&&o.push({package:"rollup-plugin-browsersync",version:"^1.3"}),e.doc.features.json_enabled&&o.push({package:"@rollup/plugin-json",version:"^6.0"}),e.doc.features.terser_enabled&&o.push({package:"@rollup/plugin-terser",version:"^0.4"}),e.doc.features.wasm_enabled&&o.push({package:"@rollup/plugin-wasm",version:"^6.1"}),e.doc.features.image_enabled&&o.push({package:"@rollup/plugin-image",version:"^3.0"}),e.doc.features.css_enabled){o.push({package:"rollup-plugin-postcss",version:"4.0"}),o.push({package:"sass",version:"^1.66"});(e.doc.features.css_options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":o.push({package:"postcss-import",version:"^15.1"});break;case"postcss-url":o.push({package:"postcss-url",version:"^10.1"});break;case"postcss-preset-env":o.push({package:"postcss-preset-env",version:"^9.1"});break;case"autoprefixer":o.push({package:"autoprefixer",version:"^10.4"});break;case"cssnano":o.push({package:"cssnano",version:"^6.0"})}}))}e.doc.features.copy_enabled&&o.push({package:"rollup-plugin-copy",version:"^3.5"})},kt=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=G.resolve(o.projectDir,"src/app");z.existsSync(a)||z.mkdirSync(a,{recursive:!0}),await H({pattern:["index.html.njk","index.js.njk"],dir:G.resolve(s,"src/app"),outDir:a,context:i})},jt=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(V.resolve(t.projectDir,"src/app/index.js")),!0===e.doc.features.cli.enabled&&r.push(V.resolve(t.projectDir,"src/cli/index.js"));for await(const t of r){const i=t;if(!X.existsSync(i))throw new Error(`App file not found: ${i}`);const s=await Z({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 Q({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=Y.compile(X.readFileSync(V.resolve(l,"package.json.njk"),"utf8"),Y.configure(l)).render(c),d=t.projectDir,m=V.resolve(d,"package.json");X.writeFileSync(m,p,"utf8")},vt=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=te.resolve(o.projectDir,"src/cli");ee.existsSync(a)||ee.mkdirSync(a,{recursive:!0}),await oe({pattern:["index.js.njk"],dir:te.resolve(s,"src/cli"),outDir:a,context:i})},_t=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:n},s=ie.resolve(o.projectDir,"src","default/index.js");if(!ne.existsSync(s))throw new Error(`Entry file not found: ${s}`);const a=(await ae({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=se.compile(ne.readFileSync(ie.resolve(l,"rollup.config.js.njk"),"utf8"),se.configure(l)).render(i),d=o.projectDir,m=ie.resolve(d,"rollup.config.js");ne.writeFileSync(m,p,"utf8")},Dt=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=le.compile(re.readFileSync(ce.resolve(c,"src/default/to.yargs.js.njk"),"utf8"),n).render(r),p=o.projectDir,d=ce.resolve(p,"src/default/to.yargs.js");re.writeFileSync(d,l,"utf8")},Tt=async({atom:e,setInProgress:t,context:o,packageDependencies:n})=>{await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:n},s=o.templateCommonDir,a=me.compile(pe.readFileSync(de.resolve(s,".gitignore.njk"),"utf8"),me.configure(s)).render(i),r=o.projectDir,c=de.resolve(r,".gitignore");pe.writeFileSync(c,a,"utf8")},Pt=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=ye.compile(fe.readFileSync(ue.resolve(s,"tsconfig.json.njk"),"utf8"),ye.configure(s)).render(i),r=o.projectDir,c=ue.resolve(r,"tsconfig.json");fe.writeFileSync(c,a,"utf8")},St=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=he.compile(we.readFileSync(ge.resolve(o,`${i}.njk`),"utf8"),he.configure(o)).render(e),s=t.projectDir,a=ge.resolve(s,`${i}`);we.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=he.compile(we.readFileSync(ge.resolve(c,`${i}.njk`),"utf8"),he.configure(c)).render(r),p=t.projectDir,d=ge.resolve(p,`${i}`);we.writeFileSync(d,l,"utf8")}},$t=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Prettifiying source files."});if(0!==be.exec("prettier --write src/**/* bin/* *.{js,json,yaml,html} --no-error-on-unmatched-pattern",{cwd:o}).code)throw new Error("Couldnt format files.")},Ct=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Creating .d.ts"});if(0!==xe.exec("tsc",{cwd:o}).code)throw new Error("Couldnt create .d.ts files.")},It=async({setInProgress:e,atom:t,context:o})=>{const n=o.projectDir;await e({message:"Installing npm packages."});if(0!==ke.exec(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n}).code)throw new Error("Couldnt install npm packages.")},Et=async({setInProgress:e,context:t})=>{const o=t.projectDir;await e({message:"Building main project."});if(0!==je.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")},Ft=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setInProgress:s}=e;if(!0===i.enabled)if("lib"===i.name)await nt({...e});else if("red"===i.name)await ot({...e});else if("npm"===i.name)await tt({...e});else if("gcs"===i.name)await et({...e});else if("gitlab"===i.name)await Qe({...e});else if("macos-app"===i.name)await st({...e});else if("ios-app"===i.name)await it({...e});else if("electron"===i.name)await at({...e});else if("webos"===i.name)await rt({...e});else{let e;if("nextjs"===i.name&&(e=ct),!e)return;await e({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o})}},{Atom:Nt}=w,Ot=E,At=j,Bt=F,qt=e,Rt=k,Mt=N,Jt=O;var Lt=class{#e;#t;#o;#n;#i;#s;#a;#r;#c;#l;#p;#d;#m;#f;#u;#y;#h;#w;#g;#b;constructor(e){this.#e=new gt,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:Nt,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await ht(),this.#p=this.#t.buildId||wt(24),this.#b.buildId=this.#p,this.#u=this.#t.mode,this.#y=["all","deploy","build","file"].includes(this.#u),this.#h=["all","deploy","build"].includes(this.#u),this.#w=["all","deploy"].includes(this.#u),this.#g=["all","deploy","build","file","bpmn"].includes(this.#u),this.#m=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#f=await(qt({optional:!0,name:"atom",dir:this.#t.projectDir})?.data);try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await bt(this.#b),await xt(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.#f}))}async initWorkflow(){const e=this.#t.id;this.#o=this.#t.project?.workflowAtom||await Nt.get({id:e}),this.#n="string"==typeof this.#o.doc.content?dt.load(this.#o.doc.content):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:"eventemitter3",version:"^4.0"}),this.#s.push({package:"get-value",version:"^3.0"}),this.#s.push({package:"set-value",version:"^4.1"}),this.#o.doc.features.form_enabled?(this.#s.push({package:"react",version:"^18.2"}),this.#s.push({package:"react-dom",version:"^18.2"}),this.#s.push({package:"@flownet/react-app",version:"^0.1"}),this.#s.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#s.push({package:"yargs",version:"^17"}),this.#s.push({package:"chalk",version:"^4"})}async initWorkflowDir(){const e=this.#t.projectDir,t=this.#t.coreDir;let o;const n=["node_modules"];if(lt.existsSync(e)&<.readdirSync(e).forEach((t=>{n.includes(t)||(o=mt.rm("-rf",pt.join(e,t)))})),o=mt.exec(`mkdir -p ${e}`),0!==o.code)throw new Error("Couldnt create workflow dir.");if(o=mt.exec(`mkdir ${e}/src`),0!==o.code)throw new Error("Couldnt create workflow/src dir.");if(o=mt.exec(`cp -a ${t} ${e}/src`),0!==o.code)throw new Error("Couldnt create workflow/src/core dir.");if(o=mt.exec(`mkdir -p ${e}/src/default/blocks`),0!==o.code)throw new Error("Couldnt create workflow/src/default/blocks dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#i=ft.configure(e,{watch:!1,dev:!0}),this.#b.njEnv=this.#i}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,o]=Object.entries(e)[0];if(o.hasOwnProperty("onerror")){const{onerror:n,...i}=o;e[t]={try:i,except:n}}if(e[t].hasOwnProperty("steps")){const o=e[t].steps;if(!Array.isArray(o))throw new Error("Steps must be an array.");e[t].steps=o.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),o={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#o}};t.forEach((t=>{const n={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:o,definition:e[t],index:o.childs.length,depth:o.depth+1,context:{},blockAutoJumpToParent:!0};o.childs.push(n)}));for await(const e of o.childs)await this.initNode({node:e});return o}async initNode({node:e}){if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except"))await this.initBlockTypeTryExcept({node:e});else if(e.definition.hasOwnProperty("for"))await this.initBlockTypeFor({node:e});else if(e.definition.hasOwnProperty("switch"))await this.initBlockTypeSwitch({node:e});else if(e.definition.hasOwnProperty("parallel"))await this.initBlockTypeParallel({node:e});else if(e.definition.hasOwnProperty("raise"))await this.initBlockTypeRaise({node:e});else if(e.definition.hasOwnProperty("return"))await this.initBlockTypeReturn({node:e});else if(e.definition.hasOwnProperty("assign"))await this.initBlockTypeAssign({node:e});else if(e.definition.hasOwnProperty("call"))await this.initBlockTypeCall({node:e});else if(e.definition.hasOwnProperty("form"))await this.initBlockTypeForm({node:e});else if(e.definition.hasOwnProperty("shell"))await this.initBlockTypeShell({node:e});else if(e.definition.hasOwnProperty("config"))await this.initBlockTypeConfig({node:e});else if(e.definition.hasOwnProperty("operation"))await this.initBlockTypeOperation({node:e});else if(e.definition.hasOwnProperty("steps"))await this.initBlockTypeSteps({node:e});else{if(!e.definition.hasOwnProperty("next"))throw new Error("Undefined step type.");await this.initBlockTypeJump({node:e})}}async initBlockTypeTryExcept({node:e}){if(e.type="tryexcept",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!0,e.definition.try){const t="try",o={name:t,childs:[],parent:e,definition:e.definition[t],index:e.childs.length,context:{}};e.childs.push(o),await this.initNode({node:o})}if(e.definition.except){const t="except",o={name:t,childs:[],parent:e,definition:e.definition[t],index:e.childs.length,context:{}};e.childs.push(o),await this.initNode({node:o})}}async initBlockTypeSwitch({node:e}){e.type="switch",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let t=0;t<e.definition.switch.length;t++){const o=e.definition.switch[t],n={name:`${t}`,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(n),o.hasOwnProperty("steps")?await this.initNode({node:n}):(n.depth=e.depth+1,n.type="jump")}}async initBlockTypeFor({node:e}){e.type="for",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1;for(let t=0;t<e.definition.for.steps.length;t++){const o=e.definition.for.steps[t],n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],index:e.childs.length,context:{}};e.childs.push(i),await this.initNode({node:i})}}async initBlockTypeSteps({node:e}){e.type||(e.type="steps");const t=e.definition.steps||[];for await(const o of t){const t=Object.keys(o)[0],n={name:t,childs:[],parent:e,definition:o[t],index:e.childs.length,context:{}};e.childs.push(n),await this.initNode({node:n})}}async initBlockTypeAssign({node:e}){e.type="assign"}async initBlockTypeCall({node:e}){e.type="call";for(let t=0;t<e.definition.modules?.length;t++){const o=e.definition.modules[t],n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],module:!0,blockAutoJumpToParent:!0,index:e.childs.length,context:{}};e.childs.push(i),await this.initNode({node:i})}}async initBlockTypeForm({node:e}){e.type="form";for(let t=0;t<e.definition.modules?.length;t++){const o=e.definition.modules[t],n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],module:!0,blockAutoJumpToParent:!0,index:e.childs.length,context:{}};e.childs.push(i),await this.initNode({node:i})}}async initBlockTypeReturn({node:e}){e.type="return"}async initBlockTypeRaise({node:e}){e.type="raise"}async initBlockTypeJump({node:e}){e.type="jump"}async initBlockTypeOperation({node:e}){e.type="operation"}async initBlockTypeParallel({node:e}){e.type="parallel"}async initBlockTypeShell({node:e}){const t="shell",o=e.definition,n=typeof o[t];if("string"!==n&&"object"!==n)throw new Error(`Unsupported ${t} usage`);o.call="npm:@fnet/shell",o.args="string"===n?{cmd:o[t]}:o[t],delete o[t],await this.initBlockTypeCall({node:e})}async initBlockTypeConfig({node:e}){const t="config",o=e.definition,n=typeof o[t];if("string"!==n&&"object"!==n)throw new Error(`Unsupported ${t} usage`);o.call="npm:@fnet/config",o.args="string"===n?{name:o[t]}:o[t],delete o[t],await this.initBlockTypeCall({node:e})}async 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=pt.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=wt(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=Ot({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#m),"ac:"===t.protocol){const o=t.pathname.split("/");if(1===o.length)return await Nt.first({where:{name:e,parent_id:this.#f.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===o.length){const e=await Nt.first({where:{name:o[0],parent_id:this.#f.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Nt.first({where:{name:o[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===t.protocol){const e=pt.resolve(this.#t.projectSrcDir,`${t.pathname}.js`),o=[],n=await Rt({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 At({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 At({name:t.pathname,groupBy:{minor:!0}}))[0][0];return{name:t.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:[{package:t.pathname,version:`^${e}`,type:"npm"}]},protocol:t.protocol}}}}resolveNextBlock({node:e}){const t=e.definition;if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let o=e.parent;for(;o.parent;){const n=o.childs.find((e=>e.name===t.next));if(n){e.context.next=n;break}o=o.parent}}else{if(!0===e.module)return;let t=e.parent,o=e.index+1;for(;t.parent;){if(t.blockAutoJumpToParent&&!0===t.blockAutoJumpToSibling){if(!0===t.blockAutoJumpToParent)break;o=t.index+1,t=t.parent;continue}const n=t.childs.find((e=>e.index===o));if(n){e.context.next=n;break}if(!0===t.blockAutoJumpToParent)break;o=t.index+1,t=t.parent}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=ut(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const o=t.params[e];if("string"==typeof o)t.params[e]={key:o,hasDefault:!1};else{const n=Object.keys(o)[0];t.params[e]={key:n,hasDefault:!0,default:o[n]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){"assign"===e.type?await this.resolveTypeAssign({node:e}):"return"===e.type?await this.resolveTypeReturn({node:e}):"call"===e.type?await this.resolveTypeCall({node:e}):"form"===e.type?await this.resolveTypeForm({node:e}):"raise"===e.type?await this.resolveTypeRaise({node:e}):"switch"===e.type?await this.resolveTypeSwitch({node:e}):"jump"===e.type?await this.resolveTypeJump({node:e}):"tryexcept"===e.type?await this.resolveTypeTryExcept({node:e}):"for"===e.type?await this.resolveTypeFor({node:e}):"operation"===e.type?await this.resolveTypeOperation({node:e}):"steps"===e.type&&await this.resolveTypeSteps({node:e});for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeAssign({node:e}){e.context.transform=ut(e.definition);const t=e.context.transform;for(let e=0;e<t.assign?.length;e++){let o=t.assign[e],n=Object.keys(o)[0],i=o[n],s={key:await this.transformExpression(n),value:await this.transformExpression(i)};t.assign[e]=s}await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeSteps({node:e}){e.context.next=e.childs[0]}async resolveTypeReturn({node:e}){e.context.transform=e.context.transform||ut(e.definition);const t=e.context.transform;t.return=await this.transformExpression(t.return),await this.resolveTypeCommon({node:e})}async resolveTypeCall({node:e}){e.context.transform=e.context.transform||ut(e.definition);const t=e.context.transform;t.args&&(t.args=await this.transformExpression(t.args)),t.result&&(t.result=await this.transformExpression(t.result));const o=e.workflow.parent;e.context.lib=o.context.libs.find((e=>e.name===t.call)),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeForm({node:e}){e.context.transform=e.context.transform||ut(e.definition);const t=e.context.transform;t.props&&(t.props=await this.transformExpression(t.props));const o=e.workflow.parent;e.context.lib=o.context.libs.find((e=>e.name===t.form)),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeRaise({node:e}){e.context.transform=e.context.transform||ut(e.definition);const t=e.context.transform;t.raise=await this.transformExpression(t.raise),await this.resolveTypeCommon({node:e})}async resolveTypeSwitch({node:e}){e.context.transform=e.context.transform||ut(e.definition),e.context.transform;for(const t of e.childs)t.context.transform=t.context.transform||ut(t.definition),t.context.transform.condition=await this.transformExpression(t.definition.condition);await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeJump({node:e}){e.context.transform=e.context.transform||ut(e.definition);const t=e.context.transform;t.next=await this.transformExpression(t.next),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeTryExcept({node:e}){if(e.context.transform=e.context.transform||ut(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||ut(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeFor({node:e}){e.context.transform=e.context.transform||ut(e.definition);e.context.transform.for.in=await this.transformExpression(e.definition.for.in),await this.resolveTypeCommon({node:e}),this.resolveNextBlock({node:e})}async resolveTypeOperation({node:e}){e.context.transform=e.context.transform||ut(e.definition),await this.resolveTypeCommon({node:e})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:e}){await this.setInProgress({message:"Creating external lib files."}),this.#o.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const o=t[e].atom,n=this.#t.projectDir;if("local:"===o.protocol){const e=pt.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),t=pt.relative(`${this.#t.projectDir}/src/default/blocks`,e);if(!lt.existsSync(e)){lt.mkdirSync(pt.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",lt.writeFileSync(e,t,"utf8")}o.relativePath=t,this.#o.typesDir=`./types/${pt.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;lt.writeFileSync(e,t.content,"utf8")}}}async createEngine({root:e}){await this.setInProgress({message:"Creating engine file."});const t=this.#t.templateDir,o=ft.compile(lt.readFileSync(pt.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#i).render({...e,ui:{package:"@flownet/react-app"}}),n=this.#t.projectDir,i=pt.resolve(n,"src/default/index.js");lt.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=ft.compile(lt.readFileSync(pt.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#i).render(e),n=this.#t.projectDir,i=pt.resolve(n,`src/default/${e.codeKey}.js`);lt.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=ft.compile(lt.readFileSync(pt.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=pt.resolve(t,`src/default/blocks/${o}`);lt.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(yt(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 Mt({expression:e});if(t){const{processor:o,statement:n}=t;switch(o){case"var":case"vs":case"v":e=`$::v.${n}::`;break;case"exp":case"e":e=`$::${n}::`;break;case"mod":case"m":e=`$::closure.module['${n}']::`;break;case"form":case"f":e=`$::closure.form.${n}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const e="flow.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:o,...n}=this.#o.doc,i={content:dt.dump(n)},s=this.#t.templateDir,a=ft.compile(lt.readFileSync(pt.resolve(s,`${e}.njk`),"utf8"),this.#i).render(i),r=this.#t.projectDir,c=pt.resolve(r,`${e}`);lt.writeFileSync(c,a,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const o={content:dt.dump(this.#n)},n=this.#t.templateDir,i=ft.compile(lt.readFileSync(pt.resolve(n,`${e}.njk`),"utf8"),this.#i).render(o),s=this.#t.projectDir,a=pt.resolve(s,`${e}`);lt.writeFileSync(a,i,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=mt.exec("prettier --write .",{cwd:pt.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 Nt.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 Nt.update(o,{id:o.id}))}}}async deployProject(e){const{deploymentProject:t}=e,o=t.doc.targets;for(let e=0;e<o.length;e++){const n=o[e];await Ft({...this.#b,deploymentProject:t,deploymentProjectTarget:n})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#t.id)return;let n=await Nt.first({name:t.params.name,parent_id:this.#f.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await Nt.update(n,{id:n.id})):n=await Nt.create({parent_id:this.#f.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:o.version}]}})}async setInProgress({message:e}){console.log(Jt.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 Bt({root:this.#l}):void 0;this.#y&&(await this.initWorkflowDir(),await this.initNunjucks(),this.#g&<.writeFileSync(pt.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 St(this.#b),await Pt(this.#b),await Tt(this.#b),await Dt(this.#b),await vt(this.#b),await kt(this.#b),await _t(this.#b),await jt(this.#b),await $t(this.#b),await Ct(this.#b),this.#h&&(await It(this.#b),await Et(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 Bt({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 Kt=c,Ut=l;var Wt=function({baseDir:e=__dirname}){let t=e;for(;t!==Ut.parse(t).root;){const e=Ut.join(t,"node_modules");if(Kt.existsSync(e))return e;t=Ut.dirname(t)}return null};const zt=process.cwd();e({name:["redis"],dir:zt,optional:!0});const Gt=t,Ht=o,{hideBin:Yt}=n,Xt=i,Vt=s,Zt=a,Qt=r,eo=Lt,to=Wt({baseDir:__dirname});async function oo(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:Gt.resolve(zt,`./.output/${e.id}`),templateDir:Gt.resolve(to,"./@flownet/template-node-workflow/default"),templateCommonDir:Gt.resolve(to,"./@flownet/template-node-common/default"),coreDir:Gt.resolve(to,"./@flownet/template-node-workflow/core")}}{const t=await async function(e){const t=Gt.resolve(zt,"flow.yaml");if(!Xt.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const o=Xt.readFileSync(t,"utf8"),n=Vt.parse(o),i=Gt.dirname(t),s=Gt.resolve(i,"flow.main.yaml");if(!Xt.existsSync(t))throw new Error("flow.main.yaml file not found in current directory.");const a=Xt.readFileSync(s,"utf8"),r=Vt.parse(a),c={workflowAtom:{doc:{...n,"content-type":"yaml",content:a}},projectDir:i,projectFilePath:t,projectFileContent:o,projectFileParsed:n,projectMainFilePath:s,projectMainFileContent:a,projectMainFileParsed:r},l=Gt.resolve(i,"flow.devops.yaml");if(Xt.existsSync(l)){const e=Xt.readFileSync(l,"utf8"),t=Vt.parse(e);c.devops={filePath:l,fileContent:e,doc:{...t},type:"workflow.deploy",save:async()=>{Xt.writeFileSync(c.devops.filePath,Vt.stringify(c.devops.doc))}}}const p=Gt.resolve(i,"flow.readme.md");if(Xt.existsSync(p)){const e=Xt.readFileSync(p,"utf8");c.readme={filePath:p,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return c}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:Gt.resolve(to,"./@flownet/template-node-workflow/default"),templateCommonDir:Gt.resolve(to,"./@flownet/template-node-common/default"),coreDir:Gt.resolve(to,"./@flownet/template-node-workflow/core"),projectDir:Gt.resolve(t.projectDir,"./.workspace"),projectSrcDir:Gt.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${to}/.bin:${process.env.PATH}`,Ht(Yt(process.argv)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"})),(async e=>{try{const t=Gt.resolve(to,"./@flownet/template-node-workflow/project"),o=Gt.resolve(zt,e.name);Xt.existsSync(o)||Xt.mkdirSync(o),await Qt({dir:t,outDir:o,context:e});let n=Zt.exec("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(Zt.which("git")&&(n=Zt.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 oo(e),o=new eo(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 oo({...e,mode:"all"}),o=new eo(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 oo({...e,mode:"file"}),o=new eo(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await oo(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),s=`npm ${n.join(" ")} ${i}`;Zt.exec(s,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await oo(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),s=`node ${n.join(" ")} ${i}`;Zt.exec(s,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await oo(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),s=`npm run serve ${n.join(" ")} ${i}`;Zt.exec(s,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await oo(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),s=`npm run watch ${n.join(" ")} ${i}`;Zt.exec(s,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("app [commands..]","npm run app - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await oo(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),s=`npm run app ${n.join(" ")} ${i}`;Zt.exec(s,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).command("cli [commands..]","npm run cli - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await oo(e),{projectDir:o}=t,n=e.commands||[],i=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),s=`npm run cli ${n.join(" ")} ${i}`;Zt.exec(s,{cwd:o}),process.exit(0)}catch(e){console.error(e.message),process.exit(1)}})).demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e,t,s=require("@flownet/lib-load-fnet-config"),i=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),d=require("path"),c=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),w=require("keycloak-connect"),p=require("qs");function _(){if(t)return e;t=1;const s=i,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=s.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}}var b,f,m,y,k={name:"@fnet/cli",version:"0.14.
|
|
2
|
+
"use strict";var e,t,s=require("@flownet/lib-load-fnet-config"),i=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),d=require("path"),c=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),w=require("keycloak-connect"),p=require("qs");function _(){if(t)return e;t=1;const s=i,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=s.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}}var b,f,m,y,k={name:"@fnet/cli",version:"0.14.6",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"},dependencies:{"@flownet/lib-atom-api-js":"^0.1.8","@flownet/lib-bpmn-from-flow":"^0.1.7","@flownet/lib-is-redis-online":"^0.1.13","@flownet/lib-list-npm-versions":"^0.1.31","@flownet/lib-load-fnet-config":"^0.2.1","@flownet/lib-parse-imports-js":"^0.2.1","@flownet/lib-parse-node-url":"^0.1.16","@flownet/lib-pick-npm-versions":"^0.1.12","@flownet/lib-render-templates-dir":"^0.1.12","@flownet/lib-to-electron":"^0.2.1","@flownet/lib-to-gitlab":"^0.1.21","@flownet/lib-to-ios-app":"^0.2.5","@flownet/lib-to-macos-app":"^0.2.3","@flownet/lib-to-nextjs":"^0.1.12","@flownet/lib-to-webos":"^0.2.8","@flownet/lib-upload-files-to-gcs":"^0.1.12","@flownet/template-node-common":"^0.13.1","@flownet/template-node-library":"^0.13.1","@flownet/template-node-workflow":"^0.13.1","@fnet/expression":"^0.1.5","@fnet/shell":"^0.1.9","@node-red/util":"^3.1.0",axios:"^1.5.0",chalk:"^4.1.2",cors:"^2.8.5",express:"^4.18.2","express-session":"^1.17.3","get-value":"^3.0.1",helmet:"^5.1.1",isobject:"^4.0.0","js-yaml":"^4.1.0","keycloak-connect":"^22.0.3","lodash.clonedeep":"^4.5.0","lodash.merge":"^4.6.2",minimist:"^1.2.8",nanoid:"^3.3.6",nunjucks:"^3.2.4",prettier:"^3.0.3",qs:"^6.11.2",redis:"^4.6.10","request-ip":"^3.3.0",semver:"^7.5.4",serve:"^14.2.1","set-value":"^4.1.0",shelljs:"^0.8.5",typescript:"^5.2.2",uuid:"^9.0.1",yaml:"^2.3.2",yargs:"^17.7.2"},bin:{fnet:"dist/builder/wf-cli.js",flib:"dist/builder/lib-cli.js",fsrv:"dist/index.js",fnode:"dist/builder/lib-cli.js"},devDependencies:{"@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.1","@rollup/plugin-replace":"^5.0.2","@rollup/plugin-terser":"^0.4.3",rollup:"^3.29.1"}};const v=process.cwd();s({name:["server","redis"],dir:v,optional:!0}),async function(){const e=await _()();if(!e)throw new Error("Redis is offline.");const t=k,s=n,i=o,r=l,g=function(){if(f)return b;f=1;const e=n,t=d,s=c,{nanoid:i}=a;return b=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/workflow/builder/create",this._buildHandler.bind(this)),t.post("/workflow/builder/status",this._statusHandler.bind(this)),t.post("/workflow/builder/network",this._networkHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,s){await this._redis_client.SETEX(e,s||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_networkHandler(e,t){this._network({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const s=e.body.id;if(!s)throw new Error("Build Id is not defined.");const i="BUILD:"+s;this._cache_get(i).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=i(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=all`;return s.exec(o,{async:!0,cwd:this.#e}),{id:n}}async _network(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=i(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=bpmn`;s.exec(o,{cwd:this.#e});const l="BUILD:"+n;return await this._cache_get(l)}}}(),j=function(){if(y)return m;y=1;const e=n,t=d,s=c,{nanoid:i}=a;return m=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/library/builder/create",this._buildHandler.bind(this)),t.post("/library/builder/status",this._statusHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,s){await this._redis_client.SETEX(e,s||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const s=e.body.id;if(!s)throw new Error("Build Id is not defined.");const i="BUILD:"+s;this._cache_get(i).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Library Id is not defined.");const n=i(24),o=`node ${t.resolve(__dirname,"builder/lib-cli.js")} build --id=${r} --buildId=${n} --mode=all}`;return s.exec(o,{async:!0,cwd:this.#e}),{id:n}}}}(),E=u,x=h,q=new(0,x.MemoryStore),S=new w({store:q}),I=s(),R=p;I.set("query parser",(function(e){return R.parse(e,{depth:12})})),I.use(x({secret:process.env.SESSION_SECRET,resave:!1,saveUninitialized:!0,store:q})),I.use(r()),I.use(i()),I.use(s.json({limit:"1024kb"})),I.get("/healthz",(function(e,t){t.sendStatus(200)})),I.use(E.mw()),I.use(S.middleware()),new g({keycloak:S,wdir:v,redisClient:e}).join("/v1",I),new j({keycloak:S,wdir:v,redisClient:e}).join("/v1",I),I.listen(process.env.HTTP_PORT||8080),console.log(`[${t.version}] ${t.name} started.`)}().catch((e=>{console.error(e.message),process.exit(1)})),module.exports={};
|