@fnet/cli 0.98.1 → 0.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e=require("child_process"),t=require("@fnet/prompt"),n=require("node:fs"),r=require("node:path"),o=require("@fnet/config"),a=require("path"),i=require("yargs/yargs"),s=require("fs"),c=require("yaml"),p=require("@fnet/shelljs"),l=require("os"),d=require("@fnet/yaml"),u=require("@fnet/object-from-schema"),f=require("@fnet/shell-flow"),m=require("@flownet/lib-render-templates-dir"),g=require("node:os"),y=require("nunjucks"),h=require("redis"),w=require("@flownet/lib-is-redis-online"),v=require("node:crypto"),b=require("@flownet/lib-atom-api-js"),j=require("lodash.merge"),_=require("@flownet/lib-parse-imports-js"),k=require("@fnet/npm-list-versions"),D=require("@fnet/npm-pick-versions"),x=require("object-hash"),S=require("ajv/dist/2020.js"),P=require("ajv/dist/standalone/index.js"),A=require("ajv-formats"),E=require("@fnet/auto-conda-env"),$=require("semver"),T=require("@fnet/up-list-files"),O=require("@node-red/util"),I=require("@flownet/lib-to-ios-app"),C=require("lodash.clonedeep"),M=require("@flownet/lib-to-macos-app"),R=require("@flownet/lib-to-electron"),F=require("@flownet/lib-to-webos"),N=require("@flownet/lib-to-nextjs"),q=require("@flownet/lib-to-docker"),L=require("form-data"),U=require("@fnet/to-rust"),J=require("@fnet/to-pyip"),z=require("@flownet/lib-parse-node-url"),B=require("@fnet/list-files"),H=require("chalk");function W(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function K(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var t=e.default;if("function"==typeof t){var n=function e(){return this instanceof e?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach((function(t){var r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:function(){return e[t]}})})),n}var G,X,Y,V,Z,Q,ee,te,ne,re,oe,ae,ie,se,ce,pe,le,de,ue,fe,me,ge,ye,he,we,ve,be,je,_e,ke,De,xe,Se,Pe,Ae,Ee,$e,Te,Oe,Ie,Ce,Me,Re,Fe,Ne,qe,Le,Ue,Je,ze,Be,He,We,Ke,Ge,Xe,Ye,Ve,Ze,Qe,et,tt,nt,rt,ot,at,it,st,ct,pt,lt,dt,ut,ft,mt,gt,yt,ht,wt,vt,bt,jt,_t,kt,Dt,xt,St,Pt,At,Et,$t,Tt,Ot,It,Ct,Mt,Rt,Ft,Nt,qt,Lt,Ut,Jt,zt,Bt,Ht,Wt,Kt,Gt,Xt,Yt,Vt={},Zt=K(Object.freeze({__proto__:null,default:e=>{const t=process.env.PATH||"",o="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],a=t.split(r.delimiter);for(const t of a)for(const a of o){const o=r.join(t,"win32"===process.platform?e+a:e);if(n.existsSync(o))return o}return null}}));function Qt(){if(Q)return Z;Q=1;const e=j;return Z=({feature:t,features:n,packageDevDependencies:r})=>{const{name:o,packages:a,options:i,extraCheck:s,explicit:c}=t,p=`${o}_enabled`,l=n.rollup_output||{},d=Object.keys(l);let u=i||{};const f=n[o]?.options;f&&(u=e(u,f));const m=!n[o]||!1===n[o]?.enabled;d.forEach((e=>{const t=n.rollup_output[e];if(t){if(Reflect.has(t,o)){if(m||!t[o]||!1===t[o]?.enabled)return void delete t[o];!0===t[o]&&(t[o]={enabled:!0,options:u})}else{if(m||c||!1===n[p])return;t[o]={enabled:!0}}t[o]=t[o]||{},t[o].options={...u,...t[o].options}}}));let g=d.some((e=>!0===n.rollup_output[e][o]?.enabled));s&&(g=s()&&g),n[p]=g,g&&a.forEach((e=>r.push({package:e[0],version:e[1]})))}}function en(){if(Pe)return Se;Pe=1;const e=j,t=n,o=r,a=_,i=function(){if(te)return ee;te=1;const e=Qt();return ee=t=>{const{atom:n,packageDevDependencies:r}=t,o=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:o,packageDevDependencies:r})},ee}(),s=function(){if(re)return ne;re=1;const e=Qt();return ne=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:o,packageDevDependencies:r})},ne}(),c=function(){if(ae)return oe;ae=1;const e=Qt();return oe=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:o,packageDevDependencies:r})},oe}(),p=function(){if(se)return ie;se=1;const e=Qt();return ie=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:o,packageDevDependencies:r})},ie}(),l=function(){if(pe)return ce;pe=1;const e=Qt();return ce=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:o,packageDevDependencies:r})},ce}(),d=function(){if(de)return le;de=1;const e=Qt();return le=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:o,packageDevDependencies:r})},le}(),u=function(){if(fe)return ue;fe=1;const e=Qt();return ue=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:r})},ue}(),f=function(){if(ge)return me;ge=1;const e=Qt();return me=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:r})},me}(),m=function(){if(he)return ye;he=1;const e=Qt();return ye=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:r})},ye}(),g=function(){if(ve)return we;ve=1;const e=Qt();return we=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:o,packageDevDependencies:r})},we}(),y=function(){if(je)return be;je=1;const e=Qt();return be=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:o,packageDevDependencies:r})},be}(),h=function(){if(ke)return _e;ke=1;const e=Qt();return _e=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features,a={};!0===o.app?.enabled&&(a.targets=a.targets||[],a.targets.push({src:"./src/app/index.html",dest:o.app.dir}),Reflect.has(o.app,"copy")||Reflect.has(o,"copy")||(o.copy=!0)),e({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:a},features:o,packageDevDependencies:r})},_e}(),w=function(){if(xe)return De;xe=1;const e=Qt();return De=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features,a=o.css&&!1!==o.css.enabled;let i=[];a&&(i.push(["rollup-plugin-postcss","^4"]),i.push(["sass","^1.66"]),(o.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:o,packageDevDependencies:r})},De}();function v({dir:e,name:n="index"}){let r=o.resolve(e,`./${n}.tsx`);if(t.existsSync(r)||(r=o.resolve(e,`./${n}.ts`)),t.existsSync(r)||(r=o.resolve(e,`./${n}.jsx`)),t.existsSync(r)||(r=o.resolve(e,`./${n}.js`)),!t.existsSync(r))return{};const a=r,i=o.extname(r);return{file:a,ext:i,ts:".ts"===i||".tsx"===i,name:n}}return Se=async t=>{const{atom:n,context:r,setProgress:b}=t;b("Initializing features..."),n.doc.features=n.doc.features||{};const j=n.doc.features;j.project=j.project||{},j.project.format=j.project.format||j.project_format||"esm",j.project_format=j.project.format,j.dts_enabled=!0===j.dts||void 0!==j.dts&&!1!==j.dts;const _=o.resolve(r.project.projectDir),k=v({dir:o.resolve(_,"./app")});if(k.file){b("Parsing app entry imports...");let e=await a({file:k.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));j.app_uses_jsx=t,j.app_has_entry=!0,e=await a({file:k.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),j.app_entry_uses_jsx=t,j.app_entry_is_ts=k.ts,j.app_entry_ext=k.ext}const D=v({dir:o.resolve(_,"./cli")});if(D.file){b("Parsing cli entry imports...");let e=await a({file:D.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));j.cli_uses_jsx=t,j.cli_has_entry=!0,e=await a({file:D.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),j.cli_entry_uses_jsx=t,j.cli_entry_is_ts=D.ts,j.cli_entry_ext=D.ext}if("workflow.lib"===n.type){const e=v({dir:o.resolve(_,"./src")});if(e.file){b("Parsing src entry imports...");let t=await a({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));j.src_uses_jsx=n,j.src_has_entry=!0,t=await a({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),j.src_entry_uses_jsx=n,j.src_entry_is_ts=e.ts,j.src_entry_ext=e.ext}}const x=Reflect.has(j,"app_entry_uses_jsx")?!0===j.app_entry_uses_jsx:!0===j.src_entry_uses_jsx,S=Reflect.has(j,"cli_entry_uses_jsx")?!0===j.cli_entry_uses_jsx:!0===j.src_entry_uses_jsx;j.form_enabled=x||S||!0===j.form||!0===j.form?.enabled,j.multiple_enabled=j.multiple_enabled||!0===j.multiple||!0===j.multiple?.enabled,!1===j.app?j.app={enabled:!1}:!0===j.app?j.app={enabled:!0,extend:!0===j.app_has_entry,export:!0,react:x}:j.app={enabled:!0,extend:!0===j.app_has_entry,export:!0,react:x,...j.app||{}},j.app.enabled=!0===j.app.enabled&&(!0===n.doc.features.form_enabled||!0===j.app.extend||!0===j.app.enabled),j.app.format=j.app.format||"esm",j.app.folder=j.app.folder||j.app.format||"default",!1===j.cli?j.cli={enabled:!1}:!0===j.cli?j.cli={enabled:!0,extend:!0===j.cli_has_entry,export:!0,react:S}:j.cli={enabled:!0,extend:!0===j.cli_has_entry,export:!0,react:S,...j.cli||{}},j.cli.enabled=!0===j.cli.enabled&&(!1===n.doc.features.form_enabled||!0===j.cli.extend||!0===j.cli.enabled),j.cli.format=j.cli.format||"esm",j.cli.folder=j.cli.folder||j.cli.folder||"esm",j.cli.node_options=j.cli.node?.options||j.cli.node_options||"",j.json=j.cli.enabled||j.json;const P={cjs:{format:"cjs",context:j.form_enabled?"window":"global",babel:!0===j.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==j.cjs,copy:!1},esm:{format:"esm",context:j.form_enabled?"window":"global",babel:!0===j.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==j.esm,copy:!0},iife:{format:"iife",context:j.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===j.iife,terser:!0,copy:!1}};!0===j.webos&&(P.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===j.electron&&(P.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===j.nextjs&&(P.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===j.ios&&(P.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===j.macos&&(P.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===j.app.enabled&&(j.app.dir=`./dist/app/${j.app.folder}`,P.app={format:j.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:j.app.dir,terser:!0,output_exports:!1===j.app.export?"none":"auto",browsersync:!0}),!0===j.cli.enabled&&(j.cli.dir=`./dist/cli/${j.cli.folder}`,P.cli={format:j.cli.format,context:"global",babel:!0===j.src_uses_jsx||!0===j.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:j.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===j.cli.export?"none":"auto"});const A={server:".",startPath:`${o.normalize(j.app.dir||".")}`,files:[o.normalize("./dist/**/*")],cors:!0,open:!1};j.babel_options=e({targets:{browsers:"last 9 versions, not dead",node:"18"}},j.babel_options||j.babel?.options),j.browsersync_options=e(A,j.browsersync_options||j.browsersync?.options||{}),j.replace_options=e({},j.replace_options||j.replace?.options||{}),Reflect.has(j.browsersync_options,"proxy")&&delete j.browsersync_options.server,j.rollup=j.rollup||{},j.rollup_output=e(P,j.rollup_output||j.rollup?.output||{}),j.preact_enabled=!0===j.preact||j.preact&&!1!==j.preact?.enabled;let E=Object.keys(P);for(const t of E){const n=P[t];n&&(!1!==j.rollup[t]?(n.babel_options=n.babel_options||j.babel_options,n.browsersync_options=e(j.browsersync_options,n.browsersync_options),n.replace_options=e(j.replace_options,n.replace_options),j.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"),(j.form_enabled||j.babel)&&(n.babel=!0)):delete j.rollup_output[t])}E=Object.keys(j.rollup_output),j.babel_enabled=E.some((e=>!0===j.rollup_output[e].babel)),j.browser_enabled=E.some((e=>!0===j.rollup_output[e].babel)),j.browsersync_enabled=!1!==j.browsersync&&E.some((e=>!0===j.rollup_output[e].browsersync)),j.browsersync_enabled=j.browsersync_enabled&&j.app.enabled,j.dependency_auto_enabled=!1!==j.dependency_auto&&!1!==j.dependency_auto?.enabled,j.npm_install_flags=j.npm_install_flags||"",j.react_version=j.react_version||j.react?.version||18,w(t),h(t),y(t),g(t),m(t),u(t),f(t),d(t),l(t),p(t),c(t),i(t),s(t)},Se}function tn(){if(Te)return $e;Te=1;const e=k;return $e=async({atom:t,packageDependencies:n,packageDevDependencies:r,setProgress:o})=>{o("Initializing dependencies");const a=t.doc.dependencies||[];if(a.filter((e=>!e.dev)).forEach((e=>n.push(e))),a.filter((e=>e.dev)).forEach((e=>r.push(e))),"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";o("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:"@fnet/react-app",version:"^0.1"}),n.push({package:"@fnet/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:"^16"}),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 Ce;Me=1;const e=n,t=r,o=m;return Ce=async({atom:n,setProgress:r,context:a,packageDependencies:i})=>{if(!0!==n.doc.features.app.enabled)return;await r({message:"Creating app folder"});const s={atom:n,packageDependencies:i,ts:Date.now()},c=a.templateDir,p=t.resolve(a.projectDir,"src/app");e.existsSync(p)||e.mkdirSync(p,{recursive:!0});let l=["index.js.njk"];!1!==n.doc.features.app.html&&l.push("index.html.njk"),await o({pattern:l,dir:t.resolve(c,"src/app"),outDir:p,context:s})},Ce}function rn(){if(Fe)return Re;Fe=1;const e=D,t=x,o=n,a=r;return Re=async({projectDir:n,name:r,setProgress:i,count:s=1})=>{let c;const p=t(["npm-pick-versions",r,s]),l=a.join(n,".cache"),d=a.join(l,p+".json");return o.existsSync(d)?(i&&i(`Picking npm version of ${r} from cache ...`),c=JSON.parse(o.readFileSync(d,"utf8"))):(i&&i(`Picking npm version of ${r} ...`),c=await e({name:r,count:s}),o.mkdirSync(l,{recursive:!0}),o.writeFileSync(d,JSON.stringify(c),"utf8")),c}}function on(){if(qe)return Ne;qe=1;const e=y,t=n,o=r,a=_,i=rn();return Ne=async({atom:n,context:r,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&&n.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===n.doc.features.app.enabled&&u.push({file:o.resolve(r.projectDir,"src/app/index.js"),dev:!1!==n.doc.features.app.dev}),!0===n.doc.features.cli.enabled&&u.push({file:o.resolve(r.projectDir,"src/cli/index.js"),dev:!1!==n.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 o=(await a({file:n,recursive:!0})).all;for await(const t of o){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:r.projectDir,setProgress:p});(!0===e.dev?c:s).push({package:t.package,subpath:t.subpath,version:n.minorRange,type:"npm"})}}const f={atom:n,packageDependencies:s,packageDevDependencies:c},m=r.templateCommonDir,g=e.compile(t.readFileSync(o.resolve(m,"package.json.njk"),"utf8"),e.configure(m)).render(f),y=r.projectDir,h=o.resolve(y,"package.json");t.writeFileSync(h,g,"utf8");const w=o.resolve(r.project.projectDir,"fnet");if(t.existsSync(w)){const e=o.resolve(r.projectDir,"fnet");t.existsSync(e)||t.mkdirSync(e);const n=t.readdirSync(w);for(const r of n){const n=o.resolve(w,r);if(!t.lstatSync(n).isFile())continue;const a=o.resolve(e,r);t.copyFileSync(n,a)}}},Ne}function an(){if(Ue)return Le;Ue=1;const e=n,t=r,o=m;return Le=async({atom:n,setProgress:r,context:a,packageDependencies:i})=>{if(!0!==n.doc.features.cli.enabled)return;await r({message:"Creating cli."});const s={atom:n,packageDependencies:i},c=a.templateDir,p=t.resolve(a.projectDir,"src/cli");e.existsSync(p)||e.mkdirSync(p,{recursive:!0}),await o({pattern:["index.js.njk"],dir:t.resolve(c,"src/cli"),outDir:p,context:s})},Le}function sn(){if(He)return Be;He=1;const e=n,t=r,o=y,a=_;return Be=async({atom:n,setProgress:r,context:i,packageDependencies:s})=>{await r({message:"Creating rollup file."});const c={atom:n,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 a({file:p,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),d=n.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 f=i.templateCommonDir;let m=o.compile(e.readFileSync(t.resolve(f,"rollup.config.mjs.njk"),"utf8"),o.configure(f)).render(c);const g=i.projectDir;let y=t.resolve(g,"rollup.config.mjs");e.writeFileSync(y,m,"utf8")},Be}function cn(){if(Ke)return We;Ke=1;const e=n,t=r,o=y,a=S,i=P,s=A;return We=async({atom:n,setProgress:r,context:c,njEnv:p})=>{if(!0!==n.doc.features.cli.enabled)return;await r({message:"Creating yargs."});let l={};if(l=n.doc.input?n.doc.input:{type:"object",properties:{},required:[]},n.doc.features.cli.fargs&&!1!==n.doc.features.cli.fargs?.enabled){const e=n.doc.features.cli.fargs,t={type:"string",description:"Config name to load args",hidden:!1},r={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=r)}const d={options:l,imports:[],atom:n},u=c.templateDir,f=o.compile(e.readFileSync(t.resolve(u,"src/default/to.args.js.njk"),"utf8"),p).render(d),m=c.projectDir,g=t.resolve(m,"src/default/to.args.js");e.writeFileSync(g,f,"utf8");const y=new a({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});s(y);const h=y.compile(l),w=i(y,h);e.writeFileSync(t.resolve(m,"src/default/validate_input.js"),w,"utf8")},We}function pn(){if(Xe)return Ge;Xe=1;const e=n,t=r,o=y;return Ge=async({atom:n,setProgress:r,context:a,packageDependencies:i})=>{await r({message:"Creating .gitignore"});const s={atom:n,packageDependencies:i},c=a.templateCommonDir,p=o.compile(e.readFileSync(t.resolve(c,".gitignore.njk"),"utf8"),o.configure(c)).render(s),l=a.projectDir,d=t.resolve(l,".gitignore");e.writeFileSync(d,p,"utf8")},Ge}function ln(){if(Ve)return Ye;Ve=1;const e=n,t=r,o=y;return Ye=async({atom:n,setProgress:r,context:a,packageDependencies:i})=>{await r({message:"Creating tsconfig.json."});const s={atom:n,packageDependencies:i},c=a.templateCommonDir,p=o.compile(e.readFileSync(t.resolve(c,"tsconfig.json.njk"),"utf8"),o.configure(c)).render(s),l=a.projectDir,d=t.resolve(l,"tsconfig.json");e.writeFileSync(d,p,"utf8")},Ye}function dn(){if(Qe)return Ze;Qe=1;const e=y,t=n,o=r,a=d;return Ze=async({atom:n,context:r,setProgress:i,Atom:s})=>{const c="readme.md",p=`Creating ${c}`;if(await i({message:p}),r.project?.readme){const n=r.projectDir,i={content:r.project.readme.doc.content},s=o.resolve(r.project.projectDir,"fnet/how-to.md");if(t.existsSync(s)){const e=t.readFileSync(s,"utf8");i.howto=e}const p=o.resolve(r.project.projectDir,"fnet/input.yaml");if(t.existsSync(p)){const e=await a({file:p,tags:r.tags});i.input=e.content}const l=r.templateCommonDir,d=e.compile(t.readFileSync(o.resolve(l,`${c}.njk`),"utf8"),e.configure(l)).render(i),u=o.resolve(n,`${c}`);t.writeFileSync(u,d,"utf8")}else if(n.id){const a=await s.first({type:"wiki",parent_id:n.id});if(!a||"markdown"!==a.doc?.["content-type"])return;const{content:i,...p}=a.doc,l={content:i},d=r.templateCommonDir,u=e.compile(t.readFileSync(o.resolve(d,`${c}.njk`),"utf8"),e.configure(d)).render(l),f=r.projectDir,m=o.resolve(f,`${c}`);t.writeFileSync(m,u,"utf8")}},Ze}function un(){if(tt)return et;tt=1;const e=a,t=f;return et=async({setProgress:n,context:r})=>{const o=r.projectDir;await n({message:"Prettifiying source files."});let a=e.join("src","**","*");await t({commands:{steps:[`prettier --write ${a} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`],wdir:o}})}}function fn(){if(rt)return nt;rt=1;const e=p;return nt=async({atom:t,setProgress:n,context:r})=>{if(!t.doc.features.dts_enabled)return;const o=r.projectDir;await n({message:"Creating .d.ts"});if(0!==(await e("tsc",{cwd:o})).code)throw new Error("Couldnt create .d.ts files.")},nt}function mn(){if(at)return ot;at=1;const e=p,t=Zt;return ot=async({setProgress:n,atom:r,context:o})=>{const a=o.projectDir;await n({message:"Installing npm packages."});const i=t("bun")?"bun":"npm";if(0!==(await e(`${i} install ${r.doc.features.npm_install_flags}`,{cwd:a})).code)throw new Error("Couldnt install npm packages.")},ot}function gn(){if(st)return it;st=1;const e=r,t=E,n=m;return it=async r=>{const{setProgress:o,atom:a,context:i}=r;o({message:"Installing Python packages"});const s=i.projectDir,c=await t({pythonVersion:"3.12",packages:[{package:"fnet-import-parser",version:"0.1.9"}]}),{errors:p,result:l}=await c.runBin("fnet_import_parser",["--entry_file",e.join(s,"src","default","index.py")],{captureName:"result"});if(p)throw new Error(p.format());const d=JSON.parse(l.items[0].stdout),u=d.required["third-party"]?.map((e=>({package:e.metadata?.package||e.path,version:e.metadata?.version||void 0,channel:e.metadata?.channel||void 0})))||[],f=a.doc.dependencies||[];for(const e of u)f.some((t=>t.package===e.package))||f.push(e);const m=e.join(s,".conda"),g=await t({envDir:m,pythonVersion:a.doc.features.runtime.version||"3.12",packages:f});i.pythonEnv=g,r.packageDependencies=f;const y=a.doc.features.render?.dirs||[];for(const t of y)t.dir=e.resolve(s,t.dir),t.outDir=e.resolve(s,t.outDir),await n(t);let h={params:{}};h.params.package_name=a.doc.name,h.params.version="0.1.0",h.params.bin_name=a.doc.name,h.params.python_requires=a.doc.features.runtime.version||">=3.12",h.params.dependencies=f,h.params.scripts=JSON.stringify({cli:`PYTHONPATH='${e.join("src")}' '${e.relative(i.projectDir,g.pythonBin)}' '${e.join("src","cli","index.py")}'`}),await n({pattern:["setup.py.njk","package.json.njk","pyproject.toml.njk"],dir:i.templateDir,outDir:i.projectDir,context:h})},it}function yn(){if(pt)return ct;pt=1;const e=p;return ct=async({setProgress:t,context:n})=>{const r=n.projectDir;await t({message:"Building main project."});if(0!==(await e("npm run build",{cwd:r})).code)throw new Error("Couldnt build project.")}}function hn(){if(Ht)return Bt;Ht=1;const e=function(){if(dt)return lt;dt=1;const e=p,t=o;return lt=async({setProgress:n,context:r,deploymentProject:o,deploymentProjectTarget:a,buildId:i})=>{await n({message:"Deploying it as gitlab project."});const s=r.projectDir;let c="fnet-to-gitlab";const p=a.params.config||"gitlab",l=await t({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='${a.params.name}'`,c+=` --projectBranch='${a.params.branch||"main"}'`,c+=` --gitlabHost='${d.gitlabHost}'`,c+=` --gitlabToken='${d.gitlabToken}'`,c+=` --gitlabUsername='${d.gitlabUsername}'`,c+=` --gitlabUserEmail='${d.gitlabUserEmail}'`,!0!==a.dryRun&&(await e(c),o.isDirty=!0)}}(),t=function(){if(ft)return ut;ft=1;const e=n,t=r,a=$,i=p,s=o;return ut=async({setProgress:n,context:r,deploymentProject:o,deploymentProjectTarget:c,registerToPackageManager:p,yamlTarget:l})=>{await n({message:"Deploying it as gcs package."});const d=r.projectDir,u=t.resolve(d,"package.json"),f=e.readFileSync(u),m=JSON.parse(f);m.name=c.params.name,m.version=a.inc(c.version,"patch"),delete m.scripts,delete m.devDependencies,e.writeFileSync(u,JSON.stringify(m,null,"\t"));const{file:g,data:y}=await s({name:c.config||"gcs",dir:r.projectDir,tags:r.tags});let h="fnet-files-to-gcs";h+=` --projectId='${y.env.GCS_PROJECT_ID}'`,h+=` --bucketName='${y.env.GCS_BUCKET_NAME}'`,h+=` --keyFilename='${t.resolve(t.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(h),e.writeFileSync(u,f),!0!==c.dryRun&&(o.isDirty=!0,c.version=m.version,l.set("version",m.version),await p({target:c,packageJSON:m}))}}(),i=function(){if(gt)return mt;gt=1;const e=n,t=r,a=$,i=p,s=o,l=T,d=u,f=c,m=Zt;return mt=async({atom:n,setProgress:r,context:o,deploymentProject:c,deploymentProjectTarget:p,yamlTarget:u})=>{await r({message:"Deploying it as npm package."});const g=o.projectDir,y=t.resolve(g,"package.json"),h=e.readFileSync(y),w=JSON.parse(h);w.name=p.params.name,w.version=a.inc(p.version,"patch");const v=p.params.bin?.name||p.params.bin;!1!==p.params.bin?.enabled&&v&&"string"==typeof v&&(w.bin={[v]:"dist/cli/esm/index.js"}),delete w.scripts,delete w.devDependencies,w.scripts={serve:"npx serve ."},e.writeFileSync(y,JSON.stringify(w,null,"\t"));const b=p.config||"npm";let j=(await s({name:b,dir:o.projectDir,tags:o.tags,optional:!0}))?.data;if(!j){const n=l({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===n.length)throw new Error("Couldnt find schema to create npm config");const r=await d({schema:n[0],tags:o.tags}),a=o.project.projectDir,i=t.resolve(a,".fnet");e.existsSync(i)||e.mkdirSync(i),e.writeFileSync(t.resolve(i,`${b}.fnet`),f.stringify(r)),j=r}if(e.writeFileSync(t.resolve(g,".npmrc"),`//registry.npmjs.org/:_authToken=${j.env.NPM_TOKEN}`),!0===p.dryRun)return;const _=m("bun")?"bun":"npm";if(0!==(await i(`${_} publish --access public`,{cwd:g})).code)throw new Error("Couldnt publish to npm");e.writeFileSync(y,h),c.isDirty=!0,p.version=w.version,u.set("version",w.version)}}(),l=function(){if(ht)return yt;ht=1;const e=n,t=r,a=g,i=y,s=O,c=o;return yt=async({atom:n,setProgress:r,context:o,deploymentProject:p,deploymentProjectTarget:l,buildId:d,packageDependencies:u,njEnv:f})=>{await r({message:"Deploying it as node-red flow."});const m=o.projectDir,g=o.templateDir,y="workflow"===n.type?"WF":"LIB";let h;if("simple"===l.deploy.template)h={atom:n,packageDependencies:u,red:{tab:{id:l.deploy.id||s.util.generateId(),label:`${y}/${n.id?n.id:a.hostname()}/${n.name}/${l.deploy.name||l.deploy.template}`},function:{id:s.util.generateId(),name:n.doc.name,initialize:{content:e.readFileSync(t.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:n.doc.bundleName}},inject:{id:s.util.generateId(),...l.params?.inject,payload:"json"===l.params?.inject?.payloadType?`'${JSON.stringify(l.params?.inject?.payload)}'`:l.params?.inject?.payload},debug:{id:s.util.generateId()}}};else if("cronjob"===l.deploy.template){let r=l.params?.schedules?cloneDeep(l.params?.schedules):void 0;r?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),h={atom:n,packageDependencies:u,red:{tab:{id:l.deploy.id||s.util.generateId(),label:`${y}/${n.id?n.id:a.hostname()}/${l.deploy.name||l.deploy.template}`},function:{id:s.util.generateId(),name:n.doc.name,initialize:{content:e.readFileSync(t.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:n.doc.bundleName}},cronjob:{id:s.util.generateId(),schedules:r},debug:{id:s.util.generateId()}}}}else{if("http"!==l.deploy.template)return;h={atom:n,packageDependencies:u,red:{tab:{id:l.deploy.id||s.util.generateId(),label:`${y}/${n.id?n.id:a.hostname()}/${l.deploy.name||l.deploy.template}`},function:{id:s.util.generateId(),name:n.doc.name,initialize:{content:e.readFileSync(t.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:n.doc.bundleName}},httpin:{id:s.util.generateId(),method:l.params.method||"get",url:l.params.url},httpout:{id:s.util.generateId()},debug:{id:s.util.generateId()}}}}let w=i.compile(e.readFileSync(t.resolve(g,`deploy/node-red/${l.deploy.template}.yaml.njk`),"utf8"),f).render(h);if(e.writeFileSync(t.resolve(m,"node-red.yaml"),w),w=yaml.load(w),!0===l.dryRun)return;p.isDirty=!0;const v=(await c({name:o.redConfig||"red",dir:o.projectDir,tags:o.tags}))?.data,b=l.deploy.url||v.env.RED_URL,j={};if(!1!==l.deploy.auth&&(j.Authorization="Bearer "+atomAccessToken),l.deploy.id)if(!0===l.actions?.delete){const e=await fetch(`${b}/flow/${l.deploy.id}`,{method:"DELETE",headers:j});if(!e.ok)throw new Error(`Failed to delete flow: ${e.statusText}`);delete l.actions.delete,delete l.deploy.id,l.enabled=!1}else{const e=await fetch(`${b}/flow/${l.deploy.id}`,{method:"PUT",headers:{...j,"Content-Type":"application/json"},body:JSON.stringify(w)});if(!e.ok)throw new Error(`Failed to update flow: ${e.statusText}`)}else{const e=await fetch(`${b}/flow`,{method:"POST",headers:{...j,"Content-Type":"application/json"},body:JSON.stringify(w)});if(!e.ok)throw new Error(`Failed to create flow: ${e.statusText}`);const t=await e.json();l.deploy.id=t.id}},yt}(),d=function(){if(vt)return wt;vt=1;const e=s,t=a,n=o;return wt=async({atom:r,Atom:o,setProgress:a,context:i,packageDependencies:s,deploymentProject:c,deploymentProjectTarget:p})=>{await a({message:"Deploying it as workflow lib."});const l=(await n({name:"atom",dir:i.projectDir,tags:i.tags}))?.data;let d,u,f,m=p.deploy.name.split("/");if(1===m.length)u=l.env.ATOM_LIBRARIES_ID,f=p.deploy.name;else{if(2!==m.length)throw new Error("Wrong name path.");{const e=await o.first({where:{name:m[0],parent_id:l.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");u=e.id,f=m[1]}}if(!0===p.dryRun)return;if(c.isDirty=!0,p.deploy.id){if(d=await o.get({id:p.deploy.id}),!d)return}else{if(d=await o.create({parent_id:u,doc:{name:f,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(t.resolve(g,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:e.readFileSync(t.resolve(g,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:e.readFileSync(t.resolve(g,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],d.doc.name=f,d.doc.dependencies=s,"workflow.lib"===r.type?d.doc.subtype="library":"workflow"===r.type&&(d.doc.subtype="workflow"),d=await o.update(d,{id:d.id})}}(),f=function(){if(jt)return bt;jt=1;const e=o,t=I,n=C,r=$;return bt=async({atom:o,target:a,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as ios-app package."});const d=a?.config?await e({name:a.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(a.version||"0.1.0","patch");a.params.version=u,a.version=u,l.set("version",u);const f=n(a.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},bt}(),m=function(){if(kt)return _t;kt=1;const e=o,t=M,n=C,r=$;return _t=async({atom:o,target:a,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as macos-app package."});const d=a?.config?await e({name:a.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(a.version||"0.1.0","patch");a.params.version=u,a.version=u,l.set("version",u);const f=n(a.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},_t}(),h=function(){if(xt)return Dt;xt=1;const e=o,t=R,n=C,r=$;return Dt=async({atom:o,target:a,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as electron package."});const d=a?.config?await e({name:a.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(a.version||"0.1.0","patch");a.params.version=u,a.version=u,l.set("version",u);const f=n(a.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},Dt}(),w=function(){if(Pt)return St;Pt=1;const e=o,t=F,n=C,r=$;return St=async({atom:o,target:a,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as webos package."});const d=a?.config?await e({name:a.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(a.version||"0.1.0","patch");a.params.version=u,a.version=u,l.set("version",u);const f=n(a.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},St}(),v=function(){if(Et)return At;Et=1;const e=o,t=N,n=C,r=$;return At=async({atom:o,target:a,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as nextjs package."});const d=a?.config?await e({name:a.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(a.version||"0.1.0","patch");a.params.version=u,a.version=u,l.set("version",u);const f=n(a.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},At}(),b=function(){if(Tt)return $t;Tt=1;const e=o,t=q,n=C,r=$;return $t=async({atom:o,target:a,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as docker package."});const d=a?.config?await e({name:a.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(a.version||"0.1.0","patch");a.params.version=u,a.version=u,l.set("version",u);const f=n(a.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},$t}(),j=function(){if(It)return Ot;It=1;const e=n,t=r,a=$,i=p,s=o;return Ot=async({setProgress:n,context:r,deploymentProject:o,deploymentProjectTarget:c,yamlTarget:p})=>{await n({message:"Deploying it as fnet package."});const l=r.projectDir,d=t.resolve(l,"package.json"),u=e.readFileSync(d),f=JSON.parse(u);f.name=c.params.name,f.version=a.inc(c.version,"patch"),delete f.scripts,delete f.devDependencies,e.writeFileSync(d,JSON.stringify(f,null,"\t"));const{file:m,data:g}=await s({name:c.config||"fnet-package",dir:r.projectDir,tags:r.tags});if(!g.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${m}`);if(!g.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${m}`);if(!g.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${m}`);const y=`${g.env.ATOM_API_URL}/v1/auth/token`,h=g.env.ATOM_API_USERNAME,w=g.env.ATOM_API_PASSWORD,v=await fetch(y,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:h,password:w})});if(!v.ok)throw new Error(`Failed to fetch token: ${v.statusText}`);const b=await v.json(),j=b?.access_token;if(!j)throw new Error(`Invalid access_token from ${y}`);let _="fnet-files-to-gcs";if(_+=` --projectId='${g.env.GCS_PROJECT_ID}'`,_+=` --bucketName='${g.env.GCS_BUCKET_NAME}'`,_+=` --keyFilename='${t.resolve(t.dirname(m),g.env.GCS_UPLOADER_KEY_FILE)}'`,_+=` --dir='${l}'`,_+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",_+=` --destDir='${f.name}/${f.version}'`,_+=" --metadata.cacheControl='public, max-age=31536000, immutable'",g.env.DOMAIN&&(_+=` --domain='${g.env.DOMAIN}'`),!0!==c.dry_run&&!0!==c.params.dry_run||(_+=" --dryRun"),await i(_),e.writeFileSync(d,u),!0===c.dryRun)return;o.isDirty=!0,c.version=f.version,p.set("version",f.version);const k=`${g.env.ATOM_API_URL}/v1/service/fnet-package/publish`,D=await fetch(k,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${j}`},body:JSON.stringify({name:f.name,version:f.version,version_domain:g.env.DOMAIN,docs:c.params.docs,configs:c.params.configs})});if(!D.ok)throw new Error(`Failed to publish fnet package: ${D.statusText}`);const x=await D.json();if(x?.error)throw new Error("Failed to publish fnet package.")}}(),_=function(){if(Mt)return Ct;Mt=1;const e=$,t=o;return Ct=async({setProgress:n,context:r,deploymentProject:o,deploymentProjectTarget:a,yamlTarget:i})=>{await n({message:"Deploying it as fnet form."});const{file:s,data:c}=await t({name:a.config||"fnet-form",dir:r.projectDir,tags:r.tags});if(!c.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!c.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!c.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const p=`${c.env.ATOM_API_URL}/v1/auth/token`,l=c.env.ATOM_API_USERNAME,d=c.env.ATOM_API_PASSWORD,u=await fetch(p,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:l,password:d})});if(!u.ok)throw new Error(`Failed to fetch token: ${u.statusText}`);const f=await u.json(),m=f?.access_token;if(!m)throw new Error(`Invalid access_token from ${p}`);o.isDirty=!0;const g=e.inc(a.version,"patch");a.params.version=g,a.version=g,i.set("version",g);const y=`${c.env.ATOM_API_URL}/v1/service/fnet-form/publish`,h=await fetch(y,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`},body:JSON.stringify({name:a.params.name,version:a.params.version,docs:a.params.docs,configs:a.params.configs})});if(!h.ok)throw new Error(`Error publishing fnet form: ${h.statusText}`);const w=await h.json();if(w?.error)throw new Error("Error publishing fnet form.")}}(),k=function(){if(Ft)return Rt;Ft=1;const e=$,t=o,n=s,r=p,a=L;return Rt=async({setProgress:o,context:i,deploymentProject:s,deploymentProjectTarget:c,yamlTarget:p})=>{await o({message:"Deploying it as fnet flow."});const{file:l,data:d}=await t({name:c.config||"fnet-flow",dir:i.project.projectDir,tags:i.tags});if(!d.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!d.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!d.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const u=`${d.env.ATOM_API_URL}/v1/auth/token`,f=d.env.ATOM_API_USERNAME,m=d.env.ATOM_API_PASSWORD,g=await fetch(u,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:f,password:m})});if(!g.ok)throw new Error(`Failed to fetch token: ${g.statusText}`);const y=await g.json(),h=y?.access_token;if(!h)throw new Error(`Invalid access_token from ${u}`);s.isDirty=!0;const w=e.inc(c.version,"patch");c.params.version=w,c.version=w,p.set("version",w);const v=`${d.env.ATOM_API_URL}/v1/service/fnet-flow/publish`,b=await fetch(v,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`},body:JSON.stringify({name:c.params.name,version:c.params.version,docs:c.params.docs,configs:c.params.configs})});if(!b.ok)throw new Error(`Error publishing fnet flow: ${b.statusText}`);const j=await b.json();if(j?.error)throw new Error("Error publishing fnet flow.");const _=j?.upload.id;let k="fnet-dir-zipper";k+=` --sourceDir='${i.project.projectDir}'`,k+=" --pattern=**/*",k+=" --stdout_format=json";const D=await r(k);if(0!==D.code)throw new Error(D.stderr);const x=JSON.parse(D.stdout).path;let S=new a;S.append("file",n.createReadStream(x));const P=await fetch(`${d.env.ATOM_API_URL}/v1/service/upload/single/${_}`,{method:"POST",headers:{...S.getHeaders(),Authorization:`Bearer ${h}`},body:S});if(!P.ok)throw new Error(`Error uploading fnet flow: ${P.statusText}`);const A=await P.json();if(A?.error)throw new Error("Error uploading fnet flow.")}}(),D=function(){if(qt)return Nt;qt=1;const e=$,t=o,n=s,r=p,a=L;return Nt=async({setProgress:o,context:i,deploymentProject:s,deploymentProjectTarget:c,yamlTarget:p})=>{await o({message:"Deploying it as fnet node."});const{file:l,data:d}=await t({name:c.config||"fnet-node",dir:i.project.projectDir,tags:i.tags});if(!d.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!d.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!d.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const u=`${d.env.ATOM_API_URL}/v1/auth/token`,f=d.env.ATOM_API_USERNAME,m=d.env.ATOM_API_PASSWORD,g=await fetch(u,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:f,password:m})});if(!g.ok)throw new Error(`Failed to fetch token: ${g.statusText}`);const y=await g.json(),h=y?.access_token;if(!h)throw new Error(`Invalid access_token from ${u}`);s.isDirty=!0;const w=e.inc(c.version,"patch");c.params.version=w,c.version=w,p.set("version",w);const v=`${d.env.ATOM_API_URL}/v1/service/fnet-node/publish`,b=await fetch(v,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`},body:JSON.stringify({name:c.params.name,version:c.params.version,docs:c.params.docs,configs:c.params.configs})});if(!b.ok)throw new Error(`Error publishing fnet node: ${b.statusText}`);const j=await b.json();if(j?.error)throw new Error("Error publishing fnet node.");const _=j?.upload.id;let k="fnet-dir-zipper";k+=` --sourceDir='${i.project.projectDir}'`,k+=" --pattern=**/*",k+=" --stdout_format=json";const D=await r(k);if(0!==D.code)throw new Error(D.stderr);const x=JSON.parse(D.stdout).path;let S=new a;S.append("file",n.createReadStream(x));const P=await fetch(`${d.env.ATOM_API_URL}/v1/service/upload/single/${_}`,{method:"POST",headers:{...S.getHeaders(),Authorization:`Bearer ${h}`},body:S});if(!P.ok)throw new Error(`Error uploading fnet node: ${P.statusText}`);const A=await P.json();if(A?.error)throw new Error("Error uploading fnet node.")}}(),x=function(){if(Ut)return Lt;Ut=1;const e=o,t=U,n=C,r=$;return Lt=async({atom:o,target:a,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as Rust package."});const d=a?.config?await e({name:a.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(a.version||"0.1.0","patch");a.params.version=u,a.version=u,l.set("version",u);const f=n(a.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},Lt}(),S=function(){if(zt)return Jt;zt=1;const e=o,t=J,n=C,r=$;return Jt=async({atom:o,target:a,onProgress:i,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{i&&await i({message:"Deploying it as pypi package."});const d=a?.config?await e({name:a.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(a.version||"0.1.0","patch");a.params.version=u,a.version=u,l.set("version",u);const f=n(a.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},Jt}();return Bt=async n=>{const{atom:r,packageDependencies:o,context:a,deploymentProjectTarget:s,setProgress:c,deploymentProject:p,yamlTarget:u}=n;if(!0===s.enabled)if("lib"===s.type)await d({...n});else if("red"===s.type)await l({...n});else if("npm"===s.type)await i({...n});else if("gcs"===s.type)await t({...n});else if("gitlab"===s.type)await e({...n});else if("fnet-package"===s.type)await j({...n});else if("fnet-form"===s.type)await _({...n});else if("fnet-node"===s.type)await D({...n});else if("fnet-flow"===s.type)await k({...n});else{let e;if("nextjs"===s.type?e=v:"webos"===s.type?e=w:"electron"===s.type?e=h:"docker"===s.type?e=b:"ios"===s.type?e=f:"macos"===s.type?e=m:"rust"===s.type?e=x:"pypi"===s.type&&(e=S),!e)return;await e({atom:r,target:s,onProgress:c,projectDir:a.projectDir,dependencies:o,context:a,yamlTarget:u}),p.isDirty=!0}},Bt}function wn(){if(Kt)return Wt;Kt=1;const e=n,t=r,a=g,i=c,s=y,p=function(){if(X)return G;X=1;const e=h,t=w;return G=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}}(),{randomUUID:l}=v,d=function(){if(V)return Y;V=1;const{Api:e}=b;return Y=class{init({config:t,accessToken:n}){return new Promise(((r,o)=>{if(e.set_api_url(t.data.url),n)return e.set_req_token(n),void r(n);fetch(`${t.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(t.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((t=>{e.set_req_token(t.access_token),r(t.access_token)})).catch((t=>{e.set_req_token(),o(t)}))}))}}}(),u=en(),f=(Ee||(Ee=1,Ae=async e=>{const{atom:t,context:n,setProgress:r}=e;r("Initializing features..."),t.doc.features=t.doc.features||{};const o=t.doc.features;!1===o.cli?o.cli={enabled:!1}:(o.cli,o.cli={enabled:!0}),o.cli.enabled=!0===o.cli.enabled&&(!1===t.doc.features.form_enabled||!0===o.cli.extend||!0===o.cli.enabled)}),Ae),j=tn(),k=Ie?Oe:(Ie=1,Oe=async({atom:e,packageDependencies:t,packageDevDependencies:n,setProgress:r})=>{r("Initializing dependencies")}),D=nn(),x=on(),S=an(),P=function(){if(ze)return Je;ze=1;const e=n,t=r,o=m;return Je=async({atom:n,setProgress:r,context:a,packageDependencies:i})=>{if(!0!==n.doc.features.cli.enabled)return;await r({message:"Creating cli."});const s={atom:n,packageDependencies:i},c=a.templateDir,p=t.join(a.projectDir,"src","cli");e.existsSync(p)||e.mkdirSync(p,{recursive:!0}),await o({pattern:["index.py.njk","__init__.py.njk"],dir:t.join(c,"src","cli"),outDir:p,context:s})},Je}(),A=sn(),E=cn(),$=pn(),T=ln(),O=dn(),I=un(),C=fn(),M=mn(),R=gn(),F=yn(),N=rn(),q=hn(),{Atom:L}=b,U=z,J=o,W=_,K=B,Z=H;return Wt=class{#e;#t;#n;#r;#o;#a;#i;#s;#c;#p;#l;#d;#u;#f;#m;#g;#y;constructor(e){this.#e=new d,this.#t=e,this.#a=[],this.#i=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#a,packageDevDependencies:this.#i,setProgress:this.setProgress.bind(this),context:this.#t,Atom:L,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 L.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 n=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const r=K({dir:n,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 o=n;e.existsSync(o)||e.mkdirSync(o,{recursive:!0}),o=t.join(n,"src"),e.existsSync(o)||e.mkdirSync(o,{recursive:!0}),o=t.join(n,"src","default"),e.existsSync()||e.mkdirSync(o,{recursive:!0})}async initLibraryDirPython(){this.setProgress({message:"Initializing library directory."});const n=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const r=K({dir:n,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 o=n;e.existsSync(o)||e.mkdirSync(o,{recursive:!0}),o=t.join(n,"src"),e.existsSync(o)||e.mkdirSync(o,{recursive:!0}),o=t.join(n,"src","default");const i=this.#t.projectSrcDir;if(!e.existsSync(o))try{"win32"===a.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=s.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.#o=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#a})}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.#o=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],o=await this.findAtomLibrary({url:r.name});r.atom=o;const a=o.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));a?.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 n=U({url:e});if(!n)throw new Error(`Invalid package name: ${e}`);if(n.protocol||(n.protocol=this.#l),"ac:"===n.protocol){const t=n.pathname.split("/");if(1===t.length)return await L.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await L.first({where:{name:t[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await L.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===n.protocol){const e=this.#n;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const n=t.resolve(this.#t.projectSrcDir,"index.js"),r=await W({file:n,recursive:!0}),o=e.doc.dependencies,a=r.all;for await(const e of a){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await N({name:e.package,projectDir:this.#t.projectDir,setProgress:this.#y.setProgress});o.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:n}){await this.setProgress({message:"Creating external lib files."}),this.#n.typesDir="./types";const r=n.filter((e=>"atom"===e.type));for(let n=0;n<r.length;n++){const o=r[n].atom,a=this.#t.projectDir;if("local:"===o.protocol){const n=t.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),r=t.relative(t.join(this.#t.projectDir,"src","default"),n);if(!e.existsSync(n)){e.mkdirSync(t.dirname(n),{recursive:!0});let r="export default async (args)=>{\n";r+="}",e.writeFileSync(n,r,"utf8")}o.relativePath=r.split(t.sep).join("/"),this.#n.typesDir=`./types/${t.basename(a)}/src`}else{const n=t.join(a,"src","libs",`${o.id}.js`),r=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;e.writeFileSync(n,r.content,"utf8")}}}async createAtomLibFilesPython({libs:n}){await this.setProgress({message:"Creating external lib files."});const r=n.filter((e=>"atom"===e.type));for(let n=0;n<r.length;n++){const o=r[n].atom;if("local:"===o.protocol){const n=t.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.py`);if(!e.existsSync(n)){e.mkdirSync(t.dirname(n),{recursive:!0});let r="def default():\n";r+=' print("Hello world!")\n',e.writeFileSync(n,r,"utf8")}}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const n={libs:this.#o.filter((e=>"atom"===e.type)),libraryAtom:this.#n,atom:this.#n},r=this.#t.templateDir,o=s.compile(e.readFileSync(t.resolve(r,t.join("src","default","engine.js.njk")),"utf8"),this.#r).render(n),a=this.#t.projectDir,i=t.resolve(a,t.join("src","default","index.js"));e.writeFileSync(i,o,"utf8")}async createProjectYaml(){const n="node.yaml",r=`Creating ${n}`;await this.setProgress({message:r});const{content:o,...a}=this.#n.doc,c={content:i.stringify(a)},p=this.#t.templateDir,l=s.compile(e.readFileSync(t.resolve(p,`${n}.njk`),"utf8"),this.#r).render(c),d=this.#t.projectDir,u=t.resolve(d,`${n}`);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 L.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 L.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||{}),o=n||{};for(let e=0;e<r.length;e++){const n=t.doc[r[e]];n.name=r[e];const a=o.get(r[e]);await q({...this.#y,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:a})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#t.id)return;let r=await L.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});r?(r.doc.versions.splice(0,0,{v:n.version}),await L.update(r,{id:r.id})):r=await L.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(Z.blue(t)),await this._cache_set(this.#p,{status:"IN_PROGRESS",message:t})}async initNode(){await u(this.#y),await j(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initPython(){await f(this.#y),await k(this.#y),await this.initLibraryDirPython(),await this.initNunjucks(),await this.initLibsPython()}async nodeBuild(){this.#f&&(await this.createAtomLibFiles({libs:this.#o}),await this.createEngine(),await this.createProjectYaml(),await O(this.#y),await T(this.#y),await $(this.#y),await E(this.#y),await S(this.#y),await D(this.#y),await A(this.#y),await x(this.#y),await I(this.#y),await C(this.#y),this.#m&&(await M(this.#y),await F(this.#y),this.#g&&await this.deploy()))}async pythonBuild(){this.#f&&(await this.createAtomLibFilesPython({libs:this.#o}),await this.createProjectYaml(),await O(this.#y),await $(this.#y),await P(this.#y),this.#m&&(await R(this.#y),this.#g&&await this.deploy()))}async init(){this._redis_client=await p(),this.#c=this.#t.buildId||l(),this.#y.buildId=this.#c,this.#u=this.#t.mode,this.#f=["all","deploy","build","file"].includes(this.#u),this.#m=["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}}},Wt}var vn=function(){if(Yt)return Vt;Yt=1;const g=process.cwd(),{spawn:y}=e,h=t,w=Zt;o({name:["redis"],dir:g,optional:!0});const v=a,b=i,j=s,_=c,k=p,D=l,x=d,S=o,P=u,A=f,E=m,$=wn(),T=function(){if(Xt)return Gt;Xt=1;const e=n,t=r;return Gt=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}),O="win32"===process.platform?";":":";process.env.PATH=`${v.join(T,"/.bin")}${O}${process.env.PATH}`;let I=b(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=v.resolve(T,"@fnet/cli-project-node/dist/template/project"),n=v.resolve(g,e.name);j.existsSync(n)||j.mkdirSync(n),await E({dir:t,outDir:n,context:{name:e.name,runtime:e.runtime,platform:D.platform()},copyUnmatchedAlso:!0});let r=await k("fnode build",{cwd:n});if(0!==r.code)throw new Error("Failed to build project.");if(w("git")&&(r=await k("git init --initial-branch=main",{cwd:n}),0!==r.code))throw new Error("Failed to initialize git.");if(w("code")&&e.vscode&&(r=await k(`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=v.resolve(T,"@fnet/cli-project-node/dist/template/project"),n=process.cwd(),r=await R(e);if(e.update){if(await E({dir:t,outDir:n,context:{name:r.project.projectFileParsed.name,runtime:r.project.runtime.type,platform:D.platform()},copyUnmatchedAlso:!0}),0!==(await k("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 R(e),n=new $(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 R({...e,mode:"all"}),n=new $(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 R({...e,mode:"file"}),n=new $(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 C(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 R(e),{projectDir:o}=t,a=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,i=process.argv.slice(3).map(a);y(n,[...r,...i],{cwd:o,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}function M(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 o=await R(e),{projectDir:a}=o,i=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,s=process.argv.slice(3).map(i);n=v.join(a,".conda","bin",n||t);y(n,[...r,...s],{cwd:a,stdio:"inherit",shell:!0,env:{PYTHONPATH:a}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function R(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:v.resolve(T,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:v.resolve(T,"./@fnet/cli-project-common/dist/template/default"),projectDir:v.resolve(g,`./.output/${e.id}`),tags:e.ftag};{const t=await async function({tags:e}){const t=v.resolve(g,"node.yaml");if(!j.existsSync(t))throw new Error("node.yaml file not found in current directory.");const{raw:n,parsed:r}=await x({file:t,tags:e}),o=v.dirname(t);r.features=r.features||{};const a=r.features;a.runtime=a.runtime||{},a.runtime.type=a.runtime.type||"node","python"===a.runtime.type?a.runtime.template=a.runtime.template||"python":a.runtime.template=a.runtime.template||"default";const i={libraryAtom:{doc:{...r},fileName:"index"},projectDir:o,projectFilePath:t,projectFileContent:n,projectFileParsed:r,runtime:a.runtime};let s=v.resolve(o,"fnet/targets.yaml");if(!j.existsSync(s)&&(s=v.resolve(o,"node.devops.yaml"),j.existsSync(s))){const e=v.resolve(o,"fnet");j.existsSync(e)||j.mkdirSync(e),j.copyFileSync(s,v.resolve(o,"fnet/targets.yaml")),j.unlinkSync(s)}if(j.existsSync(s)){const{raw:t,parsed:n}=await x({file:s,tags:e}),r=_.parseDocument(t);i.devops={filePath:s,fileContent:t,yamlDocument:r,doc:{...n},type:"library.deploy",save:async()=>{j.writeFileSync(i.devops.filePath,r.toString())}}}const c=v.resolve(o,"readme.md");if(j.existsSync(c)){const e=j.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:v.resolve(T,`./@fnet/cli-project-node/dist/template/${t.runtime.template}`),templateCommonDir:v.resolve(T,`./@fnet/cli-project-common/dist/template/${t.runtime.template}`),projectDir:v.resolve(t.projectDir,"./.workspace"),projectSrcDir:v.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}return I=I.command("input [name]","Create or modify an input config file",(e=>e.positional("name",{type:"string",demandOption:!1}).help(!1).version(!1)),(async e=>{try{const t=await R(e),{project:n}=t,{projectDir:r,projectFileParsed:o}=n,a=o.input;if(!a)throw new Error("Config schema not found in project file.");if(!Reflect.has(e,"name")){const{inputName:t}=await h({type:"input",name:"inputName",message:"Input name:",initial:"dev"});e.name=t}const i=v.resolve(r,".fnet");j.existsSync(i)||j.mkdirSync(i);const s=v.resolve(i,`${e.name}.fnet`),c=j.existsSync(s),p=await P({schema:a,format:"yaml",ref:c?s:void 0});j.writeFileSync(s,p)}catch(e){console.error(e.message),process.exit(1)}})),I=C(I,{bin:"npm"}),I=C(I,{bin:"node"}),I=C(I,{bin:"bun"}),I=C(I,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),I=C(I,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),I=C(I,{name:"app",bin:"npm",preArgs:["run","app","--"]}),I=C(I,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),I=C(I,{bin:"npx"}),I=C(I,{bin:"cdk"}),I=C(I,{bin:"aws"}),I=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 R(e),{projectDir:r}=t,o=e.config,a=await S({name:o,dir:r,transferEnv:!1,optional:!0,tags:t.tags}),i=a?.data?.env||void 0,s=e.command,c=process.argv.slice(5);y(s,[...n,...c],{cwd:j.existsSync(r)?r:g,stdio:"inherit",shell:!0,env:{...process.env,...i}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(I,{name:"with"}),I=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 R(e),{project:n}=t,{projectFileParsed:r}=n,o=r.commands;if(!o)throw new Error("Commands not found in project file.");const a=o[e.group];if(!a)throw new Error(`Command group '${e.group}' not found in project file.`);await A({commands:a})}catch(e){console.error(e.message),process.exit(1)}}))}(I,{name:"run"}),I=M(I,{name:"python"}),I=M(I,{name:"python3"}),I=M(I,{name:"pip"}),I=M(I,{name:"pip3"}),I.demandCommand(1,"You need at least one command before moving on").help().argv,Vt}(),bn=W(vn);module.exports=bn;
2
+ "use strict";var e=require("child_process"),t=require("@fnet/prompt"),n=require("node:fs"),r=require("node:path"),o=require("@fnet/config"),i=require("path"),a=require("commander"),s=require("fs"),c=require("yaml"),p=require("@fnet/shelljs"),l=require("os"),d=require("@fnet/yaml"),u=require("@fnet/object-from-schema"),f=require("@fnet/shell-flow"),m=require("@flownet/lib-render-templates-dir"),g=require("node:os"),y=require("nunjucks"),h=require("redis"),w=require("@flownet/lib-is-redis-online"),v=require("node:crypto"),b=require("@flownet/lib-atom-api-js"),j=require("lodash.merge"),_=require("@flownet/lib-parse-imports-js"),k=require("@fnet/npm-list-versions"),D=require("@fnet/npm-pick-versions"),x=require("object-hash"),S=require("ajv/dist/2020.js"),P=require("ajv/dist/standalone/index.js"),A=require("ajv-formats"),E=require("@fnet/auto-conda-env"),$=require("semver"),T=require("@fnet/up-list-files"),O=require("@node-red/util"),I=require("@flownet/lib-to-ios-app"),C=require("lodash.clonedeep"),R=require("@flownet/lib-to-macos-app"),F=require("@flownet/lib-to-electron"),M=require("@flownet/lib-to-webos"),N=require("@flownet/lib-to-nextjs"),q=require("@flownet/lib-to-docker"),L=require("form-data"),U=require("@fnet/to-rust"),J=require("@fnet/to-pyip"),z=require("@flownet/lib-parse-node-url"),B=require("@fnet/list-files"),H=require("chalk");function W(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function K(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var t=e.default;if("function"==typeof t){var n=function e(){return this instanceof e?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach((function(t){var r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:function(){return e[t]}})})),n}var G,X,Y,V,Z,Q,ee,te,ne,re,oe,ie,ae,se,ce,pe,le,de,ue,fe,me,ge,ye,he,we,ve,be,je,_e,ke,De,xe,Se,Pe,Ae,Ee,$e,Te,Oe,Ie,Ce,Re,Fe,Me,Ne,qe,Le,Ue,Je,ze,Be,He,We,Ke,Ge,Xe,Ye,Ve,Ze,Qe,et,tt,nt,rt,ot,it,at,st,ct,pt,lt,dt,ut,ft,mt,gt,yt,ht,wt,vt,bt,jt,_t,kt,Dt,xt,St,Pt,At,Et,$t,Tt,Ot,It,Ct,Rt,Ft,Mt,Nt,qt,Lt,Ut,Jt,zt,Bt,Ht,Wt,Kt,Gt,Xt,Yt,Vt={},Zt=K(Object.freeze({__proto__:null,default:e=>{const t=process.env.PATH||"",o="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],i=t.split(r.delimiter);for(const t of i)for(const i of o){const o=r.join(t,"win32"===process.platform?e+i:e);if(n.existsSync(o))return o}return null}})),Qt={version:"0.99.0"};function en(){if(Q)return Z;Q=1;const e=j;return Z=({feature:t,features:n,packageDevDependencies:r})=>{const{name:o,packages:i,options:a,extraCheck:s,explicit:c}=t,p=`${o}_enabled`,l=n.rollup_output||{},d=Object.keys(l);let u=a||{};const f=n[o]?.options;f&&(u=e(u,f));const m=!n[o]||!1===n[o]?.enabled;d.forEach((e=>{const t=n.rollup_output[e];if(t){if(Reflect.has(t,o)){if(m||!t[o]||!1===t[o]?.enabled)return void delete t[o];!0===t[o]&&(t[o]={enabled:!0,options:u})}else{if(m||c||!1===n[p])return;t[o]={enabled:!0}}t[o]=t[o]||{},t[o].options={...u,...t[o].options}}}));let g=d.some((e=>!0===n.rollup_output[e][o]?.enabled));s&&(g=s()&&g),n[p]=g,g&&i.forEach((e=>r.push({package:e[0],version:e[1]})))}}function tn(){if(Pe)return Se;Pe=1;const e=j,t=n,o=r,i=_,a=function(){if(te)return ee;te=1;const e=en();return ee=t=>{const{atom:n,packageDevDependencies:r}=t,o=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:o,packageDevDependencies:r})},ee}(),s=function(){if(re)return ne;re=1;const e=en();return ne=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:o,packageDevDependencies:r})},ne}(),c=function(){if(ie)return oe;ie=1;const e=en();return oe=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:o,packageDevDependencies:r})},oe}(),p=function(){if(se)return ae;se=1;const e=en();return ae=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:o,packageDevDependencies:r})},ae}(),l=function(){if(pe)return ce;pe=1;const e=en();return ce=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:o,packageDevDependencies:r})},ce}(),d=function(){if(de)return le;de=1;const e=en();return le=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:o,packageDevDependencies:r})},le}(),u=function(){if(fe)return ue;fe=1;const e=en();return ue=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:o,packageDevDependencies:r})},ue}(),f=function(){if(ge)return me;ge=1;const e=en();return me=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:o,packageDevDependencies:r})},me}(),m=function(){if(he)return ye;he=1;const e=en();return ye=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:o,packageDevDependencies:r})},ye}(),g=function(){if(ve)return we;ve=1;const e=en();return we=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:o,packageDevDependencies:r})},we}(),y=function(){if(je)return be;je=1;const e=en();return be=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features;e({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:o,packageDevDependencies:r})},be}(),h=function(){if(ke)return _e;ke=1;const e=en();return _e=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features,i={};!0===o.app?.enabled&&(i.targets=i.targets||[],i.targets.push({src:"./src/app/index.html",dest:o.app.dir}),Reflect.has(o.app,"copy")||Reflect.has(o,"copy")||(o.copy=!0)),e({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:o,packageDevDependencies:r})},_e}(),w=function(){if(xe)return De;xe=1;const e=en();return De=t=>{const{atom:n,packageDevDependencies:r}=t,o=n.doc.features,i=o.css&&!1!==o.css.enabled;let a=[];i&&(a.push(["rollup-plugin-postcss","^4"]),a.push(["sass","^1.66"]),(o.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:o,packageDevDependencies:r})},De}();function v({dir:e,name:n="index"}){let r=o.resolve(e,`./${n}.tsx`);if(t.existsSync(r)||(r=o.resolve(e,`./${n}.ts`)),t.existsSync(r)||(r=o.resolve(e,`./${n}.jsx`)),t.existsSync(r)||(r=o.resolve(e,`./${n}.js`)),!t.existsSync(r))return{};const i=r,a=o.extname(r);return{file:i,ext:a,ts:".ts"===a||".tsx"===a,name:n}}return Se=async t=>{const{atom:n,context:r,setProgress:b}=t;b("Initializing features..."),n.doc.features=n.doc.features||{};const j=n.doc.features;j.project=j.project||{},j.project.format=j.project.format||j.project_format||"esm",j.project_format=j.project.format,j.dts_enabled=!0===j.dts||void 0!==j.dts&&!1!==j.dts;const _=o.resolve(r.project.projectDir),k=v({dir:o.resolve(_,"./app")});if(k.file){b("Parsing app entry imports...");let e=await i({file:k.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));j.app_uses_jsx=t,j.app_has_entry=!0,e=await i({file:k.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),j.app_entry_uses_jsx=t,j.app_entry_is_ts=k.ts,j.app_entry_ext=k.ext}const D=v({dir:o.resolve(_,"./cli")});if(D.file){b("Parsing cli entry imports...");let e=await i({file:D.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));j.cli_uses_jsx=t,j.cli_has_entry=!0,e=await i({file:D.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),j.cli_entry_uses_jsx=t,j.cli_entry_is_ts=D.ts,j.cli_entry_ext=D.ext}if("workflow.lib"===n.type){const e=v({dir:o.resolve(_,"./src")});if(e.file){b("Parsing src entry imports...");let t=await i({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));j.src_uses_jsx=n,j.src_has_entry=!0,t=await i({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),j.src_entry_uses_jsx=n,j.src_entry_is_ts=e.ts,j.src_entry_ext=e.ext}}const x=Reflect.has(j,"app_entry_uses_jsx")?!0===j.app_entry_uses_jsx:!0===j.src_entry_uses_jsx,S=Reflect.has(j,"cli_entry_uses_jsx")?!0===j.cli_entry_uses_jsx:!0===j.src_entry_uses_jsx;j.form_enabled=x||S||!0===j.form||!0===j.form?.enabled,j.multiple_enabled=j.multiple_enabled||!0===j.multiple||!0===j.multiple?.enabled,!1===j.app?j.app={enabled:!1}:!0===j.app?j.app={enabled:!0,extend:!0===j.app_has_entry,export:!0,react:x}:j.app={enabled:!0,extend:!0===j.app_has_entry,export:!0,react:x,...j.app||{}},j.app.enabled=!0===j.app.enabled&&(!0===n.doc.features.form_enabled||!0===j.app.extend||!0===j.app.enabled),j.app.format=j.app.format||"esm",j.app.folder=j.app.folder||j.app.format||"default",!1===j.cli?j.cli={enabled:!1}:!0===j.cli?j.cli={enabled:!0,extend:!0===j.cli_has_entry,export:!0,react:S}:j.cli={enabled:!0,extend:!0===j.cli_has_entry,export:!0,react:S,...j.cli||{}},j.cli.enabled=!0===j.cli.enabled&&(!1===n.doc.features.form_enabled||!0===j.cli.extend||!0===j.cli.enabled),j.cli.format=j.cli.format||"esm",j.cli.folder=j.cli.folder||j.cli.folder||"esm",j.cli.node_options=j.cli.node?.options||j.cli.node_options||"",j.json=j.cli.enabled||j.json;const P={cjs:{format:"cjs",context:j.form_enabled?"window":"global",babel:!0===j.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==j.cjs,copy:!1},esm:{format:"esm",context:j.form_enabled?"window":"global",babel:!0===j.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==j.esm,copy:!0},iife:{format:"iife",context:j.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===j.iife,terser:!0,copy:!1}};!0===j.webos&&(P.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===j.electron&&(P.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===j.nextjs&&(P.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===j.ios&&(P.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===j.macos&&(P.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===j.app.enabled&&(j.app.dir=`./dist/app/${j.app.folder}`,P.app={format:j.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:j.app.dir,terser:!0,output_exports:!1===j.app.export?"none":"auto",browsersync:!0}),!0===j.cli.enabled&&(j.cli.dir=`./dist/cli/${j.cli.folder}`,P.cli={format:j.cli.format,context:"global",babel:!0===j.src_uses_jsx||!0===j.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:j.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===j.cli.export?"none":"auto"});const A={server:".",startPath:`${o.normalize(j.app.dir||".")}`,files:[o.normalize("./dist/**/*")],cors:!0,open:!1};j.babel_options=e({targets:{browsers:"last 9 versions, not dead",node:"18"}},j.babel_options||j.babel?.options),j.browsersync_options=e(A,j.browsersync_options||j.browsersync?.options||{}),j.replace_options=e({},j.replace_options||j.replace?.options||{}),Reflect.has(j.browsersync_options,"proxy")&&delete j.browsersync_options.server,j.rollup=j.rollup||{},j.rollup_output=e(P,j.rollup_output||j.rollup?.output||{}),j.preact_enabled=!0===j.preact||j.preact&&!1!==j.preact?.enabled;let E=Object.keys(P);for(const t of E){const n=P[t];n&&(!1!==j.rollup[t]?(n.babel_options=n.babel_options||j.babel_options,n.browsersync_options=e(j.browsersync_options,n.browsersync_options),n.replace_options=e(j.replace_options,n.replace_options),j.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"),(j.form_enabled||j.babel)&&(n.babel=!0)):delete j.rollup_output[t])}E=Object.keys(j.rollup_output),j.babel_enabled=E.some((e=>!0===j.rollup_output[e].babel)),j.browser_enabled=E.some((e=>!0===j.rollup_output[e].babel)),j.browsersync_enabled=!1!==j.browsersync&&E.some((e=>!0===j.rollup_output[e].browsersync)),j.browsersync_enabled=j.browsersync_enabled&&j.app.enabled,j.dependency_auto_enabled=!1!==j.dependency_auto&&!1!==j.dependency_auto?.enabled,j.npm_install_flags=j.npm_install_flags||"",j.react_version=j.react_version||j.react?.version||18,w(t),h(t),y(t),g(t),m(t),u(t),f(t),d(t),l(t),p(t),c(t),a(t),s(t)},Se}function nn(){if(Te)return $e;Te=1;const e=k;return $e=async({atom:t,packageDependencies:n,packageDevDependencies:r,setProgress:o})=>{o("Initializing dependencies");const i=t.doc.dependencies||[];if(i.filter((e=>!e.dev)).forEach((e=>n.push(e))),i.filter((e=>e.dev)).forEach((e=>r.push(e))),"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";o("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:"@fnet/react-app",version:"^0.1"}),n.push({package:"@fnet/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:"^16"}),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 rn(){if(Re)return Ce;Re=1;const e=n,t=r,o=m;return Ce=async({atom:n,setProgress:r,context:i,packageDependencies:a})=>{if(!0!==n.doc.features.app.enabled)return;await r({message:"Creating app folder"});const s={atom:n,packageDependencies:a,ts:Date.now()},c=i.templateDir,p=t.resolve(i.projectDir,"src/app");e.existsSync(p)||e.mkdirSync(p,{recursive:!0});let l=["index.js.njk"];!1!==n.doc.features.app.html&&l.push("index.html.njk"),await o({pattern:l,dir:t.resolve(c,"src/app"),outDir:p,context:s})},Ce}function on(){if(Me)return Fe;Me=1;const e=D,t=x,o=n,i=r;return Fe=async({projectDir:n,name:r,setProgress:a,count:s=1})=>{let c;const p=t(["npm-pick-versions",r,s]),l=i.join(n,".cache"),d=i.join(l,p+".json");return o.existsSync(d)?(a&&a(`Picking npm version of ${r} from cache ...`),c=JSON.parse(o.readFileSync(d,"utf8"))):(a&&a(`Picking npm version of ${r} ...`),c=await e({name:r,count:s}),o.mkdirSync(l,{recursive:!0}),o.writeFileSync(d,JSON.stringify(c),"utf8")),c}}function an(){if(qe)return Ne;qe=1;const e=y,t=n,o=r,i=_,a=on();return Ne=async({atom:n,context:r,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&&n.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===n.doc.features.app.enabled&&u.push({file:o.resolve(r.projectDir,"src/app/index.js"),dev:!1!==n.doc.features.app.dev}),!0===n.doc.features.cli.enabled&&u.push({file:o.resolve(r.projectDir,"src/cli/index.js"),dev:!1!==n.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 o=(await i({file:n,recursive:!0})).all;for await(const t of o){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:r.projectDir,setProgress:p});(!0===e.dev?c:s).push({package:t.package,subpath:t.subpath,version:n.minorRange,type:"npm"})}}const f={atom:n,packageDependencies:s,packageDevDependencies:c},m=r.templateCommonDir,g=e.compile(t.readFileSync(o.resolve(m,"package.json.njk"),"utf8"),e.configure(m)).render(f),y=r.projectDir,h=o.resolve(y,"package.json");t.writeFileSync(h,g,"utf8");const w=o.resolve(r.project.projectDir,"fnet");if(t.existsSync(w)){const e=o.resolve(r.projectDir,"fnet");t.existsSync(e)||t.mkdirSync(e);const n=t.readdirSync(w);for(const r of n){const n=o.resolve(w,r);if(!t.lstatSync(n).isFile())continue;const i=o.resolve(e,r);t.copyFileSync(n,i)}}},Ne}function sn(){if(Ue)return Le;Ue=1;const e=n,t=r,o=m;return Le=async({atom:n,setProgress:r,context:i,packageDependencies:a})=>{if(!0!==n.doc.features.cli.enabled)return;await r({message:"Creating cli."});const s={atom:n,packageDependencies:a},c=i.templateDir,p=t.resolve(i.projectDir,"src/cli");e.existsSync(p)||e.mkdirSync(p,{recursive:!0}),await o({pattern:["index.js.njk"],dir:t.resolve(c,"src/cli"),outDir:p,context:s})},Le}function cn(){if(He)return Be;He=1;const e=n,t=r,o=y,i=_;return Be=async({atom:n,setProgress:r,context:a,packageDependencies:s})=>{await r({message:"Creating rollup file."});const c={atom:n,packageDependencies:s},p=t.resolve(a.projectDir,"src","default/index.js");if(!e.existsSync(p))throw new Error(`Entry file not found: ${p}`);const l=(await i({file:p,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),d=n.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 f=a.templateCommonDir;let m=o.compile(e.readFileSync(t.resolve(f,"rollup.config.mjs.njk"),"utf8"),o.configure(f)).render(c);const g=a.projectDir;let y=t.resolve(g,"rollup.config.mjs");e.writeFileSync(y,m,"utf8")},Be}function pn(){if(Ke)return We;Ke=1;const e=n,t=r,o=y,i=S,a=P,s=A;return We=async({atom:n,setProgress:r,context:c,njEnv:p})=>{if(!0!==n.doc.features.cli.enabled)return;await r({message:"Creating yargs."});let l={};if(l=n.doc.input?n.doc.input:{type:"object",properties:{},required:[]},n.doc.features.cli.fargs&&!1!==n.doc.features.cli.fargs?.enabled){const e=n.doc.features.cli.fargs,t={type:"string",description:"Config name to load args",hidden:!1},r={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=r)}const d={options:l,imports:[],atom:n},u=c.templateDir,f=o.compile(e.readFileSync(t.resolve(u,"src/default/to.args.js.njk"),"utf8"),p).render(d),m=c.projectDir,g=t.resolve(m,"src/default/to.args.js");e.writeFileSync(g,f,"utf8");const y=new i({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});s(y);const h=y.compile(l),w=a(y,h);e.writeFileSync(t.resolve(m,"src/default/validate_input.js"),w,"utf8")},We}function ln(){if(Xe)return Ge;Xe=1;const e=n,t=r,o=y;return Ge=async({atom:n,setProgress:r,context:i,packageDependencies:a})=>{await r({message:"Creating .gitignore"});const s={atom:n,packageDependencies:a},c=i.templateCommonDir,p=o.compile(e.readFileSync(t.resolve(c,".gitignore.njk"),"utf8"),o.configure(c)).render(s),l=i.projectDir,d=t.resolve(l,".gitignore");e.writeFileSync(d,p,"utf8")},Ge}function dn(){if(Ve)return Ye;Ve=1;const e=n,t=r,o=y;return Ye=async({atom:n,setProgress:r,context:i,packageDependencies:a})=>{await r({message:"Creating tsconfig.json."});const s={atom:n,packageDependencies:a},c=i.templateCommonDir,p=o.compile(e.readFileSync(t.resolve(c,"tsconfig.json.njk"),"utf8"),o.configure(c)).render(s),l=i.projectDir,d=t.resolve(l,"tsconfig.json");e.writeFileSync(d,p,"utf8")},Ye}function un(){if(Qe)return Ze;Qe=1;const e=y,t=n,o=r,i=d;return Ze=async({atom:n,context:r,setProgress:a,Atom:s})=>{const c="readme.md",p=`Creating ${c}`;if(await a({message:p}),r.project?.readme){const n=r.projectDir,a={content:r.project.readme.doc.content},s=o.resolve(r.project.projectDir,"fnet/how-to.md");if(t.existsSync(s)){const e=t.readFileSync(s,"utf8");a.howto=e}const p=o.resolve(r.project.projectDir,"fnet/input.yaml");if(t.existsSync(p)){const e=await i({file:p,tags:r.tags});a.input=e.content}const l=r.templateCommonDir,d=e.compile(t.readFileSync(o.resolve(l,`${c}.njk`),"utf8"),e.configure(l)).render(a),u=o.resolve(n,`${c}`);t.writeFileSync(u,d,"utf8")}else if(n.id){const i=await s.first({type:"wiki",parent_id:n.id});if(!i||"markdown"!==i.doc?.["content-type"])return;const{content:a,...p}=i.doc,l={content:a},d=r.templateCommonDir,u=e.compile(t.readFileSync(o.resolve(d,`${c}.njk`),"utf8"),e.configure(d)).render(l),f=r.projectDir,m=o.resolve(f,`${c}`);t.writeFileSync(m,u,"utf8")}},Ze}function fn(){if(tt)return et;tt=1;const e=i,t=f;return et=async({setProgress:n,context:r})=>{const o=r.projectDir;await n({message:"Prettifiying source files."});let i=e.join("src","**","*");await t({commands:{steps:[`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`],wdir:o}})}}function mn(){if(rt)return nt;rt=1;const e=p;return nt=async({atom:t,setProgress:n,context:r})=>{if(!t.doc.features.dts_enabled)return;const o=r.projectDir;await n({message:"Creating .d.ts"});if(0!==(await e("tsc",{cwd:o})).code)throw new Error("Couldnt create .d.ts files.")},nt}function gn(){if(it)return ot;it=1;const e=p,t=Zt;return ot=async({setProgress:n,atom:r,context:o})=>{const i=o.projectDir;await n({message:"Installing npm packages."});const a=t("bun")?"bun":"npm";if(0!==(await e(`${a} install ${r.doc.features.npm_install_flags}`,{cwd:i})).code)throw new Error("Couldnt install npm packages.")},ot}function yn(){if(st)return at;st=1;const e=r,t=E,n=m;return at=async r=>{const{setProgress:o,atom:i,context:a}=r;o({message:"Installing Python packages"});const s=a.projectDir,c=await t({pythonVersion:"3.12",packages:[{package:"fnet-import-parser",version:"0.1.9"}]}),{errors:p,result:l}=await c.runBin("fnet_import_parser",["--entry_file",e.join(s,"src","default","index.py")],{captureName:"result"});if(p)throw new Error(p.format());const d=JSON.parse(l.items[0].stdout),u=d.required["third-party"]?.map((e=>({package:e.metadata?.package||e.path,version:e.metadata?.version||void 0,channel:e.metadata?.channel||void 0})))||[],f=i.doc.dependencies||[];for(const e of u)f.some((t=>t.package===e.package))||f.push(e);const m=e.join(s,".conda"),g=await t({envDir:m,pythonVersion:i.doc.features.runtime.version||"3.12",packages:f});a.pythonEnv=g,r.packageDependencies=f;const y=i.doc.features.render?.dirs||[];for(const t of y)t.dir=e.resolve(s,t.dir),t.outDir=e.resolve(s,t.outDir),await n(t);let h={params:{}};h.params.package_name=i.doc.name,h.params.version="0.1.0",h.params.bin_name=i.doc.name,h.params.python_requires=i.doc.features.runtime.version||">=3.12",h.params.dependencies=f,h.params.scripts=JSON.stringify({cli:`PYTHONPATH='${e.join("src")}' '${e.relative(a.projectDir,g.pythonBin)}' '${e.join("src","cli","index.py")}'`}),await n({pattern:["setup.py.njk","package.json.njk","pyproject.toml.njk"],dir:a.templateDir,outDir:a.projectDir,context:h})},at}function hn(){if(pt)return ct;pt=1;const e=p;return ct=async({setProgress:t,context:n})=>{const r=n.projectDir;await t({message:"Building main project."});if(0!==(await e("npm run build",{cwd:r})).code)throw new Error("Couldnt build project.")}}function wn(){if(Ht)return Bt;Ht=1;const e=function(){if(dt)return lt;dt=1;const e=p,t=o;return lt=async({setProgress:n,context:r,deploymentProject:o,deploymentProjectTarget:i,buildId:a})=>{await n({message:"Deploying it as gitlab project."});const s=r.projectDir;let c="fnet-to-gitlab";const p=i.params.config||"gitlab",l=await t({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='${i.params.name}'`,c+=` --projectBranch='${i.params.branch||"main"}'`,c+=` --gitlabHost='${d.gitlabHost}'`,c+=` --gitlabToken='${d.gitlabToken}'`,c+=` --gitlabUsername='${d.gitlabUsername}'`,c+=` --gitlabUserEmail='${d.gitlabUserEmail}'`,!0!==i.dryRun&&(await e(c),o.isDirty=!0)}}(),t=function(){if(ft)return ut;ft=1;const e=n,t=r,i=$,a=p,s=o;return ut=async({setProgress:n,context:r,deploymentProject:o,deploymentProjectTarget:c,registerToPackageManager:p,yamlTarget:l})=>{await n({message:"Deploying it as gcs package."});const d=r.projectDir,u=t.resolve(d,"package.json"),f=e.readFileSync(u),m=JSON.parse(f);m.name=c.params.name,m.version=i.inc(c.version,"patch"),delete m.scripts,delete m.devDependencies,e.writeFileSync(u,JSON.stringify(m,null,"\t"));const{file:g,data:y}=await s({name:c.config||"gcs",dir:r.projectDir,tags:r.tags});let h="fnet-files-to-gcs";h+=` --projectId='${y.env.GCS_PROJECT_ID}'`,h+=` --bucketName='${y.env.GCS_BUCKET_NAME}'`,h+=` --keyFilename='${t.resolve(t.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 a(h),e.writeFileSync(u,f),!0!==c.dryRun&&(o.isDirty=!0,c.version=m.version,l.set("version",m.version),await p({target:c,packageJSON:m}))}}(),a=function(){if(gt)return mt;gt=1;const e=n,t=r,i=$,a=p,s=o,l=T,d=u,f=c,m=Zt;return mt=async({atom:n,setProgress:r,context:o,deploymentProject:c,deploymentProjectTarget:p,yamlTarget:u})=>{await r({message:"Deploying it as npm package."});const g=o.projectDir,y=t.resolve(g,"package.json"),h=e.readFileSync(y),w=JSON.parse(h);w.name=p.params.name,w.version=i.inc(p.version,"patch");const v=p.params.bin?.name||p.params.bin;!1!==p.params.bin?.enabled&&v&&"string"==typeof v&&(w.bin={[v]:"dist/cli/esm/index.js"}),delete w.scripts,delete w.devDependencies,w.scripts={serve:"npx serve ."},e.writeFileSync(y,JSON.stringify(w,null,"\t"));const b=p.config||"npm";let j=(await s({name:b,dir:o.projectDir,tags:o.tags,optional:!0}))?.data;if(!j){const n=l({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===n.length)throw new Error("Couldnt find schema to create npm config");const r=await d({schema:n[0],tags:o.tags}),i=o.project.projectDir,a=t.resolve(i,".fnet");e.existsSync(a)||e.mkdirSync(a),e.writeFileSync(t.resolve(a,`${b}.fnet`),f.stringify(r)),j=r}if(e.writeFileSync(t.resolve(g,".npmrc"),`//registry.npmjs.org/:_authToken=${j.env.NPM_TOKEN}`),!0===p.dryRun)return;const _=m("bun")?"bun":"npm";if(0!==(await a(`${_} publish --access public`,{cwd:g})).code)throw new Error("Couldnt publish to npm");e.writeFileSync(y,h),c.isDirty=!0,p.version=w.version,u.set("version",w.version)}}(),l=function(){if(ht)return yt;ht=1;const e=n,t=r,i=g,a=y,s=O,c=o;return yt=async({atom:n,setProgress:r,context:o,deploymentProject:p,deploymentProjectTarget:l,buildId:d,packageDependencies:u,njEnv:f})=>{await r({message:"Deploying it as node-red flow."});const m=o.projectDir,g=o.templateDir,y="workflow"===n.type?"WF":"LIB";let h;if("simple"===l.deploy.template)h={atom:n,packageDependencies:u,red:{tab:{id:l.deploy.id||s.util.generateId(),label:`${y}/${n.id?n.id:i.hostname()}/${n.name}/${l.deploy.name||l.deploy.template}`},function:{id:s.util.generateId(),name:n.doc.name,initialize:{content:e.readFileSync(t.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:n.doc.bundleName}},inject:{id:s.util.generateId(),...l.params?.inject,payload:"json"===l.params?.inject?.payloadType?`'${JSON.stringify(l.params?.inject?.payload)}'`:l.params?.inject?.payload},debug:{id:s.util.generateId()}}};else if("cronjob"===l.deploy.template){let r=l.params?.schedules?cloneDeep(l.params?.schedules):void 0;r?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),h={atom:n,packageDependencies:u,red:{tab:{id:l.deploy.id||s.util.generateId(),label:`${y}/${n.id?n.id:i.hostname()}/${l.deploy.name||l.deploy.template}`},function:{id:s.util.generateId(),name:n.doc.name,initialize:{content:e.readFileSync(t.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:n.doc.bundleName}},cronjob:{id:s.util.generateId(),schedules:r},debug:{id:s.util.generateId()}}}}else{if("http"!==l.deploy.template)return;h={atom:n,packageDependencies:u,red:{tab:{id:l.deploy.id||s.util.generateId(),label:`${y}/${n.id?n.id:i.hostname()}/${l.deploy.name||l.deploy.template}`},function:{id:s.util.generateId(),name:n.doc.name,initialize:{content:e.readFileSync(t.resolve(m,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:n.doc.bundleName}},httpin:{id:s.util.generateId(),method:l.params.method||"get",url:l.params.url},httpout:{id:s.util.generateId()},debug:{id:s.util.generateId()}}}}let w=a.compile(e.readFileSync(t.resolve(g,`deploy/node-red/${l.deploy.template}.yaml.njk`),"utf8"),f).render(h);if(e.writeFileSync(t.resolve(m,"node-red.yaml"),w),w=yaml.load(w),!0===l.dryRun)return;p.isDirty=!0;const v=(await c({name:o.redConfig||"red",dir:o.projectDir,tags:o.tags}))?.data,b=l.deploy.url||v.env.RED_URL,j={};if(!1!==l.deploy.auth&&(j.Authorization="Bearer "+atomAccessToken),l.deploy.id)if(!0===l.actions?.delete){const e=await fetch(`${b}/flow/${l.deploy.id}`,{method:"DELETE",headers:j});if(!e.ok)throw new Error(`Failed to delete flow: ${e.statusText}`);delete l.actions.delete,delete l.deploy.id,l.enabled=!1}else{const e=await fetch(`${b}/flow/${l.deploy.id}`,{method:"PUT",headers:{...j,"Content-Type":"application/json"},body:JSON.stringify(w)});if(!e.ok)throw new Error(`Failed to update flow: ${e.statusText}`)}else{const e=await fetch(`${b}/flow`,{method:"POST",headers:{...j,"Content-Type":"application/json"},body:JSON.stringify(w)});if(!e.ok)throw new Error(`Failed to create flow: ${e.statusText}`);const t=await e.json();l.deploy.id=t.id}},yt}(),d=function(){if(vt)return wt;vt=1;const e=s,t=i,n=o;return wt=async({atom:r,Atom:o,setProgress:i,context:a,packageDependencies:s,deploymentProject:c,deploymentProjectTarget:p})=>{await i({message:"Deploying it as workflow lib."});const l=(await n({name:"atom",dir:a.projectDir,tags:a.tags}))?.data;let d,u,f,m=p.deploy.name.split("/");if(1===m.length)u=l.env.ATOM_LIBRARIES_ID,f=p.deploy.name;else{if(2!==m.length)throw new Error("Wrong name path.");{const e=await o.first({where:{name:m[0],parent_id:l.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");u=e.id,f=m[1]}}if(!0===p.dryRun)return;if(c.isDirty=!0,p.deploy.id){if(d=await o.get({id:p.deploy.id}),!d)return}else{if(d=await o.create({parent_id:u,doc:{name:f,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!d)return;p.deploy.id=d.id}const g=a.projectDir;d.doc.contents=[{content:e.readFileSync(t.resolve(g,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:e.readFileSync(t.resolve(g,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:e.readFileSync(t.resolve(g,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],d.doc.name=f,d.doc.dependencies=s,"workflow.lib"===r.type?d.doc.subtype="library":"workflow"===r.type&&(d.doc.subtype="workflow"),d=await o.update(d,{id:d.id})}}(),f=function(){if(jt)return bt;jt=1;const e=o,t=I,n=C,r=$;return bt=async({atom:o,target:i,onProgress:a,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{a&&await a({message:"Deploying it as ios-app package."});const d=i?.config?await e({name:i.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(i.version||"0.1.0","patch");i.params.version=u,i.version=u,l.set("version",u);const f=n(i.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},bt}(),m=function(){if(kt)return _t;kt=1;const e=o,t=R,n=C,r=$;return _t=async({atom:o,target:i,onProgress:a,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{a&&await a({message:"Deploying it as macos-app package."});const d=i?.config?await e({name:i.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(i.version||"0.1.0","patch");i.params.version=u,i.version=u,l.set("version",u);const f=n(i.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},_t}(),h=function(){if(xt)return Dt;xt=1;const e=o,t=F,n=C,r=$;return Dt=async({atom:o,target:i,onProgress:a,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{a&&await a({message:"Deploying it as electron package."});const d=i?.config?await e({name:i.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(i.version||"0.1.0","patch");i.params.version=u,i.version=u,l.set("version",u);const f=n(i.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},Dt}(),w=function(){if(Pt)return St;Pt=1;const e=o,t=M,n=C,r=$;return St=async({atom:o,target:i,onProgress:a,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{a&&await a({message:"Deploying it as webos package."});const d=i?.config?await e({name:i.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(i.version||"0.1.0","patch");i.params.version=u,i.version=u,l.set("version",u);const f=n(i.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},St}(),v=function(){if(Et)return At;Et=1;const e=o,t=N,n=C,r=$;return At=async({atom:o,target:i,onProgress:a,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{a&&await a({message:"Deploying it as nextjs package."});const d=i?.config?await e({name:i.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(i.version||"0.1.0","patch");i.params.version=u,i.version=u,l.set("version",u);const f=n(i.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},At}(),b=function(){if(Tt)return $t;Tt=1;const e=o,t=q,n=C,r=$;return $t=async({atom:o,target:i,onProgress:a,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{a&&await a({message:"Deploying it as docker package."});const d=i?.config?await e({name:i.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(i.version||"0.1.0","patch");i.params.version=u,i.version=u,l.set("version",u);const f=n(i.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},$t}(),j=function(){if(It)return Ot;It=1;const e=n,t=r,i=$,a=p,s=o;return Ot=async({setProgress:n,context:r,deploymentProject:o,deploymentProjectTarget:c,yamlTarget:p})=>{await n({message:"Deploying it as fnet package."});const l=r.projectDir,d=t.resolve(l,"package.json"),u=e.readFileSync(d),f=JSON.parse(u);f.name=c.params.name,f.version=i.inc(c.version,"patch"),delete f.scripts,delete f.devDependencies,e.writeFileSync(d,JSON.stringify(f,null,"\t"));const{file:m,data:g}=await s({name:c.config||"fnet-package",dir:r.projectDir,tags:r.tags});if(!g.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${m}`);if(!g.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${m}`);if(!g.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${m}`);const y=`${g.env.ATOM_API_URL}/v1/auth/token`,h=g.env.ATOM_API_USERNAME,w=g.env.ATOM_API_PASSWORD,v=await fetch(y,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:h,password:w})});if(!v.ok)throw new Error(`Failed to fetch token: ${v.statusText}`);const b=await v.json(),j=b?.access_token;if(!j)throw new Error(`Invalid access_token from ${y}`);let _="fnet-files-to-gcs";if(_+=` --projectId='${g.env.GCS_PROJECT_ID}'`,_+=` --bucketName='${g.env.GCS_BUCKET_NAME}'`,_+=` --keyFilename='${t.resolve(t.dirname(m),g.env.GCS_UPLOADER_KEY_FILE)}'`,_+=` --dir='${l}'`,_+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",_+=` --destDir='${f.name}/${f.version}'`,_+=" --metadata.cacheControl='public, max-age=31536000, immutable'",g.env.DOMAIN&&(_+=` --domain='${g.env.DOMAIN}'`),!0!==c.dry_run&&!0!==c.params.dry_run||(_+=" --dryRun"),await a(_),e.writeFileSync(d,u),!0===c.dryRun)return;o.isDirty=!0,c.version=f.version,p.set("version",f.version);const k=`${g.env.ATOM_API_URL}/v1/service/fnet-package/publish`,D=await fetch(k,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${j}`},body:JSON.stringify({name:f.name,version:f.version,version_domain:g.env.DOMAIN,docs:c.params.docs,configs:c.params.configs})});if(!D.ok)throw new Error(`Failed to publish fnet package: ${D.statusText}`);const x=await D.json();if(x?.error)throw new Error("Failed to publish fnet package.")}}(),_=function(){if(Rt)return Ct;Rt=1;const e=$,t=o;return Ct=async({setProgress:n,context:r,deploymentProject:o,deploymentProjectTarget:i,yamlTarget:a})=>{await n({message:"Deploying it as fnet form."});const{file:s,data:c}=await t({name:i.config||"fnet-form",dir:r.projectDir,tags:r.tags});if(!c.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${s}`);if(!c.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${s}`);if(!c.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${s}`);const p=`${c.env.ATOM_API_URL}/v1/auth/token`,l=c.env.ATOM_API_USERNAME,d=c.env.ATOM_API_PASSWORD,u=await fetch(p,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:l,password:d})});if(!u.ok)throw new Error(`Failed to fetch token: ${u.statusText}`);const f=await u.json(),m=f?.access_token;if(!m)throw new Error(`Invalid access_token from ${p}`);o.isDirty=!0;const g=e.inc(i.version,"patch");i.params.version=g,i.version=g,a.set("version",g);const y=`${c.env.ATOM_API_URL}/v1/service/fnet-form/publish`,h=await fetch(y,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${m}`},body:JSON.stringify({name:i.params.name,version:i.params.version,docs:i.params.docs,configs:i.params.configs})});if(!h.ok)throw new Error(`Error publishing fnet form: ${h.statusText}`);const w=await h.json();if(w?.error)throw new Error("Error publishing fnet form.")}}(),k=function(){if(Mt)return Ft;Mt=1;const e=$,t=o,n=s,r=p,i=L;return Ft=async({setProgress:o,context:a,deploymentProject:s,deploymentProjectTarget:c,yamlTarget:p})=>{await o({message:"Deploying it as fnet flow."});const{file:l,data:d}=await t({name:c.config||"fnet-flow",dir:a.project.projectDir,tags:a.tags});if(!d.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!d.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!d.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const u=`${d.env.ATOM_API_URL}/v1/auth/token`,f=d.env.ATOM_API_USERNAME,m=d.env.ATOM_API_PASSWORD,g=await fetch(u,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:f,password:m})});if(!g.ok)throw new Error(`Failed to fetch token: ${g.statusText}`);const y=await g.json(),h=y?.access_token;if(!h)throw new Error(`Invalid access_token from ${u}`);s.isDirty=!0;const w=e.inc(c.version,"patch");c.params.version=w,c.version=w,p.set("version",w);const v=`${d.env.ATOM_API_URL}/v1/service/fnet-flow/publish`,b=await fetch(v,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`},body:JSON.stringify({name:c.params.name,version:c.params.version,docs:c.params.docs,configs:c.params.configs})});if(!b.ok)throw new Error(`Error publishing fnet flow: ${b.statusText}`);const j=await b.json();if(j?.error)throw new Error("Error publishing fnet flow.");const _=j?.upload.id;let k="fnet-dir-zipper";k+=` --sourceDir='${a.project.projectDir}'`,k+=" --pattern=**/*",k+=" --stdout_format=json";const D=await r(k);if(0!==D.code)throw new Error(D.stderr);const x=JSON.parse(D.stdout).path;let S=new i;S.append("file",n.createReadStream(x));const P=await fetch(`${d.env.ATOM_API_URL}/v1/service/upload/single/${_}`,{method:"POST",headers:{...S.getHeaders(),Authorization:`Bearer ${h}`},body:S});if(!P.ok)throw new Error(`Error uploading fnet flow: ${P.statusText}`);const A=await P.json();if(A?.error)throw new Error("Error uploading fnet flow.")}}(),D=function(){if(qt)return Nt;qt=1;const e=$,t=o,n=s,r=p,i=L;return Nt=async({setProgress:o,context:a,deploymentProject:s,deploymentProjectTarget:c,yamlTarget:p})=>{await o({message:"Deploying it as fnet node."});const{file:l,data:d}=await t({name:c.config||"fnet-node",dir:a.project.projectDir,tags:a.tags});if(!d.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!d.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!d.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const u=`${d.env.ATOM_API_URL}/v1/auth/token`,f=d.env.ATOM_API_USERNAME,m=d.env.ATOM_API_PASSWORD,g=await fetch(u,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:f,password:m})});if(!g.ok)throw new Error(`Failed to fetch token: ${g.statusText}`);const y=await g.json(),h=y?.access_token;if(!h)throw new Error(`Invalid access_token from ${u}`);s.isDirty=!0;const w=e.inc(c.version,"patch");c.params.version=w,c.version=w,p.set("version",w);const v=`${d.env.ATOM_API_URL}/v1/service/fnet-node/publish`,b=await fetch(v,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`},body:JSON.stringify({name:c.params.name,version:c.params.version,docs:c.params.docs,configs:c.params.configs})});if(!b.ok)throw new Error(`Error publishing fnet node: ${b.statusText}`);const j=await b.json();if(j?.error)throw new Error("Error publishing fnet node.");const _=j?.upload.id;let k="fnet-dir-zipper";k+=` --sourceDir='${a.project.projectDir}'`,k+=" --pattern=**/*",k+=" --stdout_format=json";const D=await r(k);if(0!==D.code)throw new Error(D.stderr);const x=JSON.parse(D.stdout).path;let S=new i;S.append("file",n.createReadStream(x));const P=await fetch(`${d.env.ATOM_API_URL}/v1/service/upload/single/${_}`,{method:"POST",headers:{...S.getHeaders(),Authorization:`Bearer ${h}`},body:S});if(!P.ok)throw new Error(`Error uploading fnet node: ${P.statusText}`);const A=await P.json();if(A?.error)throw new Error("Error uploading fnet node.")}}(),x=function(){if(Ut)return Lt;Ut=1;const e=o,t=U,n=C,r=$;return Lt=async({atom:o,target:i,onProgress:a,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{a&&await a({message:"Deploying it as Rust package."});const d=i?.config?await e({name:i.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(i.version||"0.1.0","patch");i.params.version=u,i.version=u,l.set("version",u);const f=n(i.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},Lt}(),S=function(){if(zt)return Jt;zt=1;const e=o,t=J,n=C,r=$;return Jt=async({atom:o,target:i,onProgress:a,projectDir:s,dependencies:c,context:p,yamlTarget:l})=>{a&&await a({message:"Deploying it as pypi package."});const d=i?.config?await e({name:i.config,dir:s,optional:!0,transferEnv:!1,tags:p.tags}):void 0,u=r.inc(i.version||"0.1.0","patch");i.params.version=u,i.version=u,l.set("version",u);const f=n(i.params);f.dependencies=n(c);const m={atom:o,params:f,config:d?.config,src:s,dest:s};return{deployer:await t(m)}},Jt}();return Bt=async n=>{const{atom:r,packageDependencies:o,context:i,deploymentProjectTarget:s,setProgress:c,deploymentProject:p,yamlTarget:u}=n;if(!0===s.enabled)if("lib"===s.type)await d({...n});else if("red"===s.type)await l({...n});else if("npm"===s.type)await a({...n});else if("gcs"===s.type)await t({...n});else if("gitlab"===s.type)await e({...n});else if("fnet-package"===s.type)await j({...n});else if("fnet-form"===s.type)await _({...n});else if("fnet-node"===s.type)await D({...n});else if("fnet-flow"===s.type)await k({...n});else{let e;if("nextjs"===s.type?e=v:"webos"===s.type?e=w:"electron"===s.type?e=h:"docker"===s.type?e=b:"ios"===s.type?e=f:"macos"===s.type?e=m:"rust"===s.type?e=x:"pypi"===s.type&&(e=S),!e)return;await e({atom:r,target:s,onProgress:c,projectDir:i.projectDir,dependencies:o,context:i,yamlTarget:u}),p.isDirty=!0}},Bt}function vn(){if(Kt)return Wt;Kt=1;const e=n,t=r,i=g,a=c,s=y,p=function(){if(X)return G;X=1;const e=h,t=w;return G=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}}(),{randomUUID:l}=v,d=function(){if(V)return Y;V=1;const{Api:e}=b;return Y=class{init({config:t,accessToken:n}){return new Promise(((r,o)=>{if(e.set_api_url(t.data.url),n)return e.set_req_token(n),void r(n);fetch(`${t.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(t.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((t=>{e.set_req_token(t.access_token),r(t.access_token)})).catch((t=>{e.set_req_token(),o(t)}))}))}}}(),u=tn(),f=(Ee||(Ee=1,Ae=async e=>{const{atom:t,context:n,setProgress:r}=e;r("Initializing features..."),t.doc.features=t.doc.features||{};const o=t.doc.features;!1===o.cli?o.cli={enabled:!1}:(o.cli,o.cli={enabled:!0}),o.cli.enabled=!0===o.cli.enabled&&(!1===t.doc.features.form_enabled||!0===o.cli.extend||!0===o.cli.enabled)}),Ae),j=nn(),k=Ie?Oe:(Ie=1,Oe=async({atom:e,packageDependencies:t,packageDevDependencies:n,setProgress:r})=>{r("Initializing dependencies")}),D=rn(),x=an(),S=sn(),P=function(){if(ze)return Je;ze=1;const e=n,t=r,o=m;return Je=async({atom:n,setProgress:r,context:i,packageDependencies:a})=>{if(!0!==n.doc.features.cli.enabled)return;await r({message:"Creating cli."});const s={atom:n,packageDependencies:a},c=i.templateDir,p=t.join(i.projectDir,"src","cli");e.existsSync(p)||e.mkdirSync(p,{recursive:!0}),await o({pattern:["index.py.njk","__init__.py.njk"],dir:t.join(c,"src","cli"),outDir:p,context:s})},Je}(),A=cn(),E=pn(),$=ln(),T=dn(),O=un(),I=fn(),C=mn(),R=gn(),F=yn(),M=hn(),N=on(),q=wn(),{Atom:L}=b,U=z,J=o,W=_,K=B,Z=H;return Wt=class{#e;#t;#n;#r;#o;#i;#a;#s;#c;#p;#l;#d;#u;#f;#m;#g;#y;constructor(e){this.#e=new d,this.#t=e,this.#i=[],this.#a=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#i,packageDevDependencies:this.#a,setProgress:this.setProgress.bind(this),context:this.#t,Atom:L,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 L.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 n=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const r=K({dir:n,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 o=n;e.existsSync(o)||e.mkdirSync(o,{recursive:!0}),o=t.join(n,"src"),e.existsSync(o)||e.mkdirSync(o,{recursive:!0}),o=t.join(n,"src","default"),e.existsSync()||e.mkdirSync(o,{recursive:!0})}async initLibraryDirPython(){this.setProgress({message:"Initializing library directory."});const n=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const r=K({dir:n,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 o=n;e.existsSync(o)||e.mkdirSync(o,{recursive:!0}),o=t.join(n,"src"),e.existsSync(o)||e.mkdirSync(o,{recursive:!0}),o=t.join(n,"src","default");const a=this.#t.projectSrcDir;if(!e.existsSync(o))try{"win32"===i.platform()?e.symlinkSync(a,o,"junction"):e.symlinkSync(a,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=s.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.#o=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#i})}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.#o=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],o=await this.findAtomLibrary({url:r.name});r.atom=o;const i=o.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));i?.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 n=U({url:e});if(!n)throw new Error(`Invalid package name: ${e}`);if(n.protocol||(n.protocol=this.#l),"ac:"===n.protocol){const t=n.pathname.split("/");if(1===t.length)return await L.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await L.first({where:{name:t[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await L.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===n.protocol){const e=this.#n;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const n=t.resolve(this.#t.projectSrcDir,"index.js"),r=await W({file:n,recursive:!0}),o=e.doc.dependencies,i=r.all;for await(const e of i){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await N({name:e.package,projectDir:this.#t.projectDir,setProgress:this.#y.setProgress});o.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:n}){await this.setProgress({message:"Creating external lib files."}),this.#n.typesDir="./types";const r=n.filter((e=>"atom"===e.type));for(let n=0;n<r.length;n++){const o=r[n].atom,i=this.#t.projectDir;if("local:"===o.protocol){const n=t.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),r=t.relative(t.join(this.#t.projectDir,"src","default"),n);if(!e.existsSync(n)){e.mkdirSync(t.dirname(n),{recursive:!0});let r="export default async (args)=>{\n";r+="}",e.writeFileSync(n,r,"utf8")}o.relativePath=r.split(t.sep).join("/"),this.#n.typesDir=`./types/${t.basename(i)}/src`}else{const n=t.join(i,"src","libs",`${o.id}.js`),r=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;e.writeFileSync(n,r.content,"utf8")}}}async createAtomLibFilesPython({libs:n}){await this.setProgress({message:"Creating external lib files."});const r=n.filter((e=>"atom"===e.type));for(let n=0;n<r.length;n++){const o=r[n].atom;if("local:"===o.protocol){const n=t.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.py`);if(!e.existsSync(n)){e.mkdirSync(t.dirname(n),{recursive:!0});let r="def default():\n";r+=' print("Hello world!")\n',e.writeFileSync(n,r,"utf8")}}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const n={libs:this.#o.filter((e=>"atom"===e.type)),libraryAtom:this.#n,atom:this.#n},r=this.#t.templateDir,o=s.compile(e.readFileSync(t.resolve(r,t.join("src","default","engine.js.njk")),"utf8"),this.#r).render(n),i=this.#t.projectDir,a=t.resolve(i,t.join("src","default","index.js"));e.writeFileSync(a,o,"utf8")}async createProjectYaml(){const n="node.yaml",r=`Creating ${n}`;await this.setProgress({message:r});const{content:o,...i}=this.#n.doc,c={content:a.stringify(i)},p=this.#t.templateDir,l=s.compile(e.readFileSync(t.resolve(p,`${n}.njk`),"utf8"),this.#r).render(c),d=this.#t.projectDir,u=t.resolve(d,`${n}`);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 L.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 L.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||{}),o=n||{};for(let e=0;e<r.length;e++){const n=t.doc[r[e]];n.name=r[e];const i=o.get(r[e]);await q({...this.#y,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:i})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#t.id)return;let r=await L.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});r?(r.doc.versions.splice(0,0,{v:n.version}),await L.update(r,{id:r.id})):r=await L.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(Z.blue(t)),await this._cache_set(this.#p,{status:"IN_PROGRESS",message:t})}async initNode(){await u(this.#y),await j(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initPython(){await f(this.#y),await k(this.#y),await this.initLibraryDirPython(),await this.initNunjucks(),await this.initLibsPython()}async nodeBuild(){this.#f&&(await this.createAtomLibFiles({libs:this.#o}),await this.createEngine(),await this.createProjectYaml(),await O(this.#y),await T(this.#y),await $(this.#y),await E(this.#y),await S(this.#y),await D(this.#y),await A(this.#y),await x(this.#y),await I(this.#y),await C(this.#y),this.#m&&(await R(this.#y),await M(this.#y),this.#g&&await this.deploy()))}async pythonBuild(){this.#f&&(await this.createAtomLibFilesPython({libs:this.#o}),await this.createProjectYaml(),await O(this.#y),await $(this.#y),await P(this.#y),this.#m&&(await F(this.#y),this.#g&&await this.deploy()))}async init(){this._redis_client=await p(),this.#c=this.#t.buildId||l(),this.#y.buildId=this.#c,this.#u=this.#t.mode,this.#f=["all","deploy","build","file"].includes(this.#u),this.#m=["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}}},Wt}var bn=function(){if(Yt)return Vt;Yt=1;const g=process.cwd(),{spawn:y}=e,h=t,w=Zt,v=Qt;o({name:["redis"],dir:g,optional:!0});const b=i,{Command:j,Option:_}=a,k=s,D=c,x=p,S=l,P=d,A=o,E=u,$=f,T=m,O=vn(),I=function(){if(Xt)return Gt;Xt=1;const e=n,t=r;return Gt=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}),C="win32"===process.platform?";":":";process.env.PATH=`${b.join(I,"/.bin")}${C}${process.env.PATH}`;const R=new j;function F(e,{name:t,bin:n,preArgs:r=[]}){const o=t||n;e.command(o,{isDefault:!1,hidden:!1}).description(`Run ${n} ${r.join(" ")} in project context. Pass arguments after '--'.`).argument("[command_args...]",`Arguments for ${n}`).allowUnknownOption().action((async(e,t)=>{try{const o=await N(t),{projectDir:i}=o,a=e,s=y(n,[...r,...a],{cwd:i,stdio:"inherit",shell:!0});s.on("close",(e=>{process.exit(e)})),s.on("error",(e=>{console.error(`Failed to start ${n}:`,e),process.exit(1)}))}catch(e){console.error(e.message),process.exit(1)}}))}function M(e,{name:t,bin:n,preArgs:r=[]}){const o=t||n;e.command(o,{isDefault:!1,hidden:!1}).description(`Run ${n} ${r.join(" ")} using project's conda env. Pass arguments after '--'.`).argument("[command_args...]",`Arguments for ${n}`).allowUnknownOption().action((async(e,o)=>{try{const i=await N(o),{projectDir:a}=i,s=b.join(a,".conda","bin",n||t);if(!k.existsSync(b.dirname(s)))throw new Error(`Conda environment not found in ${b.join(a,".conda")}. Did you initialize it?`);if(!k.existsSync(s))throw new Error(`Command '${n||t}' not found in conda environment: ${s}`);const c=e,p=y(s,[...r,...c],{cwd:a,stdio:"inherit",shell:!1,env:{...process.env,PYTHONPATH:a}});p.on("close",(e=>{process.exit(e)})),p.on("error",(e=>{console.error(`Failed to start ${s}:`,e),process.exit(1)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function N(e){if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",templateDir:b.resolve(I,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:b.resolve(I,"./@fnet/cli-project-common/dist/template/default"),projectDir:b.resolve(g,`./.output/${e.id}`),tags:e.ftag||[]};{const t=await async function({tags:e=[]}){const t=b.resolve(g,"node.yaml");if(!k.existsSync(t))throw new Error("node.yaml file not found in current directory.");const n=Array.isArray(e)?e:e?[e]:[],{raw:r,parsed:o}=await P({file:t,tags:n}),i=b.dirname(t);o.features=o.features||{};const a=o.features;a.runtime=a.runtime||{},a.runtime.type=a.runtime.type||"node","python"===a.runtime.type?a.runtime.template=a.runtime.template||"python":a.runtime.template=a.runtime.template||"default";const s={libraryAtom:{doc:{...o},fileName:"index"},projectDir:i,projectFilePath:t,projectFileContent:r,projectFileParsed:o,runtime:a.runtime};let c=b.resolve(i,"fnet/targets.yaml");if(!k.existsSync(c)&&(c=b.resolve(i,"node.devops.yaml"),k.existsSync(c))){const e=b.resolve(i,"fnet");k.existsSync(e)||k.mkdirSync(e);const t=b.resolve(i,"fnet/targets.yaml");k.copyFileSync(c,t);try{k.unlinkSync(c),console.log(`Migrated legacy devops file: ${c} to ${t}`)}catch(e){console.warn(`Could not delete legacy devops file ${c}: ${e.message}`)}}if(k.existsSync(c)){const{raw:e,parsed:t}=await P({file:c,tags:n}),r=D.parseDocument(e);s.devops={filePath:c,fileContent:e,yamlDocument:r,doc:{...t},type:"library.deploy",save:async()=>{k.writeFileSync(s.devops.filePath,r.toString())}}}const p=b.resolve(i,"readme.md");if(k.existsSync(p)){const e=k.readFileSync(p,"utf8");s.readme={filePath:p,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return s}({tags:e.ftag||[]});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:b.resolve(I,`./@fnet/cli-project-node/dist/template/${t.runtime.template}`),templateCommonDir:b.resolve(I,`./@fnet/cli-project-common/dist/template/${t.runtime.template}`),projectDir:b.resolve(t.projectDir,"./.workspace"),projectSrcDir:b.resolve(t.projectDir,"./src"),project:t,tags:e.ftag||[]}}}return R.name("fnode").version(v.version).description("CLI tool for FlowNet node projects"),R.command("create").description("Create flow node project").requiredOption("-n, --name <string>","Project name").addOption(new _("-r, --runtime <type>","Runtime environment").choices(["node","python"]).default("node")).option("--vscode","Open project in VSCode after creation",!0).option("--no-vscode","Do not open project in VSCode").action((async e=>{try{const t=b.resolve(I,"@fnet/cli-project-node/dist/template/project"),n=b.resolve(g,e.name);k.existsSync(n)||k.mkdirSync(n),await T({dir:t,outDir:n,context:{name:e.name,runtime:e.runtime,platform:S.platform()},copyUnmatchedAlso:!0});let r=await x("fnode build",{cwd:n});if(0!==r.code)throw new Error("Failed to build project.");if(w("git")&&(r=await x("git init --initial-branch=main",{cwd:n}),0!==r.code))throw new Error("Failed to initialize git.");if(e.vscode&&w("code")&&(r=await x(`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)}})),R.command("project").description("Flow node project operations").option("-u, --update","Update project files from template",!1).action((async e=>{try{const t=b.resolve(I,"@fnet/cli-project-node/dist/template/project"),n=process.cwd(),r=await N(e);if(e.update){if(await T({dir:t,outDir:n,context:{name:r.project.projectFileParsed.name,runtime:r.project.runtime.type,platform:S.platform()},copyUnmatchedAlso:!0}),0!==(await x("fnode build",{cwd:n})).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}else console.log("Use 'fnode project --update' to update project files.");process.exit(0)}catch(e){console.error("Project command failed.",e.message),process.exit(1)}})),R.command("build").description("Build flow node project").option("--id <string>","Build identifier").option("--buildId <string>","Specific build ID (alias: bid)").addOption(new _("--mode <mode>","Build mode").choices(["all","file","build","deploy","bpmn"]).default("build")).option("--ftag <tags...>","Filter tags (specify multiple times or space-separated)").action((async e=>{try{const t=await N(e),n=new O(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)}})),R.command("deploy").description("Build and deploy flow node project").option("--id <string>","Build identifier").option("--buildId <string>","Specific build ID").option("--ftag <tags...>","Filter tags").action((async e=>{try{const t=await N({...e,mode:"all"}),n=new O(t);await n.init(),await n.build(),console.log("Building and deploying library succeeded!"),process.exit(0)}catch(e){console.error("Building/deploying library failed!",e.message),process.exit(1)}})),R.command("file").description("Just create files (part of build process)").option("--id <string>","Build identifier").option("--buildId <string>","Specific build ID").option("--ftag <tags...>","Filter tags").action((async e=>{try{const t=await N({...e,mode:"file"}),n=new O(t);await n.init(),await n.build(),console.log("Creating files succeeded!"),process.exit(0)}catch(e){console.error("Creating files failed!",e.message),process.exit(1)}})),R.command("input").description("Create or modify an input config file").argument("[name]","Optional input configuration name (e.g., dev, prod)").action((async(e,t)=>{try{const n=await N({...t,name:e}),{project:r}=n,{projectDir:o,projectFileParsed:i}=r,a=i.input;if(!a)throw new Error("Config schema not found in project file.");let s=e;if(!s){s=(await h({type:"input",name:"inputName",message:"Input name:",initial:"dev"})).inputName}const c=b.resolve(o,".fnet");k.existsSync(c)||k.mkdirSync(c);const p=b.resolve(c,`${s}.fnet`),l=k.existsSync(p),d=await E({schema:a,format:"yaml",ref:l?p:void 0});k.writeFileSync(p,d),console.log(`Input config '${s}.fnet' ${l?"updated":"created"}.`)}catch(e){console.error(e.message),process.exit(1)}})),F(R,{bin:"npm"}),F(R,{bin:"node"}),F(R,{bin:"bun"}),F(R,{name:"serve",bin:"npm",preArgs:["run","serve"]}),F(R,{name:"watch",bin:"npm",preArgs:["run","watch"]}),F(R,{name:"app",bin:"npm",preArgs:["run","app"]}),F(R,{name:"cli",bin:"npm",preArgs:["run","cli"]}),F(R,{bin:"npx"}),F(R,{bin:"cdk"}),F(R,{bin:"aws"}),function(e,{name:t,preArgs:n=[]}){e.command(t).description("Run a command with environment variables from a .fnet config file.").argument("<config>","Name of the .fnet config file (without extension)").argument("<command>","The command to execute").argument("[command_args...]","Arguments for the command").option("--ftag <tags...>","Filter tags for loading config").allowUnknownOption().action((async(e,t,r,o)=>{try{const i=await N(o),{projectDir:a}=i,s=await A({name:e,dir:a,transferEnv:!1,optional:!0,tags:i.tags}),c=s?.data?.env||{},p=y(t,[...n,...r],{cwd:k.existsSync(a)?a:g,stdio:"inherit",shell:!0,env:{...process.env,...c}});p.on("close",(e=>{process.exit(e)})),p.on("error",(e=>{"ENOENT"===e.code?console.error(`Error: Command not found: '${t}'. Is it installed or in your PATH?`):console.error(`Failed to start command '${t}':`,e),process.exit(1)}))}catch(e){console.error(e.message),process.exit(1)}}))}(R,{name:"with"}),function(e,{name:t,preArgs:n=[]}){e.command(t).description("Run a command group defined in node.yaml.").argument("<group>","Name of the command group in node.yaml commands section").option("--ftag <tags...>","Filter tags for loading project config").action((async(e,t)=>{try{const n=await N(t),{project:r}=n,{projectFileParsed:o}=r,i=o.commands;if(!i)throw new Error("`commands` section not found in project file (node.yaml).");const a=i[e];if(!a)throw new Error(`Command group '${e}' not found in project file.`);await $({commands:a}),process.exit(0)}catch(t){console.error(`Error running command group '${e}':`,t.message),process.exit(1)}}))}(R,{name:"run"}),M(R,{name:"python"}),M(R,{name:"python3"}),M(R,{name:"pip"}),M(R,{name:"pip3"}),R.parse(process.argv),process.argv.slice(2).length||R.outputHelp(),Vt}(),jn=W(bn);module.exports=jn;
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var e=require("child_process"),t=require("@fnet/prompt"),n=require("node:fs"),o=require("node:path"),i=require("@fnet/config"),r=require("path"),s=require("yargs/yargs"),a=require("fs"),c=require("yaml"),p=require("@fnet/shelljs"),l=require("@fnet/yaml"),d=require("@fnet/object-from-schema"),f=require("@fnet/shell-flow"),m=require("@flownet/lib-render-templates-dir"),u=require("nunjucks"),h=require("lodash.clonedeep"),y=require("isobject"),g=require("redis"),w=require("@flownet/lib-is-redis-online"),b=require("node:crypto"),v=require("@flownet/lib-atom-api-js"),x=require("lodash.merge"),k=require("@flownet/lib-parse-imports-js"),j=require("@fnet/npm-list-versions"),_=require("@fnet/npm-pick-versions"),D=require("object-hash"),E=require("ajv/dist/2020.js"),P=require("ajv/dist/standalone/index.js"),S=require("ajv-formats"),T=require("semver"),$=require("@fnet/up-list-files"),A=require("node:os"),O=require("@node-red/util"),N=require("@flownet/lib-to-ios-app"),C=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),F=require("@flownet/lib-to-webos"),R=require("@flownet/lib-to-nextjs"),M=require("@flownet/lib-to-docker"),q=require("form-data"),B=require("@fnet/to-rust"),K=require("@fnet/to-pyip"),L=require("@flownet/lib-parse-node-url"),J=require("bpmn-moddle"),U=require("dagre"),z=require("@fnet/expression"),W=require("chalk"),G=require("@fnet/list-files"),X=require("@fnet/key-value-transformer"),H=require("lodash.pick"),V=require("lodash.omit");function Y(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Z(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var t=e.default;if("function"==typeof t){var n=function e(){return this instanceof e?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach((function(t){var o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,o.get?o:{enumerable:!0,get:function(){return e[t]}})})),n}var Q,ee,te,ne,oe,ie,re,se,ae,ce,pe,le,de,fe,me,ue,he,ye,ge,we,be,ve,xe,ke,je,_e,De,Ee,Pe,Se,Te,$e,Ae,Oe,Ne,Ce,Ie,Fe,Re,Me,qe,Be,Ke,Le,Je,Ue,ze,We,Ge,Xe,He,Ve,Ye,Ze,Qe,et,tt,nt,ot,it,rt,st,at,ct,pt,lt,dt,ft,mt,ut,ht,yt,gt,wt,bt,vt,xt,kt,jt,_t,Dt,Et,Pt,St,Tt,$t,At,Ot,Nt,Ct,It,Ft,Rt,Mt,qt,Bt,Kt,Lt,Jt={},Ut=Z(Object.freeze({__proto__:null,default:e=>{const t=process.env.PATH||"",i="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],r=t.split(o.delimiter);for(const t of r)for(const r of i){const i=o.join(t,"win32"===process.platform?e+r:e);if(n.existsSync(i))return i}return null}}));function zt(){if(ie)return oe;ie=1;const e=x;return oe=({feature:t,features:n,packageDevDependencies:o})=>{const{name:i,packages:r,options:s,extraCheck:a,explicit:c}=t,p=`${i}_enabled`,l=n.rollup_output||{},d=Object.keys(l);let f=s||{};const m=n[i]?.options;m&&(f=e(f,m));const u=!n[i]||!1===n[i]?.enabled;d.forEach((e=>{const t=n.rollup_output[e];if(t){if(Reflect.has(t,i)){if(u||!t[i]||!1===t[i]?.enabled)return void delete t[i];!0===t[i]&&(t[i]={enabled:!0,options:f})}else{if(u||c||!1===n[p])return;t[i]={enabled:!0}}t[i]=t[i]||{},t[i].options={...f,...t[i].options}}}));let h=d.some((e=>!0===n.rollup_output[e][i]?.enabled));a&&(h=a()&&h),n[p]=h,h&&r.forEach((e=>o.push({package:e[0],version:e[1]})))},oe}function Wt(){if(Oe)return Ae;Oe=1;const e=x,t=n,i=o,r=k,s=function(){if(se)return re;se=1;const e=zt();return re=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})},re}(),a=function(){if(ce)return ae;ce=1;const e=zt();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}(),c=function(){if(le)return pe;le=1;const e=zt();return pe=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})},pe}(),p=function(){if(fe)return de;fe=1;const e=zt();return de=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})},de}(),l=function(){if(ue)return me;ue=1;const e=zt();return me=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})},me}(),d=function(){if(ye)return he;ye=1;const e=zt();return he=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})},he}(),f=function(){if(we)return ge;we=1;const e=zt();return ge=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:i,packageDevDependencies:o})},ge}(),m=function(){if(ve)return be;ve=1;const e=zt();return be=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:i,packageDevDependencies:o})},be}(),u=function(){if(ke)return xe;ke=1;const e=zt();return xe=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:i,packageDevDependencies:o})},xe}(),h=function(){if(_e)return je;_e=1;const e=zt();return je=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})},je}(),y=function(){if(Ee)return De;Ee=1;const e=zt();return De=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features;e({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:i,packageDevDependencies:o})},De}(),g=function(){if(Se)return Pe;Se=1;const e=zt();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($e)return Te;$e=1;const e=zt();return Te=t=>{const{atom:n,packageDevDependencies:o}=t,i=n.doc.features,r=i.css&&!1!==i.css.enabled;let s=[];r&&(s.push(["rollup-plugin-postcss","^4"]),s.push(["sass","^1.66"]),(i.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":s.push(["postcss-import","^15"]);break;case"postcss-url":s.push(["postcss-url","^10"]);break;case"postcss-preset-env":s.push(["postcss-preset-env","^9"]);break;case"autoprefixer":s.push(["autoprefixer","^10"]);break;case"cssnano":s.push(["cssnano","^6"])}}))),e({feature:{name:"css",packages:s},features:i,packageDevDependencies:o})},Te}();function b({dir:e,name:n="index"}){let o=i.resolve(e,`./${n}.tsx`);if(t.existsSync(o)||(o=i.resolve(e,`./${n}.ts`)),t.existsSync(o)||(o=i.resolve(e,`./${n}.jsx`)),t.existsSync(o)||(o=i.resolve(e,`./${n}.js`)),!t.existsSync(o))return{};const r=o,s=i.extname(o);return{file:r,ext:s,ts:".ts"===s||".tsx"===s,name:n}}return Ae=async t=>{const{atom:n,context:o,setProgress:v}=t;v("Initializing features..."),n.doc.features=n.doc.features||{};const x=n.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;const k=i.resolve(o.project.projectDir),j=b({dir:i.resolve(k,"./app")});if(j.file){v("Parsing app entry imports...");let e=await r({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 r({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 _=b({dir:i.resolve(k,"./cli")});if(_.file){v("Parsing cli entry imports...");let e=await r({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 r({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"===n.type){const e=b({dir:i.resolve(k,"./src")});if(e.file){v("Parsing src entry imports...");let t=await r({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 r({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,E=Reflect.has(x,"cli_entry_uses_jsx")?!0===x.cli_entry_uses_jsx:!0===x.src_entry_uses_jsx;x.form_enabled=D||E||!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===n.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:E}:x.cli={enabled:!0,extend:!0===x.cli_has_entry,export:!0,react:E,...x.cli||{}},x.cli.enabled=!0===x.cli.enabled&&(!1===n.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 P={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,terser:!1,enabled:!1!==x.esm,copy:!0},iife:{format:"iife",context:x.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===x.iife,terser:!0,copy:!1}};!0===x.webos&&(P.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&&(P.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&&(P.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&&(P.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&&(P.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}`,P.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",browsersync:!0}),!0===x.cli.enabled&&(x.cli.dir=`./dist/cli/${x.cli.folder}`,P.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 S={server:".",startPath:`${i.normalize(x.app.dir||".")}`,files:[i.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(S,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(P,x.rollup_output||x.rollup?.output||{}),x.preact_enabled=!0===x.preact||x.preact&&!1!==x.preact?.enabled;let T=Object.keys(P);for(const t of T){const n=P[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||x.babel)&&(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),g(t),y(t),h(t),u(t),f(t),m(t),d(t),l(t),p(t),c(t),s(t),a(t)},Ae}function Gt(){if(Ce)return Ne;Ce=1;const e=j;return Ne=async({atom:t,packageDependencies:n,packageDevDependencies:o,setProgress:i})=>{i("Initializing dependencies");const r=t.doc.dependencies||[];if(r.filter((e=>!e.dev)).forEach((e=>n.push(e))),r.filter((e=>e.dev)).forEach((e=>o.push(e))),"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:"@fnet/react-app",version:"^0.1"}),n.push({package:"@fnet/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:"^16"}),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"})},Ne}function Xt(){if(Fe)return Ie;Fe=1;const e=n,t=o,i=m;return Ie=async({atom:n,setProgress:o,context:r,packageDependencies:s})=>{if(!0!==n.doc.features.app.enabled)return;await o({message:"Creating app folder"});const a={atom:n,packageDependencies:s,ts:Date.now()},c=r.templateDir,p=t.resolve(r.projectDir,"src/app");e.existsSync(p)||e.mkdirSync(p,{recursive:!0});let l=["index.js.njk"];!1!==n.doc.features.app.html&&l.push("index.html.njk"),await i({pattern:l,dir:t.resolve(c,"src/app"),outDir:p,context:a})},Ie}function Ht(){if(Me)return Re;Me=1;const e=_,t=D,i=n,r=o;return Re=async({projectDir:n,name:o,setProgress:s,count:a=1})=>{let c;const p=t(["npm-pick-versions",o,a]),l=r.join(n,".cache"),d=r.join(l,p+".json");return i.existsSync(d)?(s&&s(`Picking npm version of ${o} from cache ...`),c=JSON.parse(i.readFileSync(d,"utf8"))):(s&&s(`Picking npm version of ${o} ...`),c=await e({name:o,count:a}),i.mkdirSync(l,{recursive:!0}),i.writeFileSync(d,JSON.stringify(c),"utf8")),c},Re}function Vt(){if(Be)return qe;Be=1;const e=u,t=n,i=o,r=k,s=Ht();return qe=async({atom:n,context:o,packageDependencies:a,packageDevDependencies:c,setProgress:p})=>{await p({message:"Creating package.json."});a.filter((e=>!0===e.dev)).forEach((e=>{c.find((t=>t.package===e.package))||c.push(e);const t=a.findIndex((t=>t.package===e.package));a.splice(t,1)}));const l=a.find((e=>"react"===e.package)),d=a.find((e=>"react-dom"===e.package));l&&!d?a.push({package:"react-dom",version:l.version}):l&&d&&(d.version=l.version),l&&n.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const f=[];!0===n.doc.features.app.enabled&&f.push({file:i.resolve(o.projectDir,"src/app/index.js"),dev:!1!==n.doc.features.app.dev}),!0===n.doc.features.cli.enabled&&f.push({file:i.resolve(o.projectDir,"src/cli/index.js"),dev:!1!==n.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 i=(await r({file:n,recursive:!0})).all;for await(const t of i){if("npm"!==t.type)continue;if(a.find((e=>e.package===t.package)))continue;if(c.find((e=>e.package===t.package)))continue;const n=await s({name:t.package,projectDir:o.projectDir,setProgress:p});(!0===e.dev?c:a).push({package:t.package,subpath:t.subpath,version:n.minorRange,type:"npm"})}}const m={atom:n,packageDependencies:a,packageDevDependencies:c},u=o.templateCommonDir,h=e.compile(t.readFileSync(i.resolve(u,"package.json.njk"),"utf8"),e.configure(u)).render(m),y=o.projectDir,g=i.resolve(y,"package.json");t.writeFileSync(g,h,"utf8");const w=i.resolve(o.project.projectDir,"fnet");if(t.existsSync(w)){const e=i.resolve(o.projectDir,"fnet");t.existsSync(e)||t.mkdirSync(e);const n=t.readdirSync(w);for(const o of n){const n=i.resolve(w,o);if(!t.lstatSync(n).isFile())continue;const r=i.resolve(e,o);t.copyFileSync(n,r)}}},qe}function Yt(){if(Le)return Ke;Le=1;const e=n,t=o,i=m;return Ke=async({atom:n,setProgress:o,context:r,packageDependencies:s})=>{if(!0!==n.doc.features.cli.enabled)return;await o({message:"Creating cli."});const a={atom:n,packageDependencies:s},c=r.templateDir,p=t.resolve(r.projectDir,"src/cli");e.existsSync(p)||e.mkdirSync(p,{recursive:!0}),await i({pattern:["index.js.njk"],dir:t.resolve(c,"src/cli"),outDir:p,context:a})},Ke}function Zt(){if(Ue)return Je;Ue=1;const e=n,t=o,i=u,r=k;return Je=async({atom:n,setProgress:o,context:s,packageDependencies:a})=>{await o({message:"Creating rollup file."});const c={atom:n,packageDependencies:a},p=t.resolve(s.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=n.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&&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=s.templateCommonDir;let u=i.compile(e.readFileSync(t.resolve(m,"rollup.config.mjs.njk"),"utf8"),i.configure(m)).render(c);const h=s.projectDir;let y=t.resolve(h,"rollup.config.mjs");e.writeFileSync(y,u,"utf8")},Je}function Qt(){if(We)return ze;We=1;const e=n,t=o,i=u,r=E,s=P,a=S;return ze=async({atom:n,setProgress:o,context:c,njEnv:p})=>{if(!0!==n.doc.features.cli.enabled)return;await o({message:"Creating yargs."});let l={};if(l=n.doc.input?n.doc.input:{type:"object",properties:{},required:[]},n.doc.features.cli.fargs&&!1!==n.doc.features.cli.fargs?.enabled){const e=n.doc.features.cli.fargs,t={type:"string",description:"Config name to load args",hidden:!1},o={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=o)}const d={options:l,imports:[],atom:n},f=c.templateDir,m=i.compile(e.readFileSync(t.resolve(f,"src/default/to.args.js.njk"),"utf8"),p).render(d),u=c.projectDir,h=t.resolve(u,"src/default/to.args.js");e.writeFileSync(h,m,"utf8");const y=new r({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});a(y);const g=y.compile(l),w=s(y,g);e.writeFileSync(t.resolve(u,"src/default/validate_input.js"),w,"utf8")},ze}function en(){if(Xe)return Ge;Xe=1;const e=n,t=o,i=u;return Ge=async({atom:n,setProgress:o,context:r,packageDependencies:s})=>{await o({message:"Creating .gitignore"});const a={atom:n,packageDependencies:s},c=r.templateCommonDir,p=i.compile(e.readFileSync(t.resolve(c,".gitignore.njk"),"utf8"),i.configure(c)).render(a),l=r.projectDir,d=t.resolve(l,".gitignore");e.writeFileSync(d,p,"utf8")},Ge}function tn(){if(Ve)return He;Ve=1;const e=n,t=o,i=u;return He=async({atom:n,setProgress:o,context:r,packageDependencies:s})=>{await o({message:"Creating tsconfig.json."});const a={atom:n,packageDependencies:s},c=r.templateCommonDir,p=i.compile(e.readFileSync(t.resolve(c,"tsconfig.json.njk"),"utf8"),i.configure(c)).render(a),l=r.projectDir,d=t.resolve(l,"tsconfig.json");e.writeFileSync(d,p,"utf8")},He}function nn(){if(Ze)return Ye;Ze=1;const e=u,t=n,i=o,r=l;return Ye=async({atom:n,context:o,setProgress:s,Atom:a})=>{const c="readme.md",p=`Creating ${c}`;if(await s({message:p}),o.project?.readme){const n=o.projectDir,s={content:o.project.readme.doc.content},a=i.resolve(o.project.projectDir,"fnet/how-to.md");if(t.existsSync(a)){const e=t.readFileSync(a,"utf8");s.howto=e}const p=i.resolve(o.project.projectDir,"fnet/input.yaml");if(t.existsSync(p)){const e=await r({file:p,tags:o.tags});s.input=e.content}const l=o.templateCommonDir,d=e.compile(t.readFileSync(i.resolve(l,`${c}.njk`),"utf8"),e.configure(l)).render(s),f=i.resolve(n,`${c}`);t.writeFileSync(f,d,"utf8")}else if(n.id){const r=await a.first({type:"wiki",parent_id:n.id});if(!r||"markdown"!==r.doc?.["content-type"])return;const{content:s,...p}=r.doc,l={content:s},d=o.templateCommonDir,f=e.compile(t.readFileSync(i.resolve(d,`${c}.njk`),"utf8"),e.configure(d)).render(l),m=o.projectDir,u=i.resolve(m,`${c}`);t.writeFileSync(u,f,"utf8")}},Ye}function on(){if(et)return Qe;et=1;const e=r,t=f;return Qe=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 rn(){if(nt)return tt;nt=1;const e=p;return tt=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!==(await e("tsc",{cwd:i})).code)throw new Error("Couldnt create .d.ts files.")},tt}function sn(){if(it)return ot;it=1;const e=p,t=Ut;return ot=async({setProgress:n,atom:o,context:i})=>{const r=i.projectDir;await n({message:"Installing npm packages."});const s=t("bun")?"bun":"npm";if(0!==(await e(`${s} install ${o.doc.features.npm_install_flags}`,{cwd:r})).code)throw new Error("Couldnt install npm packages.")},ot}function an(){if(st)return rt;st=1;const e=p;return rt=async({setProgress:t,context:n})=>{const o=n.projectDir;await t({message:"Building main project."});if(0!==(await e("npm run build",{cwd:o})).code)throw new Error("Couldnt build project.")}}function cn(){if(Lt)return Kt;Lt=1;const e=function(){if(ct)return at;ct=1;const e=p,t=i;return at=async({setProgress:n,context:o,deploymentProject:i,deploymentProjectTarget:r,buildId:s})=>{await n({message:"Deploying it as gitlab project."});const a=o.projectDir;let c="fnet-to-gitlab";const p=r.params.config||"gitlab",l=await t({name:p,dir:o.projectDir,tags:o.tags});if(!l)throw new Error(`Couldnt load config ${p}`);const{data:d}=l.data;c+=` --projectGroupId=${d.projectGroupId}`,c+=` --projectPath='${a}'`,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(c),i.isDirty=!0)}}(),t=function(){if(lt)return pt;lt=1;const e=n,t=o,r=T,s=p,a=i;return pt=async({setProgress:n,context:o,deploymentProject:i,deploymentProjectTarget:c,registerToPackageManager:p,yamlTarget:l})=>{await n({message:"Deploying it as gcs package."});const d=o.projectDir,f=t.resolve(d,"package.json"),m=e.readFileSync(f),u=JSON.parse(m);u.name=c.params.name,u.version=r.inc(c.version,"patch"),delete u.scripts,delete u.devDependencies,e.writeFileSync(f,JSON.stringify(u,null,"\t"));const{file:h,data:y}=await a({name:c.config||"gcs",dir:o.projectDir,tags:o.tags});let g="fnet-files-to-gcs";g+=` --projectId='${y.env.GCS_PROJECT_ID}'`,g+=` --bucketName='${y.env.GCS_BUCKET_NAME}'`,g+=` --keyFilename='${t.resolve(t.dirname(h),y.env.GCS_UPLOADER_KEY_FILE)}'`,g+=` --dir='${d}'`,g+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",g+=` --destDir='${u.name}/${u.version}'`,g+=" --metadata.cacheControl='public, max-age=31536000, immutable'",y.env.DOMAIN&&(g+=` --domain='${y.env.DOMAIN}'`),!0!==c.dry_run&&!0!==c.params.dry_run||(g+=" --dryRun"),await s(g),e.writeFileSync(f,m),!0!==c.dryRun&&(i.isDirty=!0,c.version=u.version,l.set("version",u.version),await p({target:c,packageJSON:u}))}}(),s=function(){if(ft)return dt;ft=1;const e=n,t=o,r=T,s=p,a=i,l=$,f=d,m=c,u=Ut;return dt=async({atom:n,setProgress:o,context:i,deploymentProject:c,deploymentProjectTarget:p,yamlTarget:d})=>{await o({message:"Deploying it as npm package."});const h=i.projectDir,y=t.resolve(h,"package.json"),g=e.readFileSync(y),w=JSON.parse(g);w.name=p.params.name,w.version=r.inc(p.version,"patch");const b=p.params.bin?.name||p.params.bin;!1!==p.params.bin?.enabled&&b&&"string"==typeof b&&(w.bin={[b]:"dist/cli/esm/index.js"}),delete w.scripts,delete w.devDependencies,w.scripts={serve:"npx serve ."},e.writeFileSync(y,JSON.stringify(w,null,"\t"));const v=p.config||"npm";let x=(await a({name:v,dir:i.projectDir,tags:i.tags,optional:!0}))?.data;if(!x){const n=l({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===n.length)throw new Error("Couldnt find schema to create npm config");const o=await f({schema:n[0],tags:i.tags}),r=i.project.projectDir,s=t.resolve(r,".fnet");e.existsSync(s)||e.mkdirSync(s),e.writeFileSync(t.resolve(s,`${v}.fnet`),m.stringify(o)),x=o}if(e.writeFileSync(t.resolve(h,".npmrc"),`//registry.npmjs.org/:_authToken=${x.env.NPM_TOKEN}`),!0===p.dryRun)return;const k=u("bun")?"bun":"npm";if(0!==(await s(`${k} publish --access public`,{cwd:h})).code)throw new Error("Couldnt publish to npm");e.writeFileSync(y,g),c.isDirty=!0,p.version=w.version,d.set("version",w.version)}}(),l=function(){if(ut)return mt;ut=1;const e=n,t=o,r=A,s=u,a=O,c=i;return mt=async({atom:n,setProgress:o,context:i,deploymentProject:p,deploymentProjectTarget:l,buildId:d,packageDependencies:f,njEnv:m})=>{await o({message:"Deploying it as node-red flow."});const u=i.projectDir,h=i.templateDir,y="workflow"===n.type?"WF":"LIB";let g;if("simple"===l.deploy.template)g={atom:n,packageDependencies:f,red:{tab:{id:l.deploy.id||a.util.generateId(),label:`${y}/${n.id?n.id:r.hostname()}/${n.name}/${l.deploy.name||l.deploy.template}`},function:{id:a.util.generateId(),name:n.doc.name,initialize:{content:e.readFileSync(t.resolve(u,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:n.doc.bundleName}},inject:{id:a.util.generateId(),...l.params?.inject,payload:"json"===l.params?.inject?.payloadType?`'${JSON.stringify(l.params?.inject?.payload)}'`:l.params?.inject?.payload},debug:{id:a.util.generateId()}}};else if("cronjob"===l.deploy.template){let o=l.params?.schedules?cloneDeep(l.params?.schedules):void 0;o?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),g={atom:n,packageDependencies:f,red:{tab:{id:l.deploy.id||a.util.generateId(),label:`${y}/${n.id?n.id:r.hostname()}/${l.deploy.name||l.deploy.template}`},function:{id:a.util.generateId(),name:n.doc.name,initialize:{content:e.readFileSync(t.resolve(u,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:n.doc.bundleName}},cronjob:{id:a.util.generateId(),schedules:o},debug:{id:a.util.generateId()}}}}else{if("http"!==l.deploy.template)return;g={atom:n,packageDependencies:f,red:{tab:{id:l.deploy.id||a.util.generateId(),label:`${y}/${n.id?n.id:r.hostname()}/${l.deploy.name||l.deploy.template}`},function:{id:a.util.generateId(),name:n.doc.name,initialize:{content:e.readFileSync(t.resolve(u,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:n.doc.bundleName}},httpin:{id:a.util.generateId(),method:l.params.method||"get",url:l.params.url},httpout:{id:a.util.generateId()},debug:{id:a.util.generateId()}}}}let w=s.compile(e.readFileSync(t.resolve(h,`deploy/node-red/${l.deploy.template}.yaml.njk`),"utf8"),m).render(g);if(e.writeFileSync(t.resolve(u,"node-red.yaml"),w),w=yaml.load(w),!0===l.dryRun)return;p.isDirty=!0;const b=(await c({name:i.redConfig||"red",dir:i.projectDir,tags:i.tags}))?.data,v=l.deploy.url||b.env.RED_URL,x={};if(!1!==l.deploy.auth&&(x.Authorization="Bearer "+atomAccessToken),l.deploy.id)if(!0===l.actions?.delete){const e=await fetch(`${v}/flow/${l.deploy.id}`,{method:"DELETE",headers:x});if(!e.ok)throw new Error(`Failed to delete flow: ${e.statusText}`);delete l.actions.delete,delete l.deploy.id,l.enabled=!1}else{const e=await fetch(`${v}/flow/${l.deploy.id}`,{method:"PUT",headers:{...x,"Content-Type":"application/json"},body:JSON.stringify(w)});if(!e.ok)throw new Error(`Failed to update flow: ${e.statusText}`)}else{const e=await fetch(`${v}/flow`,{method:"POST",headers:{...x,"Content-Type":"application/json"},body:JSON.stringify(w)});if(!e.ok)throw new Error(`Failed to create flow: ${e.statusText}`);const t=await e.json();l.deploy.id=t.id}},mt}(),f=function(){if(yt)return ht;yt=1;const e=a,t=r,n=i;return ht=async({atom:o,Atom:i,setProgress:r,context:s,packageDependencies:a,deploymentProject:c,deploymentProjectTarget:p})=>{await r({message:"Deploying it as workflow lib."});const l=(await n({name:"atom",dir:s.projectDir,tags:s.tags}))?.data;let d,f,m,u=p.deploy.name.split("/");if(1===u.length)f=l.env.ATOM_LIBRARIES_ID,m=p.deploy.name;else{if(2!==u.length)throw new Error("Wrong name path.");{const e=await i.first({where:{name:u[0],parent_id:l.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");f=e.id,m=u[1]}}if(!0===p.dryRun)return;if(c.isDirty=!0,p.deploy.id){if(d=await i.get({id:p.deploy.id}),!d)return}else{if(d=await i.create({parent_id:f,doc:{name:m,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!d)return;p.deploy.id=d.id}const h=s.projectDir;d.doc.contents=[{content:e.readFileSync(t.resolve(h,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:e.readFileSync(t.resolve(h,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:e.readFileSync(t.resolve(h,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],d.doc.name=m,d.doc.dependencies=a,"workflow.lib"===o.type?d.doc.subtype="library":"workflow"===o.type&&(d.doc.subtype="workflow"),d=await i.update(d,{id:d.id})},ht}(),m=function(){if(wt)return gt;wt=1;const e=i,t=N,n=h,o=T;return gt=async({atom:i,target:r,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as ios-app package."});const d=r?.config?await e({name:r.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,l.set("version",f);const m=n(r.params);m.dependencies=n(c);const u={atom:i,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},gt}(),y=function(){if(vt)return bt;vt=1;const e=i,t=C,n=h,o=T;return bt=async({atom:i,target:r,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as macos-app package."});const d=r?.config?await e({name:r.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,l.set("version",f);const m=n(r.params);m.dependencies=n(c);const u={atom:i,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},bt}(),g=function(){if(kt)return xt;kt=1;const e=i,t=I,n=h,o=T;return xt=async({atom:i,target:r,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as electron package."});const d=r?.config?await e({name:r.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,l.set("version",f);const m=n(r.params);m.dependencies=n(c);const u={atom:i,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},xt}(),w=function(){if(_t)return jt;_t=1;const e=i,t=F,n=h,o=T;return jt=async({atom:i,target:r,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as webos package."});const d=r?.config?await e({name:r.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,l.set("version",f);const m=n(r.params);m.dependencies=n(c);const u={atom:i,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},jt}(),b=function(){if(Et)return Dt;Et=1;const e=i,t=R,n=h,o=T;return Dt=async({atom:i,target:r,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as nextjs package."});const d=r?.config?await e({name:r.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,l.set("version",f);const m=n(r.params);m.dependencies=n(c);const u={atom:i,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},Dt}(),v=function(){if(St)return Pt;St=1;const e=i,t=M,n=h,o=T;return Pt=async({atom:i,target:r,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as docker package."});const d=r?.config?await e({name:r.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,l.set("version",f);const m=n(r.params);m.dependencies=n(c);const u={atom:i,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},Pt}(),x=function(){if($t)return Tt;$t=1;const e=n,t=o,r=T,s=p,a=i;return Tt=async({setProgress:n,context:o,deploymentProject:i,deploymentProjectTarget:c,yamlTarget:p})=>{await n({message:"Deploying it as fnet package."});const l=o.projectDir,d=t.resolve(l,"package.json"),f=e.readFileSync(d),m=JSON.parse(f);m.name=c.params.name,m.version=r.inc(c.version,"patch"),delete m.scripts,delete m.devDependencies,e.writeFileSync(d,JSON.stringify(m,null,"\t"));const{file:u,data:h}=await a({name:c.config||"fnet-package",dir:o.projectDir,tags:o.tags});if(!h.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${u}`);if(!h.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${u}`);if(!h.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${u}`);const y=`${h.env.ATOM_API_URL}/v1/auth/token`,g=h.env.ATOM_API_USERNAME,w=h.env.ATOM_API_PASSWORD,b=await fetch(y,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:g,password:w})});if(!b.ok)throw new Error(`Failed to fetch token: ${b.statusText}`);const v=await b.json(),x=v?.access_token;if(!x)throw new Error(`Invalid access_token from ${y}`);let k="fnet-files-to-gcs";if(k+=` --projectId='${h.env.GCS_PROJECT_ID}'`,k+=` --bucketName='${h.env.GCS_BUCKET_NAME}'`,k+=` --keyFilename='${t.resolve(t.dirname(u),h.env.GCS_UPLOADER_KEY_FILE)}'`,k+=` --dir='${l}'`,k+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",k+=` --destDir='${m.name}/${m.version}'`,k+=" --metadata.cacheControl='public, max-age=31536000, immutable'",h.env.DOMAIN&&(k+=` --domain='${h.env.DOMAIN}'`),!0!==c.dry_run&&!0!==c.params.dry_run||(k+=" --dryRun"),await s(k),e.writeFileSync(d,f),!0===c.dryRun)return;i.isDirty=!0,c.version=m.version,p.set("version",m.version);const j=`${h.env.ATOM_API_URL}/v1/service/fnet-package/publish`,_=await fetch(j,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${x}`},body:JSON.stringify({name:m.name,version:m.version,version_domain:h.env.DOMAIN,docs:c.params.docs,configs:c.params.configs})});if(!_.ok)throw new Error(`Failed to publish fnet package: ${_.statusText}`);const D=await _.json();if(D?.error)throw new Error("Failed to publish fnet package.")}}(),k=function(){if(Ot)return At;Ot=1;const e=T,t=i;return At=async({setProgress:n,context:o,deploymentProject:i,deploymentProjectTarget:r,yamlTarget:s})=>{await n({message:"Deploying it as fnet form."});const{file:a,data:c}=await t({name:r.config||"fnet-form",dir:o.projectDir,tags:o.tags});if(!c.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!c.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!c.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const p=`${c.env.ATOM_API_URL}/v1/auth/token`,l=c.env.ATOM_API_USERNAME,d=c.env.ATOM_API_PASSWORD,f=await fetch(p,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:l,password:d})});if(!f.ok)throw new Error(`Failed to fetch token: ${f.statusText}`);const m=await f.json(),u=m?.access_token;if(!u)throw new Error(`Invalid access_token from ${p}`);i.isDirty=!0;const h=e.inc(r.version,"patch");r.params.version=h,r.version=h,s.set("version",h);const y=`${c.env.ATOM_API_URL}/v1/service/fnet-form/publish`,g=await fetch(y,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${u}`},body:JSON.stringify({name:r.params.name,version:r.params.version,docs:r.params.docs,configs:r.params.configs})});if(!g.ok)throw new Error(`Error publishing fnet form: ${g.statusText}`);const w=await g.json();if(w?.error)throw new Error("Error publishing fnet form.")}}(),j=function(){if(Ct)return Nt;Ct=1;const e=T,t=i,n=a,o=p,r=q;return Nt=async({setProgress:i,context:s,deploymentProject:a,deploymentProjectTarget:c,yamlTarget:p})=>{await i({message:"Deploying it as fnet flow."});const{file:l,data:d}=await t({name:c.config||"fnet-flow",dir:s.project.projectDir,tags:s.tags});if(!d.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!d.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!d.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const f=`${d.env.ATOM_API_URL}/v1/auth/token`,m=d.env.ATOM_API_USERNAME,u=d.env.ATOM_API_PASSWORD,h=await fetch(f,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:m,password:u})});if(!h.ok)throw new Error(`Failed to fetch token: ${h.statusText}`);const y=await h.json(),g=y?.access_token;if(!g)throw new Error(`Invalid access_token from ${f}`);a.isDirty=!0;const w=e.inc(c.version,"patch");c.params.version=w,c.version=w,p.set("version",w);const b=`${d.env.ATOM_API_URL}/v1/service/fnet-flow/publish`,v=await fetch(b,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${g}`},body:JSON.stringify({name:c.params.name,version:c.params.version,docs:c.params.docs,configs:c.params.configs})});if(!v.ok)throw new Error(`Error publishing fnet flow: ${v.statusText}`);const x=await v.json();if(x?.error)throw new Error("Error publishing fnet flow.");const k=x?.upload.id;let j="fnet-dir-zipper";j+=` --sourceDir='${s.project.projectDir}'`,j+=" --pattern=**/*",j+=" --stdout_format=json";const _=await o(j);if(0!==_.code)throw new Error(_.stderr);const D=JSON.parse(_.stdout).path;let E=new r;E.append("file",n.createReadStream(D));const P=await fetch(`${d.env.ATOM_API_URL}/v1/service/upload/single/${k}`,{method:"POST",headers:{...E.getHeaders(),Authorization:`Bearer ${g}`},body:E});if(!P.ok)throw new Error(`Error uploading fnet flow: ${P.statusText}`);const S=await P.json();if(S?.error)throw new Error("Error uploading fnet flow.")}}(),_=function(){if(Ft)return It;Ft=1;const e=T,t=i,n=a,o=p,r=q;return It=async({setProgress:i,context:s,deploymentProject:a,deploymentProjectTarget:c,yamlTarget:p})=>{await i({message:"Deploying it as fnet node."});const{file:l,data:d}=await t({name:c.config||"fnet-node",dir:s.project.projectDir,tags:s.tags});if(!d.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!d.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!d.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const f=`${d.env.ATOM_API_URL}/v1/auth/token`,m=d.env.ATOM_API_USERNAME,u=d.env.ATOM_API_PASSWORD,h=await fetch(f,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:m,password:u})});if(!h.ok)throw new Error(`Failed to fetch token: ${h.statusText}`);const y=await h.json(),g=y?.access_token;if(!g)throw new Error(`Invalid access_token from ${f}`);a.isDirty=!0;const w=e.inc(c.version,"patch");c.params.version=w,c.version=w,p.set("version",w);const b=`${d.env.ATOM_API_URL}/v1/service/fnet-node/publish`,v=await fetch(b,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${g}`},body:JSON.stringify({name:c.params.name,version:c.params.version,docs:c.params.docs,configs:c.params.configs})});if(!v.ok)throw new Error(`Error publishing fnet node: ${v.statusText}`);const x=await v.json();if(x?.error)throw new Error("Error publishing fnet node.");const k=x?.upload.id;let j="fnet-dir-zipper";j+=` --sourceDir='${s.project.projectDir}'`,j+=" --pattern=**/*",j+=" --stdout_format=json";const _=await o(j);if(0!==_.code)throw new Error(_.stderr);const D=JSON.parse(_.stdout).path;let E=new r;E.append("file",n.createReadStream(D));const P=await fetch(`${d.env.ATOM_API_URL}/v1/service/upload/single/${k}`,{method:"POST",headers:{...E.getHeaders(),Authorization:`Bearer ${g}`},body:E});if(!P.ok)throw new Error(`Error uploading fnet node: ${P.statusText}`);const S=await P.json();if(S?.error)throw new Error("Error uploading fnet node.")}}(),D=function(){if(Mt)return Rt;Mt=1;const e=i,t=B,n=h,o=T;return Rt=async({atom:i,target:r,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as Rust package."});const d=r?.config?await e({name:r.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,l.set("version",f);const m=n(r.params);m.dependencies=n(c);const u={atom:i,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},Rt}(),E=function(){if(Bt)return qt;Bt=1;const e=i,t=K,n=h,o=T;return qt=async({atom:i,target:r,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as pypi package."});const d=r?.config?await e({name:r.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(r.version||"0.1.0","patch");r.params.version=f,r.version=f,l.set("version",f);const m=n(r.params);m.dependencies=n(c);const u={atom:i,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},qt}();return Kt=async n=>{const{atom:o,packageDependencies:i,context:r,deploymentProjectTarget:a,setProgress:c,deploymentProject:p,yamlTarget:d}=n;if(!0===a.enabled)if("lib"===a.type)await f({...n});else if("red"===a.type)await l({...n});else if("npm"===a.type)await s({...n});else if("gcs"===a.type)await t({...n});else if("gitlab"===a.type)await e({...n});else if("fnet-package"===a.type)await x({...n});else if("fnet-form"===a.type)await k({...n});else if("fnet-node"===a.type)await _({...n});else if("fnet-flow"===a.type)await j({...n});else{let e;if("nextjs"===a.type?e=b:"webos"===a.type?e=w:"electron"===a.type?e=g:"docker"===a.type?e=v:"ios"===a.type?e=m:"macos"===a.type?e=y:"rust"===a.type?e=D:"pypi"===a.type&&(e=E),!e)return;await e({atom:o,target:a,onProgress:c,projectDir:r.projectDir,dependencies:i,context:r,yamlTarget:d}),p.isDirty=!0}},Kt}var pn,ln,dn,fn,mn,un,hn,yn,gn,wn,bn,vn,xn,kn,jn,_n,Dn,En,Pn,Sn,Tn,$n,An,On,Nn,Cn,In,Fn,Rn,Mn,qn,Bn,Kn,Ln,Jn,Un,zn,Wn,Gn,Xn,Hn,Vn,Yn,Zn={name:"ATOM",uri:"http://atom.org/bpmn",prefix:"atom",types:[{name:"AtomExtension",extends:["bpmn:BaseElement"],properties:[{name:"atom",type:"atom:Atom",isMany:!1}]},{name:"Atom",properties:[{name:"type",type:"String",isAttr:!0}]}]};function Qn(){if(ln)return pn;ln=1;const e=J,t=U,n=h,o=Zn;function i(e,t){return e.filter(((e,n,o)=>o.map((e=>e[t])).indexOf(e[t])===n))}function r(e){const{nodes:t,nodeIndex:n,root:o}=e,i=e.targetNodes||o.childs;i.forEach((t=>{const n="workflow"===t.type||"subworkflow"===t.type,o=!n&&t.childs.filter((e=>!e.virtual)).length>0;if(o&&(t.bpmn.type="bpmn:SubProcess"),n||o){const n=t.childs.filter((e=>!0!==e.module))[0];t.childs.filter((e=>!0===e.module)).forEach((n=>{const o=s({...e,parent:t,bpmnType:"bpmn:IntermediateCatchEvent",type:"inter",definitions:[{type:"bpmn:SignalEventDefinition"}]});o.bpmn.edges=[{from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}));const o=t.childs.find((e=>"try"===e.name&&"tryexcept"===t.type)),r=t.childs.filter((e=>"except"===e.name&&"tryexcept"===t.type));o&&r.length&&r.forEach((n=>{const i=s({location:t.childs.indexOf(n),...e,parent:t,bpmnType:"bpmn:BoundaryEvent",type:"boundary",attrs:{attachedToRef:o},definitions:[{type:"bpmn:ErrorEventDefinition"}]});i.bpmn.edges=[{from:i.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}));const a=t.childs.find((e=>"raise"===e.type));if(a){const n=s({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:"ERROR",definitions:[{type:"bpmn:ErrorEventDefinition"}]});a.bpmn.edges=[{from:a.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}if(n)if(t.bpmn.starts.length>1){const n=s({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"}),o=s({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch"});n.bpmn.edges=[{from:n.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}],o.bpmn.edges=t.bpmn.starts.map((e=>({...e,from:o.indexKey})));const i=o.bpmn.edges.find((e=>!0===e.next));if(i){const n=s({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:i.to});i.to=n.indexKey}}else{const o=s({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"});o.bpmn.edges.push({from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"})}t.childs.filter((e=>!0!==e.virtual&&e.bpmn.outside.length&&"bpmn:EndEvent"!==e.bpmn.type)).forEach((n=>{n.bpmn.outside.forEach((o=>{const r=i.indexOf(t),a=s({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:o.to,location:r+1});n.bpmn.edges.push({from:n.indexKey,to:a.indexKey,type:"bpmn:SequenceFlow"})}))}));t.childs.filter((e=>!0!==e.virtual&&e.bpmn.edges.length>1)).forEach((n=>{const o=i.indexOf(n),r=s({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch",location:o+1});r.bpmn.edges=n.bpmn.edges.map((e=>({...e,from:r.indexKey}))),n.bpmn.edges=[{from:n.indexKey,to:r.indexKey,type:"bpmn:SequenceFlow"}],n.bpmn.outside=[]}))}r({...e,targetNodes:t.childs})}))}function s(e){const{parent:t,nodes:n,nodeIndex:o,bpmnType:i,type:r,name:s,outside:a,location:c,definitions:p,attrs:l}=e,d=t.childs.filter((e=>e.type===`v${r}`)).length,f={indexKey:`${t.indexKey}/_${r}${d}`,pathKey:`${t.pathKey}._${r}${d}`,type:`v${r}`,name:s,bpmn:{edges:[],outside:[],type:i,width:36,height:36,fill:"#c8e6c9",stroke:"#205022",definitions:p,attrs:l},virtual:!0,childs:[]};return t.childs.splice(c||0,0,f),n.push(f),o[f.indexKey]=f,f}function a(e){const{targetNode:n,targetFlowElementsContainer:o,targetPlaneElement:i,moddle:r,elementIndex:s,nodeIndex:c,diagrams:p,nodes:l}=e;!function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:r,nodeIndex:s,nodes:a}=e,c=n.get("flowElements");n.$nodes=n.$nodes||[],t.childs.forEach((e=>{const t=i.create(e.bpmn.type,{id:`node.${e.pathKey}`,name:e.definition?.title||e.name});if(r[t.id]=t,t.$isNode=!0,t.$node=e,e.$flow=t,n.$nodes.push(t),c.push(t),e.bpmn.attrs){Object.keys(e.bpmn.attrs).forEach((n=>{"attachedToRef"===n&&t.set(n,e.bpmn.attrs[n].$flow)}))}if(e.bpmn.definitions){const n=e.bpmn.definitions.map((e=>{const t=i.create(e.type);return Object.keys(e.attrs||{}).forEach((n=>{t.set(n,e.attrs[n])})),t}));t.eventDefinitions=n}}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:r,nodeIndex:s}=e,a=n.get("flowElements");n.$edges=n.$edges||[],t.childs.forEach((e=>{e.bpmn.edges.forEach((t=>{const o=e,c=s[t.to],p=`edge.${o.pathKey}_${c.pathKey}`;if(r[p])return;const l=r[`node.${o.pathKey}`],d=r[`node.${c.pathKey}`],f=i.create(t.type,{id:p,sourceRef:l,targetRef:d});r[f.id]=f,f.$is_edge=!0,l.get("outgoing").push(f),d.get("incoming").push(f),n.$edges.push({from:l,to:d,flow:f}),a.push(f)}))}))}(e),function(e){const{targetNode:n,targetFlowElementsContainer:o,targetPlaneElement:i,moddle:r,elementIndex:s,nodeIndex:a}=e,c=120,p=80,l=160,d=160,f=new t.graphlib.Graph;f.setDefaultEdgeLabel((()=>({}))),f.setGraph({rankdir:"TB",nodesep:c,ranksep:p,xranker:"longest-path"}),o.$nodes.forEach((e=>{f.setNode(e.id,{width:e.$node?.bpmn.width||c,height:e.$node?.bpmn.height||p,label:e.id})})),o.$edges.forEach((e=>{f.setEdge(e.from.id,e.to.id)})),t.layout(f),o.$nodes.forEach((e=>{const t=f.node(e.id);let n=t.width,o=t.height;const s=r.create("bpmndi:BPMNShape",{id:`shape.${e.id}`,bpmnElement:e,bounds:r.create("dc:Bounds",{x:l+t.x-t.width/2,y:d+t.y-t.height/2,width:n,height:o}),label:r.create("bpmndi:BPMNLabel")});e.$node.bpmn.fill&&s.set("bioc:fill",e.$node.bpmn.fill),e.$node.bpmn.stroke&&s.set("bioc:stroke",e.$node.bpmn.stroke);i.get("planeElement").push(s)})),o.$edges.forEach((e=>{const t=f.edge(e.from.id,e.to.id),n=r.create("bpmndi:BPMNEdge",{id:`edge.${e.from.id}_${e.to.id}`,bpmnElement:e.flow,label:r.create("bpmndi:BPMNLabel")});t.points.forEach((e=>{const t=r.create("dc:Point",{x:l+e.x,y:d+e.y});n.get("waypoint").push(t)}));i.get("planeElement").push(n)}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:r,nodeIndex:s,diagrams:c}=e,p=t.childs.filter((e=>"bpmn:SubProcess"===e.bpmn.type));p.forEach((t=>{const n=r[`node.${t.pathKey}`],o=i.create("bpmndi:BPMNDiagram",{id:`diagram_${t.pathKey}`});r[o.id]=o,c.push(o);const s=i.create("bpmndi:BPMNPlane",{id:`plane_${t.pathKey}`});r[s.id]=s,o.plane=s,s.bpmnElement=n,a({...e,targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:s})}))}(e)}async function c(t){const n=t.root,s=n.context.index,c=Object.keys(s).map((e=>s[e]));!function(e){const{nodes:t}=e;t.forEach((e=>{const t=[],n=[],o=i=>{i.context.next&&(t.push({from:i,to:i.context.next,type:"bpmn:SequenceFlow"}),i===e&&n.push({to:i.context.next,type:"bpmn:SequenceFlow",next:!0})),i.childs.forEach((t=>{i===e&&"switch"===e.type&&n.push({to:t,type:"bpmn:SequenceFlow"}),o(t)}))};o(e);const r=t.filter((t=>t.to.parent.indexKey===e.parent.indexKey)).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),s=t.filter((t=>t.to.parent.indexKey!==e.parent.indexKey&&!t.to.indexKey.startsWith(e.indexKey+"/"))).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),a=n.map((e=>({...e,to:e.to.indexKey})));e.bpmn=e.bpmn||{},e.bpmn.edges=i(r,"to"),e.bpmn.outside=i(s,"to"),e.bpmn.starts=i(a,"to"),e.bpmn.type=function(e){return"call"===e.type?"bpmn:ServiceTask":"form"===e.type?"bpmn:UserTask":"return"===e.type?"bpmn:EndEvent":"bpmn:Task"}(e),e.bpmn.width=120,e.bpmn.height=80,"return"===e.type&&(e.bpmn.width=36,e.bpmn.height=36)}))}({nodes:c}),r({nodes:c,nodeIndex:s,root:n});const p=new e({atom:o}),l={},d=p.create("bpmn:Definitions",{id:"definitions_0"});l[d.id]=d;for await(const e of n.childs){const t=d.get("rootElements"),o=d.get("diagrams"),i=p.create("bpmn:Process",{id:`process_${e.pathKey}`,documentation:[p.create("bpmn:Documentation",{text:`Atom Workflow - ${n.context.atom.name}`})]});l[i.id]=i,i.isExecutable=!0,t.push(i);const r=p.create("bpmndi:BPMNDiagram",{id:`diagram_${e.pathKey}`});l[r.id]=r,o.push(r);const f=p.create("bpmndi:BPMNPlane",{id:`plane_${e.pathKey}`});l[f.id]=f,r.plane=f,f.bpmnElement=i;a({targetNode:e,targetFlowElementsContainer:i,targetPlaneElement:f,moddle:p,elementIndex:l,nodeIndex:s,nodes:c,diagrams:o})}return{diagramXML:(await p.toXML(d,{format:!0})).xml}}return pn=async(e={})=>await c(n(e))}function eo(){if(fn)return dn;fn=1;const e=X,t=z;return dn=async({node:n,initNode:o})=>{if(Reflect.has(n.definition,"modules")&&!Array.isArray(n.definition.modules)){const e=n.definition.modules;n.definition.modules=[],Object.keys(e).forEach((t=>{const o={...e[t]};"modules"===n.type&&(o.export=o.export||t),n.definition.modules.push({[t]:o})}))}const i=[],r=await e({data:n.definition,callback:(e,n,o)=>{const r=t({expression:e});if("m"===r?.processor){const e=o.slice(0,-1);e.push(r.statement);const t=e.join("_");return i.push({[t]:n}),[r.statement,`m::${t}`]}return[e,n]}});i.length>0&&(n.definition=r,n.definition.modules=n.definition.modules||[],n.definition.modules=n.definition.modules.concat(i)),n.hasModules=n.definition.modules?.length>0;for(let e=0;e<n.definition.modules?.length;e++){const t=n.definition.modules[e],i=Object.keys(t)[0],r={name:i,childs:[],parent:n,definition:t[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:n.childs.length,context:{}};n.childs.push(r),await o({node:r})}},dn}function to(){return un?mn:(un=1,mn=async({node:e,transformExpression:t})=>{const n=e.context.transform;Reflect.has(n,"export")&&(n.export=await t(n.export)),Reflect.has(n,"return")&&(e.hasReturn=!0,n.return=await t(n.return)),n.hasOwnProperty("nextArgs")&&(e.hasNextArgs=!0,n.nextArgs=await t(n.nextArgs))})}function no(){if(yn)return hn;yn=1;const e=h,t=eo(),n=to();async function o({node:t,resolveTypeCommon:o,resolveNextBlock:i,transformExpression:r}){t.context.transform=t.context.transform||e(t.definition),t.context.transform;for(const n of t.childs)n.context.transform=n.context.transform||e(n.definition),n.definition.hasOwnProperty("condition")&&(n.context.transform.condition=await r(n.definition.condition));await n({node:t,transformExpression:r}),await o({node:t}),i({node:t})}return hn={hits:async function({node:e}){return!!e.definition.hasOwnProperty("switch")},init:async function({node:e,initNode:n}){e.type="switch";const i=e.definition.switch||[];if(!i.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===i.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const r=i.filter((e=>e.hasOwnProperty("default")));if(r.length>1)throw new Error("Switch must have only one default");if(1===r.length&&!i[i.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");e.hasDefaultCondition=1===r.length,await t({node:e,initNode:n}),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=o},resolve:o}}function oo(){if(On)return An;On=1;const e=h,t=eo(),n=to();async function o({node:t,resolveTypeCommon:o,resolveNextBlock:i,transformExpression:r}){t.context.transform=t.context.transform||e(t.definition);const s=t.context.transform;if("function"===t.target?.atom?.doc?.type&&(s.call=await r(t.target.atom.name)),s.args&&(s.args=await r(s.args)),s.result){"string"==typeof s.result&&(s.result=[{[s.result]:"e::result"}]);for(let e=0;e<s.result?.length;e++){let t=s.result[e],n=Object.keys(t)[0],o=t[n],i={key:await r(n),value:await r(o)};s.result[e]=i}}const a=t.workflow.parent;s.import?t.context.lib=a.context.libs.find((e=>e.name===s.import)):t.context.lib=a.context.libs.find((e=>e.name===s.call)),await n({node:t,transformExpression:r}),await o({node:t}),i({node:t})}return An={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:n}){e.type="call",await t({node:e,initNode:n}),e.resolve=o},resolve:o}}function io(){return Un?Jn:(Un=1,Jn=({node:e})=>{const t=e.definition;if(!e.hasReturn)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{if(!0===e.module)return;let t=e.parent,n=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(Reflect.has(t,"blockAutoJumpToParent")||Reflect.has(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 ro(){if(Wn)return zn;Wn=1;const e=oo();class t{#e;#t;#n;#o;constructor({key:e,npm:t,master:n,extras:o}){this.#e=e,this.#t=t,this.#n=n,this.#o=o}hits({node:e}){return e.definition.hasOwnProperty(this.#e)}async init(t){const{node:n}=t,o=this.#e,i=n.definition,r=typeof i[o];if(i.call=`npm:${this.#t}`,i.args="object"!==r?{...i.args,[`${this.#n}`]:i[o]}:i[o],delete i[o],this.#o)for(const e in this.#o)i[e]=this.#o[e];console.log(`[npm-block] ${this.#e} --\x3e ${this.#t}`),await e.init(t)}}return zn=e=>new t(e)}function so(){if(Xn)return Gn;Xn=1;const e=n,t=o,r=c,s=p,a=u,d=h,f=y,m=function(){if(ee)return Q;ee=1;const e=g,t=w;return Q=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}}(),{randomUUID:x}=b,j=function(){if(ne)return te;ne=1;const{Api:e}=v;return te=class{init({config:t,accessToken:n}){return new Promise(((o,i)=>{if(e.set_api_url(t.data.url),n)return e.set_req_token(n),void o(n);fetch(`${t.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(t.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((t=>{e.set_req_token(t.access_token),o(t.access_token)})).catch((t=>{e.set_req_token(),i(t)}))}))}}}(),_=Wt(),D=Gt(),E=Xt(),P=Vt(),S=Yt(),T=Zt(),$=Qt(),A=en(),O=tn(),N=nn(),C=on(),I=rn(),F=sn(),R=an(),M=Ht(),q=cn(),{Atom:B}=v,K=L,J=Qn(),U=i,X=k,Y=z,Z=l,oe=W,ie=G,re=function(){if(wn)return gn;wn=1;const e=z,t=no();return gn={hits:async function({node:t}){return 1===Object.keys(t.definition).map((t=>e({expression:t}))).filter((e=>"if"===e?.processor)).length},init:async function(n){const{node:o}=n,i=Object.keys(o.definition).map((t=>e({expression:t}))),r=[],s=i.find((e=>"if"===e?.processor)),a=o.definition[s.expression];r.push({name:`${o.name}_if`,definition:a,processor:s}),delete o.definition[s.expression];const c=i.filter((e=>"elseif"===e?.processor));let p=0;for(const e of c){const t=o.definition[e.expression];r.push({name:`${o.name}_elseif_${p++}`,definition:t,processor:e}),delete o.definition[e.expression]}o.definition.switch=[];for(const e of r)o.definition.switch.push({condition:e.processor.statement,...e.definition});if(o.definition?.else){const e=o.definition.else;o.definition.switch.push({default:e}),delete o.definition.else}await t.init(n)}}}(),se=function(){if(vn)return bn;vn=1;const e=h,t=eo(),n=to();async function o({node:t,resolveTypeCommon:o,resolveNextBlock:i,transformExpression:r}){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,transformExpression:r}),await o({node:t}),i({node:t})}return bn={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",await t({node:e,initNode:n}),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=o},resolve:o}}(),ae=function(){if(kn)return xn;kn=1;const e=h,t=eo(),n=to();async function o({node:t,resolveTypeCommon:o,resolveNextBlock:i,transformExpression:r}){t.context.transform=t.context.transform||e(t.definition);const s=t.context.transform;for(let e=0;e<s.assign?.length;e++){let t=s.assign[e],n=Object.keys(t)[0],o=t[n],i={key:await r(n),value:await r(o)};s.assign[e]=i}await n({node:t,transformExpression:r}),await o({node:t}),i({node:t})}return xn={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:n}){e.type="assign",await t({node:e,initNode:n}),e.resolve=o},resolve:o}}(),ce=function(){if(_n)return jn;_n=1;const e=h,t=H,n=V,o=eo(),i=to();async function r({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:r}){t.context.transform=t.context.transform||e(t.definition),t.context.transform.for.in=await r(t.definition.for.in),await i({node:t,transformExpression:r}),await n({node:t}),o({node:t})}return jn={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:i}){if(e.type="for",await o({node:e,initNode:i}),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=r},resolve:r}}(),pe=no(),le=En?Dn:(En=1,Dn={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}){}}),de=function(){if(Sn)return Pn;Sn=1;const e=h;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 Pn={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}}(),fe=function(){if($n)return Tn;$n=1;const e=h;async function t({node:t,resolveTypeCommon:n,transformExpression:o}){t.context.transform=t.context.transform||e(t.definition);const i=t.context.transform;t.hasReturn=!0,i.return=await o(i.return),await n({node:t})}return Tn={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}}(),me=oo(),ue=function(){if(Cn)return Nn;Cn=1;const e=h,t=to();async function n({node:n,transformExpression:o}){n.context.next=n.childs[0],n.context.transform=n.context.transform||e(n.definition),await t({node:n,transformExpression:o})}return Nn={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const o=e.definition.steps||[];for await(const n of o){const o=Object.keys(n)[0],i={name:o,childs:[],parent:e,definition:n[o],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=n},resolve:n}}(),he=function(){if(Fn)return In;Fn=1;const e=h,t=eo(),n=to();async function o({node:t,resolveTypeCommon:o,resolveNextBlock:i,transformExpression:r}){t.context.transform=t.context.transform||e(t.definition);const s=t.context.transform;s.props&&(s.props=await r(s.props));const a=t.workflow.parent;t.context.lib=a.context.libs.find((e=>e.name===s.form)),await n({node:t,transformExpression:r}),await o({node:t}),i({node:t})}return In={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:n}){e.type="form",await t({node:e,initNode:n}),e.resolve=o},resolve:o}}(),ye=function(){if(Mn)return Rn;Mn=1;const e=h;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 Rn={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}}(),ge=function(){if(Bn)return qn;Bn=1;const e=h,t=to();async function n({node:n,resolveTypeCommon:o,resolveNextBlock:i,transformExpression:r}){n.context.transform=n.context.transform||e(n.definition);const s=n.context.transform;s.next=await r(s.next),await t({node:n,transformExpression:r}),await o({node:n}),i({node:n})}return qn={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=n},resolve:n}}(),we=function(){if(Ln)return Kn;Ln=1;const e=h,t=eo(),n=to();async function o({node:t,resolveTypeCommon:o,resolveNextBlock:i,transformExpression:r}){t.context.transform=t.context.transform||e(t.definition),t.context.transform,await n({node:t,transformExpression:r}),await o({node:t}),i({node:t})}return Kn={hits:async function({node:e}){return e.definition.hasOwnProperty("modules")},init:async function({node:e,initNode:n}){e.type="modules",await t({node:e,initNode:n}),e.resolve=o},resolve:o}}(),be=io(),ve=ro();return Gn=class{#i;#r;#s;#a;#c;#p;#l;#d;#f;#m;#u;#h;#y;#g;#w;#b;#v;#x;#k;#j;#_;#D=[];constructor(e){this.#i=new j,this.#r=e,this.#p=[],this.#l=[],this.#d={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#D.push(ve({key:"config",npm:"@fnet/config",master:"name"})),this.#D.push(ve({key:"yaml",npm:"@fnet/yaml",master:"file"})),this.#D.push(ve({key:"prompt",npm:"@fnet/prompt",master:"message"})),this.#D.push(ve({key:"html-link",npm:"@flownet/lib-load-browser-link-url",master:"src"})),this.#D.push(ve({key:"html-script",npm:"@flownet/lib-load-browser-script-url",master:"src"})),this.#D.push(ve({key:"http-server",npm:"@fnet/node-express",master:"server_port"})),this.#D.push(ve({key:"shell",npm:"@fnet/shell-flow",master:"commands"})),this.#D.push(ve({key:"list-files",npm:"@fnet/list-files",master:"pattern"})),this.#D.push(ve({key:"up-list-files",npm:"@fnet/up-list-files",master:"pattern"})),this.#D.push(ve({key:"auto-conda-env",npm:"@fnet/auto-conda-env",master:"envDir"})),this.#D.push(ve({key:"ollama-chat",npm:"@fnet/ollama-chat",master:"model"})),this.#D.push(ve({key:"ai",npm:"@fnet/ai",master:"prompt",extras:{subtype:"flow"}})),this.#D.push(ve({key:"invoke",npm:"@fnet/invoke",master:"method",extras:{}})),this.#D.push(ve({key:"fetch",npm:"@fnet/fetch",master:"url",extras:{}})),this.#D.push(ve({key:"filemap",npm:"@fnet/filemap",master:"target",extras:{}})),this.#j={packageDependencies:this.#p,packageDevDependencies:this.#l,setProgress:this.setProgress.bind(this),context:this.#r,Atom:B,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#_={initNode:this.initNode.bind(this),cloneDeep:d,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:be,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 m(),this.#u=this.#r.buildId||x(),this.#j.buildId=this.#u,this.#w=this.#r.mode,this.#b=["all","deploy","build","file"].includes(this.#w),this.#v=["all","deploy","build"].includes(this.#w),this.#x=["all","deploy"].includes(this.#w),this.#k=["all","deploy","build","file","bpmn"].includes(this.#w),this.#y=this.#r.protocol,this.#h="BUILD:"+this.#u,this.#g=(await U({optional:!0,name:"atom",dir:this.#r.projectDir,tags:this.#r.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),this.transformWorkflow({workflow:this.#a});const e=await this.initNodeTree({workflow:this.#a});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.initEntryFiles({root:e,features:this.#s.doc.features}),await this.initFeaturesFromNodes({childs:e.childs,features:this.#s.doc.features}),await _(this.#j),await D(this.#j),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#p}),await this.resolveNodeTree({root:e}),this.#m=e}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#r.id&&(this.#f=await this.#i.init({config:this.#g}),this.#j.atomAccessToken=this.#f)}async initWorkflow(){const e=this.#r.id;this.#s=this.#r.project?.workflowAtom||await B.get({id:e}),this.#a="string"==typeof this.#s.doc.content?(await Z({content:this.#s.doc.content,tags:this.#r.tags})).parsed:this.#s.doc.content;let t=this.#s.doc.bundleName;t=t||(this.#s.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#s.doc.bundleName=t,this.#s.type=this.#s.type||"workflow",this.#j.atom=this.#s,this.#s.doc.features=this.#s.doc.features||{}}#E(n){console.log("filePath",n),e.statSync(n).isDirectory()?(e.readdirSync(n).forEach((e=>{const o=t.join(n,e);this.#E(o)})),e.rmSync(n)):e.unlinkSync(n)}#P(n,o){const i=e.existsSync(n),r=i&&e.statSync(n);i&&r.isDirectory()?(e.mkdirSync(o,{recursive:!0}),e.readdirSync(n).forEach((e=>{this.#P(t.join(n,e),t.join(o,e))}))):e.copyFileSync(n,o)}async initWorkflowDir(){this.setProgress({message:"Initializing library directory."});const n=this.#r.projectDir,o=this.#r.coreDir;this.setProgress({message:"Cleaning project directory."});const i=ie({dir:n,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const t of i)e.rmSync(t,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."}),e.existsSync(n)||e.mkdirSync(n,{recursive:!0});const r=t.join(n,"src");e.existsSync(r)||e.mkdirSync(r,{recursive:!0});const s=t.join(r,"core");this.#P(o,s);const a=t.join(r,"default","blocks");e.existsSync(a)||e.mkdirSync(a,{recursive:!0})}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#r.templateDir;this.#c=a.configure(e,{watch:!1,dev:!0}),this.#j.njEnv=this.#c}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.filter((e=>Object.keys(e).length>0)),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.#s}};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.#_,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await se.hits(t))await se.init(t);else if(await ce.hits(t))await ce.init(t);else if(await pe.hits(t))await pe.init(t);else if(await re.hits(t))await re.init(t);else if(await le.hits(t))await le.init(t);else if(await ae.hits(t))await ae.init(t);else if(await de.hits(t))await de.init(t);else if(await me.hits(t))await me.init(t);else if(this.#D.find((e=>e.hits(t))))await this.#D.find((e=>e.hits(t))).init(t);else if(await he.hits(t))await he.init(t);else if(await ye.hits(t))await ye.init(t);else if(await ue.hits(t))await ue.init(t);else if(await ge.hits(t))await ge.init(t);else if(await we.hits(t))await we.init(t);else{if(!await fe.hits(t))throw new Error("Undefined step type.");await fe.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:n}){const o=t.join(e.parent.indexKey,e.name);e.indexKey=o,n[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=x();for await(const t of e.childs)await this.initNodeIndex({node:t,index:n})}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.import||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.import||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 initFeaturesFromNodes({childs:e,features:t}){for await(const n of e)"form"!==n.type||Reflect.has(t,"form")||(t.form=!0),await this.initFeaturesFromNodes({childs:n.childs,features:t})}async initEntryFiles({root:e,features:t}){for await(const n of e.childs){let e;if("main"===n.name)e="index.js";else if("cli"===n.name)e="cli.js";else if("app"===n.name)e="app.js";else{if("api"!==n.name)continue;e="api.js"}t[`${n.name}_default_entry_file`]=e,n.entryFile=e}}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:n}){const o=K({url:e});if(!o)throw new Error(`Invalid package name: ${e}`);if(o.protocol||(o.protocol=this.#y),"ac:"===o.protocol){const t=o.pathname.split("/");if(1===t.length)return await B.first({where:{name:e,parent_id:this.#g.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await B.first({where:{name:t[0],parent_id:this.#g.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=t.resolve(this.#r.projectSrcDir,`${o.pathname}.js`),n=[],i=(await X({file:e,recursive:!0})).all;for await(const e of i){if("npm"!==e.type)continue;if(n.find((t=>t.package===e.package)))continue;const t=await M({name:e.package,projectDir:this.#r.projectDir,setProgress:this.#j.setProgress});n.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return{name:o.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:n},protocol:o.protocol}}if("npm:"===o.protocol){const e=await M({name:o.pathname,projectDir:this.#r.projectDir,setProgress:this.#j.setProgress});return{name:o.pathname,doc:{type:"workflow.lib",subtype:"flow"===n?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:o.pathname,version:e.minorRange,type:"npm"}]},protocol:o.protocol}}if("use:"===o.protocol){return{name:o.pathname,doc:{type:"function",dependencies:[]},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=e.context.transform||d(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],type:typeof 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.#_,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:n}){await this.setProgress({message:"Creating external lib files."}),this.#s.typesDir="./types";const o=n.context.libs.filter((e=>"atom"===e.type));for(let n=0;n<o.length;n++){const i=o[n].atom,r=this.#r.projectDir;if("local:"===i.protocol){const n=t.resolve(this.#r.projectSrcDir,`${i.fileName||i.name}.js`),o=t.relative(`${this.#r.projectDir}/src/default/blocks`,n);if(!e.existsSync(n)){e.mkdirSync(t.dirname(n),{recursive:!0});let o="export default async (args)=>{\n";o+="}",e.writeFileSync(n,o,"utf8")}i.relativePath=o.split(t.sep).join("/"),this.#s.typesDir=`./types/${t.basename(r)}/src`}else if("npm:"===i.protocol)i.relativePath=i.name;else if("use:"===i.protocol);else{const n=`${r}/src/libs/${i.id}.js`,o=i.doc.contents?.find((e=>"esm"===e.format))||i.doc;e.writeFileSync(t.normalize(n),o.content,"utf8")}}}async createEngine({root:n}){await this.setProgress({message:"Creating engine file."});const o=this.#r.templateDir,i=a.compile(e.readFileSync(t.resolve(o,"src/default/engine.js.njk"),"utf8"),this.#c);for(let o=0;o<n.childs.length;o++){const r=n.childs[o];if(!r.entryFile)continue;const s=i.render({flow:r,ui:{package:"@fnet/react-app"}}),a=this.#r.projectDir,c=t.resolve(a,`src/default/${r.entryFile}`);e.writeFileSync(c,s,"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:n}){const o=this.#r.templateDir,i=a.compile(e.readFileSync(t.resolve(o,"src/default/workflow.js.njk"),"utf8"),this.#c).render(n),r=this.#r.projectDir,s=t.resolve(r,`src/default/${n.codeKey}.js`);e.writeFileSync(s,i,"utf8");for await(const e of n.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":case"modules":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:n}){let o=this.#d[n.type];if(o)return o;const i=this.#r.templateDir;return o=a.compile(e.readFileSync(t.resolve(i,`src/default/blocks/${n.type}.js.njk`),"utf8"),this.#c),this.#d[n.type]=o,o}createStepFile({node:n}){const o=this.#r.projectDir,i=`${n.codeKey}.js`,r=t.resolve(o,`src/default/blocks/${i}`);e.writeFileSync(r,n.context.render,"utf8"),n.context.fileName=i,n.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(f(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++){const o=t[n],i=Y({expression:o});if(i)if("e"===i.processor){const t=e[o].replace(/(\r\n|\n|\r)/g,"");e[i.statement]=`$::${t}::`,delete e[o]}else e[o]=await this.transformValue(e[o]);else e[o]=await this.transformValue(e[o])}}else if("string"==typeof e){const t=Y({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=`$::c.module['${o}']::`;break;case"fm":e=`$::flow.getModule('${o}')::`;break;case"f":e=`$::c.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 n="fnet.yaml",o=`Creating ${n}`;await this.setProgress({message:o});const{content:i,...s}=this.#s.doc,c={content:r.stringify(s)},p=this.#r.templateDir,l=a.compile(e.readFileSync(t.resolve(p,`${n}.njk`),"utf8"),this.#c).render(c),d=this.#r.projectDir,f=t.resolve(d,`${n}`);e.writeFileSync(f,l,"utf8")}async createProjectMainYaml(){const n="flow.main.yaml",o=`Creating ${n}`;await this.setProgress({message:o});const i={content:r.stringify(this.#a)},s=this.#r.templateDir,c=a.compile(e.readFileSync(t.resolve(s,`${n}.njk`),"utf8"),this.#c).render(i),p=this.#r.projectDir,l=t.resolve(p,`${n}`);e.writeFileSync(l,c,"utf8")}async runPrettifier(){const e=this.#r.projectDir,n=await s("prettier --write .",{cwd:t.resolve(e,"src")});if(0!==n.code)throw new Error(n.stderr)}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#r.project?.devops){const e=[this.#r.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.#s.id){const e=await B.list({type:"workflow.deploy",parent_id:this.#s.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 q({...this.#j,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:r})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#r.id)return;let o=await B.first({name:t.params.name,parent_id:this.#g.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.#g.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(oe.blue(t)),await this._cache_set(this.#h,{status:"IN_PROGRESS",message:t})}async build(){if(this.#k&&!this.#b)return await this.createNetwork();try{const n=this.#k?await J({root:this.#m}):void 0;if(this.#b){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#k){let o=this.#r.project?.projectDir||this.#r.projectDir;o=t.resolve(o,"fnet"),e.existsSync(o)&&e.writeFileSync(t.resolve(o,"flow.bpmn"),n.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#m}),await this.createEngine({root:this.#m}),await this.createNodeTree({root:this.#m}),await this.createProjectYaml(),await N(this.#j),await O(this.#j),await A(this.#j),await $(this.#j),await S(this.#j),await E(this.#j),await T(this.#j),await P(this.#j),await C(this.#j),await I(this.#j),this.#v&&(await F(this.#j),await R(this.#j),this.#x&&await this.deploy())}await this._cache_set(this.#h,{status:"COMPLETED",data:{network:n}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await J({root:this.#m});await this._cache_set(this.#h,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}}}var ao=function(){if(Yn)return Jt;Yn=1;const u=process.cwd(),{spawn:h}=e,y=t,g=Ut;i({name:["redis"],dir:u,optional:!0});const w=r,b=s,v=a,x=c,k=p,j=l,_=i,D=d,E=f,P=m,S=so(),T=function(){if(Vn)return Hn;Vn=1;const e=n,t=o;return Hn=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}),$="win32"===process.platform?";":":";process.env.PATH=`${w.join(T,"/.bin")}${$}${process.env.PATH}`;let A=b(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=w.resolve(T,"./@fnet/cli-project-flow/dist/template/project"),n=w.resolve(u,e.name);v.existsSync(n)||v.mkdirSync(n),await P({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0});let o=await k("fnet build",{cwd:n});if(0!==o.code)throw new Error("Failed to build project.");if(g("git")&&(o=await k("git init --initial-branch=main",{cwd:n}),0!==o.code))throw new Error("Failed to initialize git.");if(g("code")&&e.vscode&&(o=await k(`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=w.resolve(T,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd(),o=await N(e);if(e.update){if(await P({dir:t,outDir:n,context:{name:o.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0}),0!==(await k("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 N(e),n=new S(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 N({...e,mode:"all"}),n=new S(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 N({...e,mode:"file"}),n=new S(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 O(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 N(e),{projectDir:i}=t,r=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,s=process.argv.slice(3).map(r);h(n,[...o,...s],{cwd:i,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function N(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:w.resolve(u,`./.output/${e.id}`),templateDir:w.resolve(T,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:w.resolve(T,"./@fnet/cli-project-common/dist/template/default"),coreDir:w.resolve(T,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=w.resolve(u,"fnet.yaml");if(!v.existsSync(t))throw new Error("fnet.yaml file not found in current directory.");const{raw:n,parsed:o}=await j({file:t,tags:e}),i=w.dirname(t);let r;if("object"==typeof o.flows)r=o.flows;else{let t="flow.main.yaml";v.existsSync(w.join(i,"fnet","flows.yaml"))&&(t=w.join("fnet","flows.yaml"));const n=o.main||t;let s=w.resolve(i,n);if(v.existsSync(s)){const{parsed:t}=await j({file:s,tags:e});r=t}else r={main:{steps:[]}}}const s={workflowAtom:{doc:{...o,content:r}},projectDir:i,projectFilePath:t,projectFileContent:n,projectFileParsed:o};let a=w.resolve(i,"fnet/targets.yaml");if(!v.existsSync(a)&&(a=w.resolve(i,"flow.devops.yaml"),v.existsSync(a))){const e=w.resolve(i,"fnet");v.existsSync(e)||v.mkdirSync(e),v.copyFileSync(a,w.resolve(i,"fnet/targets.yaml")),v.unlinkSync(a)}if(v.existsSync(a)){const{raw:t,parsed:n}=await j({file:a,tags:e}),o=x.parseDocument(t);s.devops={filePath:a,fileContent:t,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{v.writeFileSync(s.devops.filePath,o.toString())}}}const c=w.resolve(i,"readme.md");if(v.existsSync(c)){const e=v.readFileSync(c,"utf8");s.readme={filePath:c,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return s}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:w.resolve(T,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:w.resolve(T,"./@fnet/cli-project-common/dist/template/default"),coreDir:w.resolve(T,"./@fnet/cli-project-flow/dist/template/core"),projectDir:w.resolve(t.projectDir,"./.workspace"),projectSrcDir:w.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}return A=A.command("input [name]","Create or modify an input config file",(e=>e.positional("name",{type:"string",demandOption:!1}).help(!1).version(!1)),(async e=>{try{const t=await N(e),{project:n}=t,{projectDir:o,projectFileParsed:i}=n,r=i.input;if(!r)throw new Error("Config schema not found in project file.");if(!Reflect.has(e,"name")){const{inputName:t}=await y({type:"input",name:"inputName",message:"Input name:",initial:"dev"});e.name=t}const s=w.resolve(o,".fnet");v.existsSync(s)||v.mkdirSync(s);const a=w.resolve(s,`${e.name}.fnet`),c=v.existsSync(a),p=await D({schema:r,format:"yaml",ref:c?a:void 0});v.writeFileSync(a,p)}catch(e){console.error(e.message),process.exit(1)}})),A=O(A,{bin:"npm"}),A=O(A,{bin:"node"}),A=O(A,{bin:"bun"}),A=O(A,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),A=O(A,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),A=O(A,{name:"app",bin:"npm",preArgs:["run","app","--"]}),A=O(A,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),A=O(A,{bin:"npx"}),A=O(A,{bin:"cdk"}),A=O(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 N(e),{projectDir:o}=t,i=e.config,r=await _({name:i,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),s=r?.data?.env||void 0,a=e.command,c=process.argv.slice(5);h(a,[...n,...c],{cwd:v.existsSync(o)?o:u,stdio:"inherit",shell:!0,env:{...process.env,...s}}).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 N(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 E({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,Jt}(),co=Y(ao);module.exports=co;
2
+ "use strict";var e=require("child_process"),t=require("@fnet/prompt"),n=require("node:fs"),o=require("node:path"),r=require("@fnet/config"),i=require("path"),s=require("commander"),a=require("fs"),c=require("yaml"),p=require("@fnet/shelljs"),l=require("@fnet/yaml"),d=require("@fnet/object-from-schema"),f=require("@fnet/shell-flow"),m=require("@flownet/lib-render-templates-dir"),u=require("nunjucks"),h=require("lodash.clonedeep"),y=require("isobject"),g=require("redis"),w=require("@flownet/lib-is-redis-online"),b=require("node:crypto"),x=require("@flownet/lib-atom-api-js"),v=require("lodash.merge"),k=require("@flownet/lib-parse-imports-js"),j=require("@fnet/npm-list-versions"),_=require("@fnet/npm-pick-versions"),D=require("object-hash"),E=require("ajv/dist/2020.js"),S=require("ajv/dist/standalone/index.js"),P=require("ajv-formats"),$=require("semver"),T=require("@fnet/up-list-files"),A=require("node:os"),O=require("@node-red/util"),N=require("@flownet/lib-to-ios-app"),C=require("@flownet/lib-to-macos-app"),I=require("@flownet/lib-to-electron"),F=require("@flownet/lib-to-webos"),R=require("@flownet/lib-to-nextjs"),M=require("@flownet/lib-to-docker"),B=require("form-data"),q=require("@fnet/to-rust"),K=require("@fnet/to-pyip"),L=require("@flownet/lib-parse-node-url"),U=require("bpmn-moddle"),J=require("dagre"),z=require("@fnet/expression"),W=require("chalk"),G=require("@fnet/list-files"),H=require("@fnet/key-value-transformer"),X=require("lodash.pick"),V=require("lodash.omit");function Y(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Z(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var t=e.default;if("function"==typeof t){var n=function e(){return this instanceof e?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach((function(t){var o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,o.get?o:{enumerable:!0,get:function(){return e[t]}})})),n}var Q,ee,te,ne,oe,re,ie,se,ae,ce,pe,le,de,fe,me,ue,he,ye,ge,we,be,xe,ve,ke,je,_e,De,Ee,Se,Pe,$e,Te,Ae,Oe,Ne,Ce,Ie,Fe,Re,Me,Be,qe,Ke,Le,Ue,Je,ze,We,Ge,He,Xe,Ve,Ye,Ze,Qe,et,tt,nt,ot,rt,it,st,at,ct,pt,lt,dt,ft,mt,ut,ht,yt,gt,wt,bt,xt,vt,kt,jt,_t,Dt,Et,St,Pt,$t,Tt,At,Ot,Nt,Ct,It,Ft,Rt,Mt,Bt,qt,Kt,Lt,Ut={},Jt=Z(Object.freeze({__proto__:null,default:e=>{const t=process.env.PATH||"",r="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],i=t.split(o.delimiter);for(const t of i)for(const i of r){const r=o.join(t,"win32"===process.platform?e+i:e);if(n.existsSync(r))return r}return null}})),zt={version:"0.99.0"};function Wt(){if(re)return oe;re=1;const e=v;return oe=({feature:t,features:n,packageDevDependencies:o})=>{const{name:r,packages:i,options:s,extraCheck:a,explicit:c}=t,p=`${r}_enabled`,l=n.rollup_output||{},d=Object.keys(l);let f=s||{};const m=n[r]?.options;m&&(f=e(f,m));const u=!n[r]||!1===n[r]?.enabled;d.forEach((e=>{const t=n.rollup_output[e];if(t){if(Reflect.has(t,r)){if(u||!t[r]||!1===t[r]?.enabled)return void delete t[r];!0===t[r]&&(t[r]={enabled:!0,options:f})}else{if(u||c||!1===n[p])return;t[r]={enabled:!0}}t[r]=t[r]||{},t[r].options={...f,...t[r].options}}}));let h=d.some((e=>!0===n.rollup_output[e][r]?.enabled));a&&(h=a()&&h),n[p]=h,h&&i.forEach((e=>o.push({package:e[0],version:e[1]})))},oe}function Gt(){if(Oe)return Ae;Oe=1;const e=v,t=n,r=o,i=k,s=function(){if(se)return ie;se=1;const e=Wt();return ie=t=>{const{atom:n,packageDevDependencies:o}=t,r=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:r,packageDevDependencies:o})},ie}(),a=function(){if(ce)return ae;ce=1;const e=Wt();return ae=t=>{const{atom:n,packageDevDependencies:o}=t,r=n.doc.features;e({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:r,packageDevDependencies:o})},ae}(),c=function(){if(le)return pe;le=1;const e=Wt();return pe=t=>{const{atom:n,packageDevDependencies:o}=t,r=n.doc.features;e({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:r,packageDevDependencies:o})},pe}(),p=function(){if(fe)return de;fe=1;const e=Wt();return de=t=>{const{atom:n,packageDevDependencies:o}=t,r=n.doc.features;e({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:r,packageDevDependencies:o})},de}(),l=function(){if(ue)return me;ue=1;const e=Wt();return me=t=>{const{atom:n,packageDevDependencies:o}=t,r=n.doc.features;e({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:r,packageDevDependencies:o})},me}(),d=function(){if(ye)return he;ye=1;const e=Wt();return he=t=>{const{atom:n,packageDevDependencies:o}=t,r=n.doc.features;e({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:r,packageDevDependencies:o})},he}(),f=function(){if(we)return ge;we=1;const e=Wt();return ge=t=>{const{atom:n,packageDevDependencies:o}=t,r=n.doc.features;e({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:r,packageDevDependencies:o})},ge}(),m=function(){if(xe)return be;xe=1;const e=Wt();return be=t=>{const{atom:n,packageDevDependencies:o}=t,r=n.doc.features;e({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:r,packageDevDependencies:o})},be}(),u=function(){if(ke)return ve;ke=1;const e=Wt();return ve=t=>{const{atom:n,packageDevDependencies:o}=t,r=n.doc.features;e({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:r,packageDevDependencies:o})},ve}(),h=function(){if(_e)return je;_e=1;const e=Wt();return je=t=>{const{atom:n,packageDevDependencies:o}=t,r=n.doc.features;e({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:r,packageDevDependencies:o})},je}(),y=function(){if(Ee)return De;Ee=1;const e=Wt();return De=t=>{const{atom:n,packageDevDependencies:o}=t,r=n.doc.features;e({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:r,packageDevDependencies:o})},De}(),g=function(){if(Pe)return Se;Pe=1;const e=Wt();return Se=t=>{const{atom:n,packageDevDependencies:o}=t,r=n.doc.features,i={};!0===r.app?.enabled&&(i.targets=i.targets||[],i.targets.push({src:"./src/app/index.html",dest:r.app.dir}),Reflect.has(r.app,"copy")||Reflect.has(r,"copy")||(r.copy=!0)),e({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:r,packageDevDependencies:o})},Se}(),w=function(){if(Te)return $e;Te=1;const e=Wt();return $e=t=>{const{atom:n,packageDevDependencies:o}=t,r=n.doc.features,i=r.css&&!1!==r.css.enabled;let s=[];i&&(s.push(["rollup-plugin-postcss","^4"]),s.push(["sass","^1.66"]),(r.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":s.push(["postcss-import","^15"]);break;case"postcss-url":s.push(["postcss-url","^10"]);break;case"postcss-preset-env":s.push(["postcss-preset-env","^9"]);break;case"autoprefixer":s.push(["autoprefixer","^10"]);break;case"cssnano":s.push(["cssnano","^6"])}}))),e({feature:{name:"css",packages:s},features:r,packageDevDependencies:o})},$e}();function b({dir:e,name:n="index"}){let o=r.resolve(e,`./${n}.tsx`);if(t.existsSync(o)||(o=r.resolve(e,`./${n}.ts`)),t.existsSync(o)||(o=r.resolve(e,`./${n}.jsx`)),t.existsSync(o)||(o=r.resolve(e,`./${n}.js`)),!t.existsSync(o))return{};const i=o,s=r.extname(o);return{file:i,ext:s,ts:".ts"===s||".tsx"===s,name:n}}return Ae=async t=>{const{atom:n,context:o,setProgress:x}=t;x("Initializing features..."),n.doc.features=n.doc.features||{};const v=n.doc.features;v.project=v.project||{},v.project.format=v.project.format||v.project_format||"esm",v.project_format=v.project.format,v.dts_enabled=!0===v.dts||void 0!==v.dts&&!1!==v.dts;const k=r.resolve(o.project.projectDir),j=b({dir:r.resolve(k,"./app")});if(j.file){x("Parsing app entry imports...");let e=await i({file:j.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));v.app_uses_jsx=t,v.app_has_entry=!0,e=await i({file:j.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),v.app_entry_uses_jsx=t,v.app_entry_is_ts=j.ts,v.app_entry_ext=j.ext}const _=b({dir:r.resolve(k,"./cli")});if(_.file){x("Parsing cli entry imports...");let e=await i({file:_.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));v.cli_uses_jsx=t,v.cli_has_entry=!0,e=await i({file:_.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),v.cli_entry_uses_jsx=t,v.cli_entry_is_ts=_.ts,v.cli_entry_ext=_.ext}if("workflow.lib"===n.type){const e=b({dir:r.resolve(k,"./src")});if(e.file){x("Parsing src entry imports...");let t=await i({file:e.file,recursive:!0}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));v.src_uses_jsx=n,v.src_has_entry=!0,t=await i({file:e.file}),n=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),v.src_entry_uses_jsx=n,v.src_entry_is_ts=e.ts,v.src_entry_ext=e.ext}}const D=Reflect.has(v,"app_entry_uses_jsx")?!0===v.app_entry_uses_jsx:!0===v.src_entry_uses_jsx,E=Reflect.has(v,"cli_entry_uses_jsx")?!0===v.cli_entry_uses_jsx:!0===v.src_entry_uses_jsx;v.form_enabled=D||E||!0===v.form||!0===v.form?.enabled,v.multiple_enabled=v.multiple_enabled||!0===v.multiple||!0===v.multiple?.enabled,!1===v.app?v.app={enabled:!1}:!0===v.app?v.app={enabled:!0,extend:!0===v.app_has_entry,export:!0,react:D}:v.app={enabled:!0,extend:!0===v.app_has_entry,export:!0,react:D,...v.app||{}},v.app.enabled=!0===v.app.enabled&&(!0===n.doc.features.form_enabled||!0===v.app.extend||!0===v.app.enabled),v.app.format=v.app.format||"esm",v.app.folder=v.app.folder||v.app.format||"default",!1===v.cli?v.cli={enabled:!1}:!0===v.cli?v.cli={enabled:!0,extend:!0===v.cli_has_entry,export:!0,react:E}:v.cli={enabled:!0,extend:!0===v.cli_has_entry,export:!0,react:E,...v.cli||{}},v.cli.enabled=!0===v.cli.enabled&&(!1===n.doc.features.form_enabled||!0===v.cli.extend||!0===v.cli.enabled),v.cli.format=v.cli.format||"esm",v.cli.folder=v.cli.folder||v.cli.folder||"esm",v.cli.node_options=v.cli.node?.options||v.cli.node_options||"",v.json=v.cli.enabled||v.json;const S={cjs:{format:"cjs",context:v.form_enabled?"window":"global",babel:!0===v.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==v.cjs,copy:!1},esm:{format:"esm",context:v.form_enabled?"window":"global",babel:!0===v.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==v.esm,copy:!0},iife:{format:"iife",context:v.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===v.iife,terser:!0,copy:!1}};!0===v.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===v.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===v.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===v.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===v.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===v.app.enabled&&(v.app.dir=`./dist/app/${v.app.folder}`,S.app={format:v.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:v.app.dir,terser:!0,output_exports:!1===v.app.export?"none":"auto",browsersync:!0}),!0===v.cli.enabled&&(v.cli.dir=`./dist/cli/${v.cli.folder}`,S.cli={format:v.cli.format,context:"global",babel:!0===v.src_uses_jsx||!0===v.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:v.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===v.cli.export?"none":"auto"});const P={server:".",startPath:`${r.normalize(v.app.dir||".")}`,files:[r.normalize("./dist/**/*")],cors:!0,open:!1};v.babel_options=e({targets:{browsers:"last 9 versions, not dead",node:"18"}},v.babel_options||v.babel?.options),v.browsersync_options=e(P,v.browsersync_options||v.browsersync?.options||{}),v.replace_options=e({},v.replace_options||v.replace?.options||{}),Reflect.has(v.browsersync_options,"proxy")&&delete v.browsersync_options.server,v.rollup=v.rollup||{},v.rollup_output=e(S,v.rollup_output||v.rollup?.output||{}),v.preact_enabled=!0===v.preact||v.preact&&!1!==v.preact?.enabled;let $=Object.keys(S);for(const t of $){const n=S[t];n&&(!1!==v.rollup[t]?(n.babel_options=n.babel_options||v.babel_options,n.browsersync_options=e(v.browsersync_options,n.browsersync_options),n.replace_options=e(v.replace_options,n.replace_options),v.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"),(v.form_enabled||v.babel)&&(n.babel=!0)):delete v.rollup_output[t])}$=Object.keys(v.rollup_output),v.babel_enabled=$.some((e=>!0===v.rollup_output[e].babel)),v.browser_enabled=$.some((e=>!0===v.rollup_output[e].babel)),v.browsersync_enabled=!1!==v.browsersync&&$.some((e=>!0===v.rollup_output[e].browsersync)),v.browsersync_enabled=v.browsersync_enabled&&v.app.enabled,v.dependency_auto_enabled=!1!==v.dependency_auto&&!1!==v.dependency_auto?.enabled,v.npm_install_flags=v.npm_install_flags||"",v.react_version=v.react_version||v.react?.version||18,w(t),g(t),y(t),h(t),u(t),f(t),m(t),d(t),l(t),p(t),c(t),s(t),a(t)},Ae}function Ht(){if(Ce)return Ne;Ce=1;const e=j;return Ne=async({atom:t,packageDependencies:n,packageDevDependencies:o,setProgress:r})=>{r("Initializing dependencies");const i=t.doc.dependencies||[];if(i.filter((e=>!e.dev)).forEach((e=>n.push(e))),i.filter((e=>e.dev)).forEach((e=>o.push(e))),"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";r("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:"@fnet/react-app",version:"^0.1"}),n.push({package:"@fnet/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:"^16"}),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"})},Ne}function Xt(){if(Fe)return Ie;Fe=1;const e=n,t=o,r=m;return Ie=async({atom:n,setProgress:o,context:i,packageDependencies:s})=>{if(!0!==n.doc.features.app.enabled)return;await o({message:"Creating app folder"});const a={atom:n,packageDependencies:s,ts:Date.now()},c=i.templateDir,p=t.resolve(i.projectDir,"src/app");e.existsSync(p)||e.mkdirSync(p,{recursive:!0});let l=["index.js.njk"];!1!==n.doc.features.app.html&&l.push("index.html.njk"),await r({pattern:l,dir:t.resolve(c,"src/app"),outDir:p,context:a})},Ie}function Vt(){if(Me)return Re;Me=1;const e=_,t=D,r=n,i=o;return Re=async({projectDir:n,name:o,setProgress:s,count:a=1})=>{let c;const p=t(["npm-pick-versions",o,a]),l=i.join(n,".cache"),d=i.join(l,p+".json");return r.existsSync(d)?(s&&s(`Picking npm version of ${o} from cache ...`),c=JSON.parse(r.readFileSync(d,"utf8"))):(s&&s(`Picking npm version of ${o} ...`),c=await e({name:o,count:a}),r.mkdirSync(l,{recursive:!0}),r.writeFileSync(d,JSON.stringify(c),"utf8")),c},Re}function Yt(){if(qe)return Be;qe=1;const e=u,t=n,r=o,i=k,s=Vt();return Be=async({atom:n,context:o,packageDependencies:a,packageDevDependencies:c,setProgress:p})=>{await p({message:"Creating package.json."});a.filter((e=>!0===e.dev)).forEach((e=>{c.find((t=>t.package===e.package))||c.push(e);const t=a.findIndex((t=>t.package===e.package));a.splice(t,1)}));const l=a.find((e=>"react"===e.package)),d=a.find((e=>"react-dom"===e.package));l&&!d?a.push({package:"react-dom",version:l.version}):l&&d&&(d.version=l.version),l&&n.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const f=[];!0===n.doc.features.app.enabled&&f.push({file:r.resolve(o.projectDir,"src/app/index.js"),dev:!1!==n.doc.features.app.dev}),!0===n.doc.features.cli.enabled&&f.push({file:r.resolve(o.projectDir,"src/cli/index.js"),dev:!1!==n.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 r=(await i({file:n,recursive:!0})).all;for await(const t of r){if("npm"!==t.type)continue;if(a.find((e=>e.package===t.package)))continue;if(c.find((e=>e.package===t.package)))continue;const n=await s({name:t.package,projectDir:o.projectDir,setProgress:p});(!0===e.dev?c:a).push({package:t.package,subpath:t.subpath,version:n.minorRange,type:"npm"})}}const m={atom:n,packageDependencies:a,packageDevDependencies:c},u=o.templateCommonDir,h=e.compile(t.readFileSync(r.resolve(u,"package.json.njk"),"utf8"),e.configure(u)).render(m),y=o.projectDir,g=r.resolve(y,"package.json");t.writeFileSync(g,h,"utf8");const w=r.resolve(o.project.projectDir,"fnet");if(t.existsSync(w)){const e=r.resolve(o.projectDir,"fnet");t.existsSync(e)||t.mkdirSync(e);const n=t.readdirSync(w);for(const o of n){const n=r.resolve(w,o);if(!t.lstatSync(n).isFile())continue;const i=r.resolve(e,o);t.copyFileSync(n,i)}}},Be}function Zt(){if(Le)return Ke;Le=1;const e=n,t=o,r=m;return Ke=async({atom:n,setProgress:o,context:i,packageDependencies:s})=>{if(!0!==n.doc.features.cli.enabled)return;await o({message:"Creating cli."});const a={atom:n,packageDependencies:s},c=i.templateDir,p=t.resolve(i.projectDir,"src/cli");e.existsSync(p)||e.mkdirSync(p,{recursive:!0}),await r({pattern:["index.js.njk"],dir:t.resolve(c,"src/cli"),outDir:p,context:a})},Ke}function Qt(){if(Je)return Ue;Je=1;const e=n,t=o,r=u,i=k;return Ue=async({atom:n,setProgress:o,context:s,packageDependencies:a})=>{await o({message:"Creating rollup file."});const c={atom:n,packageDependencies:a},p=t.resolve(s.projectDir,"src","default/index.js");if(!e.existsSync(p))throw new Error(`Entry file not found: ${p}`);const l=(await i({file:p,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),d=n.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&&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=s.templateCommonDir;let u=r.compile(e.readFileSync(t.resolve(m,"rollup.config.mjs.njk"),"utf8"),r.configure(m)).render(c);const h=s.projectDir;let y=t.resolve(h,"rollup.config.mjs");e.writeFileSync(y,u,"utf8")},Ue}function en(){if(We)return ze;We=1;const e=n,t=o,r=u,i=E,s=S,a=P;return ze=async({atom:n,setProgress:o,context:c,njEnv:p})=>{if(!0!==n.doc.features.cli.enabled)return;await o({message:"Creating yargs."});let l={};if(l=n.doc.input?n.doc.input:{type:"object",properties:{},required:[]},n.doc.features.cli.fargs&&!1!==n.doc.features.cli.fargs?.enabled){const e=n.doc.features.cli.fargs,t={type:"string",description:"Config name to load args",hidden:!1},o={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=o)}const d={options:l,imports:[],atom:n},f=c.templateDir,m=r.compile(e.readFileSync(t.resolve(f,"src/default/to.args.js.njk"),"utf8"),p).render(d),u=c.projectDir,h=t.resolve(u,"src/default/to.args.js");e.writeFileSync(h,m,"utf8");const y=new i({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});a(y);const g=y.compile(l),w=s(y,g);e.writeFileSync(t.resolve(u,"src/default/validate_input.js"),w,"utf8")},ze}function tn(){if(He)return Ge;He=1;const e=n,t=o,r=u;return Ge=async({atom:n,setProgress:o,context:i,packageDependencies:s})=>{await o({message:"Creating .gitignore"});const a={atom:n,packageDependencies:s},c=i.templateCommonDir,p=r.compile(e.readFileSync(t.resolve(c,".gitignore.njk"),"utf8"),r.configure(c)).render(a),l=i.projectDir,d=t.resolve(l,".gitignore");e.writeFileSync(d,p,"utf8")},Ge}function nn(){if(Ve)return Xe;Ve=1;const e=n,t=o,r=u;return Xe=async({atom:n,setProgress:o,context:i,packageDependencies:s})=>{await o({message:"Creating tsconfig.json."});const a={atom:n,packageDependencies:s},c=i.templateCommonDir,p=r.compile(e.readFileSync(t.resolve(c,"tsconfig.json.njk"),"utf8"),r.configure(c)).render(a),l=i.projectDir,d=t.resolve(l,"tsconfig.json");e.writeFileSync(d,p,"utf8")},Xe}function on(){if(Ze)return Ye;Ze=1;const e=u,t=n,r=o,i=l;return Ye=async({atom:n,context:o,setProgress:s,Atom:a})=>{const c="readme.md",p=`Creating ${c}`;if(await s({message:p}),o.project?.readme){const n=o.projectDir,s={content:o.project.readme.doc.content},a=r.resolve(o.project.projectDir,"fnet/how-to.md");if(t.existsSync(a)){const e=t.readFileSync(a,"utf8");s.howto=e}const p=r.resolve(o.project.projectDir,"fnet/input.yaml");if(t.existsSync(p)){const e=await i({file:p,tags:o.tags});s.input=e.content}const l=o.templateCommonDir,d=e.compile(t.readFileSync(r.resolve(l,`${c}.njk`),"utf8"),e.configure(l)).render(s),f=r.resolve(n,`${c}`);t.writeFileSync(f,d,"utf8")}else if(n.id){const i=await a.first({type:"wiki",parent_id:n.id});if(!i||"markdown"!==i.doc?.["content-type"])return;const{content:s,...p}=i.doc,l={content:s},d=o.templateCommonDir,f=e.compile(t.readFileSync(r.resolve(d,`${c}.njk`),"utf8"),e.configure(d)).render(l),m=o.projectDir,u=r.resolve(m,`${c}`);t.writeFileSync(u,f,"utf8")}},Ye}function rn(){if(et)return Qe;et=1;const e=i,t=f;return Qe=async({setProgress:n,context:o})=>{const r=o.projectDir;await n({message:"Prettifiying source files."});let i=e.join("src","**","*");await t({commands:{steps:[`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`],wdir:r}})}}function sn(){if(nt)return tt;nt=1;const e=p;return tt=async({atom:t,setProgress:n,context:o})=>{if(!t.doc.features.dts_enabled)return;const r=o.projectDir;await n({message:"Creating .d.ts"});if(0!==(await e("tsc",{cwd:r})).code)throw new Error("Couldnt create .d.ts files.")},tt}function an(){if(rt)return ot;rt=1;const e=p,t=Jt;return ot=async({setProgress:n,atom:o,context:r})=>{const i=r.projectDir;await n({message:"Installing npm packages."});const s=t("bun")?"bun":"npm";if(0!==(await e(`${s} install ${o.doc.features.npm_install_flags}`,{cwd:i})).code)throw new Error("Couldnt install npm packages.")},ot}function cn(){if(st)return it;st=1;const e=p;return it=async({setProgress:t,context:n})=>{const o=n.projectDir;await t({message:"Building main project."});if(0!==(await e("npm run build",{cwd:o})).code)throw new Error("Couldnt build project.")}}function pn(){if(Lt)return Kt;Lt=1;const e=function(){if(ct)return at;ct=1;const e=p,t=r;return at=async({setProgress:n,context:o,deploymentProject:r,deploymentProjectTarget:i,buildId:s})=>{await n({message:"Deploying it as gitlab project."});const a=o.projectDir;let c="fnet-to-gitlab";const p=i.params.config||"gitlab",l=await t({name:p,dir:o.projectDir,tags:o.tags});if(!l)throw new Error(`Couldnt load config ${p}`);const{data:d}=l.data;c+=` --projectGroupId=${d.projectGroupId}`,c+=` --projectPath='${a}'`,c+=` --projectName='${i.params.name}'`,c+=` --projectBranch='${i.params.branch||"main"}'`,c+=` --gitlabHost='${d.gitlabHost}'`,c+=` --gitlabToken='${d.gitlabToken}'`,c+=` --gitlabUsername='${d.gitlabUsername}'`,c+=` --gitlabUserEmail='${d.gitlabUserEmail}'`,!0!==i.dryRun&&(await e(c),r.isDirty=!0)}}(),t=function(){if(lt)return pt;lt=1;const e=n,t=o,i=$,s=p,a=r;return pt=async({setProgress:n,context:o,deploymentProject:r,deploymentProjectTarget:c,registerToPackageManager:p,yamlTarget:l})=>{await n({message:"Deploying it as gcs package."});const d=o.projectDir,f=t.resolve(d,"package.json"),m=e.readFileSync(f),u=JSON.parse(m);u.name=c.params.name,u.version=i.inc(c.version,"patch"),delete u.scripts,delete u.devDependencies,e.writeFileSync(f,JSON.stringify(u,null,"\t"));const{file:h,data:y}=await a({name:c.config||"gcs",dir:o.projectDir,tags:o.tags});let g="fnet-files-to-gcs";g+=` --projectId='${y.env.GCS_PROJECT_ID}'`,g+=` --bucketName='${y.env.GCS_BUCKET_NAME}'`,g+=` --keyFilename='${t.resolve(t.dirname(h),y.env.GCS_UPLOADER_KEY_FILE)}'`,g+=` --dir='${d}'`,g+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",g+=` --destDir='${u.name}/${u.version}'`,g+=" --metadata.cacheControl='public, max-age=31536000, immutable'",y.env.DOMAIN&&(g+=` --domain='${y.env.DOMAIN}'`),!0!==c.dry_run&&!0!==c.params.dry_run||(g+=" --dryRun"),await s(g),e.writeFileSync(f,m),!0!==c.dryRun&&(r.isDirty=!0,c.version=u.version,l.set("version",u.version),await p({target:c,packageJSON:u}))}}(),s=function(){if(ft)return dt;ft=1;const e=n,t=o,i=$,s=p,a=r,l=T,f=d,m=c,u=Jt;return dt=async({atom:n,setProgress:o,context:r,deploymentProject:c,deploymentProjectTarget:p,yamlTarget:d})=>{await o({message:"Deploying it as npm package."});const h=r.projectDir,y=t.resolve(h,"package.json"),g=e.readFileSync(y),w=JSON.parse(g);w.name=p.params.name,w.version=i.inc(p.version,"patch");const b=p.params.bin?.name||p.params.bin;!1!==p.params.bin?.enabled&&b&&"string"==typeof b&&(w.bin={[b]:"dist/cli/esm/index.js"}),delete w.scripts,delete w.devDependencies,w.scripts={serve:"npx serve ."},e.writeFileSync(y,JSON.stringify(w,null,"\t"));const x=p.config||"npm";let v=(await a({name:x,dir:r.projectDir,tags:r.tags,optional:!0}))?.data;if(!v){const n=l({dir:__dirname,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===n.length)throw new Error("Couldnt find schema to create npm config");const o=await f({schema:n[0],tags:r.tags}),i=r.project.projectDir,s=t.resolve(i,".fnet");e.existsSync(s)||e.mkdirSync(s),e.writeFileSync(t.resolve(s,`${x}.fnet`),m.stringify(o)),v=o}if(e.writeFileSync(t.resolve(h,".npmrc"),`//registry.npmjs.org/:_authToken=${v.env.NPM_TOKEN}`),!0===p.dryRun)return;const k=u("bun")?"bun":"npm";if(0!==(await s(`${k} publish --access public`,{cwd:h})).code)throw new Error("Couldnt publish to npm");e.writeFileSync(y,g),c.isDirty=!0,p.version=w.version,d.set("version",w.version)}}(),l=function(){if(ut)return mt;ut=1;const e=n,t=o,i=A,s=u,a=O,c=r;return mt=async({atom:n,setProgress:o,context:r,deploymentProject:p,deploymentProjectTarget:l,buildId:d,packageDependencies:f,njEnv:m})=>{await o({message:"Deploying it as node-red flow."});const u=r.projectDir,h=r.templateDir,y="workflow"===n.type?"WF":"LIB";let g;if("simple"===l.deploy.template)g={atom:n,packageDependencies:f,red:{tab:{id:l.deploy.id||a.util.generateId(),label:`${y}/${n.id?n.id:i.hostname()}/${n.name}/${l.deploy.name||l.deploy.template}`},function:{id:a.util.generateId(),name:n.doc.name,initialize:{content:e.readFileSync(t.resolve(u,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:n.doc.bundleName}},inject:{id:a.util.generateId(),...l.params?.inject,payload:"json"===l.params?.inject?.payloadType?`'${JSON.stringify(l.params?.inject?.payload)}'`:l.params?.inject?.payload},debug:{id:a.util.generateId()}}};else if("cronjob"===l.deploy.template){let o=l.params?.schedules?cloneDeep(l.params?.schedules):void 0;o?.forEach((e=>{"json"===e.payloadType&&(e.payload=`'${JSON.stringify(e.payload)}'`)})),g={atom:n,packageDependencies:f,red:{tab:{id:l.deploy.id||a.util.generateId(),label:`${y}/${n.id?n.id:i.hostname()}/${l.deploy.name||l.deploy.template}`},function:{id:a.util.generateId(),name:n.doc.name,initialize:{content:e.readFileSync(t.resolve(u,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:n.doc.bundleName}},cronjob:{id:a.util.generateId(),schedules:o},debug:{id:a.util.generateId()}}}}else{if("http"!==l.deploy.template)return;g={atom:n,packageDependencies:f,red:{tab:{id:l.deploy.id||a.util.generateId(),label:`${y}/${n.id?n.id:i.hostname()}/${l.deploy.name||l.deploy.template}`},function:{id:a.util.generateId(),name:n.doc.name,initialize:{content:e.readFileSync(t.resolve(u,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),var:n.doc.bundleName}},httpin:{id:a.util.generateId(),method:l.params.method||"get",url:l.params.url},httpout:{id:a.util.generateId()},debug:{id:a.util.generateId()}}}}let w=s.compile(e.readFileSync(t.resolve(h,`deploy/node-red/${l.deploy.template}.yaml.njk`),"utf8"),m).render(g);if(e.writeFileSync(t.resolve(u,"node-red.yaml"),w),w=yaml.load(w),!0===l.dryRun)return;p.isDirty=!0;const b=(await c({name:r.redConfig||"red",dir:r.projectDir,tags:r.tags}))?.data,x=l.deploy.url||b.env.RED_URL,v={};if(!1!==l.deploy.auth&&(v.Authorization="Bearer "+atomAccessToken),l.deploy.id)if(!0===l.actions?.delete){const e=await fetch(`${x}/flow/${l.deploy.id}`,{method:"DELETE",headers:v});if(!e.ok)throw new Error(`Failed to delete flow: ${e.statusText}`);delete l.actions.delete,delete l.deploy.id,l.enabled=!1}else{const e=await fetch(`${x}/flow/${l.deploy.id}`,{method:"PUT",headers:{...v,"Content-Type":"application/json"},body:JSON.stringify(w)});if(!e.ok)throw new Error(`Failed to update flow: ${e.statusText}`)}else{const e=await fetch(`${x}/flow`,{method:"POST",headers:{...v,"Content-Type":"application/json"},body:JSON.stringify(w)});if(!e.ok)throw new Error(`Failed to create flow: ${e.statusText}`);const t=await e.json();l.deploy.id=t.id}},mt}(),f=function(){if(yt)return ht;yt=1;const e=a,t=i,n=r;return ht=async({atom:o,Atom:r,setProgress:i,context:s,packageDependencies:a,deploymentProject:c,deploymentProjectTarget:p})=>{await i({message:"Deploying it as workflow lib."});const l=(await n({name:"atom",dir:s.projectDir,tags:s.tags}))?.data;let d,f,m,u=p.deploy.name.split("/");if(1===u.length)f=l.env.ATOM_LIBRARIES_ID,m=p.deploy.name;else{if(2!==u.length)throw new Error("Wrong name path.");{const e=await r.first({where:{name:u[0],parent_id:l.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");f=e.id,m=u[1]}}if(!0===p.dryRun)return;if(c.isDirty=!0,p.deploy.id){if(d=await r.get({id:p.deploy.id}),!d)return}else{if(d=await r.create({parent_id:f,doc:{name:m,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!d)return;p.deploy.id=d.id}const h=s.projectDir;d.doc.contents=[{content:e.readFileSync(t.resolve(h,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:e.readFileSync(t.resolve(h,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:e.readFileSync(t.resolve(h,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],d.doc.name=m,d.doc.dependencies=a,"workflow.lib"===o.type?d.doc.subtype="library":"workflow"===o.type&&(d.doc.subtype="workflow"),d=await r.update(d,{id:d.id})},ht}(),m=function(){if(wt)return gt;wt=1;const e=r,t=N,n=h,o=$;return gt=async({atom:r,target:i,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as ios-app package."});const d=i?.config?await e({name:i.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(i.version||"0.1.0","patch");i.params.version=f,i.version=f,l.set("version",f);const m=n(i.params);m.dependencies=n(c);const u={atom:r,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},gt}(),y=function(){if(xt)return bt;xt=1;const e=r,t=C,n=h,o=$;return bt=async({atom:r,target:i,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as macos-app package."});const d=i?.config?await e({name:i.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(i.version||"0.1.0","patch");i.params.version=f,i.version=f,l.set("version",f);const m=n(i.params);m.dependencies=n(c);const u={atom:r,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},bt}(),g=function(){if(kt)return vt;kt=1;const e=r,t=I,n=h,o=$;return vt=async({atom:r,target:i,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as electron package."});const d=i?.config?await e({name:i.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(i.version||"0.1.0","patch");i.params.version=f,i.version=f,l.set("version",f);const m=n(i.params);m.dependencies=n(c);const u={atom:r,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},vt}(),w=function(){if(_t)return jt;_t=1;const e=r,t=F,n=h,o=$;return jt=async({atom:r,target:i,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as webos package."});const d=i?.config?await e({name:i.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(i.version||"0.1.0","patch");i.params.version=f,i.version=f,l.set("version",f);const m=n(i.params);m.dependencies=n(c);const u={atom:r,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},jt}(),b=function(){if(Et)return Dt;Et=1;const e=r,t=R,n=h,o=$;return Dt=async({atom:r,target:i,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as nextjs package."});const d=i?.config?await e({name:i.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(i.version||"0.1.0","patch");i.params.version=f,i.version=f,l.set("version",f);const m=n(i.params);m.dependencies=n(c);const u={atom:r,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},Dt}(),x=function(){if(Pt)return St;Pt=1;const e=r,t=M,n=h,o=$;return St=async({atom:r,target:i,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as docker package."});const d=i?.config?await e({name:i.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(i.version||"0.1.0","patch");i.params.version=f,i.version=f,l.set("version",f);const m=n(i.params);m.dependencies=n(c);const u={atom:r,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},St}(),v=function(){if(Tt)return $t;Tt=1;const e=n,t=o,i=$,s=p,a=r;return $t=async({setProgress:n,context:o,deploymentProject:r,deploymentProjectTarget:c,yamlTarget:p})=>{await n({message:"Deploying it as fnet package."});const l=o.projectDir,d=t.resolve(l,"package.json"),f=e.readFileSync(d),m=JSON.parse(f);m.name=c.params.name,m.version=i.inc(c.version,"patch"),delete m.scripts,delete m.devDependencies,e.writeFileSync(d,JSON.stringify(m,null,"\t"));const{file:u,data:h}=await a({name:c.config||"fnet-package",dir:o.projectDir,tags:o.tags});if(!h.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${u}`);if(!h.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${u}`);if(!h.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${u}`);const y=`${h.env.ATOM_API_URL}/v1/auth/token`,g=h.env.ATOM_API_USERNAME,w=h.env.ATOM_API_PASSWORD,b=await fetch(y,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:g,password:w})});if(!b.ok)throw new Error(`Failed to fetch token: ${b.statusText}`);const x=await b.json(),v=x?.access_token;if(!v)throw new Error(`Invalid access_token from ${y}`);let k="fnet-files-to-gcs";if(k+=` --projectId='${h.env.GCS_PROJECT_ID}'`,k+=` --bucketName='${h.env.GCS_BUCKET_NAME}'`,k+=` --keyFilename='${t.resolve(t.dirname(u),h.env.GCS_UPLOADER_KEY_FILE)}'`,k+=` --dir='${l}'`,k+=" --pattern={'dist/**/**','bin/**/**','test/**/**','*.html'}",k+=` --destDir='${m.name}/${m.version}'`,k+=" --metadata.cacheControl='public, max-age=31536000, immutable'",h.env.DOMAIN&&(k+=` --domain='${h.env.DOMAIN}'`),!0!==c.dry_run&&!0!==c.params.dry_run||(k+=" --dryRun"),await s(k),e.writeFileSync(d,f),!0===c.dryRun)return;r.isDirty=!0,c.version=m.version,p.set("version",m.version);const j=`${h.env.ATOM_API_URL}/v1/service/fnet-package/publish`,_=await fetch(j,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${v}`},body:JSON.stringify({name:m.name,version:m.version,version_domain:h.env.DOMAIN,docs:c.params.docs,configs:c.params.configs})});if(!_.ok)throw new Error(`Failed to publish fnet package: ${_.statusText}`);const D=await _.json();if(D?.error)throw new Error("Failed to publish fnet package.")}}(),k=function(){if(Ot)return At;Ot=1;const e=$,t=r;return At=async({setProgress:n,context:o,deploymentProject:r,deploymentProjectTarget:i,yamlTarget:s})=>{await n({message:"Deploying it as fnet form."});const{file:a,data:c}=await t({name:i.config||"fnet-form",dir:o.projectDir,tags:o.tags});if(!c.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${a}`);if(!c.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${a}`);if(!c.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${a}`);const p=`${c.env.ATOM_API_URL}/v1/auth/token`,l=c.env.ATOM_API_USERNAME,d=c.env.ATOM_API_PASSWORD,f=await fetch(p,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:l,password:d})});if(!f.ok)throw new Error(`Failed to fetch token: ${f.statusText}`);const m=await f.json(),u=m?.access_token;if(!u)throw new Error(`Invalid access_token from ${p}`);r.isDirty=!0;const h=e.inc(i.version,"patch");i.params.version=h,i.version=h,s.set("version",h);const y=`${c.env.ATOM_API_URL}/v1/service/fnet-form/publish`,g=await fetch(y,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${u}`},body:JSON.stringify({name:i.params.name,version:i.params.version,docs:i.params.docs,configs:i.params.configs})});if(!g.ok)throw new Error(`Error publishing fnet form: ${g.statusText}`);const w=await g.json();if(w?.error)throw new Error("Error publishing fnet form.")}}(),j=function(){if(Ct)return Nt;Ct=1;const e=$,t=r,n=a,o=p,i=B;return Nt=async({setProgress:r,context:s,deploymentProject:a,deploymentProjectTarget:c,yamlTarget:p})=>{await r({message:"Deploying it as fnet flow."});const{file:l,data:d}=await t({name:c.config||"fnet-flow",dir:s.project.projectDir,tags:s.tags});if(!d.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!d.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!d.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const f=`${d.env.ATOM_API_URL}/v1/auth/token`,m=d.env.ATOM_API_USERNAME,u=d.env.ATOM_API_PASSWORD,h=await fetch(f,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:m,password:u})});if(!h.ok)throw new Error(`Failed to fetch token: ${h.statusText}`);const y=await h.json(),g=y?.access_token;if(!g)throw new Error(`Invalid access_token from ${f}`);a.isDirty=!0;const w=e.inc(c.version,"patch");c.params.version=w,c.version=w,p.set("version",w);const b=`${d.env.ATOM_API_URL}/v1/service/fnet-flow/publish`,x=await fetch(b,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${g}`},body:JSON.stringify({name:c.params.name,version:c.params.version,docs:c.params.docs,configs:c.params.configs})});if(!x.ok)throw new Error(`Error publishing fnet flow: ${x.statusText}`);const v=await x.json();if(v?.error)throw new Error("Error publishing fnet flow.");const k=v?.upload.id;let j="fnet-dir-zipper";j+=` --sourceDir='${s.project.projectDir}'`,j+=" --pattern=**/*",j+=" --stdout_format=json";const _=await o(j);if(0!==_.code)throw new Error(_.stderr);const D=JSON.parse(_.stdout).path;let E=new i;E.append("file",n.createReadStream(D));const S=await fetch(`${d.env.ATOM_API_URL}/v1/service/upload/single/${k}`,{method:"POST",headers:{...E.getHeaders(),Authorization:`Bearer ${g}`},body:E});if(!S.ok)throw new Error(`Error uploading fnet flow: ${S.statusText}`);const P=await S.json();if(P?.error)throw new Error("Error uploading fnet flow.")}}(),_=function(){if(Ft)return It;Ft=1;const e=$,t=r,n=a,o=p,i=B;return It=async({setProgress:r,context:s,deploymentProject:a,deploymentProjectTarget:c,yamlTarget:p})=>{await r({message:"Deploying it as fnet node."});const{file:l,data:d}=await t({name:c.config||"fnet-node",dir:s.project.projectDir,tags:s.tags});if(!d.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${l}`);if(!d.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${l}`);if(!d.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${l}`);const f=`${d.env.ATOM_API_URL}/v1/auth/token`,m=d.env.ATOM_API_USERNAME,u=d.env.ATOM_API_PASSWORD,h=await fetch(f,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:m,password:u})});if(!h.ok)throw new Error(`Failed to fetch token: ${h.statusText}`);const y=await h.json(),g=y?.access_token;if(!g)throw new Error(`Invalid access_token from ${f}`);a.isDirty=!0;const w=e.inc(c.version,"patch");c.params.version=w,c.version=w,p.set("version",w);const b=`${d.env.ATOM_API_URL}/v1/service/fnet-node/publish`,x=await fetch(b,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${g}`},body:JSON.stringify({name:c.params.name,version:c.params.version,docs:c.params.docs,configs:c.params.configs})});if(!x.ok)throw new Error(`Error publishing fnet node: ${x.statusText}`);const v=await x.json();if(v?.error)throw new Error("Error publishing fnet node.");const k=v?.upload.id;let j="fnet-dir-zipper";j+=` --sourceDir='${s.project.projectDir}'`,j+=" --pattern=**/*",j+=" --stdout_format=json";const _=await o(j);if(0!==_.code)throw new Error(_.stderr);const D=JSON.parse(_.stdout).path;let E=new i;E.append("file",n.createReadStream(D));const S=await fetch(`${d.env.ATOM_API_URL}/v1/service/upload/single/${k}`,{method:"POST",headers:{...E.getHeaders(),Authorization:`Bearer ${g}`},body:E});if(!S.ok)throw new Error(`Error uploading fnet node: ${S.statusText}`);const P=await S.json();if(P?.error)throw new Error("Error uploading fnet node.")}}(),D=function(){if(Mt)return Rt;Mt=1;const e=r,t=q,n=h,o=$;return Rt=async({atom:r,target:i,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as Rust package."});const d=i?.config?await e({name:i.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(i.version||"0.1.0","patch");i.params.version=f,i.version=f,l.set("version",f);const m=n(i.params);m.dependencies=n(c);const u={atom:r,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},Rt}(),E=function(){if(qt)return Bt;qt=1;const e=r,t=K,n=h,o=$;return Bt=async({atom:r,target:i,onProgress:s,projectDir:a,dependencies:c,context:p,yamlTarget:l})=>{s&&await s({message:"Deploying it as pypi package."});const d=i?.config?await e({name:i.config,dir:a,optional:!0,transferEnv:!1,tags:p.tags}):void 0,f=o.inc(i.version||"0.1.0","patch");i.params.version=f,i.version=f,l.set("version",f);const m=n(i.params);m.dependencies=n(c);const u={atom:r,params:m,config:d?.config,src:a,dest:a};return{deployer:await t(u)}},Bt}();return Kt=async n=>{const{atom:o,packageDependencies:r,context:i,deploymentProjectTarget:a,setProgress:c,deploymentProject:p,yamlTarget:d}=n;if(!0===a.enabled)if("lib"===a.type)await f({...n});else if("red"===a.type)await l({...n});else if("npm"===a.type)await s({...n});else if("gcs"===a.type)await t({...n});else if("gitlab"===a.type)await e({...n});else if("fnet-package"===a.type)await v({...n});else if("fnet-form"===a.type)await k({...n});else if("fnet-node"===a.type)await _({...n});else if("fnet-flow"===a.type)await j({...n});else{let e;if("nextjs"===a.type?e=b:"webos"===a.type?e=w:"electron"===a.type?e=g:"docker"===a.type?e=x:"ios"===a.type?e=m:"macos"===a.type?e=y:"rust"===a.type?e=D:"pypi"===a.type&&(e=E),!e)return;await e({atom:o,target:a,onProgress:c,projectDir:i.projectDir,dependencies:r,context:i,yamlTarget:d}),p.isDirty=!0}},Kt}var ln,dn,fn,mn,un,hn,yn,gn,wn,bn,xn,vn,kn,jn,_n,Dn,En,Sn,Pn,$n,Tn,An,On,Nn,Cn,In,Fn,Rn,Mn,Bn,qn,Kn,Ln,Un,Jn,zn,Wn,Gn,Hn,Xn,Vn,Yn,Zn,Qn={name:"ATOM",uri:"http://atom.org/bpmn",prefix:"atom",types:[{name:"AtomExtension",extends:["bpmn:BaseElement"],properties:[{name:"atom",type:"atom:Atom",isMany:!1}]},{name:"Atom",properties:[{name:"type",type:"String",isAttr:!0}]}]};function eo(){if(dn)return ln;dn=1;const e=U,t=J,n=h,o=Qn;function r(e,t){return e.filter(((e,n,o)=>o.map((e=>e[t])).indexOf(e[t])===n))}function i(e){const{nodes:t,nodeIndex:n,root:o}=e,r=e.targetNodes||o.childs;r.forEach((t=>{const n="workflow"===t.type||"subworkflow"===t.type,o=!n&&t.childs.filter((e=>!e.virtual)).length>0;if(o&&(t.bpmn.type="bpmn:SubProcess"),n||o){const n=t.childs.filter((e=>!0!==e.module))[0];t.childs.filter((e=>!0===e.module)).forEach((n=>{const o=s({...e,parent:t,bpmnType:"bpmn:IntermediateCatchEvent",type:"inter",definitions:[{type:"bpmn:SignalEventDefinition"}]});o.bpmn.edges=[{from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}));const o=t.childs.find((e=>"try"===e.name&&"tryexcept"===t.type)),i=t.childs.filter((e=>"except"===e.name&&"tryexcept"===t.type));o&&i.length&&i.forEach((n=>{const r=s({location:t.childs.indexOf(n),...e,parent:t,bpmnType:"bpmn:BoundaryEvent",type:"boundary",attrs:{attachedToRef:o},definitions:[{type:"bpmn:ErrorEventDefinition"}]});r.bpmn.edges=[{from:r.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}));const a=t.childs.find((e=>"raise"===e.type));if(a){const n=s({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:"ERROR",definitions:[{type:"bpmn:ErrorEventDefinition"}]});a.bpmn.edges=[{from:a.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}if(n)if(t.bpmn.starts.length>1){const n=s({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"}),o=s({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch"});n.bpmn.edges=[{from:n.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}],o.bpmn.edges=t.bpmn.starts.map((e=>({...e,from:o.indexKey})));const r=o.bpmn.edges.find((e=>!0===e.next));if(r){const n=s({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:r.to});r.to=n.indexKey}}else{const o=s({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"});o.bpmn.edges.push({from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"})}t.childs.filter((e=>!0!==e.virtual&&e.bpmn.outside.length&&"bpmn:EndEvent"!==e.bpmn.type)).forEach((n=>{n.bpmn.outside.forEach((o=>{const i=r.indexOf(t),a=s({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:o.to,location:i+1});n.bpmn.edges.push({from:n.indexKey,to:a.indexKey,type:"bpmn:SequenceFlow"})}))}));t.childs.filter((e=>!0!==e.virtual&&e.bpmn.edges.length>1)).forEach((n=>{const o=r.indexOf(n),i=s({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch",location:o+1});i.bpmn.edges=n.bpmn.edges.map((e=>({...e,from:i.indexKey}))),n.bpmn.edges=[{from:n.indexKey,to:i.indexKey,type:"bpmn:SequenceFlow"}],n.bpmn.outside=[]}))}i({...e,targetNodes:t.childs})}))}function s(e){const{parent:t,nodes:n,nodeIndex:o,bpmnType:r,type:i,name:s,outside:a,location:c,definitions:p,attrs:l}=e,d=t.childs.filter((e=>e.type===`v${i}`)).length,f={indexKey:`${t.indexKey}/_${i}${d}`,pathKey:`${t.pathKey}._${i}${d}`,type:`v${i}`,name:s,bpmn:{edges:[],outside:[],type:r,width:36,height:36,fill:"#c8e6c9",stroke:"#205022",definitions:p,attrs:l},virtual:!0,childs:[]};return t.childs.splice(c||0,0,f),n.push(f),o[f.indexKey]=f,f}function a(e){const{targetNode:n,targetFlowElementsContainer:o,targetPlaneElement:r,moddle:i,elementIndex:s,nodeIndex:c,diagrams:p,nodes:l}=e;!function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:r,elementIndex:i,nodeIndex:s,nodes:a}=e,c=n.get("flowElements");n.$nodes=n.$nodes||[],t.childs.forEach((e=>{const t=r.create(e.bpmn.type,{id:`node.${e.pathKey}`,name:e.definition?.title||e.name});if(i[t.id]=t,t.$isNode=!0,t.$node=e,e.$flow=t,n.$nodes.push(t),c.push(t),e.bpmn.attrs){Object.keys(e.bpmn.attrs).forEach((n=>{"attachedToRef"===n&&t.set(n,e.bpmn.attrs[n].$flow)}))}if(e.bpmn.definitions){const n=e.bpmn.definitions.map((e=>{const t=r.create(e.type);return Object.keys(e.attrs||{}).forEach((n=>{t.set(n,e.attrs[n])})),t}));t.eventDefinitions=n}}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:r,elementIndex:i,nodeIndex:s}=e,a=n.get("flowElements");n.$edges=n.$edges||[],t.childs.forEach((e=>{e.bpmn.edges.forEach((t=>{const o=e,c=s[t.to],p=`edge.${o.pathKey}_${c.pathKey}`;if(i[p])return;const l=i[`node.${o.pathKey}`],d=i[`node.${c.pathKey}`],f=r.create(t.type,{id:p,sourceRef:l,targetRef:d});i[f.id]=f,f.$is_edge=!0,l.get("outgoing").push(f),d.get("incoming").push(f),n.$edges.push({from:l,to:d,flow:f}),a.push(f)}))}))}(e),function(e){const{targetNode:n,targetFlowElementsContainer:o,targetPlaneElement:r,moddle:i,elementIndex:s,nodeIndex:a}=e,c=120,p=80,l=160,d=160,f=new t.graphlib.Graph;f.setDefaultEdgeLabel((()=>({}))),f.setGraph({rankdir:"TB",nodesep:c,ranksep:p,xranker:"longest-path"}),o.$nodes.forEach((e=>{f.setNode(e.id,{width:e.$node?.bpmn.width||c,height:e.$node?.bpmn.height||p,label:e.id})})),o.$edges.forEach((e=>{f.setEdge(e.from.id,e.to.id)})),t.layout(f),o.$nodes.forEach((e=>{const t=f.node(e.id);let n=t.width,o=t.height;const s=i.create("bpmndi:BPMNShape",{id:`shape.${e.id}`,bpmnElement:e,bounds:i.create("dc:Bounds",{x:l+t.x-t.width/2,y:d+t.y-t.height/2,width:n,height:o}),label:i.create("bpmndi:BPMNLabel")});e.$node.bpmn.fill&&s.set("bioc:fill",e.$node.bpmn.fill),e.$node.bpmn.stroke&&s.set("bioc:stroke",e.$node.bpmn.stroke);r.get("planeElement").push(s)})),o.$edges.forEach((e=>{const t=f.edge(e.from.id,e.to.id),n=i.create("bpmndi:BPMNEdge",{id:`edge.${e.from.id}_${e.to.id}`,bpmnElement:e.flow,label:i.create("bpmndi:BPMNLabel")});t.points.forEach((e=>{const t=i.create("dc:Point",{x:l+e.x,y:d+e.y});n.get("waypoint").push(t)}));r.get("planeElement").push(n)}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:r,elementIndex:i,nodeIndex:s,diagrams:c}=e,p=t.childs.filter((e=>"bpmn:SubProcess"===e.bpmn.type));p.forEach((t=>{const n=i[`node.${t.pathKey}`],o=r.create("bpmndi:BPMNDiagram",{id:`diagram_${t.pathKey}`});i[o.id]=o,c.push(o);const s=r.create("bpmndi:BPMNPlane",{id:`plane_${t.pathKey}`});i[s.id]=s,o.plane=s,s.bpmnElement=n,a({...e,targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:s})}))}(e)}async function c(t){const n=t.root,s=n.context.index,c=Object.keys(s).map((e=>s[e]));!function(e){const{nodes:t}=e;t.forEach((e=>{const t=[],n=[],o=r=>{r.context.next&&(t.push({from:r,to:r.context.next,type:"bpmn:SequenceFlow"}),r===e&&n.push({to:r.context.next,type:"bpmn:SequenceFlow",next:!0})),r.childs.forEach((t=>{r===e&&"switch"===e.type&&n.push({to:t,type:"bpmn:SequenceFlow"}),o(t)}))};o(e);const i=t.filter((t=>t.to.parent.indexKey===e.parent.indexKey)).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),s=t.filter((t=>t.to.parent.indexKey!==e.parent.indexKey&&!t.to.indexKey.startsWith(e.indexKey+"/"))).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),a=n.map((e=>({...e,to:e.to.indexKey})));e.bpmn=e.bpmn||{},e.bpmn.edges=r(i,"to"),e.bpmn.outside=r(s,"to"),e.bpmn.starts=r(a,"to"),e.bpmn.type=function(e){return"call"===e.type?"bpmn:ServiceTask":"form"===e.type?"bpmn:UserTask":"return"===e.type?"bpmn:EndEvent":"bpmn:Task"}(e),e.bpmn.width=120,e.bpmn.height=80,"return"===e.type&&(e.bpmn.width=36,e.bpmn.height=36)}))}({nodes:c}),i({nodes:c,nodeIndex:s,root:n});const p=new e({atom:o}),l={},d=p.create("bpmn:Definitions",{id:"definitions_0"});l[d.id]=d;for await(const e of n.childs){const t=d.get("rootElements"),o=d.get("diagrams"),r=p.create("bpmn:Process",{id:`process_${e.pathKey}`,documentation:[p.create("bpmn:Documentation",{text:`Atom Workflow - ${n.context.atom.name}`})]});l[r.id]=r,r.isExecutable=!0,t.push(r);const i=p.create("bpmndi:BPMNDiagram",{id:`diagram_${e.pathKey}`});l[i.id]=i,o.push(i);const f=p.create("bpmndi:BPMNPlane",{id:`plane_${e.pathKey}`});l[f.id]=f,i.plane=f,f.bpmnElement=r;a({targetNode:e,targetFlowElementsContainer:r,targetPlaneElement:f,moddle:p,elementIndex:l,nodeIndex:s,nodes:c,diagrams:o})}return{diagramXML:(await p.toXML(d,{format:!0})).xml}}return ln=async(e={})=>await c(n(e))}function to(){if(mn)return fn;mn=1;const e=H,t=z;return fn=async({node:n,initNode:o})=>{if(Reflect.has(n.definition,"modules")&&!Array.isArray(n.definition.modules)){const e=n.definition.modules;n.definition.modules=[],Object.keys(e).forEach((t=>{const o={...e[t]};"modules"===n.type&&(o.export=o.export||t),n.definition.modules.push({[t]:o})}))}const r=[],i=await e({data:n.definition,callback:(e,n,o)=>{const i=t({expression:e});if("m"===i?.processor){const e=o.slice(0,-1);e.push(i.statement);const t=e.join("_");return r.push({[t]:n}),[i.statement,`m::${t}`]}return[e,n]}});r.length>0&&(n.definition=i,n.definition.modules=n.definition.modules||[],n.definition.modules=n.definition.modules.concat(r)),n.hasModules=n.definition.modules?.length>0;for(let e=0;e<n.definition.modules?.length;e++){const t=n.definition.modules[e],r=Object.keys(t)[0],i={name:r,childs:[],parent:n,definition:t[r],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:n.childs.length,context:{}};n.childs.push(i),await o({node:i})}},fn}function no(){return hn?un:(hn=1,un=async({node:e,transformExpression:t})=>{const n=e.context.transform;Reflect.has(n,"export")&&(n.export=await t(n.export)),Reflect.has(n,"return")&&(e.hasReturn=!0,n.return=await t(n.return)),n.hasOwnProperty("nextArgs")&&(e.hasNextArgs=!0,n.nextArgs=await t(n.nextArgs))})}function oo(){if(gn)return yn;gn=1;const e=h,t=to(),n=no();async function o({node:t,resolveTypeCommon:o,resolveNextBlock:r,transformExpression:i}){t.context.transform=t.context.transform||e(t.definition),t.context.transform;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,transformExpression:i}),await o({node:t}),r({node:t})}return yn={hits:async function({node:e}){return!!e.definition.hasOwnProperty("switch")},init:async function({node:e,initNode:n}){e.type="switch";const r=e.definition.switch||[];if(!r.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===r.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const i=r.filter((e=>e.hasOwnProperty("default")));if(i.length>1)throw new Error("Switch must have only one default");if(1===i.length&&!r[r.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");e.hasDefaultCondition=1===i.length,await t({node:e,initNode:n}),e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let t=0;t<e.definition.switch.length;t++){let o=e.definition.switch[t],r=`${t}`;o.hasOwnProperty("default")&&(r="default",o=o.default);const i={name:o.condition||r,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(i),await n({node:i})}e.resolve=o},resolve:o}}function ro(){if(Nn)return On;Nn=1;const e=h,t=to(),n=no();async function o({node:t,resolveTypeCommon:o,resolveNextBlock:r,transformExpression:i}){t.context.transform=t.context.transform||e(t.definition);const s=t.context.transform;if("function"===t.target?.atom?.doc?.type&&(s.call=await i(t.target.atom.name)),s.args&&(s.args=await i(s.args)),s.result){"string"==typeof s.result&&(s.result=[{[s.result]:"e::result"}]);for(let e=0;e<s.result?.length;e++){let t=s.result[e],n=Object.keys(t)[0],o=t[n],r={key:await i(n),value:await i(o)};s.result[e]=r}}const a=t.workflow.parent;s.import?t.context.lib=a.context.libs.find((e=>e.name===s.import)):t.context.lib=a.context.libs.find((e=>e.name===s.call)),await n({node:t,transformExpression:i}),await o({node:t}),r({node:t})}return On={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:n}){e.type="call",await t({node:e,initNode:n}),e.resolve=o},resolve:o}}function io(){return zn?Jn:(zn=1,Jn=({node:e})=>{const t=e.definition;if(!e.hasReturn)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{if(!0===e.module)return;let t=e.parent,n=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(Reflect.has(t,"blockAutoJumpToParent")||Reflect.has(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 so(){if(Gn)return Wn;Gn=1;const e=ro();class t{#e;#t;#n;#o;constructor({key:e,npm:t,master:n,extras:o}){this.#e=e,this.#t=t,this.#n=n,this.#o=o}hits({node:e}){return e.definition.hasOwnProperty(this.#e)}async init(t){const{node:n}=t,o=this.#e,r=n.definition,i=typeof r[o];if(r.call=`npm:${this.#t}`,r.args="object"!==i?{...r.args,[`${this.#n}`]:r[o]}:r[o],delete r[o],this.#o)for(const e in this.#o)r[e]=this.#o[e];console.log(`[npm-block] ${this.#e} --\x3e ${this.#t}`),await e.init(t)}}return Wn=e=>new t(e)}function ao(){if(Xn)return Hn;Xn=1;const e=n,t=o,i=c,s=p,a=u,d=h,f=y,m=function(){if(ee)return Q;ee=1;const e=g,t=w;return Q=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}}(),{randomUUID:v}=b,j=function(){if(ne)return te;ne=1;const{Api:e}=x;return te=class{init({config:t,accessToken:n}){return new Promise(((o,r)=>{if(e.set_api_url(t.data.url),n)return e.set_req_token(n),void o(n);fetch(`${t.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(t.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((t=>{e.set_req_token(t.access_token),o(t.access_token)})).catch((t=>{e.set_req_token(),r(t)}))}))}}}(),_=Gt(),D=Ht(),E=Xt(),S=Yt(),P=Zt(),$=Qt(),T=en(),A=tn(),O=nn(),N=on(),C=rn(),I=sn(),F=an(),R=cn(),M=Vt(),B=pn(),{Atom:q}=x,K=L,U=eo(),J=r,H=k,Y=z,Z=l,oe=W,re=G,ie=function(){if(bn)return wn;bn=1;const e=z,t=oo();return wn={hits:async function({node:t}){return 1===Object.keys(t.definition).map((t=>e({expression:t}))).filter((e=>"if"===e?.processor)).length},init:async function(n){const{node:o}=n,r=Object.keys(o.definition).map((t=>e({expression:t}))),i=[],s=r.find((e=>"if"===e?.processor)),a=o.definition[s.expression];i.push({name:`${o.name}_if`,definition:a,processor:s}),delete o.definition[s.expression];const c=r.filter((e=>"elseif"===e?.processor));let p=0;for(const e of c){const t=o.definition[e.expression];i.push({name:`${o.name}_elseif_${p++}`,definition:t,processor:e}),delete o.definition[e.expression]}o.definition.switch=[];for(const e of i)o.definition.switch.push({condition:e.processor.statement,...e.definition});if(o.definition?.else){const e=o.definition.else;o.definition.switch.push({default:e}),delete o.definition.else}await t.init(n)}}}(),se=function(){if(vn)return xn;vn=1;const e=h,t=to(),n=no();async function o({node:t,resolveTypeCommon:o,resolveNextBlock:r,transformExpression:i}){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,transformExpression:i}),await o({node:t}),r({node:t})}return xn={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",await t({node:e,initNode:n}),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=o},resolve:o}}(),ae=function(){if(jn)return kn;jn=1;const e=h,t=to(),n=no();async function o({node:t,resolveTypeCommon:o,resolveNextBlock:r,transformExpression:i}){t.context.transform=t.context.transform||e(t.definition);const s=t.context.transform;for(let e=0;e<s.assign?.length;e++){let t=s.assign[e],n=Object.keys(t)[0],o=t[n],r={key:await i(n),value:await i(o)};s.assign[e]=r}await n({node:t,transformExpression:i}),await o({node:t}),r({node:t})}return kn={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:n}){e.type="assign",await t({node:e,initNode:n}),e.resolve=o},resolve:o}}(),ce=function(){if(Dn)return _n;Dn=1;const e=h,t=X,n=V,o=to(),r=no();async function i({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 r({node:t,transformExpression:i}),await n({node:t}),o({node:t})}return _n={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:r}){if(e.type="for",await o({node:e,initNode:r}),e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const o=["value","in"],[r,i]=[t(e.definition.for,o),n(e.definition.for,o)];e.definition.for=r,e.definition.for.steps=[{[`${e.name}_step`]:i}]}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],i={name:o,childs:[],parent:e,definition:n[o],index:e.childs.length,context:{}};e.childs.push(i),await r({node:i})}e.resolve=i},resolve:i}}(),pe=oo(),le=Sn?En:(Sn=1,En={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:r}){}}),de=function(){if($n)return Pn;$n=1;const e=h;async function t({node:t,resolveTypeCommon:n,transformExpression:o}){t.context.transform=t.context.transform||e(t.definition);const r=t.context.transform;r.raise=await o(r.raise),await n({node:t})}return Pn={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}}(),fe=function(){if(An)return Tn;An=1;const e=h;async function t({node:t,resolveTypeCommon:n,transformExpression:o}){t.context.transform=t.context.transform||e(t.definition);const r=t.context.transform;t.hasReturn=!0,r.return=await o(r.return),await n({node:t})}return Tn={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}}(),me=ro(),ue=function(){if(In)return Cn;In=1;const e=h,t=no();async function n({node:n,transformExpression:o}){n.context.next=n.childs[0],n.context.transform=n.context.transform||e(n.definition),await t({node:n,transformExpression:o})}return Cn={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const o=e.definition.steps||[];for await(const n of o){const o=Object.keys(n)[0],r={name:o,childs:[],parent:e,definition:n[o],index:e.childs.length,context:{}};e.childs.push(r),await t({node:r})}e.resolve=n},resolve:n}}(),he=function(){if(Rn)return Fn;Rn=1;const e=h,t=to(),n=no();async function o({node:t,resolveTypeCommon:o,resolveNextBlock:r,transformExpression:i}){t.context.transform=t.context.transform||e(t.definition);const s=t.context.transform;s.props&&(s.props=await i(s.props));const a=t.workflow.parent;t.context.lib=a.context.libs.find((e=>e.name===s.form)),await n({node:t,transformExpression:i}),await o({node:t}),r({node:t})}return Fn={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:n}){e.type="form",await t({node:e,initNode:n}),e.resolve=o},resolve:o}}(),ye=function(){if(Bn)return Mn;Bn=1;const e=h;async function t({node:t,resolveTypeCommon:n,resolveNextBlock:o,transformExpression:r,transformValue:i}){t.context.transform=t.context.transform||e(t.definition),await n({node:t})}return Mn={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}}(),ge=function(){if(Kn)return qn;Kn=1;const e=h,t=no();async function n({node:n,resolveTypeCommon:o,resolveNextBlock:r,transformExpression:i}){n.context.transform=n.context.transform||e(n.definition);const s=n.context.transform;s.next=await i(s.next),await t({node:n,transformExpression:i}),await o({node:n}),r({node:n})}return qn={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=n},resolve:n}}(),we=function(){if(Un)return Ln;Un=1;const e=h,t=to(),n=no();async function o({node:t,resolveTypeCommon:o,resolveNextBlock:r,transformExpression:i}){t.context.transform=t.context.transform||e(t.definition),t.context.transform,await n({node:t,transformExpression:i}),await o({node:t}),r({node:t})}return Ln={hits:async function({node:e}){return e.definition.hasOwnProperty("modules")},init:async function({node:e,initNode:n}){e.type="modules",await t({node:e,initNode:n}),e.resolve=o},resolve:o}}(),be=io(),xe=so();return Hn=class{#r;#i;#s;#a;#c;#p;#l;#d;#f;#m;#u;#h;#y;#g;#w;#b;#x;#v;#k;#j;#_;#D=[];constructor(e){this.#r=new j,this.#i=e,this.#p=[],this.#l=[],this.#d={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#D.push(xe({key:"config",npm:"@fnet/config",master:"name"})),this.#D.push(xe({key:"yaml",npm:"@fnet/yaml",master:"file"})),this.#D.push(xe({key:"prompt",npm:"@fnet/prompt",master:"message"})),this.#D.push(xe({key:"html-link",npm:"@flownet/lib-load-browser-link-url",master:"src"})),this.#D.push(xe({key:"html-script",npm:"@flownet/lib-load-browser-script-url",master:"src"})),this.#D.push(xe({key:"http-server",npm:"@fnet/node-express",master:"server_port"})),this.#D.push(xe({key:"shell",npm:"@fnet/shell-flow",master:"commands"})),this.#D.push(xe({key:"list-files",npm:"@fnet/list-files",master:"pattern"})),this.#D.push(xe({key:"up-list-files",npm:"@fnet/up-list-files",master:"pattern"})),this.#D.push(xe({key:"auto-conda-env",npm:"@fnet/auto-conda-env",master:"envDir"})),this.#D.push(xe({key:"ollama-chat",npm:"@fnet/ollama-chat",master:"model"})),this.#D.push(xe({key:"ai",npm:"@fnet/ai",master:"prompt",extras:{subtype:"flow"}})),this.#D.push(xe({key:"invoke",npm:"@fnet/invoke",master:"method",extras:{}})),this.#D.push(xe({key:"fetch",npm:"@fnet/fetch",master:"url",extras:{}})),this.#D.push(xe({key:"filemap",npm:"@fnet/filemap",master:"target",extras:{}})),this.#j={packageDependencies:this.#p,packageDevDependencies:this.#l,setProgress:this.setProgress.bind(this),context:this.#i,Atom:q,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#_={initNode:this.initNode.bind(this),cloneDeep:d,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:be,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 m(),this.#u=this.#i.buildId||v(),this.#j.buildId=this.#u,this.#w=this.#i.mode,this.#b=["all","deploy","build","file"].includes(this.#w),this.#x=["all","deploy","build"].includes(this.#w),this.#v=["all","deploy"].includes(this.#w),this.#k=["all","deploy","build","file","bpmn"].includes(this.#w),this.#y=this.#i.protocol,this.#h="BUILD:"+this.#u,this.#g=(await J({optional:!0,name:"atom",dir:this.#i.projectDir,tags:this.#i.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),this.transformWorkflow({workflow:this.#a});const e=await this.initNodeTree({workflow:this.#a});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.initEntryFiles({root:e,features:this.#s.doc.features}),await this.initFeaturesFromNodes({childs:e.childs,features:this.#s.doc.features}),await _(this.#j),await D(this.#j),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#p}),await this.resolveNodeTree({root:e}),this.#m=e}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#i.id&&(this.#f=await this.#r.init({config:this.#g}),this.#j.atomAccessToken=this.#f)}async initWorkflow(){const e=this.#i.id;this.#s=this.#i.project?.workflowAtom||await q.get({id:e}),this.#a="string"==typeof this.#s.doc.content?(await Z({content:this.#s.doc.content,tags:this.#i.tags})).parsed:this.#s.doc.content;let t=this.#s.doc.bundleName;t=t||(this.#s.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#s.doc.bundleName=t,this.#s.type=this.#s.type||"workflow",this.#j.atom=this.#s,this.#s.doc.features=this.#s.doc.features||{}}#E(n){console.log("filePath",n),e.statSync(n).isDirectory()?(e.readdirSync(n).forEach((e=>{const o=t.join(n,e);this.#E(o)})),e.rmSync(n)):e.unlinkSync(n)}#S(n,o){const r=e.existsSync(n),i=r&&e.statSync(n);r&&i.isDirectory()?(e.mkdirSync(o,{recursive:!0}),e.readdirSync(n).forEach((e=>{this.#S(t.join(n,e),t.join(o,e))}))):e.copyFileSync(n,o)}async initWorkflowDir(){this.setProgress({message:"Initializing library directory."});const n=this.#i.projectDir,o=this.#i.coreDir;this.setProgress({message:"Cleaning project directory."});const r=re({dir:n,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."}),e.existsSync(n)||e.mkdirSync(n,{recursive:!0});const i=t.join(n,"src");e.existsSync(i)||e.mkdirSync(i,{recursive:!0});const s=t.join(i,"core");this.#S(o,s);const a=t.join(i,"default","blocks");e.existsSync(a)||e.mkdirSync(a,{recursive:!0})}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#i.templateDir;this.#c=a.configure(e,{watch:!1,dev:!0}),this.#j.njEnv=this.#c}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.filter((e=>Object.keys(e).length>0)),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,...r}=n;e[t]={try:r,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.#s}};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.#_,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await se.hits(t))await se.init(t);else if(await ce.hits(t))await ce.init(t);else if(await pe.hits(t))await pe.init(t);else if(await ie.hits(t))await ie.init(t);else if(await le.hits(t))await le.init(t);else if(await ae.hits(t))await ae.init(t);else if(await de.hits(t))await de.init(t);else if(await me.hits(t))await me.init(t);else if(this.#D.find((e=>e.hits(t))))await this.#D.find((e=>e.hits(t))).init(t);else if(await he.hits(t))await he.init(t);else if(await ye.hits(t))await ye.init(t);else if(await ue.hits(t))await ue.init(t);else if(await ge.hits(t))await ge.init(t);else if(await we.hits(t))await we.init(t);else{if(!await fe.hits(t))throw new Error("Undefined step type.");await fe.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:n}){const o=t.join(e.parent.indexKey,e.name);e.indexKey=o,n[o]=e;const r=[];let i=e;for(;i?.parent;)r.push(i.index),i=i.parent;r.reverse(),e.codeKey=`B_${r.join("_")}_${e.type}`,e.pathKey=`${r.join(".")}`,e.typeId=v();for await(const t of e.childs)await this.initNodeIndex({node:t,index:n})}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.import||e.definition.call,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom",definition:e.definition},r=t.find((e=>e.name===o.name&&e.type===o.type));r||t.push(o),e.target=r||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.import||e.definition.form,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},r=t.find((e=>e.name===o.name&&e.type===o.type));r||t.push(o),e.target=r||o}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async initFeaturesFromNodes({childs:e,features:t}){for await(const n of e)"form"!==n.type||Reflect.has(t,"form")||(t.form=!0),await this.initFeaturesFromNodes({childs:n.childs,features:t})}async initEntryFiles({root:e,features:t}){for await(const n of e.childs){let e;if("main"===n.name)e="index.js";else if("cli"===n.name)e="cli.js";else if("app"===n.name)e="app.js";else{if("api"!==n.name)continue;e="api.js"}t[`${n.name}_default_entry_file`]=e,n.entryFile=e}}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],r=await this.findAtomLibrary({url:o.name,libRef:o});o.atom=r;const i=r.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));i?.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:n}){const o=K({url:e});if(!o)throw new Error(`Invalid package name: ${e}`);if(o.protocol||(o.protocol=this.#y),"ac:"===o.protocol){const t=o.pathname.split("/");if(1===t.length)return await q.first({where:{name:e,parent_id:this.#g.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await q.first({where:{name:t[0],parent_id:this.#g.env.ATOM_LIBRARIES_ID,type:"folder"}});return await q.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===o.protocol){const e=t.resolve(this.#i.projectSrcDir,`${o.pathname}.js`),n=[],r=(await H({file:e,recursive:!0})).all;for await(const e of r){if("npm"!==e.type)continue;if(n.find((t=>t.package===e.package)))continue;const t=await M({name:e.package,projectDir:this.#i.projectDir,setProgress:this.#j.setProgress});n.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return{name:o.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:n},protocol:o.protocol}}if("npm:"===o.protocol){const e=await M({name:o.pathname,projectDir:this.#i.projectDir,setProgress:this.#j.setProgress});return{name:o.pathname,doc:{type:"workflow.lib",subtype:"flow"===n?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:o.pathname,version:e.minorRange,type:"npm"}]},protocol:o.protocol}}if("use:"===o.protocol){return{name:o.pathname,doc:{type:"function",dependencies:[]},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=e.context.transform||d(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],type:typeof 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.#_,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:n}){await this.setProgress({message:"Creating external lib files."}),this.#s.typesDir="./types";const o=n.context.libs.filter((e=>"atom"===e.type));for(let n=0;n<o.length;n++){const r=o[n].atom,i=this.#i.projectDir;if("local:"===r.protocol){const n=t.resolve(this.#i.projectSrcDir,`${r.fileName||r.name}.js`),o=t.relative(`${this.#i.projectDir}/src/default/blocks`,n);if(!e.existsSync(n)){e.mkdirSync(t.dirname(n),{recursive:!0});let o="export default async (args)=>{\n";o+="}",e.writeFileSync(n,o,"utf8")}r.relativePath=o.split(t.sep).join("/"),this.#s.typesDir=`./types/${t.basename(i)}/src`}else if("npm:"===r.protocol)r.relativePath=r.name;else if("use:"===r.protocol);else{const n=`${i}/src/libs/${r.id}.js`,o=r.doc.contents?.find((e=>"esm"===e.format))||r.doc;e.writeFileSync(t.normalize(n),o.content,"utf8")}}}async createEngine({root:n}){await this.setProgress({message:"Creating engine file."});const o=this.#i.templateDir,r=a.compile(e.readFileSync(t.resolve(o,"src/default/engine.js.njk"),"utf8"),this.#c);for(let o=0;o<n.childs.length;o++){const i=n.childs[o];if(!i.entryFile)continue;const s=r.render({flow:i,ui:{package:"@fnet/react-app"}}),a=this.#i.projectDir,c=t.resolve(a,`src/default/${i.entryFile}`);e.writeFileSync(c,s,"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:n}){const o=this.#i.templateDir,r=a.compile(e.readFileSync(t.resolve(o,"src/default/workflow.js.njk"),"utf8"),this.#c).render(n),i=this.#i.projectDir,s=t.resolve(i,`src/default/${n.codeKey}.js`);e.writeFileSync(s,r,"utf8");for await(const e of n.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":case"modules":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:n}){let o=this.#d[n.type];if(o)return o;const r=this.#i.templateDir;return o=a.compile(e.readFileSync(t.resolve(r,`src/default/blocks/${n.type}.js.njk`),"utf8"),this.#c),this.#d[n.type]=o,o}createStepFile({node:n}){const o=this.#i.projectDir,r=`${n.codeKey}.js`,i=t.resolve(o,`src/default/blocks/${r}`);e.writeFileSync(i,n.context.render,"utf8"),n.context.fileName=r,n.context.filePath=i}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(f(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++){const o=t[n],r=Y({expression:o});if(r)if("e"===r.processor){const t=e[o].replace(/(\r\n|\n|\r)/g,"");e[r.statement]=`$::${t}::`,delete e[o]}else e[o]=await this.transformValue(e[o]);else e[o]=await this.transformValue(e[o])}}else if("string"==typeof e){const t=Y({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=`$::c.module['${o}']::`;break;case"fm":e=`$::flow.getModule('${o}')::`;break;case"f":e=`$::c.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 n="fnet.yaml",o=`Creating ${n}`;await this.setProgress({message:o});const{content:r,...s}=this.#s.doc,c={content:i.stringify(s)},p=this.#i.templateDir,l=a.compile(e.readFileSync(t.resolve(p,`${n}.njk`),"utf8"),this.#c).render(c),d=this.#i.projectDir,f=t.resolve(d,`${n}`);e.writeFileSync(f,l,"utf8")}async createProjectMainYaml(){const n="flow.main.yaml",o=`Creating ${n}`;await this.setProgress({message:o});const r={content:i.stringify(this.#a)},s=this.#i.templateDir,c=a.compile(e.readFileSync(t.resolve(s,`${n}.njk`),"utf8"),this.#c).render(r),p=this.#i.projectDir,l=t.resolve(p,`${n}`);e.writeFileSync(l,c,"utf8")}async runPrettifier(){const e=this.#i.projectDir,n=await s("prettier --write .",{cwd:t.resolve(e,"src")});if(0!==n.code)throw new Error(n.stderr)}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#i.project?.devops){const e=[this.#i.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.#s.id){const e=await q.list({type:"workflow.deploy",parent_id:this.#s.id});for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&(n=await q.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||{}),r=n||{};for(let e=0;e<o.length;e++){const n=t.doc[o[e]];n.name=o[e];const i=r.get(o[e]);await B({...this.#j,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:i})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#i.id)return;let o=await q.first({name:t.params.name,parent_id:this.#g.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await q.update(o,{id:o.id})):o=await q.create({parent_id:this.#g.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(oe.blue(t)),await this._cache_set(this.#h,{status:"IN_PROGRESS",message:t})}async build(){if(this.#k&&!this.#b)return await this.createNetwork();try{const n=this.#k?await U({root:this.#m}):void 0;if(this.#b){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#k){let o=this.#i.project?.projectDir||this.#i.projectDir;o=t.resolve(o,"fnet"),e.existsSync(o)&&e.writeFileSync(t.resolve(o,"flow.bpmn"),n.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#m}),await this.createEngine({root:this.#m}),await this.createNodeTree({root:this.#m}),await this.createProjectYaml(),await N(this.#j),await O(this.#j),await A(this.#j),await T(this.#j),await P(this.#j),await E(this.#j),await $(this.#j),await S(this.#j),await C(this.#j),await I(this.#j),this.#x&&(await F(this.#j),await R(this.#j),this.#v&&await this.deploy())}await this._cache_set(this.#h,{status:"COMPLETED",data:{network:n}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await U({root:this.#m});await this._cache_set(this.#h,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}}}var co=function(){if(Zn)return Ut;Zn=1;const u=process.cwd(),{spawn:h}=e,y=t,g=Jt,w=zt;r({name:["redis"],dir:u,optional:!0});const b=i,{Command:x,Option:v}=s,k=a,j=c,_=p,D=l,E=r,S=d,P=f,$=m,T=ao(),A=function(){if(Yn)return Vn;Yn=1;const e=n,t=o;return Vn=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}),O="win32"===process.platform?";":":";process.env.PATH=`${b.join(A,"/.bin")}${O}${process.env.PATH}`;const N=new x;function C(e,{name:t,bin:n,preArgs:o=[]}){const r=t||n;e.command(r,{isDefault:!1,hidden:!1}).description(`Run ${n} ${o.join(" ")} in project context. Pass arguments directly after command name.`).argument("[command_args...]",`Arguments for ${n}`).allowUnknownOption().action((async(e,t)=>{try{const r=await I(t),i=r?.projectDir&&k.existsSync(r.projectDir)?r.projectDir:r?.project?.projectDir&&k.existsSync(r.project.projectDir)?r.project.projectDir:u,s=e,a=h(n,[...o,...s],{cwd:i,stdio:"inherit",shell:!0});a.on("close",(e=>{void 0===process.exitCode&&process.exit(e)})),a.on("error",(e=>{console.error(`Failed to start ${n}:`,e),void 0===process.exitCode&&process.exit(1)}))}catch(e){console.error(`Error setting up context for ${r}:`,e.message),void 0===process.exitCode&&process.exit(1)}}))}async function I(e){const t=e.ftag||[];if(e.id)return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:b.resolve(u,`./.output/${e.id}`),templateDir:b.resolve(A,"@fnet/cli-project-flow/dist/template/default"),templateCommonDir:b.resolve(A,"@fnet/cli-project-common/dist/template/default"),coreDir:b.resolve(A,"@fnet/cli-project-flow/dist/template/core"),tags:t};{const n=await async function({tags:e=[]}){const t=b.resolve(u,"fnet.yaml");if(!k.existsSync(t))throw new Error("fnet.yaml file not found in current directory.");const n=Array.isArray(e)?e:e?[e]:[],{raw:o,parsed:r}=await D({file:t,tags:n}),i=b.dirname(t);let s={};if("object"==typeof r.flows&&null!==r.flows)s=r.flows;else{let e="flow.main.yaml";const t=b.join(i,"fnet","flows.yaml");k.existsSync(t)&&(e=b.join("fnet","flows.yaml"));const o=r.main||e;let a=b.resolve(i,o);if(k.existsSync(a))try{const{parsed:e}=await D({file:a,tags:n});s=e}catch(e){throw console.error(`Error parsing flow file: ${a}`),e}else r.main&&console.warn(`Warning: Main flow file specified in fnet.yaml (${o}) not found.`),s={main:{steps:[]}}}const a={workflowAtom:{doc:{...r,content:s}},projectDir:i,projectFilePath:t,projectFileContent:o,projectFileParsed:r};let c=b.resolve(i,"fnet/targets.yaml");const p=b.resolve(i,"flow.devops.yaml");if(!k.existsSync(c)&&k.existsSync(p)){console.log(`Migrating legacy devops file: ${p}`);try{const e=b.resolve(i,"fnet");k.existsSync(e)||k.mkdirSync(e),k.copyFileSync(p,c),k.unlinkSync(p),console.log(`Successfully migrated to ${c}`)}catch(e){console.error(`Error migrating devops file: ${e.message}`)}}if(k.existsSync(c))try{const{raw:e,parsed:t}=await D({file:c,tags:n}),o=j.parseDocument(e);a.devops={filePath:c,fileContent:e,yamlDocument:o,doc:{...t},type:"workflow.deploy",save:async()=>{k.writeFileSync(a.devops.filePath,o.toString())}}}catch(e){console.error(`Error loading or parsing devops file: ${c}`)}const l=b.resolve(i,"readme.md");if(k.existsSync(l)){const e=k.readFileSync(l,"utf8");a.readme={filePath:l,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return a}({tags:t});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:b.resolve(A,"@fnet/cli-project-flow/dist/template/default"),templateCommonDir:b.resolve(A,"@fnet/cli-project-common/dist/template/default"),coreDir:b.resolve(A,"@fnet/cli-project-flow/dist/template/core"),projectDir:b.resolve(n.projectDir,"./.workspace"),projectSrcDir:b.resolve(n.projectDir,"./src"),project:n,tags:t}}}return N.name("fnet").version(w.version).description("CLI tool for FlowNet workflow projects"),N.command("create").description("Initialize flow workflow project").requiredOption("-n, --name <string>","Project name").addOption(new v("-r, --runtime <type>","Runtime environment (currently only node)").choices(["node"]).default("node")).option("--vscode","Open project in VSCode after creation",!0).option("--no-vscode","Do not open project in VSCode").action((async e=>{try{const t=b.resolve(A,"@fnet/cli-project-flow/dist/template/project"),n=b.resolve(u,e.name);k.existsSync(n)||k.mkdirSync(n),await $({dir:t,outDir:n,context:e,copyUnmatchedAlso:!0});let o=await _("fnet build",{cwd:n});if(0!==o.code)throw new Error("Failed to build project.");if(g("git")&&(o=await _("git init --initial-branch=main",{cwd:n}),0!==o.code))throw new Error("Failed to initialize git.");if(e.vscode&&g("code")&&(o=await _(`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)}})),N.command("project").description("Flow workflow project operations").option("-u, --update","Update project files from template",!1).action((async e=>{try{const t=b.resolve(A,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd(),o=await I(e);if(e.update){if(await $({dir:t,outDir:n,context:{name:o.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0}),0!==(await _("fnet build",{cwd:n})).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}else console.log("Use 'fnet project --update' to update project files.");process.exit(0)}catch(e){console.error("Project command failed.",e.message),process.exit(1)}})),N.command("build").description("Build flownet workflow project").option("--id <string>","Build identifier").option("--buildId <string>","Specific build ID").addOption(new v("--mode <mode>","Build mode").choices(["all","file","build","deploy","bpmn"]).default("build")).option("--ftag <tags...>","Filter tags (specify multiple times or space-separated)").action((async e=>{try{const t=await I(e),n=new T(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)}})),N.command("deploy").description("Build and deploy flownet workflow project").option("--id <string>","Build identifier").option("--buildId <string>","Specific build ID").option("--ftag <tags...>","Filter tags").action((async e=>{try{const t=await I({...e,mode:"all"}),n=new T(t);await n.init(),await n.build(),console.log("Building and deploying workflow succeeded!"),process.exit(0)}catch(e){console.error("Building/deploying workflow failed!",e.message),process.exit(1)}})),N.command("file").description("Just create files (part of workflow build)").option("--id <string>","Build identifier").option("--buildId <string>","Specific build ID").option("--ftag <tags...>","Filter tags").action((async e=>{try{const t=await I({...e,mode:"file"}),n=new T(t);await n.init(),await n.build(),console.log("Creating workflow files succeeded!"),process.exit(0)}catch(e){console.error("Creating workflow files failed!",e.message),process.exit(1)}})),N.command("input").description("Create or modify an input config file").argument("[name]","Optional input configuration name (e.g., dev, prod)").action((async(e,t)=>{try{const n=await I({...t,name:e}),{project:o}=n,{projectDir:r,projectFileParsed:i}=o,s=i.input;if(!s)throw new Error("Config schema `input` not found in project file (fnet.yaml).");let a=e;if(!a){a=(await y({type:"input",name:"inputName",message:"Input name:",initial:"dev"})).inputName,a||(console.error("Input name cannot be empty."),process.exit(1))}const c=b.resolve(r,".fnet");k.existsSync(c)||k.mkdirSync(c);const p=b.resolve(c,`${a}.fnet`),l=k.existsSync(p),d=await S({schema:s,format:"yaml",ref:l?p:void 0});k.writeFileSync(p,d),console.log(`Input config '${a}.fnet' ${l?"updated":"created"}.`)}catch(e){console.error(e.message),process.exit(1)}})),C(N,{bin:"npm"}),C(N,{bin:"node"}),C(N,{bin:"bun"}),C(N,{name:"serve",bin:"npm",preArgs:["run","serve"]}),C(N,{name:"watch",bin:"npm",preArgs:["run","watch"]}),C(N,{name:"app",bin:"npm",preArgs:["run","app"]}),C(N,{name:"cli",bin:"npm",preArgs:["run","cli"]}),C(N,{bin:"npx"}),C(N,{bin:"cdk"}),C(N,{bin:"aws"}),function(e,{name:t,preArgs:n=[]}){e.command(t).description("Run a command with environment variables from a .fnet config file.").argument("<config>","Name of the .fnet config file (without extension)").argument("<command>","The command to execute").argument("[command_args...]","Arguments for the command").option("--ftag <tags...>","Filter tags for loading config").allowUnknownOption().action((async(e,o,r,i)=>{try{const t=await I(i),s=t?.project?.projectDir&&k.existsSync(t.project.projectDir)?t.project.projectDir:u,a=await E({name:e,dir:s,transferEnv:!1,optional:!0,tags:t?.tags||i.ftag||[]}),c=a?.data?.env||{},p=t?.projectDir&&k.existsSync(t.projectDir)?t.projectDir:s,l=h(o,[...n,...r],{cwd:p,stdio:"inherit",shell:!0,env:{...process.env,...c}});l.on("close",(e=>{void 0===process.exitCode&&process.exit(e)})),l.on("error",(e=>{"ENOENT"===e.code?console.error(`Error: Command not found: '${o}'. Is it installed or in your PATH?`):console.error(`Failed to start command '${o}':`,e),void 0===process.exitCode&&process.exit(1)}))}catch(e){console.error(`Error setting up context or running command for '${t}': ${e.message}`),void 0===process.exitCode&&process.exit(1)}}))}(N,{name:"with"}),function(e,{name:t,preArgs:n=[]}){e.command(t).description("Run a command group defined in fnet.yaml.").argument("<group>","Name of the command group in fnet.yaml commands section").option("--ftag <tags...>","Filter tags for loading project config").action((async(e,t)=>{try{const n=await I(t);if(!n||!n.project||!n.project.projectFileParsed)throw new Error("Could not load project context. Are you in a fnet project directory?");const{projectFileParsed:o}=n.project,r=o.commands;if(!r)throw new Error("`commands` section not found in project file (fnet.yaml).");const i=r[e];if(!i)throw new Error(`Command group '${e}' not found in project file.`);await P({commands:i}),void 0===process.exitCode&&process.exit(0)}catch(t){console.error(`Error running command group '${e}':`,t.message),void 0===process.exitCode&&process.exit(1)}}))}(N,{name:"run"}),N.parse(process.argv),process.argv.slice(2).length||N.outputHelp(),Ut}(),po=Y(co);module.exports=po;
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@fnet/cli",
3
- "version": "0.98.1",
3
+ "version": "0.99.0",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
7
7
  "description": "CLI for Flownet",
8
8
  "scripts": {
9
- "build": "rollup --config --bundleConfigAsCjs",
9
+ "build": "rollup --config",
10
10
  "deploy": "bun install && bun run build && bun publish --access public",
11
- "watch": "rollup --config --watch --sourcemap --bundleConfigAsCjs --environment DEVELOPMENT"
11
+ "watch": "rollup --config --watch --sourcemap --environment DEVELOPMENT"
12
12
  },
13
13
  "repository": {
14
14
  "type": "git",
@@ -52,6 +52,7 @@
52
52
  "ajv-formats": "^3.0.1",
53
53
  "bpmn-moddle": "^9.0.1",
54
54
  "chalk": "^4.1.2",
55
+ "commander": "^13.1.0",
55
56
  "dagre": "^0.8.5",
56
57
  "form-data": "^4.0.0",
57
58
  "get-value": "^3.0.1",
@@ -67,8 +68,7 @@
67
68
  "semver": "^7.5.4",
68
69
  "set-value": "^4.1.0",
69
70
  "typescript": "^5.7.3",
70
- "yaml": "^2.5.1",
71
- "yargs": "^17.7.2"
71
+ "yaml": "^2.5.1"
72
72
  },
73
73
  "bin": {
74
74
  "fnet": "dist/builder/wf-cli.js",