@fnet/cli 0.74.2 → 0.74.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builder/lib-cli.js +1 -1
- package/dist/builder/schemas/to-npm.yaml +14 -0
- package/dist/builder/wf-cli.js +1 -1
- package/dist/index.js +1 -1
- package/dist/schemas/to-npm.yaml +14 -0
- package/package.json +89 -89
- package/readme.md +49 -49
package/dist/builder/lib-cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("child_process"),t=require("@fnet/config"),n=require("path"),r=require("yargs/yargs"),a=require("fs"),o=require("yaml"),i=require("shelljs"),s=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),p=require("@fnet/shell-flow"),l=require("@flownet/lib-render-templates-dir"),d=require("node:fs"),u=require("node:path"),m=require("node:os"),f=require("nunjucks"),g=require("redis"),y=require("@flownet/lib-is-redis-online"),h=require("nanoid"),w=require("@flownet/lib-atom-api-js"),v=require("axios"),b=require("qs"),_=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),D=require("@fnet/npm-list-versions"),k=require("@fnet/npm-pick-versions"),x=require("object-hash"),P=require("ajv/dist/2020"),S=require("ajv/dist/standalone"),A=require("ajv-formats"),E=require("@fnet/auto-conda-env"),T=require("@fnet/shell"),$=require("semver"),I=require("@fnet/up-list-files"),O=require("@node-red/util"),C=require("@flownet/lib-to-ios-app"),R=require("lodash.clonedeep"),M=require("@flownet/lib-to-macos-app"),F=require("@flownet/lib-to-electron"),q=require("@flownet/lib-to-webos"),N=require("@flownet/lib-to-nextjs"),L=require("@flownet/lib-to-docker"),U=require("form-data"),z=require("@fnet/to-rust"),B=require("@fnet/to-pyip"),J=require("@flownet/lib-parse-node-url"),W=require("@fnet/list-files"),K=require("chalk");function G(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var H,X,Y,V,Z,Q,ee,te,ne,re,ae,oe,ie,se,ce,pe,le,de,ue,me,fe,ge,ye,he,we,ve,be,_e,je,De,ke,xe,Pe,Se,Ae,Ee,Te,$e,Ie,Oe,Ce,Re,Me,Fe,qe,Ne,Le,Ue,ze,Be,Je,We,Ke,Ge,He,Xe,Ye,Ve,Ze,Qe,et,tt,nt,rt,at,ot,it,st,ct,pt,lt,dt,ut,mt,ft,gt,yt,ht,wt,vt,bt,_t,jt,Dt,kt,xt,Pt,St,At,Et,Tt,$t,It,Ot,Ct,Rt,Mt,Ft,qt,Nt,Lt,Ut,zt,Bt,Jt,Wt,Kt,Gt,Ht,Xt,Yt,Vt={};function Zt(){if(Q)return Z;Q=1;const e=_;return Z=({feature:t,features:n,packageDevDependencies:r})=>{const{name:a,packages:o,options:i,extraCheck:s,explicit:c}=t,p=`${a}_enabled`,l=n.rollup_output||{},d=Object.keys(l);let u=i||{};const m=n[a]?.options;m&&(u=e(u,m));const f=!n[a]||!1===n[a]?.enabled;d.forEach((e=>{const t=n.rollup_output[e];if(t){if(Reflect.has(t,a)){if(f||!t[a]||!1===t[a]?.enabled)return void delete t[a];!0===t[a]&&(t[a]={enabled:!0,options:u})}else{if(f||c||!1===n[p])return;t[a]={enabled:!0}}t[a]=t[a]||{},t[a].options={...u,...t[a].options}}}));let g=d.some((e=>!0===n.rollup_output[e][a]?.enabled));s&&(g=s()&&g),n[p]=g,g&&o.forEach((e=>r.push({package:e[0],version:e[1]})))}}function Qt(){if(Se)return Pe;Se=1;const e=_,t=d,n=u,r=j,a=function(){if(te)return ee;te=1;const e=Zt();return ee=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:a,packageDevDependencies:r})},ee}(),o=function(){if(re)return ne;re=1;const e=Zt();return ne=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:a,packageDevDependencies:r})},ne}(),i=function(){if(oe)return ae;oe=1;const e=Zt();return ae=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:a,packageDevDependencies:r})},ae}(),s=function(){if(se)return ie;se=1;const e=Zt();return ie=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:a,packageDevDependencies:r})},ie}(),c=function(){if(pe)return ce;pe=1;const e=Zt();return ce=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:a,packageDevDependencies:r})},ce}(),p=function(){if(de)return le;de=1;const e=Zt();return le=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:a,packageDevDependencies:r})},le}(),l=function(){if(me)return ue;me=1;const e=Zt();return ue=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:a,packageDevDependencies:r})},ue}(),m=function(){if(ge)return fe;ge=1;const e=Zt();return fe=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:a,packageDevDependencies:r})},fe}(),f=function(){if(he)return ye;he=1;const e=Zt();return ye=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:a,packageDevDependencies:r})},ye}(),g=function(){if(ve)return we;ve=1;const e=Zt();return we=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:a,packageDevDependencies:r})},we}(),y=function(){if(_e)return be;_e=1;const e=Zt();return be=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:a,packageDevDependencies:r})},be}(),h=function(){if(De)return je;De=1;const e=Zt();return je=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features,o={};!0===a.app?.enabled&&(o.targets=o.targets||[],o.targets.push({src:"./src/app/index.html",dest:a.app.dir}),Reflect.has(a.app,"copy")||Reflect.has(a,"copy")||(a.copy=!0)),e({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:o},features:a,packageDevDependencies:r})},je}(),w=function(){if(xe)return ke;xe=1;const e=Zt();return ke=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features,o=a.css&&!1!==a.css.enabled;let i=[];o&&(i.push(["rollup-plugin-postcss","^4"]),i.push(["sass","^1.66"]),(a.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":i.push(["postcss-import","^15"]);break;case"postcss-url":i.push(["postcss-url","^10"]);break;case"postcss-preset-env":i.push(["postcss-preset-env","^9"]);break;case"autoprefixer":i.push(["autoprefixer","^10"]);break;case"cssnano":i.push(["cssnano","^6"])}}))),e({feature:{name:"css",packages:i},features:a,packageDevDependencies:r})},ke}();function v({dir:e,name:r="index"}){let a=n.resolve(e,`./${r}.tsx`);if(t.existsSync(a)||(a=n.resolve(e,`./${r}.ts`)),t.existsSync(a)||(a=n.resolve(e,`./${r}.jsx`)),t.existsSync(a)||(a=n.resolve(e,`./${r}.js`)),!t.existsSync(a))return{};const o=a,i=n.extname(a);return{file:o,ext:i,ts:".ts"===i||".tsx"===i,name:r}}return Pe=async t=>{const{atom:d,context:u,setProgress:b}=t;b("Initializing features..."),d.doc.features=d.doc.features||{};const _=d.doc.features;_.project=_.project||{},_.project.format=_.project.format||_.project_format||"esm",_.project_format=_.project.format,_.dts_enabled=!0===_.dts||void 0!==_.dts&&!1!==_.dts,_.hasOwnProperty("all_parsed_imports")||(_.all_parsed_imports=!0);const j=n.resolve(u.project.projectDir),D=v({dir:n.resolve(j,"./app")});if(D.file){b("Parsing app entry imports...");let e=await r({file:D.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));_.app_uses_jsx=t,_.app_has_entry=!0,e=await r({file:D.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),_.app_entry_uses_jsx=t,_.app_entry_is_ts=D.ts,_.app_entry_ext=D.ext}const k=v({dir:n.resolve(j,"./cli")});if(k.file){b("Parsing cli entry imports...");let e=await r({file:k.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));_.cli_uses_jsx=t,_.cli_has_entry=!0,e=await r({file:k.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),_.cli_entry_uses_jsx=t,_.cli_entry_is_ts=k.ts,_.cli_entry_ext=k.ext}if("workflow.lib"===d.type){const e=v({dir:n.resolve(j,"./src")});if(e.file){b("Parsing src entry imports...");let t=await r({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));_.src_uses_jsx=n,_.src_has_entry=!0,t=await r({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),_.src_entry_uses_jsx=n,_.src_entry_is_ts=e.ts,_.src_entry_ext=e.ext}}const x=Reflect.has(_,"app_entry_uses_jsx")?!0===_.app_entry_uses_jsx:!0===_.src_entry_uses_jsx,P=Reflect.has(_,"cli_entry_uses_jsx")?!0===_.cli_entry_uses_jsx:!0===_.src_entry_uses_jsx;_.form_enabled=!0===d.doc.form||!0===d.doc.form?.enabled||!0===_.form||!0===_.form?.enabled,_.multiple_enabled=_.multiple_enabled||!0===_.multiple||!0===_.multiple?.enabled,!1===_.app?_.app={enabled:!1}:!0===_.app?_.app={enabled:!0,extend:!0===_.app_has_entry,export:!0,react:x}:_.app={enabled:!0,extend:!0===_.app_has_entry,export:!0,react:x,..._.app||{}},_.app.enabled=!0===_.app.enabled&&(!0===d.doc.features.form_enabled||!0===_.app.extend||!0===_.app.enabled),_.app.format=_.app.format||"esm",_.app.folder=_.app.folder||_.app.format||"default",!1===_.cli?_.cli={enabled:!1}:!0===_.cli?_.cli={enabled:!0,extend:!0===_.cli_has_entry,export:!0,react:P}:_.cli={enabled:!0,extend:!0===_.cli_has_entry,export:!0,react:P,..._.cli||{}},_.cli.enabled=!0===_.cli.enabled&&(!1===d.doc.features.form_enabled||!0===_.cli.extend||!0===_.cli.enabled),_.cli.format=_.cli.format||"esm",_.cli.folder=_.cli.folder||_.cli.folder||"esm",_.cli.node_options=_.cli.node?.options||_.cli.node_options||"",_.json=_.cli.enabled||_.json;const S={cjs:{format:"cjs",context:_.form_enabled?"window":"global",babel:!0===_.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==_.cjs,copy:!1},esm:{format:"esm",context:_.form_enabled?"window":"global",babel:!0===_.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!1!==_.esm,copy:!0},iife:{format:"iife",context:_.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==_.iife,terser:!0,copy:!1}};!0===_.webos&&(S.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===_.electron&&(S.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===_.nextjs&&(S.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===_.ios&&(S.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===_.macos&&(S.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===_.app.enabled&&(_.app.dir=`./dist/app/${_.app.folder}`,S.app={format:_.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:_.app.dir,terser:!0,output_exports:!1===_.app.export?"none":"auto"}),!0===_.cli.enabled&&(_.cli.dir=`./dist/cli/${_.cli.folder}`,S.cli={format:_.cli.format,context:"global",babel:!0===_.src_uses_jsx||!0===_.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:_.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===_.cli.export?"none":"auto"});const A={server:".",startPath:`${n.normalize(_.app.dir||".")}`,files:[n.normalize("./dist/**/*")],cors:!0,open:!1};_.babel_options=e({targets:{browsers:"last 9 versions, not dead",node:"18"}},_.babel_options||_.babel?.options),_.browsersync_options=e(A,_.browsersync_options||_.browsersync?.options||{}),_.replace_options=e({},_.replace_options||_.replace?.options||{}),Reflect.has(_.browsersync_options,"proxy")&&delete _.browsersync_options.server,_.rollup=_.rollup||{},_.rollup_output=e(S,_.rollup_output||_.rollup?.output||{}),_.preact_enabled=!0===_.preact||_.preact&&!1!==_.preact?.enabled;let E=Object.keys(S);for(const t of E){const n=S[t];n&&(!1!==_.rollup[t]?(n.babel_options=n.babel_options||_.babel_options,n.browsersync_options=e(_.browsersync_options,n.browsersync_options),n.replace_options=e(_.replace_options,n.replace_options),_.preact_enabled&&(n.alias_enabled=!0,n.alias=n.alias||{},n.alias.entries=n.alias.entries||{},n.alias.entries.react="preact/compat",n.alias.entries["react-dom"]="preact/compat"),_.form_enabled&&(n.babel=!0)):delete _.rollup_output[t])}E=Object.keys(_.rollup_output),_.babel_enabled=E.some((e=>!0===_.rollup_output[e].babel)),_.browser_enabled=E.some((e=>!0===_.rollup_output[e].babel)),_.browsersync_enabled=!1!==_.browsersync&&E.some((e=>!0===_.rollup_output[e].browsersync)),_.browsersync_enabled=_.browsersync_enabled&&_.app.enabled,_.dependency_auto_enabled=!1!==_.dependency_auto&&!1!==_.dependency_auto?.enabled,_.npm_install_flags=_.npm_install_flags||"",_.react_version=_.react_version||_.react?.version||18,w(t),h(t),y(t),g(t),f(t),l(t),m(t),p(t),c(t),s(t),i(t),a(t),o(t)},Pe}function en(){if($e)return Te;$e=1;const e=D;return Te=async({atom:t,packageDependencies:n,packageDevDependencies:r,setProgress:a})=>{if(a("Initializing dependencies"),"workflow"===t.type&&(n.push({package:"get-value",version:"^3"}),n.push({package:"set-value",version:"^4"})),t.doc.features.form_enabled&&t.doc.features.dependency_auto_enabled){let r="^18.2";a("Fetching React versions");r=`^${(await e({name:"react",groupBy:{major:!0}})).find((e=>e[0]===t.doc.features.react_version.toString()))[0]}`,n.push({package:"react",version:r}),n.push({package:"react-dom",version:r}),"workflow"===t.type&&(n.push({package:"@flownet/react-app",version:"^0.1"}),n.push({package:"@flownet/react-app-state",version:"^0.1"}))}t.doc.features.preact_enabled&&n.push({package:"preact",version:"^10"}),!0===t.doc.features.cli.enabled&&(n.push({package:"@fnet/args",version:"^0.1"}),r.push({package:"ajv",version:"^8"}),t.doc.features.cli.fargs&&!1!==t.doc.features.cli.fargs?.enabled&&n.push({package:"@fnet/config",version:"0.2.21"})),t.doc.features.render&&!1!==t.doc.features.render.enabled&&r.push({package:"@flownet/lib-render-templates-dir",version:"0.1.17"}),r.push({package:"@babel/core",version:"^7"}),r.push({package:"@rollup/plugin-commonjs",version:"^28"}),r.push({package:"@rollup/plugin-node-resolve",version:"^15"}),r.push({package:"@rollup/plugin-replace",version:"^6"}),r.push({package:"rollup",version:"^4"}),t.doc.features.dts_enabled&&r.push({package:"rollup-plugin-dts",version:"^6"}),r.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),r.push({package:"@rollup/plugin-alias",version:"^5"}),r.push({package:"fs-extra",version:"^11"}),t.doc.features.babel_enabled&&(r.push({package:"@rollup/plugin-babel",version:"^6"}),r.push({package:"@babel/preset-env",version:"^7"}),r.push({package:"@babel/preset-react",version:"^7"}),t.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":r.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":r.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":r.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":r.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":r.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),r.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),t.doc.features.browsersync_enabled&&r.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})},Te}function tn(){if(Re)return Ce;Re=1;const e=d,t=u,n=l;return Ce=async({atom:r,setProgress:a,context:o,packageDependencies:i})=>{if(!0!==r.doc.features.app.enabled)return;await a({message:"Creating app folder"});const s={atom:r,packageDependencies:i,ts:Date.now()},c=o.templateDir,p=t.resolve(o.projectDir,"src/app");e.existsSync(p)||e.mkdirSync(p,{recursive:!0});let l=["index.js.njk"];!1!==r.doc.features.app.html&&l.push("index.html.njk"),await n({pattern:l,dir:t.resolve(c,"src/app"),outDir:p,context:s})},Ce}function nn(){if(Fe)return Me;Fe=1;const e=k,t=x,n=d,r=u;return Me=async({projectDir:a,name:o,setProgress:i,count:s=1})=>{let c;const p=t(["npm-pick-versions",o,s]),l=r.join(a,".cache"),d=r.join(l,p+".json");return n.existsSync(d)?(i&&i(`Picking npm version of ${o} from cache ...`),c=JSON.parse(n.readFileSync(d,"utf8"))):(i&&i(`Picking npm version of ${o} ...`),c=await e({name:o,count:s}),n.mkdirSync(l,{recursive:!0}),n.writeFileSync(d,JSON.stringify(c),"utf8")),c}}function rn(){if(Ne)return qe;Ne=1;const e=f,t=d,n=u,r=j,a=nn();return qe=async({atom:o,context:i,packageDependencies:s,packageDevDependencies:c,setProgress:p})=>{await p({message:"Creating package.json."});s.filter((e=>!0===e.dev)).forEach((e=>{c.find((t=>t.package===e.package))||c.push(e);const t=s.findIndex((t=>t.package===e.package));s.splice(t,1)}));const l=s.find((e=>"react"===e.package)),d=s.find((e=>"react-dom"===e.package));l&&!d?s.push({package:"react-dom",version:l.version}):l&&d&&(d.version=l.version),l&&o.doc.features.react_version>=17&&(s.find((e=>"@emotion/react"===e.package))||s.push({package:"@emotion/react",version:"^11"}),s.find((e=>"@emotion/styled"===e.package))||s.push({package:"@emotion/styled",version:"^11"}));const u=[];!0===o.doc.features.app.enabled&&u.push({file:n.resolve(i.projectDir,"src/app/index.js"),dev:!1!==o.doc.features.app.dev}),!0===o.doc.features.cli.enabled&&u.push({file:n.resolve(i.projectDir,"src/cli/index.js"),dev:!1!==o.doc.features.cli.dev});for await(const e of u){const n=e.file;if(!t.existsSync(n))throw new Error(`App file not found: ${n}`);const l=await r({file:n,recursive:!0}),d=!0===o.doc.features.all_parsed_imports?l.all:l.required;for await(const t of d){if("npm"!==t.type)continue;if(s.find((e=>e.package===t.package)))continue;if(c.find((e=>e.package===t.package)))continue;const n=await a({name:t.package,projectDir:i.projectDir,setProgress:p});(!0===e.dev?c:s).push({package:t.package,subpath:t.subpath,version:n.minorRange,type:"npm"})}}const m={atom:o,packageDependencies:s,packageDevDependencies:c},f=i.templateCommonDir,g=e.compile(t.readFileSync(n.resolve(f,"package.json.njk"),"utf8"),e.configure(f)).render(m),y=i.projectDir,h=n.resolve(y,"package.json");t.writeFileSync(h,g,"utf8");const w=n.resolve(i.project.projectDir,"fnet");if(t.existsSync(w)){const e=n.resolve(i.projectDir,"fnet");t.existsSync(e)||t.mkdirSync(e);const r=t.readdirSync(w);for(const a of r){const r=n.resolve(w,a);if(!t.lstatSync(r).isFile())continue;const o=n.resolve(e,a);t.copyFileSync(r,o)}}},qe}function an(){if(Ue)return Le;Ue=1;const e=d,t=u,n=l;return Le=async({atom:r,setProgress:a,context:o,packageDependencies:i})=>{if(!0!==r.doc.features.cli.enabled)return;await a({message:"Creating cli."});const s={atom:r,packageDependencies:i},c=o.templateDir,p=t.resolve(o.projectDir,"src/cli");e.existsSync(p)||e.mkdirSync(p,{recursive:!0}),await n({pattern:["index.js.njk"],dir:t.resolve(c,"src/cli"),outDir:p,context:s})},Le}function on(){if(We)return Je;We=1;const e=d,t=u,n=f,r=j;return Je=async({atom:a,setProgress:o,context:i,packageDependencies:s})=>{await o({message:"Creating rollup file."});const c={atom:a,packageDependencies:s},p=t.resolve(i.projectDir,"src","default/index.js");if(!e.existsSync(p))throw new Error(`Entry file not found: ${p}`);const l=(await r({file:p,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),d=a.doc.features.rollup_output,u=Object.keys(d);for(let e=0;e<u.length;e++){const t=d[u[e]];if(!0===t.browser&&l.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(l.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<l.length;e++){const n=l[e];t.alias.entries[n]=`node:${n}`,t.alias.entries[`node:${n}`]=n}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(l)}}const m=i.templateCommonDir;let f=n.compile(e.readFileSync(t.resolve(m,"rollup.config.mjs.njk"),"utf8"),n.configure(m)).render(c);const g=i.projectDir;let y=t.resolve(g,"rollup.config.mjs");e.writeFileSync(y,f,"utf8")},Je}function sn(){if(Ge)return Ke;Ge=1;const e=d,t=u,n=f,r=P,a=S,o=A;return Ke=async({atom:i,setProgress:s,context:c,njEnv:p})=>{if(!0!==i.doc.features.cli.enabled)return;await s({message:"Creating yargs."});let l={};if(l=i.doc.input?i.doc.input:{type:"object",properties:{},required:[]},i.doc.features.cli.fargs&&!1!==i.doc.features.cli.fargs?.enabled){const e=i.doc.features.cli.fargs,t={type:"string",description:"Config name to load args",hidden:!1},n={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(e,"default")&&(t.default=e.default),l.properties&&(l.properties.fargs=t,l.properties.ftag=n)}const d={options:l,imports:[],atom:i},u=c.templateDir,m=n.compile(e.readFileSync(t.resolve(u,"src/default/to.args.js.njk"),"utf8"),p).render(d),f=c.projectDir,g=t.resolve(f,"src/default/to.args.js");e.writeFileSync(g,m,"utf8");const y=new r({allErrors:!0,useDefaults:!0,formats:{email:!0},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});o(y);const h=y.compile(l),w=a(y,h);e.writeFileSync(t.resolve(f,"src/default/validate_input.js"),w,"utf8")},Ke}function cn(){if(Xe)return He;Xe=1;const e=d,t=u,n=f;return He=async({atom:r,setProgress:a,context:o,packageDependencies:i})=>{await a({message:"Creating .gitignore"});const s={atom:r,packageDependencies:i},c=o.templateCommonDir,p=n.compile(e.readFileSync(t.resolve(c,".gitignore.njk"),"utf8"),n.configure(c)).render(s),l=o.projectDir,d=t.resolve(l,".gitignore");e.writeFileSync(d,p,"utf8")},He}function pn(){if(Ve)return Ye;Ve=1;const e=d,t=u,n=f;return Ye=async({atom:r,setProgress:a,context:o,packageDependencies:i})=>{await a({message:"Creating tsconfig.json."});const s={atom:r,packageDependencies:i},c=o.templateCommonDir,p=n.compile(e.readFileSync(t.resolve(c,"tsconfig.json.njk"),"utf8"),n.configure(c)).render(s),l=o.projectDir,d=t.resolve(l,"tsconfig.json");e.writeFileSync(d,p,"utf8")},Ye}function ln(){if(Qe)return Ze;Qe=1;const e=f,t=d,n=u,r=s;return Ze=async({atom:a,context:o,setProgress:i,Atom:s})=>{const c="readme.md",p=`Creating ${c}`;if(await i({message:p}),o.project?.readme){const a=o.projectDir,i={content:o.project.readme.doc.content},s=n.resolve(o.project.projectDir,"fnet/how-to.md");if(t.existsSync(s)){const e=t.readFileSync(s,"utf8");i.howto=e}const p=n.resolve(o.project.projectDir,"fnet/input.yaml");if(t.existsSync(p)){const e=await r({file:p,tags:o.tags});i.input=e.content}const l=o.templateCommonDir,d=e.compile(t.readFileSync(n.resolve(l,`${c}.njk`),"utf8"),e.configure(l)).render(i),u=n.resolve(a,`${c}`);t.writeFileSync(u,d,"utf8")}else if(a.id){const r=await s.first({type:"wiki",parent_id:a.id});if(!r||"markdown"!==r.doc?.["content-type"])return;const{content:i,...p}=r.doc,l={content:i},d=o.templateCommonDir,u=e.compile(t.readFileSync(n.resolve(d,`${c}.njk`),"utf8"),e.configure(d)).render(l),m=o.projectDir,f=n.resolve(m,`${c}`);t.writeFileSync(f,u,"utf8")}},Ze}function dn(){if(tt)return et;tt=1;const e=n,t=p;return et=async({setProgress:n,context:r})=>{const a=r.projectDir;await n({message:"Prettifiying source files."});let o=e.join("src","**","*");await t({commands:{steps:[`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`],wdir:a}})}}function un(){if(rt)return nt;rt=1;const e=i;return nt=async({atom:t,setProgress:n,context:r})=>{if(!t.doc.features.dts_enabled)return;const a=r.projectDir;await n({message:"Creating .d.ts"});if(0!==e.exec("tsc",{cwd:a}).code)throw new Error("Couldnt create .d.ts files.")},nt}function mn(){if(ot)return at;ot=1;const e=i;return at=async({setProgress:t,atom:n,context:r})=>{const a=r.projectDir;await t({message:"Installing npm packages."});if(0!==e.exec(`npm install ${n.doc.features.npm_install_flags}`,{cwd:a}).code)throw new Error("Couldnt install npm packages.")},at}function fn(){if(st)return it;st=1;const e=u,t=E,n=l;return it=async r=>{const{setProgress:a,atom:o,context:i}=r;a({message:"Installing Python packages"});const s=i.projectDir,c=await t({pythonVersion:"3.12",packages:[{package:"fnet-import-parser",version:"0.1.9"}]}),{result:p}=await c.runBin("fnet_import_parser",["--entry_file",e.join(s,"src","default","index.py")],{captureName:"result"}),l=JSON.parse(p.items[0].stdout),d=l.required["third-party"]?.map((e=>({package:e.metadata?.package||e.path,version:e.metadata?.version||void 0,channel:e.metadata?.channel||void 0})))||[],u=o.doc.dependencies||[];for(const e of d)u.some((t=>t.package===e.package))||u.push(e);const m=e.join(s,".conda"),f=await t({envDir:m,pythonVersion:o.doc.features.runtime.version||"3.12",packages:u});i.pythonEnv=f,r.packageDependencies=u;const g=o.doc.features.render?.dirs||[];for(const t of g)t.dir=e.resolve(s,t.dir),t.outDir=e.resolve(s,t.outDir),await n(t)},it}function gn(){if(pt)return ct;pt=1;const e=i;return ct=async({setProgress:t,context:n})=>{const r=n.projectDir;await t({message:"Building main project."});if(0!==e.exec("npm run build",{cwd:r}).code)throw new Error("Couldnt build project.")}}function yn(){if(Wt)return Jt;Wt=1;const e=function(){if(dt)return lt;dt=1;const e=T,n=t;return lt=async({setProgress:t,context:r,deploymentProject:a,deploymentProjectTarget:o,buildId:i})=>{await t({message:"Deploying it as gitlab project."});const s=r.projectDir;let c="fnet-to-gitlab";const p=o.params.config||"gitlab",l=await n({name:p,dir:r.projectDir,tags:r.tags});if(!l)throw new Error(`Couldnt load config ${p}`);const{data:d}=l.data;c+=` --projectGroupId=${d.projectGroupId}`,c+=` --projectPath='${s}'`,c+=` --projectName='${o.params.name}'`,c+=` --projectBranch='${o.params.branch||"main"}'`,c+=` --gitlabHost='${d.gitlabHost}'`,c+=` --gitlabToken='${d.gitlabToken}'`,c+=` --gitlabUsername='${d.gitlabUsername}'`,c+=` --gitlabUserEmail='${d.gitlabUserEmail}'`,!0!==o.dryRun&&(await e({cmd:c}),a.isDirty=!0)}}(),r=function(){if(mt)return ut;mt=1;const e=d,n=u,r=$,a=T,o=t;return ut=async({setProgress:t,context:i,deploymentProject:s,deploymentProjectTarget:c,registerToPackageManager:p,yamlTarget:l})=>{await t({message:"Deploying it as gcs package."});const d=i.projectDir,u=n.resolve(d,"package.json"),m=e.readFileSync(u),f=JSON.parse(m);f.name=c.params.name,f.version=r.inc(c.version,"patch"),delete f.scripts,delete f.devDependencies,e.writeFileSync(u,JSON.stringify(f,null,"\t"));const{file:g,data:y}=await o({name:c.config||"gcs",dir:i.projectDir,tags:i.tags});let h="fnet-files-to-gcs";h+=` --projectId='${y.env.GCS_PROJECT_ID}'`,h+=` --bucketName='${y.env.GCS_BUCKET_NAME}'`,h+=` --keyFilename='${n.resolve(n.dirname(g),y.env.GCS_UPLOADER_KEY_FILE)}'`,h+=` --dir='${d}'`,h+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",h+=` --destDir='${f.name}/${f.version}'`,h+=" --metadata.cacheControl='public, max-age=31536000, immutable'",y.env.DOMAIN&&(h+=` --domain='${y.env.DOMAIN}'`),!0!==c.dry_run&&!0!==c.params.dry_run||(h+=" --dryRun"),await a({cmd:h}),e.writeFileSync(u,m),!0!==c.dryRun&&(s.isDirty=!0,c.version=f.version,l.set("version",f.version),await p({target:c,packageJSON:f}))}}(),s=function(){if(gt)return ft;gt=1;const e=d,n=u,r=$,a=i,s=t,p=I,l=c,m=o;return ft=async({atom:t,setProgress:o,context:i,deploymentProject:c,deploymentProjectTarget:d,yamlTarget:u})=>{await o({message:"Deploying it as npm package."});const f=i.projectDir,g=n.resolve(f,"package.json"),y=e.readFileSync(g),h=JSON.parse(y);h.name=d.params.name,h.version=r.inc(d.version,"patch");const w=d.params.bin?.name||d.params.bin;!1!==d.params.bin?.enabled&&w&&"string"==typeof w&&(h.bin={[w]:"dist/cli/esm/index.js",[t.doc.name]:"dist/cli/esm/index.js"}),delete h.scripts,delete h.devDependencies,h.scripts={serve:"npx serve ."},e.writeFileSync(g,JSON.stringify(h,null,"\t"));const v=d.config||"npm";let b=(await s({name:v,dir:i.projectDir,tags:i.tags,optional:!0}))?.data;if(!b){const t=p({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===t.length)throw new Error("Couldnt find schema to create npm config");const r=await l({schema:t[0],tags:i.tags}),a=i.project.projectDir,o=n.resolve(a,".fnet");e.existsSync(o)||e.mkdirSync(o),e.writeFileSync(n.resolve(o,`${v}.fnet`),m.stringify(r)),b=r}if(e.writeFileSync(n.resolve(f,".npmrc"),`//registry.npmjs.org/:_authToken=${b.env.NPM_TOKEN}`),!0!==d.dryRun){if(0!==a.exec("npm publish --access public",{cwd:f}).code)throw new Error("Couldnt publish to npm");e.writeFileSync(g,y),c.isDirty=!0,d.version=h.version,u.set("version",h.version)}},ft}(),p=function(){if(ht)return yt;ht=1;const e=d,n=u,r=m,a=f,o=O,i=t;return yt=async({atom:t,setProgress:s,context:c,deploymentProject:p,deploymentProjectTarget:l,buildId:d,packageDependencies:u,njEnv:m})=>{await s({message:"Deploying it as node-red flow."});const f=c.projectDir,g=c.templateDir,y="workflow"===t.type?"WF":"LIB";let h;if("simple"===l.deploy.template)h={atom:t,packageDependencies:u,red:{tab:{id:l.deploy.id||o.util.generateId(),label:`${y}/${t.id?t.id:r.hostname()}/${t.name}/${l.deploy.name||l.deploy.template}`},function:{id:o.util.generateId(),name:t.doc.name,initialize:{content:e.readFileSync(n.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:t.doc.bundleName}},inject:{id:o.util.generateId(),...l.params?.inject,payload:"json"===l.params?.inject?.payloadType?`'${JSON.stringify(l.params?.inject?.payload)}'`:l.params?.inject?.payload},debug:{id:o.util.generateId()}}};else if("cronjob"===l.deploy.template){let a=l.params?.schedules?cloneDeep(l.params?.schedules):void 0;a?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),h={atom:t,packageDependencies:u,red:{tab:{id:l.deploy.id||o.util.generateId(),label:`${y}/${t.id?t.id:r.hostname()}/${l.deploy.name||l.deploy.template}`},function:{id:o.util.generateId(),name:t.doc.name,initialize:{content:e.readFileSync(n.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:t.doc.bundleName}},cronjob:{id:o.util.generateId(),schedules:a},debug:{id:o.util.generateId()}}}}else{if("http"!==l.deploy.template)return;h={atom:t,packageDependencies:u,red:{tab:{id:l.deploy.id||o.util.generateId(),label:`${y}/${t.id?t.id:r.hostname()}/${l.deploy.name||l.deploy.template}`},function:{id:o.util.generateId(),name:t.doc.name,initialize:{content:e.readFileSync(n.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:t.doc.bundleName}},httpin:{id:o.util.generateId(),method:l.params.method||"get",url:l.params.url},httpout:{id:o.util.generateId()},debug:{id:o.util.generateId()}}}}let w=a.compile(e.readFileSync(n.resolve(g,`deploy/node-red/${l.deploy.template}.yaml.njk`),"utf8"),m).render(h);if(e.writeFileSync(n.resolve(f,"node-red.yaml"),w),w=yaml.load(w),!0===l.dryRun)return;p.isDirty=!0;const v=(await i({name:c.redConfig||"red",dir:c.projectDir,tags:c.tags}))?.data,b=l.deploy.url||v.env.RED_URL,_={};if(!1!==l.deploy.auth&&(_.Authorization="Bearer "+atomAccessToken),l.deploy.id)!0===l.actions?.delete?(await axios({method:"DELETE",url:`${b}/flow/${l.deploy.id}`,headers:_}),delete l.actions.delete,delete l.deploy.id,l.enabled=!1):await axios({method:"PUT",url:`${b}/flow/${l.deploy.id}`,data:w,headers:_});else{const e=await axios({method:"POST",url:`${b}/flow`,data:w,headers:_});l.deploy.id=e.data.id}},yt}(),l=function(){if(vt)return wt;vt=1;const e=a,r=n,o=t;return wt=async({atom:t,Atom:n,setProgress:a,context:i,packageDependencies:s,deploymentProject:c,deploymentProjectTarget:p})=>{await a({message:"Deploying it as workflow lib."});const l=(await o({name:"atom",dir:i.projectDir,tags:i.tags}))?.data;let d,u,m,f=p.deploy.name.split("/");if(1===f.length)u=l.env.ATOM_LIBRARIES_ID,m=p.deploy.name;else{if(2!==f.length)throw new Error("Wrong name path.");{const e=await n.first({where:{name:f[0],parent_id:l.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");u=e.id,m=f[1]}}if(!0===p.dryRun)return;if(c.isDirty=!0,p.deploy.id){if(d=await n.get({id:p.deploy.id}),!d)return}else{if(d=await n.create({parent_id:u,doc:{name:m,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!d)return;p.deploy.id=d.id}const g=i.projectDir;d.doc.contents=[{content:e.readFileSync(r.resolve(g,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:e.readFileSync(r.resolve(g,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:e.readFileSync(r.resolve(g,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],d.doc.name=m,d.doc.dependencies=s,"workflow.lib"===t.type?d.doc.subtype="library":"workflow"===t.type&&(d.doc.subtype="workflow"),d=await n.update(d,{id:d.id})}}(),g=function(){if(_t)return bt;_t=1;const e=t,n=C,r=R,a=$;return bt=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as ios-app package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},bt}(),y=function(){if(Dt)return jt;Dt=1;const e=t,n=M,r=R,a=$;return jt=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as macos-app package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},jt}(),h=function(){if(xt)return kt;xt=1;const e=t,n=F,r=R,a=$;return kt=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as electron package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},kt}(),w=function(){if(St)return Pt;St=1;const e=t,n=q,r=R,a=$;return Pt=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as webos package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},Pt}(),b=function(){if(Et)return At;Et=1;const e=t,n=N,r=R,a=$;return At=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as nextjs package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},At}(),_=function(){if($t)return Tt;$t=1;const e=t,n=L,r=R,a=$;return Tt=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as docker package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},Tt}(),j=function(){if(Ot)return It;Ot=1;const e=d,n=u,r=$,a=T,o=t,i=v.default;return It=async({setProgress:t,context:s,deploymentProject:c,deploymentProjectTarget:p,yamlTarget:l})=>{await t({message:"Deploying it as fnet package."});const d=s.projectDir,u=n.resolve(d,"package.json"),m=e.readFileSync(u),f=JSON.parse(m);f.name=p.params.name,f.version=r.inc(p.version,"patch"),delete f.scripts,delete f.devDependencies,e.writeFileSync(u,JSON.stringify(f,null,"\t"));const{file:g,data:y}=await o({name:p.config||"fnet-package",dir:s.projectDir,tags:s.tags});if(!y.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${g}`);if(!y.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${g}`);if(!y.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${g}`);const h=`${y.env.ATOM_API_URL}/v1/auth/token`,w=y.env.ATOM_API_USERNAME,v=y.env.ATOM_API_PASSWORD;let b=await i({method:"POST",url:h,data:{username:w,password:v},headers:{"Content-Type":"application/json"}});const _=b.data?.access_token;if(!_)throw new Error(`Invalid access_token from ${h}`);let j="fnet-files-to-gcs";if(j+=` --projectId='${y.env.GCS_PROJECT_ID}'`,j+=` --bucketName='${y.env.GCS_BUCKET_NAME}'`,j+=` --keyFilename='${n.resolve(n.dirname(g),y.env.GCS_UPLOADER_KEY_FILE)}'`,j+=` --dir='${d}'`,j+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",j+=` --destDir='${f.name}/${f.version}'`,j+=" --metadata.cacheControl='public, max-age=31536000, immutable'",y.env.DOMAIN&&(j+=` --domain='${y.env.DOMAIN}'`),!0!==p.dry_run&&!0!==p.params.dry_run||(j+=" --dryRun"),await a({cmd:j}),e.writeFileSync(u,m),!0===p.dryRun)return;c.isDirty=!0,p.version=f.version,l.set("version",f.version);const D=`${y.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(b=await i({method:"POST",url:D,data:{name:f.name,version:f.version,version_domain:y.env.DOMAIN,docs:p.params.docs,configs:p.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${_}`}}),b.data?.error)throw new Error("Failed to publish fnet package.")}}(),D=function(){if(Rt)return Ct;Rt=1;const e=$,n=t,r=v.default;return Ct=async({setProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:i,yamlTarget:s})=>{await t({message:"Deploying it as fnet form."});const{file:c,data:p}=await n({name:i.config||"fnet-form",dir:a.projectDir,tags:a.tags});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${c}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${c}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${c}`);const l=`${p.env.ATOM_API_URL}/v1/auth/token`,d=p.env.ATOM_API_USERNAME,u=p.env.ATOM_API_PASSWORD;let m=await r({method:"POST",url:l,data:{username:d,password:u},headers:{"Content-Type":"application/json"}});const f=m.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${l}`);o.isDirty=!0;const g=e.inc(i.version,"patch");i.params.version=g,i.version=g,s.set("version",g);const y=`${p.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(m=await r({method:"POST",url:y,data:{name:i.params.name,version:i.params.version,docs:i.params.docs,configs:i.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),m.data?.error)throw new Error("Error publishing fnet form.")}}(),k=function(){if(Ft)return Mt;Ft=1;const e=$,n=t,r=v.default,o=a,i=T,s=U;return Mt=async({setProgress:t,context:a,deploymentProject:c,deploymentProjectTarget:p,yamlTarget:l})=>{await t({message:"Deploying it as fnet flow."});const{file:d,data:u}=await n({name:p.config||"fnet-flow",dir:a.project.projectDir,tags:a.tags});if(!u.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${d}`);if(!u.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${d}`);if(!u.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${d}`);const m=`${u.env.ATOM_API_URL}/v1/auth/token`,f=u.env.ATOM_API_USERNAME,g=u.env.ATOM_API_PASSWORD;let y=await r({method:"POST",url:m,data:{username:f,password:g},headers:{"Content-Type":"application/json"}});const h=y.data?.access_token;if(!h)throw new Error(`Invalid access_token from ${m}`);c.isDirty=!0;const w=e.inc(p.version,"patch");p.params.version=w,p.version=w,l.set("version",w);const v=`${u.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(y=await r({method:"POST",url:v,data:{name:p.params.name,version:p.params.version,docs:p.params.docs,configs:p.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`}}),y.data?.error)throw new Error("Error publishing fnet flow.");const b=y.data?.upload.id;let _="fnet-dir-zipper";_+=` --sourceDir='${a.project.projectDir}'`,_+=" -p=**/*",_+=" -g",_+=" --stdout_format=json";const j=await i({cmd:_});if(0!==j.code)throw new Error(j.stderr);const D=JSON.parse(j.stdout).path;let k=new s;k.append("file",o.createReadStream(D));const x=await r.request({method:"POST",maxBodyLength:1/0,url:`${u.env.ATOM_API_URL}/v1/service/upload/single/${b}`,headers:{...k.getHeaders(),Authorization:`Bearer ${h}`},data:k});if(x.data?.error)throw new Error("Error uploading fnet flow.")}}(),x=function(){if(Nt)return qt;Nt=1;const e=$,n=t,r=v.default,o=a,i=T,s=U;return qt=async({setProgress:t,context:a,deploymentProject:c,deploymentProjectTarget:p,yamlTarget:l})=>{await t({message:"Deploying it as fnet node."});const{file:d,data:u}=await n({name:p.config||"fnet-node",dir:a.project.projectDir,tags:a.tags});if(!u.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${d}`);if(!u.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${d}`);if(!u.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${d}`);const m=`${u.env.ATOM_API_URL}/v1/auth/token`,f=u.env.ATOM_API_USERNAME,g=u.env.ATOM_API_PASSWORD;let y=await r({method:"POST",url:m,data:{username:f,password:g},headers:{"Content-Type":"application/json"}});const h=y.data?.access_token;if(!h)throw new Error(`Invalid access_token from ${m}`);c.isDirty=!0;const w=e.inc(p.version,"patch");p.params.version=w,p.version=w,l.set("version",w);const v=`${u.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(y=await r({method:"POST",url:v,data:{name:p.params.name,version:p.params.version,docs:p.params.docs,configs:p.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`}}),y.data?.error)throw new Error("Error publishing fnet node.");const b=y.data?.upload.id;let _="fnet-dir-zipper";_+=` --sourceDir='${a.project.projectDir}'`,_+=" -p=**/*",_+=" -g",_+=" --stdout_format=json";const j=await i({cmd:_});if(0!==j.code)throw new Error(j.stderr);const D=JSON.parse(j.stdout).path;let k=new s;k.append("file",o.createReadStream(D));const x=await r.request({method:"POST",maxBodyLength:1/0,url:`${u.env.ATOM_API_URL}/v1/service/upload/single/${b}`,headers:{...k.getHeaders(),Authorization:`Bearer ${h}`},data:k});if(x.data?.error)throw new Error("Error uploading fnet node.")}}(),P=function(){if(Ut)return Lt;Ut=1;const e=t,n=z,r=R,a=$;return Lt=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as Rust package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},Lt}(),S=function(){if(Bt)return zt;Bt=1;const e=t,n=B,r=R,a=$;return zt=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as pyip package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},zt}();return Jt=async t=>{const{atom:n,packageDependencies:a,context:o,deploymentProjectTarget:i,setProgress:c,deploymentProject:d,yamlTarget:u}=t;if(!0===i.enabled)if("lib"===i.type)await l({...t});else if("red"===i.type)await p({...t});else if("npm"===i.type)await s({...t});else if("gcs"===i.type)await r({...t});else if("gitlab"===i.type)await e({...t});else if("fnet-package"===i.type)await j({...t});else if("fnet-form"===i.type)await D({...t});else if("fnet-node"===i.type)await x({...t});else if("fnet-flow"===i.type)await k({...t});else{let e;if("nextjs"===i.type?e=b:"webos"===i.type?e=w:"electron"===i.type?e=h:"docker"===i.type?e=_:"ios"===i.type?e=g:"macos"===i.type?e=y:"rust"===i.type?e=P:"pyip"===i.type&&(e=S),!e)return;await e({atom:n,target:i,onProgress:c,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:u}),d.isDirty=!0}},Jt}function hn(){if(Gt)return Kt;Gt=1;const e=d,n=u,r=m,a=o,i=f,s=function(){if(X)return H;X=1;const e=g,t=y;return H=async()=>{if(!await t({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const n=e.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await n.connect(),n}}(),{nanoid:c}=h,p=function(){if(V)return Y;V=1;const{Api:e}=w,t=v.default,n=b;return Y=class{init({config:r,accessToken:a}){return new Promise(((o,i)=>{if(e.set_api_url(r.data.url),a)return e.set_req_token(a),void o(a);t({method:"POST",url:`${r.data.issuer}/protocol/openid-connect/token`,data:n.stringify(r.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((t=>{e.set_req_token(t.data.access_token),o(t.data.access_token)})).catch((t=>{e.set_req_token(),i(t)}))}))}}}(),_=Qt(),D=(Ee||(Ee=1,Ae=async e=>{const{atom:t,context:n,setProgress:r}=e;r("Initializing features..."),t.doc.features=t.doc.features||{};const a=t.doc.features;!1===a.cli?a.cli={enabled:!1}:(a.cli,a.cli={enabled:!0}),a.cli.enabled=!0===a.cli.enabled&&(!1===t.doc.features.form_enabled||!0===a.cli.extend||!0===a.cli.enabled)}),Ae),k=en(),x=Oe?Ie:(Oe=1,Ie=async({atom:e,packageDependencies:t,packageDevDependencies:n,setProgress:r})=>{r("Initializing dependencies")}),P=tn(),S=rn(),A=an(),E=function(){if(Be)return ze;Be=1;const e=d,t=u,n=l;return ze=async({atom:r,setProgress:a,context:o,packageDependencies:i})=>{if(!0!==r.doc.features.cli.enabled)return;await a({message:"Creating cli."});const s={atom:r,packageDependencies:i},c=o.templateDir,p=t.join(o.projectDir,"src","cli");e.existsSync(p)||e.mkdirSync(p,{recursive:!0}),await n({pattern:["index.py.njk","__init__.py.njk"],dir:t.join(c,"src","cli"),outDir:p,context:s})},ze}(),T=on(),$=sn(),I=cn(),O=pn(),C=ln(),R=dn(),M=un(),F=mn(),q=fn(),N=gn(),L=nn(),U=yn(),{Atom:z}=w,B=J,G=t,Z=j,Q=W,ee=K;return Kt=class{#e;#t;#n;#r;#a;#o;#i;#s;#c;#p;#l;#d;#u;#m;#f;#g;#y;constructor(e){this.#e=new p,this.#t=e,this.#o=[],this.#i=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#o,packageDevDependencies:this.#i,setProgress:this.setProgress.bind(this),context:this.#t,Atom:z,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,n){this._redis_client&&await this._redis_client.SETEX(e,n||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async initAuth(){this.#t.id&&(this.#s=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#s)}async initLibrary(){const e=this.#t.id;this.#n=this.#t.project?.libraryAtom||await z.get({id:e});let t=this.#n.doc.bundleName;t=t||(this.#n.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#n.doc.bundleName=t,this.#n.type=this.#n.type||"workflow.lib",this.#y.atom=this.#n}async initLibraryDir(){this.setProgress({message:"Initializing library directory."});const t=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const r=Q({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const t of r)e.rmSync(t,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let a=t;e.existsSync(a)||e.mkdirSync(a,{recursive:!0}),a=n.join(t,"src"),e.existsSync(a)||e.mkdirSync(a,{recursive:!0}),a=n.join(t,"src","default"),e.existsSync()||e.mkdirSync(a,{recursive:!0})}async initLibraryDirPython(){this.setProgress({message:"Initializing library directory."});const t=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const a=Q({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const t of a)e.rmSync(t,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let o=t;e.existsSync(o)||e.mkdirSync(o,{recursive:!0}),o=n.join(t,"src"),e.existsSync(o)||e.mkdirSync(o,{recursive:!0}),o=n.join(t,"src","default");const i=this.#t.projectSrcDir;if(!e.existsSync(o))try{"win32"===r.platform()?e.symlinkSync(i,o,"junction"):e.symlinkSync(i,o,"dir")}catch(e){throw new Error(`Couldn't create symlink. Error: ${e.message}`)}}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#t.templateDir;this.#r=i.configure(e,{watch:!1,dev:!0}),this.#y.njEnv=this.#r}async initLibs(){this.setProgress({message:"Initializing external libs."});const e=[{name:this.#n.doc.name,type:"atom",parent_id:this.#n.parent_id}];this.#a=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#o})}async initLibsPython(){this.setProgress({message:"Initializing external libs."});const e=this.#n;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=[{name:this.#n.doc.name,type:"atom",parent_id:this.#n.parent_id,atom:e}];this.#a=t}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const n=e.filter((e=>"atom"===e.type));for(let e=0;e<n.length;e++){const r=n[e],a=await this.findAtomLibrary({url:r.name});r.atom=a;const o=a.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));o?.forEach((e=>{const n=t.find((t=>t.package===e.package));n?"string"==typeof e.path?(n.path||[]).some((t=>t===e.path))||(n.path=n.path||[],n.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(n.path||[]).some((t=>t===e))||(n.path=n.path||[],n.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=B({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#l),"ac:"===t.protocol){const n=t.pathname.split("/");if(1===n.length)return await z.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===n.length){const e=await z.first({where:{name:n[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await z.first({where:{name:n[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===t.protocol){const e=this.#n;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=n.resolve(this.#t.projectSrcDir,"index.js"),r=await Z({file:t,recursive:!0}),a=e.doc.dependencies,o=!0===this.#n.doc.features.all_parsed_imports?r.all:r.required;for await(const e of o){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;const t=await L({name:e.package,projectDir:this.#t.projectDir,setProgress:this.#y.setProgress});a.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:t}){await this.setProgress({message:"Creating external lib files."}),this.#n.typesDir="./types";const r=t.filter((e=>"atom"===e.type));for(let t=0;t<r.length;t++){const a=r[t].atom,o=this.#t.projectDir;if("local:"===a.protocol){const t=n.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),r=n.relative(n.join(this.#t.projectDir,"src","default"),t);if(!e.existsSync(t)){e.mkdirSync(n.dirname(t),{recursive:!0});let r="export default async (args)=>{\n";r+="}",e.writeFileSync(t,r,"utf8")}a.relativePath=r.split(n.sep).join("/"),this.#n.typesDir=`./types/${n.basename(o)}/src`}else{const t=n.join(o,"src","libs",`${a.id}.js`),r=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;e.writeFileSync(t,r.content,"utf8")}}}async createAtomLibFilesPython({libs:t}){await this.setProgress({message:"Creating external lib files."});const r=t.filter((e=>"atom"===e.type));for(let t=0;t<r.length;t++){const a=r[t].atom;if("local:"===a.protocol){const t=n.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.py`);if(!e.existsSync(t)){e.mkdirSync(n.dirname(t),{recursive:!0});let r="def default():\n";r+=' print("Hello world!")\n',e.writeFileSync(t,r,"utf8")}}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const t={libs:this.#a.filter((e=>"atom"===e.type)),libraryAtom:this.#n,atom:this.#n},r=this.#t.templateDir,a=i.compile(e.readFileSync(n.resolve(r,n.join("src","default","engine.js.njk")),"utf8"),this.#r).render(t),o=this.#t.projectDir,s=n.resolve(o,n.join("src","default","index.js"));e.writeFileSync(s,a,"utf8")}async createProjectYaml(){const t="node.yaml",r=`Creating ${t}`;await this.setProgress({message:r});const{content:o,...s}=this.#n.doc,c={content:a.stringify(s)},p=this.#t.templateDir,l=i.compile(e.readFileSync(n.resolve(p,`${t}.njk`),"utf8"),this.#r).render(c),d=this.#t.projectDir,u=n.resolve(d,`${t}`);e.writeFileSync(u,l,"utf8")}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&await n.save()}}else if(this.#n.id){const e=await z.list({type:"library.deploy",parent_id:this.#n.id});for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&(n=await z.update(n,{id:n.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:n}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const r=Object.keys(t.doc||{}),a=n||{};for(let e=0;e<r.length;e++){const n=t.doc[r[e]];n.name=r[e];const o=a.get(r[e]);await U({...this.#y,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#t.id)return;let r=await z.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});r?(r.doc.versions.splice(0,0,{v:n.version}),await z.update(r,{id:r.id})):r=await z.create({parent_id:this.#d.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:n.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(ee.blue(t)),await this._cache_set(this.#p,{status:"IN_PROGRESS",message:t})}async initNode(){await _(this.#y),await k(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initPython(){await D(this.#y),await x(this.#y),await this.initLibraryDirPython(),await this.initNunjucks(),await this.initLibsPython()}async nodeBuild(){this.#m&&(await this.createAtomLibFiles({libs:this.#a}),await this.createEngine(),await this.createProjectYaml(),await C(this.#y),await O(this.#y),await I(this.#y),await $(this.#y),await A(this.#y),await P(this.#y),await T(this.#y),await S(this.#y),await R(this.#y),await M(this.#y),this.#f&&(await F(this.#y),await N(this.#y),this.#g&&await this.deploy()))}async pythonBuild(){this.#m&&(await this.createAtomLibFilesPython({libs:this.#a}),await this.createProjectYaml(),await C(this.#y),await I(this.#y),await E(this.#y),this.#f&&(await q(this.#y),this.#g&&await this.deploy()))}async init(){this._redis_client=await s(),this.#c=this.#t.buildId||c(24),this.#y.buildId=this.#c,this.#u=this.#t.mode,this.#m=["all","deploy","build","file"].includes(this.#u),this.#f=["all","deploy","build"].includes(this.#u),this.#g=["all","deploy"].includes(this.#u),this.#l=this.#t.protocol,this.#p="BUILD:"+this.#c,this.#d=(await G({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),"node"===this.#n.doc.features.runtime.type?await this.initNode():"python"===this.#n.doc.features.runtime.type&&await this.initPython()}catch(e){throw await this._cache_set(this.#p,{status:"FAILED",message:e?.message||e}),e}}async build(){try{"node"===this.#n.doc.features.runtime.type?await this.nodeBuild():"python"===this.#n.doc.features.runtime.type&&await this.pythonBuild(),await this._cache_set(this.#p,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#p,{status:"FAILED",message:e.message||e}),console.log(e),e}}},Kt}var wn=G(function(){if(Yt)return Vt;Yt=1;const m=process.cwd(),{spawn:f}=e;t({name:["redis"],dir:m,optional:!0});const g=n,y=r,h=a,w=o,v=i,b=s,_=t,j=c,D=p,k=l,x=hn(),P=function(){if(Xt)return Ht;Xt=1;const e=d,t=u;return Ht=function({baseDir:n=__dirname}){let r=n;for(;r!==t.parse(r).root;){const n=t.join(r,"node_modules");if(e.existsSync(n))return n;r=t.dirname(r)}return null}}()({baseDir:__dirname}),S="win32"===process.platform?";":":";process.env.PATH=`${g.join(P,"/.bin")}${S}${process.env.PATH}`;let A=y(process.argv.slice(2)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0}).option("vscode",{type:"boolean",default:!0,alias:"vs"}).option("runtime",{type:"string",default:"node",choices:["node","python"]})),(async e=>{try{const t=g.resolve(P,"@fnet/cli-project-node/dist/template/project"),n=g.resolve(m,e.name);h.existsSync(n)||h.mkdirSync(n),await k({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0});let r=v.exec("fnode build",{cwd:n});if(0!==r.code)throw new Error("Failed to build project.");if(v.which("git")&&(r=v.exec("git init --initial-branch=main",{cwd:n}),0!==r.code))throw new Error("Failed to initialize git.");if(v.which("code")&&e.vscode&&(r=v.exec(`cd ${n} && code .`),0!==r.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=g.resolve(P,"@fnet/cli-project-node/dist/template/project"),n=process.cwd(),r=await $(e);if(e.update){if(await k({dir:t,outDir:n,context:{name:r.project.projectFileParsed.name,runtime:r.project.runtime.type},copyUnmatchedAlso:!0}),0!==v.exec("fnode build",{cwd:n}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await $(e),n=new x(t);await n.init(),await n.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await $({...e,mode:"all"}),n=new x(t);await n.init(),await n.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await $({...e,mode:"file"}),n=new x(t);await n.init(),await n.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function E(e,{name:t,bin:n,preArgs:r=[]}){return e.command(`${t||n} [commands..]`,`${n} ${r.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await $(e),{projectDir:a}=t,o=process.argv.slice(3);f(n,[...r,...o],{cwd:a,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}function T(e,{name:t,bin:n,preArgs:r=[]}){return e.command(`${t||n} [commands..]`,`${n} ${r.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const a=await $(e),{projectDir:o}=a,i=process.argv.slice(3);n=g.join(o,".conda","bin",n||t);f(n,[...r,...i],{cwd:o,stdio:"inherit",shell:!0,env:{PYTHONPATH:o}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function $(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:g.resolve(P,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:g.resolve(P,"./@fnet/cli-project-common/dist/template/default"),projectDir:g.resolve(m,`./.output/${e.id}`),tags:e.ftag};{const t=await async function({tags:e}){const t=g.resolve(m,"node.yaml");if(!h.existsSync(t))throw new Error("node.yaml file not found in current directory.");const{raw:n,parsed:r}=await b({file:t,tags:e}),a=g.dirname(t);r.features=r.features||{};const o=r.features;o.runtime=o.runtime||{},o.runtime.type=o.runtime.type||"node","python"===o.runtime.type?o.runtime.template=o.runtime.template||"python":o.runtime.template=o.runtime.template||"default";const i={libraryAtom:{doc:{...r},fileName:"index"},projectDir:a,projectFilePath:t,projectFileContent:n,projectFileParsed:r,runtime:o.runtime};let s=g.resolve(a,"fnet/targets.yaml");if(!h.existsSync(s)&&(s=g.resolve(a,"node.devops.yaml"),h.existsSync(s))){const e=g.resolve(a,"fnet");h.existsSync(e)||h.mkdirSync(e),h.copyFileSync(s,g.resolve(a,"fnet/targets.yaml")),h.unlinkSync(s)}if(h.existsSync(s)){const{raw:t,parsed:n}=await b({file:s,tags:e}),r=w.parseDocument(t);i.devops={filePath:s,fileContent:t,yamlDocument:r,doc:{...n},type:"library.deploy",save:async()=>{h.writeFileSync(i.devops.filePath,r.toString())}}}const c=g.resolve(a,"readme.md");if(h.existsSync(c)){const e=h.readFileSync(c,"utf8");i.readme={filePath:c,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return i}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:g.resolve(P,`./@fnet/cli-project-node/dist/template/${t.runtime.template}`),templateCommonDir:g.resolve(P,`./@fnet/cli-project-common/dist/template/${t.runtime.template}`),projectDir:g.resolve(t.projectDir,"./.workspace"),projectSrcDir:g.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}return A=A.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await $(e),{project:n}=t,{projectDir:r,projectFileParsed:a}=n,o=a.input;if(!o)throw new Error("Config schema not found in project file.");const i=await j({schema:o,format:"yaml"}),s=g.resolve(r,".fnet");h.existsSync(s)||h.mkdirSync(s);const c=g.resolve(s,`${e.name}.fnet`);h.writeFileSync(c,i)}catch(e){console.error(e.message),process.exit(1)}})),A=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await $(e),{project:n}=t,{projectDir:r,projectFileParsed:a}=n,o=a.input;if(!o)throw new Error("Config schema not found in project file.");const i=g.resolve(r,".fnet"),s=g.resolve(i,`${e.name}.fnet`),c=await j({schema:o,format:"yaml",ref:s});h.existsSync(i)||h.mkdirSync(i),h.writeFileSync(s,c)}catch(e){console.error(e.message),process.exit(1)}}))}(A),A=E(A,{bin:"npm"}),A=E(A,{bin:"node"}),A=E(A,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),A=E(A,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),A=E(A,{name:"app",bin:"npm",preArgs:["run","app","--"]}),A=E(A,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),A=E(A,{bin:"npx"}),A=E(A,{bin:"cdk"}),A=E(A,{bin:"aws"}),A=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await $(e),{projectDir:r}=t,a=e.config,o=await _({name:a,dir:r,transferEnv:!1,optional:!0,tags:t.tags}),i=o?.data?.env||void 0,s=e.command,c=process.argv.slice(5);f(s,[...n,...c],{cwd:r,stdio:"inherit",shell:!0,env:{...process.env,...i}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(A,{name:"with"}),A=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const t=await $(e),{project:n}=t,{projectFileParsed:r}=n,a=r.commands;if(!a)throw new Error("Commands not found in project file.");const o=a[e.group];if(!o)throw new Error(`Command group '${e.group}' not found in project file.`);await D({commands:o})}catch(e){console.error(e.message),process.exit(1)}}))}(A,{name:"run"}),A=T(A,{name:"python"}),A=T(A,{name:"python3"}),A=T(A,{name:"pip"}),A=T(A,{name:"pip3"}),A.demandCommand(1,"You need at least one command before moving on").help().argv,Vt}());module.exports=wn;
|
|
2
|
+
"use strict";var e=require("child_process"),t=require("@fnet/config"),n=require("path"),r=require("yargs/yargs"),a=require("fs"),o=require("yaml"),i=require("shelljs"),s=require("os"),c=require("@fnet/yaml"),p=require("@fnet/object-from-schema"),l=require("@fnet/shell-flow"),d=require("@flownet/lib-render-templates-dir"),u=require("node:fs"),m=require("node:path"),f=require("node:os"),g=require("nunjucks"),y=require("redis"),h=require("@flownet/lib-is-redis-online"),w=require("nanoid"),v=require("@flownet/lib-atom-api-js"),b=require("axios"),_=require("qs"),j=require("lodash.merge"),D=require("@flownet/lib-parse-imports-js"),k=require("@fnet/npm-list-versions"),x=require("@fnet/npm-pick-versions"),P=require("object-hash"),S=require("ajv/dist/2020"),A=require("ajv/dist/standalone"),E=require("ajv-formats"),T=require("@fnet/auto-conda-env"),$=require("@fnet/shell"),I=require("semver"),O=require("@fnet/up-list-files"),C=require("@node-red/util"),R=require("@flownet/lib-to-ios-app"),M=require("lodash.clonedeep"),F=require("@flownet/lib-to-macos-app"),q=require("@flownet/lib-to-electron"),N=require("@flownet/lib-to-webos"),L=require("@flownet/lib-to-nextjs"),U=require("@flownet/lib-to-docker"),z=require("form-data"),B=require("@fnet/to-rust"),J=require("@fnet/to-pyip"),W=require("@flownet/lib-parse-node-url"),K=require("@fnet/list-files"),G=require("chalk");function H(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var X,Y,V,Z,Q,ee,te,ne,re,ae,oe,ie,se,ce,pe,le,de,ue,me,fe,ge,ye,he,we,ve,be,_e,je,De,ke,xe,Pe,Se,Ae,Ee,Te,$e,Ie,Oe,Ce,Re,Me,Fe,qe,Ne,Le,Ue,ze,Be,Je,We,Ke,Ge,He,Xe,Ye,Ve,Ze,Qe,et,tt,nt,rt,at,ot,it,st,ct,pt,lt,dt,ut,mt,ft,gt,yt,ht,wt,vt,bt,_t,jt,Dt,kt,xt,Pt,St,At,Et,Tt,$t,It,Ot,Ct,Rt,Mt,Ft,qt,Nt,Lt,Ut,zt,Bt,Jt,Wt,Kt,Gt,Ht,Xt,Yt,Vt,Zt={};function Qt(){if(ee)return Q;ee=1;const e=j;return Q=({feature:t,features:n,packageDevDependencies:r})=>{const{name:a,packages:o,options:i,extraCheck:s,explicit:c}=t,p=`${a}_enabled`,l=n.rollup_output||{},d=Object.keys(l);let u=i||{};const m=n[a]?.options;m&&(u=e(u,m));const f=!n[a]||!1===n[a]?.enabled;d.forEach((e=>{const t=n.rollup_output[e];if(t){if(Reflect.has(t,a)){if(f||!t[a]||!1===t[a]?.enabled)return void delete t[a];!0===t[a]&&(t[a]={enabled:!0,options:u})}else{if(f||c||!1===n[p])return;t[a]={enabled:!0}}t[a]=t[a]||{},t[a].options={...u,...t[a].options}}}));let g=d.some((e=>!0===n.rollup_output[e][a]?.enabled));s&&(g=s()&&g),n[p]=g,g&&o.forEach((e=>r.push({package:e[0],version:e[1]})))}}function en(){if(Ae)return Se;Ae=1;const e=j,t=u,n=m,r=D,a=function(){if(ne)return te;ne=1;const e=Qt();return te=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:a,packageDevDependencies:r})},te}(),o=function(){if(ae)return re;ae=1;const e=Qt();return re=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:a,packageDevDependencies:r})},re}(),i=function(){if(ie)return oe;ie=1;const e=Qt();return oe=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:a,packageDevDependencies:r})},oe}(),s=function(){if(ce)return se;ce=1;const e=Qt();return se=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:a,packageDevDependencies:r})},se}(),c=function(){if(le)return pe;le=1;const e=Qt();return pe=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:a,packageDevDependencies:r})},pe}(),p=function(){if(ue)return de;ue=1;const e=Qt();return de=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:a,packageDevDependencies:r})},de}(),l=function(){if(fe)return me;fe=1;const e=Qt();return me=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:a,packageDevDependencies:r})},me}(),d=function(){if(ye)return ge;ye=1;const e=Qt();return ge=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:a,packageDevDependencies:r})},ge}(),f=function(){if(we)return he;we=1;const e=Qt();return he=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:a,packageDevDependencies:r})},he}(),g=function(){if(be)return ve;be=1;const e=Qt();return ve=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:a,packageDevDependencies:r})},ve}(),y=function(){if(je)return _e;je=1;const e=Qt();return _e=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features;e({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:a,packageDevDependencies:r})},_e}(),h=function(){if(ke)return De;ke=1;const e=Qt();return De=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features,o={};!0===a.app?.enabled&&(o.targets=o.targets||[],o.targets.push({src:"./src/app/index.html",dest:a.app.dir}),Reflect.has(a.app,"copy")||Reflect.has(a,"copy")||(a.copy=!0)),e({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:o},features:a,packageDevDependencies:r})},De}(),w=function(){if(Pe)return xe;Pe=1;const e=Qt();return xe=t=>{const{atom:n,packageDevDependencies:r}=t,a=n.doc.features,o=a.css&&!1!==a.css.enabled;let i=[];o&&(i.push(["rollup-plugin-postcss","^4"]),i.push(["sass","^1.66"]),(a.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":i.push(["postcss-import","^15"]);break;case"postcss-url":i.push(["postcss-url","^10"]);break;case"postcss-preset-env":i.push(["postcss-preset-env","^9"]);break;case"autoprefixer":i.push(["autoprefixer","^10"]);break;case"cssnano":i.push(["cssnano","^6"])}}))),e({feature:{name:"css",packages:i},features:a,packageDevDependencies:r})},xe}();function v({dir:e,name:r="index"}){let a=n.resolve(e,`./${r}.tsx`);if(t.existsSync(a)||(a=n.resolve(e,`./${r}.ts`)),t.existsSync(a)||(a=n.resolve(e,`./${r}.jsx`)),t.existsSync(a)||(a=n.resolve(e,`./${r}.js`)),!t.existsSync(a))return{};const o=a,i=n.extname(a);return{file:o,ext:i,ts:".ts"===i||".tsx"===i,name:r}}return Se=async t=>{const{atom:u,context:m,setProgress:b}=t;b("Initializing features..."),u.doc.features=u.doc.features||{};const _=u.doc.features;_.project=_.project||{},_.project.format=_.project.format||_.project_format||"esm",_.project_format=_.project.format,_.dts_enabled=!0===_.dts||void 0!==_.dts&&!1!==_.dts,_.hasOwnProperty("all_parsed_imports")||(_.all_parsed_imports=!0);const j=n.resolve(m.project.projectDir),D=v({dir:n.resolve(j,"./app")});if(D.file){b("Parsing app entry imports...");let e=await r({file:D.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));_.app_uses_jsx=t,_.app_has_entry=!0,e=await r({file:D.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),_.app_entry_uses_jsx=t,_.app_entry_is_ts=D.ts,_.app_entry_ext=D.ext}const k=v({dir:n.resolve(j,"./cli")});if(k.file){b("Parsing cli entry imports...");let e=await r({file:k.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));_.cli_uses_jsx=t,_.cli_has_entry=!0,e=await r({file:k.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),_.cli_entry_uses_jsx=t,_.cli_entry_is_ts=k.ts,_.cli_entry_ext=k.ext}if("workflow.lib"===u.type){const e=v({dir:n.resolve(j,"./src")});if(e.file){b("Parsing src entry imports...");let t=await r({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));_.src_uses_jsx=n,_.src_has_entry=!0,t=await r({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),_.src_entry_uses_jsx=n,_.src_entry_is_ts=e.ts,_.src_entry_ext=e.ext}}const x=Reflect.has(_,"app_entry_uses_jsx")?!0===_.app_entry_uses_jsx:!0===_.src_entry_uses_jsx,P=Reflect.has(_,"cli_entry_uses_jsx")?!0===_.cli_entry_uses_jsx:!0===_.src_entry_uses_jsx;_.form_enabled=!0===u.doc.form||!0===u.doc.form?.enabled||!0===_.form||!0===_.form?.enabled,_.multiple_enabled=_.multiple_enabled||!0===_.multiple||!0===_.multiple?.enabled,!1===_.app?_.app={enabled:!1}:!0===_.app?_.app={enabled:!0,extend:!0===_.app_has_entry,export:!0,react:x}:_.app={enabled:!0,extend:!0===_.app_has_entry,export:!0,react:x,..._.app||{}},_.app.enabled=!0===_.app.enabled&&(!0===u.doc.features.form_enabled||!0===_.app.extend||!0===_.app.enabled),_.app.format=_.app.format||"esm",_.app.folder=_.app.folder||_.app.format||"default",!1===_.cli?_.cli={enabled:!1}:!0===_.cli?_.cli={enabled:!0,extend:!0===_.cli_has_entry,export:!0,react:P}:_.cli={enabled:!0,extend:!0===_.cli_has_entry,export:!0,react:P,..._.cli||{}},_.cli.enabled=!0===_.cli.enabled&&(!1===u.doc.features.form_enabled||!0===_.cli.extend||!0===_.cli.enabled),_.cli.format=_.cli.format||"esm",_.cli.folder=_.cli.folder||_.cli.folder||"esm",_.cli.node_options=_.cli.node?.options||_.cli.node_options||"",_.json=_.cli.enabled||_.json;const S={cjs:{format:"cjs",context:_.form_enabled?"window":"global",babel:!0===_.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==_.cjs,copy:!1},esm:{format:"esm",context:_.form_enabled?"window":"global",babel:!0===_.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!1!==_.esm,copy:!0},iife:{format:"iife",context:_.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==_.iife,terser:!0,copy:!1}};!0===_.webos&&(S.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===_.electron&&(S.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===_.nextjs&&(S.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===_.ios&&(S.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===_.macos&&(S.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===_.app.enabled&&(_.app.dir=`./dist/app/${_.app.folder}`,S.app={format:_.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:_.app.dir,terser:!0,output_exports:!1===_.app.export?"none":"auto"}),!0===_.cli.enabled&&(_.cli.dir=`./dist/cli/${_.cli.folder}`,S.cli={format:_.cli.format,context:"global",babel:!0===_.src_uses_jsx||!0===_.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:_.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===_.cli.export?"none":"auto"});const A={server:".",startPath:`${n.normalize(_.app.dir||".")}`,files:[n.normalize("./dist/**/*")],cors:!0,open:!1};_.babel_options=e({targets:{browsers:"last 9 versions, not dead",node:"18"}},_.babel_options||_.babel?.options),_.browsersync_options=e(A,_.browsersync_options||_.browsersync?.options||{}),_.replace_options=e({},_.replace_options||_.replace?.options||{}),Reflect.has(_.browsersync_options,"proxy")&&delete _.browsersync_options.server,_.rollup=_.rollup||{},_.rollup_output=e(S,_.rollup_output||_.rollup?.output||{}),_.preact_enabled=!0===_.preact||_.preact&&!1!==_.preact?.enabled;let E=Object.keys(S);for(const t of E){const n=S[t];n&&(!1!==_.rollup[t]?(n.babel_options=n.babel_options||_.babel_options,n.browsersync_options=e(_.browsersync_options,n.browsersync_options),n.replace_options=e(_.replace_options,n.replace_options),_.preact_enabled&&(n.alias_enabled=!0,n.alias=n.alias||{},n.alias.entries=n.alias.entries||{},n.alias.entries.react="preact/compat",n.alias.entries["react-dom"]="preact/compat"),_.form_enabled&&(n.babel=!0)):delete _.rollup_output[t])}E=Object.keys(_.rollup_output),_.babel_enabled=E.some((e=>!0===_.rollup_output[e].babel)),_.browser_enabled=E.some((e=>!0===_.rollup_output[e].babel)),_.browsersync_enabled=!1!==_.browsersync&&E.some((e=>!0===_.rollup_output[e].browsersync)),_.browsersync_enabled=_.browsersync_enabled&&_.app.enabled,_.dependency_auto_enabled=!1!==_.dependency_auto&&!1!==_.dependency_auto?.enabled,_.npm_install_flags=_.npm_install_flags||"",_.react_version=_.react_version||_.react?.version||18,w(t),h(t),y(t),g(t),f(t),l(t),d(t),p(t),c(t),s(t),i(t),a(t),o(t)},Se}function tn(){if(Ie)return $e;Ie=1;const e=k;return $e=async({atom:t,packageDependencies:n,packageDevDependencies:r,setProgress:a})=>{if(a("Initializing dependencies"),"workflow"===t.type&&(n.push({package:"get-value",version:"^3"}),n.push({package:"set-value",version:"^4"})),t.doc.features.form_enabled&&t.doc.features.dependency_auto_enabled){let r="^18.2";a("Fetching React versions");r=`^${(await e({name:"react",groupBy:{major:!0}})).find((e=>e[0]===t.doc.features.react_version.toString()))[0]}`,n.push({package:"react",version:r}),n.push({package:"react-dom",version:r}),"workflow"===t.type&&(n.push({package:"@flownet/react-app",version:"^0.1"}),n.push({package:"@flownet/react-app-state",version:"^0.1"}))}t.doc.features.preact_enabled&&n.push({package:"preact",version:"^10"}),!0===t.doc.features.cli.enabled&&(n.push({package:"@fnet/args",version:"^0.1"}),r.push({package:"ajv",version:"^8"}),t.doc.features.cli.fargs&&!1!==t.doc.features.cli.fargs?.enabled&&n.push({package:"@fnet/config",version:"0.2.21"})),t.doc.features.render&&!1!==t.doc.features.render.enabled&&r.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),r.push({package:"@babel/core",version:"^7"}),r.push({package:"@rollup/plugin-commonjs",version:"^28"}),r.push({package:"@rollup/plugin-node-resolve",version:"^15"}),r.push({package:"@rollup/plugin-replace",version:"^6"}),r.push({package:"rollup",version:"^4"}),t.doc.features.dts_enabled&&r.push({package:"rollup-plugin-dts",version:"^6"}),r.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),r.push({package:"@rollup/plugin-alias",version:"^5"}),r.push({package:"fs-extra",version:"^11"}),t.doc.features.babel_enabled&&(r.push({package:"@rollup/plugin-babel",version:"^6"}),r.push({package:"@babel/preset-env",version:"^7"}),r.push({package:"@babel/preset-react",version:"^7"}),t.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":r.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":r.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":r.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":r.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":r.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),r.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),t.doc.features.browsersync_enabled&&r.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})},$e}function nn(){if(Me)return Re;Me=1;const e=u,t=m,n=d;return Re=async({atom:r,setProgress:a,context:o,packageDependencies:i})=>{if(!0!==r.doc.features.app.enabled)return;await a({message:"Creating app folder"});const s={atom:r,packageDependencies:i,ts:Date.now()},c=o.templateDir,p=t.resolve(o.projectDir,"src/app");e.existsSync(p)||e.mkdirSync(p,{recursive:!0});let l=["index.js.njk"];!1!==r.doc.features.app.html&&l.push("index.html.njk"),await n({pattern:l,dir:t.resolve(c,"src/app"),outDir:p,context:s})},Re}function rn(){if(qe)return Fe;qe=1;const e=x,t=P,n=u,r=m;return Fe=async({projectDir:a,name:o,setProgress:i,count:s=1})=>{let c;const p=t(["npm-pick-versions",o,s]),l=r.join(a,".cache"),d=r.join(l,p+".json");return n.existsSync(d)?(i&&i(`Picking npm version of ${o} from cache ...`),c=JSON.parse(n.readFileSync(d,"utf8"))):(i&&i(`Picking npm version of ${o} ...`),c=await e({name:o,count:s}),n.mkdirSync(l,{recursive:!0}),n.writeFileSync(d,JSON.stringify(c),"utf8")),c}}function an(){if(Le)return Ne;Le=1;const e=g,t=u,n=m,r=D,a=rn();return Ne=async({atom:o,context:i,packageDependencies:s,packageDevDependencies:c,setProgress:p})=>{await p({message:"Creating package.json."});s.filter((e=>!0===e.dev)).forEach((e=>{c.find((t=>t.package===e.package))||c.push(e);const t=s.findIndex((t=>t.package===e.package));s.splice(t,1)}));const l=s.find((e=>"react"===e.package)),d=s.find((e=>"react-dom"===e.package));l&&!d?s.push({package:"react-dom",version:l.version}):l&&d&&(d.version=l.version),l&&o.doc.features.react_version>=17&&(s.find((e=>"@emotion/react"===e.package))||s.push({package:"@emotion/react",version:"^11"}),s.find((e=>"@emotion/styled"===e.package))||s.push({package:"@emotion/styled",version:"^11"}));const u=[];!0===o.doc.features.app.enabled&&u.push({file:n.resolve(i.projectDir,"src/app/index.js"),dev:!1!==o.doc.features.app.dev}),!0===o.doc.features.cli.enabled&&u.push({file:n.resolve(i.projectDir,"src/cli/index.js"),dev:!1!==o.doc.features.cli.dev});for await(const e of u){const n=e.file;if(!t.existsSync(n))throw new Error(`App file not found: ${n}`);const l=await r({file:n,recursive:!0}),d=!0===o.doc.features.all_parsed_imports?l.all:l.required;for await(const t of d){if("npm"!==t.type)continue;if(s.find((e=>e.package===t.package)))continue;if(c.find((e=>e.package===t.package)))continue;const n=await a({name:t.package,projectDir:i.projectDir,setProgress:p});(!0===e.dev?c:s).push({package:t.package,subpath:t.subpath,version:n.minorRange,type:"npm"})}}const m={atom:o,packageDependencies:s,packageDevDependencies:c},f=i.templateCommonDir,g=e.compile(t.readFileSync(n.resolve(f,"package.json.njk"),"utf8"),e.configure(f)).render(m),y=i.projectDir,h=n.resolve(y,"package.json");t.writeFileSync(h,g,"utf8");const w=n.resolve(i.project.projectDir,"fnet");if(t.existsSync(w)){const e=n.resolve(i.projectDir,"fnet");t.existsSync(e)||t.mkdirSync(e);const r=t.readdirSync(w);for(const a of r){const r=n.resolve(w,a);if(!t.lstatSync(r).isFile())continue;const o=n.resolve(e,a);t.copyFileSync(r,o)}}},Ne}function on(){if(ze)return Ue;ze=1;const e=u,t=m,n=d;return Ue=async({atom:r,setProgress:a,context:o,packageDependencies:i})=>{if(!0!==r.doc.features.cli.enabled)return;await a({message:"Creating cli."});const s={atom:r,packageDependencies:i},c=o.templateDir,p=t.resolve(o.projectDir,"src/cli");e.existsSync(p)||e.mkdirSync(p,{recursive:!0}),await n({pattern:["index.js.njk"],dir:t.resolve(c,"src/cli"),outDir:p,context:s})},Ue}function sn(){if(Ke)return We;Ke=1;const e=u,t=m,n=g,r=D;return We=async({atom:a,setProgress:o,context:i,packageDependencies:s})=>{await o({message:"Creating rollup file."});const c={atom:a,packageDependencies:s},p=t.resolve(i.projectDir,"src","default/index.js");if(!e.existsSync(p))throw new Error(`Entry file not found: ${p}`);const l=(await r({file:p,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),d=a.doc.features.rollup_output,u=Object.keys(d);for(let e=0;e<u.length;e++){const t=d[u[e]];if(!0===t.browser&&l.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(l.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<l.length;e++){const n=l[e];t.alias.entries[n]=`node:${n}`,t.alias.entries[`node:${n}`]=n}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(l)}}const m=i.templateCommonDir;let f=n.compile(e.readFileSync(t.resolve(m,"rollup.config.mjs.njk"),"utf8"),n.configure(m)).render(c);const g=i.projectDir;let y=t.resolve(g,"rollup.config.mjs");e.writeFileSync(y,f,"utf8")},We}function cn(){if(He)return Ge;He=1;const e=u,t=m,n=g,r=S,a=A,o=E;return Ge=async({atom:i,setProgress:s,context:c,njEnv:p})=>{if(!0!==i.doc.features.cli.enabled)return;await s({message:"Creating yargs."});let l={};if(l=i.doc.input?i.doc.input:{type:"object",properties:{},required:[]},i.doc.features.cli.fargs&&!1!==i.doc.features.cli.fargs?.enabled){const e=i.doc.features.cli.fargs,t={type:"string",description:"Config name to load args",hidden:!1},n={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(e,"default")&&(t.default=e.default),l.properties&&(l.properties.fargs=t,l.properties.ftag=n)}const d={options:l,imports:[],atom:i},u=c.templateDir,m=n.compile(e.readFileSync(t.resolve(u,"src/default/to.args.js.njk"),"utf8"),p).render(d),f=c.projectDir,g=t.resolve(f,"src/default/to.args.js");e.writeFileSync(g,m,"utf8");const y=new r({allErrors:!0,useDefaults:!0,formats:{email:!0},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});o(y);const h=y.compile(l),w=a(y,h);e.writeFileSync(t.resolve(f,"src/default/validate_input.js"),w,"utf8")},Ge}function pn(){if(Ye)return Xe;Ye=1;const e=u,t=m,n=g;return Xe=async({atom:r,setProgress:a,context:o,packageDependencies:i})=>{await a({message:"Creating .gitignore"});const s={atom:r,packageDependencies:i},c=o.templateCommonDir,p=n.compile(e.readFileSync(t.resolve(c,".gitignore.njk"),"utf8"),n.configure(c)).render(s),l=o.projectDir,d=t.resolve(l,".gitignore");e.writeFileSync(d,p,"utf8")},Xe}function ln(){if(Ze)return Ve;Ze=1;const e=u,t=m,n=g;return Ve=async({atom:r,setProgress:a,context:o,packageDependencies:i})=>{await a({message:"Creating tsconfig.json."});const s={atom:r,packageDependencies:i},c=o.templateCommonDir,p=n.compile(e.readFileSync(t.resolve(c,"tsconfig.json.njk"),"utf8"),n.configure(c)).render(s),l=o.projectDir,d=t.resolve(l,"tsconfig.json");e.writeFileSync(d,p,"utf8")},Ve}function dn(){if(et)return Qe;et=1;const e=g,t=u,n=m,r=c;return Qe=async({atom:a,context:o,setProgress:i,Atom:s})=>{const c="readme.md",p=`Creating ${c}`;if(await i({message:p}),o.project?.readme){const a=o.projectDir,i={content:o.project.readme.doc.content},s=n.resolve(o.project.projectDir,"fnet/how-to.md");if(t.existsSync(s)){const e=t.readFileSync(s,"utf8");i.howto=e}const p=n.resolve(o.project.projectDir,"fnet/input.yaml");if(t.existsSync(p)){const e=await r({file:p,tags:o.tags});i.input=e.content}const l=o.templateCommonDir,d=e.compile(t.readFileSync(n.resolve(l,`${c}.njk`),"utf8"),e.configure(l)).render(i),u=n.resolve(a,`${c}`);t.writeFileSync(u,d,"utf8")}else if(a.id){const r=await s.first({type:"wiki",parent_id:a.id});if(!r||"markdown"!==r.doc?.["content-type"])return;const{content:i,...p}=r.doc,l={content:i},d=o.templateCommonDir,u=e.compile(t.readFileSync(n.resolve(d,`${c}.njk`),"utf8"),e.configure(d)).render(l),m=o.projectDir,f=n.resolve(m,`${c}`);t.writeFileSync(f,u,"utf8")}},Qe}function un(){if(nt)return tt;nt=1;const e=n,t=l;return tt=async({setProgress:n,context:r})=>{const a=r.projectDir;await n({message:"Prettifiying source files."});let o=e.join("src","**","*");await t({commands:{steps:[`prettier --write ${o} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`],wdir:a}})}}function mn(){if(at)return rt;at=1;const e=i;return rt=async({atom:t,setProgress:n,context:r})=>{if(!t.doc.features.dts_enabled)return;const a=r.projectDir;await n({message:"Creating .d.ts"});if(0!==e.exec("tsc",{cwd:a}).code)throw new Error("Couldnt create .d.ts files.")},rt}function fn(){if(it)return ot;it=1;const e=i;return ot=async({setProgress:t,atom:n,context:r})=>{const a=r.projectDir;await t({message:"Installing npm packages."});if(0!==e.exec(`npm install ${n.doc.features.npm_install_flags}`,{cwd:a}).code)throw new Error("Couldnt install npm packages.")},ot}function gn(){if(ct)return st;ct=1;const e=m,t=T,n=d;return st=async r=>{const{setProgress:a,atom:o,context:i}=r;a({message:"Installing Python packages"});const s=i.projectDir,c=await t({pythonVersion:"3.12",packages:[{package:"fnet-import-parser",version:"0.1.9"}]}),{result:p}=await c.runBin("fnet_import_parser",["--entry_file",e.join(s,"src","default","index.py")],{captureName:"result"}),l=JSON.parse(p.items[0].stdout),d=l.required["third-party"]?.map((e=>({package:e.metadata?.package||e.path,version:e.metadata?.version||void 0,channel:e.metadata?.channel||void 0})))||[],u=o.doc.dependencies||[];for(const e of d)u.some((t=>t.package===e.package))||u.push(e);const m=e.join(s,".conda"),f=await t({envDir:m,pythonVersion:o.doc.features.runtime.version||"3.12",packages:u});i.pythonEnv=f,r.packageDependencies=u;const g=o.doc.features.render?.dirs||[];for(const t of g)t.dir=e.resolve(s,t.dir),t.outDir=e.resolve(s,t.outDir),await n(t)},st}function yn(){if(lt)return pt;lt=1;const e=i;return pt=async({setProgress:t,context:n})=>{const r=n.projectDir;await t({message:"Building main project."});if(0!==e.exec("npm run build",{cwd:r}).code)throw new Error("Couldnt build project.")}}function hn(){if(Kt)return Wt;Kt=1;const e=function(){if(ut)return dt;ut=1;const e=$,n=t;return dt=async({setProgress:t,context:r,deploymentProject:a,deploymentProjectTarget:o,buildId:i})=>{await t({message:"Deploying it as gitlab project."});const s=r.projectDir;let c="fnet-to-gitlab";const p=o.params.config||"gitlab",l=await n({name:p,dir:r.projectDir,tags:r.tags});if(!l)throw new Error(`Couldnt load config ${p}`);const{data:d}=l.data;c+=` --projectGroupId=${d.projectGroupId}`,c+=` --projectPath='${s}'`,c+=` --projectName='${o.params.name}'`,c+=` --projectBranch='${o.params.branch||"main"}'`,c+=` --gitlabHost='${d.gitlabHost}'`,c+=` --gitlabToken='${d.gitlabToken}'`,c+=` --gitlabUsername='${d.gitlabUsername}'`,c+=` --gitlabUserEmail='${d.gitlabUserEmail}'`,!0!==o.dryRun&&(await e({cmd:c}),a.isDirty=!0)}}(),r=function(){if(ft)return mt;ft=1;const e=u,n=m,r=I,a=$,o=t;return mt=async({setProgress:t,context:i,deploymentProject:s,deploymentProjectTarget:c,registerToPackageManager:p,yamlTarget:l})=>{await t({message:"Deploying it as gcs package."});const d=i.projectDir,u=n.resolve(d,"package.json"),m=e.readFileSync(u),f=JSON.parse(m);f.name=c.params.name,f.version=r.inc(c.version,"patch"),delete f.scripts,delete f.devDependencies,e.writeFileSync(u,JSON.stringify(f,null,"\t"));const{file:g,data:y}=await o({name:c.config||"gcs",dir:i.projectDir,tags:i.tags});let h="fnet-files-to-gcs";h+=` --projectId='${y.env.GCS_PROJECT_ID}'`,h+=` --bucketName='${y.env.GCS_BUCKET_NAME}'`,h+=` --keyFilename='${n.resolve(n.dirname(g),y.env.GCS_UPLOADER_KEY_FILE)}'`,h+=` --dir='${d}'`,h+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",h+=` --destDir='${f.name}/${f.version}'`,h+=" --metadata.cacheControl='public, max-age=31536000, immutable'",y.env.DOMAIN&&(h+=` --domain='${y.env.DOMAIN}'`),!0!==c.dry_run&&!0!==c.params.dry_run||(h+=" --dryRun"),await a({cmd:h}),e.writeFileSync(u,m),!0!==c.dryRun&&(s.isDirty=!0,c.version=f.version,l.set("version",f.version),await p({target:c,packageJSON:f}))}}(),s=function(){if(yt)return gt;yt=1;const e=u,n=m,r=I,a=i,s=t,c=O,l=p,d=o;return gt=async({atom:t,setProgress:o,context:i,deploymentProject:p,deploymentProjectTarget:u,yamlTarget:m})=>{await o({message:"Deploying it as npm package."});const f=i.projectDir,g=n.resolve(f,"package.json"),y=e.readFileSync(g),h=JSON.parse(y);h.name=u.params.name,h.version=r.inc(u.version,"patch");const w=u.params.bin?.name||u.params.bin;!1!==u.params.bin?.enabled&&w&&"string"==typeof w&&(h.bin={[w]:"dist/cli/esm/index.js",[t.doc.name]:"dist/cli/esm/index.js"}),delete h.scripts,delete h.devDependencies,h.scripts={serve:"npx serve ."},e.writeFileSync(g,JSON.stringify(h,null,"\t"));const v=u.config||"npm";let b=(await s({name:v,dir:i.projectDir,tags:i.tags,optional:!0}))?.data;if(!b){const t=c({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===t.length)throw new Error("Couldnt find schema to create npm config");const r=await l({schema:t[0],tags:i.tags}),a=i.project.projectDir,o=n.resolve(a,".fnet");e.existsSync(o)||e.mkdirSync(o),e.writeFileSync(n.resolve(o,`${v}.fnet`),d.stringify(r)),b=r}if(e.writeFileSync(n.resolve(f,".npmrc"),`//registry.npmjs.org/:_authToken=${b.env.NPM_TOKEN}`),!0!==u.dryRun){if(0!==a.exec("npm publish --access public",{cwd:f}).code)throw new Error("Couldnt publish to npm");e.writeFileSync(g,y),p.isDirty=!0,u.version=h.version,m.set("version",h.version)}},gt}(),c=function(){if(wt)return ht;wt=1;const e=u,n=m,r=f,a=g,o=C,i=t;return ht=async({atom:t,setProgress:s,context:c,deploymentProject:p,deploymentProjectTarget:l,buildId:d,packageDependencies:u,njEnv:m})=>{await s({message:"Deploying it as node-red flow."});const f=c.projectDir,g=c.templateDir,y="workflow"===t.type?"WF":"LIB";let h;if("simple"===l.deploy.template)h={atom:t,packageDependencies:u,red:{tab:{id:l.deploy.id||o.util.generateId(),label:`${y}/${t.id?t.id:r.hostname()}/${t.name}/${l.deploy.name||l.deploy.template}`},function:{id:o.util.generateId(),name:t.doc.name,initialize:{content:e.readFileSync(n.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:t.doc.bundleName}},inject:{id:o.util.generateId(),...l.params?.inject,payload:"json"===l.params?.inject?.payloadType?`'${JSON.stringify(l.params?.inject?.payload)}'`:l.params?.inject?.payload},debug:{id:o.util.generateId()}}};else if("cronjob"===l.deploy.template){let a=l.params?.schedules?cloneDeep(l.params?.schedules):void 0;a?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),h={atom:t,packageDependencies:u,red:{tab:{id:l.deploy.id||o.util.generateId(),label:`${y}/${t.id?t.id:r.hostname()}/${l.deploy.name||l.deploy.template}`},function:{id:o.util.generateId(),name:t.doc.name,initialize:{content:e.readFileSync(n.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:t.doc.bundleName}},cronjob:{id:o.util.generateId(),schedules:a},debug:{id:o.util.generateId()}}}}else{if("http"!==l.deploy.template)return;h={atom:t,packageDependencies:u,red:{tab:{id:l.deploy.id||o.util.generateId(),label:`${y}/${t.id?t.id:r.hostname()}/${l.deploy.name||l.deploy.template}`},function:{id:o.util.generateId(),name:t.doc.name,initialize:{content:e.readFileSync(n.resolve(f,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:t.doc.bundleName}},httpin:{id:o.util.generateId(),method:l.params.method||"get",url:l.params.url},httpout:{id:o.util.generateId()},debug:{id:o.util.generateId()}}}}let w=a.compile(e.readFileSync(n.resolve(g,`deploy/node-red/${l.deploy.template}.yaml.njk`),"utf8"),m).render(h);if(e.writeFileSync(n.resolve(f,"node-red.yaml"),w),w=yaml.load(w),!0===l.dryRun)return;p.isDirty=!0;const v=(await i({name:c.redConfig||"red",dir:c.projectDir,tags:c.tags}))?.data,b=l.deploy.url||v.env.RED_URL,_={};if(!1!==l.deploy.auth&&(_.Authorization="Bearer "+atomAccessToken),l.deploy.id)!0===l.actions?.delete?(await axios({method:"DELETE",url:`${b}/flow/${l.deploy.id}`,headers:_}),delete l.actions.delete,delete l.deploy.id,l.enabled=!1):await axios({method:"PUT",url:`${b}/flow/${l.deploy.id}`,data:w,headers:_});else{const e=await axios({method:"POST",url:`${b}/flow`,data:w,headers:_});l.deploy.id=e.data.id}},ht}(),l=function(){if(bt)return vt;bt=1;const e=a,r=n,o=t;return vt=async({atom:t,Atom:n,setProgress:a,context:i,packageDependencies:s,deploymentProject:c,deploymentProjectTarget:p})=>{await a({message:"Deploying it as workflow lib."});const l=(await o({name:"atom",dir:i.projectDir,tags:i.tags}))?.data;let d,u,m,f=p.deploy.name.split("/");if(1===f.length)u=l.env.ATOM_LIBRARIES_ID,m=p.deploy.name;else{if(2!==f.length)throw new Error("Wrong name path.");{const e=await n.first({where:{name:f[0],parent_id:l.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");u=e.id,m=f[1]}}if(!0===p.dryRun)return;if(c.isDirty=!0,p.deploy.id){if(d=await n.get({id:p.deploy.id}),!d)return}else{if(d=await n.create({parent_id:u,doc:{name:m,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!d)return;p.deploy.id=d.id}const g=i.projectDir;d.doc.contents=[{content:e.readFileSync(r.resolve(g,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:e.readFileSync(r.resolve(g,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:e.readFileSync(r.resolve(g,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],d.doc.name=m,d.doc.dependencies=s,"workflow.lib"===t.type?d.doc.subtype="library":"workflow"===t.type&&(d.doc.subtype="workflow"),d=await n.update(d,{id:d.id})}}(),d=function(){if(jt)return _t;jt=1;const e=t,n=R,r=M,a=I;return _t=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as ios-app package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},_t}(),y=function(){if(kt)return Dt;kt=1;const e=t,n=F,r=M,a=I;return Dt=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as macos-app package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},Dt}(),h=function(){if(Pt)return xt;Pt=1;const e=t,n=q,r=M,a=I;return xt=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as electron package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},xt}(),w=function(){if(At)return St;At=1;const e=t,n=N,r=M,a=I;return St=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as webos package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},St}(),v=function(){if(Tt)return Et;Tt=1;const e=t,n=L,r=M,a=I;return Et=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as nextjs package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},Et}(),_=function(){if(It)return $t;It=1;const e=t,n=U,r=M,a=I;return $t=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as docker package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},$t}(),j=function(){if(Ct)return Ot;Ct=1;const e=u,n=m,r=I,a=$,o=t,i=b.default;return Ot=async({setProgress:t,context:s,deploymentProject:c,deploymentProjectTarget:p,yamlTarget:l})=>{await t({message:"Deploying it as fnet package."});const d=s.projectDir,u=n.resolve(d,"package.json"),m=e.readFileSync(u),f=JSON.parse(m);f.name=p.params.name,f.version=r.inc(p.version,"patch"),delete f.scripts,delete f.devDependencies,e.writeFileSync(u,JSON.stringify(f,null,"\t"));const{file:g,data:y}=await o({name:p.config||"fnet-package",dir:s.projectDir,tags:s.tags});if(!y.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${g}`);if(!y.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${g}`);if(!y.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${g}`);const h=`${y.env.ATOM_API_URL}/v1/auth/token`,w=y.env.ATOM_API_USERNAME,v=y.env.ATOM_API_PASSWORD;let b=await i({method:"POST",url:h,data:{username:w,password:v},headers:{"Content-Type":"application/json"}});const _=b.data?.access_token;if(!_)throw new Error(`Invalid access_token from ${h}`);let j="fnet-files-to-gcs";if(j+=` --projectId='${y.env.GCS_PROJECT_ID}'`,j+=` --bucketName='${y.env.GCS_BUCKET_NAME}'`,j+=` --keyFilename='${n.resolve(n.dirname(g),y.env.GCS_UPLOADER_KEY_FILE)}'`,j+=` --dir='${d}'`,j+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",j+=` --destDir='${f.name}/${f.version}'`,j+=" --metadata.cacheControl='public, max-age=31536000, immutable'",y.env.DOMAIN&&(j+=` --domain='${y.env.DOMAIN}'`),!0!==p.dry_run&&!0!==p.params.dry_run||(j+=" --dryRun"),await a({cmd:j}),e.writeFileSync(u,m),!0===p.dryRun)return;c.isDirty=!0,p.version=f.version,l.set("version",f.version);const D=`${y.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(b=await i({method:"POST",url:D,data:{name:f.name,version:f.version,version_domain:y.env.DOMAIN,docs:p.params.docs,configs:p.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${_}`}}),b.data?.error)throw new Error("Failed to publish fnet package.")}}(),D=function(){if(Mt)return Rt;Mt=1;const e=I,n=t,r=b.default;return Rt=async({setProgress:t,context:a,deploymentProject:o,deploymentProjectTarget:i,yamlTarget:s})=>{await t({message:"Deploying it as fnet form."});const{file:c,data:p}=await n({name:i.config||"fnet-form",dir:a.projectDir,tags:a.tags});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${c}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${c}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${c}`);const l=`${p.env.ATOM_API_URL}/v1/auth/token`,d=p.env.ATOM_API_USERNAME,u=p.env.ATOM_API_PASSWORD;let m=await r({method:"POST",url:l,data:{username:d,password:u},headers:{"Content-Type":"application/json"}});const f=m.data?.access_token;if(!f)throw new Error(`Invalid access_token from ${l}`);o.isDirty=!0;const g=e.inc(i.version,"patch");i.params.version=g,i.version=g,s.set("version",g);const y=`${p.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(m=await r({method:"POST",url:y,data:{name:i.params.name,version:i.params.version,docs:i.params.docs,configs:i.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`}}),m.data?.error)throw new Error("Error publishing fnet form.")}}(),k=function(){if(qt)return Ft;qt=1;const e=I,n=t,r=b.default,o=a,i=$,s=z;return Ft=async({setProgress:t,context:a,deploymentProject:c,deploymentProjectTarget:p,yamlTarget:l})=>{await t({message:"Deploying it as fnet flow."});const{file:d,data:u}=await n({name:p.config||"fnet-flow",dir:a.project.projectDir,tags:a.tags});if(!u.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${d}`);if(!u.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${d}`);if(!u.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${d}`);const m=`${u.env.ATOM_API_URL}/v1/auth/token`,f=u.env.ATOM_API_USERNAME,g=u.env.ATOM_API_PASSWORD;let y=await r({method:"POST",url:m,data:{username:f,password:g},headers:{"Content-Type":"application/json"}});const h=y.data?.access_token;if(!h)throw new Error(`Invalid access_token from ${m}`);c.isDirty=!0;const w=e.inc(p.version,"patch");p.params.version=w,p.version=w,l.set("version",w);const v=`${u.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(y=await r({method:"POST",url:v,data:{name:p.params.name,version:p.params.version,docs:p.params.docs,configs:p.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`}}),y.data?.error)throw new Error("Error publishing fnet flow.");const b=y.data?.upload.id;let _="fnet-dir-zipper";_+=` --sourceDir='${a.project.projectDir}'`,_+=" -p=**/*",_+=" -g",_+=" --stdout_format=json";const j=await i({cmd:_});if(0!==j.code)throw new Error(j.stderr);const D=JSON.parse(j.stdout).path;let k=new s;k.append("file",o.createReadStream(D));const x=await r.request({method:"POST",maxBodyLength:1/0,url:`${u.env.ATOM_API_URL}/v1/service/upload/single/${b}`,headers:{...k.getHeaders(),Authorization:`Bearer ${h}`},data:k});if(x.data?.error)throw new Error("Error uploading fnet flow.")}}(),x=function(){if(Lt)return Nt;Lt=1;const e=I,n=t,r=b.default,o=a,i=$,s=z;return Nt=async({setProgress:t,context:a,deploymentProject:c,deploymentProjectTarget:p,yamlTarget:l})=>{await t({message:"Deploying it as fnet node."});const{file:d,data:u}=await n({name:p.config||"fnet-node",dir:a.project.projectDir,tags:a.tags});if(!u.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${d}`);if(!u.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${d}`);if(!u.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${d}`);const m=`${u.env.ATOM_API_URL}/v1/auth/token`,f=u.env.ATOM_API_USERNAME,g=u.env.ATOM_API_PASSWORD;let y=await r({method:"POST",url:m,data:{username:f,password:g},headers:{"Content-Type":"application/json"}});const h=y.data?.access_token;if(!h)throw new Error(`Invalid access_token from ${m}`);c.isDirty=!0;const w=e.inc(p.version,"patch");p.params.version=w,p.version=w,l.set("version",w);const v=`${u.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(y=await r({method:"POST",url:v,data:{name:p.params.name,version:p.params.version,docs:p.params.docs,configs:p.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`}}),y.data?.error)throw new Error("Error publishing fnet node.");const b=y.data?.upload.id;let _="fnet-dir-zipper";_+=` --sourceDir='${a.project.projectDir}'`,_+=" -p=**/*",_+=" -g",_+=" --stdout_format=json";const j=await i({cmd:_});if(0!==j.code)throw new Error(j.stderr);const D=JSON.parse(j.stdout).path;let k=new s;k.append("file",o.createReadStream(D));const x=await r.request({method:"POST",maxBodyLength:1/0,url:`${u.env.ATOM_API_URL}/v1/service/upload/single/${b}`,headers:{...k.getHeaders(),Authorization:`Bearer ${h}`},data:k});if(x.data?.error)throw new Error("Error uploading fnet node.")}}(),P=function(){if(zt)return Ut;zt=1;const e=t,n=B,r=M,a=I;return Ut=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as Rust package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},Ut}(),S=function(){if(Jt)return Bt;Jt=1;const e=t,n=J,r=M,a=I;return Bt=async({atom:t,target:o,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as pyip package."});const d=o?.config?await e({name:o.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=a.inc(o.version||"0.1.0","patch");o.params.version=u,o.version=u,l.set("version",u);const m=r(o.params);m.dependencies=r(c);const f={atom:t,params:m,config:d?.config,src:s,dest:s};return{deployer:await n(f)}},Bt}();return Wt=async t=>{const{atom:n,packageDependencies:a,context:o,deploymentProjectTarget:i,setProgress:p,deploymentProject:u,yamlTarget:m}=t;if(!0===i.enabled)if("lib"===i.type)await l({...t});else if("red"===i.type)await c({...t});else if("npm"===i.type)await s({...t});else if("gcs"===i.type)await r({...t});else if("gitlab"===i.type)await e({...t});else if("fnet-package"===i.type)await j({...t});else if("fnet-form"===i.type)await D({...t});else if("fnet-node"===i.type)await x({...t});else if("fnet-flow"===i.type)await k({...t});else{let e;if("nextjs"===i.type?e=v:"webos"===i.type?e=w:"electron"===i.type?e=h:"docker"===i.type?e=_:"ios"===i.type?e=d:"macos"===i.type?e=y:"rust"===i.type?e=P:"pyip"===i.type&&(e=S),!e)return;await e({atom:n,target:i,onProgress:p,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:m}),u.isDirty=!0}},Wt}function wn(){if(Ht)return Gt;Ht=1;const e=u,n=m,r=f,a=o,i=g,s=function(){if(Y)return X;Y=1;const e=y,t=h;return X=async()=>{if(!await t({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const n=e.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await n.connect(),n}}(),{nanoid:c}=w,p=function(){if(Z)return V;Z=1;const{Api:e}=v,t=b.default,n=_;return V=class{init({config:r,accessToken:a}){return new Promise(((o,i)=>{if(e.set_api_url(r.data.url),a)return e.set_req_token(a),void o(a);t({method:"POST",url:`${r.data.issuer}/protocol/openid-connect/token`,data:n.stringify(r.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((t=>{e.set_req_token(t.data.access_token),o(t.data.access_token)})).catch((t=>{e.set_req_token(),i(t)}))}))}}}(),l=en(),j=(Te||(Te=1,Ee=async e=>{const{atom:t,context:n,setProgress:r}=e;r("Initializing features..."),t.doc.features=t.doc.features||{};const a=t.doc.features;!1===a.cli?a.cli={enabled:!1}:(a.cli,a.cli={enabled:!0}),a.cli.enabled=!0===a.cli.enabled&&(!1===t.doc.features.form_enabled||!0===a.cli.extend||!0===a.cli.enabled)}),Ee),k=tn(),x=Ce?Oe:(Ce=1,Oe=async({atom:e,packageDependencies:t,packageDevDependencies:n,setProgress:r})=>{r("Initializing dependencies")}),P=nn(),S=an(),A=on(),E=function(){if(Je)return Be;Je=1;const e=u,t=m,n=d;return Be=async({atom:r,setProgress:a,context:o,packageDependencies:i})=>{if(!0!==r.doc.features.cli.enabled)return;await a({message:"Creating cli."});const s={atom:r,packageDependencies:i},c=o.templateDir,p=t.join(o.projectDir,"src","cli");e.existsSync(p)||e.mkdirSync(p,{recursive:!0}),await n({pattern:["index.py.njk","__init__.py.njk"],dir:t.join(c,"src","cli"),outDir:p,context:s})},Be}(),T=sn(),$=cn(),I=pn(),O=ln(),C=dn(),R=un(),M=mn(),F=fn(),q=gn(),N=yn(),L=rn(),U=hn(),{Atom:z}=v,B=W,J=t,H=D,Q=K,ee=G;return Gt=class{#e;#t;#n;#r;#a;#o;#i;#s;#c;#p;#l;#d;#u;#m;#f;#g;#y;constructor(e){this.#e=new p,this.#t=e,this.#o=[],this.#i=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#o,packageDevDependencies:this.#i,setProgress:this.setProgress.bind(this),context:this.#t,Atom:z,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,n){this._redis_client&&await this._redis_client.SETEX(e,n||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async initAuth(){this.#t.id&&(this.#s=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#s)}async initLibrary(){const e=this.#t.id;this.#n=this.#t.project?.libraryAtom||await z.get({id:e});let t=this.#n.doc.bundleName;t=t||(this.#n.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#n.doc.bundleName=t,this.#n.type=this.#n.type||"workflow.lib",this.#y.atom=this.#n}async initLibraryDir(){this.setProgress({message:"Initializing library directory."});const t=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const r=Q({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const t of r)e.rmSync(t,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let a=t;e.existsSync(a)||e.mkdirSync(a,{recursive:!0}),a=n.join(t,"src"),e.existsSync(a)||e.mkdirSync(a,{recursive:!0}),a=n.join(t,"src","default"),e.existsSync()||e.mkdirSync(a,{recursive:!0})}async initLibraryDirPython(){this.setProgress({message:"Initializing library directory."});const t=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const a=Q({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const t of a)e.rmSync(t,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let o=t;e.existsSync(o)||e.mkdirSync(o,{recursive:!0}),o=n.join(t,"src"),e.existsSync(o)||e.mkdirSync(o,{recursive:!0}),o=n.join(t,"src","default");const i=this.#t.projectSrcDir;if(!e.existsSync(o))try{"win32"===r.platform()?e.symlinkSync(i,o,"junction"):e.symlinkSync(i,o,"dir")}catch(e){throw new Error(`Couldn't create symlink. Error: ${e.message}`)}}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#t.templateDir;this.#r=i.configure(e,{watch:!1,dev:!0}),this.#y.njEnv=this.#r}async initLibs(){this.setProgress({message:"Initializing external libs."});const e=[{name:this.#n.doc.name,type:"atom",parent_id:this.#n.parent_id}];this.#a=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#o})}async initLibsPython(){this.setProgress({message:"Initializing external libs."});const e=this.#n;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=[{name:this.#n.doc.name,type:"atom",parent_id:this.#n.parent_id,atom:e}];this.#a=t}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const n=e.filter((e=>"atom"===e.type));for(let e=0;e<n.length;e++){const r=n[e],a=await this.findAtomLibrary({url:r.name});r.atom=a;const o=a.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));o?.forEach((e=>{const n=t.find((t=>t.package===e.package));n?"string"==typeof e.path?(n.path||[]).some((t=>t===e.path))||(n.path=n.path||[],n.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(n.path||[]).some((t=>t===e))||(n.path=n.path||[],n.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=B({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#l),"ac:"===t.protocol){const n=t.pathname.split("/");if(1===n.length)return await z.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===n.length){const e=await z.first({where:{name:n[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await z.first({where:{name:n[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===t.protocol){const e=this.#n;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=n.resolve(this.#t.projectSrcDir,"index.js"),r=await H({file:t,recursive:!0}),a=e.doc.dependencies,o=!0===this.#n.doc.features.all_parsed_imports?r.all:r.required;for await(const e of o){if("npm"!==e.type)continue;if(a.find((t=>t.package===e.package)))continue;const t=await L({name:e.package,projectDir:this.#t.projectDir,setProgress:this.#y.setProgress});a.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:t}){await this.setProgress({message:"Creating external lib files."}),this.#n.typesDir="./types";const r=t.filter((e=>"atom"===e.type));for(let t=0;t<r.length;t++){const a=r[t].atom,o=this.#t.projectDir;if("local:"===a.protocol){const t=n.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),r=n.relative(n.join(this.#t.projectDir,"src","default"),t);if(!e.existsSync(t)){e.mkdirSync(n.dirname(t),{recursive:!0});let r="export default async (args)=>{\n";r+="}",e.writeFileSync(t,r,"utf8")}a.relativePath=r.split(n.sep).join("/"),this.#n.typesDir=`./types/${n.basename(o)}/src`}else{const t=n.join(o,"src","libs",`${a.id}.js`),r=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;e.writeFileSync(t,r.content,"utf8")}}}async createAtomLibFilesPython({libs:t}){await this.setProgress({message:"Creating external lib files."});const r=t.filter((e=>"atom"===e.type));for(let t=0;t<r.length;t++){const a=r[t].atom;if("local:"===a.protocol){const t=n.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.py`);if(!e.existsSync(t)){e.mkdirSync(n.dirname(t),{recursive:!0});let r="def default():\n";r+=' print("Hello world!")\n',e.writeFileSync(t,r,"utf8")}}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const t={libs:this.#a.filter((e=>"atom"===e.type)),libraryAtom:this.#n,atom:this.#n},r=this.#t.templateDir,a=i.compile(e.readFileSync(n.resolve(r,n.join("src","default","engine.js.njk")),"utf8"),this.#r).render(t),o=this.#t.projectDir,s=n.resolve(o,n.join("src","default","index.js"));e.writeFileSync(s,a,"utf8")}async createProjectYaml(){const t="node.yaml",r=`Creating ${t}`;await this.setProgress({message:r});const{content:o,...s}=this.#n.doc,c={content:a.stringify(s)},p=this.#t.templateDir,l=i.compile(e.readFileSync(n.resolve(p,`${t}.njk`),"utf8"),this.#r).render(c),d=this.#t.projectDir,u=n.resolve(d,`${t}`);e.writeFileSync(u,l,"utf8")}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&await n.save()}}else if(this.#n.id){const e=await z.list({type:"library.deploy",parent_id:this.#n.id});for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&(n=await z.update(n,{id:n.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:n}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const r=Object.keys(t.doc||{}),a=n||{};for(let e=0;e<r.length;e++){const n=t.doc[r[e]];n.name=r[e];const o=a.get(r[e]);await U({...this.#y,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:o})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#t.id)return;let r=await z.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});r?(r.doc.versions.splice(0,0,{v:n.version}),await z.update(r,{id:r.id})):r=await z.create({parent_id:this.#d.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:n.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(ee.blue(t)),await this._cache_set(this.#p,{status:"IN_PROGRESS",message:t})}async initNode(){await l(this.#y),await k(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initPython(){await j(this.#y),await x(this.#y),await this.initLibraryDirPython(),await this.initNunjucks(),await this.initLibsPython()}async nodeBuild(){this.#m&&(await this.createAtomLibFiles({libs:this.#a}),await this.createEngine(),await this.createProjectYaml(),await C(this.#y),await O(this.#y),await I(this.#y),await $(this.#y),await A(this.#y),await P(this.#y),await T(this.#y),await S(this.#y),await R(this.#y),await M(this.#y),this.#f&&(await F(this.#y),await N(this.#y),this.#g&&await this.deploy()))}async pythonBuild(){this.#m&&(await this.createAtomLibFilesPython({libs:this.#a}),await this.createProjectYaml(),await C(this.#y),await I(this.#y),await E(this.#y),this.#f&&(await q(this.#y),this.#g&&await this.deploy()))}async init(){this._redis_client=await s(),this.#c=this.#t.buildId||c(24),this.#y.buildId=this.#c,this.#u=this.#t.mode,this.#m=["all","deploy","build","file"].includes(this.#u),this.#f=["all","deploy","build"].includes(this.#u),this.#g=["all","deploy"].includes(this.#u),this.#l=this.#t.protocol,this.#p="BUILD:"+this.#c,this.#d=(await J({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),"node"===this.#n.doc.features.runtime.type?await this.initNode():"python"===this.#n.doc.features.runtime.type&&await this.initPython()}catch(e){throw await this._cache_set(this.#p,{status:"FAILED",message:e?.message||e}),e}}async build(){try{"node"===this.#n.doc.features.runtime.type?await this.nodeBuild():"python"===this.#n.doc.features.runtime.type&&await this.pythonBuild(),await this._cache_set(this.#p,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#p,{status:"FAILED",message:e.message||e}),console.log(e),e}}},Gt}var vn=H(function(){if(Vt)return Zt;Vt=1;const f=process.cwd(),{spawn:g}=e;t({name:["redis"],dir:f,optional:!0});const y=n,h=r,w=a,v=o,b=i,_=s,j=c,D=t,k=p,x=l,P=d,S=wn(),A=function(){if(Yt)return Xt;Yt=1;const e=u,t=m;return Xt=function({baseDir:n=__dirname}){let r=n;for(;r!==t.parse(r).root;){const n=t.join(r,"node_modules");if(e.existsSync(n))return n;r=t.dirname(r)}return null}}()({baseDir:__dirname}),E="win32"===process.platform?";":":";process.env.PATH=`${y.join(A,"/.bin")}${E}${process.env.PATH}`;let T=h(process.argv.slice(2)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0}).option("vscode",{type:"boolean",default:!0,alias:"vs"}).option("runtime",{type:"string",default:"node",choices:["node","python"]})),(async e=>{try{const t=y.resolve(A,"@fnet/cli-project-node/dist/template/project"),n=y.resolve(f,e.name);w.existsSync(n)||w.mkdirSync(n),await P({dir:t,outDir:n,context:{name:e.name,runtime:e.runtime,platform:_.platform()},copyUnmatchedAlso:!0});let r=b.exec("fnode build",{cwd:n});if(0!==r.code)throw new Error("Failed to build project.");if(b.which("git")&&(r=b.exec("git init --initial-branch=main",{cwd:n}),0!==r.code))throw new Error("Failed to initialize git.");if(b.which("code")&&e.vscode&&(r=b.exec(`cd ${n} && code .`),0!==r.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=y.resolve(A,"@fnet/cli-project-node/dist/template/project"),n=process.cwd(),r=await O(e);if(e.update){if(await P({dir:t,outDir:n,context:{name:r.project.projectFileParsed.name,runtime:r.project.runtime.type,platform:_.platform()},copyUnmatchedAlso:!0}),0!==b.exec("fnode build",{cwd:n}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await O(e),n=new S(t);await n.init(),await n.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await O({...e,mode:"all"}),n=new S(t);await n.init(),await n.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await O({...e,mode:"file"}),n=new S(t);await n.init(),await n.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function $(e,{name:t,bin:n,preArgs:r=[]}){return e.command(`${t||n} [commands..]`,`${n} ${r.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await O(e),{projectDir:a}=t,o=process.argv.slice(3);g(n,[...r,...o],{cwd:a,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}function I(e,{name:t,bin:n,preArgs:r=[]}){return e.command(`${t||n} [commands..]`,`${n} ${r.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const a=await O(e),{projectDir:o}=a,i=process.argv.slice(3);n=y.join(o,".conda","bin",n||t);g(n,[...r,...i],{cwd:o,stdio:"inherit",shell:!0,env:{PYTHONPATH:o}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function O(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:y.resolve(A,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:y.resolve(A,"./@fnet/cli-project-common/dist/template/default"),projectDir:y.resolve(f,`./.output/${e.id}`),tags:e.ftag};{const t=await async function({tags:e}){const t=y.resolve(f,"node.yaml");if(!w.existsSync(t))throw new Error("node.yaml file not found in current directory.");const{raw:n,parsed:r}=await j({file:t,tags:e}),a=y.dirname(t);r.features=r.features||{};const o=r.features;o.runtime=o.runtime||{},o.runtime.type=o.runtime.type||"node","python"===o.runtime.type?o.runtime.template=o.runtime.template||"python":o.runtime.template=o.runtime.template||"default";const i={libraryAtom:{doc:{...r},fileName:"index"},projectDir:a,projectFilePath:t,projectFileContent:n,projectFileParsed:r,runtime:o.runtime};let s=y.resolve(a,"fnet/targets.yaml");if(!w.existsSync(s)&&(s=y.resolve(a,"node.devops.yaml"),w.existsSync(s))){const e=y.resolve(a,"fnet");w.existsSync(e)||w.mkdirSync(e),w.copyFileSync(s,y.resolve(a,"fnet/targets.yaml")),w.unlinkSync(s)}if(w.existsSync(s)){const{raw:t,parsed:n}=await j({file:s,tags:e}),r=v.parseDocument(t);i.devops={filePath:s,fileContent:t,yamlDocument:r,doc:{...n},type:"library.deploy",save:async()=>{w.writeFileSync(i.devops.filePath,r.toString())}}}const c=y.resolve(a,"readme.md");if(w.existsSync(c)){const e=w.readFileSync(c,"utf8");i.readme={filePath:c,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return i}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:y.resolve(A,`./@fnet/cli-project-node/dist/template/${t.runtime.template}`),templateCommonDir:y.resolve(A,`./@fnet/cli-project-common/dist/template/${t.runtime.template}`),projectDir:y.resolve(t.projectDir,"./.workspace"),projectSrcDir:y.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}return T=T.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await O(e),{project:n}=t,{projectDir:r,projectFileParsed:a}=n,o=a.input;if(!o)throw new Error("Config schema not found in project file.");const i=await k({schema:o,format:"yaml"}),s=y.resolve(r,".fnet");w.existsSync(s)||w.mkdirSync(s);const c=y.resolve(s,`${e.name}.fnet`);w.writeFileSync(c,i)}catch(e){console.error(e.message),process.exit(1)}})),T=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await O(e),{project:n}=t,{projectDir:r,projectFileParsed:a}=n,o=a.input;if(!o)throw new Error("Config schema not found in project file.");const i=y.resolve(r,".fnet"),s=y.resolve(i,`${e.name}.fnet`),c=await k({schema:o,format:"yaml",ref:s});w.existsSync(i)||w.mkdirSync(i),w.writeFileSync(s,c)}catch(e){console.error(e.message),process.exit(1)}}))}(T),T=$(T,{bin:"npm"}),T=$(T,{bin:"node"}),T=$(T,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),T=$(T,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),T=$(T,{name:"app",bin:"npm",preArgs:["run","app","--"]}),T=$(T,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),T=$(T,{bin:"npx"}),T=$(T,{bin:"cdk"}),T=$(T,{bin:"aws"}),T=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await O(e),{projectDir:r}=t,a=e.config,o=await D({name:a,dir:r,transferEnv:!1,optional:!0,tags:t.tags}),i=o?.data?.env||void 0,s=e.command,c=process.argv.slice(5);g(s,[...n,...c],{cwd:r,stdio:"inherit",shell:!0,env:{...process.env,...i}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(T,{name:"with"}),T=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const t=await O(e),{project:n}=t,{projectFileParsed:r}=n,a=r.commands;if(!a)throw new Error("Commands not found in project file.");const o=a[e.group];if(!o)throw new Error(`Command group '${e.group}' not found in project file.`);await x({commands:o})}catch(e){console.error(e.message),process.exit(1)}}))}(T,{name:"run"}),T=I(T,{name:"python"}),T=I(T,{name:"python3"}),T=I(T,{name:"pip"}),T=I(T,{name:"pip3"}),T.demandCommand(1,"You need at least one command before moving on").help().argv,Zt}());module.exports=vn;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
$schema: "https://json-schema.org/draft/2020-12/schema"
|
|
2
|
+
type: object
|
|
3
|
+
properties:
|
|
4
|
+
env:
|
|
5
|
+
type: object
|
|
6
|
+
description: "Environment configuration"
|
|
7
|
+
properties:
|
|
8
|
+
NPM_TOKEN:
|
|
9
|
+
type: string
|
|
10
|
+
description: "NPM token"
|
|
11
|
+
required:
|
|
12
|
+
- NPM_TOKEN
|
|
13
|
+
required:
|
|
14
|
+
- env
|
package/dist/builder/wf-cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("child_process"),t=require("@fnet/config"),n=require("path"),o=require("yargs/yargs"),i=require("fs"),r=require("yaml"),a=require("shelljs"),s=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),l=require("@fnet/shell-flow"),p=require("@flownet/lib-render-templates-dir"),d=require("node:fs"),f=require("node:path"),u=require("nunjucks"),m=require("lodash.clonedeep"),g=require("isobject"),y=require("redis"),h=require("@flownet/lib-is-redis-online"),w=require("nanoid"),v=require("@flownet/lib-atom-api-js"),b=require("axios"),x=require("qs"),k=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),_=require("@fnet/npm-list-versions"),D=require("@fnet/npm-pick-versions"),P=require("object-hash"),S=require("ajv/dist/2020"),A=require("ajv/dist/standalone"),T=require("ajv-formats"),E=require("@fnet/shell"),$=require("semver"),O=require("@fnet/up-list-files"),C=require("node:os"),I=require("@node-red/util"),N=require("@flownet/lib-to-ios-app"),M=require("@flownet/lib-to-macos-app"),F=require("@flownet/lib-to-electron"),R=require("@flownet/lib-to-webos"),q=require("@flownet/lib-to-nextjs"),U=require("@flownet/lib-to-docker"),L=require("form-data"),B=require("@fnet/to-rust"),J=require("@fnet/to-pyip"),z=require("@flownet/lib-parse-node-url"),W=require("@flownet/lib-bpmn-from-flow"),K=require("@fnet/expression"),G=require("chalk"),H=require("@fnet/list-files"),V=require("lodash.pick"),X=require("lodash.omit");function Y(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Z,Q,ee,te,ne,oe,ie,re,ae,se,ce,le,pe,de,fe,ue,me,ge,ye,he,we,ve,be,xe,ke,je,_e,De,Pe,Se,Ae,Te,Ee,$e,Oe,Ce,Ie,Ne,Me,Fe,Re,qe,Ue,Le,Be,Je,ze,We,Ke,Ge,He,Ve,Xe,Ye,Ze,Qe,et,tt,nt,ot,it,rt,at,st,ct,lt,pt,dt,ft,ut,mt,gt,yt,ht,wt,vt,bt,xt,kt,jt,_t,Dt,Pt,St,At,Tt,Et,$t,Ot,Ct,It,Nt,Mt,Ft,Rt,qt,Ut,Lt,Bt,Jt,zt,Wt,Kt,Gt,Ht,Vt,Xt,Yt,Zt,Qt,en,tn,nn,on,rn,an,sn,cn,ln,pn,dn,fn,un,mn,gn,yn,hn,wn,vn,bn,xn,kn,jn,_n,Dn,Pn,Sn,An,Tn,En,$n,On,Cn,In={};function Nn(){if(oe)return ne;oe=1;const e=k;return ne=({feature:t,features:n,packageDevDependencies:o})=>{const{name:i,packages:r,options:a,extraCheck:s,explicit:c}=t,l=`${i}_enabled`,p=n.rollup_output||{},d=Object.keys(p);let f=a||{};const u=n[i]?.options;u&&(f=e(f,u));const m=!n[i]||!1===n[i]?.enabled;d.forEach((e=>{const t=n.rollup_output[e];if(t){if(Reflect.has(t,i)){if(m||!t[i]||!1===t[i]?.enabled)return void delete t[i];!0===t[i]&&(t[i]={enabled:!0,options:f})}else{if(m||c||!1===n[l])return;t[i]={enabled:!0}}t[i]=t[i]||{},t[i].options={...f,...t[i].options}}}));let g=d.some((e=>!0===n.rollup_output[e][i]?.enabled));s&&(g=s()&&g),n[l]=g,g&&r.forEach((e=>o.push({package:e[0],version:e[1]})))}}function Mn(){if($e)return Ee;$e=1;const e=k,t=d,n=f,o=j,i=function(){if(re)return ie;re=1;const e=Nn();return ie=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:i,packageDevDependencies:o})},ie}(),r=function(){if(se)return ae;se=1;const e=Nn();return ae=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:i,packageDevDependencies:o})},ae}(),a=function(){if(le)return ce;le=1;const e=Nn();return ce=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:i,packageDevDependencies:o})},ce}(),s=function(){if(de)return pe;de=1;const e=Nn();return pe=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:i,packageDevDependencies:o})},pe}(),c=function(){if(ue)return fe;ue=1;const e=Nn();return fe=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:i,packageDevDependencies:o})},fe}(),l=function(){if(ge)return me;ge=1;const e=Nn();return me=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:i,packageDevDependencies:o})},me}(),p=function(){if(he)return ye;he=1;const e=Nn();return ye=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:i,packageDevDependencies:o})},ye}(),u=function(){if(ve)return we;ve=1;const e=Nn();return we=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:i,packageDevDependencies:o})},we}(),m=function(){if(xe)return be;xe=1;const e=Nn();return be=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:i,packageDevDependencies:o})},be}(),g=function(){if(je)return ke;je=1;const e=Nn();return ke=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:i,packageDevDependencies:o})},ke}(),y=function(){if(De)return _e;De=1;const e=Nn();return _e=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:i,packageDevDependencies:o})},_e}(),h=function(){if(Se)return Pe;Se=1;const e=Nn();return Pe=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features,r={};!0===i.app?.enabled&&(r.targets=r.targets||[],r.targets.push({src:"./src/app/index.html",dest:i.app.dir}),Reflect.has(i.app,"copy")||Reflect.has(i,"copy")||(i.copy=!0)),e({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:r},features:i,packageDevDependencies:o})},Pe}(),w=function(){if(Te)return Ae;Te=1;const e=Nn();return Ae=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features,r=i.css&&!1!==i.css.enabled;let a=[];r&&(a.push(["rollup-plugin-postcss","^4"]),a.push(["sass","^1.66"]),(i.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":a.push(["postcss-import","^15"]);break;case"postcss-url":a.push(["postcss-url","^10"]);break;case"postcss-preset-env":a.push(["postcss-preset-env","^9"]);break;case"autoprefixer":a.push(["autoprefixer","^10"]);break;case"cssnano":a.push(["cssnano","^6"])}}))),e({feature:{name:"css",packages:a},features:i,packageDevDependencies:o})},Ae}();function v({dir:e,name:o="index"}){let i=n.resolve(e,`./${o}.tsx`);if(t.existsSync(i)||(i=n.resolve(e,`./${o}.ts`)),t.existsSync(i)||(i=n.resolve(e,`./${o}.jsx`)),t.existsSync(i)||(i=n.resolve(e,`./${o}.js`)),!t.existsSync(i))return{};const r=i,a=n.extname(i);return{file:r,ext:a,ts:".ts"===a||".tsx"===a,name:o}}return Ee=async t=>{const{atom:d,context:f,setProgress:b}=t;b("Initializing features..."),d.doc.features=d.doc.features||{};const x=d.doc.features;x.project=x.project||{},x.project.format=x.project.format||x.project_format||"esm",x.project_format=x.project.format,x.dts_enabled=!0===x.dts||void 0!==x.dts&&!1!==x.dts,x.hasOwnProperty("all_parsed_imports")||(x.all_parsed_imports=!0);const k=n.resolve(f.project.projectDir),j=v({dir:n.resolve(k,"./app")});if(j.file){b("Parsing app entry imports...");let e=await o({file:j.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));x.app_uses_jsx=t,x.app_has_entry=!0,e=await o({file:j.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),x.app_entry_uses_jsx=t,x.app_entry_is_ts=j.ts,x.app_entry_ext=j.ext}const _=v({dir:n.resolve(k,"./cli")});if(_.file){b("Parsing cli entry imports...");let e=await o({file:_.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));x.cli_uses_jsx=t,x.cli_has_entry=!0,e=await o({file:_.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),x.cli_entry_uses_jsx=t,x.cli_entry_is_ts=_.ts,x.cli_entry_ext=_.ext}if("workflow.lib"===d.type){const e=v({dir:n.resolve(k,"./src")});if(e.file){b("Parsing src entry imports...");let t=await o({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));x.src_uses_jsx=n,x.src_has_entry=!0,t=await o({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),x.src_entry_uses_jsx=n,x.src_entry_is_ts=e.ts,x.src_entry_ext=e.ext}}const D=Reflect.has(x,"app_entry_uses_jsx")?!0===x.app_entry_uses_jsx:!0===x.src_entry_uses_jsx,P=Reflect.has(x,"cli_entry_uses_jsx")?!0===x.cli_entry_uses_jsx:!0===x.src_entry_uses_jsx;x.form_enabled=!0===d.doc.form||!0===d.doc.form?.enabled||!0===x.form||!0===x.form?.enabled,x.multiple_enabled=x.multiple_enabled||!0===x.multiple||!0===x.multiple?.enabled,!1===x.app?x.app={enabled:!1}:!0===x.app?x.app={enabled:!0,extend:!0===x.app_has_entry,export:!0,react:D}:x.app={enabled:!0,extend:!0===x.app_has_entry,export:!0,react:D,...x.app||{}},x.app.enabled=!0===x.app.enabled&&(!0===d.doc.features.form_enabled||!0===x.app.extend||!0===x.app.enabled),x.app.format=x.app.format||"esm",x.app.folder=x.app.folder||x.app.format||"default",!1===x.cli?x.cli={enabled:!1}:!0===x.cli?x.cli={enabled:!0,extend:!0===x.cli_has_entry,export:!0,react:P}:x.cli={enabled:!0,extend:!0===x.cli_has_entry,export:!0,react:P,...x.cli||{}},x.cli.enabled=!0===x.cli.enabled&&(!1===d.doc.features.form_enabled||!0===x.cli.extend||!0===x.cli.enabled),x.cli.format=x.cli.format||"esm",x.cli.folder=x.cli.folder||x.cli.folder||"esm",x.cli.node_options=x.cli.node?.options||x.cli.node_options||"",x.json=x.cli.enabled||x.json;const S={cjs:{format:"cjs",context:x.form_enabled?"window":"global",babel:!0===x.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==x.cjs,copy:!1},esm:{format:"esm",context:x.form_enabled?"window":"global",babel:!0===x.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!1!==x.esm,copy:!0},iife:{format:"iife",context:x.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==x.iife,terser:!0,copy:!1}};!0===x.webos&&(S.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===x.electron&&(S.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===x.nextjs&&(S.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===x.ios&&(S.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===x.macos&&(S.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===x.app.enabled&&(x.app.dir=`./dist/app/${x.app.folder}`,S.app={format:x.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:x.app.dir,terser:!0,output_exports:!1===x.app.export?"none":"auto"}),!0===x.cli.enabled&&(x.cli.dir=`./dist/cli/${x.cli.folder}`,S.cli={format:x.cli.format,context:"global",babel:!0===x.src_uses_jsx||!0===x.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:x.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===x.cli.export?"none":"auto"});const A={server:".",startPath:`${n.normalize(x.app.dir||".")}`,files:[n.normalize("./dist/**/*")],cors:!0,open:!1};x.babel_options=e({targets:{browsers:"last 9 versions, not dead",node:"18"}},x.babel_options||x.babel?.options),x.browsersync_options=e(A,x.browsersync_options||x.browsersync?.options||{}),x.replace_options=e({},x.replace_options||x.replace?.options||{}),Reflect.has(x.browsersync_options,"proxy")&&delete x.browsersync_options.server,x.rollup=x.rollup||{},x.rollup_output=e(S,x.rollup_output||x.rollup?.output||{}),x.preact_enabled=!0===x.preact||x.preact&&!1!==x.preact?.enabled;let T=Object.keys(S);for(const t of T){const n=S[t];n&&(!1!==x.rollup[t]?(n.babel_options=n.babel_options||x.babel_options,n.browsersync_options=e(x.browsersync_options,n.browsersync_options),n.replace_options=e(x.replace_options,n.replace_options),x.preact_enabled&&(n.alias_enabled=!0,n.alias=n.alias||{},n.alias.entries=n.alias.entries||{},n.alias.entries.react="preact/compat",n.alias.entries["react-dom"]="preact/compat"),x.form_enabled&&(n.babel=!0)):delete x.rollup_output[t])}T=Object.keys(x.rollup_output),x.babel_enabled=T.some((e=>!0===x.rollup_output[e].babel)),x.browser_enabled=T.some((e=>!0===x.rollup_output[e].babel)),x.browsersync_enabled=!1!==x.browsersync&&T.some((e=>!0===x.rollup_output[e].browsersync)),x.browsersync_enabled=x.browsersync_enabled&&x.app.enabled,x.dependency_auto_enabled=!1!==x.dependency_auto&&!1!==x.dependency_auto?.enabled,x.npm_install_flags=x.npm_install_flags||"",x.react_version=x.react_version||x.react?.version||18,w(t),h(t),y(t),g(t),m(t),p(t),u(t),l(t),c(t),s(t),a(t),i(t),r(t)},Ee}function Fn(){if(Ce)return Oe;Ce=1;const e=_;return Oe=async({atom:t,packageDependencies:n,packageDevDependencies:o,setProgress:i})=>{if(i("Initializing dependencies"),"workflow"===t.type&&(n.push({package:"get-value",version:"^3"}),n.push({package:"set-value",version:"^4"})),t.doc.features.form_enabled&&t.doc.features.dependency_auto_enabled){let o="^18.2";i("Fetching React versions");o=`^${(await e({name:"react",groupBy:{major:!0}})).find((e=>e[0]===t.doc.features.react_version.toString()))[0]}`,n.push({package:"react",version:o}),n.push({package:"react-dom",version:o}),"workflow"===t.type&&(n.push({package:"@flownet/react-app",version:"^0.1"}),n.push({package:"@flownet/react-app-state",version:"^0.1"}))}t.doc.features.preact_enabled&&n.push({package:"preact",version:"^10"}),!0===t.doc.features.cli.enabled&&(n.push({package:"@fnet/args",version:"^0.1"}),o.push({package:"ajv",version:"^8"}),t.doc.features.cli.fargs&&!1!==t.doc.features.cli.fargs?.enabled&&n.push({package:"@fnet/config",version:"0.2.21"})),t.doc.features.render&&!1!==t.doc.features.render.enabled&&o.push({package:"@flownet/lib-render-templates-dir",version:"0.1.17"}),o.push({package:"@babel/core",version:"^7"}),o.push({package:"@rollup/plugin-commonjs",version:"^28"}),o.push({package:"@rollup/plugin-node-resolve",version:"^15"}),o.push({package:"@rollup/plugin-replace",version:"^6"}),o.push({package:"rollup",version:"^4"}),t.doc.features.dts_enabled&&o.push({package:"rollup-plugin-dts",version:"^6"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),o.push({package:"@rollup/plugin-alias",version:"^5"}),o.push({package:"fs-extra",version:"^11"}),t.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6"}),o.push({package:"@babel/preset-env",version:"^7"}),o.push({package:"@babel/preset-react",version:"^7"}),t.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":o.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":o.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":o.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":o.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":o.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),o.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),t.doc.features.browsersync_enabled&&o.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})},Oe}function Rn(){if(Ne)return Ie;Ne=1;const e=d,t=f,n=p;return Ie=async({atom:o,setProgress:i,context:r,packageDependencies:a})=>{if(!0!==o.doc.features.app.enabled)return;await i({message:"Creating app folder"});const s={atom:o,packageDependencies:a,ts:Date.now()},c=r.templateDir,l=t.resolve(r.projectDir,"src/app");e.existsSync(l)||e.mkdirSync(l,{recursive:!0});let p=["index.js.njk"];!1!==o.doc.features.app.html&&p.push("index.html.njk"),await n({pattern:p,dir:t.resolve(c,"src/app"),outDir:l,context:s})},Ie}function qn(){if(Fe)return Me;Fe=1;const e=D,t=P,n=d,o=f;return Me=async({projectDir:i,name:r,setProgress:a,count:s=1})=>{let c;const l=t(["npm-pick-versions",r,s]),p=o.join(i,".cache"),d=o.join(p,l+".json");return n.existsSync(d)?(a&&a(`Picking npm version of ${r} from cache ...`),c=JSON.parse(n.readFileSync(d,"utf8"))):(a&&a(`Picking npm version of ${r} ...`),c=await e({name:r,count:s}),n.mkdirSync(p,{recursive:!0}),n.writeFileSync(d,JSON.stringify(c),"utf8")),c}}function Un(){if(qe)return Re;qe=1;const e=u,t=d,n=f,o=j,i=qn();return Re=async({atom:r,context:a,packageDependencies:s,packageDevDependencies:c,setProgress:l})=>{await l({message:"Creating package.json."});s.filter((e=>!0===e.dev)).forEach((e=>{c.find((t=>t.package===e.package))||c.push(e);const t=s.findIndex((t=>t.package===e.package));s.splice(t,1)}));const p=s.find((e=>"react"===e.package)),d=s.find((e=>"react-dom"===e.package));p&&!d?s.push({package:"react-dom",version:p.version}):p&&d&&(d.version=p.version),p&&r.doc.features.react_version>=17&&(s.find((e=>"@emotion/react"===e.package))||s.push({package:"@emotion/react",version:"^11"}),s.find((e=>"@emotion/styled"===e.package))||s.push({package:"@emotion/styled",version:"^11"}));const f=[];!0===r.doc.features.app.enabled&&f.push({file:n.resolve(a.projectDir,"src/app/index.js"),dev:!1!==r.doc.features.app.dev}),!0===r.doc.features.cli.enabled&&f.push({file:n.resolve(a.projectDir,"src/cli/index.js"),dev:!1!==r.doc.features.cli.dev});for await(const e of f){const n=e.file;if(!t.existsSync(n))throw new Error(`App file not found: ${n}`);const p=await o({file:n,recursive:!0}),d=!0===r.doc.features.all_parsed_imports?p.all:p.required;for await(const t of d){if("npm"!==t.type)continue;if(s.find((e=>e.package===t.package)))continue;if(c.find((e=>e.package===t.package)))continue;const n=await i({name:t.package,projectDir:a.projectDir,setProgress:l});(!0===e.dev?c:s).push({package:t.package,subpath:t.subpath,version:n.minorRange,type:"npm"})}}const u={atom:r,packageDependencies:s,packageDevDependencies:c},m=a.templateCommonDir,g=e.compile(t.readFileSync(n.resolve(m,"package.json.njk"),"utf8"),e.configure(m)).render(u),y=a.projectDir,h=n.resolve(y,"package.json");t.writeFileSync(h,g,"utf8");const w=n.resolve(a.project.projectDir,"fnet");if(t.existsSync(w)){const e=n.resolve(a.projectDir,"fnet");t.existsSync(e)||t.mkdirSync(e);const o=t.readdirSync(w);for(const i of o){const o=n.resolve(w,i);if(!t.lstatSync(o).isFile())continue;const r=n.resolve(e,i);t.copyFileSync(o,r)}}},Re}function Ln(){if(Le)return Ue;Le=1;const e=d,t=f,n=p;return Ue=async({atom:o,setProgress:i,context:r,packageDependencies:a})=>{if(!0!==o.doc.features.cli.enabled)return;await i({message:"Creating cli."});const s={atom:o,packageDependencies:a},c=r.templateDir,l=t.resolve(r.projectDir,"src/cli");e.existsSync(l)||e.mkdirSync(l,{recursive:!0}),await n({pattern:["index.js.njk"],dir:t.resolve(c,"src/cli"),outDir:l,context:s})},Ue}function Bn(){if(Je)return Be;Je=1;const e=d,t=f,n=u,o=j;return Be=async({atom:i,setProgress:r,context:a,packageDependencies:s})=>{await r({message:"Creating rollup file."});const c={atom:i,packageDependencies:s},l=t.resolve(a.projectDir,"src","default/index.js");if(!e.existsSync(l))throw new Error(`Entry file not found: ${l}`);const p=(await o({file:l,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),d=i.doc.features.rollup_output,f=Object.keys(d);for(let e=0;e<f.length;e++){const t=d[f[e]];if(!0===t.browser&&p.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(p.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<p.length;e++){const n=p[e];t.alias.entries[n]=`node:${n}`,t.alias.entries[`node:${n}`]=n}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(p)}}const u=a.templateCommonDir;let m=n.compile(e.readFileSync(t.resolve(u,"rollup.config.mjs.njk"),"utf8"),n.configure(u)).render(c);const g=a.projectDir;let y=t.resolve(g,"rollup.config.mjs");e.writeFileSync(y,m,"utf8")},Be}function Jn(){if(We)return ze;We=1;const e=d,t=f,n=u,o=S,i=A,r=T;return ze=async({atom:a,setProgress:s,context:c,njEnv:l})=>{if(!0!==a.doc.features.cli.enabled)return;await s({message:"Creating yargs."});let p={};if(p=a.doc.input?a.doc.input:{type:"object",properties:{},required:[]},a.doc.features.cli.fargs&&!1!==a.doc.features.cli.fargs?.enabled){const e=a.doc.features.cli.fargs,t={type:"string",description:"Config name to load args",hidden:!1},n={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(e,"default")&&(t.default=e.default),p.properties&&(p.properties.fargs=t,p.properties.ftag=n)}const d={options:p,imports:[],atom:a},f=c.templateDir,u=n.compile(e.readFileSync(t.resolve(f,"src/default/to.args.js.njk"),"utf8"),l).render(d),m=c.projectDir,g=t.resolve(m,"src/default/to.args.js");e.writeFileSync(g,u,"utf8");const y=new o({allErrors:!0,useDefaults:!0,formats:{email:!0},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});r(y);const h=y.compile(p),w=i(y,h);e.writeFileSync(t.resolve(m,"src/default/validate_input.js"),w,"utf8")},ze}function zn(){if(Ge)return Ke;Ge=1;const e=d,t=f,n=u;return Ke=async({atom:o,setProgress:i,context:r,packageDependencies:a})=>{await i({message:"Creating .gitignore"});const s={atom:o,packageDependencies:a},c=r.templateCommonDir,l=n.compile(e.readFileSync(t.resolve(c,".gitignore.njk"),"utf8"),n.configure(c)).render(s),p=r.projectDir,d=t.resolve(p,".gitignore");e.writeFileSync(d,l,"utf8")},Ke}function Wn(){if(Ve)return He;Ve=1;const e=d,t=f,n=u;return He=async({atom:o,setProgress:i,context:r,packageDependencies:a})=>{await i({message:"Creating tsconfig.json."});const s={atom:o,packageDependencies:a},c=r.templateCommonDir,l=n.compile(e.readFileSync(t.resolve(c,"tsconfig.json.njk"),"utf8"),n.configure(c)).render(s),p=r.projectDir,d=t.resolve(p,"tsconfig.json");e.writeFileSync(d,l,"utf8")},He}function Kn(){if(Ye)return Xe;Ye=1;const e=u,t=d,n=f,o=s;return Xe=async({atom:i,context:r,setProgress:a,Atom:s})=>{const c="readme.md",l=`Creating ${c}`;if(await a({message:l}),r.project?.readme){const i=r.projectDir,a={content:r.project.readme.doc.content},s=n.resolve(r.project.projectDir,"fnet/how-to.md");if(t.existsSync(s)){const e=t.readFileSync(s,"utf8");a.howto=e}const l=n.resolve(r.project.projectDir,"fnet/input.yaml");if(t.existsSync(l)){const e=await o({file:l,tags:r.tags});a.input=e.content}const p=r.templateCommonDir,d=e.compile(t.readFileSync(n.resolve(p,`${c}.njk`),"utf8"),e.configure(p)).render(a),f=n.resolve(i,`${c}`);t.writeFileSync(f,d,"utf8")}else if(i.id){const o=await s.first({type:"wiki",parent_id:i.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:a,...l}=o.doc,p={content:a},d=r.templateCommonDir,f=e.compile(t.readFileSync(n.resolve(d,`${c}.njk`),"utf8"),e.configure(d)).render(p),u=r.projectDir,m=n.resolve(u,`${c}`);t.writeFileSync(m,f,"utf8")}},Xe}function Gn(){if(Qe)return Ze;Qe=1;const e=n,t=l;return Ze=async({setProgress:n,context:o})=>{const i=o.projectDir;await n({message:"Prettifiying source files."});let r=e.join("src","**","*");await t({commands:{steps:[`prettier --write ${r} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`],wdir:i}})}}function Hn(){if(tt)return et;tt=1;const e=a;return et=async({atom:t,setProgress:n,context:o})=>{if(!t.doc.features.dts_enabled)return;const i=o.projectDir;await n({message:"Creating .d.ts"});if(0!==e.exec("tsc",{cwd:i}).code)throw new Error("Couldnt create .d.ts files.")},et}function Vn(){if(ot)return nt;ot=1;const e=a;return nt=async({setProgress:t,atom:n,context:o})=>{const i=o.projectDir;await t({message:"Installing npm packages."});if(0!==e.exec(`npm install ${n.doc.features.npm_install_flags}`,{cwd:i}).code)throw new Error("Couldnt install npm packages.")},nt}function Xn(){if(rt)return it;rt=1;const e=a;return it=async({setProgress:t,context:n})=>{const o=n.projectDir;await t({message:"Building main project."});if(0!==e.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")}}function Yn(){if(Lt)return Ut;Lt=1;const e=function(){if(st)return at;st=1;const e=E,n=t;return at=async({setProgress:t,context:o,deploymentProject:i,deploymentProjectTarget:r,buildId:a})=>{await t({message:"Deploying it as gitlab project."});const s=o.projectDir;let c="fnet-to-gitlab";const l=r.params.config||"gitlab",p=await n({name:l,dir:o.projectDir,tags:o.tags});if(!p)throw new Error(`Couldnt load config ${l}`);const{data:d}=p.data;c+=` --projectGroupId=${d.projectGroupId}`,c+=` --projectPath='${s}'`,c+=` --projectName='${r.params.name}'`,c+=` --projectBranch='${r.params.branch||"main"}'`,c+=` --gitlabHost='${d.gitlabHost}'`,c+=` --gitlabToken='${d.gitlabToken}'`,c+=` --gitlabUsername='${d.gitlabUsername}'`,c+=` --gitlabUserEmail='${d.gitlabUserEmail}'`,!0!==r.dryRun&&(await e({cmd:c}),i.isDirty=!0)},at}(),o=function(){if(lt)return ct;lt=1;const e=d,n=f,o=$,i=E,r=t;return ct=async({setProgress:t,context:a,deploymentProject:s,deploymentProjectTarget:c,registerToPackageManager:l,yamlTarget:p})=>{await t({message:"Deploying it as gcs package."});const d=a.projectDir,f=n.resolve(d,"package.json"),u=e.readFileSync(f),m=JSON.parse(u);m.name=c.params.name,m.version=o.inc(c.version,"patch"),delete m.scripts,delete m.devDependencies,e.writeFileSync(f,JSON.stringify(m,null,"\t"));const{file:g,data:y}=await r({name:c.config||"gcs",dir:a.projectDir,tags:a.tags});let h="fnet-files-to-gcs";h+=` --projectId='${y.env.GCS_PROJECT_ID}'`,h+=` --bucketName='${y.env.GCS_BUCKET_NAME}'`,h+=` --keyFilename='${n.resolve(n.dirname(g),y.env.GCS_UPLOADER_KEY_FILE)}'`,h+=` --dir='${d}'`,h+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",h+=` --destDir='${m.name}/${m.version}'`,h+=" --metadata.cacheControl='public, max-age=31536000, immutable'",y.env.DOMAIN&&(h+=` --domain='${y.env.DOMAIN}'`),!0!==c.dry_run&&!0!==c.params.dry_run||(h+=" --dryRun"),await i({cmd:h}),e.writeFileSync(f,u),!0!==c.dryRun&&(s.isDirty=!0,c.version=m.version,p.set("version",m.version),await l({target:c,packageJSON:m}))}}(),s=function(){if(dt)return pt;dt=1;const e=d,n=f,o=$,i=a,s=t,l=O,p=c,u=r;return pt=async({atom:t,setProgress:r,context:a,deploymentProject:c,deploymentProjectTarget:d,yamlTarget:f})=>{await r({message:"Deploying it as npm package."});const m=a.projectDir,g=n.resolve(m,"package.json"),y=e.readFileSync(g),h=JSON.parse(y);h.name=d.params.name,h.version=o.inc(d.version,"patch");const w=d.params.bin?.name||d.params.bin;!1!==d.params.bin?.enabled&&w&&"string"==typeof w&&(h.bin={[w]:"dist/cli/esm/index.js",[t.doc.name]:"dist/cli/esm/index.js"}),delete h.scripts,delete h.devDependencies,h.scripts={serve:"npx serve ."},e.writeFileSync(g,JSON.stringify(h,null,"\t"));const v=d.config||"npm";let b=(await s({name:v,dir:a.projectDir,tags:a.tags,optional:!0}))?.data;if(!b){const t=l({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===t.length)throw new Error("Couldnt find schema to create npm config");const o=await p({schema:t[0],tags:a.tags}),i=a.project.projectDir,r=n.resolve(i,".fnet");e.existsSync(r)||e.mkdirSync(r),e.writeFileSync(n.resolve(r,`${v}.fnet`),u.stringify(o)),b=o}if(e.writeFileSync(n.resolve(m,".npmrc"),`//registry.npmjs.org/:_authToken=${b.env.NPM_TOKEN}`),!0!==d.dryRun){if(0!==i.exec("npm publish --access public",{cwd:m}).code)throw new Error("Couldnt publish to npm");e.writeFileSync(g,y),c.isDirty=!0,d.version=h.version,f.set("version",h.version)}},pt}(),l=function(){if(ut)return ft;ut=1;const e=d,n=f,o=C,i=u,r=I,a=t;return ft=async({atom:t,setProgress:s,context:c,deploymentProject:l,deploymentProjectTarget:p,buildId:d,packageDependencies:f,njEnv:u})=>{await s({message:"Deploying it as node-red flow."});const m=c.projectDir,g=c.templateDir,y="workflow"===t.type?"WF":"LIB";let h;if("simple"===p.deploy.template)h={atom:t,packageDependencies:f,red:{tab:{id:p.deploy.id||r.util.generateId(),label:`${y}/${t.id?t.id:o.hostname()}/${t.name}/${p.deploy.name||p.deploy.template}`},function:{id:r.util.generateId(),name:t.doc.name,initialize:{content:e.readFileSync(n.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:t.doc.bundleName}},inject:{id:r.util.generateId(),...p.params?.inject,payload:"json"===p.params?.inject?.payloadType?`'${JSON.stringify(p.params?.inject?.payload)}'`:p.params?.inject?.payload},debug:{id:r.util.generateId()}}};else if("cronjob"===p.deploy.template){let i=p.params?.schedules?cloneDeep(p.params?.schedules):void 0;i?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),h={atom:t,packageDependencies:f,red:{tab:{id:p.deploy.id||r.util.generateId(),label:`${y}/${t.id?t.id:o.hostname()}/${p.deploy.name||p.deploy.template}`},function:{id:r.util.generateId(),name:t.doc.name,initialize:{content:e.readFileSync(n.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:t.doc.bundleName}},cronjob:{id:r.util.generateId(),schedules:i},debug:{id:r.util.generateId()}}}}else{if("http"!==p.deploy.template)return;h={atom:t,packageDependencies:f,red:{tab:{id:p.deploy.id||r.util.generateId(),label:`${y}/${t.id?t.id:o.hostname()}/${p.deploy.name||p.deploy.template}`},function:{id:r.util.generateId(),name:t.doc.name,initialize:{content:e.readFileSync(n.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:t.doc.bundleName}},httpin:{id:r.util.generateId(),method:p.params.method||"get",url:p.params.url},httpout:{id:r.util.generateId()},debug:{id:r.util.generateId()}}}}let w=i.compile(e.readFileSync(n.resolve(g,`deploy/node-red/${p.deploy.template}.yaml.njk`),"utf8"),u).render(h);if(e.writeFileSync(n.resolve(m,"node-red.yaml"),w),w=yaml.load(w),!0===p.dryRun)return;l.isDirty=!0;const v=(await a({name:c.redConfig||"red",dir:c.projectDir,tags:c.tags}))?.data,b=p.deploy.url||v.env.RED_URL,x={};if(!1!==p.deploy.auth&&(x.Authorization="Bearer "+atomAccessToken),p.deploy.id)!0===p.actions?.delete?(await axios({method:"DELETE",url:`${b}/flow/${p.deploy.id}`,headers:x}),delete p.actions.delete,delete p.deploy.id,p.enabled=!1):await axios({method:"PUT",url:`${b}/flow/${p.deploy.id}`,data:w,headers:x});else{const e=await axios({method:"POST",url:`${b}/flow`,data:w,headers:x});p.deploy.id=e.data.id}},ft}(),p=function(){if(gt)return mt;gt=1;const e=i,o=n,r=t;return mt=async({atom:t,Atom:n,setProgress:i,context:a,packageDependencies:s,deploymentProject:c,deploymentProjectTarget:l})=>{await i({message:"Deploying it as workflow lib."});const p=(await r({name:"atom",dir:a.projectDir,tags:a.tags}))?.data;let d,f,u,m=l.deploy.name.split("/");if(1===m.length)f=p.env.ATOM_LIBRARIES_ID,u=l.deploy.name;else{if(2!==m.length)throw new Error("Wrong name path.");{const e=await n.first({where:{name:m[0],parent_id:p.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");f=e.id,u=m[1]}}if(!0===l.dryRun)return;if(c.isDirty=!0,l.deploy.id){if(d=await n.get({id:l.deploy.id}),!d)return}else{if(d=await n.create({parent_id:f,doc:{name:u,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!d)return;l.deploy.id=d.id}const g=a.projectDir;d.doc.contents=[{content:e.readFileSync(o.resolve(g,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:e.readFileSync(o.resolve(g,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:e.readFileSync(o.resolve(g,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],d.doc.name=u,d.doc.dependencies=s,"workflow.lib"===t.type?d.doc.subtype="library":"workflow"===t.type&&(d.doc.subtype="workflow"),d=await n.update(d,{id:d.id})}}(),g=function(){if(ht)return yt;ht=1;const e=t,n=N,o=m,i=$;return yt=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as ios-app package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},yt}(),y=function(){if(vt)return wt;vt=1;const e=t,n=M,o=m,i=$;return wt=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as macos-app package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},wt}(),h=function(){if(xt)return bt;xt=1;const e=t,n=F,o=m,i=$;return bt=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as electron package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},bt}(),w=function(){if(jt)return kt;jt=1;const e=t,n=R,o=m,i=$;return kt=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as webos package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},kt}(),v=function(){if(Dt)return _t;Dt=1;const e=t,n=q,o=m,i=$;return _t=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as nextjs package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},_t}(),x=function(){if(St)return Pt;St=1;const e=t,n=U,o=m,i=$;return Pt=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as docker package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},Pt}(),k=function(){if(Tt)return At;Tt=1;const e=d,n=f,o=$,i=E,r=t,a=b.default;return At=async({setProgress:t,context:s,deploymentProject:c,deploymentProjectTarget:l,yamlTarget:p})=>{await t({message:"Deploying it as fnet package."});const d=s.projectDir,f=n.resolve(d,"package.json"),u=e.readFileSync(f),m=JSON.parse(u);m.name=l.params.name,m.version=o.inc(l.version,"patch"),delete m.scripts,delete m.devDependencies,e.writeFileSync(f,JSON.stringify(m,null,"\t"));const{file:g,data:y}=await r({name:l.config||"fnet-package",dir:s.projectDir,tags:s.tags});if(!y.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${g}`);if(!y.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${g}`);if(!y.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${g}`);const h=`${y.env.ATOM_API_URL}/v1/auth/token`,w=y.env.ATOM_API_USERNAME,v=y.env.ATOM_API_PASSWORD;let b=await a({method:"POST",url:h,data:{username:w,password:v},headers:{"Content-Type":"application/json"}});const x=b.data?.access_token;if(!x)throw new Error(`Invalid access_token from ${h}`);let k="fnet-files-to-gcs";if(k+=` --projectId='${y.env.GCS_PROJECT_ID}'`,k+=` --bucketName='${y.env.GCS_BUCKET_NAME}'`,k+=` --keyFilename='${n.resolve(n.dirname(g),y.env.GCS_UPLOADER_KEY_FILE)}'`,k+=` --dir='${d}'`,k+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",k+=` --destDir='${m.name}/${m.version}'`,k+=" --metadata.cacheControl='public, max-age=31536000, immutable'",y.env.DOMAIN&&(k+=` --domain='${y.env.DOMAIN}'`),!0!==l.dry_run&&!0!==l.params.dry_run||(k+=" --dryRun"),await i({cmd:k}),e.writeFileSync(f,u),!0===l.dryRun)return;c.isDirty=!0,l.version=m.version,p.set("version",m.version);const j=`${y.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(b=await a({method:"POST",url:j,data:{name:m.name,version:m.version,version_domain:y.env.DOMAIN,docs:l.params.docs,configs:l.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${x}`}}),b.data?.error)throw new Error("Failed to publish fnet package.")},At}(),j=function(){if($t)return Et;$t=1;const e=$,n=t,o=b.default;return Et=async({setProgress:t,context:i,deploymentProject:r,deploymentProjectTarget:a,yamlTarget:s})=>{await t({message:"Deploying it as fnet form."});const{file:c,data:l}=await n({name:a.config||"fnet-form",dir:i.projectDir,tags:i.tags});if(!l.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${c}`);if(!l.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${c}`);if(!l.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${c}`);const p=`${l.env.ATOM_API_URL}/v1/auth/token`,d=l.env.ATOM_API_USERNAME,f=l.env.ATOM_API_PASSWORD;let u=await o({method:"POST",url:p,data:{username:d,password:f},headers:{"Content-Type":"application/json"}});const m=u.data?.access_token;if(!m)throw new Error(`Invalid access_token from ${p}`);r.isDirty=!0;const g=e.inc(a.version,"patch");a.params.version=g,a.version=g,s.set("version",g);const y=`${l.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(u=await o({method:"POST",url:y,data:{name:a.params.name,version:a.params.version,docs:a.params.docs,configs:a.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`}}),u.data?.error)throw new Error("Error publishing fnet form.")},Et}(),_=function(){if(Ct)return Ot;Ct=1;const e=$,n=t,o=b.default,r=i,a=E,s=L;return Ot=async({setProgress:t,context:i,deploymentProject:c,deploymentProjectTarget:l,yamlTarget:p})=>{await t({message:"Deploying it as fnet flow."});const{file:d,data:f}=await n({name:l.config||"fnet-flow",dir:i.project.projectDir,tags:i.tags});if(!f.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${d}`);if(!f.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${d}`);if(!f.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${d}`);const u=`${f.env.ATOM_API_URL}/v1/auth/token`,m=f.env.ATOM_API_USERNAME,g=f.env.ATOM_API_PASSWORD;let y=await o({method:"POST",url:u,data:{username:m,password:g},headers:{"Content-Type":"application/json"}});const h=y.data?.access_token;if(!h)throw new Error(`Invalid access_token from ${u}`);c.isDirty=!0;const w=e.inc(l.version,"patch");l.params.version=w,l.version=w,p.set("version",w);const v=`${f.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(y=await o({method:"POST",url:v,data:{name:l.params.name,version:l.params.version,docs:l.params.docs,configs:l.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`}}),y.data?.error)throw new Error("Error publishing fnet flow.");const b=y.data?.upload.id;let x="fnet-dir-zipper";x+=` --sourceDir='${i.project.projectDir}'`,x+=" -p=**/*",x+=" -g",x+=" --stdout_format=json";const k=await a({cmd:x});if(0!==k.code)throw new Error(k.stderr);const j=JSON.parse(k.stdout).path;let _=new s;_.append("file",r.createReadStream(j));const D=await o.request({method:"POST",maxBodyLength:1/0,url:`${f.env.ATOM_API_URL}/v1/service/upload/single/${b}`,headers:{..._.getHeaders(),Authorization:`Bearer ${h}`},data:_});if(D.data?.error)throw new Error("Error uploading fnet flow.")},Ot}(),D=function(){if(Nt)return It;Nt=1;const e=$,n=t,o=b.default,r=i,a=E,s=L;return It=async({setProgress:t,context:i,deploymentProject:c,deploymentProjectTarget:l,yamlTarget:p})=>{await t({message:"Deploying it as fnet node."});const{file:d,data:f}=await n({name:l.config||"fnet-node",dir:i.project.projectDir,tags:i.tags});if(!f.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${d}`);if(!f.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${d}`);if(!f.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${d}`);const u=`${f.env.ATOM_API_URL}/v1/auth/token`,m=f.env.ATOM_API_USERNAME,g=f.env.ATOM_API_PASSWORD;let y=await o({method:"POST",url:u,data:{username:m,password:g},headers:{"Content-Type":"application/json"}});const h=y.data?.access_token;if(!h)throw new Error(`Invalid access_token from ${u}`);c.isDirty=!0;const w=e.inc(l.version,"patch");l.params.version=w,l.version=w,p.set("version",w);const v=`${f.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(y=await o({method:"POST",url:v,data:{name:l.params.name,version:l.params.version,docs:l.params.docs,configs:l.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`}}),y.data?.error)throw new Error("Error publishing fnet node.");const b=y.data?.upload.id;let x="fnet-dir-zipper";x+=` --sourceDir='${i.project.projectDir}'`,x+=" -p=**/*",x+=" -g",x+=" --stdout_format=json";const k=await a({cmd:x});if(0!==k.code)throw new Error(k.stderr);const j=JSON.parse(k.stdout).path;let _=new s;_.append("file",r.createReadStream(j));const D=await o.request({method:"POST",maxBodyLength:1/0,url:`${f.env.ATOM_API_URL}/v1/service/upload/single/${b}`,headers:{..._.getHeaders(),Authorization:`Bearer ${h}`},data:_});if(D.data?.error)throw new Error("Error uploading fnet node.")},It}(),P=function(){if(Ft)return Mt;Ft=1;const e=t,n=B,o=m,i=$;return Mt=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as Rust package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},Mt}(),S=function(){if(qt)return Rt;qt=1;const e=t,n=J,o=m,i=$;return Rt=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as pyip package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},Rt}();return Ut=async t=>{const{atom:n,packageDependencies:i,context:r,deploymentProjectTarget:a,setProgress:c,deploymentProject:d,yamlTarget:f}=t;if(!0===a.enabled)if("lib"===a.type)await p({...t});else if("red"===a.type)await l({...t});else if("npm"===a.type)await s({...t});else if("gcs"===a.type)await o({...t});else if("gitlab"===a.type)await e({...t});else if("fnet-package"===a.type)await k({...t});else if("fnet-form"===a.type)await j({...t});else if("fnet-node"===a.type)await D({...t});else if("fnet-flow"===a.type)await _({...t});else{let e;if("nextjs"===a.type?e=v:"webos"===a.type?e=w:"electron"===a.type?e=h:"docker"===a.type?e=x:"ios"===a.type?e=g:"macos"===a.type?e=y:"rust"===a.type?e=P:"pyip"===a.type&&(e=S),!e)return;await e({atom:n,target:a,onProgress:c,projectDir:r.projectDir,dependencies:i,context:r,yamlTarget:f}),d.isDirty=!0}},Ut}function Zn(){if(Jt)return Bt;Jt=1;const e=m;async function t({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:i}){t.context.transform=t.context.transform||e(t.definition);for(const n of t.childs)n.context.transform=n.context.transform||e(n.definition),n.definition.hasOwnProperty("condition")&&(n.context.transform.condition=await i(n.definition.condition));await n({node:t}),o({node:t})}return Bt={hits:async function({node:e}){if(!e.definition.hasOwnProperty("switch"))return!1;const t=e.definition.switch||[];if(!t.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===t.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const n=t.filter((e=>e.hasOwnProperty("default")));if(n.length>1)throw new Error("Switch must have only one default");if(1===n.length&&!t[t.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");return!0},init:async function({node:e,initNode:n}){e.type="switch",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let t=0;t<e.definition.switch.length;t++){let o=e.definition.switch[t],i=`${t}`;o.hasOwnProperty("default")&&(i="default",o=o.default);const r={name:o.condition||i,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(r),await n({node:r})}e.resolve=t},resolve:t}}function Qn(){if(an)return rn;an=1;const e=m;async function t({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:i}){t.context.transform=t.context.transform||e(t.definition);const r=t.context.transform;r.args&&(r.args=await i(r.args)),r.result&&(r.result=await i(r.result));const a=t.workflow.parent;t.context.lib=a.context.libs.find((e=>e.name===r.call)),await n({node:t}),o({node:t})}return rn={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:n}){e.type="call";for(let t=0;t<e.definition.modules?.length;t++){const o=e.definition.modules[t],i=Object.keys(o)[0],r={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(r),await n({node:r})}e.resolve=t},resolve:t}}function eo(){if(cn)return sn;cn=1;const e=Qn();return sn={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(t){const{node:n}=t,o="shell",i=n.definition,r=typeof i[o];if("string"!==r&&"object"!==r)throw new Error(`Unsupported ${o} usage`);i.call="npm:@fnet/shell",i.args="string"===r?{...i.args,cmd:i[o]}:i[o],delete i[o],await e.init(t)}}}function to(){return An?Sn:(An=1,Sn=({node:e})=>{const t=e.definition;if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let n=e.parent;for(;n.parent;){const o=n.childs.find((e=>e.name===t.next));if(o){e.context.next=o;break}n=n.parent}}else{let t=e.parent,n=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(void 0!==t.blockAutoJumpToParent||void 0!==t.blockAutoJumpToSibling){if(t.blockAutoJumpToParent){const o=t.childs.find((e=>e.index===n));o&&(e.context.next=o);break}t.blockAutoJumpToParent||(n=t.index+1,t=t.parent)}else{const o=t.childs.find((e=>e.index===n));if(o){e.context.next=o;break}n=t.index+1,t=t.parent}}})}function no(){if(En)return Tn;En=1;const e=d,n=f,o=r,i=a,c=u,l=m,p=g,k=function(){if(Q)return Z;Q=1;const e=y,t=h;return Z=async()=>{if(!await t({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const n=e.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await n.connect(),n}}(),{nanoid:_}=w,D=function(){if(te)return ee;te=1;const{Api:e}=v,t=b.default,n=x;return ee=class{init({config:o,accessToken:i}){return new Promise(((r,a)=>{if(e.set_api_url(o.data.url),i)return e.set_req_token(i),void r(i);t({method:"POST",url:`${o.data.issuer}/protocol/openid-connect/token`,data:n.stringify(o.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((t=>{e.set_req_token(t.data.access_token),r(t.data.access_token)})).catch((t=>{e.set_req_token(),a(t)}))}))}},ee}(),P=Mn(),S=Fn(),A=Rn(),T=Un(),E=Ln(),$=Bn(),O=Jn(),C=zn(),I=Wn(),N=Kn(),M=Gn(),F=Hn(),R=Vn(),q=Xn(),U=qn(),L=Yn(),{Atom:B}=v,J=z,Y=W,ne=t,oe=j,ie=K,re=s,ae=G,se=H,ce=function(){if(Wt)return zt;Wt=1;const e=K,t=Zn();return zt={hits:async function({node:t}){const n=Object.keys(t.definition);return 1===(await Promise.all(n.map((t=>e({expression:t}))))).filter((e=>"if"===e?.processor)).length},init:async function(n){const{node:o}=n,i=Object.keys(o.definition),r=await Promise.all(i.map((t=>e({expression:t})))),a=[],s=r.find((e=>"if"===e?.processor)),c=o.definition[s.expression];a.push({name:`${o.name}_if`,definition:c,processor:s}),delete o.definition[s.expression];const l=r.filter((e=>"elseif"===e?.processor));let p=0;for(const e of l){const t=o.definition[e.expression];a.push({name:`${o.name}_elseif_${p++}`,definition:t,processor:e}),delete o.definition[e.expression]}o.definition.switch=[];for(const e of a)o.definition.switch.push({condition:e.processor.statement,...e.definition});await t.init(n)}}}(),le=function(){if(Gt)return Kt;Gt=1;const e=m;async function t({node:t,resolveTypeCommon:n,resolveNextBlock:o}){if(t.context.transform=t.context.transform||e(t.definition),t.context.transform,t.context.try=t.childs.find((e=>"try"===e.name)),t.context.except=t.childs.find((e=>"except"===e.name)),t.context.except){const n=t.context.except;n.context.transform=n.context.transform||e(n.definition),n.context.transform.hasOwnProperty("as")||(n.context.transform.as="error")}await n({node:t}),o({node:t})}return Kt={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:n}){if(e.type="tryexcept",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const t="try",o={name:t,childs:[],parent:e,definition:e.definition[t],index:e.childs.length,context:{}};e.childs.push(o),await n({node:o})}if(e.definition.except){const t="except",o={name:t,childs:[],parent:e,definition:e.definition[t],index:e.childs.length,context:{}};e.childs.push(o),await n({node:o})}e.resolve=t},resolve:t}}(),pe=function(){if(Vt)return Ht;Vt=1;const e=m;async function t({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:i}){t.context.transform=e(t.definition);const r=t.context.transform;for(let e=0;e<r.assign?.length;e++){let t=r.assign[e],n=Object.keys(t)[0],o=t[n],a={key:await i(n),value:await i(o)};r.assign[e]=a}await n({node:t}),o({node:t})}return Ht={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:n}){e.type="assign",e.resolve=t},resolve:t}}(),de=function(){if(Yt)return Xt;Yt=1;const e=m,t=V,n=X;async function o({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:i}){t.context.transform=t.context.transform||e(t.definition),t.context.transform.for.in=await i(t.definition.for.in),await n({node:t}),o({node:t})}return Xt={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:i}){if(e.type="for",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const o=["value","in"],[i,r]=[t(e.definition.for,o),n(e.definition.for,o)];e.definition.for=i,e.definition.for.steps=[{[`${e.name}_step`]:r}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let t=0;t<e.definition.for.steps.length;t++){const n=e.definition.for.steps[t],o=Object.keys(n)[0],r={name:o,childs:[],parent:e,definition:n[o],index:e.childs.length,context:{}};e.childs.push(r),await i({node:r})}e.resolve=o},resolve:o}}(),fe=Zn(),ue=Qt?Zt:(Qt=1,Zt={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){}}),me=function(){if(tn)return en;tn=1;const e=m;async function t({node:t,resolveTypeCommon:n,transformExpression:o}){t.context.transform=t.context.transform||e(t.definition);const i=t.context.transform;i.raise=await o(i.raise),await n({node:t})}return en={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:n}){e.type="raise",e.resolve=t},resolve:t}}(),ge=function(){if(on)return nn;on=1;const e=m;async function t({node:t,resolveTypeCommon:n,transformExpression:o}){t.context.transform=t.context.transform||e(t.definition);const i=t.context.transform;i.return=await o(i.return),await n({node:t})}return nn={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:n}){e.type="return",e.resolve=t},resolve:t}}(),ye=Qn(),he=eo(),we=function(){if(pn)return ln;pn=1;const e=Qn();return ln={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(t){const{node:n}=t,o="config",i=n.definition,r=typeof i[o];if("string"!==r&&"object"!==r)throw new Error(`Unsupported ${o} usage`);i.call="npm:@fnet/config",i.args="string"===r?{...i.args,name:i[o]}:i[o],delete i[o],await e.init(t)}}}(),ve=function(){if(fn)return dn;fn=1;const e=Qn();return dn={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(t){const{node:n}=t,o="yaml",i=n.definition,r=typeof i[o];if("string"!==r&&"object"!==r)throw new Error(`Unsupported ${o} usage`);i.call="npm:@fnet/yaml",i.args="string"===r?{...i.args,file:i[o]}:i[o],delete i[o],await e.init(t)}}}(),be=function(){if(mn)return un;async function e({node:e}){e.context.next=e.childs[0]}return mn=1,un={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:t,initNode:n}){t.type||(t.type="steps");const o=t.definition.steps||[];for await(const e of o){const o=Object.keys(e)[0],i={name:o,childs:[],parent:t,definition:e[o],index:t.childs.length,context:{}};t.childs.push(i),await n({node:i})}t.resolve=e},resolve:e}}(),xe=function(){if(yn)return gn;yn=1;const e=m;async function t({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:i}){t.context.transform=t.context.transform||e(t.definition);const r=t.context.transform;r.props&&(r.props=await i(r.props));const a=t.workflow.parent;t.context.lib=a.context.libs.find((e=>e.name===r.form)),await n({node:t}),o({node:t})}return gn={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:n}){e.type="form";for(let t=0;t<e.definition.modules?.length;t++){const o=e.definition.modules[t],i=Object.keys(o)[0],r={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(r),await n({node:r})}e.resolve=t},resolve:t}}(),ke=function(){if(wn)return hn;wn=1;const e=m;async function t({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:i,transformValue:r}){t.context.transform=t.context.transform||e(t.definition),await n({node:t})}return hn={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:n}){e.type="operation",e.resolve=t},resolve:t}}(),je=function(){if(bn)return vn;bn=1;const e=m;async function t({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:i}){t.context.transform=t.context.transform||e(t.definition);const r=t.context.transform;r.next=await i(r.next),await n({node:t}),o({node:t})}return vn={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:n}){e.type="jump",e.resolve=t},resolve:t}}(),_e=function(){if(kn)return xn;kn=1;const e=Qn();return xn={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(t){const{node:n}=t,o="prompt",i=n.definition,r=typeof i[o];if("string"!==r&&"object"!==r)throw new Error(`Unsupported ${o} usage`);i.call="npm:@fnet/prompt",i.args="string"===r?{...i.args,message:i[o]}:i[o],delete i[o],await e.init(t)}}}(),De=function(){if(_n)return jn;_n=1;const e=Qn();return jn={hits:async function({node:e}){return e.definition.hasOwnProperty("html-script")},init:async function(t){const{node:n}=t,o="html-script",i=n.definition,r=typeof i[o];if("string"!==r&&"object"!==r)throw new Error(`Unsupported ${o} usage`);i.call="npm:@flownet/lib-load-browser-script-url",i.args="string"===r?{...i.args,src:i[o]}:i[o],delete i[o],await e.init(t)}}}(),Pe=function(){if(Pn)return Dn;Pn=1;const e=Qn();return Dn={hits:async function({node:e}){return e.definition.hasOwnProperty("html-link")},init:async function(t){const{node:n}=t,o="html-link",i=n.definition,r=typeof i[o];if("string"!==r&&"object"!==r)throw new Error(`Unsupported ${o} usage`);i.call="npm:@flownet/lib-load-browser-link-url",i.args="string"===r?{...i.args,src:i[o]}:i[o],delete i[o],await e.init(t)}}}(),Se=to();return Tn=class{#e;#t;#n;#o;#i;#r;#a;#s;#c;#l;#p;#d;#f;#u;#m;#g;#y;#h;#w;#v;#b;constructor(e){this.#e=new D,this.#t=e,this.#r=[],this.#a=[],this.#s={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#v={packageDependencies:this.#r,packageDevDependencies:this.#a,setProgress:this.setProgress.bind(this),context:this.#t,Atom:B,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#b={initNode:this.initNode.bind(this),cloneDeep:l,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Se,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,n){this._redis_client&&await this._redis_client.SETEX(e,n||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await k(),this.#p=this.#t.buildId||_(24),this.#v.buildId=this.#p,this.#m=this.#t.mode,this.#g=["all","deploy","build","file"].includes(this.#m),this.#y=["all","deploy","build"].includes(this.#m),this.#h=["all","deploy"].includes(this.#m),this.#w=["all","deploy","build","file","bpmn"].includes(this.#m),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#u=(await ne({optional:!0,name:"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await P(this.#v),await S(this.#v),await this.transformWorkflow({workflow:this.#o});const e=await this.initNodeTree({workflow:this.#o});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#r}),await this.resolveNodeTree({root:e}),this.#l=e}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#c=await this.#e.init({config:this.#u}),this.#v.atomAccessToken=this.#c)}async initWorkflow(){const e=this.#t.id;this.#n=this.#t.project?.workflowAtom||await B.get({id:e}),this.#o="string"==typeof this.#n.doc.content?(await re({content:this.#n.doc.content})).parsed:this.#n.doc.content;let t=this.#n.doc.bundleName;t=t||(this.#n.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#n.doc.bundleName=t,this.#n.type=this.#n.type||"workflow",this.#v.atom=this.#n}async initDependencies(){this.#r.push({package:"get-value",version:"^3.0"}),this.#r.push({package:"set-value",version:"^4.1"}),this.#n.doc.features.form_enabled?(this.#r.push({package:"react",version:"^18.2"}),this.#r.push({package:"react-dom",version:"^18.2"}),this.#r.push({package:"@flownet/react-app",version:"^0.1"}),this.#r.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#r.push({package:"@fnet/args",version:"^0.1"}),this.#r.push({package:"chalk",version:"^4"})}#x(t){console.log("filePath",t),e.statSync(t).isDirectory()?(e.readdirSync(t).forEach((e=>{const o=n.join(t,e);this.#x(o)})),e.rmSync(t)):e.unlinkSync(t)}#k(t,o){const i=e.existsSync(t),r=i&&e.statSync(t);i&&r.isDirectory()?(e.mkdirSync(o,{recursive:!0}),e.readdirSync(t).forEach((e=>{this.#k(n.join(t,e),n.join(o,e))}))):e.copyFileSync(t,o)}async initWorkflowDir(){this.setProgress({message:"Initializing library directory."});const t=this.#t.projectDir,o=this.#t.coreDir;this.setProgress({message:"Cleaning project directory."});const i=se({dir:t,ignore:["node_modules",".cache"],absolute:!0});for(const t of i)e.rmSync(t,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."}),e.existsSync(t)||e.mkdirSync(t,{recursive:!0});const r=n.join(t,"src");e.existsSync(r)||e.mkdirSync(r,{recursive:!0});const a=n.join(r,"core");this.#k(o,a);const s=n.join(r,"default","blocks");e.existsSync(s)||e.mkdirSync(s,{recursive:!0})}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#t.templateDir;this.#i=c.configure(e,{watch:!1,dev:!0}),this.#v.njEnv=this.#i}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,n]=Object.entries(e)[0];if(n.hasOwnProperty("onerror")){const{onerror:o,...i}=n;e[t]={try:i,except:o}}if(e[t].hasOwnProperty("steps")){const n=e[t].steps;if(!Array.isArray(n))throw new Error("Steps must be an array.");e[t].steps=n.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),n={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#n}};t.forEach((t=>{const o={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:n,definition:e[t],index:n.childs.length,depth:n.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};n.childs.push(o)}));for await(const e of n.childs)await this.initNode({node:e});return n}async initNode({node:e}){const t={...this.#b,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await le.hits(t))await le.init(t);else if(await de.hits(t))await de.init(t);else if(await fe.hits(t))await fe.init(t);else if(await ce.hits(t))await ce.init(t);else if(await ue.hits(t))await ue.init(t);else if(await pe.hits(t))await pe.init(t);else if(await me.hits(t))await me.init(t);else if(await ge.hits(t))await ge.init(t);else if(await ye.hits(t))await ye.init(t);else if(await he.hits(t))await he.init(t);else if(await we.hits(t))await we.init(t);else if(await ve.hits(t))await ve.init(t);else if(await De.hits(t))await De.init(t);else if(await Pe.hits(t))await Pe.init(t);else if(await xe.hits(t))await xe.init(t);else if(await ke.hits(t))await ke.init(t);else if(await _e.hits(t))await _e.init(t);else if(await be.hits(t))await be.init(t);else{if(!await je.hits(t))throw new Error("Undefined step type.");await je.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const n of e.childs)await this.initNodeIndex({node:n,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const o=n.join(e.parent.indexKey,e.name);e.indexKey=o,t[o]=e;const i=[];let r=e;for(;r?.parent;)i.push(r.index),r=r.parent;i.reverse(),e.codeKey=`B_${i.join("_")}_${e.type}`,e.pathKey=`${i.join(".")}`,e.typeId=_(24);for await(const n of e.childs)await this.initNodeIndex({node:n,index:t})}async initNodeCalls({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"call"===o.type&&n.push(o)}return e.context.calls=n,n}async initNodeCallLibs({root:e}){const t=[],n=e.context.calls;for await(const e of n){const n=e.definition.call,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom",definition:e.definition},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.call,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"form"===o.type&&n.push(o)}return e.context.forms=n,n}async initNodeFormLibs({root:e}){const t=[],n=e.context.forms;for await(const e of n){const n=e.definition.form,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.form,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const n=e.filter((e=>"atom"===e.type));for(let e=0;e<n.length;e++){const o=n[e],i=await this.findAtomLibrary({url:o.name,libRef:o});o.atom=i;const r=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));r?.forEach((e=>{const n=t.find((t=>t.package===e.package));n?"string"==typeof e.path?(n.path||[]).some((t=>t===e.path))||(n.path=n.path||[],n.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(n.path||[]).some((t=>t===e))||(n.path=n.path||[],n.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e,libRef:t}){const o=J({url:e});if(!o)throw new Error(`Invalid package name: ${e}`);if(o.protocol||(o.protocol=this.#f),"ac:"===o.protocol){const t=o.pathname.split("/");if(1===t.length)return await B.first({where:{name:e,parent_id:this.#u.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await B.first({where:{name:t[0],parent_id:this.#u.env.ATOM_LIBRARIES_ID,type:"folder"}});return await B.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===o.protocol){const e=n.resolve(this.#t.projectSrcDir,`${o.pathname}.js`),t=[],i=await oe({file:e,recursive:!0}),r=!0===this.#n.doc.features.all_parsed_imports?i.all:i.required;for await(const e of r){if("npm"!==e.type)continue;if(t.find((t=>t.package===e.package)))continue;const n=await U({name:e.package,projectDir:this.#t.projectDir,setProgress:this.#v.setProgress});t.push({package:e.package,subpath:e.subpath,version:n.minorRange,type:"npm"})}return{name:o.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:t},protocol:o.protocol}}if("npm:"===o.protocol){const e=await U({name:o.pathname,projectDir:this.#t.projectDir,setProgress:this.#v.setProgress});return{name:o.pathname,doc:{type:"workflow.lib",subtype:"flow"===t?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:o.pathname,version:e.minorRange,type:"npm"}]},protocol:o.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=l(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const n=t.params[e];if("string"==typeof n)t.params[e]={key:n,hasDefault:!1};else{const o=Object.keys(n)[0];t.params[e]={key:o,hasDefault:!0,default:n[o]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#b,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:t}){await this.setProgress({message:"Creating external lib files."}),this.#n.typesDir="./types";const o=t.context.libs.filter((e=>"atom"===e.type));for(let t=0;t<o.length;t++){const i=o[t].atom,r=this.#t.projectDir;if("local:"===i.protocol){const t=n.resolve(this.#t.projectSrcDir,`${i.fileName||i.name}.js`),o=n.relative(`${this.#t.projectDir}/src/default/blocks`,t);if(!e.existsSync(t)){e.mkdirSync(n.dirname(t),{recursive:!0});let o="export default async (args)=>{\n";o+="}",e.writeFileSync(t,o,"utf8")}i.relativePath=o.split(n.sep).join("/"),this.#n.typesDir=`./types/${n.basename(r)}/src`}else if("npm:"===i.protocol)i.relativePath=i.name;else{const t=`${r}/src/libs/${i.id}.js`,o=i.doc.contents?.find((e=>"esm"===e.format))||i.doc;e.writeFileSync(n.normalize(t),o.content,"utf8")}}}async createEngine({root:t}){await this.setProgress({message:"Creating engine file."});const o=this.#t.templateDir,i=c.compile(e.readFileSync(n.resolve(o,"src/default/engine.js.njk"),"utf8"),this.#i).render({...t,ui:{package:"@flownet/react-app"}}),r=this.#t.projectDir,a=n.resolve(r,"src/default/index.js");e.writeFileSync(a,i,"utf8")}async createNodeTree({root:e}){await this.setProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:t}){const o=this.#t.templateDir,i=c.compile(e.readFileSync(n.resolve(o,"src/default/workflow.js.njk"),"utf8"),this.#i).render(t),r=this.#t.projectDir,a=n.resolve(r,`src/default/${t.codeKey}.js`);e.writeFileSync(a,i,"utf8");for await(const e of t.childs)await this.createType({node:e})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:t}){let o=this.#s[t.type];if(o)return o;const i=this.#t.templateDir;return o=c.compile(e.readFileSync(n.resolve(i,`src/default/blocks/${t.type}.js.njk`),"utf8"),this.#i),this.#s[t.type]=o,o}createStepFile({node:t}){const o=this.#t.projectDir,i=`${t.codeKey}.js`,r=n.resolve(o,`src/default/blocks/${i}`);e.writeFileSync(r,t.context.render,"utf8"),t.context.fileName=i,t.context.filePath=r}async transformExpression(e){let t=await this.transformValue(e);return t=JSON.stringify(t),t=this.replaceSpecialPattern(t),t}async transformValue(e){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=await this.transformValue(e[t]);else if(p(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++)e[t[n]]=await this.transformValue(e[t[n]])}else if("string"==typeof e){const t=await ie({expression:e});if(t){const{processor:n,statement:o}=t;switch(n){case"v":e=`$::v.${o}::`;break;case"e":e=`$::${o}::`;break;case"m":e=`$::closure.module['${o}']::`;break;case"f":e=`$::closure.form.${o}::`;break;case"for":e=`$::caller.for.${o}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const t="flow.yaml",i=`Creating ${t}`;await this.setProgress({message:i});const{content:r,...a}=this.#n.doc,s={content:o.stringify(a)},l=this.#t.templateDir,p=c.compile(e.readFileSync(n.resolve(l,`${t}.njk`),"utf8"),this.#i).render(s),d=this.#t.projectDir,f=n.resolve(d,`${t}`);e.writeFileSync(f,p,"utf8")}async createProjectMainYaml(){const t="flow.main.yaml",i=`Creating ${t}`;await this.setProgress({message:i});const r={content:o.stringify(this.#o)},a=this.#t.templateDir,s=c.compile(e.readFileSync(n.resolve(a,`${t}.njk`),"utf8"),this.#i).render(r),l=this.#t.projectDir,p=n.resolve(l,`${t}`);e.writeFileSync(p,s,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=i.exec("prettier --write .",{cwd:n.resolve(e,"src")});if(0!==t.code)throw new Error(t.stderr)}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&await n.save()}}else if(this.#n.id){const e=await B.list({type:"workflow.deploy",parent_id:this.#n.id});for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&(n=await B.update(n,{id:n.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:n}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const o=Object.keys(t.doc||{}),i=n||{};for(let e=0;e<o.length;e++){const n=t.doc[o[e]];n.name=o[e];const r=i.get(o[e]);await L({...this.#v,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:r})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#t.id)return;let o=await B.first({name:t.params.name,parent_id:this.#u.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await B.update(o,{id:o.id})):o=await B.create({parent_id:this.#u.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:n.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(ae.blue(t)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:t})}async build(){if(this.#w&&!this.#g)return await this.createNetwork();try{const t=this.#w?await Y({root:this.#l}):void 0;if(this.#g){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#w){const o=this.#t.project?.projectDir||this.#t.projectDir;e.writeFileSync(n.resolve(o,"./fnet/flow.bpmn"),t.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#l}),await this.createEngine({root:this.#l}),await this.createNodeTree({root:this.#l}),await this.createProjectYaml(),await this.createProjectMainYaml(),await N(this.#v),await I(this.#v),await C(this.#v),await O(this.#v),await E(this.#v),await A(this.#v),await $(this.#v),await T(this.#v),await M(this.#v),await F(this.#v),this.#y&&(await R(this.#v),await q(this.#v),this.#h&&await this.deploy())}await this._cache_set(this.#d,{status:"COMPLETED",data:{network:t}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await Y({root:this.#l});await this._cache_set(this.#d,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}}}var oo=function(){if(Cn)return In;Cn=1;const u=process.cwd(),{spawn:m}=e;t({name:["redis"],dir:u,optional:!0});const g=n,y=o,h=i,w=r,v=a,b=s,x=t,k=c,j=l,_=p,D=no(),P=function(){if(On)return $n;On=1;const e=d,t=f;return $n=function({baseDir:n=__dirname}){let o=n;for(;o!==t.parse(o).root;){const n=t.join(o,"node_modules");if(e.existsSync(n))return n;o=t.dirname(o)}return null}}()({baseDir:__dirname}),S="win32"===process.platform?";":":";process.env.PATH=`${g.join(P,"/.bin")}${S}${process.env.PATH}`;let A=y(process.argv.slice(2)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"}).option("vscode",{type:"boolean",default:!0,alias:"vs"}).option("runtime",{type:"string",default:"node",choices:["node"]})),(async e=>{try{const t=g.resolve(P,"./@fnet/cli-project-flow/dist/template/project"),n=g.resolve(u,e.name);h.existsSync(n)||h.mkdirSync(n),await _({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0});let o=v.exec("fnet build",{cwd:n});if(0!==o.code)throw new Error("Failed to build project.");if(v.which("git")&&(o=v.exec("git init --initial-branch=main",{cwd:n}),0!==o.code))throw new Error("Failed to initialize git.");if(v.which("code")&&e.vscode&&(o=v.exec(`cd ${n} && code .`),0!==o.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=g.resolve(P,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd(),o=await E(e);if(e.update){if(await _({dir:t,outDir:n,context:{name:o.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0}),0!==v.exec("fnet build",{cwd:n}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await E(e),n=new D(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await E({...e,mode:"all"}),n=new D(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await E({...e,mode:"file"}),n=new D(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function T(e,{name:t,bin:n,preArgs:o=[]}){return e.command(`${t||n} [commands..]`,`${n} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await E(e),{projectDir:i}=t,r=process.argv.slice(3);m(n,[...o,...r],{cwd:i,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function E(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:g.resolve(u,`./.output/${e.id}`),templateDir:g.resolve(P,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:g.resolve(P,"./@fnet/cli-project-common/dist/template/default"),coreDir:g.resolve(P,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=g.resolve(u,"flow.yaml");if(!h.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const{raw:n,parsed:o}=await b({file:t,tags:e}),i=g.dirname(t),r=o.main||"flow.main.yaml";let a=g.resolve(i,r);if(!h.existsSync(a)&&(a=g.resolve(i,r+".yaml"),!h.existsSync(a)))throw new Error(`${r} file not found in ${a}.`);const{raw:s,parsed:c}=await b({file:a,tags:e}),l={workflowAtom:{doc:{...o,"content-type":"yaml",content:s}},projectDir:i,projectFilePath:t,projectFileContent:n,projectFileParsed:o,projectMainFilePath:a,projectMainFileContent:s,projectMainFileParsed:c};let p=g.resolve(i,"fnet/targets.yaml");if(!h.existsSync(p)&&(p=g.resolve(i,"flow.devops.yaml"),h.existsSync(p))){const e=g.resolve(i,"fnet");h.existsSync(e)||h.mkdirSync(e),h.copyFileSync(p,g.resolve(i,"fnet/targets.yaml")),h.unlinkSync(p)}if(h.existsSync(p)){const{raw:t,parsed:n}=await b({file:p,tags:e}),o=w.parseDocument(t);l.devops={filePath:p,fileContent:t,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{h.writeFileSync(l.devops.filePath,o.toString())}}}const d=g.resolve(i,"readme.md");if(h.existsSync(d)){const e=h.readFileSync(d,"utf8");l.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:g.resolve(P,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:g.resolve(P,"./@fnet/cli-project-common/dist/template/default"),coreDir:g.resolve(P,"./@fnet/cli-project-flow/dist/template/core"),projectDir:g.resolve(t.projectDir,"./.workspace"),projectSrcDir:g.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}return A=A.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await E(e),{project:n}=t,{projectDir:o,projectFileParsed:i}=n,r=i.input;if(!r)throw new Error("Config schema not found in project file.");const a=await k({schema:r,format:"yaml"}),s=g.resolve(o,".fnet");h.existsSync(s)||h.mkdirSync(s);const c=g.resolve(s,`${e.name}.fnet`);h.writeFileSync(c,a)}catch(e){console.error(e.message),process.exit(1)}})),A=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await E(e),{project:n}=t,{projectDir:o,projectFileParsed:i}=n,r=i.input;if(!r)throw new Error("Config schema not found in project file.");const a=g.resolve(o,".fnet"),s=g.resolve(a,`${e.name}.fnet`),c=await k({schema:r,format:"yaml",ref:s});h.existsSync(a)||h.mkdirSync(a),h.writeFileSync(s,c)}catch(e){console.error(e.message),process.exit(1)}}))}(A),A=T(A,{bin:"npm"}),A=T(A,{bin:"node"}),A=T(A,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),A=T(A,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),A=T(A,{name:"app",bin:"npm",preArgs:["run","app","--"]}),A=T(A,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),A=T(A,{bin:"npx"}),A=T(A,{bin:"cdk"}),A=T(A,{bin:"aws"}),A=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await E(e),{projectDir:o}=t,i=e.config,r=await x({name:i,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),a=r?.data?.env||void 0,s=e.command,c=process.argv.slice(5);m(s,[...n,...c],{cwd:o,stdio:"inherit",shell:!0,env:{...process.env,...a}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(A,{name:"with"}),A=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const t=await E(e),{project:n}=t,{projectFileParsed:o}=n,i=o.commands;if(!i)throw new Error("Commands not found in project file.");const r=i[e.group];if(!r)throw new Error(`Command group '${e.group}' not found in project file.`);await j({commands:r})}catch(e){console.error(e.message),process.exit(1)}}))}(A,{name:"run"}),A.demandCommand(1,"You need at least one command before moving on").help().argv,In}(),io=Y(oo);module.exports=io;
|
|
2
|
+
"use strict";var e=require("child_process"),t=require("@fnet/config"),n=require("path"),o=require("yargs/yargs"),i=require("fs"),r=require("yaml"),a=require("shelljs"),s=require("@fnet/yaml"),c=require("@fnet/object-from-schema"),l=require("@fnet/shell-flow"),p=require("@flownet/lib-render-templates-dir"),d=require("node:fs"),f=require("node:path"),u=require("nunjucks"),m=require("lodash.clonedeep"),g=require("isobject"),y=require("redis"),h=require("@flownet/lib-is-redis-online"),w=require("nanoid"),v=require("@flownet/lib-atom-api-js"),b=require("axios"),x=require("qs"),k=require("lodash.merge"),j=require("@flownet/lib-parse-imports-js"),_=require("@fnet/npm-list-versions"),D=require("@fnet/npm-pick-versions"),P=require("object-hash"),S=require("ajv/dist/2020"),A=require("ajv/dist/standalone"),T=require("ajv-formats"),E=require("@fnet/shell"),$=require("semver"),O=require("@fnet/up-list-files"),C=require("node:os"),I=require("@node-red/util"),N=require("@flownet/lib-to-ios-app"),M=require("@flownet/lib-to-macos-app"),F=require("@flownet/lib-to-electron"),R=require("@flownet/lib-to-webos"),q=require("@flownet/lib-to-nextjs"),U=require("@flownet/lib-to-docker"),L=require("form-data"),B=require("@fnet/to-rust"),J=require("@fnet/to-pyip"),z=require("@flownet/lib-parse-node-url"),W=require("@flownet/lib-bpmn-from-flow"),K=require("@fnet/expression"),G=require("chalk"),H=require("@fnet/list-files"),V=require("lodash.pick"),X=require("lodash.omit");function Y(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Z,Q,ee,te,ne,oe,ie,re,ae,se,ce,le,pe,de,fe,ue,me,ge,ye,he,we,ve,be,xe,ke,je,_e,De,Pe,Se,Ae,Te,Ee,$e,Oe,Ce,Ie,Ne,Me,Fe,Re,qe,Ue,Le,Be,Je,ze,We,Ke,Ge,He,Ve,Xe,Ye,Ze,Qe,et,tt,nt,ot,it,rt,at,st,ct,lt,pt,dt,ft,ut,mt,gt,yt,ht,wt,vt,bt,xt,kt,jt,_t,Dt,Pt,St,At,Tt,Et,$t,Ot,Ct,It,Nt,Mt,Ft,Rt,qt,Ut,Lt,Bt,Jt,zt,Wt,Kt,Gt,Ht,Vt,Xt,Yt,Zt,Qt,en,tn,nn,on,rn,an,sn,cn,ln,pn,dn,fn,un,mn,gn,yn,hn,wn,vn,bn,xn,kn,jn,_n,Dn,Pn,Sn,An,Tn,En,$n,On,Cn,In={};function Nn(){if(oe)return ne;oe=1;const e=k;return ne=({feature:t,features:n,packageDevDependencies:o})=>{const{name:i,packages:r,options:a,extraCheck:s,explicit:c}=t,l=`${i}_enabled`,p=n.rollup_output||{},d=Object.keys(p);let f=a||{};const u=n[i]?.options;u&&(f=e(f,u));const m=!n[i]||!1===n[i]?.enabled;d.forEach((e=>{const t=n.rollup_output[e];if(t){if(Reflect.has(t,i)){if(m||!t[i]||!1===t[i]?.enabled)return void delete t[i];!0===t[i]&&(t[i]={enabled:!0,options:f})}else{if(m||c||!1===n[l])return;t[i]={enabled:!0}}t[i]=t[i]||{},t[i].options={...f,...t[i].options}}}));let g=d.some((e=>!0===n.rollup_output[e][i]?.enabled));s&&(g=s()&&g),n[l]=g,g&&r.forEach((e=>o.push({package:e[0],version:e[1]})))}}function Mn(){if($e)return Ee;$e=1;const e=k,t=d,n=f,o=j,i=function(){if(re)return ie;re=1;const e=Nn();return ie=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:i,packageDevDependencies:o})},ie}(),r=function(){if(se)return ae;se=1;const e=Nn();return ae=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:i,packageDevDependencies:o})},ae}(),a=function(){if(le)return ce;le=1;const e=Nn();return ce=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:i,packageDevDependencies:o})},ce}(),s=function(){if(de)return pe;de=1;const e=Nn();return pe=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:i,packageDevDependencies:o})},pe}(),c=function(){if(ue)return fe;ue=1;const e=Nn();return fe=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:i,packageDevDependencies:o})},fe}(),l=function(){if(ge)return me;ge=1;const e=Nn();return me=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:i,packageDevDependencies:o})},me}(),p=function(){if(he)return ye;he=1;const e=Nn();return ye=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:i,packageDevDependencies:o})},ye}(),u=function(){if(ve)return we;ve=1;const e=Nn();return we=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:i,packageDevDependencies:o})},we}(),m=function(){if(xe)return be;xe=1;const e=Nn();return be=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:i,packageDevDependencies:o})},be}(),g=function(){if(je)return ke;je=1;const e=Nn();return ke=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:i,packageDevDependencies:o})},ke}(),y=function(){if(De)return _e;De=1;const e=Nn();return _e=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:i,packageDevDependencies:o})},_e}(),h=function(){if(Se)return Pe;Se=1;const e=Nn();return Pe=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features,r={};!0===i.app?.enabled&&(r.targets=r.targets||[],r.targets.push({src:"./src/app/index.html",dest:i.app.dir}),Reflect.has(i.app,"copy")||Reflect.has(i,"copy")||(i.copy=!0)),e({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:r},features:i,packageDevDependencies:o})},Pe}(),w=function(){if(Te)return Ae;Te=1;const e=Nn();return Ae=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features,r=i.css&&!1!==i.css.enabled;let a=[];r&&(a.push(["rollup-plugin-postcss","^4"]),a.push(["sass","^1.66"]),(i.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":a.push(["postcss-import","^15"]);break;case"postcss-url":a.push(["postcss-url","^10"]);break;case"postcss-preset-env":a.push(["postcss-preset-env","^9"]);break;case"autoprefixer":a.push(["autoprefixer","^10"]);break;case"cssnano":a.push(["cssnano","^6"])}}))),e({feature:{name:"css",packages:a},features:i,packageDevDependencies:o})},Ae}();function v({dir:e,name:o="index"}){let i=n.resolve(e,`./${o}.tsx`);if(t.existsSync(i)||(i=n.resolve(e,`./${o}.ts`)),t.existsSync(i)||(i=n.resolve(e,`./${o}.jsx`)),t.existsSync(i)||(i=n.resolve(e,`./${o}.js`)),!t.existsSync(i))return{};const r=i,a=n.extname(i);return{file:r,ext:a,ts:".ts"===a||".tsx"===a,name:o}}return Ee=async t=>{const{atom:d,context:f,setProgress:b}=t;b("Initializing features..."),d.doc.features=d.doc.features||{};const x=d.doc.features;x.project=x.project||{},x.project.format=x.project.format||x.project_format||"esm",x.project_format=x.project.format,x.dts_enabled=!0===x.dts||void 0!==x.dts&&!1!==x.dts,x.hasOwnProperty("all_parsed_imports")||(x.all_parsed_imports=!0);const k=n.resolve(f.project.projectDir),j=v({dir:n.resolve(k,"./app")});if(j.file){b("Parsing app entry imports...");let e=await o({file:j.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));x.app_uses_jsx=t,x.app_has_entry=!0,e=await o({file:j.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),x.app_entry_uses_jsx=t,x.app_entry_is_ts=j.ts,x.app_entry_ext=j.ext}const _=v({dir:n.resolve(k,"./cli")});if(_.file){b("Parsing cli entry imports...");let e=await o({file:_.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));x.cli_uses_jsx=t,x.cli_has_entry=!0,e=await o({file:_.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),x.cli_entry_uses_jsx=t,x.cli_entry_is_ts=_.ts,x.cli_entry_ext=_.ext}if("workflow.lib"===d.type){const e=v({dir:n.resolve(k,"./src")});if(e.file){b("Parsing src entry imports...");let t=await o({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));x.src_uses_jsx=n,x.src_has_entry=!0,t=await o({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),x.src_entry_uses_jsx=n,x.src_entry_is_ts=e.ts,x.src_entry_ext=e.ext}}const D=Reflect.has(x,"app_entry_uses_jsx")?!0===x.app_entry_uses_jsx:!0===x.src_entry_uses_jsx,P=Reflect.has(x,"cli_entry_uses_jsx")?!0===x.cli_entry_uses_jsx:!0===x.src_entry_uses_jsx;x.form_enabled=!0===d.doc.form||!0===d.doc.form?.enabled||!0===x.form||!0===x.form?.enabled,x.multiple_enabled=x.multiple_enabled||!0===x.multiple||!0===x.multiple?.enabled,!1===x.app?x.app={enabled:!1}:!0===x.app?x.app={enabled:!0,extend:!0===x.app_has_entry,export:!0,react:D}:x.app={enabled:!0,extend:!0===x.app_has_entry,export:!0,react:D,...x.app||{}},x.app.enabled=!0===x.app.enabled&&(!0===d.doc.features.form_enabled||!0===x.app.extend||!0===x.app.enabled),x.app.format=x.app.format||"esm",x.app.folder=x.app.folder||x.app.format||"default",!1===x.cli?x.cli={enabled:!1}:!0===x.cli?x.cli={enabled:!0,extend:!0===x.cli_has_entry,export:!0,react:P}:x.cli={enabled:!0,extend:!0===x.cli_has_entry,export:!0,react:P,...x.cli||{}},x.cli.enabled=!0===x.cli.enabled&&(!1===d.doc.features.form_enabled||!0===x.cli.extend||!0===x.cli.enabled),x.cli.format=x.cli.format||"esm",x.cli.folder=x.cli.folder||x.cli.folder||"esm",x.cli.node_options=x.cli.node?.options||x.cli.node_options||"",x.json=x.cli.enabled||x.json;const S={cjs:{format:"cjs",context:x.form_enabled?"window":"global",babel:!0===x.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==x.cjs,copy:!1},esm:{format:"esm",context:x.form_enabled?"window":"global",babel:!0===x.src_uses_jsx||!1,browser:!1,replace:!0,browsersync:!0,terser:!1,enabled:!1!==x.esm,copy:!0},iife:{format:"iife",context:x.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!1!==x.iife,terser:!0,copy:!1}};!0===x.webos&&(S.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===x.electron&&(S.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===x.nextjs&&(S.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===x.ios&&(S.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===x.macos&&(S.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===x.app.enabled&&(x.app.dir=`./dist/app/${x.app.folder}`,S.app={format:x.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:x.app.dir,terser:!0,output_exports:!1===x.app.export?"none":"auto"}),!0===x.cli.enabled&&(x.cli.dir=`./dist/cli/${x.cli.folder}`,S.cli={format:x.cli.format,context:"global",babel:!0===x.src_uses_jsx||!0===x.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:x.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===x.cli.export?"none":"auto"});const A={server:".",startPath:`${n.normalize(x.app.dir||".")}`,files:[n.normalize("./dist/**/*")],cors:!0,open:!1};x.babel_options=e({targets:{browsers:"last 9 versions, not dead",node:"18"}},x.babel_options||x.babel?.options),x.browsersync_options=e(A,x.browsersync_options||x.browsersync?.options||{}),x.replace_options=e({},x.replace_options||x.replace?.options||{}),Reflect.has(x.browsersync_options,"proxy")&&delete x.browsersync_options.server,x.rollup=x.rollup||{},x.rollup_output=e(S,x.rollup_output||x.rollup?.output||{}),x.preact_enabled=!0===x.preact||x.preact&&!1!==x.preact?.enabled;let T=Object.keys(S);for(const t of T){const n=S[t];n&&(!1!==x.rollup[t]?(n.babel_options=n.babel_options||x.babel_options,n.browsersync_options=e(x.browsersync_options,n.browsersync_options),n.replace_options=e(x.replace_options,n.replace_options),x.preact_enabled&&(n.alias_enabled=!0,n.alias=n.alias||{},n.alias.entries=n.alias.entries||{},n.alias.entries.react="preact/compat",n.alias.entries["react-dom"]="preact/compat"),x.form_enabled&&(n.babel=!0)):delete x.rollup_output[t])}T=Object.keys(x.rollup_output),x.babel_enabled=T.some((e=>!0===x.rollup_output[e].babel)),x.browser_enabled=T.some((e=>!0===x.rollup_output[e].babel)),x.browsersync_enabled=!1!==x.browsersync&&T.some((e=>!0===x.rollup_output[e].browsersync)),x.browsersync_enabled=x.browsersync_enabled&&x.app.enabled,x.dependency_auto_enabled=!1!==x.dependency_auto&&!1!==x.dependency_auto?.enabled,x.npm_install_flags=x.npm_install_flags||"",x.react_version=x.react_version||x.react?.version||18,w(t),h(t),y(t),g(t),m(t),p(t),u(t),l(t),c(t),s(t),a(t),i(t),r(t)},Ee}function Fn(){if(Ce)return Oe;Ce=1;const e=_;return Oe=async({atom:t,packageDependencies:n,packageDevDependencies:o,setProgress:i})=>{if(i("Initializing dependencies"),"workflow"===t.type&&(n.push({package:"get-value",version:"^3"}),n.push({package:"set-value",version:"^4"})),t.doc.features.form_enabled&&t.doc.features.dependency_auto_enabled){let o="^18.2";i("Fetching React versions");o=`^${(await e({name:"react",groupBy:{major:!0}})).find((e=>e[0]===t.doc.features.react_version.toString()))[0]}`,n.push({package:"react",version:o}),n.push({package:"react-dom",version:o}),"workflow"===t.type&&(n.push({package:"@flownet/react-app",version:"^0.1"}),n.push({package:"@flownet/react-app-state",version:"^0.1"}))}t.doc.features.preact_enabled&&n.push({package:"preact",version:"^10"}),!0===t.doc.features.cli.enabled&&(n.push({package:"@fnet/args",version:"^0.1"}),o.push({package:"ajv",version:"^8"}),t.doc.features.cli.fargs&&!1!==t.doc.features.cli.fargs?.enabled&&n.push({package:"@fnet/config",version:"0.2.21"})),t.doc.features.render&&!1!==t.doc.features.render.enabled&&o.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),o.push({package:"@babel/core",version:"^7"}),o.push({package:"@rollup/plugin-commonjs",version:"^28"}),o.push({package:"@rollup/plugin-node-resolve",version:"^15"}),o.push({package:"@rollup/plugin-replace",version:"^6"}),o.push({package:"rollup",version:"^4"}),t.doc.features.dts_enabled&&o.push({package:"rollup-plugin-dts",version:"^6"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),o.push({package:"@rollup/plugin-alias",version:"^5"}),o.push({package:"fs-extra",version:"^11"}),t.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6"}),o.push({package:"@babel/preset-env",version:"^7"}),o.push({package:"@babel/preset-react",version:"^7"}),t.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":o.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":o.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":o.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":o.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":o.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),o.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),t.doc.features.browsersync_enabled&&o.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})},Oe}function Rn(){if(Ne)return Ie;Ne=1;const e=d,t=f,n=p;return Ie=async({atom:o,setProgress:i,context:r,packageDependencies:a})=>{if(!0!==o.doc.features.app.enabled)return;await i({message:"Creating app folder"});const s={atom:o,packageDependencies:a,ts:Date.now()},c=r.templateDir,l=t.resolve(r.projectDir,"src/app");e.existsSync(l)||e.mkdirSync(l,{recursive:!0});let p=["index.js.njk"];!1!==o.doc.features.app.html&&p.push("index.html.njk"),await n({pattern:p,dir:t.resolve(c,"src/app"),outDir:l,context:s})},Ie}function qn(){if(Fe)return Me;Fe=1;const e=D,t=P,n=d,o=f;return Me=async({projectDir:i,name:r,setProgress:a,count:s=1})=>{let c;const l=t(["npm-pick-versions",r,s]),p=o.join(i,".cache"),d=o.join(p,l+".json");return n.existsSync(d)?(a&&a(`Picking npm version of ${r} from cache ...`),c=JSON.parse(n.readFileSync(d,"utf8"))):(a&&a(`Picking npm version of ${r} ...`),c=await e({name:r,count:s}),n.mkdirSync(p,{recursive:!0}),n.writeFileSync(d,JSON.stringify(c),"utf8")),c}}function Un(){if(qe)return Re;qe=1;const e=u,t=d,n=f,o=j,i=qn();return Re=async({atom:r,context:a,packageDependencies:s,packageDevDependencies:c,setProgress:l})=>{await l({message:"Creating package.json."});s.filter((e=>!0===e.dev)).forEach((e=>{c.find((t=>t.package===e.package))||c.push(e);const t=s.findIndex((t=>t.package===e.package));s.splice(t,1)}));const p=s.find((e=>"react"===e.package)),d=s.find((e=>"react-dom"===e.package));p&&!d?s.push({package:"react-dom",version:p.version}):p&&d&&(d.version=p.version),p&&r.doc.features.react_version>=17&&(s.find((e=>"@emotion/react"===e.package))||s.push({package:"@emotion/react",version:"^11"}),s.find((e=>"@emotion/styled"===e.package))||s.push({package:"@emotion/styled",version:"^11"}));const f=[];!0===r.doc.features.app.enabled&&f.push({file:n.resolve(a.projectDir,"src/app/index.js"),dev:!1!==r.doc.features.app.dev}),!0===r.doc.features.cli.enabled&&f.push({file:n.resolve(a.projectDir,"src/cli/index.js"),dev:!1!==r.doc.features.cli.dev});for await(const e of f){const n=e.file;if(!t.existsSync(n))throw new Error(`App file not found: ${n}`);const p=await o({file:n,recursive:!0}),d=!0===r.doc.features.all_parsed_imports?p.all:p.required;for await(const t of d){if("npm"!==t.type)continue;if(s.find((e=>e.package===t.package)))continue;if(c.find((e=>e.package===t.package)))continue;const n=await i({name:t.package,projectDir:a.projectDir,setProgress:l});(!0===e.dev?c:s).push({package:t.package,subpath:t.subpath,version:n.minorRange,type:"npm"})}}const u={atom:r,packageDependencies:s,packageDevDependencies:c},m=a.templateCommonDir,g=e.compile(t.readFileSync(n.resolve(m,"package.json.njk"),"utf8"),e.configure(m)).render(u),y=a.projectDir,h=n.resolve(y,"package.json");t.writeFileSync(h,g,"utf8");const w=n.resolve(a.project.projectDir,"fnet");if(t.existsSync(w)){const e=n.resolve(a.projectDir,"fnet");t.existsSync(e)||t.mkdirSync(e);const o=t.readdirSync(w);for(const i of o){const o=n.resolve(w,i);if(!t.lstatSync(o).isFile())continue;const r=n.resolve(e,i);t.copyFileSync(o,r)}}},Re}function Ln(){if(Le)return Ue;Le=1;const e=d,t=f,n=p;return Ue=async({atom:o,setProgress:i,context:r,packageDependencies:a})=>{if(!0!==o.doc.features.cli.enabled)return;await i({message:"Creating cli."});const s={atom:o,packageDependencies:a},c=r.templateDir,l=t.resolve(r.projectDir,"src/cli");e.existsSync(l)||e.mkdirSync(l,{recursive:!0}),await n({pattern:["index.js.njk"],dir:t.resolve(c,"src/cli"),outDir:l,context:s})},Ue}function Bn(){if(Je)return Be;Je=1;const e=d,t=f,n=u,o=j;return Be=async({atom:i,setProgress:r,context:a,packageDependencies:s})=>{await r({message:"Creating rollup file."});const c={atom:i,packageDependencies:s},l=t.resolve(a.projectDir,"src","default/index.js");if(!e.existsSync(l))throw new Error(`Entry file not found: ${l}`);const p=(await o({file:l,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),d=i.doc.features.rollup_output,f=Object.keys(d);for(let e=0;e<f.length;e++){const t=d[f[e]];if(!0===t.browser&&p.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(p.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<p.length;e++){const n=p[e];t.alias.entries[n]=`node:${n}`,t.alias.entries[`node:${n}`]=n}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(p)}}const u=a.templateCommonDir;let m=n.compile(e.readFileSync(t.resolve(u,"rollup.config.mjs.njk"),"utf8"),n.configure(u)).render(c);const g=a.projectDir;let y=t.resolve(g,"rollup.config.mjs");e.writeFileSync(y,m,"utf8")},Be}function Jn(){if(We)return ze;We=1;const e=d,t=f,n=u,o=S,i=A,r=T;return ze=async({atom:a,setProgress:s,context:c,njEnv:l})=>{if(!0!==a.doc.features.cli.enabled)return;await s({message:"Creating yargs."});let p={};if(p=a.doc.input?a.doc.input:{type:"object",properties:{},required:[]},a.doc.features.cli.fargs&&!1!==a.doc.features.cli.fargs?.enabled){const e=a.doc.features.cli.fargs,t={type:"string",description:"Config name to load args",hidden:!1},n={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(e,"default")&&(t.default=e.default),p.properties&&(p.properties.fargs=t,p.properties.ftag=n)}const d={options:p,imports:[],atom:a},f=c.templateDir,u=n.compile(e.readFileSync(t.resolve(f,"src/default/to.args.js.njk"),"utf8"),l).render(d),m=c.projectDir,g=t.resolve(m,"src/default/to.args.js");e.writeFileSync(g,u,"utf8");const y=new o({allErrors:!0,useDefaults:!0,formats:{email:!0},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});r(y);const h=y.compile(p),w=i(y,h);e.writeFileSync(t.resolve(m,"src/default/validate_input.js"),w,"utf8")},ze}function zn(){if(Ge)return Ke;Ge=1;const e=d,t=f,n=u;return Ke=async({atom:o,setProgress:i,context:r,packageDependencies:a})=>{await i({message:"Creating .gitignore"});const s={atom:o,packageDependencies:a},c=r.templateCommonDir,l=n.compile(e.readFileSync(t.resolve(c,".gitignore.njk"),"utf8"),n.configure(c)).render(s),p=r.projectDir,d=t.resolve(p,".gitignore");e.writeFileSync(d,l,"utf8")},Ke}function Wn(){if(Ve)return He;Ve=1;const e=d,t=f,n=u;return He=async({atom:o,setProgress:i,context:r,packageDependencies:a})=>{await i({message:"Creating tsconfig.json."});const s={atom:o,packageDependencies:a},c=r.templateCommonDir,l=n.compile(e.readFileSync(t.resolve(c,"tsconfig.json.njk"),"utf8"),n.configure(c)).render(s),p=r.projectDir,d=t.resolve(p,"tsconfig.json");e.writeFileSync(d,l,"utf8")},He}function Kn(){if(Ye)return Xe;Ye=1;const e=u,t=d,n=f,o=s;return Xe=async({atom:i,context:r,setProgress:a,Atom:s})=>{const c="readme.md",l=`Creating ${c}`;if(await a({message:l}),r.project?.readme){const i=r.projectDir,a={content:r.project.readme.doc.content},s=n.resolve(r.project.projectDir,"fnet/how-to.md");if(t.existsSync(s)){const e=t.readFileSync(s,"utf8");a.howto=e}const l=n.resolve(r.project.projectDir,"fnet/input.yaml");if(t.existsSync(l)){const e=await o({file:l,tags:r.tags});a.input=e.content}const p=r.templateCommonDir,d=e.compile(t.readFileSync(n.resolve(p,`${c}.njk`),"utf8"),e.configure(p)).render(a),f=n.resolve(i,`${c}`);t.writeFileSync(f,d,"utf8")}else if(i.id){const o=await s.first({type:"wiki",parent_id:i.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:a,...l}=o.doc,p={content:a},d=r.templateCommonDir,f=e.compile(t.readFileSync(n.resolve(d,`${c}.njk`),"utf8"),e.configure(d)).render(p),u=r.projectDir,m=n.resolve(u,`${c}`);t.writeFileSync(m,f,"utf8")}},Xe}function Gn(){if(Qe)return Ze;Qe=1;const e=n,t=l;return Ze=async({setProgress:n,context:o})=>{const i=o.projectDir;await n({message:"Prettifiying source files."});let r=e.join("src","**","*");await t({commands:{steps:[`prettier --write ${r} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`],wdir:i}})}}function Hn(){if(tt)return et;tt=1;const e=a;return et=async({atom:t,setProgress:n,context:o})=>{if(!t.doc.features.dts_enabled)return;const i=o.projectDir;await n({message:"Creating .d.ts"});if(0!==e.exec("tsc",{cwd:i}).code)throw new Error("Couldnt create .d.ts files.")},et}function Vn(){if(ot)return nt;ot=1;const e=a;return nt=async({setProgress:t,atom:n,context:o})=>{const i=o.projectDir;await t({message:"Installing npm packages."});if(0!==e.exec(`npm install ${n.doc.features.npm_install_flags}`,{cwd:i}).code)throw new Error("Couldnt install npm packages.")},nt}function Xn(){if(rt)return it;rt=1;const e=a;return it=async({setProgress:t,context:n})=>{const o=n.projectDir;await t({message:"Building main project."});if(0!==e.exec("npm run build",{cwd:o}).code)throw new Error("Couldnt build project.")}}function Yn(){if(Lt)return Ut;Lt=1;const e=function(){if(st)return at;st=1;const e=E,n=t;return at=async({setProgress:t,context:o,deploymentProject:i,deploymentProjectTarget:r,buildId:a})=>{await t({message:"Deploying it as gitlab project."});const s=o.projectDir;let c="fnet-to-gitlab";const l=r.params.config||"gitlab",p=await n({name:l,dir:o.projectDir,tags:o.tags});if(!p)throw new Error(`Couldnt load config ${l}`);const{data:d}=p.data;c+=` --projectGroupId=${d.projectGroupId}`,c+=` --projectPath='${s}'`,c+=` --projectName='${r.params.name}'`,c+=` --projectBranch='${r.params.branch||"main"}'`,c+=` --gitlabHost='${d.gitlabHost}'`,c+=` --gitlabToken='${d.gitlabToken}'`,c+=` --gitlabUsername='${d.gitlabUsername}'`,c+=` --gitlabUserEmail='${d.gitlabUserEmail}'`,!0!==r.dryRun&&(await e({cmd:c}),i.isDirty=!0)},at}(),o=function(){if(lt)return ct;lt=1;const e=d,n=f,o=$,i=E,r=t;return ct=async({setProgress:t,context:a,deploymentProject:s,deploymentProjectTarget:c,registerToPackageManager:l,yamlTarget:p})=>{await t({message:"Deploying it as gcs package."});const d=a.projectDir,f=n.resolve(d,"package.json"),u=e.readFileSync(f),m=JSON.parse(u);m.name=c.params.name,m.version=o.inc(c.version,"patch"),delete m.scripts,delete m.devDependencies,e.writeFileSync(f,JSON.stringify(m,null,"\t"));const{file:g,data:y}=await r({name:c.config||"gcs",dir:a.projectDir,tags:a.tags});let h="fnet-files-to-gcs";h+=` --projectId='${y.env.GCS_PROJECT_ID}'`,h+=` --bucketName='${y.env.GCS_BUCKET_NAME}'`,h+=` --keyFilename='${n.resolve(n.dirname(g),y.env.GCS_UPLOADER_KEY_FILE)}'`,h+=` --dir='${d}'`,h+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",h+=` --destDir='${m.name}/${m.version}'`,h+=" --metadata.cacheControl='public, max-age=31536000, immutable'",y.env.DOMAIN&&(h+=` --domain='${y.env.DOMAIN}'`),!0!==c.dry_run&&!0!==c.params.dry_run||(h+=" --dryRun"),await i({cmd:h}),e.writeFileSync(f,u),!0!==c.dryRun&&(s.isDirty=!0,c.version=m.version,p.set("version",m.version),await l({target:c,packageJSON:m}))}}(),s=function(){if(dt)return pt;dt=1;const e=d,n=f,o=$,i=a,s=t,l=O,p=c,u=r;return pt=async({atom:t,setProgress:r,context:a,deploymentProject:c,deploymentProjectTarget:d,yamlTarget:f})=>{await r({message:"Deploying it as npm package."});const m=a.projectDir,g=n.resolve(m,"package.json"),y=e.readFileSync(g),h=JSON.parse(y);h.name=d.params.name,h.version=o.inc(d.version,"patch");const w=d.params.bin?.name||d.params.bin;!1!==d.params.bin?.enabled&&w&&"string"==typeof w&&(h.bin={[w]:"dist/cli/esm/index.js",[t.doc.name]:"dist/cli/esm/index.js"}),delete h.scripts,delete h.devDependencies,h.scripts={serve:"npx serve ."},e.writeFileSync(g,JSON.stringify(h,null,"\t"));const v=d.config||"npm";let b=(await s({name:v,dir:a.projectDir,tags:a.tags,optional:!0}))?.data;if(!b){const t=l({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===t.length)throw new Error("Couldnt find schema to create npm config");const o=await p({schema:t[0],tags:a.tags}),i=a.project.projectDir,r=n.resolve(i,".fnet");e.existsSync(r)||e.mkdirSync(r),e.writeFileSync(n.resolve(r,`${v}.fnet`),u.stringify(o)),b=o}if(e.writeFileSync(n.resolve(m,".npmrc"),`//registry.npmjs.org/:_authToken=${b.env.NPM_TOKEN}`),!0!==d.dryRun){if(0!==i.exec("npm publish --access public",{cwd:m}).code)throw new Error("Couldnt publish to npm");e.writeFileSync(g,y),c.isDirty=!0,d.version=h.version,f.set("version",h.version)}},pt}(),l=function(){if(ut)return ft;ut=1;const e=d,n=f,o=C,i=u,r=I,a=t;return ft=async({atom:t,setProgress:s,context:c,deploymentProject:l,deploymentProjectTarget:p,buildId:d,packageDependencies:f,njEnv:u})=>{await s({message:"Deploying it as node-red flow."});const m=c.projectDir,g=c.templateDir,y="workflow"===t.type?"WF":"LIB";let h;if("simple"===p.deploy.template)h={atom:t,packageDependencies:f,red:{tab:{id:p.deploy.id||r.util.generateId(),label:`${y}/${t.id?t.id:o.hostname()}/${t.name}/${p.deploy.name||p.deploy.template}`},function:{id:r.util.generateId(),name:t.doc.name,initialize:{content:e.readFileSync(n.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:t.doc.bundleName}},inject:{id:r.util.generateId(),...p.params?.inject,payload:"json"===p.params?.inject?.payloadType?`'${JSON.stringify(p.params?.inject?.payload)}'`:p.params?.inject?.payload},debug:{id:r.util.generateId()}}};else if("cronjob"===p.deploy.template){let i=p.params?.schedules?cloneDeep(p.params?.schedules):void 0;i?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),h={atom:t,packageDependencies:f,red:{tab:{id:p.deploy.id||r.util.generateId(),label:`${y}/${t.id?t.id:o.hostname()}/${p.deploy.name||p.deploy.template}`},function:{id:r.util.generateId(),name:t.doc.name,initialize:{content:e.readFileSync(n.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:t.doc.bundleName}},cronjob:{id:r.util.generateId(),schedules:i},debug:{id:r.util.generateId()}}}}else{if("http"!==p.deploy.template)return;h={atom:t,packageDependencies:f,red:{tab:{id:p.deploy.id||r.util.generateId(),label:`${y}/${t.id?t.id:o.hostname()}/${p.deploy.name||p.deploy.template}`},function:{id:r.util.generateId(),name:t.doc.name,initialize:{content:e.readFileSync(n.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:t.doc.bundleName}},httpin:{id:r.util.generateId(),method:p.params.method||"get",url:p.params.url},httpout:{id:r.util.generateId()},debug:{id:r.util.generateId()}}}}let w=i.compile(e.readFileSync(n.resolve(g,`deploy/node-red/${p.deploy.template}.yaml.njk`),"utf8"),u).render(h);if(e.writeFileSync(n.resolve(m,"node-red.yaml"),w),w=yaml.load(w),!0===p.dryRun)return;l.isDirty=!0;const v=(await a({name:c.redConfig||"red",dir:c.projectDir,tags:c.tags}))?.data,b=p.deploy.url||v.env.RED_URL,x={};if(!1!==p.deploy.auth&&(x.Authorization="Bearer "+atomAccessToken),p.deploy.id)!0===p.actions?.delete?(await axios({method:"DELETE",url:`${b}/flow/${p.deploy.id}`,headers:x}),delete p.actions.delete,delete p.deploy.id,p.enabled=!1):await axios({method:"PUT",url:`${b}/flow/${p.deploy.id}`,data:w,headers:x});else{const e=await axios({method:"POST",url:`${b}/flow`,data:w,headers:x});p.deploy.id=e.data.id}},ft}(),p=function(){if(gt)return mt;gt=1;const e=i,o=n,r=t;return mt=async({atom:t,Atom:n,setProgress:i,context:a,packageDependencies:s,deploymentProject:c,deploymentProjectTarget:l})=>{await i({message:"Deploying it as workflow lib."});const p=(await r({name:"atom",dir:a.projectDir,tags:a.tags}))?.data;let d,f,u,m=l.deploy.name.split("/");if(1===m.length)f=p.env.ATOM_LIBRARIES_ID,u=l.deploy.name;else{if(2!==m.length)throw new Error("Wrong name path.");{const e=await n.first({where:{name:m[0],parent_id:p.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");f=e.id,u=m[1]}}if(!0===l.dryRun)return;if(c.isDirty=!0,l.deploy.id){if(d=await n.get({id:l.deploy.id}),!d)return}else{if(d=await n.create({parent_id:f,doc:{name:u,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!d)return;l.deploy.id=d.id}const g=a.projectDir;d.doc.contents=[{content:e.readFileSync(o.resolve(g,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:e.readFileSync(o.resolve(g,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:e.readFileSync(o.resolve(g,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],d.doc.name=u,d.doc.dependencies=s,"workflow.lib"===t.type?d.doc.subtype="library":"workflow"===t.type&&(d.doc.subtype="workflow"),d=await n.update(d,{id:d.id})}}(),g=function(){if(ht)return yt;ht=1;const e=t,n=N,o=m,i=$;return yt=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as ios-app package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},yt}(),y=function(){if(vt)return wt;vt=1;const e=t,n=M,o=m,i=$;return wt=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as macos-app package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},wt}(),h=function(){if(xt)return bt;xt=1;const e=t,n=F,o=m,i=$;return bt=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as electron package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},bt}(),w=function(){if(jt)return kt;jt=1;const e=t,n=R,o=m,i=$;return kt=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as webos package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},kt}(),v=function(){if(Dt)return _t;Dt=1;const e=t,n=q,o=m,i=$;return _t=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as nextjs package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},_t}(),x=function(){if(St)return Pt;St=1;const e=t,n=U,o=m,i=$;return Pt=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as docker package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},Pt}(),k=function(){if(Tt)return At;Tt=1;const e=d,n=f,o=$,i=E,r=t,a=b.default;return At=async({setProgress:t,context:s,deploymentProject:c,deploymentProjectTarget:l,yamlTarget:p})=>{await t({message:"Deploying it as fnet package."});const d=s.projectDir,f=n.resolve(d,"package.json"),u=e.readFileSync(f),m=JSON.parse(u);m.name=l.params.name,m.version=o.inc(l.version,"patch"),delete m.scripts,delete m.devDependencies,e.writeFileSync(f,JSON.stringify(m,null,"\t"));const{file:g,data:y}=await r({name:l.config||"fnet-package",dir:s.projectDir,tags:s.tags});if(!y.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${g}`);if(!y.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${g}`);if(!y.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${g}`);const h=`${y.env.ATOM_API_URL}/v1/auth/token`,w=y.env.ATOM_API_USERNAME,v=y.env.ATOM_API_PASSWORD;let b=await a({method:"POST",url:h,data:{username:w,password:v},headers:{"Content-Type":"application/json"}});const x=b.data?.access_token;if(!x)throw new Error(`Invalid access_token from ${h}`);let k="fnet-files-to-gcs";if(k+=` --projectId='${y.env.GCS_PROJECT_ID}'`,k+=` --bucketName='${y.env.GCS_BUCKET_NAME}'`,k+=` --keyFilename='${n.resolve(n.dirname(g),y.env.GCS_UPLOADER_KEY_FILE)}'`,k+=` --dir='${d}'`,k+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",k+=` --destDir='${m.name}/${m.version}'`,k+=" --metadata.cacheControl='public, max-age=31536000, immutable'",y.env.DOMAIN&&(k+=` --domain='${y.env.DOMAIN}'`),!0!==l.dry_run&&!0!==l.params.dry_run||(k+=" --dryRun"),await i({cmd:k}),e.writeFileSync(f,u),!0===l.dryRun)return;c.isDirty=!0,l.version=m.version,p.set("version",m.version);const j=`${y.env.ATOM_API_URL}/v1/service/fnet-package/publish`;if(b=await a({method:"POST",url:j,data:{name:m.name,version:m.version,version_domain:y.env.DOMAIN,docs:l.params.docs,configs:l.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${x}`}}),b.data?.error)throw new Error("Failed to publish fnet package.")},At}(),j=function(){if($t)return Et;$t=1;const e=$,n=t,o=b.default;return Et=async({setProgress:t,context:i,deploymentProject:r,deploymentProjectTarget:a,yamlTarget:s})=>{await t({message:"Deploying it as fnet form."});const{file:c,data:l}=await n({name:a.config||"fnet-form",dir:i.projectDir,tags:i.tags});if(!l.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${c}`);if(!l.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${c}`);if(!l.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${c}`);const p=`${l.env.ATOM_API_URL}/v1/auth/token`,d=l.env.ATOM_API_USERNAME,f=l.env.ATOM_API_PASSWORD;let u=await o({method:"POST",url:p,data:{username:d,password:f},headers:{"Content-Type":"application/json"}});const m=u.data?.access_token;if(!m)throw new Error(`Invalid access_token from ${p}`);r.isDirty=!0;const g=e.inc(a.version,"patch");a.params.version=g,a.version=g,s.set("version",g);const y=`${l.env.ATOM_API_URL}/v1/service/fnet-form/publish`;if(u=await o({method:"POST",url:y,data:{name:a.params.name,version:a.params.version,docs:a.params.docs,configs:a.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`}}),u.data?.error)throw new Error("Error publishing fnet form.")},Et}(),_=function(){if(Ct)return Ot;Ct=1;const e=$,n=t,o=b.default,r=i,a=E,s=L;return Ot=async({setProgress:t,context:i,deploymentProject:c,deploymentProjectTarget:l,yamlTarget:p})=>{await t({message:"Deploying it as fnet flow."});const{file:d,data:f}=await n({name:l.config||"fnet-flow",dir:i.project.projectDir,tags:i.tags});if(!f.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${d}`);if(!f.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${d}`);if(!f.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${d}`);const u=`${f.env.ATOM_API_URL}/v1/auth/token`,m=f.env.ATOM_API_USERNAME,g=f.env.ATOM_API_PASSWORD;let y=await o({method:"POST",url:u,data:{username:m,password:g},headers:{"Content-Type":"application/json"}});const h=y.data?.access_token;if(!h)throw new Error(`Invalid access_token from ${u}`);c.isDirty=!0;const w=e.inc(l.version,"patch");l.params.version=w,l.version=w,p.set("version",w);const v=`${f.env.ATOM_API_URL}/v1/service/fnet-flow/publish`;if(y=await o({method:"POST",url:v,data:{name:l.params.name,version:l.params.version,docs:l.params.docs,configs:l.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`}}),y.data?.error)throw new Error("Error publishing fnet flow.");const b=y.data?.upload.id;let x="fnet-dir-zipper";x+=` --sourceDir='${i.project.projectDir}'`,x+=" -p=**/*",x+=" -g",x+=" --stdout_format=json";const k=await a({cmd:x});if(0!==k.code)throw new Error(k.stderr);const j=JSON.parse(k.stdout).path;let _=new s;_.append("file",r.createReadStream(j));const D=await o.request({method:"POST",maxBodyLength:1/0,url:`${f.env.ATOM_API_URL}/v1/service/upload/single/${b}`,headers:{..._.getHeaders(),Authorization:`Bearer ${h}`},data:_});if(D.data?.error)throw new Error("Error uploading fnet flow.")},Ot}(),D=function(){if(Nt)return It;Nt=1;const e=$,n=t,o=b.default,r=i,a=E,s=L;return It=async({setProgress:t,context:i,deploymentProject:c,deploymentProjectTarget:l,yamlTarget:p})=>{await t({message:"Deploying it as fnet node."});const{file:d,data:f}=await n({name:l.config||"fnet-node",dir:i.project.projectDir,tags:i.tags});if(!f.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${d}`);if(!f.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${d}`);if(!f.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${d}`);const u=`${f.env.ATOM_API_URL}/v1/auth/token`,m=f.env.ATOM_API_USERNAME,g=f.env.ATOM_API_PASSWORD;let y=await o({method:"POST",url:u,data:{username:m,password:g},headers:{"Content-Type":"application/json"}});const h=y.data?.access_token;if(!h)throw new Error(`Invalid access_token from ${u}`);c.isDirty=!0;const w=e.inc(l.version,"patch");l.params.version=w,l.version=w,p.set("version",w);const v=`${f.env.ATOM_API_URL}/v1/service/fnet-node/publish`;if(y=await o({method:"POST",url:v,data:{name:l.params.name,version:l.params.version,docs:l.params.docs,configs:l.params.configs},headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`}}),y.data?.error)throw new Error("Error publishing fnet node.");const b=y.data?.upload.id;let x="fnet-dir-zipper";x+=` --sourceDir='${i.project.projectDir}'`,x+=" -p=**/*",x+=" -g",x+=" --stdout_format=json";const k=await a({cmd:x});if(0!==k.code)throw new Error(k.stderr);const j=JSON.parse(k.stdout).path;let _=new s;_.append("file",r.createReadStream(j));const D=await o.request({method:"POST",maxBodyLength:1/0,url:`${f.env.ATOM_API_URL}/v1/service/upload/single/${b}`,headers:{..._.getHeaders(),Authorization:`Bearer ${h}`},data:_});if(D.data?.error)throw new Error("Error uploading fnet node.")},It}(),P=function(){if(Ft)return Mt;Ft=1;const e=t,n=B,o=m,i=$;return Mt=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as Rust package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},Mt}(),S=function(){if(qt)return Rt;qt=1;const e=t,n=J,o=m,i=$;return Rt=async({atom:t,target:r,onProgress:a,projectDir:s,dependencies:c,context:l,yamlTarget:p})=>{a&&await a({message:"Deploying it as pyip package."});const d=r?.config?await e({name:r.config,dir:s,optional:!0,transferEnv:!1,tags:l.tags}):void 0,f=i.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,p.set("version",f);const u=o(r.params);u.dependencies=o(c);const m={atom:t,params:u,config:d?.config,src:s,dest:s};return{deployer:await n(m)}},Rt}();return Ut=async t=>{const{atom:n,packageDependencies:i,context:r,deploymentProjectTarget:a,setProgress:c,deploymentProject:d,yamlTarget:f}=t;if(!0===a.enabled)if("lib"===a.type)await p({...t});else if("red"===a.type)await l({...t});else if("npm"===a.type)await s({...t});else if("gcs"===a.type)await o({...t});else if("gitlab"===a.type)await e({...t});else if("fnet-package"===a.type)await k({...t});else if("fnet-form"===a.type)await j({...t});else if("fnet-node"===a.type)await D({...t});else if("fnet-flow"===a.type)await _({...t});else{let e;if("nextjs"===a.type?e=v:"webos"===a.type?e=w:"electron"===a.type?e=h:"docker"===a.type?e=x:"ios"===a.type?e=g:"macos"===a.type?e=y:"rust"===a.type?e=P:"pyip"===a.type&&(e=S),!e)return;await e({atom:n,target:a,onProgress:c,projectDir:r.projectDir,dependencies:i,context:r,yamlTarget:f}),d.isDirty=!0}},Ut}function Zn(){if(Jt)return Bt;Jt=1;const e=m;async function t({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:i}){t.context.transform=t.context.transform||e(t.definition);for(const n of t.childs)n.context.transform=n.context.transform||e(n.definition),n.definition.hasOwnProperty("condition")&&(n.context.transform.condition=await i(n.definition.condition));await n({node:t}),o({node:t})}return Bt={hits:async function({node:e}){if(!e.definition.hasOwnProperty("switch"))return!1;const t=e.definition.switch||[];if(!t.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===t.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const n=t.filter((e=>e.hasOwnProperty("default")));if(n.length>1)throw new Error("Switch must have only one default");if(1===n.length&&!t[t.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");return!0},init:async function({node:e,initNode:n}){e.type="switch",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let t=0;t<e.definition.switch.length;t++){let o=e.definition.switch[t],i=`${t}`;o.hasOwnProperty("default")&&(i="default",o=o.default);const r={name:o.condition||i,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(r),await n({node:r})}e.resolve=t},resolve:t}}function Qn(){if(an)return rn;an=1;const e=m;async function t({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:i}){t.context.transform=t.context.transform||e(t.definition);const r=t.context.transform;r.args&&(r.args=await i(r.args)),r.result&&(r.result=await i(r.result));const a=t.workflow.parent;t.context.lib=a.context.libs.find((e=>e.name===r.call)),await n({node:t}),o({node:t})}return rn={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:n}){e.type="call";for(let t=0;t<e.definition.modules?.length;t++){const o=e.definition.modules[t],i=Object.keys(o)[0],r={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(r),await n({node:r})}e.resolve=t},resolve:t}}function eo(){if(cn)return sn;cn=1;const e=Qn();return sn={hits:async function({node:e}){return e.definition.hasOwnProperty("shell")},init:async function(t){const{node:n}=t,o="shell",i=n.definition,r=typeof i[o];if("string"!==r&&"object"!==r)throw new Error(`Unsupported ${o} usage`);i.call="npm:@fnet/shell",i.args="string"===r?{...i.args,cmd:i[o]}:i[o],delete i[o],await e.init(t)}}}function to(){return An?Sn:(An=1,Sn=({node:e})=>{const t=e.definition;if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let n=e.parent;for(;n.parent;){const o=n.childs.find((e=>e.name===t.next));if(o){e.context.next=o;break}n=n.parent}}else{let t=e.parent,n=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(void 0!==t.blockAutoJumpToParent||void 0!==t.blockAutoJumpToSibling){if(t.blockAutoJumpToParent){const o=t.childs.find((e=>e.index===n));o&&(e.context.next=o);break}t.blockAutoJumpToParent||(n=t.index+1,t=t.parent)}else{const o=t.childs.find((e=>e.index===n));if(o){e.context.next=o;break}n=t.index+1,t=t.parent}}})}function no(){if(En)return Tn;En=1;const e=d,n=f,o=r,i=a,c=u,l=m,p=g,k=function(){if(Q)return Z;Q=1;const e=y,t=h;return Z=async()=>{if(!await t({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const n=e.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await n.connect(),n}}(),{nanoid:_}=w,D=function(){if(te)return ee;te=1;const{Api:e}=v,t=b.default,n=x;return ee=class{init({config:o,accessToken:i}){return new Promise(((r,a)=>{if(e.set_api_url(o.data.url),i)return e.set_req_token(i),void r(i);t({method:"POST",url:`${o.data.issuer}/protocol/openid-connect/token`,data:n.stringify(o.data.grant.params),headers:{"Content-Type":"application/x-www-form-urlencoded"}}).then((t=>{e.set_req_token(t.data.access_token),r(t.data.access_token)})).catch((t=>{e.set_req_token(),a(t)}))}))}},ee}(),P=Mn(),S=Fn(),A=Rn(),T=Un(),E=Ln(),$=Bn(),O=Jn(),C=zn(),I=Wn(),N=Kn(),M=Gn(),F=Hn(),R=Vn(),q=Xn(),U=qn(),L=Yn(),{Atom:B}=v,J=z,Y=W,ne=t,oe=j,ie=K,re=s,ae=G,se=H,ce=function(){if(Wt)return zt;Wt=1;const e=K,t=Zn();return zt={hits:async function({node:t}){const n=Object.keys(t.definition);return 1===(await Promise.all(n.map((t=>e({expression:t}))))).filter((e=>"if"===e?.processor)).length},init:async function(n){const{node:o}=n,i=Object.keys(o.definition),r=await Promise.all(i.map((t=>e({expression:t})))),a=[],s=r.find((e=>"if"===e?.processor)),c=o.definition[s.expression];a.push({name:`${o.name}_if`,definition:c,processor:s}),delete o.definition[s.expression];const l=r.filter((e=>"elseif"===e?.processor));let p=0;for(const e of l){const t=o.definition[e.expression];a.push({name:`${o.name}_elseif_${p++}`,definition:t,processor:e}),delete o.definition[e.expression]}o.definition.switch=[];for(const e of a)o.definition.switch.push({condition:e.processor.statement,...e.definition});await t.init(n)}}}(),le=function(){if(Gt)return Kt;Gt=1;const e=m;async function t({node:t,resolveTypeCommon:n,resolveNextBlock:o}){if(t.context.transform=t.context.transform||e(t.definition),t.context.transform,t.context.try=t.childs.find((e=>"try"===e.name)),t.context.except=t.childs.find((e=>"except"===e.name)),t.context.except){const n=t.context.except;n.context.transform=n.context.transform||e(n.definition),n.context.transform.hasOwnProperty("as")||(n.context.transform.as="error")}await n({node:t}),o({node:t})}return Kt={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:n}){if(e.type="tryexcept",e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const t="try",o={name:t,childs:[],parent:e,definition:e.definition[t],index:e.childs.length,context:{}};e.childs.push(o),await n({node:o})}if(e.definition.except){const t="except",o={name:t,childs:[],parent:e,definition:e.definition[t],index:e.childs.length,context:{}};e.childs.push(o),await n({node:o})}e.resolve=t},resolve:t}}(),pe=function(){if(Vt)return Ht;Vt=1;const e=m;async function t({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:i}){t.context.transform=e(t.definition);const r=t.context.transform;for(let e=0;e<r.assign?.length;e++){let t=r.assign[e],n=Object.keys(t)[0],o=t[n],a={key:await i(n),value:await i(o)};r.assign[e]=a}await n({node:t}),o({node:t})}return Ht={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:n}){e.type="assign",e.resolve=t},resolve:t}}(),de=function(){if(Yt)return Xt;Yt=1;const e=m,t=V,n=X;async function o({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:i}){t.context.transform=t.context.transform||e(t.definition),t.context.transform.for.in=await i(t.definition.for.in),await n({node:t}),o({node:t})}return Xt={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:i}){if(e.type="for",e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const o=["value","in"],[i,r]=[t(e.definition.for,o),n(e.definition.for,o)];e.definition.for=i,e.definition.for.steps=[{[`${e.name}_step`]:r}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let t=0;t<e.definition.for.steps.length;t++){const n=e.definition.for.steps[t],o=Object.keys(n)[0],r={name:o,childs:[],parent:e,definition:n[o],index:e.childs.length,context:{}};e.childs.push(r),await i({node:r})}e.resolve=o},resolve:o}}(),fe=Zn(),ue=Qt?Zt:(Qt=1,Zt={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){}}),me=function(){if(tn)return en;tn=1;const e=m;async function t({node:t,resolveTypeCommon:n,transformExpression:o}){t.context.transform=t.context.transform||e(t.definition);const i=t.context.transform;i.raise=await o(i.raise),await n({node:t})}return en={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:n}){e.type="raise",e.resolve=t},resolve:t}}(),ge=function(){if(on)return nn;on=1;const e=m;async function t({node:t,resolveTypeCommon:n,transformExpression:o}){t.context.transform=t.context.transform||e(t.definition);const i=t.context.transform;i.return=await o(i.return),await n({node:t})}return nn={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:n}){e.type="return",e.resolve=t},resolve:t}}(),ye=Qn(),he=eo(),we=function(){if(pn)return ln;pn=1;const e=Qn();return ln={hits:async function({node:e}){return e.definition.hasOwnProperty("config")},init:async function(t){const{node:n}=t,o="config",i=n.definition,r=typeof i[o];if("string"!==r&&"object"!==r)throw new Error(`Unsupported ${o} usage`);i.call="npm:@fnet/config",i.args="string"===r?{...i.args,name:i[o]}:i[o],delete i[o],await e.init(t)}}}(),ve=function(){if(fn)return dn;fn=1;const e=Qn();return dn={hits:async function({node:e}){return e.definition.hasOwnProperty("yaml")},init:async function(t){const{node:n}=t,o="yaml",i=n.definition,r=typeof i[o];if("string"!==r&&"object"!==r)throw new Error(`Unsupported ${o} usage`);i.call="npm:@fnet/yaml",i.args="string"===r?{...i.args,file:i[o]}:i[o],delete i[o],await e.init(t)}}}(),be=function(){if(mn)return un;async function e({node:e}){e.context.next=e.childs[0]}return mn=1,un={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:t,initNode:n}){t.type||(t.type="steps");const o=t.definition.steps||[];for await(const e of o){const o=Object.keys(e)[0],i={name:o,childs:[],parent:t,definition:e[o],index:t.childs.length,context:{}};t.childs.push(i),await n({node:i})}t.resolve=e},resolve:e}}(),xe=function(){if(yn)return gn;yn=1;const e=m;async function t({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:i}){t.context.transform=t.context.transform||e(t.definition);const r=t.context.transform;r.props&&(r.props=await i(r.props));const a=t.workflow.parent;t.context.lib=a.context.libs.find((e=>e.name===r.form)),await n({node:t}),o({node:t})}return gn={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:n}){e.type="form";for(let t=0;t<e.definition.modules?.length;t++){const o=e.definition.modules[t],i=Object.keys(o)[0],r={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(r),await n({node:r})}e.resolve=t},resolve:t}}(),ke=function(){if(wn)return hn;wn=1;const e=m;async function t({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:i,transformValue:r}){t.context.transform=t.context.transform||e(t.definition),await n({node:t})}return hn={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:n}){e.type="operation",e.resolve=t},resolve:t}}(),je=function(){if(bn)return vn;bn=1;const e=m;async function t({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:i}){t.context.transform=t.context.transform||e(t.definition);const r=t.context.transform;r.next=await i(r.next),await n({node:t}),o({node:t})}return vn={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:n}){e.type="jump",e.resolve=t},resolve:t}}(),_e=function(){if(kn)return xn;kn=1;const e=Qn();return xn={hits:async function({node:e}){return e.definition.hasOwnProperty("prompt")},init:async function(t){const{node:n}=t,o="prompt",i=n.definition,r=typeof i[o];if("string"!==r&&"object"!==r)throw new Error(`Unsupported ${o} usage`);i.call="npm:@fnet/prompt",i.args="string"===r?{...i.args,message:i[o]}:i[o],delete i[o],await e.init(t)}}}(),De=function(){if(_n)return jn;_n=1;const e=Qn();return jn={hits:async function({node:e}){return e.definition.hasOwnProperty("html-script")},init:async function(t){const{node:n}=t,o="html-script",i=n.definition,r=typeof i[o];if("string"!==r&&"object"!==r)throw new Error(`Unsupported ${o} usage`);i.call="npm:@flownet/lib-load-browser-script-url",i.args="string"===r?{...i.args,src:i[o]}:i[o],delete i[o],await e.init(t)}}}(),Pe=function(){if(Pn)return Dn;Pn=1;const e=Qn();return Dn={hits:async function({node:e}){return e.definition.hasOwnProperty("html-link")},init:async function(t){const{node:n}=t,o="html-link",i=n.definition,r=typeof i[o];if("string"!==r&&"object"!==r)throw new Error(`Unsupported ${o} usage`);i.call="npm:@flownet/lib-load-browser-link-url",i.args="string"===r?{...i.args,src:i[o]}:i[o],delete i[o],await e.init(t)}}}(),Se=to();return Tn=class{#e;#t;#n;#o;#i;#r;#a;#s;#c;#l;#p;#d;#f;#u;#m;#g;#y;#h;#w;#v;#b;constructor(e){this.#e=new D,this.#t=e,this.#r=[],this.#a=[],this.#s={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#v={packageDependencies:this.#r,packageDevDependencies:this.#a,setProgress:this.setProgress.bind(this),context:this.#t,Atom:B,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#b={initNode:this.initNode.bind(this),cloneDeep:l,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Se,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,n){this._redis_client&&await this._redis_client.SETEX(e,n||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await k(),this.#p=this.#t.buildId||_(24),this.#v.buildId=this.#p,this.#m=this.#t.mode,this.#g=["all","deploy","build","file"].includes(this.#m),this.#y=["all","deploy","build"].includes(this.#m),this.#h=["all","deploy"].includes(this.#m),this.#w=["all","deploy","build","file","bpmn"].includes(this.#m),this.#f=this.#t.protocol,this.#d="BUILD:"+this.#p,this.#u=(await ne({optional:!0,name:"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),await P(this.#v),await S(this.#v),await this.transformWorkflow({workflow:this.#o});const e=await this.initNodeTree({workflow:this.#o});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#r}),await this.resolveNodeTree({root:e}),this.#l=e}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#t.id&&(this.#c=await this.#e.init({config:this.#u}),this.#v.atomAccessToken=this.#c)}async initWorkflow(){const e=this.#t.id;this.#n=this.#t.project?.workflowAtom||await B.get({id:e}),this.#o="string"==typeof this.#n.doc.content?(await re({content:this.#n.doc.content})).parsed:this.#n.doc.content;let t=this.#n.doc.bundleName;t=t||(this.#n.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#n.doc.bundleName=t,this.#n.type=this.#n.type||"workflow",this.#v.atom=this.#n}async initDependencies(){this.#r.push({package:"get-value",version:"^3.0"}),this.#r.push({package:"set-value",version:"^4.1"}),this.#n.doc.features.form_enabled?(this.#r.push({package:"react",version:"^18.2"}),this.#r.push({package:"react-dom",version:"^18.2"}),this.#r.push({package:"@flownet/react-app",version:"^0.1"}),this.#r.push({package:"@flownet/react-app-state",version:"^0.1"})):this.#r.push({package:"@fnet/args",version:"^0.1"}),this.#r.push({package:"chalk",version:"^4"})}#x(t){console.log("filePath",t),e.statSync(t).isDirectory()?(e.readdirSync(t).forEach((e=>{const o=n.join(t,e);this.#x(o)})),e.rmSync(t)):e.unlinkSync(t)}#k(t,o){const i=e.existsSync(t),r=i&&e.statSync(t);i&&r.isDirectory()?(e.mkdirSync(o,{recursive:!0}),e.readdirSync(t).forEach((e=>{this.#k(n.join(t,e),n.join(o,e))}))):e.copyFileSync(t,o)}async initWorkflowDir(){this.setProgress({message:"Initializing library directory."});const t=this.#t.projectDir,o=this.#t.coreDir;this.setProgress({message:"Cleaning project directory."});const i=se({dir:t,ignore:["node_modules",".cache"],absolute:!0});for(const t of i)e.rmSync(t,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."}),e.existsSync(t)||e.mkdirSync(t,{recursive:!0});const r=n.join(t,"src");e.existsSync(r)||e.mkdirSync(r,{recursive:!0});const a=n.join(r,"core");this.#k(o,a);const s=n.join(r,"default","blocks");e.existsSync(s)||e.mkdirSync(s,{recursive:!0})}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#t.templateDir;this.#i=c.configure(e,{watch:!1,dev:!0}),this.#v.njEnv=this.#i}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,n]=Object.entries(e)[0];if(n.hasOwnProperty("onerror")){const{onerror:o,...i}=n;e[t]={try:i,except:o}}if(e[t].hasOwnProperty("steps")){const n=e[t].steps;if(!Array.isArray(n))throw new Error("Steps must be an array.");e[t].steps=n.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),n={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#n}};t.forEach((t=>{const o={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:n,definition:e[t],index:n.childs.length,depth:n.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};n.childs.push(o)}));for await(const e of n.childs)await this.initNode({node:e});return n}async initNode({node:e}){const t={...this.#b,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await le.hits(t))await le.init(t);else if(await de.hits(t))await de.init(t);else if(await fe.hits(t))await fe.init(t);else if(await ce.hits(t))await ce.init(t);else if(await ue.hits(t))await ue.init(t);else if(await pe.hits(t))await pe.init(t);else if(await me.hits(t))await me.init(t);else if(await ge.hits(t))await ge.init(t);else if(await ye.hits(t))await ye.init(t);else if(await he.hits(t))await he.init(t);else if(await we.hits(t))await we.init(t);else if(await ve.hits(t))await ve.init(t);else if(await De.hits(t))await De.init(t);else if(await Pe.hits(t))await Pe.init(t);else if(await xe.hits(t))await xe.init(t);else if(await ke.hits(t))await ke.init(t);else if(await _e.hits(t))await _e.init(t);else if(await be.hits(t))await be.init(t);else{if(!await je.hits(t))throw new Error("Undefined step type.");await je.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const n of e.childs)await this.initNodeIndex({node:n,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const o=n.join(e.parent.indexKey,e.name);e.indexKey=o,t[o]=e;const i=[];let r=e;for(;r?.parent;)i.push(r.index),r=r.parent;i.reverse(),e.codeKey=`B_${i.join("_")}_${e.type}`,e.pathKey=`${i.join(".")}`,e.typeId=_(24);for await(const n of e.childs)await this.initNodeIndex({node:n,index:t})}async initNodeCalls({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"call"===o.type&&n.push(o)}return e.context.calls=n,n}async initNodeCallLibs({root:e}){const t=[],n=e.context.calls;for await(const e of n){const n=e.definition.call,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom",definition:e.definition},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.call,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"form"===o.type&&n.push(o)}return e.context.forms=n,n}async initNodeFormLibs({root:e}){const t=[],n=e.context.forms;for await(const e of n){const n=e.definition.form,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.form,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const n=e.filter((e=>"atom"===e.type));for(let e=0;e<n.length;e++){const o=n[e],i=await this.findAtomLibrary({url:o.name,libRef:o});o.atom=i;const r=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));r?.forEach((e=>{const n=t.find((t=>t.package===e.package));n?"string"==typeof e.path?(n.path||[]).some((t=>t===e.path))||(n.path=n.path||[],n.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(n.path||[]).some((t=>t===e))||(n.path=n.path||[],n.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e,libRef:t}){const o=J({url:e});if(!o)throw new Error(`Invalid package name: ${e}`);if(o.protocol||(o.protocol=this.#f),"ac:"===o.protocol){const t=o.pathname.split("/");if(1===t.length)return await B.first({where:{name:e,parent_id:this.#u.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await B.first({where:{name:t[0],parent_id:this.#u.env.ATOM_LIBRARIES_ID,type:"folder"}});return await B.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===o.protocol){const e=n.resolve(this.#t.projectSrcDir,`${o.pathname}.js`),t=[],i=await oe({file:e,recursive:!0}),r=!0===this.#n.doc.features.all_parsed_imports?i.all:i.required;for await(const e of r){if("npm"!==e.type)continue;if(t.find((t=>t.package===e.package)))continue;const n=await U({name:e.package,projectDir:this.#t.projectDir,setProgress:this.#v.setProgress});t.push({package:e.package,subpath:e.subpath,version:n.minorRange,type:"npm"})}return{name:o.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:t},protocol:o.protocol}}if("npm:"===o.protocol){const e=await U({name:o.pathname,projectDir:this.#t.projectDir,setProgress:this.#v.setProgress});return{name:o.pathname,doc:{type:"workflow.lib",subtype:"flow"===t?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:o.pathname,version:e.minorRange,type:"npm"}]},protocol:o.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=l(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const n=t.params[e];if("string"==typeof n)t.params[e]={key:n,hasDefault:!1};else{const o=Object.keys(n)[0];t.params[e]={key:o,hasDefault:!0,default:n[o]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#b,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:t}){await this.setProgress({message:"Creating external lib files."}),this.#n.typesDir="./types";const o=t.context.libs.filter((e=>"atom"===e.type));for(let t=0;t<o.length;t++){const i=o[t].atom,r=this.#t.projectDir;if("local:"===i.protocol){const t=n.resolve(this.#t.projectSrcDir,`${i.fileName||i.name}.js`),o=n.relative(`${this.#t.projectDir}/src/default/blocks`,t);if(!e.existsSync(t)){e.mkdirSync(n.dirname(t),{recursive:!0});let o="export default async (args)=>{\n";o+="}",e.writeFileSync(t,o,"utf8")}i.relativePath=o.split(n.sep).join("/"),this.#n.typesDir=`./types/${n.basename(r)}/src`}else if("npm:"===i.protocol)i.relativePath=i.name;else{const t=`${r}/src/libs/${i.id}.js`,o=i.doc.contents?.find((e=>"esm"===e.format))||i.doc;e.writeFileSync(n.normalize(t),o.content,"utf8")}}}async createEngine({root:t}){await this.setProgress({message:"Creating engine file."});const o=this.#t.templateDir,i=c.compile(e.readFileSync(n.resolve(o,"src/default/engine.js.njk"),"utf8"),this.#i).render({...t,ui:{package:"@flownet/react-app"}}),r=this.#t.projectDir,a=n.resolve(r,"src/default/index.js");e.writeFileSync(a,i,"utf8")}async createNodeTree({root:e}){await this.setProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:t}){const o=this.#t.templateDir,i=c.compile(e.readFileSync(n.resolve(o,"src/default/workflow.js.njk"),"utf8"),this.#i).render(t),r=this.#t.projectDir,a=n.resolve(r,`src/default/${t.codeKey}.js`);e.writeFileSync(a,i,"utf8");for await(const e of t.childs)await this.createType({node:e})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:t}){let o=this.#s[t.type];if(o)return o;const i=this.#t.templateDir;return o=c.compile(e.readFileSync(n.resolve(i,`src/default/blocks/${t.type}.js.njk`),"utf8"),this.#i),this.#s[t.type]=o,o}createStepFile({node:t}){const o=this.#t.projectDir,i=`${t.codeKey}.js`,r=n.resolve(o,`src/default/blocks/${i}`);e.writeFileSync(r,t.context.render,"utf8"),t.context.fileName=i,t.context.filePath=r}async transformExpression(e){let t=await this.transformValue(e);return t=JSON.stringify(t),t=this.replaceSpecialPattern(t),t}async transformValue(e){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=await this.transformValue(e[t]);else if(p(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++)e[t[n]]=await this.transformValue(e[t[n]])}else if("string"==typeof e){const t=await ie({expression:e});if(t){const{processor:n,statement:o}=t;switch(n){case"v":e=`$::v.${o}::`;break;case"e":e=`$::${o}::`;break;case"m":e=`$::closure.module['${o}']::`;break;case"f":e=`$::closure.form.${o}::`;break;case"for":e=`$::caller.for.${o}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const t="flow.yaml",i=`Creating ${t}`;await this.setProgress({message:i});const{content:r,...a}=this.#n.doc,s={content:o.stringify(a)},l=this.#t.templateDir,p=c.compile(e.readFileSync(n.resolve(l,`${t}.njk`),"utf8"),this.#i).render(s),d=this.#t.projectDir,f=n.resolve(d,`${t}`);e.writeFileSync(f,p,"utf8")}async createProjectMainYaml(){const t="flow.main.yaml",i=`Creating ${t}`;await this.setProgress({message:i});const r={content:o.stringify(this.#o)},a=this.#t.templateDir,s=c.compile(e.readFileSync(n.resolve(a,`${t}.njk`),"utf8"),this.#i).render(r),l=this.#t.projectDir,p=n.resolve(l,`${t}`);e.writeFileSync(p,s,"utf8")}async runPrettifier(){const e=this.#t.projectDir,t=i.exec("prettier --write .",{cwd:n.resolve(e,"src")});if(0!==t.code)throw new Error(t.stderr)}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&await n.save()}}else if(this.#n.id){const e=await B.list({type:"workflow.deploy",parent_id:this.#n.id});for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&(n=await B.update(n,{id:n.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:n}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const o=Object.keys(t.doc||{}),i=n||{};for(let e=0;e<o.length;e++){const n=t.doc[o[e]];n.name=o[e];const r=i.get(o[e]);await L({...this.#v,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:r})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#t.id)return;let o=await B.first({name:t.params.name,parent_id:this.#u.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await B.update(o,{id:o.id})):o=await B.create({parent_id:this.#u.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:n.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(ae.blue(t)),await this._cache_set(this.#d,{status:"IN_PROGRESS",message:t})}async build(){if(this.#w&&!this.#g)return await this.createNetwork();try{const t=this.#w?await Y({root:this.#l}):void 0;if(this.#g){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#w){const o=this.#t.project?.projectDir||this.#t.projectDir;e.writeFileSync(n.resolve(o,"./fnet/flow.bpmn"),t.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#l}),await this.createEngine({root:this.#l}),await this.createNodeTree({root:this.#l}),await this.createProjectYaml(),await this.createProjectMainYaml(),await N(this.#v),await I(this.#v),await C(this.#v),await O(this.#v),await E(this.#v),await A(this.#v),await $(this.#v),await T(this.#v),await M(this.#v),await F(this.#v),this.#y&&(await R(this.#v),await q(this.#v),this.#h&&await this.deploy())}await this._cache_set(this.#d,{status:"COMPLETED",data:{network:t}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await Y({root:this.#l});await this._cache_set(this.#d,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#d,{status:"FAILED",message:e.message||e}),e}}}}var oo=function(){if(Cn)return In;Cn=1;const u=process.cwd(),{spawn:m}=e;t({name:["redis"],dir:u,optional:!0});const g=n,y=o,h=i,w=r,v=a,b=s,x=t,k=c,j=l,_=p,D=no(),P=function(){if(On)return $n;On=1;const e=d,t=f;return $n=function({baseDir:n=__dirname}){let o=n;for(;o!==t.parse(o).root;){const n=t.join(o,"node_modules");if(e.existsSync(n))return n;o=t.dirname(o)}return null}}()({baseDir:__dirname}),S="win32"===process.platform?";":":";process.env.PATH=`${g.join(P,"/.bin")}${S}${process.env.PATH}`;let A=y(process.argv.slice(2)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"}).option("vscode",{type:"boolean",default:!0,alias:"vs"}).option("runtime",{type:"string",default:"node",choices:["node"]})),(async e=>{try{const t=g.resolve(P,"./@fnet/cli-project-flow/dist/template/project"),n=g.resolve(u,e.name);h.existsSync(n)||h.mkdirSync(n),await _({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0});let o=v.exec("fnet build",{cwd:n});if(0!==o.code)throw new Error("Failed to build project.");if(v.which("git")&&(o=v.exec("git init --initial-branch=main",{cwd:n}),0!==o.code))throw new Error("Failed to initialize git.");if(v.which("code")&&e.vscode&&(o=v.exec(`cd ${n} && code .`),0!==o.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=g.resolve(P,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd(),o=await E(e);if(e.update){if(await _({dir:t,outDir:n,context:{name:o.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0}),0!==v.exec("fnet build",{cwd:n}).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await E(e),n=new D(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await E({...e,mode:"all"}),n=new D(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await E({...e,mode:"file"}),n=new D(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function T(e,{name:t,bin:n,preArgs:o=[]}){return e.command(`${t||n} [commands..]`,`${n} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await E(e),{projectDir:i}=t,r=process.argv.slice(3);m(n,[...o,...r],{cwd:i,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function E(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:g.resolve(u,`./.output/${e.id}`),templateDir:g.resolve(P,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:g.resolve(P,"./@fnet/cli-project-common/dist/template/default"),coreDir:g.resolve(P,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=g.resolve(u,"flow.yaml");if(!h.existsSync(t))throw new Error("flow.yaml file not found in current directory.");const{raw:n,parsed:o}=await b({file:t,tags:e}),i=g.dirname(t),r=o.main||"flow.main.yaml";let a=g.resolve(i,r);if(!h.existsSync(a)&&(a=g.resolve(i,r+".yaml"),!h.existsSync(a)))throw new Error(`${r} file not found in ${a}.`);const{raw:s,parsed:c}=await b({file:a,tags:e}),l={workflowAtom:{doc:{...o,"content-type":"yaml",content:s}},projectDir:i,projectFilePath:t,projectFileContent:n,projectFileParsed:o,projectMainFilePath:a,projectMainFileContent:s,projectMainFileParsed:c};let p=g.resolve(i,"fnet/targets.yaml");if(!h.existsSync(p)&&(p=g.resolve(i,"flow.devops.yaml"),h.existsSync(p))){const e=g.resolve(i,"fnet");h.existsSync(e)||h.mkdirSync(e),h.copyFileSync(p,g.resolve(i,"fnet/targets.yaml")),h.unlinkSync(p)}if(h.existsSync(p)){const{raw:t,parsed:n}=await b({file:p,tags:e}),o=w.parseDocument(t);l.devops={filePath:p,fileContent:t,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{h.writeFileSync(l.devops.filePath,o.toString())}}}const d=g.resolve(i,"readme.md");if(h.existsSync(d)){const e=h.readFileSync(d,"utf8");l.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:g.resolve(P,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:g.resolve(P,"./@fnet/cli-project-common/dist/template/default"),coreDir:g.resolve(P,"./@fnet/cli-project-flow/dist/template/core"),projectDir:g.resolve(t.projectDir,"./.workspace"),projectSrcDir:g.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}return A=A.command("create-input <name>","Create an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await E(e),{project:n}=t,{projectDir:o,projectFileParsed:i}=n,r=i.input;if(!r)throw new Error("Config schema not found in project file.");const a=await k({schema:r,format:"yaml"}),s=g.resolve(o,".fnet");h.existsSync(s)||h.mkdirSync(s);const c=g.resolve(s,`${e.name}.fnet`);h.writeFileSync(c,a)}catch(e){console.error(e.message),process.exit(1)}})),A=function(e){return e.command("update-input <name>","Update an input config file",(e=>e.positional("name",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await E(e),{project:n}=t,{projectDir:o,projectFileParsed:i}=n,r=i.input;if(!r)throw new Error("Config schema not found in project file.");const a=g.resolve(o,".fnet"),s=g.resolve(a,`${e.name}.fnet`),c=await k({schema:r,format:"yaml",ref:s});h.existsSync(a)||h.mkdirSync(a),h.writeFileSync(s,c)}catch(e){console.error(e.message),process.exit(1)}}))}(A),A=T(A,{bin:"npm"}),A=T(A,{bin:"node"}),A=T(A,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),A=T(A,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),A=T(A,{name:"app",bin:"npm",preArgs:["run","app","--"]}),A=T(A,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),A=T(A,{bin:"npx"}),A=T(A,{bin:"cdk"}),A=T(A,{bin:"aws"}),A=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await E(e),{projectDir:o}=t,i=e.config,r=await x({name:i,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),a=r?.data?.env||void 0,s=e.command,c=process.argv.slice(5);m(s,[...n,...c],{cwd:o,stdio:"inherit",shell:!0,env:{...process.env,...a}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(A,{name:"with"}),A=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const t=await E(e),{project:n}=t,{projectFileParsed:o}=n,i=o.commands;if(!i)throw new Error("Commands not found in project file.");const r=i[e.group];if(!r)throw new Error(`Command group '${e.group}' not found in project file.`);await j({commands:r})}catch(e){console.error(e.message),process.exit(1)}}))}(A,{name:"run"}),A.demandCommand(1,"You need at least one command before moving on").help().argv,In}(),io=Y(oo);module.exports=io;
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e,t,i=require("@fnet/config"),s=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),c=require("path"),d=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),p=require("keycloak-connect"),f=require("qs");function w(){if(t)return e;t=1;const i=s,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=i.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}}var _,b,m,y,k={name:"@fnet/cli",version:"0.
|
|
2
|
+
"use strict";var e,t,i=require("@fnet/config"),s=require("redis"),r=require("@flownet/lib-is-redis-online"),n=require("express"),o=require("helmet"),l=require("cors"),c=require("path"),d=require("shelljs"),a=require("nanoid"),u=require("request-ip"),h=require("express-session"),p=require("keycloak-connect"),f=require("qs");function w(){if(t)return e;t=1;const i=s,n=r;return e=async()=>{if(!await n({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=i.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}}var _,b,m,y,k={name:"@fnet/cli",version:"0.43.0",files:["dist"],scripts:{start:"node src/index.js",build:"rollup --config --bundleConfigAsCjs",deploy:"npm install && npm run build && npm publish --access public",watch:"rollup --config --watch --sourcemap --bundleConfigAsCjs --environment DEVELOPMENT"},repository:{type:"git",url:"git+https://gitlab.com/fnetai/cli.git"},license:"MIT",dependencies:{"@flownet/lib-atom-api-js":"^0.1.10","@flownet/lib-bpmn-from-flow":"^0.1.8","@flownet/lib-is-redis-online":"^0.1.13","@flownet/lib-list-npm-versions":"^0.1.31","@flownet/lib-parse-imports-js":"^0.3.1","@flownet/lib-parse-node-url":"^0.1.16","@flownet/lib-pick-npm-versions":"^0.1.12","@flownet/lib-render-templates-dir":"^0.1.12","@flownet/lib-to-docker":"^0.3.1","@flownet/lib-to-electron":"^0.3.1","@flownet/lib-to-gitlab":"^0.1.21","@flownet/lib-to-ios-app":"^0.3.1","@flownet/lib-to-macos-app":"^0.3.1","@flownet/lib-to-nextjs":"^0.3.1","@flownet/lib-to-webos":"^0.3.1","@fnet/cli-project-common":"^0.1.26","@fnet/cli-project-flow":"^0.1.9","@fnet/cli-project-node":"^0.1.12","@fnet/config":"^0.2.8","@fnet/dir-zipper":"^0.1.5","@fnet/expression":"^0.1.16","@fnet/files-to-gcs":"^0.3.6","@fnet/object-from-schema":"^0.1.2","@fnet/shell":"^0.1.13","@fnet/yaml":"^0.1.12","@fnet/yargs-options-from-schema":"^0.1.1","@node-red/util":"^4.0.2",axios:"^1.5.0",chalk:"^4.1.2",cors:"^2.8.5",express:"^4.18.2","express-session":"^1.17.3","form-data":"^4.0.0","get-value":"^3.0.1",helmet:"^7.1.0",isobject:"^4.0.0","js-yaml":"^4.1.0","keycloak-connect":"^25.0.5","lodash.clonedeep":"^4.5.0","lodash.merge":"^4.6.2","lodash.omit":"^4.5.0","lodash.pick":"^3.1.0",minimist:"^1.2.8",nanoid:"^3.3.6",nunjucks:"^3.2.4",prettier:"^3.0.3",qs:"^6.11.2",redis:"^4.6.10","request-ip":"^3.3.0",semver:"^7.5.4",serve:"^14.2.3","set-value":"^4.1.0",shelljs:"^0.8.5",typescript:"^5.2.2",yaml:"^2.3.2",yargs:"^17.7.2"},bin:{fnet:"dist/builder/wf-cli.js",flib:"dist/builder/lib-cli.js",fsrv:"dist/index.js",fnode:"dist/builder/lib-cli.js"},devDependencies:{"@rollup/plugin-commonjs":"^26.0.1","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.1","@rollup/plugin-replace":"^5.0.2","@rollup/plugin-terser":"^0.4.3",rollup:"^4.9.6"}};const g=process.cwd(),j=i;(async function(){await j({name:["server","redis"],dir:g,optional:!0});const e=await w()();if(!e)throw new Error("Redis is offline.");const t=k,i=n,s=o,r=l,v=function(){if(b)return _;b=1;const e=n,t=c,i=d,{nanoid:s}=a;return _=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/workflow/builder/create",this._buildHandler.bind(this)),t.post("/workflow/builder/status",this._statusHandler.bind(this)),t.post("/workflow/builder/network",this._networkHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,i){await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_networkHandler(e,t){this._network({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const i=e.body.id;if(!i)throw new Error("Build Id is not defined.");const s="BUILD:"+i;this._cache_get(s).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=all`;return i.exec(o,{async:!0,cwd:this.#e}),{id:n}}async _network(e){const r=e.id;if(!r)throw new Error("Workflow Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/wf-cli.js")} build --id=${r} --buildId=${n} --mode=bpmn`;i.exec(o,{cwd:this.#e});const l="BUILD:"+n;return await this._cache_get(l)}}}(),E=function(){if(y)return m;y=1;const e=n,t=c,i=d,{nanoid:s}=a;return m=class{#e;constructor(e){this._keycloak=e.keycloak,this._router=this._initRouter(),this._redis_client=e.redisClient,this._expire_ttl=3600,this._expire_ttl_short=300,this.#e=e.wdir}_initRouter(){let t=e.Router();return t.post("/library/builder/create",this._buildHandler.bind(this)),t.post("/library/builder/status",this._statusHandler.bind(this)),t}join(e,t){t.use(e,this._router)}async _cache_set(e,t,i){await this._redis_client.SETEX(e,i||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async _cache_get(e){const t=await this._redis_client.GET(e).catch(console.error);return JSON.parse(t)}_buildHandler(e,t){this._build({...e.body}).then((e=>{t.status(200).send(e)})).catch((e=>{t.status(500).send()}))}_statusHandler(e,t){try{const i=e.body.id;if(!i)throw new Error("Build Id is not defined.");const s="BUILD:"+i;this._cache_get(s).then((e=>{t.send(e)})).catch((e=>{t.status(500).send()}))}catch(e){t.status(500).send()}}async _build(e){const r=e.id;if(!r)throw new Error("Library Id is not defined.");const n=s(24),o=`node ${t.resolve(__dirname,"builder/lib-cli.js")} build --id=${r} --buildId=${n} --mode=all}`;return i.exec(o,{async:!0,cwd:this.#e}),{id:n}}}}(),x=u,q=h,S=new(0,q.MemoryStore),I=new p({store:S}),R=i(),T=f;R.set("query parser",(function(e){return T.parse(e,{depth:12})})),R.use(q({secret:process.env.SESSION_SECRET,resave:!1,saveUninitialized:!0,store:S})),R.use(r()),R.use(s()),R.use(i.json({limit:"1024kb"})),R.get("/healthz",(function(e,t){t.sendStatus(200)})),R.use(x.mw()),R.use(I.middleware()),new v({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),new E({keycloak:I,wdir:g,redisClient:e}).join("/v1",R),R.listen(process.env.HTTP_PORT||8080),console.log(`[${t.version}] ${t.name} started.`)})().catch((e=>{console.error(e.message),process.exit(1)})),module.exports={};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
$schema: "https://json-schema.org/draft/2020-12/schema"
|
|
2
|
+
type: object
|
|
3
|
+
properties:
|
|
4
|
+
env:
|
|
5
|
+
type: object
|
|
6
|
+
description: "Environment configuration"
|
|
7
|
+
properties:
|
|
8
|
+
NPM_TOKEN:
|
|
9
|
+
type: string
|
|
10
|
+
description: "NPM token"
|
|
11
|
+
required:
|
|
12
|
+
- NPM_TOKEN
|
|
13
|
+
required:
|
|
14
|
+
- env
|
package/package.json
CHANGED
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@fnet/cli",
|
|
3
|
-
"version": "0.74.
|
|
4
|
-
"files": [
|
|
5
|
-
"dist"
|
|
6
|
-
],
|
|
7
|
-
"description": "CLI for Flownet",
|
|
8
|
-
"author": "Gultekin Boyraz <gultekinboyraz@gmail.com>",
|
|
9
|
-
"scripts": {
|
|
10
|
-
"build": "rollup --config --bundleConfigAsCjs",
|
|
11
|
-
"deploy": "npm install && npm run build && npm publish --access public",
|
|
12
|
-
"watch": "rollup --config --watch --sourcemap --bundleConfigAsCjs --environment DEVELOPMENT"
|
|
13
|
-
},
|
|
14
|
-
"repository": {
|
|
15
|
-
"type": "git",
|
|
16
|
-
"url": "git+https://gitlab.com/fnetai/cli.git"
|
|
17
|
-
},
|
|
18
|
-
"license": "MIT",
|
|
19
|
-
"dependencies": {
|
|
20
|
-
"@flownet/lib-atom-api-js": "^0.1.10",
|
|
21
|
-
"@flownet/lib-bpmn-from-flow": "^0.1.8",
|
|
22
|
-
"@flownet/lib-is-redis-online": "^0.1.13",
|
|
23
|
-
"@flownet/lib-parse-imports-js": "^0.3.1",
|
|
24
|
-
"@flownet/lib-parse-node-url": "^0.1.16",
|
|
25
|
-
"@flownet/lib-render-templates-dir": "^0.1.12",
|
|
26
|
-
"@flownet/lib-to-docker": "^0.3.14",
|
|
27
|
-
"@flownet/lib-to-electron": "^0.3.1",
|
|
28
|
-
"@flownet/lib-to-gitlab": "^0.1.21",
|
|
29
|
-
"@flownet/lib-to-ios-app": "^0.3.1",
|
|
30
|
-
"@flownet/lib-to-macos-app": "^0.3.1",
|
|
31
|
-
"@flownet/lib-to-nextjs": "^0.3.1",
|
|
32
|
-
"@flownet/lib-to-webos": "^0.3.1",
|
|
33
|
-
"@fnet/auto-conda-env": "^0.1.
|
|
34
|
-
"@fnet/cli-project-common": "^0.3.1",
|
|
35
|
-
"@fnet/cli-project-flow": "^0.2.13",
|
|
36
|
-
"@fnet/cli-project-node": "^0.3.12",
|
|
37
|
-
"@fnet/cli-project-schemas": "^0.1.1",
|
|
38
|
-
"@fnet/config": "^0.2.8",
|
|
39
|
-
"@fnet/dir-zipper": "^0.1.5",
|
|
40
|
-
"@fnet/expression": "^0.1.16",
|
|
41
|
-
"@fnet/files-to-gcs": "^0.3.6",
|
|
42
|
-
"@fnet/npm-list-versions": "^0.1.34",
|
|
43
|
-
"@fnet/npm-pick-versions": "^0.1.14",
|
|
44
|
-
"@fnet/object-from-schema": "^0.1.2",
|
|
45
|
-
"@fnet/prompt": "^0.2.10",
|
|
46
|
-
"@fnet/shell": "^0.1.13",
|
|
47
|
-
"@fnet/shell-flow": "^0.1.11",
|
|
48
|
-
"@fnet/to-pyip": "^0.1.4",
|
|
49
|
-
"@fnet/to-rust": "^0.1.2",
|
|
50
|
-
"@fnet/up-list-files": "^0.1.9",
|
|
51
|
-
"@fnet/yaml": "^0.1.23",
|
|
52
|
-
"@fnet/yargs-options-from-schema": "^0.1.1",
|
|
53
|
-
"@node-red/util": "^4.0.2",
|
|
54
|
-
"ajv": "^8.17.1",
|
|
55
|
-
"ajv-formats": "^3.0.1",
|
|
56
|
-
"axios": "^1.5.0",
|
|
57
|
-
"chalk": "^4.1.2",
|
|
58
|
-
"form-data": "^4.0.0",
|
|
59
|
-
"get-value": "^3.0.1",
|
|
60
|
-
"isobject": "^4.0.0",
|
|
61
|
-
"lodash.clonedeep": "^4.5.0",
|
|
62
|
-
"lodash.merge": "^4.6.2",
|
|
63
|
-
"lodash.omit": "^4.5.0",
|
|
64
|
-
"lodash.pick": "^3.1.0",
|
|
65
|
-
"nanoid": "^3.3.6",
|
|
66
|
-
"nunjucks": "^3.2.4",
|
|
67
|
-
"object-hash": "^3.0.0",
|
|
68
|
-
"prettier": "^3.0.3",
|
|
69
|
-
"redis": "^4.6.10",
|
|
70
|
-
"semver": "^7.5.4",
|
|
71
|
-
"set-value": "^4.1.0",
|
|
72
|
-
"shelljs": "^0.8.5",
|
|
73
|
-
"typescript": "^5.2.2",
|
|
74
|
-
"yaml": "^2.5.1",
|
|
75
|
-
"yargs": "^17.7.2"
|
|
76
|
-
},
|
|
77
|
-
"bin": {
|
|
78
|
-
"fnet": "dist/builder/wf-cli.js",
|
|
79
|
-
"fnode": "dist/builder/lib-cli.js"
|
|
80
|
-
},
|
|
81
|
-
"devDependencies": {
|
|
82
|
-
"@rollup/plugin-commonjs": "^28.0.1",
|
|
83
|
-
"@rollup/plugin-json": "^6.0.0",
|
|
84
|
-
"@rollup/plugin-node-resolve": "^15.2.1",
|
|
85
|
-
"@rollup/plugin-replace": "^6.0.1",
|
|
86
|
-
"@rollup/plugin-terser": "^0.4.3",
|
|
87
|
-
"rollup": "^4.9.6"
|
|
88
|
-
}
|
|
89
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@fnet/cli",
|
|
3
|
+
"version": "0.74.4",
|
|
4
|
+
"files": [
|
|
5
|
+
"dist"
|
|
6
|
+
],
|
|
7
|
+
"description": "CLI for Flownet",
|
|
8
|
+
"author": "Gultekin Boyraz <gultekinboyraz@gmail.com>",
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "rollup --config --bundleConfigAsCjs",
|
|
11
|
+
"deploy": "npm install && npm run build && npm publish --access public",
|
|
12
|
+
"watch": "rollup --config --watch --sourcemap --bundleConfigAsCjs --environment DEVELOPMENT"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://gitlab.com/fnetai/cli.git"
|
|
17
|
+
},
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@flownet/lib-atom-api-js": "^0.1.10",
|
|
21
|
+
"@flownet/lib-bpmn-from-flow": "^0.1.8",
|
|
22
|
+
"@flownet/lib-is-redis-online": "^0.1.13",
|
|
23
|
+
"@flownet/lib-parse-imports-js": "^0.3.1",
|
|
24
|
+
"@flownet/lib-parse-node-url": "^0.1.16",
|
|
25
|
+
"@flownet/lib-render-templates-dir": "^0.1.12",
|
|
26
|
+
"@flownet/lib-to-docker": "^0.3.14",
|
|
27
|
+
"@flownet/lib-to-electron": "^0.3.1",
|
|
28
|
+
"@flownet/lib-to-gitlab": "^0.1.21",
|
|
29
|
+
"@flownet/lib-to-ios-app": "^0.3.1",
|
|
30
|
+
"@flownet/lib-to-macos-app": "^0.3.1",
|
|
31
|
+
"@flownet/lib-to-nextjs": "^0.3.1",
|
|
32
|
+
"@flownet/lib-to-webos": "^0.3.1",
|
|
33
|
+
"@fnet/auto-conda-env": "^0.1.17",
|
|
34
|
+
"@fnet/cli-project-common": "^0.3.1",
|
|
35
|
+
"@fnet/cli-project-flow": "^0.2.13",
|
|
36
|
+
"@fnet/cli-project-node": "^0.3.12",
|
|
37
|
+
"@fnet/cli-project-schemas": "^0.1.1",
|
|
38
|
+
"@fnet/config": "^0.2.8",
|
|
39
|
+
"@fnet/dir-zipper": "^0.1.5",
|
|
40
|
+
"@fnet/expression": "^0.1.16",
|
|
41
|
+
"@fnet/files-to-gcs": "^0.3.6",
|
|
42
|
+
"@fnet/npm-list-versions": "^0.1.34",
|
|
43
|
+
"@fnet/npm-pick-versions": "^0.1.14",
|
|
44
|
+
"@fnet/object-from-schema": "^0.1.2",
|
|
45
|
+
"@fnet/prompt": "^0.2.10",
|
|
46
|
+
"@fnet/shell": "^0.1.13",
|
|
47
|
+
"@fnet/shell-flow": "^0.1.11",
|
|
48
|
+
"@fnet/to-pyip": "^0.1.4",
|
|
49
|
+
"@fnet/to-rust": "^0.1.2",
|
|
50
|
+
"@fnet/up-list-files": "^0.1.9",
|
|
51
|
+
"@fnet/yaml": "^0.1.23",
|
|
52
|
+
"@fnet/yargs-options-from-schema": "^0.1.1",
|
|
53
|
+
"@node-red/util": "^4.0.2",
|
|
54
|
+
"ajv": "^8.17.1",
|
|
55
|
+
"ajv-formats": "^3.0.1",
|
|
56
|
+
"axios": "^1.5.0",
|
|
57
|
+
"chalk": "^4.1.2",
|
|
58
|
+
"form-data": "^4.0.0",
|
|
59
|
+
"get-value": "^3.0.1",
|
|
60
|
+
"isobject": "^4.0.0",
|
|
61
|
+
"lodash.clonedeep": "^4.5.0",
|
|
62
|
+
"lodash.merge": "^4.6.2",
|
|
63
|
+
"lodash.omit": "^4.5.0",
|
|
64
|
+
"lodash.pick": "^3.1.0",
|
|
65
|
+
"nanoid": "^3.3.6",
|
|
66
|
+
"nunjucks": "^3.2.4",
|
|
67
|
+
"object-hash": "^3.0.0",
|
|
68
|
+
"prettier": "^3.0.3",
|
|
69
|
+
"redis": "^4.6.10",
|
|
70
|
+
"semver": "^7.5.4",
|
|
71
|
+
"set-value": "^4.1.0",
|
|
72
|
+
"shelljs": "^0.8.5",
|
|
73
|
+
"typescript": "^5.2.2",
|
|
74
|
+
"yaml": "^2.5.1",
|
|
75
|
+
"yargs": "^17.7.2"
|
|
76
|
+
},
|
|
77
|
+
"bin": {
|
|
78
|
+
"fnet": "dist/builder/wf-cli.js",
|
|
79
|
+
"fnode": "dist/builder/lib-cli.js"
|
|
80
|
+
},
|
|
81
|
+
"devDependencies": {
|
|
82
|
+
"@rollup/plugin-commonjs": "^28.0.1",
|
|
83
|
+
"@rollup/plugin-json": "^6.0.0",
|
|
84
|
+
"@rollup/plugin-node-resolve": "^15.2.1",
|
|
85
|
+
"@rollup/plugin-replace": "^6.0.1",
|
|
86
|
+
"@rollup/plugin-terser": "^0.4.3",
|
|
87
|
+
"rollup": "^4.9.6"
|
|
88
|
+
}
|
|
89
|
+
}
|
package/readme.md
CHANGED
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
# :warning: Warning
|
|
2
|
-
|
|
3
|
-
This tool is in its early stages of development. Changes in its usage are highly likely. Please use with caution.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
# @fnet/cli: Flow Node & Flow Project Setup Guide
|
|
7
|
-
|
|
8
|
-
## Overview
|
|
9
|
-
|
|
10
|
-
The `@fnet/cli` is a command-line interface tool designed to facilitate the development and deployment of flow-based projects within the fnet ecosystem. It simplifies the processes of creating, managing, and deploying flow-based projects, acting as a bridge between developers and the fnet platform.
|
|
11
|
-
|
|
12
|
-
## Prerequisites
|
|
13
|
-
|
|
14
|
-
Ensure you have `@fnet/cli` installed globally:
|
|
15
|
-
```bash
|
|
16
|
-
npm i @fnet/cli -g
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
Upon installation, two binary commands become available: `fnet` (for flow projects) and `fnode` (for flow node projects).
|
|
20
|
-
|
|
21
|
-
## Identifying Project Type
|
|
22
|
-
|
|
23
|
-
- Flow Node Project: Presence of `node.yaml`. Use `fnode` commands.
|
|
24
|
-
- Flow Project: Presence of `flow.yaml`. Use `fnet` commands.
|
|
25
|
-
|
|
26
|
-
## Building the Project
|
|
27
|
-
|
|
28
|
-
For Flow Node:
|
|
29
|
-
```bash
|
|
30
|
-
fnode build
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
For Flow:
|
|
34
|
-
```bash
|
|
35
|
-
fnet build
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Both commands generate a `.workspace` directory with files and configurations for debugging, building, and deploying.
|
|
39
|
-
|
|
40
|
-
## Watching the Project (Development Mode)
|
|
41
|
-
|
|
42
|
-
For Flow Node:
|
|
43
|
-
```bash
|
|
44
|
-
fnode watch
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
For Flow:
|
|
48
|
-
```bash
|
|
49
|
-
fnet watch
|
|
1
|
+
# :warning: Warning
|
|
2
|
+
|
|
3
|
+
This tool is in its early stages of development. Changes in its usage are highly likely. Please use with caution.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# @fnet/cli: Flow Node & Flow Project Setup Guide
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
The `@fnet/cli` is a command-line interface tool designed to facilitate the development and deployment of flow-based projects within the fnet ecosystem. It simplifies the processes of creating, managing, and deploying flow-based projects, acting as a bridge between developers and the fnet platform.
|
|
11
|
+
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
Ensure you have `@fnet/cli` installed globally:
|
|
15
|
+
```bash
|
|
16
|
+
npm i @fnet/cli -g
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Upon installation, two binary commands become available: `fnet` (for flow projects) and `fnode` (for flow node projects).
|
|
20
|
+
|
|
21
|
+
## Identifying Project Type
|
|
22
|
+
|
|
23
|
+
- Flow Node Project: Presence of `node.yaml`. Use `fnode` commands.
|
|
24
|
+
- Flow Project: Presence of `flow.yaml`. Use `fnet` commands.
|
|
25
|
+
|
|
26
|
+
## Building the Project
|
|
27
|
+
|
|
28
|
+
For Flow Node:
|
|
29
|
+
```bash
|
|
30
|
+
fnode build
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
For Flow:
|
|
34
|
+
```bash
|
|
35
|
+
fnet build
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Both commands generate a `.workspace` directory with files and configurations for debugging, building, and deploying.
|
|
39
|
+
|
|
40
|
+
## Watching the Project (Development Mode)
|
|
41
|
+
|
|
42
|
+
For Flow Node:
|
|
43
|
+
```bash
|
|
44
|
+
fnode watch
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
For Flow:
|
|
48
|
+
```bash
|
|
49
|
+
fnet watch
|
|
50
50
|
```
|