@fnet/cli 0.7.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e=require("@flownet/lib-load-fnet-config"),t=require("path"),i=require("yargs/yargs"),o=require("yargs/helpers"),a=require("fs"),n=require("yaml"),s=require("shelljs"),r=require("@flownet/lib-render-templates-dir"),c=require("node:fs"),l=require("node:path"),d=require("js-yaml"),p=require("nunjucks"),m=require("lodash.clonedeep"),h=require("axios"),y=require("@node-red/util"),u=require("semver"),g=require("redis"),f=require("@flownet/lib-is-redis-online"),b=require("node:os"),w=require("lodash.merge"),j=require("nanoid"),_=require("@flownet/lib-atom-api-js"),v=require("qs"),D=require("@flownet/lib-execute-command-with-ipc-file"),x=require("@flownet/lib-parse-node-url"),k=require("@flownet/lib-parse-imports-js"),P=require("@flownet/lib-pick-npm-versions"),I=require("@flownet/lib-to-nextjs");const S=g,$=f;const{Api:E}=_,A=h.default,C=v;const F=I,T=m,O=w,R=u,q=l;const L=c,N=l,M=d,B=s,G=p,J=m,K=h,U=y,Y=u,z=async()=>{if(!await $({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},H=b,W=w,{nanoid:X}=j,Z=class{init({config:e,accessToken:t}){return new Promise(((i,o)=>{if(E.set_api_url(e.data.url),t)return E.set_req_token(t),void i(t);A({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:C.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{E.set_req_token(e.data.access_token),i(e.data.access_token)})).catch((e=>{E.set_req_token(),o(e)}))}))}},{Atom:Q}=_,V=D,ee=x,te=e,ie=k,oe=P,ae=async({atom:e,target:t,onProgress:i,projectDir:o,dependencies:a})=>{i&&await i({message:"Deploying it as nextjs package."});t.params=O({name:"nextjs-app",version:"0.1.0"},t.params);const n=R.inc(t.params.version,"patch");t.params.version=n;const s=T(t);s.params.dependencies=T(a);const r={atom:e,target:s.params,projectDir:o,renderDir:q.resolve(o,"nextjs")};return{deployer:await F(r)}};var ne=class{#e;#t;#i;#o;#a;#n;#s;#r;#c;#l;#d;#p;#m;#h;#y;#u;#g;constructor(e){this.#e=new Z,this.#t=e,this.#n=[],this._expire_ttl=3600,this._expire_ttl_short=300}async _cache_set(e,t,i){this._redis_client&&await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await z(),this.#r=this.#t.buildId||X(24),this.#h=this.#t.mode,this.#y=["all","deploy","build","file"].includes(this.#h),this.#u=["all","deploy","build"].includes(this.#h),this.#g=["all","deploy"].includes(this.#h),this.#l=this.#t.protocol,this.#c="BUILD:"+this.#r,this.#d=await(te({name:this.#t.atomConfig||"atom",dir:this.#t.projectDir})?.data),this.#p=await(te({name:this.#t.npmConfig||"npm",dir:this.#t.projectDir})?.data),this.#m=await(te({name:this.#t.redConfig||"red",dir:this.#t.projectDir})?.data);try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await this.initFeatures(),await this.initDependencies(),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}catch(e){throw await this._cache_set(this.#c,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#s=await this.#e.init({config:this.#d}))}async initLibrary(){const e=this.#t.id;this.#i=this.#t.project?.libraryAtom||await Q.get({id:e});let t=this.#i.doc.bundleName;t=t||(this.#i.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#i.doc.bundleName=t,this.#i.type=this.#i.type||"workflow.lib"}async initFeatures(){this.#i.doc.features=this.#i.doc.features||{};const e=this.#i.doc.features;e.form_enabled=!0===this.#i.doc.form||!0===this.#i.doc.form?.enabled||!0===e.form||!0===e.form?.enabled,e.browser_autorun=!0===e.browser?.autorun;const t={cjs:{format:"cjs",context:e.form_enabled?"window":"global",babel:!1,browser:!1,copy:!0,replace:!0},cjsx:{format:"cjs",context:e.form_enabled?"window":"global",babel:!1,browser:!0,replace:!0},esm:{format:"esm",context:e.form_enabled?"window":"global",babel:!1,browser:!1,replace:!0},esmx:{format:"esm",browser:!0,babel:!0,context:e.form_enabled?"window":"global",replace:!0,browsersync:!0},iife:{format:"iife",context:e.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0}};!0===e.webos&&(t.webos={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,babel_options:{targets:{chrome:"79"}}}),e.babel_options=e.babel_options||e.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},e.browsersync_options=W({server:".",startPath:"/",files:["./app/**/*","./dist/**/*"]},e.browsersync_options||e.browsersync?.options||{}),e.replace_options=W({},e.replace_options||e.replace?.options||{}),e.terser_options=W({},e.terser_options||e.terser?.options||{}),e.css_options=W({},e.css_options||e.css?.options||{}),e.wasm_options=W({},e.wasm_options||e.wasm?.options||{}),e.copy_options=W({},e.copy_options||e.copy?.options||{}),e.json_options=W({},e.json_options||e.json?.options||{}),e.rollup_output=W(t,e.rollup_output||e.rollup?.output||e.rollup||{});const i=Object.keys(t);for(const o of i){const i=t[o];i&&(i.babel_options=i.babel_options||e.babel_options,i.browsersync_options=W(e.browsersync_options,i.browsersync_options),i.replace_options=W(e.replace_options,i.replace_options),i.terser_options=W(e.terser_options,i.terser_options),i.css_options=W(e.css_options,i.css_options),i.wasm_options=W(e.wasm_options,i.wasm_options),i.copy_options=W(e.copy_options,i.copy_options),i.json_options=W(e.json_options,i.json_options),e.form_enabled&&(i.babel=!0))}e.babel_enabled=i.some((t=>!0===e.rollup_output[t].babel)),e.browser_enabled=i.some((t=>!0===e.rollup_output[t].babel)),e.browsersync_enabled=i.some((t=>!0===e.rollup_output[t].browsersync)),e.browsersync_enabled=e.browsersync_enabled&&(e.form_enabled||!0===e.browser_autorun),e.multiple_enabled=e.multiple_enabled||!0===e.multiple||!0===e.multiple?.enabled,e.wasm_enabled=!0===e.wasm||e.wasm&&!1!==e.wasm?.enabled,e.css_enabled=!0===e.css||e.css&&!1!==e.css?.enabled,e.json_enabled=!0===e.json||e.json&&!1!==e.json?.enabled,e.terser_enabled=!0===e.terser||e.terser&&!1!==e.terser?.enabled,e.copy_enabled=e.copy_enabled||e.copy&&!1!==e.copy?.enabled,e.bin_name=e.bin_name||e.bin?.name||e.bin,e.bin_enabled=e.bin_name&&("string"==typeof e.bin_name)(e.bin_enabled||!1!==e.bin?.enabled),e.dependency_auto_enabled=!1!==e.dependency_auto&&!1!==e.dependency_auto?.enabled,e.npm_install_flags=e.npm_install_flags||"",e.index_html_enabled=!(!0===this.#i.doc.features.multiple_enabled||!0!==this.#i.doc.features.form_enabled),e.bin_file_enabled=!(!0===this.#i.doc.features.multiple_enabled||!0===this.#i.doc.features.form_enabled)}async initDependencies(){this.#i.doc.features.form_enabled?this.#i.doc.features.dependency_auto_enabled&&(this.#n.push({package:"react",version:"^18.2"}),this.#n.push({package:"react-dom",version:"^18.2"}),this.#n.push({package:"@flownet/react-app-state",version:"^0.1"})):!0!==this.#i.doc.features.multiple_enabled&&this.#n.push({package:"yargs",version:"^17"}),this.#n.push({package:"chalk",version:"^4"})}async initLibraryDir(){const e=this.#t.projectDir;let t;const i=["node_modules"];if(L.existsSync(e)&&L.readdirSync(e).forEach((o=>{i.includes(o)||(t=B.rm("-rf",N.join(e,o)))})),t=B.exec(`mkdir -p ${e}`),0!==t.code)throw new Error("Couldnt create workflow dir.");if(t=B.exec(`mkdir ${e}/src`),0!==t.code)throw new Error("Couldnt create library/src dir.");if(t=B.exec(`mkdir ${e}/src/default`),0!==t.code)throw new Error("Couldnt create library/src/default dir.");if(t=B.exec(`mkdir -p ${e}/src/libs`),0!==t.code)throw new Error("Couldnt create library/src/libs dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#o=G.configure(e,{watch:!1,dev:!0})}async initLibs(){const e=[{name:this.#i.doc.name,type:"atom",parent_id:this.#i.parent_id}];this.#a=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#n})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const i=e.filter((e=>"atom"===e.type));for(let e=0;e<i.length;e++){const o=i[e],a=await this.findAtomLibrary({url:o.name});o.atom=a;const n=a.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));n?.forEach((e=>{const i=t.find((t=>t.package===e.package));i?"string"==typeof e.path?(i.path||[]).some((t=>t===e.path))||(i.path=i.path||[],i.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(i.path||[]).some((t=>t===e))||(i.path=i.path||[],i.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=ee({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#l),"ac:"===t.protocol){const i=t.pathname.split("/");if(1===i.length)return await Q.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===i.length){const e=await Q.first({where:{name:i[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await Q.first({where:{name:i[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===t.protocol){const e=this.#i;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=N.resolve(this.#t.projectSrcDir,"index.js"),i=await ie({file:t,recursive:!0}),o=e.doc.dependencies;for await(const e of i.required){if("npm"!==e.type)continue;const t=await oe({name:e.package,count:1});o.find((t=>t.package===e.package))||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.#i.typesDir="./types";const t=e.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const i=t[e].atom,o=this.#t.projectDir;if("local:"===i.protocol){const e=N.resolve(this.#t.projectSrcDir,`${i.fileName||i.name}.js`),t=N.relative(`${this.#t.projectDir}/src/default/`,e);if(!L.existsSync(e)){L.mkdirSync(N.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",L.writeFileSync(e,t,"utf8")}i.relativePath=t,this.#i.typesDir="./types/target/src"}else{const e=`${o}/src/libs/${i.id}.js`,t=i.doc.contents?.find((e=>"esm"===e.format))||i.doc;L.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#a.filter((e=>"atom"===e.type)),libraryAtom:this.#i,atom:this.#i},t=this.#t.templateDir,i=G.compile(L.readFileSync(N.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#o).render(e),o=this.#t.projectDir,a=N.resolve(o,"src/default/index.js");L.writeFileSync(a,i,"utf8")}async createRollup(){await this.setInProgress({message:"Creating rollup file."});const e={libraryAtom:this.#i,atom:this.#i,packageDependencies:this.#n},t=this.#t.templateDir,i=G.compile(L.readFileSync(N.resolve(t,"rollup.config.js.njk"),"utf8"),this.#o).render(e),o=this.#t.projectDir,a=N.resolve(o,"rollup.config.js");L.writeFileSync(a,i,"utf8")}async createPackageJSON(){await this.setInProgress({message:"Creating package.json."});const e=this.#n.find((e=>"react"===e.package)),t=this.#n.find((e=>"react-dom"===e.package));e&&!t?this.#n.push({package:"react-dom",version:e.version}):e&&t&&(t.version=e.version),e&&(this.#n.find((e=>"@emotion/react"===e.package))||this.#n.push({package:"@emotion/react",version:"^11"}),this.#n.find((e=>"@emotion/styled"===e.package))||this.#n.push({package:"@emotion/styled",version:"^11"}));const i={libraryAtom:this.#i,atom:this.#i,packageDependencies:this.#n},o=this.#t.templateDir,a=G.compile(L.readFileSync(N.resolve(o,"package.json.njk"),"utf8"),this.#o).render(i),n=this.#t.projectDir,s=N.resolve(n,"package.json");L.writeFileSync(s,a,"utf8")}async createBin(){if(!0!==this.#i.doc.features.bin_file_enabled)return;await this.setInProgress({message:"Creating bin."});const e=this.#t.projectDir;if(0!==B.exec(`mkdir ${e}/bin`).code)throw new Error("Couldnt create library/bin dir.");const t={libraryAtom:this.#i,atom:this.#i,packageDependencies:this.#n},i=this.#t.templateDir;let o=G.compile(L.readFileSync(N.resolve(i,"bin/index.js.njk"),"utf8"),this.#o).render(t),a=N.resolve(e,"bin/index.js");L.writeFileSync(a,o,"utf8")}async createIndexHtml(){if(!this.#i.doc.features.index_html_enabled)return;await this.setInProgress({message:"Creating index.html."});const e={libraryAtom:this.#i,atom:this.#i,packageDependencies:this.#n,ts:Date.now()},t=this.#t.templateDir,i=G.compile(L.readFileSync(N.resolve(t,"index.html.njk"),"utf8"),this.#o).render(e),o=this.#t.projectDir,a=N.resolve(o,"index.html");L.writeFileSync(a,i,"utf8")}async createTsConfig(){await this.setInProgress({message:"Creating tsconfig.json."});const e={libraryAtom:this.#i,atom:this.#i,packageDependencies:this.#n},t=this.#t.templateDir,i=G.compile(L.readFileSync(N.resolve(t,"tsconfig.json.njk"),"utf8"),this.#o).render(e),o=this.#t.projectDir,a=N.resolve(o,"tsconfig.json");L.writeFileSync(a,i,"utf8")}async createGitIgnore(){await this.setInProgress({message:"Creating .gitignore"});const e={libraryAtom:this.#i,atom:this.#i,packageDependencies:this.#n},t=this.#t.templateDir,i=G.compile(L.readFileSync(N.resolve(t,".gitignore.njk"),"utf8"),this.#o).render(e),o=this.#t.projectDir,a=N.resolve(o,".gitignore");L.writeFileSync(a,i,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:i,...o}=this.#i.doc,a={content:M.dump(o)},n=this.#t.templateDir,s=G.compile(L.readFileSync(N.resolve(n,`${e}.njk`),"utf8"),this.#o).render(a),r=this.#t.projectDir,c=N.resolve(r,`${e}`);L.writeFileSync(c,s,"utf8")}async createProjectReadme(){const e="readme.md",t=`Creating ${e}`;if(await this.setInProgress({message:t}),this.#t.project?.readme){const t={content:this.#t.project.readme.doc.content},i=this.#t.templateDir,o=G.compile(L.readFileSync(N.resolve(i,`${e}.njk`),"utf8"),this.#o).render(t),a=this.#t.projectDir,n=N.resolve(a,`${e}`);L.writeFileSync(n,o,"utf8")}else if(this.#i.id){const t=await Q.first({type:"wiki",parent_id:this.#i.id});if(!t||"markdown"!==t.doc?.["content-type"])return;const{content:i,...o}=t.doc,a={content:i},n=this.#t.templateDir,s=G.compile(L.readFileSync(N.resolve(n,`${e}.njk`),"utf8"),this.#o).render(a),r=this.#t.projectDir,c=N.resolve(r,`${e}`);L.writeFileSync(c,s,"utf8")}}async createToYargs(){if(!0===this.#i.doc.features.multiple_enabled)return;await this.setInProgress({message:"Creating yargs."});const e={},t=this.#i.doc.inputs||[],i=[];t.forEach((t=>{if(!1===t.cli||!t.name)return;t.import&&i.push(t);const o={};t.type&&(o.type=t.type),t.default&&(o.default=t.default),t.choices&&(o.choices=t.choices),(t.describe||t.description)&&(o.describe=t.describe||t.description),t.alias&&(o.alias=t.alias),!0===t.required&&(o.required=!0),!0===t.hidden&&(o.hidden=!0),!0===t.array&&(o.array=!0),!0===t.normalize&&(o.normalize=!0),t.nargs&&(o.nargs=t.nargs),e[t.name]=o}));const o={options:e,imports:i,atom:this.#i},a=this.#t.templateDir,n=G.compile(L.readFileSync(N.resolve(a,"src/default/to.yargs.js.njk"),"utf8"),this.#o).render(o),s=this.#t.projectDir,r=N.resolve(s,"src/default/to.yargs.js");L.writeFileSync(r,n,"utf8")}async runBuildScripts(){const e=this.#t.projectDir;await this.setInProgress({message:"Installing npm packages."});let t=B.exec(`npm install ${this.#i.doc.features.npm_install_flags}`,{cwd:e});if(0!==t.code)throw new Error("Couldnt install npm packages.");if(await this.setInProgress({message:"Prettifiying source files."}),t=B.exec("prettier --write src/**/* bin/* *.{js,json,yaml,html} --no-error-on-unmatched-pattern",{cwd:e}),0!==t.code)throw new Error("Couldnt format files.");if(await this.setInProgress({message:"Creating .d.ts"}),t=B.exec("tsc",{cwd:e}),0!==t.code)throw new Error("Couldnt create .d.ts files.");if(await this.setInProgress({message:"Building main project."}),t=B.exec("npm run build",{cwd:e}),0!==t.code)throw new Error("Couldnt build library project.")}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 i=e[t];await this.deployProject({deploymentProject:i}),!0===i.isDirty&&await i.save()}}else if(this.#i.id){const e=await Q.list({type:"library.deploy",parent_id:this.#i.id});for(let t=0;t<e.length;t++){let i=e[t];await this.deployProject({deploymentProject:i}),!0===i.isDirty&&(i=await Q.update(i,{id:i.id}))}}}async deployProject(e){const{deploymentProject:t}=e,i=t.doc.targets||[];for(let e=0;e<i.length;e++){const o=i[e];await this.deployProjectTarget({deploymentProject:t,deploymentProjectTarget:o})}}async deployProjectTarget(e){const{deploymentProjectTarget:t,deploymentProject:i}=e;if(!0===t.enabled)if(t.name===this.#d.env.ATOM_DEPLOY_LIBRARY_TARGET)await this.deployAsWorkflowLib(e);else if(t.name===this.#d.env.ATOM_DEPLOY_RED_TARGET)await this.deployAsRedFlow(e);else if(t.name===this.#d.env.ATOM_DEPLOY_NPM_TARGET)await this.deployAsNpm(e);else if("pm"===t.name)await this.deployAsPm(e);else if("gitlab"===t.name)await this.deployAsGitlab(e);else{let e;if("nextjs"===t.name&&(e=ae),!e)return;await e({atom:this.#i,target:t,onProgress:this.setInProgress.bind(this),projectDir:this.#t.projectDir,dependencies:this.#n}),t.build={id:this.#r,ts:Date.now()},i.isDirty=!0}}async deployAsWorkflowLib(e){if(await this.setInProgress({message:"Deploying it as workflow lib."}),!0===i.dryRun)return;const{deploymentProject:t,deploymentProjectTarget:i}=e;let o;if(i.deploy.id){if(o=await Q.get({id:i.deploy.id}),!o)return}else{if(o=await Q.create({parent_id:this.#d.env.ATOM_LIBRARIES_ID,doc:{name:i.deploy.name,type:"workflow.lib",dependencies:[],content:void 0,subtype:"library"}}),!o)return;i.deploy.id=o.id,t.isDirty=!0}const a=this.#t.projectDir;o.doc.contents=[{content:L.readFileSync(N.resolve(a,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:L.readFileSync(N.resolve(a,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:L.readFileSync(N.resolve(a,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],o.doc.name=i.deploy.name,o.doc.dependencies=this.#n,o.doc.subtype="workflow",o=await Q.update(o,{id:o.id})}async deployAsRedFlow(e){await this.setInProgress({message:"Deploying it as node-red flow."});const{deploymentProject:t,deploymentProjectTarget:i}=e,o=this.#t.projectDir,a=this.#t.templateDir,n=this.#i;let s;if("simple"===i.deploy.template)s={atom:n,packageDependencies:this.#n,red:{tab:{id:i.deploy.id||U.util.generateId(),label:`LIB/${n.id?n.id:H.hostname()}/${n.name}/${i.deploy.name||i.deploy.template}`},function:{id:U.util.generateId(),name:n.doc.name,initialize:{content:L.readFileSync(N.resolve(o,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:n.doc.bundleName}},inject:{id:U.util.generateId(),...i.deploy.params?.inject,payload:"json"===i.deploy.params?.inject?.payloadType?`'${JSON.stringify(i.deploy.params?.inject?.payload)}'`:i.deploy.params?.inject?.payload},debug:{id:U.util.generateId()}}};else if("cronjob"===i.deploy.template){let e=i.deploy.params?.schedules?J(i.deploy.params?.schedules):void 0;e?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),s={atom:n,packageDependencies:this.#n,red:{tab:{id:i.deploy.id||U.util.generateId(),label:`LIB/${n.id?n.id:H.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:U.util.generateId(),name:n.doc.name,initialize:{content:L.readFileSync(N.resolve(o,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:n.doc.bundleName}},cronjob:{id:U.util.generateId(),schedules:e},debug:{id:U.util.generateId()}}}}else{if("http"!==i.deploy.template)return;s={atom:n,packageDependencies:this.#n,red:{tab:{id:i.deploy.id||U.util.generateId(),label:`LIB/${n.id?n.id:H.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:U.util.generateId(),name:n.doc.name,initialize:{content:L.readFileSync(N.resolve(o,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:n.doc.bundleName}},httpin:{id:U.util.generateId(),method:i.deploy.params.method||"get",url:i.deploy.params.url},httpout:{id:U.util.generateId()},debug:{id:U.util.generateId()}}}}let r=G.compile(L.readFileSync(N.resolve(a,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),this.#o).render(s);if(L.writeFileSync(N.resolve(o,"node-red.yaml"),r),r=M.load(r),!0===i.dryRun)return;t.isDirty=!0,i.build={id:this.#r,ts:Date.now()};const c=i.deploy.url||this.#m.env.RED_URL,l={};if(!1!==i.deploy.auth&&(l.Authorization="Bearer "+this.#s),i.deploy.id)!0===i.actions?.delete?(await K({method:"DELETE",url:`${c}/flow/${i.deploy.id}`,headers:l}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await K({method:"PUT",url:`${c}/flow/${i.deploy.id}`,data:r,headers:l});else{const e=await K({method:"POST",url:`${c}/flow`,data:r,headers:l});i.deploy.id=e.data.id}}async deployAsNpm(e){await this.setInProgress({message:"Deploying it as npm package."});const{deploymentProject:t,deploymentProjectTarget:i}=e,o=this.#t.projectDir,a=N.resolve(o,"package.json"),n=L.readFileSync(a),s=JSON.parse(n);s.name=i.deploy.params.name,s.version=Y.inc(i.deploy.params.version,"patch");const r=i.deploy.params.bin?.name||i.deploy.params.bin;if(!1!==i.deploy.params.bin?.enabled&&r&&"string"==typeof r&&(s.bin={[r]:"bin/index.js",[this.#i.doc.name]:"bin/index.js"}),delete s.scripts,delete s.devDependencies,s.scripts={serve:"npx serve ."},L.writeFileSync(a,JSON.stringify(s,null,"\t")),L.writeFileSync(N.resolve(o,".npmrc"),`//registry.npmjs.org/:_authToken=${this.#p.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==B.exec("npm publish --access public",{cwd:o}).code)throw new Error("Couldnt publish to npm");L.writeFileSync(a,n),t.isDirty=!0,i.deploy.params.version=s.version,i.build={id:this.#r,ts:Date.now()}}async deployAsPm(e){await this.setInProgress({message:"Deploying it as pm package."});const{deploymentProject:t,deploymentProjectTarget:i}=e,o=this.#t.projectDir,a=N.resolve(o,"package.json"),n=L.readFileSync(a),s=JSON.parse(n);s.name=i.deploy.params.name,s.version=Y.inc(i.deploy.params.version,"patch"),delete s.scripts,delete s.devDependencies,L.writeFileSync(a,JSON.stringify(s,null,"\t"));const{file:r,data:c}=await te({name:i.deploy.params.pm?.config||this.#t.pmConfig||"pm",dir:this.#t.projectDir});let l="fnet-upload-files-to-gcs";l+=` --projectId='${c.env.PM_PROJECT_ID}'`,l+=` --bucketName='${c.env.PM_BUCKET_NAME}'`,l+=` --keyFilename='${N.resolve(N.dirname(r),c.env.PM_UPLOADER_KEY_FILE)}'`,l+=` --dir='${o}'`,l+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",l+=` --destDir='${s.name}/${s.version}'`,l+=" --headers.cacheControl='public, max-age=31536000, immutable'",!0===i.dryRun&&(l+=" --dryRun"),await V({command:l}),L.writeFileSync(a,n),!0!==i.dryRun&&(t.isDirty=!0,i.deploy.params.version=s.version,i.build={id:this.#r,ts:Date.now()},await this.registerToPackageManager({target:i,packageJSON:s}))}async deployAsGitlab(e){await this.setInProgress({message:"Deploying it as gitlab project."});const{deploymentProject:t,deploymentProjectTarget:i}=e,o=this.#t.projectDir;let a="fnet-to-gitlab";const n=i.deploy.params.config||"gitlab",s=te({name:n,dir:this.#t.projectDir});if(!s)throw new Error(`Couldnt load config ${n}`);const{data:r}=s.data;a+=` --projectGroupId=${r.projectGroupId}`,a+=` --projectPath='${o}'`,a+=` --projectName='${i.deploy.params.name}'`,a+=` --projectBranch='${i.deploy.params.branch||"main"}'`,a+=` --gitlabHost='${r.gitlabHost}'`,a+=` --gitlabToken='${r.gitlabToken}'`,a+=` --gitlabUsername='${r.gitlabUsername}'`,a+=` --gitlabUserEmail='${r.gitlabUserEmail}'`,!0!==i.dryRun&&(await V({command:a}),t.isDirty=!0,i.build={id:this.#r,ts:Date.now()})}async registerToPackageManager(e){const{target:t,packageJSON:i}=e;let o=await Q.first({name:t.deploy.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:i.version}),await Q.update(o,{id:o.id})):o=await Q.create({parent_id:this.#d.env.ATOM_PACKAGES_ID,doc:{name:t.deploy.params.name,type:"pm",versions:[{v:i.version}]}})}async setInProgress({message:e}){await this._cache_set(this.#c,{status:"IN_PROGRESS",message:e})}async build(){try{this.#y&&(await this.createAtomLibFiles({libs:this.#a}),await this.createEngine(),await this.createRollup(),await this.createBin(),await this.createPackageJSON(),await this.createTsConfig(),await this.createGitIgnore(),await this.createProjectYaml(),await this.createProjectReadme(),await this.createToYargs(),await this.createIndexHtml(),this.#u&&(await this.runBuildScripts(),this.#g&&await this.deploy())),await this._cache_set(this.#c,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#c,{status:"FAILED",message:e.message||e}),e}}};const se=c,re=l;var ce=function({baseDir:e=__dirname}){let t=e;for(;t!==re.parse(t).root;){const e=re.join(t,"node_modules");if(se.existsSync(e))return e;t=re.dirname(t)}return null};const le=process.cwd();console.log(`cwd: ${le}`),e({name:["redis"],dir:le});const de=t,pe=i,{hideBin:me}=o,he=a,ye=n,ue=s,ge=r,fe=ne,be=ce({baseDir:__dirname});async function we(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:de.resolve(be,"./@flownet/template-node-library/default"),projectDir:de.resolve(le,`./.output/${e.id}`),coreDir:de.resolve(be,"./@flownet/template-node-library/core")};{const t=await async function(){const e=de.resolve(le,"node.yaml");if(!he.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=he.readFileSync(e,"utf8"),i=ye.parse(t),o=de.dirname(e),a={libraryAtom:{doc:{...i,"content-type":"javascript",language:"js"},fileName:"index"},projectDir:o,projectFilePath:e,projectFileContent:t,projectFileParsed:i},n=de.resolve(o,"node.devops.yaml");if(he.existsSync(n)){const e=he.readFileSync(n,"utf8"),t=ye.parse(e);a.devops={filePath:n,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{he.writeFileSync(a.devops.filePath,ye.stringify(a.devops.doc))}}}const s=de.resolve(o,"node.readme.md");if(he.existsSync(s)){const e=he.readFileSync(s,"utf8");a.readme={filePath:s,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return a}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:de.resolve(be,"./@flownet/template-node-library/default"),coreDir:de.resolve(be,"./@flownet/template-node-library/core"),projectDir:de.resolve(t.projectDir,"./target"),projectSrcDir:de.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${be}/.bin:${process.env.PATH}`,pe(me(process.argv)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0})),(async e=>{try{const t=de.resolve(be,"@flownet/template-node-library/project"),i=de.resolve(le,e.name);he.existsSync(i)||he.mkdirSync(i),await ge({dir:t,outDir:i,context:e});let o=ue.exec("fnode build",{cwd:i});if(0!==o.code)throw new Error("Failed to build project.");if(ue.which("git")&&(o=ue.exec("git init",{cwd:i}),0!==o.code))throw new Error("Failed to initialize git.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.log("Initialization failed!",e),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 we(e),i=new fe(t);await i.init(),await i.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.log("Building library failed!",e),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await we(e),{projectDir:i}=t,o=e.commands||[],a=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),n=`npm ${o.join(" ")} ${a}`;ue.exec(n,{cwd:i}),process.exit(0)}catch(e){console.error(e),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await we(e),{projectDir:i}=t,o=e.commands||[],a=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),n=`node ${o.join(" ")} ${a}`;ue.exec(n,{cwd:i}),process.exit(0)}catch(e){console.error(e),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await we(e),{projectDir:i}=t,o=e.commands||[],a=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),n=`npm run serve ${o.join(" ")} ${a}`;ue.exec(n,{cwd:i}),process.exit(0)}catch(e){console.error(e),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await we(e),{projectDir:i}=t,o=e.commands||[],a=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),n=`npm run watch ${o.join(" ")} ${a}`;ue.exec(n,{cwd:i}),process.exit(0)}catch(e){console.error(e),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"),i=require("yargs/yargs"),a=require("yargs/helpers"),o=require("fs"),s=require("yaml"),n=require("shelljs"),r=require("@flownet/lib-render-templates-dir"),c=require("node:fs"),l=require("node:path"),d=require("js-yaml"),p=require("nunjucks"),m=require("lodash.clonedeep"),h=require("axios"),u=require("@node-red/util"),g=require("semver"),y=require("redis"),f=require("@flownet/lib-is-redis-online"),b=require("node:os"),w=require("lodash.merge"),j=require("nanoid"),_=require("@flownet/lib-atom-api-js"),v=require("qs"),D=require("@flownet/lib-execute-command-with-ipc-file"),k=require("@flownet/lib-parse-node-url"),x=require("@flownet/lib-parse-imports-js"),P=require("@flownet/lib-pick-npm-versions"),I=require("@flownet/lib-to-nextjs"),S=require("@flownet/lib-list-npm-versions");const $=y,E=f;const{Api:A}=_,C=h.default,F=v;const T=I,O=m,R=w,q=g,L=l;const N=c,M=l,B=d,G=n,J=p,K=m,U=h,Y=u,z=g,H=async()=>{if(!await E({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=$.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e},W=b,X=w,{nanoid:Z}=j,Q=class{init({config:e,accessToken:t}){return new Promise(((i,a)=>{if(A.set_api_url(e.data.url),t)return A.set_req_token(t),void i(t);C({method:"POST",url:`${e.data.issuer}/protocol/openid-connect/token`,data:F.stringify(e.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((e=>{A.set_req_token(e.data.access_token),i(e.data.access_token)})).catch((e=>{A.set_req_token(),a(e)}))}))}},{Atom:V}=_,ee=D,te=k,ie=e,ae=x,oe=P,se=async({atom:e,target:t,onProgress:i,projectDir:a,dependencies:o})=>{i&&await i({message:"Deploying it as nextjs package."});t.params=R({name:"nextjs-app",version:"0.1.0"},t.params);const s=q.inc(t.params.version,"patch");t.params.version=s;const n=O(t);n.params.dependencies=O(o);const r={atom:e,target:n.params,projectDir:a,renderDir:L.resolve(a,"nextjs")};return{deployer:await T(r)}},ne=r,re=S;var ce=class{#e;#t;#i;#a;#o;#s;#n;#r;#c;#l;#d;#p;#m;#h;#u;#g;#y;#f;constructor(e){this.#e=new Q,this.#t=e,this.#s=[],this.#n=[],this._expire_ttl=3600,this._expire_ttl_short=300}async _cache_set(e,t,i){this._redis_client&&await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await H(),this.#c=this.#t.buildId||Z(24),this.#u=this.#t.mode,this.#g=["all","deploy","build","file"].includes(this.#u),this.#y=["all","deploy","build"].includes(this.#u),this.#f=["all","deploy"].includes(this.#u),this.#d=this.#t.protocol,this.#l="BUILD:"+this.#c,this.#p=await(ie({name:this.#t.atomConfig||"atom",dir:this.#t.projectDir})?.data),this.#m=await(ie({name:this.#t.npmConfig||"npm",dir:this.#t.projectDir})?.data),this.#h=await(ie({name:this.#t.redConfig||"red",dir:this.#t.projectDir})?.data);try{await this.setInProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),await this.initFeatures(),await this.initDependencies(),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.#p}))}async initLibrary(){const e=this.#t.id;this.#i=this.#t.project?.libraryAtom||await V.get({id:e});let t=this.#i.doc.bundleName;t=t||(this.#i.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#i.doc.bundleName=t,this.#i.type=this.#i.type||"workflow.lib"}async initFeatures(){this.#i.doc.features=this.#i.doc.features||{};const e=this.#i.doc.features;e.form_enabled=!0===this.#i.doc.form||!0===this.#i.doc.form?.enabled||!0===e.form||!0===e.form?.enabled,e.browser_autorun=!0===e.browser?.autorun,e.multiple_enabled=e.multiple_enabled||!0===e.multiple||!0===e.multiple?.enabled,e.index_html_enabled=!0===this.#i.doc.features.form_enabled,e.bin_file_enabled=!1===this.#i.doc.features.form_enabled;const t={cjs:{format:"cjs",context:e.form_enabled?"window":"global",babel:!1,browser:!1,copy:!0,replace:!0},cjsx:{format:"cjs",context:e.form_enabled?"window":"global",babel:!1,browser:!0,replace:!0,enabled:!1},esm:{format:"esm",context:e.form_enabled?"window":"global",babel:!1,browser:!1,replace:!0,browsersync:!0},esmx:{format:"esm",browser:!0,babel:!0,context:e.form_enabled?"window":"global",replace:!0,browsersync:!1,enabled:!1},iife:{format:"iife",context:e.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1}},i={};!0===e.webos&&(t.webos={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,babel_options:{targets:{chrome:"79"}}}),!0===e.index_html_enabled&&(t.app={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:"./dist/app/esmx"},i.targets=i.targets||[],i.targets.push({src:"./src/app/index.html",dest:"./dist/app/esmx"})),!0===e.bin_file_enabled&&(t.cli={format:"cjs",context:"global",babel:!1,browser:!0,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:"./dist/cli/cjsx",banner:"#!/usr/bin/env node",terser:!0}),e.babel_options=e.babel_options||e.babel?.options||{targets:{browsers:"last 9 versions, not dead",node:"18"}},e.browsersync_options=X({server:".",startPath:"/dist/app/esmx/index.html",files:["./dist/**/*"]},e.browsersync_options||e.browsersync?.options||{}),e.replace_options=X({},e.replace_options||e.replace?.options||{}),e.terser_options=X({},e.terser_options||e.terser?.options||{}),e.css_options=X({},e.css_options||e.css?.options||{}),e.wasm_options=X({},e.wasm_options||e.wasm?.options||{}),e.copy_options=X(i,e.copy_options||e.copy?.options||{}),e.json_options=X({},e.json_options||e.json?.options||{}),e.image_options=X({},e.image_options||e.image?.options||{}),e.rollup_output=X(t,e.rollup_output||e.rollup?.output||e.rollup||{});const a=Object.keys(t);for(const i of a){const a=t[i];a&&(a.babel_options=a.babel_options||e.babel_options,a.browsersync_options=X(e.browsersync_options,a.browsersync_options),a.replace_options=X(e.replace_options,a.replace_options),a.terser_options=X(e.terser_options,a.terser_options),a.css_options=X(e.css_options,a.css_options),a.wasm_options=X(e.wasm_options,a.wasm_options),a.copy_options=X(e.copy_options,a.copy_options),a.json_options=X(e.json_options,a.json_options),a.image_options=X(e.image_options,a.image_options),e.form_enabled&&(a.babel=!0))}e.babel_enabled=a.some((t=>!0===e.rollup_output[t].babel)),e.browser_enabled=a.some((t=>!0===e.rollup_output[t].babel)),e.browsersync_enabled=a.some((t=>!0===e.rollup_output[t].browsersync)),e.browsersync_enabled=e.browsersync_enabled&&(e.form_enabled||!0===e.browser_autorun),e.wasm_enabled=!0===e.wasm||e.wasm&&!1!==e.wasm?.enabled,e.css_enabled=!0===e.css||e.css&&!1!==e.css?.enabled,e.json_enabled=!0===e.json||e.json&&!1!==e.json?.enabled,e.terser_enabled=!0===e.terser||e.terser&&!1!==e.terser?.enabled,e.copy_enabled=e.form_enabled||e.copy_enabled||e.copy&&!1!==e.copy?.enabled,e.image_enabled=!0===e.image||e.image&&!1!==e.image?.enabled,e.bin_name=e.bin_name||e.bin?.name||e.bin,e.bin_enabled=e.bin_name&&("string"==typeof e.bin_name)(e.bin_enabled||!1!==e.bin?.enabled),e.dependency_auto_enabled=!1!==e.dependency_auto&&!1!==e.dependency_auto?.enabled,e.npm_install_flags=e.npm_install_flags||"",e.react_version=e.react_version||e.react?.version||18}async initDependencies(){if(this.#i.doc.features.form_enabled&&this.#i.doc.features.dependency_auto_enabled){let e="^18.2";e=`^${(await re({name:"react",groupBy:{major:!0}})).find((e=>e[0]===this.#i.doc.features.react_version.toString()))[0]}`,this.#s.push({package:"react",version:e}),this.#s.push({package:"react-dom",version:e})}this.#s.push({package:"chalk",version:"^4"}),this.#n.push({package:"@babel/core",version:"^7.23"}),this.#n.push({package:"@rollup/plugin-commonjs",version:"^25.0"}),this.#n.push({package:"@rollup/plugin-node-resolve",version:"^15.1"}),this.#n.push({package:"@rollup/plugin-replace",version:"^5.0"}),this.#n.push({package:"rollup",version:"^3.26"}),this.#n.push({package:"rollup-plugin-delete",version:"^2.0"}),this.#n.push({package:"rollup-plugin-dts",version:"^6.0"}),this.#n.push({package:"rollup-plugin-peer-deps-external",version:"^2.2"}),this.#i.doc.features.babel_enabled&&(this.#n.push({package:"@rollup/plugin-babel",version:"^6.0"}),this.#n.push({package:"@babel/preset-env",version:"7.22"}),this.#n.push({package:"@babel/preset-react",version:"7.22"})),this.#i.doc.features.browsersync_enabled&&this.#n.push({package:"rollup-plugin-browsersync",version:"^1.3"}),this.#i.doc.features.json_enabled&&this.#n.push({package:"@rollup/plugin-json",version:"^6.0"}),this.#i.doc.features.terser_enabled&&this.#n.push({package:"@rollup/plugin-terser",version:"^0.4"}),this.#i.doc.features.wasm_enabled&&this.#n.push({package:"@rollup/plugin-wasm",version:"^6.1"}),this.#i.doc.features.image_enabled&&this.#n.push({package:"@rollup/plugin-image",version:"^3.0"}),this.#i.doc.features.css_enabled&&(this.#n.push({package:"rollup-plugin-postcss",version:"4.0"}),this.#n.push({package:"sass",version:"^1.66"})),this.#i.doc.features.copy_enabled&&this.#n.push({package:"rollup-plugin-copy",version:"^3.5"})}async initLibraryDir(){const e=this.#t.projectDir;let t;const i=["node_modules"];if(N.existsSync(e)&&N.readdirSync(e).forEach((a=>{i.includes(a)||(t=G.rm("-rf",M.join(e,a)))})),t=G.exec(`mkdir -p ${e}`),0!==t.code)throw new Error("Couldnt create workflow dir.");if(t=G.exec(`mkdir ${e}/src`),0!==t.code)throw new Error("Couldnt create library/src dir.");if(t=G.exec(`mkdir ${e}/src/default`),0!==t.code)throw new Error("Couldnt create library/src/default dir.");if(t=G.exec(`mkdir -p ${e}/src/libs`),0!==t.code)throw new Error("Couldnt create library/src/libs dir.")}async initNunjucks(){const e=this.#t.templateDir;this.#a=J.configure(e,{watch:!1,dev:!0})}async initLibs(){const e=[{name:this.#i.doc.name,type:"atom",parent_id:this.#i.parent_id}];this.#o=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#s})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const i=e.filter((e=>"atom"===e.type));for(let e=0;e<i.length;e++){const a=i[e],o=await this.findAtomLibrary({url:a.name});a.atom=o;const s=o.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const i=t.find((t=>t.package===e.package));i?"string"==typeof e.path?(i.path||[]).some((t=>t===e.path))||(i.path=i.path||[],i.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(i.path||[]).some((t=>t===e))||(i.path=i.path||[],i.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=te({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#d),"ac:"===t.protocol){const i=t.pathname.split("/");if(1===i.length)return await V.first({where:{name:e,parent_id:this.#p.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===i.length){const e=await V.first({where:{name:i[0],parent_id:this.#p.env.ATOM_LIBRARIES_ID,type:"folder"}});return await V.first({where:{name:i[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===t.protocol){const e=this.#i;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=M.resolve(this.#t.projectSrcDir,"index.js"),i=await ae({file:t,recursive:!0}),a=e.doc.dependencies,o=!0===this.#i.doc.features.all_parsed_imports?i.all:i.required;for await(const e of o){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;const t=await oe({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.#i.typesDir="./types";const t=e.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const i=t[e].atom,a=this.#t.projectDir;if("local:"===i.protocol){const e=M.resolve(this.#t.projectSrcDir,`${i.fileName||i.name}.js`),t=M.relative(`${this.#t.projectDir}/src/default/`,e);if(!N.existsSync(e)){N.mkdirSync(M.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",N.writeFileSync(e,t,"utf8")}i.relativePath=t,this.#i.typesDir="./types/target/src"}else{const e=`${a}/src/libs/${i.id}.js`,t=i.doc.contents?.find((e=>"esm"===e.format))||i.doc;N.writeFileSync(e,t.content,"utf8")}}}async createEngine(){await this.setInProgress({message:"Creating engine file."});const e={libs:this.#o.filter((e=>"atom"===e.type)),libraryAtom:this.#i,atom:this.#i},t=this.#t.templateDir,i=J.compile(N.readFileSync(M.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#a).render(e),a=this.#t.projectDir,o=M.resolve(a,"src/default/index.js");N.writeFileSync(o,i,"utf8")}async createRollup(){await this.setInProgress({message:"Creating rollup file."});const e={libraryAtom:this.#i,atom:this.#i,packageDependencies:this.#s},t=this.#t.templateDir,i=J.compile(N.readFileSync(M.resolve(t,"rollup.config.js.njk"),"utf8"),this.#a).render(e),a=this.#t.projectDir,o=M.resolve(a,"rollup.config.js");N.writeFileSync(o,i,"utf8")}async createPackageJSON(){await this.setInProgress({message:"Creating package.json."});const e=this.#s.find((e=>"react"===e.package)),t=this.#s.find((e=>"react-dom"===e.package));e&&!t?this.#s.push({package:"react-dom",version:e.version}):e&&t&&(t.version=e.version),e&&this.#i.doc.features.react_version>=17&&(this.#s.find((e=>"@emotion/react"===e.package))||this.#s.push({package:"@emotion/react",version:"^11"}),this.#s.find((e=>"@emotion/styled"===e.package))||this.#s.push({package:"@emotion/styled",version:"^11"}));const i=[];!0===this.#i.doc.features.index_html_enabled&&i.push(M.resolve(this.#t.projectDir,"src/app/index.js")),!0===this.#i.doc.features.bin_file_enabled&&i.push(M.resolve(this.#t.projectDir,"src/cli/index.js"));for await(const e of i){const t=e;if(!N.existsSync(t))throw new Error(`App file not found: ${t}`);const i=await ae({file:t,recursive:!0}),a=!0===this.#i.doc.features.all_parsed_imports?i.all:i.required;for await(const e of a){if("npm"!==e.type)continue;if(this.#s.find((t=>t.package===e.package)))continue;if(this.#n.find((t=>t.package===e.package)))continue;const t=(await re({name:e.package,groupBy:{minor:!0}}))[0][0];this.#n.push({package:e.package,subpath:e.subpath,version:`^${t}`,type:"npm"})}}const a={libraryAtom:this.#i,atom:this.#i,packageDependencies:this.#s,packageDevDependencies:this.#n},o=this.#t.templateDir,s=J.compile(N.readFileSync(M.resolve(o,"package.json.njk"),"utf8"),this.#a).render(a),n=this.#t.projectDir,r=M.resolve(n,"package.json");N.writeFileSync(r,s,"utf8")}async createBin(){if(!0!==this.#i.doc.features.bin_file_enabled)return;await this.setInProgress({message:"Creating bin."});const e=this.#t.projectDir;if(0!==G.exec(`mkdir ${e}/src/cli`).code)throw new Error("Couldnt create src/cli dir.");const t={libraryAtom:this.#i,atom:this.#i,packageDependencies:this.#s},i=this.#t.templateDir;let a=J.compile(N.readFileSync(M.resolve(i,"src/cli/index.js.njk"),"utf8"),this.#a).render(t),o=M.resolve(e,"src/cli/index.js");N.writeFileSync(o,a,"utf8")}async createIndexHtml(){if(!this.#i.doc.features.index_html_enabled)return;await this.setInProgress({message:"Creating index.html."});const e={libraryAtom:this.#i,atom:this.#i,packageDependencies:this.#s,ts:Date.now()},t=this.#t.templateDir,i=M.resolve(this.#t.projectDir,"src/app");N.existsSync(i)||N.mkdirSync(i,{recursive:!0}),await ne({dir:M.resolve(t,"src/app"),outDir:i,context:e})}async createTsConfig(){await this.setInProgress({message:"Creating tsconfig.json."});const e={libraryAtom:this.#i,atom:this.#i,packageDependencies:this.#s},t=this.#t.templateDir,i=J.compile(N.readFileSync(M.resolve(t,"tsconfig.json.njk"),"utf8"),this.#a).render(e),a=this.#t.projectDir,o=M.resolve(a,"tsconfig.json");N.writeFileSync(o,i,"utf8")}async createGitIgnore(){await this.setInProgress({message:"Creating .gitignore"});const e={libraryAtom:this.#i,atom:this.#i,packageDependencies:this.#s},t=this.#t.templateDir,i=J.compile(N.readFileSync(M.resolve(t,".gitignore.njk"),"utf8"),this.#a).render(e),a=this.#t.projectDir,o=M.resolve(a,".gitignore");N.writeFileSync(o,i,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setInProgress({message:t});const{content:i,...a}=this.#i.doc,o={content:B.dump(a)},s=this.#t.templateDir,n=J.compile(N.readFileSync(M.resolve(s,`${e}.njk`),"utf8"),this.#a).render(o),r=this.#t.projectDir,c=M.resolve(r,`${e}`);N.writeFileSync(c,n,"utf8")}async createProjectReadme(){const e="readme.md",t=`Creating ${e}`;if(await this.setInProgress({message:t}),this.#t.project?.readme){const t={content:this.#t.project.readme.doc.content},i=this.#t.templateDir,a=J.compile(N.readFileSync(M.resolve(i,`${e}.njk`),"utf8"),this.#a).render(t),o=this.#t.projectDir,s=M.resolve(o,`${e}`);N.writeFileSync(s,a,"utf8")}else if(this.#i.id){const t=await V.first({type:"wiki",parent_id:this.#i.id});if(!t||"markdown"!==t.doc?.["content-type"])return;const{content:i,...a}=t.doc,o={content:i},s=this.#t.templateDir,n=J.compile(N.readFileSync(M.resolve(s,`${e}.njk`),"utf8"),this.#a).render(o),r=this.#t.projectDir,c=M.resolve(r,`${e}`);N.writeFileSync(c,n,"utf8")}}async createToYargs(){if(!0===this.#i.doc.features.form_enabled)return;await this.setInProgress({message:"Creating yargs."});const e={},t=this.#i.doc.inputs||[],i=[];t.forEach((t=>{if(!1===t.cli||!t.name)return;t.import&&i.push(t);const a={};t.type&&(a.type=t.type),t.default&&(a.default=t.default),t.choices&&(a.choices=t.choices),(t.describe||t.description)&&(a.describe=t.describe||t.description),t.alias&&(a.alias=t.alias),!0===t.required&&(a.required=!0),!0===t.hidden&&(a.hidden=!0),!0===t.array&&(a.array=!0),!0===t.normalize&&(a.normalize=!0),t.nargs&&(a.nargs=t.nargs),e[t.name]=a}));const a={options:e,imports:i,atom:this.#i},o=this.#t.templateDir,s=J.compile(N.readFileSync(M.resolve(o,"src/default/to.yargs.js.njk"),"utf8"),this.#a).render(a),n=this.#t.projectDir,r=M.resolve(n,"src/default/to.yargs.js");N.writeFileSync(r,s,"utf8")}async runBuildScripts(){const e=this.#t.projectDir;await this.setInProgress({message:"Installing npm packages."});let t=G.exec(`npm install ${this.#i.doc.features.npm_install_flags}`,{cwd:e});if(0!==t.code)throw new Error("Couldnt install npm packages.");if(await this.setInProgress({message:"Prettifiying source files."}),t=G.exec("prettier --write src/**/* bin/* *.{js,json,yaml,html} --no-error-on-unmatched-pattern",{cwd:e}),0!==t.code)throw new Error("Couldnt format files.");if(await this.setInProgress({message:"Creating .d.ts"}),t=G.exec("tsc",{cwd:e}),0!==t.code)throw new Error("Couldnt create .d.ts files.");if(await this.setInProgress({message:"Building main project."}),t=G.exec("npm run build",{cwd:e}),0!==t.code)throw new Error("Couldnt build library project.")}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 i=e[t];await this.deployProject({deploymentProject:i}),!0===i.isDirty&&await i.save()}}else if(this.#i.id){const e=await V.list({type:"library.deploy",parent_id:this.#i.id});for(let t=0;t<e.length;t++){let i=e[t];await this.deployProject({deploymentProject:i}),!0===i.isDirty&&(i=await V.update(i,{id:i.id}))}}}async deployProject(e){const{deploymentProject:t}=e,i=t.doc.targets||[];for(let e=0;e<i.length;e++){const a=i[e];await this.deployProjectTarget({deploymentProject:t,deploymentProjectTarget:a})}}async deployProjectTarget(e){const{deploymentProjectTarget:t,deploymentProject:i}=e;if(!0===t.enabled)if(t.name===this.#p.env.ATOM_DEPLOY_LIBRARY_TARGET)await this.deployAsWorkflowLib(e);else if(t.name===this.#p.env.ATOM_DEPLOY_RED_TARGET)await this.deployAsRedFlow(e);else if(t.name===this.#p.env.ATOM_DEPLOY_NPM_TARGET)await this.deployAsNpm(e);else if("pm"===t.name)await this.deployAsPm(e);else if("gitlab"===t.name)await this.deployAsGitlab(e);else{let e;if("nextjs"===t.name&&(e=se),!e)return;await e({atom:this.#i,target:t,onProgress:this.setInProgress.bind(this),projectDir:this.#t.projectDir,dependencies:this.#s}),t.build={id:this.#c,ts:Date.now()},i.isDirty=!0}}async deployAsWorkflowLib(e){if(await this.setInProgress({message:"Deploying it as workflow lib."}),!0===i.dryRun)return;const{deploymentProject:t,deploymentProjectTarget:i}=e;let a;if(i.deploy.id){if(a=await V.get({id:i.deploy.id}),!a)return}else{if(a=await V.create({parent_id:this.#p.env.ATOM_LIBRARIES_ID,doc:{name:i.deploy.name,type:"workflow.lib",dependencies:[],content:void 0,subtype:"library"}}),!a)return;i.deploy.id=a.id,t.isDirty=!0}const o=this.#t.projectDir;a.doc.contents=[{content:N.readFileSync(M.resolve(o,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:N.readFileSync(M.resolve(o,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:N.readFileSync(M.resolve(o,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],a.doc.name=i.deploy.name,a.doc.dependencies=this.#s,a.doc.subtype="workflow",a=await V.update(a,{id:a.id})}async deployAsRedFlow(e){await this.setInProgress({message:"Deploying it as node-red flow."});const{deploymentProject:t,deploymentProjectTarget:i}=e,a=this.#t.projectDir,o=this.#t.templateDir,s=this.#i;let n;if("simple"===i.deploy.template)n={atom:s,packageDependencies:this.#s,red:{tab:{id:i.deploy.id||Y.util.generateId(),label:`LIB/${s.id?s.id:W.hostname()}/${s.name}/${i.deploy.name||i.deploy.template}`},function:{id:Y.util.generateId(),name:s.doc.name,initialize:{content:N.readFileSync(M.resolve(a,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:s.doc.bundleName}},inject:{id:Y.util.generateId(),...i.deploy.params?.inject,payload:"json"===i.deploy.params?.inject?.payloadType?`'${JSON.stringify(i.deploy.params?.inject?.payload)}'`:i.deploy.params?.inject?.payload},debug:{id:Y.util.generateId()}}};else if("cronjob"===i.deploy.template){let e=i.deploy.params?.schedules?K(i.deploy.params?.schedules):void 0;e?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),n={atom:s,packageDependencies:this.#s,red:{tab:{id:i.deploy.id||Y.util.generateId(),label:`LIB/${s.id?s.id:W.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Y.util.generateId(),name:s.doc.name,initialize:{content:N.readFileSync(M.resolve(a,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:s.doc.bundleName}},cronjob:{id:Y.util.generateId(),schedules:e},debug:{id:Y.util.generateId()}}}}else{if("http"!==i.deploy.template)return;n={atom:s,packageDependencies:this.#s,red:{tab:{id:i.deploy.id||Y.util.generateId(),label:`LIB/${s.id?s.id:W.hostname()}/${i.deploy.name||i.deploy.template}`},function:{id:Y.util.generateId(),name:s.doc.name,initialize:{content:N.readFileSync(M.resolve(a,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:s.doc.bundleName}},httpin:{id:Y.util.generateId(),method:i.deploy.params.method||"get",url:i.deploy.params.url},httpout:{id:Y.util.generateId()},debug:{id:Y.util.generateId()}}}}let r=J.compile(N.readFileSync(M.resolve(o,`deploy/node-red/${i.deploy.template}.yaml.njk`),"utf8"),this.#a).render(n);if(N.writeFileSync(M.resolve(a,"node-red.yaml"),r),r=B.load(r),!0===i.dryRun)return;t.isDirty=!0,i.build={id:this.#c,ts:Date.now()};const c=i.deploy.url||this.#h.env.RED_URL,l={};if(!1!==i.deploy.auth&&(l.Authorization="Bearer "+this.#r),i.deploy.id)!0===i.actions?.delete?(await U({method:"DELETE",url:`${c}/flow/${i.deploy.id}`,headers:l}),delete i.actions.delete,delete i.deploy.id,i.enabled=!1):await U({method:"PUT",url:`${c}/flow/${i.deploy.id}`,data:r,headers:l});else{const e=await U({method:"POST",url:`${c}/flow`,data:r,headers:l});i.deploy.id=e.data.id}}async deployAsNpm(e){await this.setInProgress({message:"Deploying it as npm package."});const{deploymentProject:t,deploymentProjectTarget:i}=e,a=this.#t.projectDir,o=M.resolve(a,"package.json"),s=N.readFileSync(o),n=JSON.parse(s);n.name=i.deploy.params.name,n.version=z.inc(i.deploy.params.version,"patch");const r=i.deploy.params.bin?.name||i.deploy.params.bin;if(!1!==i.deploy.params.bin?.enabled&&r&&"string"==typeof r&&(n.bin={[r]:"dist/cli/cjsx/index.js",[this.#i.doc.name]:"dist/cli/cjsx/index.js"}),delete n.scripts,delete n.devDependencies,n.scripts={serve:"npx serve ."},N.writeFileSync(o,JSON.stringify(n,null,"\t")),N.writeFileSync(M.resolve(a,".npmrc"),`//registry.npmjs.org/:_authToken=${this.#m.env.NPM_TOKEN}`),!0===i.dryRun)return;if(0!==G.exec("npm publish --access public",{cwd:a}).code)throw new Error("Couldnt publish to npm");N.writeFileSync(o,s),t.isDirty=!0,i.deploy.params.version=n.version,i.build={id:this.#c,ts:Date.now()}}async deployAsPm(e){await this.setInProgress({message:"Deploying it as pm package."});const{deploymentProject:t,deploymentProjectTarget:i}=e,a=this.#t.projectDir,o=M.resolve(a,"package.json"),s=N.readFileSync(o),n=JSON.parse(s);n.name=i.deploy.params.name,n.version=z.inc(i.deploy.params.version,"patch"),delete n.scripts,delete n.devDependencies,N.writeFileSync(o,JSON.stringify(n,null,"\t"));const{file:r,data:c}=await ie({name:i.deploy.params.pm?.config||this.#t.pmConfig||"pm",dir:this.#t.projectDir});let l="fnet-upload-files-to-gcs";l+=` --projectId='${c.env.PM_PROJECT_ID}'`,l+=` --bucketName='${c.env.PM_BUCKET_NAME}'`,l+=` --keyFilename='${M.resolve(M.dirname(r),c.env.PM_UPLOADER_KEY_FILE)}'`,l+=` --dir='${a}'`,l+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",l+=` --destDir='${n.name}/${n.version}'`,l+=" --headers.cacheControl='public, max-age=31536000, immutable'",!0===i.dryRun&&(l+=" --dryRun"),await ee({command:l}),N.writeFileSync(o,s),!0!==i.dryRun&&(t.isDirty=!0,i.deploy.params.version=n.version,i.build={id:this.#c,ts:Date.now()},await this.registerToPackageManager({target:i,packageJSON:n}))}async deployAsGitlab(e){await this.setInProgress({message:"Deploying it as gitlab project."});const{deploymentProject:t,deploymentProjectTarget:i}=e,a=this.#t.projectDir;let o="fnet-to-gitlab";const s=i.deploy.params.config||"gitlab",n=ie({name:s,dir:this.#t.projectDir});if(!n)throw new Error(`Couldnt load config ${s}`);const{data:r}=n.data;o+=` --projectGroupId=${r.projectGroupId}`,o+=` --projectPath='${a}'`,o+=` --projectName='${i.deploy.params.name}'`,o+=` --projectBranch='${i.deploy.params.branch||"main"}'`,o+=` --gitlabHost='${r.gitlabHost}'`,o+=` --gitlabToken='${r.gitlabToken}'`,o+=` --gitlabUsername='${r.gitlabUsername}'`,o+=` --gitlabUserEmail='${r.gitlabUserEmail}'`,!0!==i.dryRun&&(await ee({command:o}),t.isDirty=!0,i.build={id:this.#c,ts:Date.now()})}async registerToPackageManager(e){const{target:t,packageJSON:i}=e;let a=await V.first({name:t.deploy.params.name,parent_id:this.#p.env.ATOM_PACKAGES_ID});a?(a.doc.versions.splice(0,0,{v:i.version}),await V.update(a,{id:a.id})):a=await V.create({parent_id:this.#p.env.ATOM_PACKAGES_ID,doc:{name:t.deploy.params.name,type:"pm",versions:[{v:i.version}]}})}async setInProgress({message:e}){await this._cache_set(this.#l,{status:"IN_PROGRESS",message:e})}async build(){try{this.#g&&(await this.createAtomLibFiles({libs:this.#o}),await this.createEngine(),await this.createTsConfig(),await this.createGitIgnore(),await this.createProjectYaml(),await this.createProjectReadme(),await this.createToYargs(),await this.createBin(),await this.createIndexHtml(),await this.createRollup(),await this.createPackageJSON(),this.#y&&(await this.runBuildScripts(),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 le=c,de=l;var pe=function({baseDir:e=__dirname}){let t=e;for(;t!==de.parse(t).root;){const e=de.join(t,"node_modules");if(le.existsSync(e))return e;t=de.dirname(t)}return null};const me=process.cwd();console.log(`cwd: ${me}`),e({name:["redis"],dir:me});const he=t,ue=i,{hideBin:ge}=a,ye=o,fe=s,be=n,we=r,je=ce,_e=pe({baseDir:__dirname});async function ve(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:he.resolve(_e,"./@flownet/template-node-library/default"),projectDir:he.resolve(me,`./.output/${e.id}`),coreDir:he.resolve(_e,"./@flownet/template-node-library/core")};{const t=await async function(){const e=he.resolve(me,"node.yaml");if(!ye.existsSync(e))throw new Error("node.yaml file not found in current directory.");const t=ye.readFileSync(e,"utf8"),i=fe.parse(t),a=he.dirname(e),o={libraryAtom:{doc:{...i,"content-type":"javascript",language:"js"},fileName:"index"},projectDir:a,projectFilePath:e,projectFileContent:t,projectFileParsed:i},s=he.resolve(a,"node.devops.yaml");if(ye.existsSync(s)){const e=ye.readFileSync(s,"utf8"),t=fe.parse(e);o.devops={filePath:s,fileContent:e,doc:{...t},type:"library.deploy",save:async()=>{ye.writeFileSync(o.devops.filePath,fe.stringify(o.devops.doc))}}}const n=he.resolve(a,"node.readme.md");if(ye.existsSync(n)){const e=ye.readFileSync(n,"utf8");o.readme={filePath:n,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return o}();return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:he.resolve(_e,"./@flownet/template-node-library/default"),coreDir:he.resolve(_e,"./@flownet/template-node-library/core"),projectDir:he.resolve(t.projectDir,"./target"),projectSrcDir:he.resolve(t.projectDir,"./src"),project:t}}}process.env.PATH=`${_e}/.bin:${process.env.PATH}`,ue(ge(process.argv)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0})),(async e=>{try{const t=he.resolve(_e,"@flownet/template-node-library/project"),i=he.resolve(me,e.name);ye.existsSync(i)||ye.mkdirSync(i),await we({dir:t,outDir:i,context:e});let a=be.exec("fnode build",{cwd:i});if(0!==a.code)throw new Error("Failed to build project.");if(be.which("git")&&(a=be.exec("git init",{cwd:i}),0!==a.code))throw new Error("Failed to initialize git.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.log("Initialization failed!",e),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 ve(e),i=new je(t);await i.init(),await i.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.log("Building library failed!",e),process.exit(1)}})).command("npm [commands..]","npm - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ve(e),{projectDir:i}=t,a=e.commands||[],o=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),s=`npm ${a.join(" ")} ${o}`;be.exec(s,{cwd:i}),process.exit(0)}catch(e){console.error(e),process.exit(1)}})).command("node [commands..]","node - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ve(e),{projectDir:i}=t,a=e.commands||[],o=Object.keys(e).filter((t=>"_"!==t&&"$0"!==t&&"commands"!==t&&"id"!==t&&"object"!=typeof e[t])).map((t=>`--${t}=${e[t]}`)).join(" "),s=`node ${a.join(" ")} ${o}`;be.exec(s,{cwd:i}),process.exit(0)}catch(e){console.error(e),process.exit(1)}})).command("serve [commands..]","npm run serve - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ve(e),{projectDir:i}=t,a=e.commands||[],o=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 ${a.join(" ")} ${o}`;be.exec(s,{cwd:i}),process.exit(0)}catch(e){console.error(e),process.exit(1)}})).command("watch [commands..]","npm run watch - bridge",(e=>e.option("id",{type:"string"})),(async e=>{try{const t=await ve(e),{projectDir:i}=t,a=e.commands||[],o=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 ${a.join(" ")} ${o}`;be.exec(s,{cwd:i}),process.exit(0)}catch(e){console.error(e),process.exit(1)}})).demandCommand(1,"You need at least one command before moving on").help().argv,module.exports={};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib-cli.js","sources":["../../src/redisClient.js","../../src/builder/auth.js","../../src/builder/deployer/nextjs.js","../../src/builder/lib-builder.js","../../src/builder/find-node-modules.js","../../src/builder/lib-cli.js"],"sourcesContent":["const redis = require('redis');\nconst fnetIsRedisOnline = require('@flownet/lib-is-redis-online');\n\nmodule.exports = async () => {\n const isOnline = await fnetIsRedisOnline({ host: process.env.REDIS_HOST, port: process.env.REDIS_PORT });\n if (!isOnline) return;\n\n const redisClient = redis.createClient({\n socket: { host: process.env.REDIS_HOST, port: process.env.REDIS_PORT }\n });\n await redisClient.connect();\n\n return redisClient;\n}","const { Api } = require(\"@flownet/lib-atom-api-js\");\nconst axios = require('axios').default;\nconst qs = require('qs');\n\nmodule.exports = class {\n init({ config, accessToken }) {\n return new Promise((resolve, reject) => {\n\n Api.set_api_url(config.data.url);\n\n if (accessToken) {\n Api.set_req_token(accessToken);\n resolve(accessToken);\n return;\n }\n\n axios({\n method: \"POST\",\n url: `${config.data.issuer}/protocol/openid-connect/token`,\n data: qs.stringify(config.data.grant.params),\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n },\n }).then(response => {\n Api.set_req_token(response.data.access_token);\n resolve(response.data.access_token);\n }).catch(error => {\n Api.set_req_token();\n reject(error);\n });\n });\n }\n}","const fnetToNextJs = require('@flownet/lib-to-nextjs');\nconst cloneDeep = require(\"lodash.clonedeep\");\nconst merge = require('lodash.merge');\nconst semver = require('semver');\nconst path = require('node:path');\n\nmodule.exports = async ({\n atom,\n target,\n onProgress,\n projectDir,\n dependencies\n}) => {\n\n if (onProgress) await onProgress({ message: \"Deploying it as nextjs package.\" });\n\n\n const deployerTargetDefault = {\n name: \"nextjs-app\",\n version: \"0.1.0\",\n }\n\n target.params = merge(deployerTargetDefault, target.params);\n\n const nextVersion = semver.inc(target.params.version, \"patch\");\n target.params.version = nextVersion;\n\n const deployerTarget = cloneDeep(target);\n\n deployerTarget.params.dependencies = cloneDeep(dependencies);\n\n const args = {\n atom,\n target: deployerTarget.params,\n projectDir,\n renderDir: path.resolve(projectDir, 'nextjs')\n }\n\n const result = await fnetToNextJs(args);\n\n return {\n deployer: result,\n };\n}","const fs = require('node:fs');\nconst path = require('node:path');\n\nconst yaml = require(\"js-yaml\");\nconst shell = require('shelljs');\nconst nunjucks = require(\"nunjucks\");\nconst cloneDeep = require('lodash.clonedeep');\nconst axios = require('axios');\nconst Red = require('@node-red/util');\nconst semver = require('semver');\nconst createRedisClient = require('../redisClient');\nconst os = require('node:os');\nconst merge = require('lodash.merge');\nconst { nanoid } = require('nanoid');\n\nconst Auth = require('./auth');\n\nconst { Atom } = require(\"@flownet/lib-atom-api-js\");\nconst fnetExecuteCommandWithIpcFile = require('@flownet/lib-execute-command-with-ipc-file');\nconst fnetParseNodeUrl = require('@flownet/lib-parse-node-url');\nconst fnetLoadFnetConfig = require('@flownet/lib-load-fnet-config');\nconst fnetParseImports = require('@flownet/lib-parse-imports-js');\nconst fnetPickNpmVersions = require('@flownet/lib-pick-npm-versions');\nconst deployToNextjs = require('./deployer/nextjs');\nconst fnetRenderTemplateDir = require('@flownet/lib-render-templates-dir');\nconst fnetListNpmVersions = require('@flownet/lib-list-npm-versions');\nclass Builder {\n\n #auth;\n #context;\n #atom;\n #njEnv;\n #libs;\n #packageDependencies;\n #packageDevDependencies;\n #atomAccessToken;\n #buildId;\n #buildKey;\n #protocol;\n #atomConfig;\n #npmConfig;\n #redConfig;\n\n #mode;\n #fileMode;\n #buildMode;\n #deployMode;\n\n constructor(context) {\n this.#auth = new Auth();\n this.#context = context;\n this.#packageDependencies = [];\n this.#packageDevDependencies = [];\n\n this._expire_ttl = 3600; // 1-hour\n this._expire_ttl_short = 300; // 5-minutes\n }\n\n async _cache_set(key, value, expire_ttl) {\n if (!this._redis_client) return;\n\n await this._redis_client.SETEX(\n key,\n expire_ttl || this._expire_ttl,\n JSON.stringify(value),\n ).catch(console.error);\n }\n\n async init() {\n\n this._redis_client = await createRedisClient();\n\n this.#buildId = this.#context.buildId || nanoid(24);\n\n this.#mode = this.#context.mode;\n this.#fileMode = ['all', 'deploy', 'build', 'file'].includes(this.#mode);\n this.#buildMode = ['all', 'deploy', 'build'].includes(this.#mode);\n this.#deployMode = ['all', 'deploy'].includes(this.#mode);\n\n this.#protocol = this.#context.protocol;\n this.#buildKey = \"BUILD:\" + this.#buildId;\n\n this.#atomConfig = await fnetLoadFnetConfig({ name: this.#context.atomConfig || \"atom\", dir: this.#context.projectDir })?.data;\n this.#npmConfig = await fnetLoadFnetConfig({ name: this.#context.npmConfig || \"npm\", dir: this.#context.projectDir })?.data;\n this.#redConfig = await fnetLoadFnetConfig({ name: this.#context.redConfig || \"red\", dir: this.#context.projectDir })?.data;\n\n try {\n await this.setInProgress({ message: \"Initialization started.\" });\n\n await this.initAuth();\n await this.initLibrary();\n await this.initFeatures();\n await this.initDependencies();\n await this.initLibraryDir();\n await this.initNunjucks();\n await this.initLibs();\n }\n catch (error) {\n await this._cache_set(this.#buildKey, { status: \"FAILED\", message: error?.message || error });\n throw error;\n }\n }\n\n async initAuth() {\n if (!this.#context.id) return;\n this.#atomAccessToken = await this.#auth.init({ config: this.#atomConfig });\n }\n\n async initLibrary() {\n const libraryId = this.#context.id;\n this.#atom = this.#context.project?.libraryAtom || await Atom.get({ id: libraryId });\n let bundleName = this.#atom.doc.bundleName;\n bundleName = bundleName || (this.#atom.doc.name || \"\").toUpperCase().replace(/[^A-Z0-9]/g, \"_\");\n this.#atom.doc.bundleName = bundleName;\n this.#atom.type = this.#atom.type || \"workflow.lib\";\n }\n\n async initFeatures() {\n\n this.#atom.doc.features = this.#atom.doc.features || {};\n const features = this.#atom.doc.features;\n\n features.form_enabled = this.#atom.doc.form === true || this.#atom.doc.form?.enabled === true || features.form === true || features.form?.enabled === true;\n features.browser_autorun = features.browser?.autorun === true;\n features.multiple_enabled = features.multiple_enabled || features.multiple === true || features.multiple?.enabled === true;\n features.index_html_enabled = !(this.#atom.doc.features.multiple_enabled === true || this.#atom.doc.features.form_enabled !== true);\n features.bin_file_enabled = !(this.#atom.doc.features.multiple_enabled === true || this.#atom.doc.features.form_enabled === true);\n\n // rollup output default\n const rollup_output_default = {\n cjs: {\n format: \"cjs\",\n context: features.form_enabled ? \"window\" : \"global\",\n babel: false,\n browser: false,\n copy: true,\n replace: true,\n },\n cjsx: {\n format: \"cjs\",\n context: features.form_enabled ? \"window\" : \"global\",\n babel: false,\n browser: true,\n replace: true,\n enabled: false\n },\n esm: {\n format: \"esm\",\n context: features.form_enabled ? \"window\" : \"global\",\n babel: false,\n browser: false,\n replace: true,\n browsersync: true,\n },\n esmx: {\n format: \"esm\",\n browser: true,\n babel: true,\n context: features.form_enabled ? \"window\" : \"global\",\n replace: true,\n browsersync: false,\n enabled: false\n },\n iife: {\n format: \"iife\",\n context: features.form_enabled ? \"window\" : \"global\",\n babel: true,\n browser: true,\n replace: true,\n enabled: false\n }\n };\n\n // babel targets default\n const babel_default = {\n targets: {\n browsers: \"last 9 versions, not dead\",\n node: \"18\"\n }\n }\n\n // browsersync default\n const browsersync_default = {\n server: '.',\n startPath: \"/dist/app/esmx/index.html\",\n files: [\"./dist/**/*\"]\n }\n\n // replace default\n const replace_default = {}\n\n // terser default\n const terser_default = {}\n\n // css default\n const css_default = {}\n\n // wasm default\n const wasm_default = {}\n\n // copy default\n const copy_default = {}\n\n // json default\n const json_default = {}\n\n if (features.webos === true) {\n rollup_output_default.webos = {\n format: \"esm\",\n browser: true,\n babel: true,\n context: \"window\",\n replace: true,\n babel_options: {\n targets: {\n chrome: \"79\"\n }\n }\n }\n }\n\n if (features.index_html_enabled === true) {\n rollup_output_default.app = {\n format: \"esm\",\n browser: true,\n babel: true,\n context: \"window\",\n replace: true,\n input: \"./src/app/index.js\",\n output_dir: \"./dist/app/esmx\",\n }\n\n copy_default.targets = copy_default.targets || [];\n copy_default.targets.push({ src: \"./src/app/index.html\", dest: \"./dist/app/esmx\" });\n }\n\n if (features.bin_file_enabled === true) {\n rollup_output_default.cli = {\n format: \"cjs\",\n context: \"global\",\n babel: false,\n browser: true,\n replace: true,\n enabled: true,\n input: \"./src/cli/index.js\",\n output_dir: \"./dist/cli/cjsx\",\n banner: \"#!/usr/bin/env node\",\n terser: true,\n }\n }\n\n features.babel_options = (features.babel_options || features.babel?.options || babel_default);\n features.browsersync_options = merge(browsersync_default, features.browsersync_options || features.browsersync?.options || {});\n features.replace_options = merge(replace_default, features.replace_options || features.replace?.options || {});\n features.terser_options = merge(terser_default, features.terser_options || features.terser?.options || {});\n features.css_options = merge(css_default, features.css_options || features.css?.options || {});\n features.wasm_options = merge(wasm_default, features.wasm_options || features.wasm?.options || {});\n features.copy_options = merge(copy_default, features.copy_options || features.copy?.options || {});\n features.json_options = merge(json_default, features.json_options || features.json?.options || {});\n\n features.rollup_output = merge(rollup_output_default, features.rollup_output || features.rollup?.output || features.rollup || {});\n\n const rollup_output_keys = Object.keys(rollup_output_default);\n for (const key of rollup_output_keys) {\n const output = rollup_output_default[key];\n\n if (!output) continue;\n\n output.babel_options = output.babel_options || features.babel_options;\n output.browsersync_options = merge(features.browsersync_options, output.browsersync_options);\n output.replace_options = merge(features.replace_options, output.replace_options);\n output.terser_options = merge(features.terser_options, output.terser_options);\n output.css_options = merge(features.css_options, output.css_options);\n output.wasm_options = merge(features.wasm_options, output.wasm_options);\n output.copy_options = merge(features.copy_options, output.copy_options);\n output.json_options = merge(features.json_options, output.json_options);\n\n if (features.form_enabled) output.babel = true;\n }\n\n features.babel_enabled = rollup_output_keys.some(w => features.rollup_output[w].babel === true);\n features.browser_enabled = rollup_output_keys.some(w => features.rollup_output[w].babel === true);\n features.browsersync_enabled = rollup_output_keys.some(w => features.rollup_output[w].browsersync === true);\n features.browsersync_enabled = features.browsersync_enabled && (features.form_enabled || features.browser_autorun === true);\n\n features.wasm_enabled = features.wasm === true || (features.wasm && features.wasm?.enabled !== false);\n features.css_enabled = features.css === true || (features.css && features.css?.enabled !== false);\n features.json_enabled = features.json === true || (features.json && features.json?.enabled !== false);\n features.terser_enabled = features.terser === true || (features.terser && features.terser?.enabled !== false);\n features.copy_enabled = features.form_enabled || features.copy_enabled || (features.copy && features.copy?.enabled !== false);\n\n features.bin_name = features.bin_name || features.bin?.name || features.bin;\n features.bin_enabled = features.bin_name && (typeof features.bin_name === 'string')(features.bin_enabled || features.bin?.enabled !== false);\n features.dependency_auto_enabled = features.dependency_auto !== false && features.dependency_auto?.enabled !== false;\n features.npm_install_flags = features.npm_install_flags || '';\n\n }\n\n async initDependencies() {\n if (this.#atom.doc.features.form_enabled) {\n if (this.#atom.doc.features.dependency_auto_enabled) {\n this.#packageDependencies.push({ package: \"react\", version: \"^18.2\" });\n this.#packageDependencies.push({ package: \"react-dom\", version: \"^18.2\" });\n }\n } else {\n }\n this.#packageDependencies.push({ package: \"chalk\", version: \"^4\" });\n\n // DEV DEPENDENCIES\n this.#packageDevDependencies.push({ package: \"@babel/core\", version: \"^7.14\" });\n this.#packageDevDependencies.push({ package: \"@rollup/plugin-commonjs\", version: \"^25.0\" });\n this.#packageDevDependencies.push({ package: \"@rollup/plugin-node-resolve\", version: \"^15.1\" });\n this.#packageDevDependencies.push({ package: \"@rollup/plugin-replace\", version: \"^5.0\" });\n this.#packageDevDependencies.push({ package: \"rollup\", version: \"^3.26\" });\n this.#packageDevDependencies.push({ package: \"rollup-plugin-delete\", version: \"^2.0\" });\n this.#packageDevDependencies.push({ package: \"rollup-plugin-dts\", version: \"^5.3\" });\n this.#packageDevDependencies.push({ package: \"rollup-plugin-peer-deps-external\", version: \"^2.2\" });\n\n if (this.#atom.doc.features.babel_enabled) {\n this.#packageDevDependencies.push({ package: \"@rollup/plugin-babel\", version: \"^6.0\" });\n this.#packageDevDependencies.push({ package: \"@babel/preset-env\", version: \"7.14\" });\n this.#packageDevDependencies.push({ package: \"@babel/preset-react\", version: \"7.14\" });\n }\n\n if (this.#atom.doc.features.browsersync_enabled) {\n this.#packageDevDependencies.push({ package: \"rollup-plugin-browsersync\", version: \"^1.3\" });\n }\n\n if (this.#atom.doc.features.json_enabled) {\n this.#packageDevDependencies.push({ package: \"@rollup/plugin-json\", version: \"^6.0\" });\n }\n\n if (this.#atom.doc.features.terser_enabled) {\n this.#packageDevDependencies.push({ package: \"@rollup/plugin-terser\", version: \"^0.4\" });\n }\n\n if (this.#atom.doc.features.wasm_enabled) {\n this.#packageDevDependencies.push({ package: \"@rollup/plugin-wasm\", version: \"^6.1\" });\n }\n\n if (this.#atom.doc.features.css_enabled) {\n this.#packageDevDependencies.push({ package: \"rollup-plugin-postcss\", version: \"4.0\" });\n this.#packageDevDependencies.push({ package: \"sass\", version: \"^1.66\" });\n }\n\n if (this.#atom.doc.features.copy_enabled) {\n this.#packageDevDependencies.push({ package: \"rollup-plugin-copy\", version: \"^3.5\" });\n }\n }\n\n async initLibraryDir() {\n const projectDir = this.#context.projectDir;\n\n let result;\n\n const exclude = ['node_modules']; // List of directories to exclude from deletion.\n\n // Delete all files and directories in projectDir except those in the exclude list.\n fs.existsSync(projectDir) && fs.readdirSync(projectDir).forEach(file => {\n if (!exclude.includes(file)) {\n result = shell.rm('-rf', path.join(projectDir, file));\n }\n });\n\n // .\n result = shell.exec(`mkdir -p ${projectDir}`);\n if (result.code !== 0) throw new Error('Couldnt create workflow dir.');\n\n // src\n result = shell.exec(`mkdir ${projectDir}/src`);\n if (result.code !== 0) throw new Error('Couldnt create library/src dir.');\n\n // default\n result = shell.exec(`mkdir ${projectDir}/src/default`);\n if (result.code !== 0) throw new Error('Couldnt create library/src/default dir.');\n\n // src/libs\n result = shell.exec(`mkdir -p ${projectDir}/src/libs`);\n if (result.code !== 0) throw new Error('Couldnt create library/src/libs dir.');\n }\n\n async initNunjucks() {\n const templateDir = this.#context.templateDir;\n this.#njEnv = nunjucks.configure(templateDir, { watch: false, dev: true });\n }\n\n async initLibs() {\n const libs = [{\n name: this.#atom.doc.name,\n type: \"atom\",\n parent_id: this.#atom.parent_id\n }];\n\n this.#libs = libs;\n\n await this.initAtomLibsAndDeps({ libs, packageDependencies: this.#packageDependencies });\n }\n\n async initAtomLibsAndDeps({ libs, packageDependencies }) {\n const atomLibRefs = libs.filter(w => w.type === 'atom');\n for (let i = 0; i < atomLibRefs.length; i++) {\n const atomLibRef = atomLibRefs[i];\n\n const atomLib = await this.findAtomLibrary({ url: atomLibRef.name });\n atomLibRef.atom = atomLib;\n\n const packageDeps = atomLib.doc.dependencies?.filter(w => typeof w.repo === 'undefined' || w.repo === 'npm');\n packageDeps?.forEach(npmDep => {\n const found = packageDependencies.find(w => w.package === npmDep.package);\n if (found) {\n if (typeof npmDep.path === 'string') {\n if (!(found.path || []).some(w => w === npmDep.path)) {\n found.path = found.path || [];\n found.path.push(npmDep.path);\n }\n }\n else if (Array.isArray(npmDep.path)) {\n npmDep.path.forEach(item => {\n if (!(found.path || []).some(w => w === item)) {\n found.path = found.path || [];\n found.path.push(item);\n }\n });\n }\n }\n else packageDependencies.push(npmDep);\n });\n }\n packageDependencies.sort((a, b) => a.package?.localeCompare(b.package));\n }\n\n async findAtomLibrary({ url }) {\n const parsedUrl = fnetParseNodeUrl({ url: url });\n if (!parsedUrl) throw new Error(`Invalid package name: ${url}`);\n\n if (!parsedUrl.protocol) parsedUrl.protocol = this.#protocol;\n\n if (parsedUrl.protocol === 'ac:') {\n const parts = parsedUrl.pathname.split('/');\n if (parts.length === 1) {\n return await Atom.first({ where: { name: url, parent_id: this.#atomConfig.env.ATOM_LIBRARIES_ID, type: \"workflow.lib\" } });\n }\n\n if (parts.length === 2) {\n const folder = await Atom.first({ where: { name: parts[0], parent_id: this.#atomConfig.env.ATOM_LIBRARIES_ID, type: \"folder\" } });\n return await Atom.first({ where: { name: parts[1], parent_id: folder.id, type: \"workflow.lib\" } });\n }\n }\n else if (parsedUrl.protocol === 'local:') {\n\n const atom = this.#atom;\n atom.protocol = \"local:\";\n atom.doc.dependencies = atom.doc.dependencies || [];\n atom.name = atom.doc.name;\n\n const srcFilePath = path.resolve(this.#context.projectSrcDir, `${'index'}.js`);\n const parsedImports = await fnetParseImports({ file: srcFilePath, recursive: true });\n const dependencies = atom.doc.dependencies;\n for await (const parsedImport of parsedImports.required) {\n if (parsedImport.type !== 'npm') continue;\n\n if (dependencies.find(w => w.package === parsedImport.package)) continue;\n\n const npmVersions = await fnetPickNpmVersions({ name: parsedImport.package, count: 1 });\n\n dependencies.push({\n package: parsedImport.package,\n subpath: parsedImport.subpath,\n version: npmVersions.minorRange,\n type: \"npm\"\n })\n }\n\n return atom;\n }\n }\n\n // CREATE\n async createAtomLibFiles({ libs }) {\n await this.setInProgress({ message: \"Creating external lib files.\" });\n\n this.#atom.typesDir = './types';\n\n const atomLibRefs = libs.filter(w => w.type === 'atom');\n for (let i = 0; i < atomLibRefs.length; i++) {\n const atomLibRef = atomLibRefs[i];\n\n const atomLib = atomLibRef.atom;\n const projectDir = this.#context.projectDir;\n if (atomLib.protocol === 'local:') {\n const srcFilePath = path.resolve(this.#context.projectSrcDir, `${atomLib.fileName || atomLib.name}.js`);\n const relativePath = path.relative(`${this.#context.projectDir}/src/default/`, srcFilePath);\n\n if (!fs.existsSync(srcFilePath)) {\n fs.mkdirSync(path.dirname(srcFilePath), { recursive: true });\n let template = 'export default async (args)=>{\\n';\n template += '}';\n fs.writeFileSync(srcFilePath, template, 'utf8');\n }\n\n atomLib.relativePath = relativePath;\n\n this.#atom.typesDir = './types/target/src';\n }\n else {\n const atomLibPath = `${projectDir}/src/libs/${atomLib.id}.js`;\n const content = atomLib.doc.contents?.find(w => w.format === 'esm') || atomLib.doc;\n fs.writeFileSync(atomLibPath, content.content, 'utf8');\n }\n }\n }\n\n async createEngine() {\n\n await this.setInProgress({ message: \"Creating engine file.\" });\n\n const libs = this.#libs.filter(w => w.type === 'atom');\n\n const templateContext = { libs, libraryAtom: this.#atom, atom: this.#atom }\n\n const templateDir = this.#context.templateDir;\n const template = nunjucks.compile(\n fs.readFileSync(path.resolve(templateDir, `src/default/engine.js.njk`), \"utf8\"),\n this.#njEnv\n );\n\n const templateRender = template.render(templateContext);\n\n const projectDir = this.#context.projectDir;\n const filePath = path.resolve(projectDir, `src/default/index.js`);\n fs.writeFileSync(filePath, templateRender, 'utf8');\n }\n\n async createRollup() {\n\n await this.setInProgress({ message: \"Creating rollup file.\" });\n\n const templateContext = { libraryAtom: this.#atom, atom: this.#atom, packageDependencies: this.#packageDependencies }\n\n const templateDir = this.#context.templateDir;\n const template = nunjucks.compile(\n fs.readFileSync(path.resolve(templateDir, `rollup.config.js.njk`), \"utf8\"),\n this.#njEnv\n );\n\n const templateRender = template.render(templateContext);\n\n const projectDir = this.#context.projectDir;\n const filePath = path.resolve(projectDir, `rollup.config.js`);\n fs.writeFileSync(filePath, templateRender, 'utf8');\n }\n\n async createPackageJSON() {\n\n await this.setInProgress({ message: \"Creating package.json.\" });\n\n // TODO: PEER DEPENDENCIES\n // REACT CHECK\n const reactDep = this.#packageDependencies.find(w => w.package === 'react');\n const reactDomDep = this.#packageDependencies.find(w => w.package === 'react-dom');\n if (reactDep && !reactDomDep)\n this.#packageDependencies.push({ package: \"react-dom\", version: reactDep.version });\n else if (reactDep && reactDomDep)\n reactDomDep.version = reactDep.version;\n\n // EMOTION CHECK\n if (reactDep) {\n if (!this.#packageDependencies.find(w => w.package === '@emotion/react'))\n this.#packageDependencies.push({ package: \"@emotion/react\", version: \"^11\" });\n if (!this.#packageDependencies.find(w => w.package === '@emotion/styled'))\n this.#packageDependencies.push({ package: \"@emotion/styled\", version: \"^11\" });\n }\n\n const checkFiles = [];\n\n if (this.#atom.doc.features.index_html_enabled === true) {\n checkFiles.push(path.resolve(this.#context.projectDir, `src/app/index.js`));\n }\n \n if (this.#atom.doc.features.bin_file_enabled === true) {\n checkFiles.push(path.resolve(this.#context.projectDir, `src/cli/index.js`));\n }\n\n for await (const checkFile of checkFiles) {\n const srcFilePath = checkFile;\n if (!fs.existsSync(srcFilePath)) throw new Error(`App file not found: ${srcFilePath}`);\n\n const parsedImports = await fnetParseImports({ file: srcFilePath, recursive: true });\n for await (const parsedImport of parsedImports.required) {\n if (parsedImport.type !== 'npm') continue;\n\n if (this.#packageDependencies.find(w => w.package === parsedImport.package)) continue;\n if (this.#packageDevDependencies.find(w => w.package === parsedImport.package)) continue;\n\n const npmVersions = await fnetListNpmVersions({ name: parsedImport.package, groupBy: { minor: true } });\n const npmVersion = npmVersions[0][0];\n\n this.#packageDevDependencies.push({\n package: parsedImport.package,\n subpath: parsedImport.subpath,\n version: `^${npmVersion}`,\n type: \"npm\"\n })\n }\n }\n\n\n const templateContext = { libraryAtom: this.#atom, atom: this.#atom, packageDependencies: this.#packageDependencies, packageDevDependencies: this.#packageDevDependencies }\n\n const templateDir = this.#context.templateDir;\n const template = nunjucks.compile(\n fs.readFileSync(path.resolve(templateDir, `package.json.njk`), \"utf8\"),\n this.#njEnv\n );\n\n const templateRender = template.render(templateContext);\n\n const projectDir = this.#context.projectDir;\n const filePath = path.resolve(projectDir, `package.json`);\n fs.writeFileSync(filePath, templateRender, 'utf8');\n }\n\n async createBin() {\n\n if (this.#atom.doc.features.bin_file_enabled !== true) return;\n\n await this.setInProgress({ message: \"Creating bin.\" });\n\n // bin\n const projectDir = this.#context.projectDir;\n let result = shell.exec(`mkdir ${projectDir}/src/cli`);\n if (result.code !== 0) throw new Error('Couldnt create src/cli dir.');\n\n const templateContext = { libraryAtom: this.#atom, atom: this.#atom, packageDependencies: this.#packageDependencies }\n\n const templateDir = this.#context.templateDir;\n\n let template = nunjucks.compile(\n fs.readFileSync(path.resolve(templateDir, `src/cli/index.js.njk`), \"utf8\"),\n this.#njEnv\n );\n\n let templateRender = template.render(templateContext);\n\n let filePath = path.resolve(projectDir, `src/cli/index.js`);\n\n fs.writeFileSync(filePath, templateRender, 'utf8');\n\n // // bin/index.mjs\n // template = nunjucks.compile(\n // fs.readFileSync(path.resolve(templateDir, `bin/index.mjs.njk`), \"utf8\"),\n // this.#njEnv\n // );\n\n // templateRender = template.render(templateContext);\n\n // filePath = path.resolve(projectDir, `bin/index.mjs`);\n // fs.writeFileSync(filePath, templateRender, 'utf8');\n }\n\n async createIndexHtml() {\n\n if (!this.#atom.doc.features.index_html_enabled) return;\n\n await this.setInProgress({ message: \"Creating index.html.\" });\n\n const templateContext = {\n libraryAtom: this.#atom,\n atom: this.#atom\n , packageDependencies: this.#packageDependencies,\n ts: Date.now()\n }\n const templateDir = this.#context.templateDir;\n\n const outDir = path.resolve(this.#context.projectDir, `src/app`);\n if (!fs.existsSync(outDir)) fs.mkdirSync(outDir, { recursive: true });\n\n await fnetRenderTemplateDir({\n dir: path.resolve(templateDir, `src/app`),\n outDir,\n context: templateContext,\n });\n\n // const template = nunjucks.compile(\n // fs.readFileSync(path.resolve(templateDir, `app/index.html.njk`), \"utf8\"),\n // this.#njEnv\n // );\n // const templateRender = template.render(templateContext);\n\n // const projectDir = this.#context.projectDir;\n // const filePath = path.resolve(projectDir, `app/index.html`);\n // fs.writeFileSync(filePath, templateRender, 'utf8');\n }\n\n async createTsConfig() {\n\n await this.setInProgress({ message: \"Creating tsconfig.json.\" });\n\n const templateContext = { libraryAtom: this.#atom, atom: this.#atom, packageDependencies: this.#packageDependencies }\n\n const templateDir = this.#context.templateDir;\n const template = nunjucks.compile(\n fs.readFileSync(path.resolve(templateDir, `tsconfig.json.njk`), \"utf8\"),\n this.#njEnv\n );\n\n const templateRender = template.render(templateContext);\n\n const projectDir = this.#context.projectDir;\n const filePath = path.resolve(projectDir, `tsconfig.json`);\n fs.writeFileSync(filePath, templateRender, 'utf8');\n }\n\n async createGitIgnore() {\n\n await this.setInProgress({ message: \"Creating .gitignore\" });\n\n const templateContext = { libraryAtom: this.#atom, atom: this.#atom, packageDependencies: this.#packageDependencies }\n\n const templateDir = this.#context.templateDir;\n const template = nunjucks.compile(\n fs.readFileSync(path.resolve(templateDir, `.gitignore.njk`), \"utf8\"),\n this.#njEnv\n );\n\n const templateRender = template.render(templateContext);\n\n const projectDir = this.#context.projectDir;\n const filePath = path.resolve(projectDir, `.gitignore`);\n fs.writeFileSync(filePath, templateRender, 'utf8');\n }\n\n async createProjectYaml() {\n\n const fileBase = `node.yaml`;\n const message = `Creating ${fileBase}`;\n\n await this.setInProgress({ message: message });\n\n const { content: main, ...content } = this.#atom.doc;\n\n const templateContext = { content: yaml.dump(content) }\n\n const templateDir = this.#context.templateDir;\n const template = nunjucks.compile(\n fs.readFileSync(path.resolve(templateDir, `${fileBase}.njk`), \"utf8\"),\n this.#njEnv\n );\n\n const templateRender = template.render(templateContext);\n\n const projectDir = this.#context.projectDir;\n const filePath = path.resolve(projectDir, `${fileBase}`);\n fs.writeFileSync(filePath, templateRender, 'utf8');\n }\n\n async createProjectReadme() {\n\n const fileBase = `readme.md`;\n const message = `Creating ${fileBase}`;\n\n await this.setInProgress({ message: message });\n\n if (this.#context.project?.readme) {\n\n const templateContext = { content: this.#context.project.readme.doc.content }\n\n const templateDir = this.#context.templateDir;\n const template = nunjucks.compile(\n fs.readFileSync(path.resolve(templateDir, `${fileBase}.njk`), \"utf8\"),\n this.#njEnv\n );\n\n const templateRender = template.render(templateContext);\n\n const projectDir = this.#context.projectDir;\n const filePath = path.resolve(projectDir, `${fileBase}`);\n fs.writeFileSync(filePath, templateRender, 'utf8');\n }\n else if (this.#atom.id) {\n const wiki = await Atom.first({ type: \"wiki\", parent_id: this.#atom.id });\n\n if (!wiki || wiki.doc?.[\"content-type\"] !== 'markdown') return;\n\n const { content: main, ...content } = wiki.doc;\n\n const templateContext = { content: main }\n\n const templateDir = this.#context.templateDir;\n const template = nunjucks.compile(\n fs.readFileSync(path.resolve(templateDir, `${fileBase}.njk`), \"utf8\"),\n this.#njEnv\n );\n\n const templateRender = template.render(templateContext);\n\n const projectDir = this.#context.projectDir;\n const filePath = path.resolve(projectDir, `${fileBase}`);\n fs.writeFileSync(filePath, templateRender, 'utf8');\n }\n }\n async createToYargs() {\n\n if (this.#atom.doc.features.multiple_enabled === true) return;\n\n await this.setInProgress({ message: \"Creating yargs.\" });\n\n const options = {};\n const inputs = this.#atom.doc.inputs || [];\n const imports = [];\n\n inputs.forEach(input => {\n if (input.cli === false || !input.name) return;\n if (input.import) imports.push(input);\n\n const option = {};\n if (input.type) option.type = input.type;\n if (input.default) option.default = input.default;\n if (input.choices) option.choices = input.choices;\n if (input.describe || input.description) option.describe = input.describe || input.description;\n if (input.alias) option.alias = input.alias;\n if (input.required === true) option.required = true;\n if (input.hidden === true) option.hidden = true;\n if (input.array === true) option.array = true;\n if (input.normalize === true) option.normalize = true;\n if (input.nargs) option.nargs = input.nargs;\n\n options[input.name] = option;\n });\n\n const templateContext = { options, imports, atom: this.#atom }\n\n const templateDir = this.#context.templateDir;\n const template = nunjucks.compile(\n fs.readFileSync(path.resolve(templateDir, `src/default/to.yargs.js.njk`), \"utf8\"),\n this.#njEnv\n );\n\n const templateRender = template.render(templateContext);\n\n const projectDir = this.#context.projectDir;\n const filePath = path.resolve(projectDir, `src/default/to.yargs.js`);\n fs.writeFileSync(filePath, templateRender, 'utf8');\n }\n\n async runBuildScripts() {\n const projectDir = this.#context.projectDir;\n\n await this.setInProgress({ message: \"Installing npm packages.\" });\n let result = shell.exec(`npm install ${this.#atom.doc.features.npm_install_flags}`, { cwd: projectDir });\n if (result.code !== 0) throw new Error('Couldnt install npm packages.');\n\n await this.setInProgress({ message: \"Prettifiying source files.\" });\n result = shell.exec(`prettier --write src/**/* bin/* *.{js,json,yaml,html} --no-error-on-unmatched-pattern`, { cwd: projectDir });\n if (result.code !== 0) throw new Error('Couldnt format files.');\n\n await this.setInProgress({ message: \"Creating .d.ts\" });\n result = shell.exec(`tsc`, { cwd: projectDir });\n if (result.code !== 0) throw new Error('Couldnt create .d.ts files.');\n\n await this.setInProgress({ message: \"Building main project.\" });\n result = shell.exec(`npm run build`, { cwd: projectDir });\n if (result.code !== 0) throw new Error('Couldnt build library project.');\n }\n\n async deploy() {\n\n await this.setInProgress({ message: \"Deploying.\" });\n\n if (this.#context.project?.devops) {\n const devopsProjects = [this.#context.project?.devops];\n for (let i = 0; i < devopsProjects.length; i++) {\n let deploymentProject = devopsProjects[i];\n await this.deployProject({ deploymentProject });\n\n if (deploymentProject.isDirty === true) {\n await deploymentProject.save();\n }\n }\n\n }\n else if (this.#atom.id) {\n const devopsProjects = await Atom.list({ type: \"library.deploy\", parent_id: this.#atom.id });\n for (let i = 0; i < devopsProjects.length; i++) {\n let deploymentProject = devopsProjects[i];\n await this.deployProject({ deploymentProject });\n\n if (deploymentProject.isDirty === true) {\n deploymentProject = await Atom.update(deploymentProject, { id: deploymentProject.id });\n }\n }\n }\n }\n\n async deployProject(context) {\n const { deploymentProject } = context;\n const targets = deploymentProject.doc.targets || [];\n for (let i = 0; i < targets.length; i++) {\n const deploymentProjectTarget = targets[i];\n await this.deployProjectTarget({ deploymentProject, deploymentProjectTarget });\n }\n }\n\n async deployProjectTarget(context) {\n const { deploymentProjectTarget, deploymentProject } = context;\n\n if (deploymentProjectTarget.enabled !== true) return;\n\n if (deploymentProjectTarget.name === this.#atomConfig.env.ATOM_DEPLOY_LIBRARY_TARGET) await this.deployAsWorkflowLib(context);\n else if (deploymentProjectTarget.name === this.#atomConfig.env.ATOM_DEPLOY_RED_TARGET) await this.deployAsRedFlow(context);\n else if (deploymentProjectTarget.name === this.#atomConfig.env.ATOM_DEPLOY_NPM_TARGET) await this.deployAsNpm(context);\n else if (deploymentProjectTarget.name === \"pm\") await this.deployAsPm(context);\n else if (deploymentProjectTarget.name === \"gitlab\") await this.deployAsGitlab(context);\n else {\n let deployer;\n\n if (deploymentProjectTarget.name === 'nextjs') deployer = deployToNextjs;\n\n if (!deployer) return;\n\n const result = await deployer({\n atom: this.#atom,\n target: deploymentProjectTarget,\n onProgress: this.setInProgress.bind(this),\n projectDir: this.#context.projectDir,\n dependencies: this.#packageDependencies\n });\n deploymentProjectTarget.build = { id: this.#buildId, ts: Date.now() };\n deploymentProject.isDirty = true;\n }\n }\n\n async deployAsWorkflowLib(context) {\n await this.setInProgress({ message: \"Deploying it as workflow lib.\" });\n\n if (target.dryRun === true) return;\n\n const { deploymentProject, deploymentProjectTarget: target } = context;\n\n let wflibAtom;\n\n if (!target.deploy.id) {\n wflibAtom = await Atom.create({\n parent_id: this.#atomConfig.env.ATOM_LIBRARIES_ID,\n doc: {\n name: target.deploy.name,\n type: \"workflow.lib\",\n dependencies: [],\n content: undefined,\n subtype: \"library\"\n }\n });\n\n if (!wflibAtom) return;\n\n target.deploy.id = wflibAtom.id;\n\n deploymentProject.isDirty = true;\n }\n else {\n wflibAtom = await Atom.get({ id: target.deploy.id });\n\n if (!wflibAtom) return;\n }\n\n const projectDir = this.#context.projectDir;\n\n wflibAtom.doc.contents = [\n {\n content: fs.readFileSync(path.resolve(projectDir, 'dist/default/esm/index.js'), { encoding: 'utf8', flag: 'r' }),\n [\"content-type\"]: \"javascript\",\n format: \"esm\"\n },\n {\n content: fs.readFileSync(path.resolve(projectDir, 'dist/default/cjs/index.js'), { encoding: 'utf8', flag: 'r' }),\n [\"content-type\"]: \"javascript\",\n format: \"cjs\"\n },\n {\n content: fs.readFileSync(path.resolve(projectDir, 'dist/default/iife/index.js'), { encoding: 'utf8', flag: 'r' }),\n [\"content-type\"]: \"javascript\",\n format: \"iife\"\n }\n ]\n\n wflibAtom.doc.name = target.deploy.name;\n wflibAtom.doc.dependencies = this.#packageDependencies;\n wflibAtom.doc.subtype = \"workflow\";\n\n wflibAtom = await Atom.update(wflibAtom, { id: wflibAtom.id });\n }\n\n async deployAsRedFlow(context) {\n\n await this.setInProgress({ message: \"Deploying it as node-red flow.\" });\n\n const { deploymentProject, deploymentProjectTarget: target } = context;\n\n const projectDir = this.#context.projectDir;\n const templateDir = this.#context.templateDir;\n const atom = this.#atom;\n\n let tmpContext;\n\n if (target.deploy.template === 'simple') {\n tmpContext = {\n atom,\n packageDependencies: this.#packageDependencies,\n red: {\n tab: {\n id: target.deploy.id || Red.util.generateId(),\n label: `LIB/${atom.id ? atom.id : os.hostname()}/${atom.name}/${target.deploy.name || target.deploy.template}`\n },\n function: {\n id: Red.util.generateId(),\n name: atom.doc.name,\n initialize: {\n content: fs.readFileSync(path.resolve(projectDir, 'dist/default/iife/index.js'), { encoding: 'utf8', flag: 'r' }),\n var: atom.doc.bundleName\n }\n },\n inject: {\n id: Red.util.generateId(),\n ...target.deploy.params?.inject,\n payload: target.deploy.params?.inject?.payloadType === 'json' ? `'${JSON.stringify(target.deploy.params?.inject?.payload)}'` : target.deploy.params?.inject?.payload\n },\n debug: {\n id: Red.util.generateId()\n }\n }\n }\n }\n else if (target.deploy.template === 'cronjob') {\n let schedulesCloned = target.deploy.params?.schedules ? cloneDeep(target.deploy.params?.schedules) : undefined;\n\n schedulesCloned?.forEach(schedule => {\n if (schedule.payloadType === 'json')\n schedule.payload = `'${JSON.stringify(schedule.payload)}'`;\n });\n\n tmpContext = {\n atom,\n packageDependencies: this.#packageDependencies,\n red: {\n tab: {\n id: target.deploy.id || Red.util.generateId(),\n label: `LIB/${atom.id ? atom.id : os.hostname()}/${target.deploy.name || target.deploy.template}`\n },\n function: {\n id: Red.util.generateId(),\n name: atom.doc.name,\n initialize: {\n content: fs.readFileSync(path.resolve(projectDir, 'dist/default/iife/index.js'), { encoding: 'utf8', flag: 'r' }),\n var: atom.doc.bundleName\n }\n },\n cronjob: {\n id: Red.util.generateId(),\n schedules: schedulesCloned\n },\n debug: {\n id: Red.util.generateId()\n }\n }\n }\n }\n else if (target.deploy.template === 'http') {\n tmpContext = {\n atom,\n packageDependencies: this.#packageDependencies,\n red: {\n tab: {\n id: target.deploy.id || Red.util.generateId(),\n label: `LIB/${atom.id ? atom.id : os.hostname()}/${target.deploy.name || target.deploy.template}`\n },\n function: {\n id: Red.util.generateId(),\n name: atom.doc.name,\n initialize: {\n content: fs.readFileSync(path.resolve(projectDir, 'dist/default/iife/index.js'), { encoding: 'utf8', flag: 'r' }),\n var: atom.doc.bundleName\n }\n },\n httpin: {\n id: Red.util.generateId(),\n method: target.deploy.params.method || \"get\",\n url: target.deploy.params.url\n },\n httpout: {\n id: Red.util.generateId(),\n },\n debug: {\n id: Red.util.generateId()\n }\n }\n }\n }\n\n else return;\n\n const template = nunjucks.compile(\n fs.readFileSync(path.resolve(templateDir, `deploy/node-red/${target.deploy.template}.yaml.njk`), \"utf8\"),\n this.#njEnv\n );\n\n\n let templateRendered = template.render(tmpContext);\n fs.writeFileSync(path.resolve(projectDir, `node-red.yaml`), templateRendered);\n\n templateRendered = yaml.load(templateRendered);\n\n if (target.dryRun === true) return;\n\n deploymentProject.isDirty = true;\n target.build = { id: this.#buildId, ts: Date.now() };\n\n const redUrl = target.deploy.url || this.#redConfig.env.RED_URL;\n\n const headers = {};\n if (target.deploy.auth !== false) {\n headers[\"Authorization\"] = \"Bearer \" + this.#atomAccessToken;\n }\n\n if (!target.deploy.id) {\n // create\n const response = await axios({\n method: \"POST\",\n url: `${redUrl}/flow`,\n data: templateRendered,\n headers\n });\n\n target.deploy.id = response.data.id;\n }\n else {\n if (target.actions?.delete === true) {\n // update\n const response = await axios({\n method: \"DELETE\",\n url: `${redUrl}/flow/${target.deploy.id}`,\n headers\n });\n delete target.actions.delete;\n delete target.deploy.id;\n target.enabled = false;\n }\n else {\n // update\n const response = await axios({\n method: \"PUT\",\n url: `${redUrl}/flow/${target.deploy.id}`,\n data: templateRendered,\n headers\n });\n }\n }\n }\n\n async deployAsNpm(context) {\n await this.setInProgress({ message: \"Deploying it as npm package.\" });\n\n const { deploymentProject, deploymentProjectTarget: target } = context;\n\n const projectDir = this.#context.projectDir;\n const packageJSONPath = path.resolve(projectDir, 'package.json');\n\n const packageJSONContent = fs.readFileSync(packageJSONPath);\n\n const packageJSON = JSON.parse(packageJSONContent);\n\n packageJSON.name = target.deploy.params.name;\n packageJSON.version = semver.inc(target.deploy.params.version, \"patch\");\n\n const binName = target.deploy.params.bin?.name || target.deploy.params.bin;\n const binEnabled = target.deploy.params.bin?.enabled !== false;\n\n if (binEnabled && binName && typeof binName === 'string') {\n packageJSON.bin = {\n [binName]: 'dist/cli/cjsx/index.js',\n [this.#atom.doc.name]: 'dist/cli/cjsx/index.js'\n }\n }\n\n delete packageJSON.scripts;\n delete packageJSON.devDependencies;\n\n packageJSON.scripts = {\n \"serve\": \"npx serve .\"\n }\n\n fs.writeFileSync(packageJSONPath, JSON.stringify(packageJSON, null, \"\\t\"));\n\n fs.writeFileSync(path.resolve(projectDir, '.npmrc'), `//registry.npmjs.org/:_authToken=${this.#npmConfig.env.NPM_TOKEN}`);\n\n if (target.dryRun === true) return;\n\n let result = shell.exec(`npm publish --access public`, { cwd: projectDir });\n if (result.code !== 0) throw new Error('Couldnt publish to npm');\n\n // restore\n fs.writeFileSync(packageJSONPath, packageJSONContent);\n\n deploymentProject.isDirty = true;\n target.deploy.params.version = packageJSON.version;\n target.build = { id: this.#buildId, ts: Date.now() };\n }\n\n async deployAsPm(context) {\n await this.setInProgress({ message: \"Deploying it as pm package.\" });\n\n const { deploymentProject, deploymentProjectTarget: target } = context;\n\n const projectDir = this.#context.projectDir;\n const packageJSONPath = path.resolve(projectDir, 'package.json');\n\n const packageJSONContent = fs.readFileSync(packageJSONPath);\n\n const packageJSON = JSON.parse(packageJSONContent);\n\n packageJSON.name = target.deploy.params.name;\n packageJSON.version = semver.inc(target.deploy.params.version, \"patch\");\n\n delete packageJSON.scripts;\n delete packageJSON.devDependencies;\n\n fs.writeFileSync(packageJSONPath, JSON.stringify(packageJSON, null, \"\\t\"));\n\n const { file: pmFile, data: pmConfig } = await fnetLoadFnetConfig({\n name: target.deploy.params.pm?.config || this.#context.pmConfig || \"pm\",\n dir: this.#context.projectDir\n });\n\n let command = `fnet-upload-files-to-gcs`;\n command += ` --projectId='${pmConfig.env.PM_PROJECT_ID}'`;\n command += ` --bucketName='${pmConfig.env.PM_BUCKET_NAME}'`;\n command += ` --keyFilename='${path.resolve(path.dirname(pmFile), pmConfig.env.PM_UPLOADER_KEY_FILE)}'`;\n command += ` --dir='${projectDir}'`;\n command += ` --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}`;\n command += ` --destDir='${packageJSON.name}/${packageJSON.version}'`;\n command += ` --headers.cacheControl='public, max-age=31536000, immutable'`;\n\n if (target.dryRun === true) command += ` --dryRun`;\n\n await fnetExecuteCommandWithIpcFile({ command });\n\n // restore\n fs.writeFileSync(packageJSONPath, packageJSONContent);\n\n if (target.dryRun === true) return;\n\n deploymentProject.isDirty = true;\n target.deploy.params.version = packageJSON.version;\n target.build = { id: this.#buildId, ts: Date.now() };\n\n await this.registerToPackageManager({ target, packageJSON });\n }\n\n async deployAsGitlab(context) {\n await this.setInProgress({ message: \"Deploying it as gitlab project.\" });\n\n const { deploymentProject, deploymentProjectTarget: target } = context;\n\n const projectDir = this.#context.projectDir;\n\n let command = `fnet-to-gitlab`;\n\n const configKey = target.deploy.params.config || 'gitlab';\n\n const config = fnetLoadFnetConfig({\n name: configKey,\n dir: this.#context.projectDir\n });\n\n if (!config) throw new Error(`Couldnt load config ${configKey}`);\n\n const { data: inputs } = config.data;\n\n command += ` --projectGroupId=${inputs.projectGroupId}`;\n command += ` --projectPath='${projectDir}'`;\n command += ` --projectName='${target.deploy.params.name}'`;\n command += ` --projectBranch='${target.deploy.params.branch || 'main'}'`;\n\n command += ` --gitlabHost='${inputs.gitlabHost}'`;\n command += ` --gitlabToken='${inputs.gitlabToken}'`;\n command += ` --gitlabUsername='${inputs.gitlabUsername}'`;\n command += ` --gitlabUserEmail='${inputs.gitlabUserEmail}'`;\n\n if (target.dryRun === true) return;\n\n await fnetExecuteCommandWithIpcFile({ command });\n\n deploymentProject.isDirty = true;\n target.build = { id: this.#buildId, ts: Date.now() };\n }\n\n async registerToPackageManager(context) {\n const { target, packageJSON } = context;\n\n // update\n let packageAtom = await Atom.first({ name: target.deploy.params.name, parent_id: this.#atomConfig.env.ATOM_PACKAGES_ID });\n\n if (!packageAtom) {\n // create new\n packageAtom = await Atom.create({\n parent_id: this.#atomConfig.env.ATOM_PACKAGES_ID,\n doc: {\n name: target.deploy.params.name,\n type: \"pm\",\n versions: [{ v: packageJSON.version }]\n }\n });\n }\n else {\n // update existing\n packageAtom.doc.versions.splice(0, 0, { v: packageJSON.version });\n\n await Atom.update(packageAtom, { id: packageAtom.id });\n }\n }\n\n async setInProgress({ message }) {\n await this._cache_set(this.#buildKey, { status: \"IN_PROGRESS\", message });\n }\n\n async build() {\n try {\n if (this.#fileMode) {\n\n await this.createAtomLibFiles({ libs: this.#libs });\n await this.createEngine();\n await this.createTsConfig();\n await this.createGitIgnore();\n await this.createProjectYaml();\n await this.createProjectReadme();\n await this.createToYargs();\n await this.createBin();\n await this.createIndexHtml();\n await this.createRollup();\n await this.createPackageJSON();\n\n if (this.#buildMode) {\n await this.runBuildScripts();\n\n if (this.#deployMode)\n await this.deploy();\n }\n }\n\n await this._cache_set(this.#buildKey, { status: \"COMPLETED\" });\n }\n catch (error) {\n await this._cache_set(this.#buildKey, { status: \"FAILED\", message: error.message || error });\n throw error;\n }\n }\n}\n\nmodule.exports = Builder;","const fs = require('node:fs');\nconst path = require('node:path');\n\nfunction findNodeModules({ baseDir = __dirname }) {\n let currentDir = baseDir;\n\n while (currentDir !== path.parse(currentDir).root) {\n const potentialPath = path.join(currentDir, 'node_modules');\n\n if (fs.existsSync(potentialPath)) {\n return potentialPath;\n }\n\n currentDir = path.dirname(currentDir);\n }\n\n return null;\n}\n\nmodule.exports = findNodeModules;","// #!/usr/bin/env node\nconst cwd = process.cwd();\nconsole.log(`cwd: ${cwd}`);\n\n// fnet env\nrequire('@flownet/lib-load-fnet-config')({\n name: [\"redis\"],\n dir: cwd\n});\n\nconst path = require('path');\nconst yargs = require('yargs/yargs');\nconst { hideBin } = require('yargs/helpers');\nconst fs = require('fs');\nconst YAML = require('yaml');\nconst shell = require('shelljs');\n\nconst flownetRenderTemplatesDir = require('@flownet/lib-render-templates-dir');\nconst Builder = require('./lib-builder');\nconst nodeModulesDir = require('./find-node-modules')({ baseDir: __dirname });\nprocess.env.PATH = `${nodeModulesDir}/.bin:${process.env.PATH}`;\n\nyargs(hideBin(process.argv))\n .command('create', 'Create flow node project', (yargs) => {\n return yargs\n .option('name', { type: 'Project name', demandOption: true });\n }, async (argv) => {\n try {\n const templateDir = path.resolve(nodeModulesDir, '@flownet/template-node-library/project');\n const outDir = path.resolve(cwd, argv.name);\n if (!fs.existsSync(outDir)) fs.mkdirSync(outDir);\n\n await flownetRenderTemplatesDir({\n dir: templateDir,\n outDir,\n context: argv\n });\n\n let shellResult = shell.exec(`fnode build`, { cwd: outDir });\n if (shellResult.code !== 0) throw new Error('Failed to build project.');\n\n \n if (shell.which('git')) {\n shellResult = shell.exec(`git init`, { cwd: outDir });\n if (shellResult.code !== 0) throw new Error('Failed to initialize git.');\n }\n\n console.log('Creating project succeeded!');\n\n process.exit(0);\n } catch (error) {\n console.log('Initialization failed!', error);\n process.exit(1);\n }\n })\n .command('build', 'Build flow node project', (yargs) => {\n return yargs\n .option('id', { type: 'string' })\n .option('buildId', { type: 'string', alias: 'bid' })\n .option('mode', { type: 'string', alias: 'm', default: \"build\", choices: ['all', 'file', 'build', 'deploy', 'bpmn'] })\n ;\n }, async (argv) => {\n try {\n const context = await createContext(argv);\n const builder = new Builder(context);\n await builder.init();\n await builder.build();\n\n console.log('Building library succeeded!');\n process.exit(0);\n } catch (error) {\n console.log('Building library failed!', error);\n process.exit(1);\n }\n })\n .command('npm [commands..]', 'npm - bridge', (yargs) => {\n return yargs\n .option('id', { type: 'string' });\n }, async (argv) => {\n try {\n const context = await createContext(argv);\n const { projectDir } = context;\n\n const commands = argv.commands || [];\n const flags = Object.keys(argv)\n .filter(key => key !== '_' && key !== '$0' && key !== 'commands' && key !== 'id' && typeof argv[key] !== 'object')\n .map(key => `--${key}=${argv[key]}`)\n .join(' ');\n\n const command = `npm ${commands.join(' ')} ${flags}`;\n\n shell.exec(command, { cwd: projectDir });\n process.exit(0);\n } catch (error) {\n console.error(error);\n process.exit(1);\n }\n })\n .command('node [commands..]', 'node - bridge', (yargs) => {\n return yargs\n .option('id', { type: 'string' });\n }, async (argv) => {\n try {\n const context = await createContext(argv);\n const { projectDir } = context;\n\n const commands = argv.commands || [];\n const flags = Object.keys(argv)\n .filter(key => key !== '_' && key !== '$0' && key !== 'commands' && key !== 'id' && typeof argv[key] !== 'object')\n .map(key => `--${key}=${argv[key]}`)\n .join(' ');\n\n const command = `node ${commands.join(' ')} ${flags}`;\n\n shell.exec(command, { cwd: projectDir });\n process.exit(0);\n } catch (error) {\n console.error(error);\n process.exit(1);\n }\n })\n .command('serve [commands..]', 'npm run serve - bridge', (yargs) => {\n return yargs\n .option('id', { type: 'string' });\n }, async (argv) => {\n try {\n const context = await createContext(argv);\n const { projectDir } = context;\n\n const commands = argv.commands || [];\n const flags = Object.keys(argv)\n .filter(key => key !== '_' && key !== '$0' && key !== 'commands' && key !== 'id' && typeof argv[key] !== 'object')\n .map(key => `--${key}=${argv[key]}`)\n .join(' ');\n\n const command = `npm run serve ${commands.join(' ')} ${flags}`;\n\n shell.exec(command, { cwd: projectDir });\n process.exit(0);\n } catch (error) {\n console.error(error);\n process.exit(1);\n }\n })\n .command('watch [commands..]', 'npm run watch - bridge', (yargs) => {\n return yargs\n .option('id', { type: 'string' });\n }, async (argv) => {\n try {\n const context = await createContext(argv);\n const { projectDir } = context;\n\n const commands = argv.commands || [];\n const flags = Object.keys(argv)\n .filter(key => key !== '_' && key !== '$0' && key !== 'commands' && key !== 'id' && typeof argv[key] !== 'object')\n .map(key => `--${key}=${argv[key]}`)\n .join(' ');\n\n const command = `npm run watch ${commands.join(' ')} ${flags}`;\n\n shell.exec(command, { cwd: projectDir });\n process.exit(0);\n } catch (error) {\n console.error(error);\n process.exit(1);\n }\n })\n .demandCommand(1, 'You need at least one command before moving on')\n .help()\n .argv;\n\nasync function createContext(argv) {\n if (argv.id) {\n return {\n id: argv.id,\n buildId: argv.buildId,\n mode: argv.mode,\n protocol: argv.protocol || \"ac:\",\n templateDir: path.resolve(nodeModulesDir, './@flownet/template-node-library/default'),\n projectDir: path.resolve(cwd, `./.output/${argv.id}`),\n coreDir: path.resolve(nodeModulesDir, './@flownet/template-node-library/core'),\n };\n } else {\n const project = await loadLocalProject();\n return {\n buildId: argv.buildId,\n mode: argv.mode,\n protocol: argv.protocol || \"local:\",\n templateDir: path.resolve(nodeModulesDir, './@flownet/template-node-library/default'),\n coreDir: path.resolve(nodeModulesDir, './@flownet/template-node-library/core'),\n projectDir: path.resolve(project.projectDir, `./target`),\n projectSrcDir: path.resolve(project.projectDir, `./src`),\n project\n };\n }\n}\n\nasync function loadLocalProject() {\n const projectFilePath = path.resolve(cwd, 'node.yaml');\n if (!fs.existsSync(projectFilePath)) throw new Error('node.yaml file not found in current directory.');\n\n const projectFileContent = fs.readFileSync(projectFilePath, 'utf8');\n const projectFileParsed = YAML.parse(projectFileContent);\n const projectDir = path.dirname(projectFilePath);\n\n const libraryAtom = {\n doc: {\n ...projectFileParsed,\n \"content-type\": \"javascript\",\n \"language\": \"js\"\n },\n fileName: \"index\"\n };\n\n const result = {\n libraryAtom,\n projectDir,\n projectFilePath,\n projectFileContent,\n projectFileParsed\n };\n\n // Load devops file\n const devopsFilePath = path.resolve(projectDir, 'node.devops.yaml');\n if (fs.existsSync(devopsFilePath)) {\n const devopsFileContent = fs.readFileSync(devopsFilePath, 'utf8');\n const devopsFileParsed = YAML.parse(devopsFileContent);\n result.devops = {\n filePath: devopsFilePath,\n fileContent: devopsFileContent,\n doc: {\n ...devopsFileParsed,\n },\n type: \"library.deploy\",\n save: async () => {\n fs.writeFileSync(result.devops.filePath, YAML.stringify(result.devops.doc));\n }\n };\n }\n\n const readmeFilePath = path.resolve(projectDir, 'node.readme.md');\n if (fs.existsSync(readmeFilePath)) {\n const readmeFileContent = fs.readFileSync(readmeFilePath, 'utf8');\n result.readme = {\n filePath: readmeFilePath,\n fileContent: readmeFileContent,\n doc: {\n content: readmeFileContent,\n \"content-type\": \"markdown\",\n },\n type: \"wiki\"\n };\n }\n\n return result;\n}"],"names":["require$$0","axios","require$$1","cloneDeep","merge","require$$2","semver","path","require$$4","fs","shell","require$$3","require$$5","require$$6","require$$8","require$$9","require$$11","require$$13","require$$14","require$$20","Builder","require$$7"],"mappings":"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"}