@fnet/cli 0.107.0 → 0.107.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fnet/index.js +1 -1
- package/dist/fnode/index.js +1 -1
- package/package.json +5 -5
package/dist/fnet/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import e,{delimiter as t,join as o}from"node:path";import{fileURLToPath as n}from"node:url";import{spawn as i}from"node:child_process";import s from"node:os";import a,{existsSync as r}from"node:fs";import c from"yaml";import p from"yargs";import l from"@fnet/prompt";import d from"@fnet/shelljs";import f from"@fnet/yaml";import m from"@fnet/config";import u from"@fnet/shell-flow";import h from"@flownet/lib-render-templates-dir";import y from"nunjucks";import w from"lodash.clonedeep";import g from"isobject";import b from"redis";import x from"@flownet/lib-is-redis-online";import{randomUUID as k}from"node:crypto";import{Api as v,Atom as j}from"@flownet/lib-atom-api-js";import _ from"lodash.merge";import D from"@flownet/lib-parse-imports-js";import E from"@fnet/npm-list-versions";import S from"@fnet/npm-pick-versions";import P from"object-hash";import $ from"ajv/dist/2020.js";import T from"ajv/dist/standalone/index.js";import C from"ajv-formats";import N from"@flownet/lib-parse-node-url";import F from"bpmn-moddle";import A from"dagre";import O from"@fnet/expression";import B from"chalk";import I from"@fnet/list-files";import K from"@fnet/key-value-transformer";import R from"lodash.pick";import M from"lodash.omit";const J=e.dirname(n(import.meta.url));var L=e=>{const n=process.env.PATH||"",i="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],s=n.split(t);for(const t of s)for(const n of i){const i=o(t,"win32"===process.platform?e+n:e);if(r(i))return i}return null};class z{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(v.set_api_url(e.data.url),t)return v.set_req_token(t),void o(t);fetch(`${e.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((e=>{v.set_req_token(e.access_token),o(e.access_token)})).catch((e=>{v.set_req_token(),n(e)}))}))}}function q({feature:e,features:t,packageDevDependencies:o}){const{name:n,packages:i,options:s,extraCheck:a,explicit:r}=e,c=`${n}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=s||{};const f=t[n]?.options;f&&(d=_(d,f));const m=!t[n]||!1===t[n]?.enabled;l.forEach((e=>{const o=t.rollup_output[e];if(o){if(Reflect.has(o,n)){if(m||!o[n]||!1===o[n]?.enabled)return void delete o[n];!0===o[n]&&(o[n]={enabled:!0,options:d})}else{if(m||r||!1===t[c])return;o[n]={enabled:!0}}o[n]=o[n]||{},o[n].options={...d,...o[n].options}}}));let u=l.some((e=>!0===t.rollup_output[e][n]?.enabled));a&&(u=a()&&u),t[c]=u,u&&i.forEach((e=>o.push({package:e[0],version:e[1]})))}function W({dir:t,name:o="index"}){let n=e.resolve(t,`./${o}.tsx`);if(a.existsSync(n)||(n=e.resolve(t,`./${o}.ts`)),a.existsSync(n)||(n=e.resolve(t,`./${o}.jsx`)),a.existsSync(n)||(n=e.resolve(t,`./${o}.js`)),!a.existsSync(n))return{};const i=n,s=e.extname(n);return{file:i,ext:s,ts:".ts"===s||".tsx"===s,name:o}}async function X(t){const{atom:o,context:n,setProgress:i}=t;i("Initializing features..."),o.doc.features=o.doc.features||{};const s=o.doc.features;s.project=s.project||{},s.project.format=s.project.format||s.project_format||"esm",s.project_format=s.project.format,s.dts_enabled=!0===s.dts||void 0!==s.dts&&!1!==s.dts;const a=e.resolve(n.project.projectDir),r=W({dir:e.resolve(a,"./app")});if(r.file){i("Parsing app entry imports...");let e=await D({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.app_uses_jsx=t,s.app_has_entry=!0,e=await D({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.app_entry_uses_jsx=t,s.app_entry_is_ts=r.ts,s.app_entry_ext=r.ext}const c=W({dir:e.resolve(a,"./cli")});if(c.file){i("Parsing cli entry imports...");let e=await D({file:c.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.cli_uses_jsx=t,s.cli_has_entry=!0,e=await D({file:c.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.cli_entry_uses_jsx=t,s.cli_entry_is_ts=c.ts,s.cli_entry_ext=c.ext}if("workflow.lib"===o.type){const t=W({dir:e.resolve(a,"./src")});if(t.file){i("Parsing src entry imports...");let e=await D({file:t.file,recursive:!0}),o=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.src_uses_jsx=o,s.src_has_entry=!0,e=await D({file:t.file}),o=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.src_entry_uses_jsx=o,s.src_entry_is_ts=t.ts,s.src_entry_ext=t.ext}}const p=Reflect.has(s,"app_entry_uses_jsx")?!0===s.app_entry_uses_jsx:!0===s.src_entry_uses_jsx,l=Reflect.has(s,"cli_entry_uses_jsx")?!0===s.cli_entry_uses_jsx:!0===s.src_entry_uses_jsx;s.form_enabled=p||l||!0===s.form||!0===s.form?.enabled,s.multiple_enabled=s.multiple_enabled||!0===s.multiple||!0===s.multiple?.enabled,!1===s.app?s.app={enabled:!1}:!0===s.app?s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p}:s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p,...s.app||{}},s.app.enabled=!0===s.app.enabled&&(!0===o.doc.features.form_enabled||!0===s.app.extend||!0===s.app.enabled),s.app.format=s.app.format||"esm",s.app.folder=s.app.folder||s.app.format||"default",!1===s.cli?s.cli={enabled:!1}:!0===s.cli?s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l}:s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l,...s.cli||{}},s.cli.enabled=!0===s.cli.enabled&&(!1===o.doc.features.form_enabled||!0===s.cli.extend||!0===s.cli.enabled),s.cli.format=s.cli.format||"esm",s.cli.folder=s.cli.folder||s.cli.folder||"esm",s.cli.node_options=s.cli.node?.options||s.cli.node_options||"",s.json=s.cli.enabled||s.json;const d={cjs:{format:"cjs",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==s.cjs,copy:!1},esm:{format:"esm",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==s.esm,copy:!0},iife:{format:"iife",context:s.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===s.iife,terser:!0,copy:!1}};!0===s.webos&&(d.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===s.electron&&(d.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===s.nextjs&&(d.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===s.ios&&(d.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===s.macos&&(d.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===s.app.enabled&&(s.app.dir=`./dist/app/${s.app.folder}`,d.app={format:s.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:s.app.dir,terser:!0,output_exports:!1===s.app.export?"none":"auto",browsersync:!0}),!0===s.cli.enabled&&(s.cli.dir=`./dist/cli/${s.cli.folder}`,d.cli={format:s.cli.format,context:"global",babel:!0===s.src_uses_jsx||!0===s.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:s.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===s.cli.export?"none":"auto"});const f={server:".",startPath:`${e.normalize(s.app.dir||".")}`,files:[e.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=_({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=_(f,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=_({},s.replace_options||s.replace?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=_(d,s.rollup_output||s.rollup?.output||{}),s.preact_enabled=!0===s.preact||s.preact&&!1!==s.preact?.enabled;let m=Object.keys(d);for(const e of m){const t=d[e];t&&(!1!==s.rollup[e]?(t.babel_options=t.babel_options||s.babel_options,t.browsersync_options=_(s.browsersync_options,t.browsersync_options),t.replace_options=_(s.replace_options,t.replace_options),s.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),(s.form_enabled||s.babel)&&(t.babel=!0)):delete s.rollup_output[e])}m=Object.keys(s.rollup_output),s.babel_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browser_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browsersync_enabled=!1!==s.browsersync&&m.some((e=>!0===s.rollup_output[e].browsersync)),s.browsersync_enabled=s.browsersync_enabled&&s.app.enabled,s.dependency_auto_enabled=!1!==s.dependency_auto&&!1!==s.dependency_auto?.enabled,s.npm_install_flags=s.npm_install_flags||"",s.react_version=s.react_version||s.react?.version||18,function(e){const{atom:t,packageDevDependencies:o}=e,n=t.doc.features,i=n.css&&!1!==n.css.enabled;let s=[];i&&(s.push(["rollup-plugin-postcss","^4"]),s.push(["sass","^1.66"]),(n.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"])}})));q({feature:{name:"css",packages:s},features:n,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e,n=t.doc.features,i={};!0===n.app?.enabled&&(i.targets=i.targets||[],i.targets.push({src:"./src/app/index.html",dest:n.app.dir}),Reflect.has(n.app,"copy")||Reflect.has(n,"copy")||(n.copy=!0)),q({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:n,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({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:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:t.doc.features,packageDevDependencies:o})}(t)}async function V({projectDir:t,name:o,setProgress:n,count:i=1}){let s;const r=P(["npm-pick-versions",o,i]),c=e.join(t,".cache"),p=e.join(c,r+".json");return a.existsSync(p)?(n&&n(`Picking npm version of ${o} from cache ...`),s=JSON.parse(a.readFileSync(p,"utf8"))):(n&&n(`Picking npm version of ${o} ...`),s=await S({name:o,count:i}),a.mkdirSync(c,{recursive:!0}),a.writeFileSync(p,JSON.stringify(s),"utf8")),s}var U=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setProgress:s,deploymentProject:a,yamlTarget:r}=e;if(!0!==i.enabled)return;const c=i.type;try{if("lib"===c)await(await import("./index.DG8TqL-1.js")).default({...e});else if("red"===c)await(await import("./index.CmMM-Ek9.js")).default({...e});else if("npm"===c)await(await import("./index.DHsBGWgK.js")).default({...e});else if("gcs"===c)await(await import("./index.UOds5XLl.js")).default({...e});else if("gitlab"===c)await(await import("./index.DI3yyTtl.js")).default({...e});else if("fnet-package"===c)await(await import("./index.Bfg4lyu-.js")).default({...e});else if("fnet-form"===c)await(await import("./index.Q-CYRcna.js")).default({...e});else if("fnet-node"===c)await(await import("./index.C2S9JYhS.js")).default({...e});else if("fnet-flow"===c)await(await import("./index.BuYxdKtK.js")).default({...e});else if("nextjs"===c)await(await import("./index.CDct_kkF.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("webos"===c)await(await import("./index.CMC8mlye.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("electron"===c)await(await import("./index.xd8c7XMr.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("docker"===c)await(await import("./index.D2N9YZmA.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("ios"===c)await(await import("./index.B5XE4ChJ.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("macos"===c)await(await import("./index.W6RYgypK.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("rust"===c)await(await import("./index.CzAV0S36.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else{if("pypi"!==c)return void console.warn(`No deployer found for type: ${c}`);await(await import("./index.C7saWH6d.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0}}catch(e){throw console.error(`Error during deployment for type "${c}":`,e),e}},G={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 H(e,t){return e.filter(((e,o,n)=>n.map((e=>e[t])).indexOf(e[t])===o))}function Y(e){const{nodes:t,nodeIndex:o,root:n}=e,i=e.targetNodes||n.childs;i.forEach((t=>{const o="workflow"===t.type||"subworkflow"===t.type,n=!o&&t.childs.filter((e=>!e.virtual)).length>0;if(n&&(t.bpmn.type="bpmn:SubProcess"),o||n){const o=t.childs.filter((e=>!0!==e.module))[0];t.childs.filter((e=>!0===e.module)).forEach((o=>{const n=Z({...e,parent:t,bpmnType:"bpmn:IntermediateCatchEvent",type:"inter",definitions:[{type:"bpmn:SignalEventDefinition"}]});n.bpmn.edges=[{from:n.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}]}));const n=t.childs.find((e=>"try"===e.name&&"tryexcept"===t.type)),s=t.childs.filter((e=>"except"===e.name&&"tryexcept"===t.type));n&&s.length&&s.forEach((o=>{const i=Z({location:t.childs.indexOf(o),...e,parent:t,bpmnType:"bpmn:BoundaryEvent",type:"boundary",attrs:{attachedToRef:n},definitions:[{type:"bpmn:ErrorEventDefinition"}]});i.bpmn.edges=[{from:i.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}]}));const a=t.childs.find((e=>"raise"===e.type));if(a){const o=Z({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:"ERROR",definitions:[{type:"bpmn:ErrorEventDefinition"}]});a.bpmn.edges=[{from:a.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}]}if(o)if(t.bpmn.starts.length>1){const o=Z({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"}),n=Z({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch"});o.bpmn.edges=[{from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}],n.bpmn.edges=t.bpmn.starts.map((e=>({...e,from:n.indexKey})));const i=n.bpmn.edges.find((e=>!0===e.next));if(i){const o=Z({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:i.to});i.to=o.indexKey}}else{const n=Z({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"});n.bpmn.edges.push({from:n.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"})}t.childs.filter((e=>!0!==e.virtual&&e.bpmn.outside.length&&"bpmn:EndEvent"!==e.bpmn.type)).forEach((o=>{o.bpmn.outside.forEach((n=>{const s=i.indexOf(t),a=Z({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:n.to,location:s+1});o.bpmn.edges.push({from:o.indexKey,to:a.indexKey,type:"bpmn:SequenceFlow"})}))}));t.childs.filter((e=>!0!==e.virtual&&e.bpmn.edges.length>1)).forEach((o=>{const n=i.indexOf(o),s=Z({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch",location:n+1});s.bpmn.edges=o.bpmn.edges.map((e=>({...e,from:s.indexKey}))),o.bpmn.edges=[{from:o.indexKey,to:s.indexKey,type:"bpmn:SequenceFlow"}],o.bpmn.outside=[]}))}Y({...e,targetNodes:t.childs})}))}function Z(e){const{parent:t,nodes:o,nodeIndex:n,bpmnType:i,type:s,name:a,outside:r,location:c,definitions:p,attrs:l}=e,d=t.childs.filter((e=>e.type===`v${s}`)).length,f={indexKey:`${t.indexKey}/_${s}${d}`,pathKey:`${t.pathKey}._${s}${d}`,type:`v${s}`,name:a,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),o.push(f),n[f.indexKey]=f,f}function Q(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a,diagrams:r,nodes:c}=e;!function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a,nodes:r}=e,c=o.get("flowElements");o.$nodes=o.$nodes||[],t.childs.forEach((e=>{const t=i.create(e.bpmn.type,{id:`node.${e.pathKey}`,name:e.definition?.title||e.name});if(s[t.id]=t,t.$isNode=!0,t.$node=e,e.$flow=t,o.$nodes.push(t),c.push(t),e.bpmn.attrs){Object.keys(e.bpmn.attrs).forEach((o=>{"attachedToRef"===o&&t.set(o,e.bpmn.attrs[o].$flow)}))}if(e.bpmn.definitions){const o=e.bpmn.definitions.map((e=>{const t=i.create(e.type);return Object.keys(e.attrs||{}).forEach((o=>{t.set(o,e.attrs[o])})),t}));t.eventDefinitions=o}}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a}=e,r=o.get("flowElements");o.$edges=o.$edges||[],t.childs.forEach((e=>{e.bpmn.edges.forEach((t=>{const n=e,c=a[t.to],p=`edge.${n.pathKey}_${c.pathKey}`;if(s[p])return;const l=s[`node.${n.pathKey}`],d=s[`node.${c.pathKey}`],f=i.create(t.type,{id:p,sourceRef:l,targetRef:d});s[f.id]=f,f.$is_edge=!0,l.get("outgoing").push(f),d.get("incoming").push(f),o.$edges.push({from:l,to:d,flow:f}),r.push(f)}))}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a}=e,r=120,c=80,p=160,l=160,d=new A.graphlib.Graph;d.setDefaultEdgeLabel((()=>({}))),d.setGraph({rankdir:"TB",nodesep:r,ranksep:c,xranker:"longest-path"}),o.$nodes.forEach((e=>{d.setNode(e.id,{width:e.$node?.bpmn.width||r,height:e.$node?.bpmn.height||c,label:e.id})})),o.$edges.forEach((e=>{d.setEdge(e.from.id,e.to.id)})),A.layout(d),o.$nodes.forEach((e=>{const t=d.node(e.id);let o=t.width,s=t.height;const a=i.create("bpmndi:BPMNShape",{id:`shape.${e.id}`,bpmnElement:e,bounds:i.create("dc:Bounds",{x:p+t.x-t.width/2,y:l+t.y-t.height/2,width:o,height:s}),label:i.create("bpmndi:BPMNLabel")});e.$node.bpmn.fill&&a.set("bioc:fill",e.$node.bpmn.fill),e.$node.bpmn.stroke&&a.set("bioc:stroke",e.$node.bpmn.stroke);n.get("planeElement").push(a)})),o.$edges.forEach((e=>{const t=d.edge(e.from.id,e.to.id),o=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:p+e.x,y:l+e.y});o.get("waypoint").push(t)}));n.get("planeElement").push(o)}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a,diagrams:r}=e,c=t.childs.filter((e=>"bpmn:SubProcess"===e.bpmn.type));c.forEach((t=>{const o=s[`node.${t.pathKey}`],n=i.create("bpmndi:BPMNDiagram",{id:`diagram_${t.pathKey}`});s[n.id]=n,r.push(n);const a=i.create("bpmndi:BPMNPlane",{id:`plane_${t.pathKey}`});s[a.id]=a,n.plane=a,a.bpmnElement=o,Q({...e,targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:a})}))}(e)}async function ee(e){const t=e.root,o=t.context.index,n=Object.keys(o).map((e=>o[e]));!function(e){const{nodes:t}=e;t.forEach((e=>{const t=[],o=[],n=i=>{i.context.next&&(t.push({from:i,to:i.context.next,type:"bpmn:SequenceFlow"}),i===e&&o.push({to:i.context.next,type:"bpmn:SequenceFlow",next:!0})),i.childs.forEach((t=>{i===e&&"switch"===e.type&&o.push({to:t,type:"bpmn:SequenceFlow"}),n(t)}))};n(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=o.map((e=>({...e,to:e.to.indexKey})));e.bpmn=e.bpmn||{},e.bpmn.edges=H(i,"to"),e.bpmn.outside=H(s,"to"),e.bpmn.starts=H(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:n}),Y({nodes:n,nodeIndex:o,root:t});const i=new F({atom:G}),s={},a=i.create("bpmn:Definitions",{id:"definitions_0"});s[a.id]=a;for await(const e of t.childs){const r=a.get("rootElements"),c=a.get("diagrams"),p=i.create("bpmn:Process",{id:`process_${e.pathKey}`,documentation:[i.create("bpmn:Documentation",{text:`Atom Workflow - ${t.context.atom.name}`})]});s[p.id]=p,p.isExecutable=!0,r.push(p);const l=i.create("bpmndi:BPMNDiagram",{id:`diagram_${e.pathKey}`});s[l.id]=l,c.push(l);const d=i.create("bpmndi:BPMNPlane",{id:`plane_${e.pathKey}`});s[d.id]=d,l.plane=d,d.bpmnElement=p;Q({targetNode:e,targetFlowElementsContainer:p,targetPlaneElement:d,moddle:i,elementIndex:s,nodeIndex:o,nodes:n,diagrams:c})}return{diagramXML:(await i.toXML(a,{format:!0})).xml}}async function te(e={}){return await ee(w(e))}async function oe({node:e,initNode:t}){if(Reflect.has(e.definition,"modules")&&!Array.isArray(e.definition.modules)){const t=e.definition.modules;e.definition.modules=[],Object.keys(t).forEach((o=>{const n={...t[o]};"modules"===e.type&&(n.export=n.export||o),e.definition.modules.push({[o]:n})}))}const o=[],n=await K({data:e.definition,callback:(e,t,n)=>{const i=O({expression:e});if("m"===i?.processor){const e=n.slice(0,-1);e.push(i.statement);const s=e.join("_");return o.push({[s]:t}),[i.statement,`m::${s}`]}return[e,t]}});o.length>0&&(e.definition=n,e.definition.modules=e.definition.modules||[],e.definition.modules=e.definition.modules.concat(o)),e.hasModules=e.definition.modules?.length>0;for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}}async function ne({node:e,transformExpression:t}){const o=e.context.transform;Reflect.has(o,"export")&&(o.export=await t(o.export)),Reflect.has(o,"return")&&(e.hasReturn=!0,o.return=await t(o.return)),o.hasOwnProperty("nextArgs")&&(e.hasNextArgs=!0,o.nextArgs=await t(o.nextArgs))}async function ie({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition),e.context.transform;for(const t of e.childs)t.context.transform=t.context.transform||w(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var se={hits:async function({node:e}){return!!e.definition.hasOwnProperty("switch")},init:async function({node:e,initNode:t}){e.type="switch";const o=e.definition.switch||[];if(!o.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===o.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const n=o.filter((e=>e.hasOwnProperty("default")));if(n.length>1)throw new Error("Switch must have only one default");if(1===n.length&&!o[o.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");e.hasDefaultCondition=1===n.length,await oe({node:e,initNode:t}),e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let o=0;o<e.definition.switch.length;o++){let n=e.definition.switch[o],i=`${o}`;n.hasOwnProperty("default")&&(i="default",n=n.default);const s={name:n.condition||i,childs:[],parent:e,definition:n,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=ie},resolve:ie};var ae={hits:async function({node:e}){return 1===Object.keys(e.definition).map((e=>O({expression:e}))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,o=Object.keys(t.definition).map((e=>O({expression:e}))),n=[],i=o.find((e=>"if"===e?.processor)),s=t.definition[i.expression];n.push({name:`${t.name}_if`,definition:s,processor:i}),delete t.definition[i.expression];const a=o.filter((e=>"elseif"===e?.processor));let r=0;for(const e of a){const o=t.definition[e.expression];n.push({name:`${t.name}_elseif_${r++}`,definition:o,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of n)t.definition.switch.push({condition:e.processor.statement,...e.definition});if(t.definition?.else){const e=t.definition.else;t.definition.switch.push({default:e}),delete t.definition.else}await se.init(e)}};async function re({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){if(e.context.transform=e.context.transform||w(e.definition),e.context.transform,e.context.try=e.childs.find((e=>"try"===e.name)),e.context.except=e.childs.find((e=>"except"===e.name)),e.context.except){const t=e.context.except;t.context.transform=t.context.transform||w(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var ce={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:t}){if(e.type="tryexcept",await oe({node:e,initNode:t}),e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const o="try",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}if(e.definition.except){const o="except",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}e.resolve=re},resolve:re};async function pe({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],o=Object.keys(t)[0],s=t[o],a={key:await n(o),value:await n(s)};i.assign[e]=a}await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var le={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",await oe({node:e,initNode:t}),e.resolve=pe},resolve:pe};async function de({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var fe={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",await oe({node:e,initNode:t}),e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[o,n]=[R(e.definition.for,t),M(e.definition.for,t)];e.definition.for=o,e.definition.for.steps=[{[`${e.name}_step`]:n}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let o=0;o<e.definition.for.steps.length;o++){const n=e.definition.for.steps[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=de},resolve:de};var me={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){}};async function ue({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var he={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=ue},resolve:ue};async function ye({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);const n=e.context.transform;e.hasReturn=!0,n.return=await o(n.return),await t({node:e})}var we={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=ye},resolve:ye};async function ge({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;if("function"===e.target?.atom?.doc?.type&&(i.call=await n(e.target.atom.name)),i.args&&(i.args=await n(i.args)),i.result){"string"==typeof i.result&&(i.result=[{[i.result]:"e::result"}]);for(let e=0;e<i.result?.length;e++){let t=i.result[e],o=Object.keys(t)[0],s=t[o],a={key:await n(o),value:await n(s)};i.result[e]=a}}const s=e.workflow.parent;i.import?e.context.lib=s.context.libs.find((e=>e.name===i.import)):e.context.lib=s.context.libs.find((e=>e.name===i.call)),await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var be={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call",await oe({node:e,initNode:t}),e.resolve=ge},resolve:ge};async function xe({node:e,transformExpression:t}){e.context.next=e.childs[0],e.context.transform=e.context.transform||w(e.definition),await ne({node:e,transformExpression:t})}var ke={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=xe},resolve:xe};async function ve({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;i.props&&(i.props=await n(i.props));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.form)),await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var je={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form",await oe({node:e,initNode:t}),e.resolve=ve},resolve:ve};async function _e({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||w(e.definition),await t({node:e})}var De={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=_e},resolve:_e};async function Ee({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;i.next=await n(i.next),await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var Se={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Ee},resolve:Ee};async function Pe({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition),e.context.transform,await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var $e={hits:async function({node:e}){return e.definition.hasOwnProperty("modules")},init:async function({node:e,initNode:t}){e.type="modules",await oe({node:e,initNode:t}),e.resolve=Pe},resolve:Pe};function Te({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 o=e.parent;for(;o.parent;){const n=o.childs.find((e=>e.name===t.next));if(n){e.context.next=n;break}o=o.parent}}else{if(!0===e.module)return;let t=e.parent,o=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(Reflect.has(t,"blockAutoJumpToParent")||Reflect.has(t,"blockAutoJumpToSibling")){if(t.blockAutoJumpToParent){const n=t.childs.find((e=>e.index===o));n&&(e.context.next=n);break}t.blockAutoJumpToParent||(o=t.index+1,t=t.parent)}else{const n=t.childs.find((e=>e.index===o));if(n){e.context.next=n;break}o=t.index+1,t=t.parent}}}class Ce{#e;#t;#o;#n;constructor({key:e,npm:t,master:o,extras:n}){this.#e=e,this.#t=t,this.#o=o,this.#n=n}hits({node:e}){return e.definition.hasOwnProperty(this.#e)}async init(e){const{node:t}=e,o=this.#e,n=t.definition,i=typeof n[o];if(n.call=`npm:${this.#t}`,n.args="object"!==i?{...n.args,[`${this.#o}`]:n[o]}:n[o],delete n[o],this.#n)for(const e in this.#n)n[e]=this.#n[e];console.log(`[npm-block] ${this.#e} --\x3e ${this.#t}`),await be.init(e)}}function Ne(e){return new Ce(e)}class Fe{#i;#s;#a;#r;#c;#p;#l;#d;#f;#m;#u;#h;#y;#w;#g;#b;#x;#k;#v;#j;#_;#D=[];constructor(e){this.#i=new z,this.#s=e,this.#p=[],this.#l=[],this.#d={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#D.push(Ne({key:"config",npm:"@fnet/config",master:"name"})),this.#D.push(Ne({key:"yaml",npm:"@fnet/yaml",master:"file"})),this.#D.push(Ne({key:"prompt",npm:"@fnet/prompt",master:"message"})),this.#D.push(Ne({key:"html-link",npm:"@flownet/lib-load-browser-link-url",master:"src"})),this.#D.push(Ne({key:"html-script",npm:"@flownet/lib-load-browser-script-url",master:"src"})),this.#D.push(Ne({key:"http-server",npm:"@fnet/node-express",master:"server_port"})),this.#D.push(Ne({key:"shell",npm:"@fnet/shell-flow",master:"commands"})),this.#D.push(Ne({key:"list-files",npm:"@fnet/list-files",master:"pattern"})),this.#D.push(Ne({key:"up-list-files",npm:"@fnet/up-list-files",master:"pattern"})),this.#D.push(Ne({key:"auto-conda-env",npm:"@fnet/auto-conda-env",master:"envDir"})),this.#D.push(Ne({key:"ollama-chat",npm:"@fnet/ollama-chat",master:"model"})),this.#D.push(Ne({key:"ai",npm:"@fnet/ai",master:"prompt",extras:{subtype:"flow"}})),this.#D.push(Ne({key:"invoke",npm:"@fnet/invoke",master:"method",extras:{}})),this.#D.push(Ne({key:"fetch",npm:"@fnet/fetch",master:"url",extras:{}})),this.#D.push(Ne({key:"filemap",npm:"@fnet/filemap",master:"target",extras:{}})),this.#j={packageDependencies:this.#p,packageDevDependencies:this.#l,setProgress:this.setProgress.bind(this),context:this.#s,Atom:j,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#_={initNode:this.initNode.bind(this),cloneDeep:w,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Te,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await async function(){if(!await x({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=b.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}(),this.#u=this.#s.buildId||k(),this.#j.buildId=this.#u,this.#g=this.#s.mode,this.#b=["all","deploy","build","file"].includes(this.#g),this.#x=["all","deploy","build"].includes(this.#g),this.#k=["all","deploy"].includes(this.#g),this.#v=["all","deploy","build","file","bpmn"].includes(this.#g),this.#y=this.#s.protocol,this.#h="BUILD:"+this.#u,this.#w=(await m({optional:!0,name:"atom",dir:this.#s.projectDir,tags:this.#s.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),this.transformWorkflow({workflow:this.#r});const e=await this.initNodeTree({workflow:this.#r});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.#a.doc.features}),await this.initFeaturesFromNodes({childs:e.childs,features:this.#a.doc.features}),await X(this.#j),await async function({atom:e,packageDependencies:t,packageDevDependencies:o,setProgress:n}){n("Initializing dependencies");const i=e.doc.dependencies||[];if(i.filter((e=>!e.dev)).forEach((e=>t.push(e))),i.filter((e=>e.dev)).forEach((e=>o.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let o="^18.2";n("Fetching React versions"),o=`^${(await E({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:o}),t.push({package:"react-dom",version:o}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),o.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"})),e.doc.features.render&&!1!==e.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"}),e.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"}),e.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"}),e.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"}),e.doc.features.browsersync_enabled&&o.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(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.#s.id&&(this.#f=await this.#i.init({config:this.#w}),this.#j.atomAccessToken=this.#f)}async initWorkflow(){const e=this.#s.id;this.#a=this.#s.project?.workflowAtom||await j.get({id:e}),this.#r="string"==typeof this.#a.doc.content?(await f({content:this.#a.doc.content,tags:this.#s.tags})).parsed:this.#a.doc.content;let t=this.#a.doc.bundleName;t=t||(this.#a.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#a.doc.bundleName=t,this.#a.type=this.#a.type||"workflow",this.#j.atom=this.#a,this.#a.doc.features=this.#a.doc.features||{}}#E(t){console.log("filePath",t),a.statSync(t).isDirectory()?(a.readdirSync(t).forEach((o=>{const n=e.join(t,o);this.#E(n)})),a.rmSync(t)):a.unlinkSync(t)}#S(t,o){const n=a.existsSync(t),i=n&&a.statSync(t);n&&i.isDirectory()?(a.mkdirSync(o,{recursive:!0}),a.readdirSync(t).forEach((n=>{this.#S(e.join(t,n),e.join(o,n))}))):a.copyFileSync(t,o)}async initWorkflowDir(){this.setProgress({message:"Initializing library directory."});const t=this.#s.projectDir,o=this.#s.coreDir;this.setProgress({message:"Cleaning project directory."});const n=I({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of n)a.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."}),a.existsSync(t)||a.mkdirSync(t,{recursive:!0});const i=e.join(t,"src");a.existsSync(i)||a.mkdirSync(i,{recursive:!0});const s=e.join(i,"core");this.#S(o,s);const r=e.join(i,"default","blocks");a.existsSync(r)||a.mkdirSync(r,{recursive:!0})}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#s.templateDir;this.#c=y.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,o]=Object.entries(e)[0];if(o.hasOwnProperty("onerror")){const{onerror:n,...i}=o;e[t]={try:i,except:n}}if(e[t].hasOwnProperty("steps")){const o=e[t].steps;if(!Array.isArray(o))throw new Error("Steps must be an array.");e[t].steps=o.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),o={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#a}};t.forEach((t=>{const n={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:o,definition:e[t],index:o.childs.length,depth:o.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};o.childs.push(n)}));for await(const e of o.childs)await this.initNode({node:e});return o}async initNode({node:e}){const t={...this.#_,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await ce.hits(t))await ce.init(t);else if(await fe.hits(t))await fe.init(t);else if(await se.hits(t))await se.init(t);else if(await ae.hits(t))await ae.init(t);else if(await me.hits(t))await me.init(t);else if(await le.hits(t))await le.init(t);else if(await he.hits(t))await he.init(t);else if(await be.hits(t))await be.init(t);else if(this.#D.find((e=>e.hits(t))))await this.#D.find((e=>e.hits(t))).init(t);else if(await je.hits(t))await je.init(t);else if(await De.hits(t))await De.init(t);else if(await ke.hits(t))await ke.init(t);else if(await Se.hits(t))await Se.init(t);else if(await $e.hits(t))await $e.init(t);else{if(!await we.hits(t))throw new Error("Undefined step type.");await we.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const o of e.childs)await this.initNodeIndex({node:o,index:t});return e.context.index=t,t}async initNodeIndex({node:t,index:o}){const n=e.join(t.parent.indexKey,t.name);t.indexKey=n,o[n]=t;const i=[];let s=t;for(;s?.parent;)i.push(s.index),s=s.parent;i.reverse(),t.codeKey=`B_${i.join("_")}_${t.type}`,t.pathKey=`${i.join(".")}`,t.typeId=k();for await(const e of t.childs)await this.initNodeIndex({node:e,index:o})}async initNodeCalls({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"call"===n.type&&o.push(n)}return e.context.calls=o,o}async initNodeCallLibs({root:e}){const t=[],o=e.context.calls;for await(const e of o){const o=e.definition.import||e.definition.call,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom",definition:e.definition},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.call,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"form"===n.type&&o.push(n)}return e.context.forms=o,o}async initNodeFormLibs({root:e}){const t=[],o=e.context.forms;for await(const e of o){const o=e.definition.import||e.definition.form,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async initFeaturesFromNodes({childs:e,features:t}){for await(const o of e)"form"!==o.type||Reflect.has(t,"form")||(t.form=!0),await this.initFeaturesFromNodes({childs:o.childs,features:t})}async initEntryFiles({root:e,features:t}){for await(const o of e.childs){let e;if("main"===o.name)e="index.js";else if("cli"===o.name)e="cli.js";else if("app"===o.name)e="app.js";else{if("api"!==o.name)continue;e="api.js"}t[`${o.name}_default_entry_file`]=e,o.entryFile=e}}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.form,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const o=e.filter((e=>"atom"===e.type));for(let e=0;e<o.length;e++){const n=o[e],i=await this.findAtomLibrary({url:n.name,libRef:n});n.atom=i;const s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const o=t.find((t=>t.package===e.package));o?"string"==typeof e.path?(o.path||[]).some((t=>t===e.path))||(o.path=o.path||[],o.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(o.path||[]).some((t=>t===e))||(o.path=o.path||[],o.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:t,libRef:o}){const n=N({url:t});if(!n)throw new Error(`Invalid package name: ${t}`);if(n.protocol||(n.protocol=this.#y),"ac:"===n.protocol){const e=n.pathname.split("/");if(1===e.length)return await j.first({where:{name:t,parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===e.length){const t=await j.first({where:{name:e[0],parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"folder"}});return await j.first({where:{name:e[1],parent_id:t.id,type:"workflow.lib"}})}}else{if("local:"===n.protocol){const t=e.resolve(this.#s.projectSrcDir,`${n.pathname}.js`),o=[],i=(await D({file:t,recursive:!0})).all;for await(const e of i){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await V({name:e.package,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});o.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return{name:n.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:o},protocol:n.protocol}}if("npm:"===n.protocol){const e=await V({name:n.pathname,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});return{name:n.pathname,doc:{type:"workflow.lib",subtype:"flow"===o?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:n.pathname,version:e.minorRange,type:"npm"}]},protocol:n.protocol}}if("use:"===n.protocol){return{name:n.pathname,doc:{type:"function",dependencies:[]},protocol:n.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||w(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const o=t.params[e];if("string"==typeof o)t.params[e]={key:o,hasDefault:!1};else{const n=Object.keys(o)[0];t.params[e]={key:n,hasDefault:!0,default:o[n],type:typeof o[n]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#_,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:t}){await this.setProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const o=t.context.libs.filter((e=>"atom"===e.type));for(let t=0;t<o.length;t++){const n=o[t].atom,i=this.#s.projectDir;if("local:"===n.protocol){const t=e.resolve(this.#s.projectSrcDir,`${n.fileName||n.name}.js`),o=e.relative(`${this.#s.projectDir}/src/default/blocks`,t);if(!a.existsSync(t)){a.mkdirSync(e.dirname(t),{recursive:!0});let o="export default async (args)=>{\n";o+="}",a.writeFileSync(t,o,"utf8")}n.relativePath=o.split(e.sep).join("/"),this.#a.typesDir=`./types/${e.basename(i)}/src`}else if("npm:"===n.protocol)n.relativePath=n.name;else if("use:"===n.protocol);else{const t=`${i}/src/libs/${n.id}.js`,o=n.doc.contents?.find((e=>"esm"===e.format))||n.doc;a.writeFileSync(e.normalize(t),o.content,"utf8")}}}async createEngine({root:t}){await this.setProgress({message:"Creating engine file."});const o=this.#s.templateDir,n=y.compile(a.readFileSync(e.resolve(o,"src/default/engine.js.njk"),"utf8"),this.#c);for(let o=0;o<t.childs.length;o++){const i=t.childs[o];if(!i.entryFile)continue;const s=n.render({flow:i,ui:{package:"@fnet/react-app"}}),r=this.#s.projectDir,c=e.resolve(r,`src/default/${i.entryFile}`);a.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:t}){const o=this.#s.templateDir,n=y.compile(a.readFileSync(e.resolve(o,"src/default/workflow.js.njk"),"utf8"),this.#c).render(t),i=this.#s.projectDir,s=e.resolve(i,`src/default/${t.codeKey}.js`);a.writeFileSync(s,n,"utf8");for await(const e of t.childs)await this.createType({node:e})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":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:t}){let o=this.#d[t.type];if(o)return o;const n=this.#s.templateDir;return o=y.compile(a.readFileSync(e.resolve(n,`src/default/blocks/${t.type}.js.njk`),"utf8"),this.#c),this.#d[t.type]=o,o}createStepFile({node:t}){const o=this.#s.projectDir,n=`${t.codeKey}.js`,i=e.resolve(o,`src/default/blocks/${n}`);a.writeFileSync(i,t.context.render,"utf8"),t.context.fileName=n,t.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(g(e)){const t=Object.keys(e);for(let o=0;o<t.length;o++){const n=t[o],i=O({expression:n});if(i)if("e"===i.processor){const t=e[n].replace(/(\r\n|\n|\r)/g,"");e[i.statement]=`$::${t}::`,delete e[n]}else e[n]=await this.transformValue(e[n]);else e[n]=await this.transformValue(e[n])}}else if("string"==typeof e){const t=O({expression:e});if(t){const{processor:o,statement:n}=t;switch(o){case"v":e=`$::v.${n}::`;break;case"e":e=`$::${n}::`;break;case"m":e=`$::c.module['${n}']::`;break;case"fm":e=`$::flow.getModule('${n}')::`;break;case"f":e=`$::c.form.${n}::`;break;case"for":e=`$::caller.for.${n}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const t="fnet.yaml",o=`Creating ${t}`;await this.setProgress({message:o});const{content:n,...i}=this.#a.doc,s={content:c.stringify(i)},r=this.#s.templateDir,p=y.compile(a.readFileSync(e.resolve(r,`${t}.njk`),"utf8"),this.#c).render(s),l=this.#s.projectDir,d=e.resolve(l,`${t}`);a.writeFileSync(d,p,"utf8")}async createProjectMainYaml(){const t="flow.main.yaml",o=`Creating ${t}`;await this.setProgress({message:o});const n={content:c.stringify(this.#r)},i=this.#s.templateDir,s=y.compile(a.readFileSync(e.resolve(i,`${t}.njk`),"utf8"),this.#c).render(n),r=this.#s.projectDir,p=e.resolve(r,`${t}`);a.writeFileSync(p,s,"utf8")}async runPrettifier(){const t=this.#s.projectDir;if(L("bun")){const o=await d("prettier --write .",{cwd:e.resolve(t,"src")});if(0!==o.code)throw new Error(o.stderr)}else{const o=await d("prettier --write .",{cwd:e.resolve(t,"src")});if(0!==o.code)throw new Error(o.stderr)}}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#s.project?.devops){const e=[this.#s.project?.devops];for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&await o.save()}}else if(this.#a.id){const e=await j.list({type:"workflow.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&(o=await j.update(o,{id:o.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:o}=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 n=Object.keys(t.doc||{}),i=o||{};for(let e=0;e<n.length;e++){const o=t.doc[n[e]];o.name=n[e];const s=i.get(n[e]);await U({...this.#j,deploymentProject:t,deploymentProjectTarget:o,yamlTarget:s})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#s.id)return;let n=await j.first({name:t.params.name,parent_id:this.#w.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await j.update(n,{id:n.id})):n=await j.create({parent_id:this.#w.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:o.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(B.blue(t)),await this._cache_set(this.#h,{status:"IN_PROGRESS",message:t})}async build(){if(this.#v&&!this.#b)return await this.createNetwork();try{const t=this.#v?await te({root:this.#m}):void 0;if(this.#b){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#v){let o=this.#s.project?.projectDir||this.#s.projectDir;o=e.resolve(o,"fnet"),a.existsSync(o)&&a.writeFileSync(e.resolve(o,"flow.bpmn"),t.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#m}),await this.createEngine({root:this.#m}),await this.createNodeTree({root:this.#m}),await this.createProjectYaml(),await async function({atom:t,context:o,setProgress:n,Atom:i}){const s="readme.md",r=`Creating ${s}`;if(await n({message:r}),o.project?.readme){const t=o.projectDir,n={content:o.project.readme.doc.content},i=e.resolve(o.project.projectDir,"fnet/how-to.md");if(a.existsSync(i)){const e=a.readFileSync(i,"utf8");n.howto=e}const r=e.resolve(o.project.projectDir,"fnet/input.yaml");if(a.existsSync(r)){const e=await f({file:r,tags:o.tags});n.input=e.content}const c=e.resolve(o.project.projectDir,"fnet/output.yaml");if(a.existsSync(c)){const e=await f({file:c,tags:o.tags});n.output=e.content}const p=o.templateCommonDir,l=y.compile(a.readFileSync(e.resolve(p,`${s}.njk`),"utf8"),y.configure(p)).render(n),d=e.resolve(t,`${s}`);a.writeFileSync(d,l,"utf8")}else if(t.id){const n=await i.first({type:"wiki",parent_id:t.id});if(!n||"markdown"!==n.doc?.["content-type"])return;const{content:r,...c}=n.doc,p={content:r},l=o.templateCommonDir,d=y.compile(a.readFileSync(e.resolve(l,`${s}.njk`),"utf8"),y.configure(l)).render(p),f=o.projectDir,m=e.resolve(f,`${s}`);a.writeFileSync(m,d,"utf8")}}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){await o({message:"Creating tsconfig.json."});const s={atom:t,packageDependencies:i},r=n.templateCommonDir,c=y.compile(a.readFileSync(e.resolve(r,"tsconfig.json.njk"),"utf8"),y.configure(r)).render(s),p=n.projectDir,l=e.resolve(p,"tsconfig.json");a.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){await o({message:"Creating .gitignore"});const s={atom:t,packageDependencies:i},r=n.templateCommonDir,c=y.compile(a.readFileSync(e.resolve(r,".gitignore.njk"),"utf8"),y.configure(r)).render(s),p=n.projectDir,l=e.resolve(p,".gitignore");a.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:t,setProgress:o,context:n,njEnv:i}){if(!0!==t.doc.features.cli.enabled)return;await o({message:"Creating yargs."});let s={};if(s=t.doc.input?t.doc.input:{type:"object",properties:{},required:[]},t.doc.features.cli.fargs&&!1!==t.doc.features.cli.fargs?.enabled){const e=t.doc.features.cli.fargs,o={type:"string",description:"Config name to load args",hidden:!1},n={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(e,"default")&&(o.default=e.default),s.properties&&(s.properties.fargs=o,s.properties.ftag=n)}const r={options:s,imports:[],atom:t},c=n.templateDir,p=y.compile(a.readFileSync(e.resolve(c,"src/default/to.args.js.njk"),"utf8"),i).render(r),l=n.projectDir,d=e.resolve(l,"src/default/to.args.js");a.writeFileSync(d,p,"utf8");const f=new $({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});C(f);const m=f.compile(s),u=T(f,m);a.writeFileSync(e.resolve(l,"src/default/validate_input.js"),u,"utf8")}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){if(!0!==t.doc.features.cli.enabled)return;await o({message:"Creating cli."});const s={atom:t,packageDependencies:i},r=n.templateDir,c=e.resolve(n.projectDir,"src/cli");a.existsSync(c)||a.mkdirSync(c,{recursive:!0}),await h({pattern:["index.js.njk"],dir:e.resolve(r,"src/cli"),outDir:c,context:s})}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){if(!0!==t.doc.features.app.enabled)return;await o({message:"Creating app folder"});const s={atom:t,packageDependencies:i,ts:Date.now()},r=n.templateDir,c=e.resolve(n.projectDir,"src/app");a.existsSync(c)||a.mkdirSync(c,{recursive:!0});let p=["index.js.njk"];!1!==t.doc.features.app.html&&p.push("index.html.njk"),await h({pattern:p,dir:e.resolve(r,"src/app"),outDir:c,context:s})}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){await o({message:"Creating rollup file."});const s={atom:t,packageDependencies:i},r=e.resolve(n.projectDir,"src","default/index.js");if(!a.existsSync(r))throw new Error(`Entry file not found: ${r}`);const c=(await D({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),p=t.doc.features.rollup_output,l=Object.keys(p);for(let e=0;e<l.length;e++){const t=p[l[e]];if(!0===t.browser&&c.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(c.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<c.length;e++){const o=c[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(c)}}const d=n.templateCommonDir;let f=y.compile(a.readFileSync(e.resolve(d,"rollup.config.mjs.njk"),"utf8"),y.configure(d)).render(s);const m=n.projectDir;let u=e.resolve(m,"rollup.config.mjs");a.writeFileSync(u,f,"utf8")}(this.#j),await async function({atom:t,context:o,packageDependencies:n,packageDevDependencies:i,setProgress:s}){await s({message:"Creating package.json."}),n.filter((e=>!0===e.dev)).forEach((e=>{i.find((t=>t.package===e.package))||i.push(e);const t=n.findIndex((t=>t.package===e.package));n.splice(t,1)}));const r=n.find((e=>"react"===e.package)),c=n.find((e=>"react-dom"===e.package));r&&!c?n.push({package:"react-dom",version:r.version}):r&&c&&(c.version=r.version),r&&t.doc.features.react_version>=17&&(n.find((e=>"@emotion/react"===e.package))||n.push({package:"@emotion/react",version:"^11"}),n.find((e=>"@emotion/styled"===e.package))||n.push({package:"@emotion/styled",version:"^11"}));const p=[];!0===t.doc.features.app.enabled&&p.push({file:e.resolve(o.projectDir,"src/app/index.js"),dev:!1!==t.doc.features.app.dev}),!0===t.doc.features.cli.enabled&&p.push({file:e.resolve(o.projectDir,"src/cli/index.js"),dev:!1!==t.doc.features.cli.dev});for await(const e of p){const t=e.file;if(!a.existsSync(t))throw new Error(`App file not found: ${t}`);const r=(await D({file:t,recursive:!0})).all;for await(const t of r){if("npm"!==t.type)continue;if(n.find((e=>e.package===t.package)))continue;if(i.find((e=>e.package===t.package)))continue;const a=await V({name:t.package,projectDir:o.projectDir,setProgress:s});(!0===e.dev?i:n).push({package:t.package,subpath:t.subpath,version:a.minorRange,type:"npm"})}}const l={atom:t,packageDependencies:n,packageDevDependencies:i},d=o.templateCommonDir,f=y.compile(a.readFileSync(e.resolve(d,"package.json.njk"),"utf8"),y.configure(d)).render(l),m=o.projectDir,u=e.resolve(m,"package.json");a.writeFileSync(u,f,"utf8");const h=e.resolve(o.project.projectDir,"fnet");if(a.existsSync(h)){const t=e.resolve(o.projectDir,"fnet");a.existsSync(t)||a.mkdirSync(t);const n=a.readdirSync(h);for(const o of n){const n=e.resolve(h,o);if(!a.lstatSync(n).isFile())continue;const i=e.resolve(t,o);a.copyFileSync(n,i)}}}(this.#j),await async function({setProgress:t,context:o}){const n=o.projectDir;await t({message:"Prettifiying source files."});let i=e.join("src","**","*");if(L("bun")){const e=await d(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n});if(0!==e.code)throw new Error(e.stderr)}else{const e=await d(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n});if(0!==e.code)throw new Error(e.stderr)}}(this.#j),await async function({atom:e,setProgress:t,context:o}){if(!e.doc.features.dts_enabled)return;const n=o.projectDir;if(await t({message:"Creating .d.ts"}),0!==(await d("tsc",{cwd:n})).code)throw new Error("Couldnt create .d.ts files.")}(this.#j),this.#x&&(await async function({setProgress:e,atom:t,context:o}){const n=o.projectDir;if(await e({message:"Installing npm packages."}),L("bun")){if(0!==(await d(`bun install ${t.doc.features.npm_install_flags}`,{cwd:n})).code)throw new Error("Couldnt install npm packages.")}else if(0!==(await d(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n})).code)throw new Error("Couldnt install npm packages.")}(this.#j),await async function({setProgress:e,context:t}){const o=t.projectDir;if(await e({message:"Building main project."}),0!==(await d("npm run build",{cwd:o})).code)throw new Error("Couldnt build project.")}(this.#j),this.#k&&await this.deploy())}await this._cache_set(this.#h,{status:"COMPLETED",data:{network:t}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await te({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}}}const Ae=e.dirname(n(import.meta.url)),Oe=process.cwd();m({name:["redis"],dir:Oe,optional:!0});const Be=function({baseDir:t}){let o=t=t||J;for(;o!==e.parse(o).root;){const t=e.join(o,"node_modules");if(a.existsSync(t))return t;o=e.dirname(o)}return null}({baseDir:Ae}),Ie="win32"===process.platform?";":":";Be&&(process.env.PATH=`${e.join(Be,"/.bin")}${Ie}${process.env.PATH}`);let Ke=p(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 t=>{try{const o=e.resolve(Be,"./@fnet/cli-project-flow/dist/template/project"),n=e.resolve(Oe,t.name);a.existsSync(n)||a.mkdirSync(n),await h({dir:o,outDir:n,context:t,copyUnmatchedAlso:!0,platform:s.platform()});let i=await d("fnet build",{cwd:n});if(0!==i.code)throw new Error("Failed to build project.");if(L("git")&&(i=await d("git init --initial-branch=main",{cwd:n}),0!==i.code))throw new Error("Failed to initialize git.");if(L("code")&&t.vscode&&(i=await d(`cd ${n} && code .`),0!==i.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 t=>{try{const o=e.resolve(Be,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd(),i=await Me(t);if(t.update){if(await h({dir:o,outDir:n,context:{name:i.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0,platform:s.platform()}),0!==(await d("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 Me(e),o=new Fe(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Me({...e,mode:"all"}),o=new Fe(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Me({...e,mode:"file"}),o=new Fe(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function Re(e,{name:t,bin:o,preArgs:n=[]}){return"function"==typeof o&&(o=o()),e.command(`${t||o} [commands..]`,`${o} ${n.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Me(e),{projectDir:s}=t,a=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,r=process.argv.slice(3).map(a);i(o,[...n,...r],{cwd:s,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Me(t){if(t.id){return{id:t.id,buildId:t.buildId,mode:t.mode,protocol:t.protocol||"ac:",projectDir:e.resolve(Oe,`./.output/${t.id}`),templateDir:e.resolve(Be,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:e.resolve(Be,"./@fnet/cli-project-common/dist/template/default"),coreDir:e.resolve(Be,"./@fnet/cli-project-flow/dist/template/core"),tags:t.ftag}}{const o=await async function({tags:t}){const o=e.resolve(Oe,"fnet.yaml");if(!a.existsSync(o))throw new Error("fnet.yaml file not found in current directory.");const{raw:n,parsed:i}=await f({file:o,tags:t}),s=e.dirname(o);let r;if("object"==typeof i.flows)r=i.flows;else{let o="flow.main.yaml";a.existsSync(e.join(s,"fnet","flows.yaml"))&&(o=e.join("fnet","flows.yaml"));const n=i.main||o;let c=e.resolve(s,n);if(a.existsSync(c)){const{parsed:e}=await f({file:c,tags:t});r=e}else r={main:{steps:[]}}}const p={workflowAtom:{doc:{...i,content:r}},projectDir:s,projectFilePath:o,projectFileContent:n,projectFileParsed:i};let l=e.resolve(s,"fnet/targets.yaml");if(!a.existsSync(l)&&(l=e.resolve(s,"flow.devops.yaml"),a.existsSync(l))){const t=e.resolve(s,"fnet");a.existsSync(t)||a.mkdirSync(t),a.copyFileSync(l,e.resolve(s,"fnet/targets.yaml")),a.unlinkSync(l)}if(a.existsSync(l)){const{raw:e,parsed:o}=await f({file:l,tags:t}),n=c.parseDocument(e);p.devops={filePath:l,fileContent:e,yamlDocument:n,doc:{...o},type:"workflow.deploy",save:async()=>{a.writeFileSync(p.devops.filePath,n.toString())}}}const d=e.resolve(s,"readme.md");if(a.existsSync(d)){const e=a.readFileSync(d,"utf8");p.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return p}({tags:t.ftag});return{buildId:t.buildId,mode:t.mode,protocol:t.protocol||"local:",templateDir:e.resolve(Be,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:e.resolve(Be,"./@fnet/cli-project-common/dist/template/default"),coreDir:e.resolve(Be,"./@fnet/cli-project-flow/dist/template/core"),projectDir:e.resolve(o.projectDir,"./.workspace"),projectSrcDir:e.resolve(o.projectDir,"./src"),project:o,tags:t.ftag}}}Ke=Ke.command("input [name]","Create or modify an input config file",(e=>e.positional("name",{type:"string",demandOption:!1}).help(!1).version(!1)),(async t=>{try{const o=await Me(t),{project:n}=o,{projectDir:i,projectFileParsed:s}=n,r=s.input;if(!r)throw new Error("Config schema not found in project file.");if(!Reflect.has(t,"name")){const{inputName:e}=await l({type:"input",name:"inputName",message:"Input name:",initial:"dev"});t.name=e}const c=e.resolve(i,".fnet");a.existsSync(c)||a.mkdirSync(c);const p=e.resolve(c,`${t.name}.fnet`),d=a.existsSync(p),f=(await import("@fnet/object-from-schema")).default,m=await f({schema:r,format:"yaml",ref:d?p:void 0});a.writeFileSync(p,m)}catch(e){console.error(e.message),process.exit(1)}})),Ke=Re(Ke,{bin:"npm"}),Ke=Re(Ke,{bin:"node"}),Ke=Re(Ke,{bin:"bun"}),Ke=Re(Ke,{name:"serve",bin:"bun",preArgs:["run","serve","--"]}),Ke=Re(Ke,{name:"watch",bin:"bun",preArgs:["run","watch","--"]}),Ke=Re(Ke,{name:"app",bin:"bun",preArgs:["run","app","--"]}),Ke=Re(Ke,{name:"cli",bin:"bun",preArgs:["run","cli","--"]}),Ke=Re(Ke,{bin:"npx"}),Ke=Re(Ke,{bin:"cdk"}),Ke=Re(Ke,{bin:"aws"}),Ke=function(e,{name:t,preArgs:o=[]}){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 Me(e),{projectDir:n}=t,s=e.config,r=await m({name:s,dir:n,transferEnv:!1,optional:!0,tags:t.tags}),c=r?.data?.env||void 0,p=e.command,l=process.argv.slice(5);i(p,[...o,...l],{cwd:a.existsSync(n)?n:Oe,stdio:"inherit",shell:!0,env:{...process.env,...c}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(Ke,{name:"with"}),Ke=function(e,{name:t,preArgs:o=[]}){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 Me(e),{project:o}=t,{projectFileParsed:n}=o,i=n.commands;if(!i)throw new Error("Commands not found in project file.");const s=i[e.group];if(!s)throw new Error(`Command group '${e.group}' not found in project file.`);await u({commands:s})}catch(e){console.error(e.message),process.exit(1)}}))}(Ke,{name:"run"}),Ke.demandCommand(1,"You need at least one command before moving on").help().argv;export{L as w};
|
|
2
|
+
import e,{delimiter as t,join as o}from"node:path";import{fileURLToPath as n}from"node:url";import{spawn as i}from"node:child_process";import s from"node:os";import a,{existsSync as r}from"node:fs";import c from"yaml";import p from"yargs";import l from"@fnet/prompt";import d from"@fnet/shelljs";import f from"@fnet/yaml";import m from"@fnet/config";import u from"@fnet/shell-flow";import h from"@flownet/lib-render-templates-dir";import y from"nunjucks";import w from"lodash.clonedeep";import g from"isobject";import b from"redis";import x from"@flownet/lib-is-redis-online";import{randomUUID as k}from"node:crypto";import{Api as v,Atom as j}from"@flownet/lib-atom-api-js";import _ from"lodash.merge";import D from"@flownet/lib-parse-imports-js";import E from"@fnet/npm-list-versions";import S from"@fnet/npm-pick-versions";import P from"object-hash";import $ from"ajv/dist/2020.js";import T from"ajv/dist/standalone/index.js";import C from"ajv-formats";import N from"@flownet/lib-parse-node-url";import F from"bpmn-moddle";import A from"dagre";import O from"@fnet/expression";import B from"chalk";import I from"@fnet/list-files";import K from"@fnet/key-value-transformer";import R from"lodash.pick";import M from"lodash.omit";const J=e.dirname(n(import.meta.url));var L=e=>{const n=process.env.PATH||"",i="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],s=n.split(t);for(const t of s)for(const n of i){const i=o(t,"win32"===process.platform?e+n:e);if(r(i))return i}return null};class z{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(v.set_api_url(e.data.url),t)return v.set_req_token(t),void o(t);fetch(`${e.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((e=>{v.set_req_token(e.access_token),o(e.access_token)})).catch((e=>{v.set_req_token(),n(e)}))}))}}function q({feature:e,features:t,packageDevDependencies:o}){const{name:n,packages:i,options:s,extraCheck:a,explicit:r}=e,c=`${n}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=s||{};const f=t[n]?.options;f&&(d=_(d,f));const m=!t[n]||!1===t[n]?.enabled;l.forEach((e=>{const o=t.rollup_output[e];if(o){if(Reflect.has(o,n)){if(m||!o[n]||!1===o[n]?.enabled)return void delete o[n];!0===o[n]&&(o[n]={enabled:!0,options:d})}else{if(m||r||!1===t[c])return;o[n]={enabled:!0}}o[n]=o[n]||{},o[n].options={...d,...o[n].options}}}));let u=l.some((e=>!0===t.rollup_output[e][n]?.enabled));a&&(u=a()&&u),t[c]=u,u&&i.forEach((e=>o.push({package:e[0],version:e[1]})))}function W({dir:t,name:o="index"}){let n=e.resolve(t,`./${o}.tsx`);if(a.existsSync(n)||(n=e.resolve(t,`./${o}.ts`)),a.existsSync(n)||(n=e.resolve(t,`./${o}.jsx`)),a.existsSync(n)||(n=e.resolve(t,`./${o}.js`)),!a.existsSync(n))return{};const i=n,s=e.extname(n);return{file:i,ext:s,ts:".ts"===s||".tsx"===s,name:o}}async function X(t){const{atom:o,context:n,setProgress:i}=t;i("Initializing features..."),o.doc.features=o.doc.features||{};const s=o.doc.features;s.project=s.project||{},s.project.format=s.project.format||s.project_format||"esm",s.project_format=s.project.format,s.dts_enabled=!0===s.dts||void 0!==s.dts&&!1!==s.dts;const a=e.resolve(n.project.projectDir),r=W({dir:e.resolve(a,"./app")});if(r.file){i("Parsing app entry imports...");let e=await D({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.app_uses_jsx=t,s.app_has_entry=!0,e=await D({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.app_entry_uses_jsx=t,s.app_entry_is_ts=r.ts,s.app_entry_ext=r.ext}const c=W({dir:e.resolve(a,"./cli")});if(c.file){i("Parsing cli entry imports...");let e=await D({file:c.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.cli_uses_jsx=t,s.cli_has_entry=!0,e=await D({file:c.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.cli_entry_uses_jsx=t,s.cli_entry_is_ts=c.ts,s.cli_entry_ext=c.ext}if("workflow.lib"===o.type){const t=W({dir:e.resolve(a,"./src")});if(t.file){i("Parsing src entry imports...");let e=await D({file:t.file,recursive:!0}),o=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.src_uses_jsx=o,s.src_has_entry=!0,e=await D({file:t.file}),o=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.src_entry_uses_jsx=o,s.src_entry_is_ts=t.ts,s.src_entry_ext=t.ext}}const p=Reflect.has(s,"app_entry_uses_jsx")?!0===s.app_entry_uses_jsx:!0===s.src_entry_uses_jsx,l=Reflect.has(s,"cli_entry_uses_jsx")?!0===s.cli_entry_uses_jsx:!0===s.src_entry_uses_jsx;s.form_enabled=p||l||!0===s.form||!0===s.form?.enabled,s.multiple_enabled=s.multiple_enabled||!0===s.multiple||!0===s.multiple?.enabled,!1===s.app?s.app={enabled:!1}:!0===s.app?s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p}:s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p,...s.app||{}},s.app.enabled=!0===s.app.enabled&&(!0===o.doc.features.form_enabled||!0===s.app.extend||!0===s.app.enabled),s.app.format=s.app.format||"esm",s.app.folder=s.app.folder||s.app.format||"default",!1===s.cli?s.cli={enabled:!1}:!0===s.cli?s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l}:s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l,...s.cli||{}},s.cli.enabled=!0===s.cli.enabled&&(!1===o.doc.features.form_enabled||!0===s.cli.extend||!0===s.cli.enabled),s.cli.format=s.cli.format||"esm",s.cli.folder=s.cli.folder||s.cli.folder||"esm",s.cli.node_options=s.cli.node?.options||s.cli.node_options||"",s.json=s.cli.enabled||s.json;const d={cjs:{format:"cjs",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==s.cjs,copy:!1},esm:{format:"esm",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==s.esm,copy:!0},iife:{format:"iife",context:s.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===s.iife,terser:!0,copy:!1}};!0===s.webos&&(d.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===s.electron&&(d.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===s.nextjs&&(d.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===s.ios&&(d.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===s.macos&&(d.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===s.app.enabled&&(s.app.dir=`./dist/app/${s.app.folder}`,d.app={format:s.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:s.app.dir,terser:!0,output_exports:!1===s.app.export?"none":"auto",browsersync:!0}),!0===s.cli.enabled&&(s.cli.dir=`./dist/cli/${s.cli.folder}`,d.cli={format:s.cli.format,context:"global",babel:!0===s.src_uses_jsx||!0===s.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:s.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===s.cli.export?"none":"auto"});const f={server:".",startPath:`${e.normalize(s.app.dir||".")}`,files:[e.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=_({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=_(f,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=_({},s.replace_options||s.replace?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=_(d,s.rollup_output||s.rollup?.output||{}),s.preact_enabled=!0===s.preact||s.preact&&!1!==s.preact?.enabled;let m=Object.keys(d);for(const e of m){const t=d[e];t&&(!1!==s.rollup[e]?(t.babel_options=t.babel_options||s.babel_options,t.browsersync_options=_(s.browsersync_options,t.browsersync_options),t.replace_options=_(s.replace_options,t.replace_options),s.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),(s.form_enabled||s.babel)&&(t.babel=!0)):delete s.rollup_output[e])}m=Object.keys(s.rollup_output),s.babel_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browser_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browsersync_enabled=!1!==s.browsersync&&m.some((e=>!0===s.rollup_output[e].browsersync)),s.browsersync_enabled=s.browsersync_enabled&&s.app.enabled,s.dependency_auto_enabled=!1!==s.dependency_auto&&!1!==s.dependency_auto?.enabled,s.npm_install_flags=s.npm_install_flags||"",s.react_version=s.react_version||s.react?.version||18,function(e){const{atom:t,packageDevDependencies:o}=e,n=t.doc.features,i=n.css&&!1!==n.css.enabled;let s=[];i&&(s.push(["rollup-plugin-postcss","^4"]),s.push(["sass","^1.66"]),(n.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"])}})));q({feature:{name:"css",packages:s},features:n,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e,n=t.doc.features,i={};!0===n.app?.enabled&&(i.targets=i.targets||[],i.targets.push({src:"./src/app/index.html",dest:n.app.dir}),Reflect.has(n.app,"copy")||Reflect.has(n,"copy")||(n.copy=!0)),q({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:n,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({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:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;q({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:t.doc.features,packageDevDependencies:o})}(t)}async function V({projectDir:t,name:o,setProgress:n,count:i=1}){let s;const r=P(["npm-pick-versions",o,i]),c=e.join(t,".cache"),p=e.join(c,r+".json");return a.existsSync(p)?(n&&n(`Picking npm version of ${o} from cache ...`),s=JSON.parse(a.readFileSync(p,"utf8"))):(n&&n(`Picking npm version of ${o} ...`),s=await S({name:o,count:i}),a.mkdirSync(c,{recursive:!0}),a.writeFileSync(p,JSON.stringify(s),"utf8")),s}var U=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setProgress:s,deploymentProject:a,yamlTarget:r}=e;if(!0!==i.enabled)return;const c=i.type;try{if("lib"===c)await(await import("./index.DG8TqL-1.js")).default({...e});else if("red"===c)await(await import("./index.CmMM-Ek9.js")).default({...e});else if("npm"===c)await(await import("./index.DHsBGWgK.js")).default({...e});else if("gcs"===c)await(await import("./index.UOds5XLl.js")).default({...e});else if("gitlab"===c)await(await import("./index.DI3yyTtl.js")).default({...e});else if("fnet-package"===c)await(await import("./index.Bfg4lyu-.js")).default({...e});else if("fnet-form"===c)await(await import("./index.Q-CYRcna.js")).default({...e});else if("fnet-node"===c)await(await import("./index.C2S9JYhS.js")).default({...e});else if("fnet-flow"===c)await(await import("./index.BuYxdKtK.js")).default({...e});else if("nextjs"===c)await(await import("./index.CDct_kkF.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("webos"===c)await(await import("./index.CMC8mlye.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("electron"===c)await(await import("./index.xd8c7XMr.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("docker"===c)await(await import("./index.D2N9YZmA.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("ios"===c)await(await import("./index.B5XE4ChJ.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("macos"===c)await(await import("./index.W6RYgypK.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("rust"===c)await(await import("./index.CzAV0S36.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else{if("pypi"!==c)return void console.warn(`No deployer found for type: ${c}`);await(await import("./index.C7saWH6d.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0}}catch(e){throw console.error(`Error during deployment for type "${c}":`,e),e}},G={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 H(e,t){return e.filter(((e,o,n)=>n.map((e=>e[t])).indexOf(e[t])===o))}function Y(e){const{nodes:t,nodeIndex:o,root:n}=e,i=e.targetNodes||n.childs;i.forEach((t=>{const o="workflow"===t.type||"subworkflow"===t.type,n=!o&&t.childs.filter((e=>!e.virtual)).length>0;if(n&&(t.bpmn.type="bpmn:SubProcess"),o||n){const o=t.childs.filter((e=>!0!==e.module))[0];t.childs.filter((e=>!0===e.module)).forEach((o=>{const n=Z({...e,parent:t,bpmnType:"bpmn:IntermediateCatchEvent",type:"inter",definitions:[{type:"bpmn:SignalEventDefinition"}]});n.bpmn.edges=[{from:n.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}]}));const n=t.childs.find((e=>"try"===e.name&&"tryexcept"===t.type)),s=t.childs.filter((e=>"except"===e.name&&"tryexcept"===t.type));n&&s.length&&s.forEach((o=>{const i=Z({location:t.childs.indexOf(o),...e,parent:t,bpmnType:"bpmn:BoundaryEvent",type:"boundary",attrs:{attachedToRef:n},definitions:[{type:"bpmn:ErrorEventDefinition"}]});i.bpmn.edges=[{from:i.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}]}));const a=t.childs.find((e=>"raise"===e.type));if(a){const o=Z({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:"ERROR",definitions:[{type:"bpmn:ErrorEventDefinition"}]});a.bpmn.edges=[{from:a.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}]}if(o)if(t.bpmn.starts.length>1){const o=Z({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"}),n=Z({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch"});o.bpmn.edges=[{from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}],n.bpmn.edges=t.bpmn.starts.map((e=>({...e,from:n.indexKey})));const i=n.bpmn.edges.find((e=>!0===e.next));if(i){const o=Z({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:i.to});i.to=o.indexKey}}else{const n=Z({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"});n.bpmn.edges.push({from:n.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"})}t.childs.filter((e=>!0!==e.virtual&&e.bpmn.outside.length&&"bpmn:EndEvent"!==e.bpmn.type)).forEach((o=>{o.bpmn.outside.forEach((n=>{const s=i.indexOf(t),a=Z({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:n.to,location:s+1});o.bpmn.edges.push({from:o.indexKey,to:a.indexKey,type:"bpmn:SequenceFlow"})}))}));t.childs.filter((e=>!0!==e.virtual&&e.bpmn.edges.length>1)).forEach((o=>{const n=i.indexOf(o),s=Z({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch",location:n+1});s.bpmn.edges=o.bpmn.edges.map((e=>({...e,from:s.indexKey}))),o.bpmn.edges=[{from:o.indexKey,to:s.indexKey,type:"bpmn:SequenceFlow"}],o.bpmn.outside=[]}))}Y({...e,targetNodes:t.childs})}))}function Z(e){const{parent:t,nodes:o,nodeIndex:n,bpmnType:i,type:s,name:a,outside:r,location:c,definitions:p,attrs:l}=e,d=t.childs.filter((e=>e.type===`v${s}`)).length,f={indexKey:`${t.indexKey}/_${s}${d}`,pathKey:`${t.pathKey}._${s}${d}`,type:`v${s}`,name:a,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),o.push(f),n[f.indexKey]=f,f}function Q(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a,diagrams:r,nodes:c}=e;!function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a,nodes:r}=e,c=o.get("flowElements");o.$nodes=o.$nodes||[],t.childs.forEach((e=>{const t=i.create(e.bpmn.type,{id:`node.${e.pathKey}`,name:e.definition?.title||e.name});if(s[t.id]=t,t.$isNode=!0,t.$node=e,e.$flow=t,o.$nodes.push(t),c.push(t),e.bpmn.attrs){Object.keys(e.bpmn.attrs).forEach((o=>{"attachedToRef"===o&&t.set(o,e.bpmn.attrs[o].$flow)}))}if(e.bpmn.definitions){const o=e.bpmn.definitions.map((e=>{const t=i.create(e.type);return Object.keys(e.attrs||{}).forEach((o=>{t.set(o,e.attrs[o])})),t}));t.eventDefinitions=o}}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a}=e,r=o.get("flowElements");o.$edges=o.$edges||[],t.childs.forEach((e=>{e.bpmn.edges.forEach((t=>{const n=e,c=a[t.to],p=`edge.${n.pathKey}_${c.pathKey}`;if(s[p])return;const l=s[`node.${n.pathKey}`],d=s[`node.${c.pathKey}`],f=i.create(t.type,{id:p,sourceRef:l,targetRef:d});s[f.id]=f,f.$is_edge=!0,l.get("outgoing").push(f),d.get("incoming").push(f),o.$edges.push({from:l,to:d,flow:f}),r.push(f)}))}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a}=e,r=120,c=80,p=160,l=160,d=new A.graphlib.Graph;d.setDefaultEdgeLabel((()=>({}))),d.setGraph({rankdir:"TB",nodesep:r,ranksep:c,xranker:"longest-path"}),o.$nodes.forEach((e=>{d.setNode(e.id,{width:e.$node?.bpmn.width||r,height:e.$node?.bpmn.height||c,label:e.id})})),o.$edges.forEach((e=>{d.setEdge(e.from.id,e.to.id)})),A.layout(d),o.$nodes.forEach((e=>{const t=d.node(e.id);let o=t.width,s=t.height;const a=i.create("bpmndi:BPMNShape",{id:`shape.${e.id}`,bpmnElement:e,bounds:i.create("dc:Bounds",{x:p+t.x-t.width/2,y:l+t.y-t.height/2,width:o,height:s}),label:i.create("bpmndi:BPMNLabel")});e.$node.bpmn.fill&&a.set("bioc:fill",e.$node.bpmn.fill),e.$node.bpmn.stroke&&a.set("bioc:stroke",e.$node.bpmn.stroke);n.get("planeElement").push(a)})),o.$edges.forEach((e=>{const t=d.edge(e.from.id,e.to.id),o=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:p+e.x,y:l+e.y});o.get("waypoint").push(t)}));n.get("planeElement").push(o)}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a,diagrams:r}=e,c=t.childs.filter((e=>"bpmn:SubProcess"===e.bpmn.type));c.forEach((t=>{const o=s[`node.${t.pathKey}`],n=i.create("bpmndi:BPMNDiagram",{id:`diagram_${t.pathKey}`});s[n.id]=n,r.push(n);const a=i.create("bpmndi:BPMNPlane",{id:`plane_${t.pathKey}`});s[a.id]=a,n.plane=a,a.bpmnElement=o,Q({...e,targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:a})}))}(e)}async function ee(e){const t=e.root,o=t.context.index,n=Object.keys(o).map((e=>o[e]));!function(e){const{nodes:t}=e;t.forEach((e=>{const t=[],o=[],n=i=>{i.context.next&&(t.push({from:i,to:i.context.next,type:"bpmn:SequenceFlow"}),i===e&&o.push({to:i.context.next,type:"bpmn:SequenceFlow",next:!0})),i.childs.forEach((t=>{i===e&&"switch"===e.type&&o.push({to:t,type:"bpmn:SequenceFlow"}),n(t)}))};n(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=o.map((e=>({...e,to:e.to.indexKey})));e.bpmn=e.bpmn||{},e.bpmn.edges=H(i,"to"),e.bpmn.outside=H(s,"to"),e.bpmn.starts=H(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:n}),Y({nodes:n,nodeIndex:o,root:t});const i=new F({atom:G}),s={},a=i.create("bpmn:Definitions",{id:"definitions_0"});s[a.id]=a;for await(const e of t.childs){const r=a.get("rootElements"),c=a.get("diagrams"),p=i.create("bpmn:Process",{id:`process_${e.pathKey}`,documentation:[i.create("bpmn:Documentation",{text:`Atom Workflow - ${t.context.atom.name}`})]});s[p.id]=p,p.isExecutable=!0,r.push(p);const l=i.create("bpmndi:BPMNDiagram",{id:`diagram_${e.pathKey}`});s[l.id]=l,c.push(l);const d=i.create("bpmndi:BPMNPlane",{id:`plane_${e.pathKey}`});s[d.id]=d,l.plane=d,d.bpmnElement=p;Q({targetNode:e,targetFlowElementsContainer:p,targetPlaneElement:d,moddle:i,elementIndex:s,nodeIndex:o,nodes:n,diagrams:c})}return{diagramXML:(await i.toXML(a,{format:!0})).xml}}async function te(e={}){return await ee(w(e))}async function oe({node:e,initNode:t}){if(Reflect.has(e.definition,"modules")&&!Array.isArray(e.definition.modules)){const t=e.definition.modules;e.definition.modules=[],Object.keys(t).forEach((o=>{const n={...t[o]};"modules"===e.type&&(n.export=n.export||o),e.definition.modules.push({[o]:n})}))}const o=[],n=await K({data:e.definition,callback:(e,t,n)=>{const i=O({expression:e});if("m"===i?.processor){const e=n.slice(0,-1);e.push(i.statement);const s=e.join("_");return o.push({[s]:t}),[i.statement,`m::${s}`]}return[e,t]}});o.length>0&&(e.definition=n,e.definition.modules=e.definition.modules||[],e.definition.modules=e.definition.modules.concat(o)),e.hasModules=e.definition.modules?.length>0;for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}}async function ne({node:e,transformExpression:t}){const o=e.context.transform;Reflect.has(o,"export")&&(o.export=await t(o.export)),Reflect.has(o,"return")&&(e.hasReturn=!0,o.return=await t(o.return)),o.hasOwnProperty("nextArgs")&&(e.hasNextArgs=!0,o.nextArgs=await t(o.nextArgs))}async function ie({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition),e.context.transform;for(const t of e.childs)t.context.transform=t.context.transform||w(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var se={hits:async function({node:e}){return!!e.definition.hasOwnProperty("switch")},init:async function({node:e,initNode:t}){e.type="switch";const o=e.definition.switch||[];if(!o.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===o.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const n=o.filter((e=>e.hasOwnProperty("default")));if(n.length>1)throw new Error("Switch must have only one default");if(1===n.length&&!o[o.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");e.hasDefaultCondition=1===n.length,await oe({node:e,initNode:t}),e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let o=0;o<e.definition.switch.length;o++){let n=e.definition.switch[o],i=`${o}`;n.hasOwnProperty("default")&&(i="default",n=n.default);const s={name:n.condition||i,childs:[],parent:e,definition:n,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=ie},resolve:ie};var ae={hits:async function({node:e}){return 1===Object.keys(e.definition).map((e=>O({expression:e}))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,o=Object.keys(t.definition).map((e=>O({expression:e}))),n=[],i=o.find((e=>"if"===e?.processor)),s=t.definition[i.expression];n.push({name:`${t.name}_if`,definition:s,processor:i}),delete t.definition[i.expression];const a=o.filter((e=>"elseif"===e?.processor));let r=0;for(const e of a){const o=t.definition[e.expression];n.push({name:`${t.name}_elseif_${r++}`,definition:o,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of n)t.definition.switch.push({condition:e.processor.statement,...e.definition});if(t.definition?.else){const e=t.definition.else;t.definition.switch.push({default:e}),delete t.definition.else}await se.init(e)}};async function re({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){if(e.context.transform=e.context.transform||w(e.definition),e.context.transform,e.context.try=e.childs.find((e=>"try"===e.name)),e.context.except=e.childs.find((e=>"except"===e.name)),e.context.except){const t=e.context.except;t.context.transform=t.context.transform||w(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var ce={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:t}){if(e.type="tryexcept",await oe({node:e,initNode:t}),e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const o="try",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}if(e.definition.except){const o="except",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}e.resolve=re},resolve:re};async function pe({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],o=Object.keys(t)[0],s=t[o],a={key:await n(o),value:await n(s)};i.assign[e]=a}await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var le={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",await oe({node:e,initNode:t}),e.resolve=pe},resolve:pe};async function de({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var fe={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",await oe({node:e,initNode:t}),e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[o,n]=[R(e.definition.for,t),M(e.definition.for,t)];e.definition.for=o,e.definition.for.steps=[{[`${e.name}_step`]:n}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let o=0;o<e.definition.for.steps.length;o++){const n=e.definition.for.steps[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=de},resolve:de};var me={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){}};async function ue({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var he={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=ue},resolve:ue};async function ye({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);const n=e.context.transform;e.hasReturn=!0,n.return=await o(n.return),await t({node:e})}var we={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=ye},resolve:ye};async function ge({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;if("function"===e.target?.atom?.doc?.type&&(i.call=await n(e.target.atom.name)),i.args&&(i.args=await n(i.args)),i.result){"string"==typeof i.result&&(i.result=[{[i.result]:"e::result"}]);for(let e=0;e<i.result?.length;e++){let t=i.result[e],o=Object.keys(t)[0],s=t[o],a={key:await n(o),value:await n(s)};i.result[e]=a}}const s=e.workflow.parent;i.import?e.context.lib=s.context.libs.find((e=>e.name===i.import)):e.context.lib=s.context.libs.find((e=>e.name===i.call)),await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var be={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call",await oe({node:e,initNode:t}),e.resolve=ge},resolve:ge};async function xe({node:e,transformExpression:t}){e.context.next=e.childs[0],e.context.transform=e.context.transform||w(e.definition),await ne({node:e,transformExpression:t})}var ke={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=xe},resolve:xe};async function ve({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;i.props&&(i.props=await n(i.props));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.form)),await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var je={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form",await oe({node:e,initNode:t}),e.resolve=ve},resolve:ve};async function _e({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||w(e.definition),await t({node:e})}var De={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=_e},resolve:_e};async function Ee({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;i.next=await n(i.next),await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var Se={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Ee},resolve:Ee};async function Pe({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition),e.context.transform,await ne({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var $e={hits:async function({node:e}){return e.definition.hasOwnProperty("modules")},init:async function({node:e,initNode:t}){e.type="modules",await oe({node:e,initNode:t}),e.resolve=Pe},resolve:Pe};function Te({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 o=e.parent;for(;o.parent;){const n=o.childs.find((e=>e.name===t.next));if(n){e.context.next=n;break}o=o.parent}}else{if(!0===e.module)return;let t=e.parent,o=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(Reflect.has(t,"blockAutoJumpToParent")||Reflect.has(t,"blockAutoJumpToSibling")){if(t.blockAutoJumpToParent){const n=t.childs.find((e=>e.index===o));n&&(e.context.next=n);break}t.blockAutoJumpToParent||(o=t.index+1,t=t.parent)}else{const n=t.childs.find((e=>e.index===o));if(n){e.context.next=n;break}o=t.index+1,t=t.parent}}}class Ce{#e;#t;#o;#n;constructor({key:e,npm:t,master:o,extras:n}){this.#e=e,this.#t=t,this.#o=o,this.#n=n}hits({node:e}){return e.definition.hasOwnProperty(this.#e)}async init(e){const{node:t}=e,o=this.#e,n=t.definition,i=typeof n[o];if(n.call=`npm:${this.#t}`,n.args="object"!==i?{...n.args,[`${this.#o}`]:n[o]}:n[o],delete n[o],this.#n)for(const e in this.#n)n[e]=this.#n[e];console.log(`[npm-block] ${this.#e} --\x3e ${this.#t}`),await be.init(e)}}function Ne(e){return new Ce(e)}class Fe{#i;#s;#a;#r;#c;#p;#l;#d;#f;#m;#u;#h;#y;#w;#g;#b;#x;#k;#v;#j;#_;#D=[];constructor(e){this.#i=new z,this.#s=e,this.#p=[],this.#l=[],this.#d={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#D.push(Ne({key:"config",npm:"@fnet/config",master:"name"})),this.#D.push(Ne({key:"yaml",npm:"@fnet/yaml",master:"file"})),this.#D.push(Ne({key:"prompt",npm:"@fnet/prompt",master:"message"})),this.#D.push(Ne({key:"html-link",npm:"@flownet/lib-load-browser-link-url",master:"src"})),this.#D.push(Ne({key:"html-script",npm:"@flownet/lib-load-browser-script-url",master:"src"})),this.#D.push(Ne({key:"http-server",npm:"@fnet/node-express",master:"server_port"})),this.#D.push(Ne({key:"shell",npm:"@fnet/shell-flow",master:"commands"})),this.#D.push(Ne({key:"list-files",npm:"@fnet/list-files",master:"pattern"})),this.#D.push(Ne({key:"up-list-files",npm:"@fnet/up-list-files",master:"pattern"})),this.#D.push(Ne({key:"auto-conda-env",npm:"@fnet/auto-conda-env",master:"envDir"})),this.#D.push(Ne({key:"ollama-chat",npm:"@fnet/ollama-chat",master:"model"})),this.#D.push(Ne({key:"ai",npm:"@fnet/ai",master:"prompt",extras:{subtype:"flow"}})),this.#D.push(Ne({key:"invoke",npm:"@fnet/invoke",master:"method",extras:{}})),this.#D.push(Ne({key:"fetch",npm:"@fnet/fetch",master:"url",extras:{}})),this.#D.push(Ne({key:"filemap",npm:"@fnet/filemap",master:"target",extras:{}})),this.#j={packageDependencies:this.#p,packageDevDependencies:this.#l,setProgress:this.setProgress.bind(this),context:this.#s,Atom:j,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#_={initNode:this.initNode.bind(this),cloneDeep:w,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Te,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await async function(){if(!await x({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=b.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}(),this.#u=this.#s.buildId||k(),this.#j.buildId=this.#u,this.#g=this.#s.mode,this.#b=["all","deploy","build","file"].includes(this.#g),this.#x=["all","deploy","build"].includes(this.#g),this.#k=["all","deploy"].includes(this.#g),this.#v=["all","deploy","build","file","bpmn"].includes(this.#g),this.#y=this.#s.protocol,this.#h="BUILD:"+this.#u,this.#w=(await m({optional:!0,name:"atom",dir:this.#s.projectDir,tags:this.#s.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),this.transformWorkflow({workflow:this.#r});const e=await this.initNodeTree({workflow:this.#r});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.#a.doc.features}),await this.initFeaturesFromNodes({childs:e.childs,features:this.#a.doc.features}),await X(this.#j),await async function({atom:e,packageDependencies:t,packageDevDependencies:o,setProgress:n}){n("Initializing dependencies");const i=e.doc.dependencies||[];if(i.filter((e=>!e.dev)).forEach((e=>t.push(e))),i.filter((e=>e.dev)).forEach((e=>o.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let o="^18.2";n("Fetching React versions"),o=`^${(await E({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:o}),t.push({package:"react-dom",version:o}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),o.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"})),e.doc.features.render&&!1!==e.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"}),e.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"}),e.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"}),e.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"}),e.doc.features.browsersync_enabled&&o.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(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.#s.id&&(this.#f=await this.#i.init({config:this.#w}),this.#j.atomAccessToken=this.#f)}async initWorkflow(){const e=this.#s.id;this.#a=this.#s.project?.workflowAtom||await j.get({id:e}),this.#r="string"==typeof this.#a.doc.content?(await f({content:this.#a.doc.content,tags:this.#s.tags})).parsed:this.#a.doc.content;let t=this.#a.doc.bundleName;t=t||(this.#a.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#a.doc.bundleName=t,this.#a.type=this.#a.type||"workflow",this.#j.atom=this.#a,this.#a.doc.features=this.#a.doc.features||{}}#E(t){console.log("filePath",t),a.statSync(t).isDirectory()?(a.readdirSync(t).forEach((o=>{const n=e.join(t,o);this.#E(n)})),a.rmSync(t)):a.unlinkSync(t)}#S(t,o){const n=a.existsSync(t),i=n&&a.statSync(t);n&&i.isDirectory()?(a.mkdirSync(o,{recursive:!0}),a.readdirSync(t).forEach((n=>{this.#S(e.join(t,n),e.join(o,n))}))):a.copyFileSync(t,o)}async initWorkflowDir(){this.setProgress({message:"Initializing library directory."});const t=this.#s.projectDir,o=this.#s.coreDir;this.setProgress({message:"Cleaning project directory."});const n=I({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of n)a.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."}),a.existsSync(t)||a.mkdirSync(t,{recursive:!0});const i=e.join(t,"src");a.existsSync(i)||a.mkdirSync(i,{recursive:!0});const s=e.join(i,"core");this.#S(o,s);const r=e.join(i,"default","blocks");a.existsSync(r)||a.mkdirSync(r,{recursive:!0})}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#s.templateDir;this.#c=y.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,o]=Object.entries(e)[0];if(o.hasOwnProperty("onerror")){const{onerror:n,...i}=o;e[t]={try:i,except:n}}if(e[t].hasOwnProperty("steps")){const o=e[t].steps;if(!Array.isArray(o))throw new Error("Steps must be an array.");e[t].steps=o.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),o={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#a}};t.forEach((t=>{const n={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:o,definition:e[t],index:o.childs.length,depth:o.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};o.childs.push(n)}));for await(const e of o.childs)await this.initNode({node:e});return o}async initNode({node:e}){const t={...this.#_,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await ce.hits(t))await ce.init(t);else if(await fe.hits(t))await fe.init(t);else if(await se.hits(t))await se.init(t);else if(await ae.hits(t))await ae.init(t);else if(await me.hits(t))await me.init(t);else if(await le.hits(t))await le.init(t);else if(await he.hits(t))await he.init(t);else if(await be.hits(t))await be.init(t);else if(this.#D.find((e=>e.hits(t))))await this.#D.find((e=>e.hits(t))).init(t);else if(await je.hits(t))await je.init(t);else if(await De.hits(t))await De.init(t);else if(await ke.hits(t))await ke.init(t);else if(await Se.hits(t))await Se.init(t);else if(await $e.hits(t))await $e.init(t);else{if(!await we.hits(t))throw new Error("Undefined step type.");await we.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const o of e.childs)await this.initNodeIndex({node:o,index:t});return e.context.index=t,t}async initNodeIndex({node:t,index:o}){const n=e.join(t.parent.indexKey,t.name);t.indexKey=n,o[n]=t;const i=[];let s=t;for(;s?.parent;)i.push(s.index),s=s.parent;i.reverse(),t.codeKey=`B_${i.join("_")}_${t.type}`,t.pathKey=`${i.join(".")}`,t.typeId=k();for await(const e of t.childs)await this.initNodeIndex({node:e,index:o})}async initNodeCalls({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"call"===n.type&&o.push(n)}return e.context.calls=o,o}async initNodeCallLibs({root:e}){const t=[],o=e.context.calls;for await(const e of o){const o=e.definition.import||e.definition.call,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom",definition:e.definition},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.call,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"form"===n.type&&o.push(n)}return e.context.forms=o,o}async initNodeFormLibs({root:e}){const t=[],o=e.context.forms;for await(const e of o){const o=e.definition.import||e.definition.form,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async initFeaturesFromNodes({childs:e,features:t}){for await(const o of e)"form"!==o.type||Reflect.has(t,"form")||(t.form=!0),await this.initFeaturesFromNodes({childs:o.childs,features:t})}async initEntryFiles({root:e,features:t}){for await(const o of e.childs){let e;if("main"===o.name)e="index.js";else if("cli"===o.name)e="cli.js";else if("app"===o.name)e="app.js";else{if("api"!==o.name)continue;e="api.js"}t[`${o.name}_default_entry_file`]=e,o.entryFile=e}}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.form,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const o=e.filter((e=>"atom"===e.type));for(let e=0;e<o.length;e++){const n=o[e],i=await this.findAtomLibrary({url:n.name,libRef:n});n.atom=i;const s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const o=t.find((t=>t.package===e.package));o?"string"==typeof e.path?(o.path||[]).some((t=>t===e.path))||(o.path=o.path||[],o.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(o.path||[]).some((t=>t===e))||(o.path=o.path||[],o.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:t,libRef:o}){const n=N({url:t});if(!n)throw new Error(`Invalid package name: ${t}`);if(n.protocol||(n.protocol=this.#y),"ac:"===n.protocol){const e=n.pathname.split("/");if(1===e.length)return await j.first({where:{name:t,parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===e.length){const t=await j.first({where:{name:e[0],parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"folder"}});return await j.first({where:{name:e[1],parent_id:t.id,type:"workflow.lib"}})}}else{if("local:"===n.protocol){const t=e.resolve(this.#s.projectSrcDir,`${n.pathname}.js`),o=[],i=(await D({file:t,recursive:!0})).all;for await(const e of i){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await V({name:e.package,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});o.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return{name:n.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:o},protocol:n.protocol}}if("npm:"===n.protocol){const e=await V({name:n.pathname,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});return{name:n.pathname,doc:{type:"workflow.lib",subtype:"flow"===o?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:n.pathname,version:e.minorRange,type:"npm"}]},protocol:n.protocol}}if("use:"===n.protocol){return{name:n.pathname,doc:{type:"function",dependencies:[]},protocol:n.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||w(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const o=t.params[e];if("string"==typeof o)t.params[e]={key:o,hasDefault:!1};else{const n=Object.keys(o)[0];t.params[e]={key:n,hasDefault:!0,default:o[n],type:typeof o[n]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#_,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:t}){await this.setProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const o=t.context.libs.filter((e=>"atom"===e.type));for(let t=0;t<o.length;t++){const n=o[t].atom,i=this.#s.projectDir;if("local:"===n.protocol){const t=e.resolve(this.#s.projectSrcDir,`${n.fileName||n.name}.js`),o=e.relative(`${this.#s.projectDir}/src/default/blocks`,t);if(!a.existsSync(t)){a.mkdirSync(e.dirname(t),{recursive:!0});let o="export default async (args)=>{\n";o+="}",a.writeFileSync(t,o,"utf8")}n.relativePath=o.split(e.sep).join("/"),this.#a.typesDir=`./types/${e.basename(i)}/src`}else if("npm:"===n.protocol)n.relativePath=n.name;else if("use:"===n.protocol);else{const t=`${i}/src/libs/${n.id}.js`,o=n.doc.contents?.find((e=>"esm"===e.format))||n.doc;a.writeFileSync(e.normalize(t),o.content,"utf8")}}}async createEngine({root:t}){await this.setProgress({message:"Creating engine file."});const o=this.#s.templateDir,n=y.compile(a.readFileSync(e.resolve(o,"src/default/engine.js.njk"),"utf8"),this.#c);for(let o=0;o<t.childs.length;o++){const i=t.childs[o];if(!i.entryFile)continue;const s=n.render({flow:i,ui:{package:"@fnet/react-app"}}),r=this.#s.projectDir,c=e.resolve(r,`src/default/${i.entryFile}`);a.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:t}){const o=this.#s.templateDir,n=y.compile(a.readFileSync(e.resolve(o,"src/default/workflow.js.njk"),"utf8"),this.#c).render(t),i=this.#s.projectDir,s=e.resolve(i,`src/default/${t.codeKey}.js`);a.writeFileSync(s,n,"utf8");for await(const e of t.childs)await this.createType({node:e})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":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:t}){let o=this.#d[t.type];if(o)return o;const n=this.#s.templateDir;return o=y.compile(a.readFileSync(e.resolve(n,`src/default/blocks/${t.type}.js.njk`),"utf8"),this.#c),this.#d[t.type]=o,o}createStepFile({node:t}){const o=this.#s.projectDir,n=`${t.codeKey}.js`,i=e.resolve(o,`src/default/blocks/${n}`);a.writeFileSync(i,t.context.render,"utf8"),t.context.fileName=n,t.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(g(e)){const t=Object.keys(e);for(let o=0;o<t.length;o++){const n=t[o],i=O({expression:n});if(i)if("e"===i.processor){const t=e[n].replace(/(\r\n|\n|\r)/g,"");e[i.statement]=`$::${t}::`,delete e[n]}else e[n]=await this.transformValue(e[n]);else e[n]=await this.transformValue(e[n])}}else if("string"==typeof e){const t=O({expression:e});if(t){const{processor:o,statement:n}=t;switch(o){case"v":e=`$::v.${n}::`;break;case"e":e=`$::${n}::`;break;case"m":e=`$::c.module['${n}']::`;break;case"fm":e=`$::flow.getModule('${n}')::`;break;case"f":e=`$::c.form.${n}::`;break;case"for":e=`$::caller.for.${n}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const t="fnet.yaml",o=`Creating ${t}`;await this.setProgress({message:o});const{content:n,...i}=this.#a.doc,s={content:c.stringify(i)},r=this.#s.templateDir,p=y.compile(a.readFileSync(e.resolve(r,`${t}.njk`),"utf8"),this.#c).render(s),l=this.#s.projectDir,d=e.resolve(l,`${t}`);a.writeFileSync(d,p,"utf8")}async createProjectMainYaml(){const t="flow.main.yaml",o=`Creating ${t}`;await this.setProgress({message:o});const n={content:c.stringify(this.#r)},i=this.#s.templateDir,s=y.compile(a.readFileSync(e.resolve(i,`${t}.njk`),"utf8"),this.#c).render(n),r=this.#s.projectDir,p=e.resolve(r,`${t}`);a.writeFileSync(p,s,"utf8")}async runPrettifier(){const t=this.#s.projectDir;if(L("bun")){const o=await d("prettier --write .",{cwd:e.resolve(t,"src")});if(0!==o.code)throw new Error(o.stderr)}else{const o=await d("prettier --write .",{cwd:e.resolve(t,"src")});if(0!==o.code)throw new Error(o.stderr)}}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#s.project?.devops){const e=[this.#s.project?.devops];for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&await o.save()}}else if(this.#a.id){const e=await j.list({type:"workflow.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&(o=await j.update(o,{id:o.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:o}=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 n=Object.keys(t.doc||{}),i=o||{};for(let e=0;e<n.length;e++){const o=t.doc[n[e]];o.name=n[e];const s=i.get(n[e]);await U({...this.#j,deploymentProject:t,deploymentProjectTarget:o,yamlTarget:s})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#s.id)return;let n=await j.first({name:t.params.name,parent_id:this.#w.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await j.update(n,{id:n.id})):n=await j.create({parent_id:this.#w.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:o.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(B.blue(t)),await this._cache_set(this.#h,{status:"IN_PROGRESS",message:t})}async build(){if(this.#v&&!this.#b)return await this.createNetwork();try{const t=this.#v?await te({root:this.#m}):void 0;if(this.#b){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#v){let o=this.#s.project?.projectDir||this.#s.projectDir;o=e.resolve(o,"fnet"),a.existsSync(o)&&a.writeFileSync(e.resolve(o,"flow.bpmn"),t.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#m}),await this.createEngine({root:this.#m}),await this.createNodeTree({root:this.#m}),await this.createProjectYaml(),await async function({atom:t,context:o,setProgress:n,Atom:i}){const s="readme.md",r=`Creating ${s}`;if(await n({message:r}),o.project?.readme){const t=o.projectDir,n={content:o.project.readme.doc.content},i=e.resolve(o.project.projectDir,"fnet/how-to.md");if(a.existsSync(i)){const e=a.readFileSync(i,"utf8");n.howto=e}const r=e.resolve(o.project.projectDir,"fnet/input.yaml");if(a.existsSync(r)){const e=await f({file:r,tags:o.tags});n.input=e.content}const c=e.resolve(o.project.projectDir,"fnet/output.yaml");if(a.existsSync(c)){const e=await f({file:c,tags:o.tags});n.output=e.content}const p=o.templateCommonDir,l=y.compile(a.readFileSync(e.resolve(p,`${s}.njk`),"utf8"),y.configure(p)).render(n),d=e.resolve(t,`${s}`);a.writeFileSync(d,l,"utf8")}else if(t.id){const n=await i.first({type:"wiki",parent_id:t.id});if(!n||"markdown"!==n.doc?.["content-type"])return;const{content:r,...c}=n.doc,p={content:r},l=o.templateCommonDir,d=y.compile(a.readFileSync(e.resolve(l,`${s}.njk`),"utf8"),y.configure(l)).render(p),f=o.projectDir,m=e.resolve(f,`${s}`);a.writeFileSync(m,d,"utf8")}}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){await o({message:"Creating tsconfig.json."});const s={atom:t,packageDependencies:i},r=n.templateCommonDir,c=y.compile(a.readFileSync(e.resolve(r,"tsconfig.json.njk"),"utf8"),y.configure(r)).render(s),p=n.projectDir,l=e.resolve(p,"tsconfig.json");a.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){await o({message:"Creating .gitignore"});const s={atom:t,packageDependencies:i},r=n.templateCommonDir,c=y.compile(a.readFileSync(e.resolve(r,".gitignore.njk"),"utf8"),y.configure(r)).render(s),p=n.projectDir,l=e.resolve(p,".gitignore");a.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:t,setProgress:o,context:n,njEnv:i}){if(!0!==t.doc.features.cli.enabled)return;await o({message:"Creating yargs."});let s={};if(s=t.doc.input?t.doc.input:{type:"object",properties:{},required:[]},t.doc.features.cli.fargs&&!1!==t.doc.features.cli.fargs?.enabled){const e=t.doc.features.cli.fargs,o={type:"string",description:"Config name to load args",hidden:!1},n={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(e,"default")&&(o.default=e.default),s.properties&&(s.properties.fargs=o,s.properties.ftag=n)}const r={options:s,imports:[],atom:t},c=n.templateDir,p=y.compile(a.readFileSync(e.resolve(c,"src/default/to.args.js.njk"),"utf8"),i).render(r),l=n.projectDir,d=e.resolve(l,"src/default/to.args.js");a.writeFileSync(d,p,"utf8");const f=new $({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});C(f);const m=f.compile(s),u=T(f,m);a.writeFileSync(e.resolve(l,"src/default/validate_input.js"),u,"utf8")}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){if(!0!==t.doc.features.cli.enabled)return;await o({message:"Creating cli."});const s={atom:t,packageDependencies:i},r=n.templateDir,c=e.resolve(n.projectDir,"src/cli");a.existsSync(c)||a.mkdirSync(c,{recursive:!0}),await h({pattern:["index.js.njk"],dir:e.resolve(r,"src/cli"),outDir:c,context:s})}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){if(!0!==t.doc.features.app.enabled)return;await o({message:"Creating app folder"});const s={atom:t,packageDependencies:i,ts:Date.now()},r=n.templateDir,c=e.resolve(n.projectDir,"src/app");a.existsSync(c)||a.mkdirSync(c,{recursive:!0});let p=["index.js.njk"];!1!==t.doc.features.app.html&&p.push("index.html.njk"),await h({pattern:p,dir:e.resolve(r,"src/app"),outDir:c,context:s})}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){await o({message:"Creating rollup file."});const s={atom:t,packageDependencies:i},r=e.resolve(n.projectDir,"src","default/index.js");if(!a.existsSync(r))throw new Error(`Entry file not found: ${r}`);const c=(await D({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),p=t.doc.features.rollup_output,l=Object.keys(p);for(let e=0;e<l.length;e++){const t=p[l[e]];if(!0===t.browser&&c.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(c.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<c.length;e++){const o=c[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(c)}}const d=n.templateCommonDir;let f=y.compile(a.readFileSync(e.resolve(d,"rollup.config.mjs.njk"),"utf8"),y.configure(d)).render(s);const m=n.projectDir;let u=e.resolve(m,"rollup.config.mjs");a.writeFileSync(u,f,"utf8")}(this.#j),await async function({atom:t,context:o,packageDependencies:n,packageDevDependencies:i,setProgress:s}){await s({message:"Creating package.json."}),n.filter((e=>!0===e.dev)).forEach((e=>{i.find((t=>t.package===e.package))||i.push(e);const t=n.findIndex((t=>t.package===e.package));n.splice(t,1)}));const r=n.find((e=>"react"===e.package)),c=n.find((e=>"react-dom"===e.package));r&&!c?n.push({package:"react-dom",version:r.version}):r&&c&&(c.version=r.version),r&&t.doc.features.react_version>=17&&(n.find((e=>"@emotion/react"===e.package))||n.push({package:"@emotion/react",version:"^11"}),n.find((e=>"@emotion/styled"===e.package))||n.push({package:"@emotion/styled",version:"^11"}));const p=[];!0===t.doc.features.app.enabled&&p.push({file:e.resolve(o.projectDir,"src/app/index.js"),dev:!1!==t.doc.features.app.dev}),!0===t.doc.features.cli.enabled&&p.push({file:e.resolve(o.projectDir,"src/cli/index.js"),dev:!1!==t.doc.features.cli.dev});for await(const e of p){const t=e.file;if(!a.existsSync(t))throw new Error(`App file not found: ${t}`);const r=(await D({file:t,recursive:!0})).all;for await(const t of r){if("npm"!==t.type)continue;if(n.find((e=>e.package===t.package)))continue;if(i.find((e=>e.package===t.package)))continue;const a=await V({name:t.package,projectDir:o.projectDir,setProgress:s});(!0===e.dev?i:n).push({package:t.package,subpath:t.subpath,version:a.minorRange,type:"npm"})}}const l={atom:t,packageDependencies:n,packageDevDependencies:i},d=o.templateCommonDir,f=y.compile(a.readFileSync(e.resolve(d,"package.json.njk"),"utf8"),y.configure(d)).render(l),m=o.projectDir,u=e.resolve(m,"package.json");a.writeFileSync(u,f,"utf8");const h=e.resolve(o.project.projectDir,"fnet");if(a.existsSync(h)){const t=e.resolve(o.projectDir,"fnet");a.existsSync(t)||a.mkdirSync(t);const n=a.readdirSync(h);for(const o of n){const n=e.resolve(h,o);if(!a.lstatSync(n).isFile())continue;const i=e.resolve(t,o);a.copyFileSync(n,i)}}}(this.#j),await async function({setProgress:t,context:o}){const n=o.projectDir;await t({message:"Prettifiying source files."});let i=e.join("src","**","*");if(L("bun")){const e=await d(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n});if(0!==e.code)throw new Error(e.stderr)}else{const e=await d(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n});if(0!==e.code)throw new Error(e.stderr)}}(this.#j),await async function({atom:e,setProgress:t,context:o}){if(!e.doc.features.dts_enabled)return;const n=o.projectDir;if(await t({message:"Creating .d.ts"}),0!==(await d("tsc",{cwd:n})).code)throw new Error("Couldnt create .d.ts files.")}(this.#j),this.#x&&(await async function({setProgress:e,atom:t,context:o}){const n=o.projectDir;if(await e({message:"Installing npm packages."}),L("bun")){if(0!==(await d(`bun install ${t.doc.features.npm_install_flags}`,{cwd:n})).code)throw new Error("Couldnt install npm packages.")}else if(0!==(await d(`npm install ${t.doc.features.npm_install_flags}`,{cwd:n})).code)throw new Error("Couldnt install npm packages.")}(this.#j),await async function({setProgress:e,context:t}){const o=t.projectDir;if(await e({message:"Building main project."}),0!==(await d("npm run build",{cwd:o})).code)throw new Error("Couldnt build project.")}(this.#j),this.#k&&await this.deploy())}await this._cache_set(this.#h,{status:"COMPLETED",data:{network:t}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await te({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}}}const Ae=e.dirname(n(import.meta.url)),Oe=process.cwd();m({name:["redis"],dir:Oe,optional:!0});const Be=function({baseDir:t}){let o=t=t||J;for(;o!==e.parse(o).root;){const t=e.join(o,"node_modules");if(a.existsSync(t))return t;o=e.dirname(o)}return null}({baseDir:Ae}),Ie="win32"===process.platform?";":":";Be&&(process.env.PATH=`${e.join(Be,"/.bin")}${Ie}${process.env.PATH}`);let Ke=p(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 t=>{try{const o=e.resolve(Be,"./@fnet/cli-project-flow/dist/template/project"),n=e.resolve(Oe,t.name);a.existsSync(n)||a.mkdirSync(n),await h({dir:o,outDir:n,context:t,copyUnmatchedAlso:!0,platform:s.platform()});let i=await d("fnet build",{cwd:n});if(0!==i.code)throw new Error("Failed to build project.");if(L("git")&&(i=await d("git init --initial-branch=main",{cwd:n}),0!==i.code))throw new Error("Failed to initialize git.");if(L("code")&&t.vscode&&(i=await d(`cd ${n} && code .`),0!==i.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 t=>{try{const o=e.resolve(Be,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd(),i=await Me(t);if(t.update){if(await h({dir:o,outDir:n,context:{name:i.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0,platform:s.platform()}),0!==(await d("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 Me(e),o=new Fe(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Me({...e,mode:"all"}),o=new Fe(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Me({...e,mode:"file"}),o=new Fe(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function Re(e,{name:t,bin:o,preArgs:n=[]}){return"function"==typeof o&&(o=o()),e.command(`${t||o} [commands..]`,`${o} ${n.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Me(e),{projectDir:s}=t,a=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,r=process.argv.slice(3).map(a);i(o,[...n,...r],{cwd:s,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Me(t){if(t.id){return{id:t.id,buildId:t.buildId,mode:t.mode,protocol:t.protocol||"ac:",projectDir:e.resolve(Oe,`./.output/${t.id}`),templateDir:e.resolve(Be,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:e.resolve(Be,"./@fnet/cli-project-common/dist/template/default"),coreDir:e.resolve(Be,"./@fnet/cli-project-flow/dist/template/core"),tags:t.ftag}}{const o=await async function({tags:t}){const o=e.resolve(Oe,"fnet.yaml");if(!a.existsSync(o))throw new Error("fnet.yaml file not found in current directory.");const{raw:n,parsed:i}=await f({file:o,tags:t}),s=e.dirname(o);let r;if("object"==typeof i.flows)r=i.flows;else{let o="flow.main.yaml";a.existsSync(e.join(s,"fnet","flows.yaml"))&&(o=e.join("fnet","flows.yaml"));const n=i.main||o;let c=e.resolve(s,n);if(a.existsSync(c)){const{parsed:e}=await f({file:c,tags:t});r=e}else r={main:{steps:[]}}}const p={workflowAtom:{doc:{...i,content:r}},projectDir:s,projectFilePath:o,projectFileContent:n,projectFileParsed:i};let l=e.resolve(s,"fnet/targets.yaml");if(!a.existsSync(l)&&(l=e.resolve(s,"flow.devops.yaml"),a.existsSync(l))){const t=e.resolve(s,"fnet");a.existsSync(t)||a.mkdirSync(t),a.copyFileSync(l,e.resolve(s,"fnet/targets.yaml")),a.unlinkSync(l)}if(a.existsSync(l)){const{raw:e,parsed:o}=await f({file:l,tags:t}),n=c.parseDocument(e);p.devops={filePath:l,fileContent:e,yamlDocument:n,doc:{...o},type:"workflow.deploy",save:async()=>{a.writeFileSync(p.devops.filePath,n.toString())}}}const d=e.resolve(s,"readme.md");if(a.existsSync(d)){const e=a.readFileSync(d,"utf8");p.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return p}({tags:t.ftag});return{buildId:t.buildId,mode:t.mode,protocol:t.protocol||"local:",templateDir:e.resolve(Be,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:e.resolve(Be,"./@fnet/cli-project-common/dist/template/default"),coreDir:e.resolve(Be,"./@fnet/cli-project-flow/dist/template/core"),projectDir:e.resolve(o.projectDir,"./.workspace"),projectSrcDir:e.resolve(o.projectDir,"./src"),project:o,tags:t.ftag}}}Ke=Ke.command("input [name]","Create or modify an input config file",(e=>e.positional("name",{type:"string",demandOption:!1}).help(!1).version(!1)),(async t=>{try{const o=await Me(t),{project:n}=o,{projectDir:i,projectFileParsed:s}=n,r=s.input;if(!r)throw new Error("Config schema not found in project file.");if(!Reflect.has(t,"name")){const{inputName:e}=await l({type:"input",name:"inputName",message:"Input name:",initial:"dev"});t.name=e}const c=e.resolve(i,".fnet");a.existsSync(c)||a.mkdirSync(c);const p=e.resolve(c,`${t.name}.fnet`),d=a.existsSync(p),f=(await import("@fnet/object-from-schema")).default,m=await f({schema:r,format:"yaml",ref:d?p:void 0});a.writeFileSync(p,m)}catch(e){console.error(e.message),process.exit(1)}})),Ke=Re(Ke,{bin:"npm"}),Ke=Re(Ke,{bin:"node"}),Ke=Re(Ke,{bin:"bun"}),Ke=Re(Ke,{name:"serve",bin:"bun",preArgs:["run","serve","--"]}),Ke=Re(Ke,{name:"watch",bin:"bun",preArgs:["run","watch","--"]}),Ke=Re(Ke,{name:"app",bin:"bun",preArgs:["run","app","--"]}),Ke=Re(Ke,{name:"cli",bin:"bun",preArgs:["run","cli","--"]}),Ke=Re(Ke,{bin:"npx"}),Ke=Re(Ke,{bin:"cdk"}),Ke=Re(Ke,{bin:"aws"}),Ke=function(e,{name:t,preArgs:o=[]}){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 Me(e),{projectDir:n}=t,s=e.config,r=await m({name:s,dir:n,transferEnv:!1,optional:!0,tags:t.tags}),c=r?.data?.env||void 0,p=e.command,l=process.argv.slice(5);i(p,[...o,...l],{cwd:a.existsSync(n)?n:Oe,stdio:"inherit",shell:!0,env:{...process.env,...c}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(Ke,{name:"with"}),Ke=function(e,{name:t,preArgs:o=[]}){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 Me(e),{project:o}=t,{projectFileParsed:n}=o,i=n.commands;if(!i)throw new Error("Commands not found in project file.");const s=i[e.group];if(!s)throw new Error(`Command group '${e.group}' not found in project file.`);await u({commands:s,context:{args:e,argv:process.argv}})}catch(e){console.error(e.message),process.exit(1)}}))}(Ke,{name:"run"}),Ke.demandCommand(1,"You need at least one command before moving on").help().argv;export{L as w};
|
package/dist/fnode/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import e,{delimiter as t,join as a}from"node:path";import{fileURLToPath as o}from"node:url";import{spawn as i}from"node:child_process";import s from"node:os";import n,{existsSync as r}from"node:fs";import c from"yaml";import p from"yargs";import l from"@fnet/prompt";import d from"@fnet/shelljs";import m from"@fnet/yaml";import u from"@fnet/config";import f from"@fnet/shell-flow";import g from"@flownet/lib-render-templates-dir";import y from"nunjucks";import{randomUUID as h}from"node:crypto";import{Api as w,Atom as b}from"@flownet/lib-atom-api-js";import j from"@flownet/lib-parse-node-url";import v from"@flownet/lib-parse-imports-js";import x from"@fnet/list-files";import k from"chalk";import D from"redis";import _ from"@flownet/lib-is-redis-online";import S from"lodash.merge";import P from"@fnet/npm-list-versions";import C from"@fnet/npm-pick-versions";import $ from"object-hash";import E from"ajv/dist/2020.js";import A from"ajv/dist/standalone/index.js";import F from"ajv-formats";import I from"@fnet/auto-conda-env";const T=e.dirname(o(import.meta.url));var O=e=>{const o=process.env.PATH||"",i="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],s=o.split(t);for(const t of s)for(const o of i){const i=a(t,"win32"===process.platform?e+o:e);if(r(i))return i}return null};class R{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(w.set_api_url(e.data.url),t)return w.set_req_token(t),void a(t);fetch(`${e.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((e=>{w.set_req_token(e.access_token),a(e.access_token)})).catch((e=>{w.set_req_token(),o(e)}))}))}}function L({feature:e,features:t,packageDevDependencies:a}){const{name:o,packages:i,options:s,extraCheck:n,explicit:r}=e,c=`${o}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=s||{};const m=t[o]?.options;m&&(d=S(d,m));const u=!t[o]||!1===t[o]?.enabled;l.forEach((e=>{const a=t.rollup_output[e];if(a){if(Reflect.has(a,o)){if(u||!a[o]||!1===a[o]?.enabled)return void delete a[o];!0===a[o]&&(a[o]={enabled:!0,options:d})}else{if(u||r||!1===t[c])return;a[o]={enabled:!0}}a[o]=a[o]||{},a[o].options={...d,...a[o].options}}}));let f=l.some((e=>!0===t.rollup_output[e][o]?.enabled));n&&(f=n()&&f),t[c]=f,f&&i.forEach((e=>a.push({package:e[0],version:e[1]})))}function N({dir:t,name:a="index"}){let o=e.resolve(t,`./${a}.tsx`);if(n.existsSync(o)||(o=e.resolve(t,`./${a}.ts`)),n.existsSync(o)||(o=e.resolve(t,`./${a}.jsx`)),n.existsSync(o)||(o=e.resolve(t,`./${a}.js`)),!n.existsSync(o))return{};const i=o,s=e.extname(o);return{file:i,ext:s,ts:".ts"===s||".tsx"===s,name:a}}async function M(t){const{atom:a,context:o,setProgress:i}=t;i("Initializing features..."),a.doc.features=a.doc.features||{};const s=a.doc.features;s.project=s.project||{},s.project.format=s.project.format||s.project_format||"esm",s.project_format=s.project.format,s.dts_enabled=!0===s.dts||void 0!==s.dts&&!1!==s.dts;const n=e.resolve(o.project.projectDir),r=N({dir:e.resolve(n,"./app")});if(r.file){i("Parsing app entry imports...");let e=await v({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.app_uses_jsx=t,s.app_has_entry=!0,e=await v({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.app_entry_uses_jsx=t,s.app_entry_is_ts=r.ts,s.app_entry_ext=r.ext}const c=N({dir:e.resolve(n,"./cli")});if(c.file){i("Parsing cli entry imports...");let e=await v({file:c.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.cli_uses_jsx=t,s.cli_has_entry=!0,e=await v({file:c.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.cli_entry_uses_jsx=t,s.cli_entry_is_ts=c.ts,s.cli_entry_ext=c.ext}if("workflow.lib"===a.type){const t=N({dir:e.resolve(n,"./src")});if(t.file){i("Parsing src entry imports...");let e=await v({file:t.file,recursive:!0}),a=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.src_uses_jsx=a,s.src_has_entry=!0,e=await v({file:t.file}),a=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.src_entry_uses_jsx=a,s.src_entry_is_ts=t.ts,s.src_entry_ext=t.ext}}const p=Reflect.has(s,"app_entry_uses_jsx")?!0===s.app_entry_uses_jsx:!0===s.src_entry_uses_jsx,l=Reflect.has(s,"cli_entry_uses_jsx")?!0===s.cli_entry_uses_jsx:!0===s.src_entry_uses_jsx;s.form_enabled=p||l||!0===s.form||!0===s.form?.enabled,s.multiple_enabled=s.multiple_enabled||!0===s.multiple||!0===s.multiple?.enabled,!1===s.app?s.app={enabled:!1}:!0===s.app?s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p}:s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p,...s.app||{}},s.app.enabled=!0===s.app.enabled&&(!0===a.doc.features.form_enabled||!0===s.app.extend||!0===s.app.enabled),s.app.format=s.app.format||"esm",s.app.folder=s.app.folder||s.app.format||"default",!1===s.cli?s.cli={enabled:!1}:!0===s.cli?s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l}:s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l,...s.cli||{}},s.cli.enabled=!0===s.cli.enabled&&(!1===a.doc.features.form_enabled||!0===s.cli.extend||!0===s.cli.enabled),s.cli.format=s.cli.format||"esm",s.cli.folder=s.cli.folder||s.cli.folder||"esm",s.cli.node_options=s.cli.node?.options||s.cli.node_options||"",s.json=s.cli.enabled||s.json;const d={cjs:{format:"cjs",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==s.cjs,copy:!1},esm:{format:"esm",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==s.esm,copy:!0},iife:{format:"iife",context:s.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===s.iife,terser:!0,copy:!1}};!0===s.webos&&(d.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===s.electron&&(d.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===s.nextjs&&(d.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===s.ios&&(d.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===s.macos&&(d.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===s.app.enabled&&(s.app.dir=`./dist/app/${s.app.folder}`,d.app={format:s.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:s.app.dir,terser:!0,output_exports:!1===s.app.export?"none":"auto",browsersync:!0}),!0===s.cli.enabled&&(s.cli.dir=`./dist/cli/${s.cli.folder}`,d.cli={format:s.cli.format,context:"global",babel:!0===s.src_uses_jsx||!0===s.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:s.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===s.cli.export?"none":"auto"});const m={server:".",startPath:`${e.normalize(s.app.dir||".")}`,files:[e.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=S({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=S(m,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=S({},s.replace_options||s.replace?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=S(d,s.rollup_output||s.rollup?.output||{}),s.preact_enabled=!0===s.preact||s.preact&&!1!==s.preact?.enabled;let u=Object.keys(d);for(const e of u){const t=d[e];t&&(!1!==s.rollup[e]?(t.babel_options=t.babel_options||s.babel_options,t.browsersync_options=S(s.browsersync_options,t.browsersync_options),t.replace_options=S(s.replace_options,t.replace_options),s.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),(s.form_enabled||s.babel)&&(t.babel=!0)):delete s.rollup_output[e])}u=Object.keys(s.rollup_output),s.babel_enabled=u.some((e=>!0===s.rollup_output[e].babel)),s.browser_enabled=u.some((e=>!0===s.rollup_output[e].babel)),s.browsersync_enabled=!1!==s.browsersync&&u.some((e=>!0===s.rollup_output[e].browsersync)),s.browsersync_enabled=s.browsersync_enabled&&s.app.enabled,s.dependency_auto_enabled=!1!==s.dependency_auto&&!1!==s.dependency_auto?.enabled,s.npm_install_flags=s.npm_install_flags||"",s.react_version=s.react_version||s.react?.version||18,function(e){const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,i=o.css&&!1!==o.css.enabled;let s=[];i&&(s.push(["rollup-plugin-postcss","^4"]),s.push(["sass","^1.66"]),(o.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"])}})));L({feature:{name:"css",packages:s},features:o,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e,o=t.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)),L({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:o,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({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:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:t.doc.features,packageDevDependencies:a})}(t)}async function z({projectDir:t,name:a,setProgress:o,count:i=1}){let s;const r=$(["npm-pick-versions",a,i]),c=e.join(t,".cache"),p=e.join(c,r+".json");return n.existsSync(p)?(o&&o(`Picking npm version of ${a} from cache ...`),s=JSON.parse(n.readFileSync(p,"utf8"))):(o&&o(`Picking npm version of ${a} ...`),s=await C({name:a,count:i}),n.mkdirSync(c,{recursive:!0}),n.writeFileSync(p,JSON.stringify(s),"utf8")),s}async function B({atom:t,setProgress:a,context:o,packageDependencies:i}){await a({message:"Creating .gitignore"});const s={atom:t,packageDependencies:i},r=o.templateCommonDir,c=y.compile(n.readFileSync(e.resolve(r,".gitignore.njk"),"utf8"),y.configure(r)).render(s),p=o.projectDir,l=e.resolve(p,".gitignore");n.writeFileSync(l,c,"utf8")}async function J({atom:t,context:a,setProgress:o,Atom:i}){const s="readme.md",r=`Creating ${s}`;if(await o({message:r}),a.project?.readme){const t=a.projectDir,o={content:a.project.readme.doc.content},i=e.resolve(a.project.projectDir,"fnet/how-to.md");if(n.existsSync(i)){const e=n.readFileSync(i,"utf8");o.howto=e}const r=e.resolve(a.project.projectDir,"fnet/input.yaml");if(n.existsSync(r)){const e=await m({file:r,tags:a.tags});o.input=e.content}const c=e.resolve(a.project.projectDir,"fnet/output.yaml");if(n.existsSync(c)){const e=await m({file:c,tags:a.tags});o.output=e.content}const p=a.templateCommonDir,l=y.compile(n.readFileSync(e.resolve(p,`${s}.njk`),"utf8"),y.configure(p)).render(o),d=e.resolve(t,`${s}`);n.writeFileSync(d,l,"utf8")}else if(t.id){const o=await i.first({type:"wiki",parent_id:t.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:r,...c}=o.doc,p={content:r},l=a.templateCommonDir,d=y.compile(n.readFileSync(e.resolve(l,`${s}.njk`),"utf8"),y.configure(l)).render(p),m=a.projectDir,u=e.resolve(m,`${s}`);n.writeFileSync(u,d,"utf8")}}var H=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:i,setProgress:s,deploymentProject:n,yamlTarget:r}=e;if(!0!==i.enabled)return;const c=i.type;try{if("lib"===c)await(await import("./index.DG8TqL-1.js")).default({...e});else if("red"===c)await(await import("./index.CmMM-Ek9.js")).default({...e});else if("npm"===c)await(await import("./index.CDt7klJc.js")).default({...e});else if("gcs"===c)await(await import("./index.UOds5XLl.js")).default({...e});else if("gitlab"===c)await(await import("./index.DI3yyTtl.js")).default({...e});else if("fnet-package"===c)await(await import("./index.Bfg4lyu-.js")).default({...e});else if("fnet-form"===c)await(await import("./index.Q-CYRcna.js")).default({...e});else if("fnet-node"===c)await(await import("./index.C2S9JYhS.js")).default({...e});else if("fnet-flow"===c)await(await import("./index.BuYxdKtK.js")).default({...e});else if("nextjs"===c)await(await import("./index.CDct_kkF.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("webos"===c)await(await import("./index.CMC8mlye.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("electron"===c)await(await import("./index.xd8c7XMr.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("docker"===c)await(await import("./index.D2N9YZmA.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("ios"===c)await(await import("./index.B5XE4ChJ.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("macos"===c)await(await import("./index.W6RYgypK.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("rust"===c)await(await import("./index.CzAV0S36.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else{if("pypi"!==c)return void console.warn(`No deployer found for type: ${c}`);await(await import("./index.C7saWH6d.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0}}catch(e){throw console.error(`Error during deployment for type "${c}":`,e),e}};class X{#e;#t;#a;#o;#i;#s;#n;#r;#c;#p;#l;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new R,this.#t=e,this.#s=[],this.#n=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#s,packageDevDependencies:this.#n,setProgress:this.setProgress.bind(this),context:this.#t,Atom:b,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,a){this._redis_client&&await this._redis_client.SETEX(e,a||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async initAuth(){this.#t.id&&(this.#r=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#r)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await b.get({id:e});let t=this.#a.doc.bundleName;t=t||(this.#a.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#a.doc.bundleName=t,this.#a.type=this.#a.type||"workflow.lib",this.#y.atom=this.#a}async initLibraryDir(){this.setProgress({message:"Initializing library directory."});const t=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const a=x({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of a)n.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let o=t;n.existsSync(o)||n.mkdirSync(o,{recursive:!0}),o=e.join(t,"src"),n.existsSync(o)||n.mkdirSync(o,{recursive:!0}),o=e.join(t,"src","default"),n.existsSync()||n.mkdirSync(o,{recursive:!0})}async initLibraryDirPython(){this.setProgress({message:"Initializing library directory."});const t=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const a=x({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of a)n.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let o=t;n.existsSync(o)||n.mkdirSync(o,{recursive:!0}),o=e.join(t,"src"),n.existsSync(o)||n.mkdirSync(o,{recursive:!0}),o=e.join(t,"src","default");const i=this.#t.projectSrcDir;if(!n.existsSync(o))try{"win32"===s.platform()?n.symlinkSync(i,o,"junction"):n.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.#o=y.configure(e,{watch:!1,dev:!0}),this.#y.njEnv=this.#o}async initLibs(){this.setProgress({message:"Initializing external libs."});const e=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id}];this.#i=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#s})}async initLibsPython(){this.setProgress({message:"Initializing external libs."});const e=this.#a;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id,atom:e}];this.#i=t}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],i=await this.findAtomLibrary({url:o.name});o.atom=i;const s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:t}){const a=j({url:t});if(!a)throw new Error(`Invalid package name: ${t}`);if(a.protocol||(a.protocol=this.#l),"ac:"===a.protocol){const e=a.pathname.split("/");if(1===e.length)return await b.first({where:{name:t,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===e.length){const t=await b.first({where:{name:e[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await b.first({where:{name:e[1],parent_id:t.id,type:"workflow.lib"}})}}else if("local:"===a.protocol){const t=this.#a;t.protocol="local:",t.doc.dependencies=t.doc.dependencies||[],t.name=t.doc.name;const a=e.resolve(this.#t.projectSrcDir,"index.js"),o=await v({file:a,recursive:!0}),i=t.doc.dependencies,s=o.all;for await(const e of s){if("npm"!==e.type)continue;if(i.find((t=>t.package===e.package)))continue;const t=await z({name:e.package,projectDir:this.#t.projectDir,setProgress:this.#y.setProgress});i.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return t}}async createAtomLibFiles({libs:t}){await this.setProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const a=t.filter((e=>"atom"===e.type));for(let t=0;t<a.length;t++){const o=a[t].atom,i=this.#t.projectDir;if("local:"===o.protocol){const t=e.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),a=e.relative(e.join(this.#t.projectDir,"src","default"),t);if(!n.existsSync(t)){n.mkdirSync(e.dirname(t),{recursive:!0});let a="export default async (args)=>{\n";a+="}",n.writeFileSync(t,a,"utf8")}o.relativePath=a.split(e.sep).join("/"),this.#a.typesDir=`./types/${e.basename(i)}/src`}else{const t=e.join(i,"src","libs",`${o.id}.js`),a=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;n.writeFileSync(t,a.content,"utf8")}}}async createAtomLibFilesPython({libs:t}){await this.setProgress({message:"Creating external lib files."});const a=t.filter((e=>"atom"===e.type));for(let t=0;t<a.length;t++){const o=a[t].atom;if("local:"===o.protocol){const t=e.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.py`);if(!n.existsSync(t)){n.mkdirSync(e.dirname(t),{recursive:!0});let a="def default():\n";a+=' print("Hello world!")\n',n.writeFileSync(t,a,"utf8")}}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const t={libs:this.#i.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},a=this.#t.templateDir,o=y.compile(n.readFileSync(e.resolve(a,e.join("src","default","engine.js.njk")),"utf8"),this.#o).render(t),i=this.#t.projectDir,s=e.resolve(i,e.join("src","default","index.js"));n.writeFileSync(s,o,"utf8")}async createProjectYaml(){const t="node.yaml",a=`Creating ${t}`;await this.setProgress({message:a});const{content:o,...i}=this.#a.doc,s={content:c.stringify(i)},r=this.#t.templateDir,p=y.compile(n.readFileSync(e.resolve(r,`${t}.njk`),"utf8"),this.#o).render(s),l=this.#t.projectDir,d=e.resolve(l,`${t}`);n.writeFileSync(d,p,"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 a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&await a.save()}}else if(this.#a.id){const e=await b.list({type:"library.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&(a=await b.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:a}=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=a||{};for(let e=0;e<o.length;e++){const a=t.doc[o[e]];a.name=o[e];const s=i.get(o[e]);await H({...this.#y,deploymentProject:t,deploymentProjectTarget:a,yamlTarget:s})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await b.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await b.update(o,{id:o.id})):o=await b.create({parent_id:this.#d.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:a.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(k.blue(t)),await this._cache_set(this.#p,{status:"IN_PROGRESS",message:t})}async initNode(){await M(this.#y),await async function({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:o}){o("Initializing dependencies");const i=e.doc.dependencies||[];if(i.filter((e=>!e.dev)).forEach((e=>t.push(e))),i.filter((e=>e.dev)).forEach((e=>a.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";o("Fetching React versions"),a=`^${(await P({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),a.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&a.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),a.push({package:"@babel/core",version:"^7"}),a.push({package:"@rollup/plugin-commonjs",version:"^28"}),a.push({package:"@rollup/plugin-node-resolve",version:"^16"}),a.push({package:"@rollup/plugin-replace",version:"^6"}),a.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&a.push({package:"rollup-plugin-dts",version:"^6"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),a.push({package:"@rollup/plugin-alias",version:"^5"}),a.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6"}),a.push({package:"@babel/preset-env",version:"^7"}),a.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":a.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":a.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":a.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":a.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":a.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initPython(){await async function(e){const{atom:t,context:a,setProgress:o}=e;o("Initializing features..."),t.doc.features=t.doc.features||{};const i=t.doc.features;!1===i.cli?i.cli={enabled:!1}:(i.cli,i.cli={enabled:!0}),i.cli.enabled=!0===i.cli.enabled&&(!1===t.doc.features.form_enabled||!0===i.cli.extend||!0===i.cli.enabled)}(this.#y),await async function({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:o}){o("Initializing dependencies")}(this.#y),await this.initLibraryDirPython(),await this.initNunjucks(),await this.initLibsPython()}async nodeBuild(){this.#u&&(await this.createAtomLibFiles({libs:this.#i}),await this.createEngine(),await this.createProjectYaml(),await J(this.#y),await async function({atom:t,setProgress:a,context:o,packageDependencies:i}){await a({message:"Creating tsconfig.json."});const s={atom:t,packageDependencies:i},r=o.templateCommonDir,c=y.compile(n.readFileSync(e.resolve(r,"tsconfig.json.njk"),"utf8"),y.configure(r)).render(s),p=o.projectDir,l=e.resolve(p,"tsconfig.json");n.writeFileSync(l,c,"utf8")}(this.#y),await B(this.#y),await async function({atom:t,setProgress:a,context:o,njEnv:i}){if(!0!==t.doc.features.cli.enabled)return;await a({message:"Creating yargs."});let s={};if(s=t.doc.input?t.doc.input:{type:"object",properties:{},required:[]},t.doc.features.cli.fargs&&!1!==t.doc.features.cli.fargs?.enabled){const e=t.doc.features.cli.fargs,a={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")&&(a.default=e.default),s.properties&&(s.properties.fargs=a,s.properties.ftag=o)}const r={options:s,imports:[],atom:t},c=o.templateDir,p=y.compile(n.readFileSync(e.resolve(c,"src/default/to.args.js.njk"),"utf8"),i).render(r),l=o.projectDir,d=e.resolve(l,"src/default/to.args.js");n.writeFileSync(d,p,"utf8");const m=new E({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});F(m);const u=m.compile(s),f=A(m,u);n.writeFileSync(e.resolve(l,"src/default/validate_input.js"),f,"utf8")}(this.#y),await async function({atom:t,setProgress:a,context:o,packageDependencies:i}){if(!0!==t.doc.features.cli.enabled)return;await a({message:"Creating cli."});const s={atom:t,packageDependencies:i},r=o.templateDir,c=e.resolve(o.projectDir,"src/cli");n.existsSync(c)||n.mkdirSync(c,{recursive:!0}),await g({pattern:["index.js.njk"],dir:e.resolve(r,"src/cli"),outDir:c,context:s})}(this.#y),await async function({atom:t,setProgress:a,context:o,packageDependencies:i}){if(!0!==t.doc.features.app.enabled)return;await a({message:"Creating app folder"});const s={atom:t,packageDependencies:i,ts:Date.now()},r=o.templateDir,c=e.resolve(o.projectDir,"src/app");n.existsSync(c)||n.mkdirSync(c,{recursive:!0});let p=["index.js.njk"];!1!==t.doc.features.app.html&&p.push("index.html.njk"),await g({pattern:p,dir:e.resolve(r,"src/app"),outDir:c,context:s})}(this.#y),await async function({atom:t,setProgress:a,context:o,packageDependencies:i}){await a({message:"Creating rollup file."});const s={atom:t,packageDependencies:i},r=e.resolve(o.projectDir,"src","default/index.js");if(!n.existsSync(r))throw new Error(`Entry file not found: ${r}`);const c=(await v({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),p=t.doc.features.rollup_output,l=Object.keys(p);for(let e=0;e<l.length;e++){const t=p[l[e]];if(!0===t.browser&&c.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(c.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<c.length;e++){const a=c[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(c)}}const d=o.templateCommonDir;let m=y.compile(n.readFileSync(e.resolve(d,"rollup.config.mjs.njk"),"utf8"),y.configure(d)).render(s);const u=o.projectDir;let f=e.resolve(u,"rollup.config.mjs");n.writeFileSync(f,m,"utf8")}(this.#y),await async function({atom:t,context:a,packageDependencies:o,packageDevDependencies:i,setProgress:s}){await s({message:"Creating package.json."}),o.filter((e=>!0===e.dev)).forEach((e=>{i.find((t=>t.package===e.package))||i.push(e);const t=o.findIndex((t=>t.package===e.package));o.splice(t,1)}));const r=o.find((e=>"react"===e.package)),c=o.find((e=>"react-dom"===e.package));r&&!c?o.push({package:"react-dom",version:r.version}):r&&c&&(c.version=r.version),r&&t.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const p=[];!0===t.doc.features.app.enabled&&p.push({file:e.resolve(a.projectDir,"src/app/index.js"),dev:!1!==t.doc.features.app.dev}),!0===t.doc.features.cli.enabled&&p.push({file:e.resolve(a.projectDir,"src/cli/index.js"),dev:!1!==t.doc.features.cli.dev});for await(const e of p){const t=e.file;if(!n.existsSync(t))throw new Error(`App file not found: ${t}`);const r=(await v({file:t,recursive:!0})).all;for await(const t of r){if("npm"!==t.type)continue;if(o.find((e=>e.package===t.package)))continue;if(i.find((e=>e.package===t.package)))continue;const n=await z({name:t.package,projectDir:a.projectDir,setProgress:s});(!0===e.dev?i:o).push({package:t.package,subpath:t.subpath,version:n.minorRange,type:"npm"})}}const l={atom:t,packageDependencies:o,packageDevDependencies:i},d=a.templateCommonDir,m=y.compile(n.readFileSync(e.resolve(d,"package.json.njk"),"utf8"),y.configure(d)).render(l),u=a.projectDir,f=e.resolve(u,"package.json");n.writeFileSync(f,m,"utf8");const g=e.resolve(a.project.projectDir,"fnet");if(n.existsSync(g)){const t=e.resolve(a.projectDir,"fnet");n.existsSync(t)||n.mkdirSync(t);const o=n.readdirSync(g);for(const a of o){const o=e.resolve(g,a);if(!n.lstatSync(o).isFile())continue;const i=e.resolve(t,a);n.copyFileSync(o,i)}}}(this.#y),await async function({setProgress:t,context:a}){const o=a.projectDir;await t({message:"Prettifiying source files."});let i=e.join("src","**","*");if(O("bun")){const e=await d(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o});if(0!==e.code)throw new Error(e.stderr)}else{const e=await d(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o});if(0!==e.code)throw new Error(e.stderr)}}(this.#y),await async function({atom:e,setProgress:t,context:a}){if(!e.doc.features.dts_enabled)return;const o=a.projectDir;if(await t({message:"Creating .d.ts"}),0!==(await d("tsc",{cwd:o})).code)throw new Error("Couldnt create .d.ts files.")}(this.#y),this.#f&&(await async function({setProgress:e,atom:t,context:a}){const o=a.projectDir;if(await e({message:"Installing npm packages."}),O("bun")){if(0!==(await d(`bun install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}else if(0!==(await d(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}(this.#y),await async function({setProgress:e,context:t}){const a=t.projectDir;if(await e({message:"Building main project."}),0!==(await d("npm run build",{cwd:a})).code)throw new Error("Couldnt build project.")}(this.#y),this.#g&&await this.deploy()))}async pythonBuild(){this.#u&&(await this.createAtomLibFilesPython({libs:this.#i}),await this.createProjectYaml(),await J(this.#y),await B(this.#y),await async function({atom:t,setProgress:a,context:o,packageDependencies:i}){if(!0!==t.doc.features.cli.enabled)return;await a({message:"Creating cli."});const s={atom:t,packageDependencies:i},r=o.templateDir,c=e.join(o.projectDir,"src","cli");n.existsSync(c)||n.mkdirSync(c,{recursive:!0}),await g({pattern:["index.py.njk","__init__.py.njk"],dir:e.join(r,"src","cli"),outDir:c,context:s})}(this.#y),this.#f&&(await async function(t){const{setProgress:a,atom:o,context:i}=t;a({message:"Installing Python packages"});const s=i.projectDir,n=await I({pythonVersion:"3.12",packages:[{package:"fnet-import-parser",version:"0.1.9"}]}),{errors:r,result:c}=await n.runBin("fnet_import_parser",["--entry_file",e.join(s,"src","default","index.py")],{captureName:"result"});if(r)throw new Error(r.format());const p=JSON.parse(c.items[0].stdout),l=p.required["third-party"]?.map((e=>({package:e.metadata?.package||e.path,version:e.metadata?.version||void 0,channel:e.metadata?.channel||void 0})))||[],d=o.doc.dependencies||[];for(const e of l)d.some((t=>t.package===e.package))||d.push(e);const m=e.join(s,".conda"),u=await I({envDir:m,pythonVersion:o.doc.features.runtime.version||"3.12",packages:d});i.pythonEnv=u,t.packageDependencies=d;const f=o.doc.features.render?.dirs||[];for(const t of f)t.dir=e.resolve(s,t.dir),t.outDir=e.resolve(s,t.outDir),await g(t);let y={params:{}};y.params.package_name=o.doc.name,y.params.version="0.1.0",y.params.bin_name=o.doc.name,y.params.python_requires=o.doc.features.runtime.version||">=3.12",y.params.dependencies=d,y.params.scripts=JSON.stringify({cli:`PYTHONPATH='${e.join("src")}' '${e.relative(i.projectDir,u.pythonBin)}' '${e.join("src","cli","index.py")}'`}),await g({pattern:["setup.py.njk","package.json.njk","pyproject.toml.njk"],dir:i.templateDir,outDir:i.projectDir,context:y})}(this.#y),this.#g&&await this.deploy()))}async init(){this._redis_client=await async function(){if(!await _({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=D.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}(),this.#c=this.#t.buildId||h(),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#f=["all","deploy","build"].includes(this.#m),this.#g=["all","deploy"].includes(this.#m),this.#l=this.#t.protocol,this.#p="BUILD:"+this.#c,this.#d=(await u({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.#a.doc.features.runtime.type?await this.initNode():"python"===this.#a.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.#a.doc.features.runtime.type?await this.nodeBuild():"python"===this.#a.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}}}const K=e.dirname(o(import.meta.url)),q=process.cwd();u({name:["redis"],dir:q,optional:!0});const U=function({baseDir:t}){let a=t=t||T;for(;a!==e.parse(a).root;){const t=e.join(a,"node_modules");if(n.existsSync(t))return t;a=e.dirname(a)}return null}({baseDir:K}),Y="win32"===process.platform?";":":";U&&(process.env.PATH=`${e.join(U,"/.bin")}${Y}${process.env.PATH}`);let G=p(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 t=>{try{const a=e.resolve(U,"@fnet/cli-project-node/dist/template/project"),o=e.resolve(q,t.name);n.existsSync(o)||n.mkdirSync(o),await g({dir:a,outDir:o,context:{name:t.name,runtime:t.runtime,platform:s.platform()},copyUnmatchedAlso:!0});let i=await d("fnode build",{cwd:o});if(0!==i.code)throw new Error("Failed to build project.");if(O("git")&&(i=await d("git init --initial-branch=main",{cwd:o}),0!==i.code))throw new Error("Failed to initialize git.");if(O("code")&&t.vscode&&(i=await d(`cd ${o} && code .`),0!==i.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 t=>{try{const a=e.resolve(U,"@fnet/cli-project-node/dist/template/project"),o=process.cwd(),i=await Z(t);if(t.update){if(await g({dir:a,outDir:o,context:{name:i.project.projectFileParsed.name,runtime:i.project.runtime.type,platform:s.platform()},copyUnmatchedAlso:!0}),0!==(await d("fnode build",{cwd:o})).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 Z(e),a=new X(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Z({...e,mode:"all"}),a=new X(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Z({...e,mode:"file"}),a=new X(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function V(e,{name:t,bin:a,preArgs:o=[]}){return e.command(`${t||a} [commands..]`,`${a} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Z(e),{projectDir:s}=t,n=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,r=process.argv.slice(3).map(n);i(a,[...o,...r],{cwd:s,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}function W(t,{name:a,bin:o,preArgs:s=[]}){return t.command(`${a||o} [commands..]`,`${o} ${s.join(" ")}`,(e=>e.help(!1).version(!1)),(async t=>{try{const n=await Z(t),{projectDir:r}=n,c=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,p=process.argv.slice(3).map(c);o=e.join(r,".conda","bin",o||a);i(o,[...s,...p],{cwd:r,stdio:"inherit",shell:!0,env:{PYTHONPATH:r}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Z(t){if(t.id)return{id:t.id,buildId:t.buildId,mode:t.mode,protocol:t.protocol||"ac:",templateDir:e.resolve(U,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:e.resolve(U,"./@fnet/cli-project-common/dist/template/default"),projectDir:e.resolve(q,`./.output/${t.id}`),tags:t.ftag};{const a=await async function({tags:t}){const a=e.resolve(q,"node.yaml");if(!n.existsSync(a))throw new Error("node.yaml file not found in current directory.");const{raw:o,parsed:i}=await m({file:a,tags:t}),s=e.dirname(a);i.features=i.features||{};const r=i.features;r.runtime=r.runtime||{},r.runtime.type=r.runtime.type||"node","python"===r.runtime.type?r.runtime.template=r.runtime.template||"python":r.runtime.template=r.runtime.template||"default";const p={libraryAtom:{doc:{...i},fileName:"index"},projectDir:s,projectFilePath:a,projectFileContent:o,projectFileParsed:i,runtime:r.runtime};let l=e.resolve(s,"fnet/targets.yaml");if(!n.existsSync(l)&&(l=e.resolve(s,"node.devops.yaml"),n.existsSync(l))){const t=e.resolve(s,"fnet");n.existsSync(t)||n.mkdirSync(t),n.copyFileSync(l,e.resolve(s,"fnet/targets.yaml")),n.unlinkSync(l)}if(n.existsSync(l)){const{raw:e,parsed:a}=await m({file:l,tags:t}),o=c.parseDocument(e);p.devops={filePath:l,fileContent:e,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{n.writeFileSync(p.devops.filePath,o.toString())}}}const d=e.resolve(s,"readme.md");if(n.existsSync(d)){const e=n.readFileSync(d,"utf8");p.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return p}({tags:t.ftag});return{buildId:t.buildId,mode:t.mode,protocol:t.protocol||"local:",templateDir:e.resolve(U,`./@fnet/cli-project-node/dist/template/${a.runtime.template}`),templateCommonDir:e.resolve(U,`./@fnet/cli-project-common/dist/template/${a.runtime.template}`),projectDir:e.resolve(a.projectDir,"./.workspace"),projectSrcDir:e.resolve(a.projectDir,"./src"),project:a,tags:t.ftag}}}G=G.command("input [name]","Create or modify an input config file",(e=>e.positional("name",{type:"string",demandOption:!1}).help(!1).version(!1)),(async t=>{try{const a=await Z(t),{project:o}=a,{projectDir:i,projectFileParsed:s}=o,r=s.input;if(!r)throw new Error("Config schema not found in project file.");if(!Reflect.has(t,"name")){const{inputName:e}=await l({type:"input",name:"inputName",message:"Input name:",initial:"dev"});t.name=e}const c=e.resolve(i,".fnet");n.existsSync(c)||n.mkdirSync(c);const p=e.resolve(c,`${t.name}.fnet`),d=n.existsSync(p),m=(await import("@fnet/object-from-schema")).default,u=await m({schema:r,format:"yaml",ref:d?p:void 0});n.writeFileSync(p,u)}catch(e){console.error(e.message),process.exit(1)}})),G=V(G,{bin:"npm"}),G=V(G,{bin:"node"}),G=V(G,{bin:"bun"}),G=V(G,{name:"serve",bin:"bun",preArgs:["run","serve","--"]}),G=V(G,{name:"watch",bin:"bun",preArgs:["run","watch","--"]}),G=V(G,{name:"app",bin:"bun",preArgs:["run","app","--"]}),G=V(G,{name:"cli",bin:"bun",preArgs:["run","cli","--"]}),G=V(G,{bin:"npx"}),G=V(G,{bin:"cdk"}),G=V(G,{bin:"aws"}),G=function(e,{name:t,preArgs:a=[]}){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 Z(e),{projectDir:o}=t,s=e.config,r=await u({name:s,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),c=r?.data?.env||void 0,p=e.command,l=process.argv.slice(5);i(p,[...a,...l],{cwd:n.existsSync(o)?o:q,stdio:"inherit",shell:!0,env:{...process.env,...c}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(G,{name:"with"}),G=function(e,{name:t,preArgs:a=[]}){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 Z(e),{project:a}=t,{projectFileParsed:o}=a,i=o.commands;if(!i)throw new Error("Commands not found in project file.");const s=i[e.group];if(!s)throw new Error(`Command group '${e.group}' not found in project file.`);await f({commands:s})}catch(e){console.error(e.message),process.exit(1)}}))}(G,{name:"run"}),G=W(G,{name:"python"}),G=W(G,{name:"python3"}),G=W(G,{name:"pip"}),G=W(G,{name:"pip3"}),G.demandCommand(1,"You need at least one command before moving on").help().argv;export{O as w};
|
|
2
|
+
import e,{delimiter as t,join as a}from"node:path";import{fileURLToPath as o}from"node:url";import{spawn as i}from"node:child_process";import s from"node:os";import n,{existsSync as r}from"node:fs";import c from"yaml";import p from"yargs";import l from"@fnet/prompt";import d from"@fnet/shelljs";import m from"@fnet/yaml";import u from"@fnet/config";import f from"@fnet/shell-flow";import g from"@flownet/lib-render-templates-dir";import y from"nunjucks";import{randomUUID as h}from"node:crypto";import{Api as w,Atom as b}from"@flownet/lib-atom-api-js";import j from"@flownet/lib-parse-node-url";import v from"@flownet/lib-parse-imports-js";import x from"@fnet/list-files";import k from"chalk";import D from"redis";import _ from"@flownet/lib-is-redis-online";import S from"lodash.merge";import P from"@fnet/npm-list-versions";import C from"@fnet/npm-pick-versions";import $ from"object-hash";import E from"ajv/dist/2020.js";import A from"ajv/dist/standalone/index.js";import F from"ajv-formats";import I from"@fnet/auto-conda-env";const T=e.dirname(o(import.meta.url));var O=e=>{const o=process.env.PATH||"",i="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],s=o.split(t);for(const t of s)for(const o of i){const i=a(t,"win32"===process.platform?e+o:e);if(r(i))return i}return null};class R{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(w.set_api_url(e.data.url),t)return w.set_req_token(t),void a(t);fetch(`${e.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((e=>{w.set_req_token(e.access_token),a(e.access_token)})).catch((e=>{w.set_req_token(),o(e)}))}))}}function L({feature:e,features:t,packageDevDependencies:a}){const{name:o,packages:i,options:s,extraCheck:n,explicit:r}=e,c=`${o}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=s||{};const m=t[o]?.options;m&&(d=S(d,m));const u=!t[o]||!1===t[o]?.enabled;l.forEach((e=>{const a=t.rollup_output[e];if(a){if(Reflect.has(a,o)){if(u||!a[o]||!1===a[o]?.enabled)return void delete a[o];!0===a[o]&&(a[o]={enabled:!0,options:d})}else{if(u||r||!1===t[c])return;a[o]={enabled:!0}}a[o]=a[o]||{},a[o].options={...d,...a[o].options}}}));let f=l.some((e=>!0===t.rollup_output[e][o]?.enabled));n&&(f=n()&&f),t[c]=f,f&&i.forEach((e=>a.push({package:e[0],version:e[1]})))}function N({dir:t,name:a="index"}){let o=e.resolve(t,`./${a}.tsx`);if(n.existsSync(o)||(o=e.resolve(t,`./${a}.ts`)),n.existsSync(o)||(o=e.resolve(t,`./${a}.jsx`)),n.existsSync(o)||(o=e.resolve(t,`./${a}.js`)),!n.existsSync(o))return{};const i=o,s=e.extname(o);return{file:i,ext:s,ts:".ts"===s||".tsx"===s,name:a}}async function M(t){const{atom:a,context:o,setProgress:i}=t;i("Initializing features..."),a.doc.features=a.doc.features||{};const s=a.doc.features;s.project=s.project||{},s.project.format=s.project.format||s.project_format||"esm",s.project_format=s.project.format,s.dts_enabled=!0===s.dts||void 0!==s.dts&&!1!==s.dts;const n=e.resolve(o.project.projectDir),r=N({dir:e.resolve(n,"./app")});if(r.file){i("Parsing app entry imports...");let e=await v({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.app_uses_jsx=t,s.app_has_entry=!0,e=await v({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.app_entry_uses_jsx=t,s.app_entry_is_ts=r.ts,s.app_entry_ext=r.ext}const c=N({dir:e.resolve(n,"./cli")});if(c.file){i("Parsing cli entry imports...");let e=await v({file:c.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.cli_uses_jsx=t,s.cli_has_entry=!0,e=await v({file:c.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.cli_entry_uses_jsx=t,s.cli_entry_is_ts=c.ts,s.cli_entry_ext=c.ext}if("workflow.lib"===a.type){const t=N({dir:e.resolve(n,"./src")});if(t.file){i("Parsing src entry imports...");let e=await v({file:t.file,recursive:!0}),a=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.src_uses_jsx=a,s.src_has_entry=!0,e=await v({file:t.file}),a=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.src_entry_uses_jsx=a,s.src_entry_is_ts=t.ts,s.src_entry_ext=t.ext}}const p=Reflect.has(s,"app_entry_uses_jsx")?!0===s.app_entry_uses_jsx:!0===s.src_entry_uses_jsx,l=Reflect.has(s,"cli_entry_uses_jsx")?!0===s.cli_entry_uses_jsx:!0===s.src_entry_uses_jsx;s.form_enabled=p||l||!0===s.form||!0===s.form?.enabled,s.multiple_enabled=s.multiple_enabled||!0===s.multiple||!0===s.multiple?.enabled,!1===s.app?s.app={enabled:!1}:!0===s.app?s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p}:s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p,...s.app||{}},s.app.enabled=!0===s.app.enabled&&(!0===a.doc.features.form_enabled||!0===s.app.extend||!0===s.app.enabled),s.app.format=s.app.format||"esm",s.app.folder=s.app.folder||s.app.format||"default",!1===s.cli?s.cli={enabled:!1}:!0===s.cli?s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l}:s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l,...s.cli||{}},s.cli.enabled=!0===s.cli.enabled&&(!1===a.doc.features.form_enabled||!0===s.cli.extend||!0===s.cli.enabled),s.cli.format=s.cli.format||"esm",s.cli.folder=s.cli.folder||s.cli.folder||"esm",s.cli.node_options=s.cli.node?.options||s.cli.node_options||"",s.json=s.cli.enabled||s.json;const d={cjs:{format:"cjs",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==s.cjs,copy:!1},esm:{format:"esm",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==s.esm,copy:!0},iife:{format:"iife",context:s.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===s.iife,terser:!0,copy:!1}};!0===s.webos&&(d.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===s.electron&&(d.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===s.nextjs&&(d.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===s.ios&&(d.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===s.macos&&(d.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===s.app.enabled&&(s.app.dir=`./dist/app/${s.app.folder}`,d.app={format:s.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:s.app.dir,terser:!0,output_exports:!1===s.app.export?"none":"auto",browsersync:!0}),!0===s.cli.enabled&&(s.cli.dir=`./dist/cli/${s.cli.folder}`,d.cli={format:s.cli.format,context:"global",babel:!0===s.src_uses_jsx||!0===s.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:s.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===s.cli.export?"none":"auto"});const m={server:".",startPath:`${e.normalize(s.app.dir||".")}`,files:[e.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=S({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=S(m,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=S({},s.replace_options||s.replace?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=S(d,s.rollup_output||s.rollup?.output||{}),s.preact_enabled=!0===s.preact||s.preact&&!1!==s.preact?.enabled;let u=Object.keys(d);for(const e of u){const t=d[e];t&&(!1!==s.rollup[e]?(t.babel_options=t.babel_options||s.babel_options,t.browsersync_options=S(s.browsersync_options,t.browsersync_options),t.replace_options=S(s.replace_options,t.replace_options),s.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),(s.form_enabled||s.babel)&&(t.babel=!0)):delete s.rollup_output[e])}u=Object.keys(s.rollup_output),s.babel_enabled=u.some((e=>!0===s.rollup_output[e].babel)),s.browser_enabled=u.some((e=>!0===s.rollup_output[e].babel)),s.browsersync_enabled=!1!==s.browsersync&&u.some((e=>!0===s.rollup_output[e].browsersync)),s.browsersync_enabled=s.browsersync_enabled&&s.app.enabled,s.dependency_auto_enabled=!1!==s.dependency_auto&&!1!==s.dependency_auto?.enabled,s.npm_install_flags=s.npm_install_flags||"",s.react_version=s.react_version||s.react?.version||18,function(e){const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,i=o.css&&!1!==o.css.enabled;let s=[];i&&(s.push(["rollup-plugin-postcss","^4"]),s.push(["sass","^1.66"]),(o.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"])}})));L({feature:{name:"css",packages:s},features:o,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e,o=t.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)),L({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:o,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({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:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:t.doc.features,packageDevDependencies:a})}(t)}async function z({projectDir:t,name:a,setProgress:o,count:i=1}){let s;const r=$(["npm-pick-versions",a,i]),c=e.join(t,".cache"),p=e.join(c,r+".json");return n.existsSync(p)?(o&&o(`Picking npm version of ${a} from cache ...`),s=JSON.parse(n.readFileSync(p,"utf8"))):(o&&o(`Picking npm version of ${a} ...`),s=await C({name:a,count:i}),n.mkdirSync(c,{recursive:!0}),n.writeFileSync(p,JSON.stringify(s),"utf8")),s}async function B({atom:t,setProgress:a,context:o,packageDependencies:i}){await a({message:"Creating .gitignore"});const s={atom:t,packageDependencies:i},r=o.templateCommonDir,c=y.compile(n.readFileSync(e.resolve(r,".gitignore.njk"),"utf8"),y.configure(r)).render(s),p=o.projectDir,l=e.resolve(p,".gitignore");n.writeFileSync(l,c,"utf8")}async function J({atom:t,context:a,setProgress:o,Atom:i}){const s="readme.md",r=`Creating ${s}`;if(await o({message:r}),a.project?.readme){const t=a.projectDir,o={content:a.project.readme.doc.content},i=e.resolve(a.project.projectDir,"fnet/how-to.md");if(n.existsSync(i)){const e=n.readFileSync(i,"utf8");o.howto=e}const r=e.resolve(a.project.projectDir,"fnet/input.yaml");if(n.existsSync(r)){const e=await m({file:r,tags:a.tags});o.input=e.content}const c=e.resolve(a.project.projectDir,"fnet/output.yaml");if(n.existsSync(c)){const e=await m({file:c,tags:a.tags});o.output=e.content}const p=a.templateCommonDir,l=y.compile(n.readFileSync(e.resolve(p,`${s}.njk`),"utf8"),y.configure(p)).render(o),d=e.resolve(t,`${s}`);n.writeFileSync(d,l,"utf8")}else if(t.id){const o=await i.first({type:"wiki",parent_id:t.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:r,...c}=o.doc,p={content:r},l=a.templateCommonDir,d=y.compile(n.readFileSync(e.resolve(l,`${s}.njk`),"utf8"),y.configure(l)).render(p),m=a.projectDir,u=e.resolve(m,`${s}`);n.writeFileSync(u,d,"utf8")}}var H=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:i,setProgress:s,deploymentProject:n,yamlTarget:r}=e;if(!0!==i.enabled)return;const c=i.type;try{if("lib"===c)await(await import("./index.DG8TqL-1.js")).default({...e});else if("red"===c)await(await import("./index.CmMM-Ek9.js")).default({...e});else if("npm"===c)await(await import("./index.CDt7klJc.js")).default({...e});else if("gcs"===c)await(await import("./index.UOds5XLl.js")).default({...e});else if("gitlab"===c)await(await import("./index.DI3yyTtl.js")).default({...e});else if("fnet-package"===c)await(await import("./index.Bfg4lyu-.js")).default({...e});else if("fnet-form"===c)await(await import("./index.Q-CYRcna.js")).default({...e});else if("fnet-node"===c)await(await import("./index.C2S9JYhS.js")).default({...e});else if("fnet-flow"===c)await(await import("./index.BuYxdKtK.js")).default({...e});else if("nextjs"===c)await(await import("./index.CDct_kkF.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("webos"===c)await(await import("./index.CMC8mlye.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("electron"===c)await(await import("./index.xd8c7XMr.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("docker"===c)await(await import("./index.D2N9YZmA.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("ios"===c)await(await import("./index.B5XE4ChJ.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("macos"===c)await(await import("./index.W6RYgypK.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("rust"===c)await(await import("./index.CzAV0S36.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else{if("pypi"!==c)return void console.warn(`No deployer found for type: ${c}`);await(await import("./index.C7saWH6d.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0}}catch(e){throw console.error(`Error during deployment for type "${c}":`,e),e}};class X{#e;#t;#a;#o;#i;#s;#n;#r;#c;#p;#l;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new R,this.#t=e,this.#s=[],this.#n=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#s,packageDevDependencies:this.#n,setProgress:this.setProgress.bind(this),context:this.#t,Atom:b,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,a){this._redis_client&&await this._redis_client.SETEX(e,a||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async initAuth(){this.#t.id&&(this.#r=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#r)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await b.get({id:e});let t=this.#a.doc.bundleName;t=t||(this.#a.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#a.doc.bundleName=t,this.#a.type=this.#a.type||"workflow.lib",this.#y.atom=this.#a}async initLibraryDir(){this.setProgress({message:"Initializing library directory."});const t=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const a=x({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of a)n.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let o=t;n.existsSync(o)||n.mkdirSync(o,{recursive:!0}),o=e.join(t,"src"),n.existsSync(o)||n.mkdirSync(o,{recursive:!0}),o=e.join(t,"src","default"),n.existsSync()||n.mkdirSync(o,{recursive:!0})}async initLibraryDirPython(){this.setProgress({message:"Initializing library directory."});const t=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const a=x({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of a)n.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let o=t;n.existsSync(o)||n.mkdirSync(o,{recursive:!0}),o=e.join(t,"src"),n.existsSync(o)||n.mkdirSync(o,{recursive:!0}),o=e.join(t,"src","default");const i=this.#t.projectSrcDir;if(!n.existsSync(o))try{"win32"===s.platform()?n.symlinkSync(i,o,"junction"):n.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.#o=y.configure(e,{watch:!1,dev:!0}),this.#y.njEnv=this.#o}async initLibs(){this.setProgress({message:"Initializing external libs."});const e=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id}];this.#i=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#s})}async initLibsPython(){this.setProgress({message:"Initializing external libs."});const e=this.#a;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id,atom:e}];this.#i=t}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],i=await this.findAtomLibrary({url:o.name});o.atom=i;const s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:t}){const a=j({url:t});if(!a)throw new Error(`Invalid package name: ${t}`);if(a.protocol||(a.protocol=this.#l),"ac:"===a.protocol){const e=a.pathname.split("/");if(1===e.length)return await b.first({where:{name:t,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===e.length){const t=await b.first({where:{name:e[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await b.first({where:{name:e[1],parent_id:t.id,type:"workflow.lib"}})}}else if("local:"===a.protocol){const t=this.#a;t.protocol="local:",t.doc.dependencies=t.doc.dependencies||[],t.name=t.doc.name;const a=e.resolve(this.#t.projectSrcDir,"index.js"),o=await v({file:a,recursive:!0}),i=t.doc.dependencies,s=o.all;for await(const e of s){if("npm"!==e.type)continue;if(i.find((t=>t.package===e.package)))continue;const t=await z({name:e.package,projectDir:this.#t.projectDir,setProgress:this.#y.setProgress});i.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return t}}async createAtomLibFiles({libs:t}){await this.setProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const a=t.filter((e=>"atom"===e.type));for(let t=0;t<a.length;t++){const o=a[t].atom,i=this.#t.projectDir;if("local:"===o.protocol){const t=e.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),a=e.relative(e.join(this.#t.projectDir,"src","default"),t);if(!n.existsSync(t)){n.mkdirSync(e.dirname(t),{recursive:!0});let a="export default async (args)=>{\n";a+="}",n.writeFileSync(t,a,"utf8")}o.relativePath=a.split(e.sep).join("/"),this.#a.typesDir=`./types/${e.basename(i)}/src`}else{const t=e.join(i,"src","libs",`${o.id}.js`),a=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;n.writeFileSync(t,a.content,"utf8")}}}async createAtomLibFilesPython({libs:t}){await this.setProgress({message:"Creating external lib files."});const a=t.filter((e=>"atom"===e.type));for(let t=0;t<a.length;t++){const o=a[t].atom;if("local:"===o.protocol){const t=e.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.py`);if(!n.existsSync(t)){n.mkdirSync(e.dirname(t),{recursive:!0});let a="def default():\n";a+=' print("Hello world!")\n',n.writeFileSync(t,a,"utf8")}}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const t={libs:this.#i.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},a=this.#t.templateDir,o=y.compile(n.readFileSync(e.resolve(a,e.join("src","default","engine.js.njk")),"utf8"),this.#o).render(t),i=this.#t.projectDir,s=e.resolve(i,e.join("src","default","index.js"));n.writeFileSync(s,o,"utf8")}async createProjectYaml(){const t="node.yaml",a=`Creating ${t}`;await this.setProgress({message:a});const{content:o,...i}=this.#a.doc,s={content:c.stringify(i)},r=this.#t.templateDir,p=y.compile(n.readFileSync(e.resolve(r,`${t}.njk`),"utf8"),this.#o).render(s),l=this.#t.projectDir,d=e.resolve(l,`${t}`);n.writeFileSync(d,p,"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 a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&await a.save()}}else if(this.#a.id){const e=await b.list({type:"library.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&(a=await b.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:a}=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=a||{};for(let e=0;e<o.length;e++){const a=t.doc[o[e]];a.name=o[e];const s=i.get(o[e]);await H({...this.#y,deploymentProject:t,deploymentProjectTarget:a,yamlTarget:s})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await b.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await b.update(o,{id:o.id})):o=await b.create({parent_id:this.#d.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:a.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(k.blue(t)),await this._cache_set(this.#p,{status:"IN_PROGRESS",message:t})}async initNode(){await M(this.#y),await async function({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:o}){o("Initializing dependencies");const i=e.doc.dependencies||[];if(i.filter((e=>!e.dev)).forEach((e=>t.push(e))),i.filter((e=>e.dev)).forEach((e=>a.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";o("Fetching React versions"),a=`^${(await P({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),a.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&a.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),a.push({package:"@babel/core",version:"^7"}),a.push({package:"@rollup/plugin-commonjs",version:"^28"}),a.push({package:"@rollup/plugin-node-resolve",version:"^16"}),a.push({package:"@rollup/plugin-replace",version:"^6"}),a.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&a.push({package:"rollup-plugin-dts",version:"^6"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),a.push({package:"@rollup/plugin-alias",version:"^5"}),a.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6"}),a.push({package:"@babel/preset-env",version:"^7"}),a.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":a.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":a.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":a.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":a.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":a.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initPython(){await async function(e){const{atom:t,context:a,setProgress:o}=e;o("Initializing features..."),t.doc.features=t.doc.features||{};const i=t.doc.features;!1===i.cli?i.cli={enabled:!1}:(i.cli,i.cli={enabled:!0}),i.cli.enabled=!0===i.cli.enabled&&(!1===t.doc.features.form_enabled||!0===i.cli.extend||!0===i.cli.enabled)}(this.#y),await async function({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:o}){o("Initializing dependencies")}(this.#y),await this.initLibraryDirPython(),await this.initNunjucks(),await this.initLibsPython()}async nodeBuild(){this.#u&&(await this.createAtomLibFiles({libs:this.#i}),await this.createEngine(),await this.createProjectYaml(),await J(this.#y),await async function({atom:t,setProgress:a,context:o,packageDependencies:i}){await a({message:"Creating tsconfig.json."});const s={atom:t,packageDependencies:i},r=o.templateCommonDir,c=y.compile(n.readFileSync(e.resolve(r,"tsconfig.json.njk"),"utf8"),y.configure(r)).render(s),p=o.projectDir,l=e.resolve(p,"tsconfig.json");n.writeFileSync(l,c,"utf8")}(this.#y),await B(this.#y),await async function({atom:t,setProgress:a,context:o,njEnv:i}){if(!0!==t.doc.features.cli.enabled)return;await a({message:"Creating yargs."});let s={};if(s=t.doc.input?t.doc.input:{type:"object",properties:{},required:[]},t.doc.features.cli.fargs&&!1!==t.doc.features.cli.fargs?.enabled){const e=t.doc.features.cli.fargs,a={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")&&(a.default=e.default),s.properties&&(s.properties.fargs=a,s.properties.ftag=o)}const r={options:s,imports:[],atom:t},c=o.templateDir,p=y.compile(n.readFileSync(e.resolve(c,"src/default/to.args.js.njk"),"utf8"),i).render(r),l=o.projectDir,d=e.resolve(l,"src/default/to.args.js");n.writeFileSync(d,p,"utf8");const m=new E({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});F(m);const u=m.compile(s),f=A(m,u);n.writeFileSync(e.resolve(l,"src/default/validate_input.js"),f,"utf8")}(this.#y),await async function({atom:t,setProgress:a,context:o,packageDependencies:i}){if(!0!==t.doc.features.cli.enabled)return;await a({message:"Creating cli."});const s={atom:t,packageDependencies:i},r=o.templateDir,c=e.resolve(o.projectDir,"src/cli");n.existsSync(c)||n.mkdirSync(c,{recursive:!0}),await g({pattern:["index.js.njk"],dir:e.resolve(r,"src/cli"),outDir:c,context:s})}(this.#y),await async function({atom:t,setProgress:a,context:o,packageDependencies:i}){if(!0!==t.doc.features.app.enabled)return;await a({message:"Creating app folder"});const s={atom:t,packageDependencies:i,ts:Date.now()},r=o.templateDir,c=e.resolve(o.projectDir,"src/app");n.existsSync(c)||n.mkdirSync(c,{recursive:!0});let p=["index.js.njk"];!1!==t.doc.features.app.html&&p.push("index.html.njk"),await g({pattern:p,dir:e.resolve(r,"src/app"),outDir:c,context:s})}(this.#y),await async function({atom:t,setProgress:a,context:o,packageDependencies:i}){await a({message:"Creating rollup file."});const s={atom:t,packageDependencies:i},r=e.resolve(o.projectDir,"src","default/index.js");if(!n.existsSync(r))throw new Error(`Entry file not found: ${r}`);const c=(await v({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),p=t.doc.features.rollup_output,l=Object.keys(p);for(let e=0;e<l.length;e++){const t=p[l[e]];if(!0===t.browser&&c.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(c.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<c.length;e++){const a=c[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(c)}}const d=o.templateCommonDir;let m=y.compile(n.readFileSync(e.resolve(d,"rollup.config.mjs.njk"),"utf8"),y.configure(d)).render(s);const u=o.projectDir;let f=e.resolve(u,"rollup.config.mjs");n.writeFileSync(f,m,"utf8")}(this.#y),await async function({atom:t,context:a,packageDependencies:o,packageDevDependencies:i,setProgress:s}){await s({message:"Creating package.json."}),o.filter((e=>!0===e.dev)).forEach((e=>{i.find((t=>t.package===e.package))||i.push(e);const t=o.findIndex((t=>t.package===e.package));o.splice(t,1)}));const r=o.find((e=>"react"===e.package)),c=o.find((e=>"react-dom"===e.package));r&&!c?o.push({package:"react-dom",version:r.version}):r&&c&&(c.version=r.version),r&&t.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const p=[];!0===t.doc.features.app.enabled&&p.push({file:e.resolve(a.projectDir,"src/app/index.js"),dev:!1!==t.doc.features.app.dev}),!0===t.doc.features.cli.enabled&&p.push({file:e.resolve(a.projectDir,"src/cli/index.js"),dev:!1!==t.doc.features.cli.dev});for await(const e of p){const t=e.file;if(!n.existsSync(t))throw new Error(`App file not found: ${t}`);const r=(await v({file:t,recursive:!0})).all;for await(const t of r){if("npm"!==t.type)continue;if(o.find((e=>e.package===t.package)))continue;if(i.find((e=>e.package===t.package)))continue;const n=await z({name:t.package,projectDir:a.projectDir,setProgress:s});(!0===e.dev?i:o).push({package:t.package,subpath:t.subpath,version:n.minorRange,type:"npm"})}}const l={atom:t,packageDependencies:o,packageDevDependencies:i},d=a.templateCommonDir,m=y.compile(n.readFileSync(e.resolve(d,"package.json.njk"),"utf8"),y.configure(d)).render(l),u=a.projectDir,f=e.resolve(u,"package.json");n.writeFileSync(f,m,"utf8");const g=e.resolve(a.project.projectDir,"fnet");if(n.existsSync(g)){const t=e.resolve(a.projectDir,"fnet");n.existsSync(t)||n.mkdirSync(t);const o=n.readdirSync(g);for(const a of o){const o=e.resolve(g,a);if(!n.lstatSync(o).isFile())continue;const i=e.resolve(t,a);n.copyFileSync(o,i)}}}(this.#y),await async function({setProgress:t,context:a}){const o=a.projectDir;await t({message:"Prettifiying source files."});let i=e.join("src","**","*");if(O("bun")){const e=await d(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o});if(0!==e.code)throw new Error(e.stderr)}else{const e=await d(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o});if(0!==e.code)throw new Error(e.stderr)}}(this.#y),await async function({atom:e,setProgress:t,context:a}){if(!e.doc.features.dts_enabled)return;const o=a.projectDir;if(await t({message:"Creating .d.ts"}),0!==(await d("tsc",{cwd:o})).code)throw new Error("Couldnt create .d.ts files.")}(this.#y),this.#f&&(await async function({setProgress:e,atom:t,context:a}){const o=a.projectDir;if(await e({message:"Installing npm packages."}),O("bun")){if(0!==(await d(`bun install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}else if(0!==(await d(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}(this.#y),await async function({setProgress:e,context:t}){const a=t.projectDir;if(await e({message:"Building main project."}),0!==(await d("npm run build",{cwd:a})).code)throw new Error("Couldnt build project.")}(this.#y),this.#g&&await this.deploy()))}async pythonBuild(){this.#u&&(await this.createAtomLibFilesPython({libs:this.#i}),await this.createProjectYaml(),await J(this.#y),await B(this.#y),await async function({atom:t,setProgress:a,context:o,packageDependencies:i}){if(!0!==t.doc.features.cli.enabled)return;await a({message:"Creating cli."});const s={atom:t,packageDependencies:i},r=o.templateDir,c=e.join(o.projectDir,"src","cli");n.existsSync(c)||n.mkdirSync(c,{recursive:!0}),await g({pattern:["index.py.njk","__init__.py.njk"],dir:e.join(r,"src","cli"),outDir:c,context:s})}(this.#y),this.#f&&(await async function(t){const{setProgress:a,atom:o,context:i}=t;a({message:"Installing Python packages"});const s=i.projectDir,n=await I({pythonVersion:"3.12",packages:[{package:"fnet-import-parser",version:"0.1.9"}]}),{errors:r,result:c}=await n.runBin("fnet_import_parser",["--entry_file",e.join(s,"src","default","index.py")],{captureName:"result"});if(r)throw new Error(r.format());const p=JSON.parse(c.items[0].stdout),l=p.required["third-party"]?.map((e=>({package:e.metadata?.package||e.path,version:e.metadata?.version||void 0,channel:e.metadata?.channel||void 0})))||[],d=o.doc.dependencies||[];for(const e of l)d.some((t=>t.package===e.package))||d.push(e);const m=e.join(s,".conda"),u=await I({envDir:m,pythonVersion:o.doc.features.runtime.version||"3.12",packages:d});i.pythonEnv=u,t.packageDependencies=d;const f=o.doc.features.render?.dirs||[];for(const t of f)t.dir=e.resolve(s,t.dir),t.outDir=e.resolve(s,t.outDir),await g(t);let y={params:{}};y.params.package_name=o.doc.name,y.params.version="0.1.0",y.params.bin_name=o.doc.name,y.params.python_requires=o.doc.features.runtime.version||">=3.12",y.params.dependencies=d,y.params.scripts=JSON.stringify({cli:`PYTHONPATH='${e.join("src")}' '${e.relative(i.projectDir,u.pythonBin)}' '${e.join("src","cli","index.py")}'`}),await g({pattern:["setup.py.njk","package.json.njk","pyproject.toml.njk"],dir:i.templateDir,outDir:i.projectDir,context:y})}(this.#y),this.#g&&await this.deploy()))}async init(){this._redis_client=await async function(){if(!await _({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=D.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}(),this.#c=this.#t.buildId||h(),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#f=["all","deploy","build"].includes(this.#m),this.#g=["all","deploy"].includes(this.#m),this.#l=this.#t.protocol,this.#p="BUILD:"+this.#c,this.#d=(await u({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.#a.doc.features.runtime.type?await this.initNode():"python"===this.#a.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.#a.doc.features.runtime.type?await this.nodeBuild():"python"===this.#a.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}}}const K=e.dirname(o(import.meta.url)),q=process.cwd();u({name:["redis"],dir:q,optional:!0});const U=function({baseDir:t}){let a=t=t||T;for(;a!==e.parse(a).root;){const t=e.join(a,"node_modules");if(n.existsSync(t))return t;a=e.dirname(a)}return null}({baseDir:K}),Y="win32"===process.platform?";":":";U&&(process.env.PATH=`${e.join(U,"/.bin")}${Y}${process.env.PATH}`);let G=p(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 t=>{try{const a=e.resolve(U,"@fnet/cli-project-node/dist/template/project"),o=e.resolve(q,t.name);n.existsSync(o)||n.mkdirSync(o),await g({dir:a,outDir:o,context:{name:t.name,runtime:t.runtime,platform:s.platform()},copyUnmatchedAlso:!0});let i=await d("fnode build",{cwd:o});if(0!==i.code)throw new Error("Failed to build project.");if(O("git")&&(i=await d("git init --initial-branch=main",{cwd:o}),0!==i.code))throw new Error("Failed to initialize git.");if(O("code")&&t.vscode&&(i=await d(`cd ${o} && code .`),0!==i.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 t=>{try{const a=e.resolve(U,"@fnet/cli-project-node/dist/template/project"),o=process.cwd(),i=await Z(t);if(t.update){if(await g({dir:a,outDir:o,context:{name:i.project.projectFileParsed.name,runtime:i.project.runtime.type,platform:s.platform()},copyUnmatchedAlso:!0}),0!==(await d("fnode build",{cwd:o})).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 Z(e),a=new X(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Z({...e,mode:"all"}),a=new X(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Z({...e,mode:"file"}),a=new X(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function V(e,{name:t,bin:a,preArgs:o=[]}){return e.command(`${t||a} [commands..]`,`${a} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Z(e),{projectDir:s}=t,n=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,r=process.argv.slice(3).map(n);i(a,[...o,...r],{cwd:s,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}function W(t,{name:a,bin:o,preArgs:s=[]}){return t.command(`${a||o} [commands..]`,`${o} ${s.join(" ")}`,(e=>e.help(!1).version(!1)),(async t=>{try{const n=await Z(t),{projectDir:r}=n,c=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,p=process.argv.slice(3).map(c);o=e.join(r,".conda","bin",o||a);i(o,[...s,...p],{cwd:r,stdio:"inherit",shell:!0,env:{PYTHONPATH:r}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Z(t){if(t.id)return{id:t.id,buildId:t.buildId,mode:t.mode,protocol:t.protocol||"ac:",templateDir:e.resolve(U,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:e.resolve(U,"./@fnet/cli-project-common/dist/template/default"),projectDir:e.resolve(q,`./.output/${t.id}`),tags:t.ftag};{const a=await async function({tags:t}){const a=e.resolve(q,"node.yaml");if(!n.existsSync(a))throw new Error("node.yaml file not found in current directory.");const{raw:o,parsed:i}=await m({file:a,tags:t}),s=e.dirname(a);i.features=i.features||{};const r=i.features;r.runtime=r.runtime||{},r.runtime.type=r.runtime.type||"node","python"===r.runtime.type?r.runtime.template=r.runtime.template||"python":r.runtime.template=r.runtime.template||"default";const p={libraryAtom:{doc:{...i},fileName:"index"},projectDir:s,projectFilePath:a,projectFileContent:o,projectFileParsed:i,runtime:r.runtime};let l=e.resolve(s,"fnet/targets.yaml");if(!n.existsSync(l)&&(l=e.resolve(s,"node.devops.yaml"),n.existsSync(l))){const t=e.resolve(s,"fnet");n.existsSync(t)||n.mkdirSync(t),n.copyFileSync(l,e.resolve(s,"fnet/targets.yaml")),n.unlinkSync(l)}if(n.existsSync(l)){const{raw:e,parsed:a}=await m({file:l,tags:t}),o=c.parseDocument(e);p.devops={filePath:l,fileContent:e,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{n.writeFileSync(p.devops.filePath,o.toString())}}}const d=e.resolve(s,"readme.md");if(n.existsSync(d)){const e=n.readFileSync(d,"utf8");p.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return p}({tags:t.ftag});return{buildId:t.buildId,mode:t.mode,protocol:t.protocol||"local:",templateDir:e.resolve(U,`./@fnet/cli-project-node/dist/template/${a.runtime.template}`),templateCommonDir:e.resolve(U,`./@fnet/cli-project-common/dist/template/${a.runtime.template}`),projectDir:e.resolve(a.projectDir,"./.workspace"),projectSrcDir:e.resolve(a.projectDir,"./src"),project:a,tags:t.ftag}}}G=G.command("input [name]","Create or modify an input config file",(e=>e.positional("name",{type:"string",demandOption:!1}).help(!1).version(!1)),(async t=>{try{const a=await Z(t),{project:o}=a,{projectDir:i,projectFileParsed:s}=o,r=s.input;if(!r)throw new Error("Config schema not found in project file.");if(!Reflect.has(t,"name")){const{inputName:e}=await l({type:"input",name:"inputName",message:"Input name:",initial:"dev"});t.name=e}const c=e.resolve(i,".fnet");n.existsSync(c)||n.mkdirSync(c);const p=e.resolve(c,`${t.name}.fnet`),d=n.existsSync(p),m=(await import("@fnet/object-from-schema")).default,u=await m({schema:r,format:"yaml",ref:d?p:void 0});n.writeFileSync(p,u)}catch(e){console.error(e.message),process.exit(1)}})),G=V(G,{bin:"npm"}),G=V(G,{bin:"node"}),G=V(G,{bin:"bun"}),G=V(G,{name:"serve",bin:"bun",preArgs:["run","serve","--"]}),G=V(G,{name:"watch",bin:"bun",preArgs:["run","watch","--"]}),G=V(G,{name:"app",bin:"bun",preArgs:["run","app","--"]}),G=V(G,{name:"cli",bin:"bun",preArgs:["run","cli","--"]}),G=V(G,{bin:"npx"}),G=V(G,{bin:"cdk"}),G=V(G,{bin:"aws"}),G=function(e,{name:t,preArgs:a=[]}){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 Z(e),{projectDir:o}=t,s=e.config,r=await u({name:s,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),c=r?.data?.env||void 0,p=e.command,l=process.argv.slice(5);i(p,[...a,...l],{cwd:n.existsSync(o)?o:q,stdio:"inherit",shell:!0,env:{...process.env,...c}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(G,{name:"with"}),G=function(e,{name:t,preArgs:a=[]}){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 Z(e),{project:a}=t,{projectFileParsed:o}=a,i=o.commands;if(!i)throw new Error("Commands not found in project file.");const s=i[e.group];if(!s)throw new Error(`Command group '${e.group}' not found in project file.`);await f({commands:s,context:{args:e,argv:process.argv}})}catch(e){console.error(e.message),process.exit(1)}}))}(G,{name:"run"}),G=W(G,{name:"python"}),G=W(G,{name:"python3"}),G=W(G,{name:"pip"}),G=W(G,{name:"pip3"}),G.demandCommand(1,"You need at least one command before moving on").help().argv;export{O as w};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fnet/cli",
|
|
3
|
-
"version": "0.107.
|
|
3
|
+
"version": "0.107.1",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist"
|
|
6
6
|
],
|
|
@@ -40,10 +40,10 @@
|
|
|
40
40
|
"@fnet/key-value-transformer": "^0.1.4",
|
|
41
41
|
"@fnet/npm-list-versions": "^0.1.35",
|
|
42
42
|
"@fnet/npm-pick-versions": "^0.1.14",
|
|
43
|
-
"@fnet/object-from-schema": "^0.1.
|
|
44
|
-
"@fnet/prompt": "^0.2.
|
|
43
|
+
"@fnet/object-from-schema": "^0.1.25",
|
|
44
|
+
"@fnet/prompt": "^0.2.16",
|
|
45
45
|
"@fnet/rollup-plugin-delete": "^0.1.10",
|
|
46
|
-
"@fnet/shell-flow": "^0.1.
|
|
46
|
+
"@fnet/shell-flow": "^0.1.27",
|
|
47
47
|
"@fnet/shelljs": "^0.2.4",
|
|
48
48
|
"@fnet/to-pyip": "^0.1.7",
|
|
49
49
|
"@fnet/to-rust": "^0.1.14",
|
|
@@ -82,6 +82,6 @@
|
|
|
82
82
|
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
83
83
|
"@rollup/plugin-replace": "^6.0.2",
|
|
84
84
|
"@rollup/plugin-terser": "^0.4.4",
|
|
85
|
-
"rollup": "^4.
|
|
85
|
+
"rollup": "^4.40.0"
|
|
86
86
|
}
|
|
87
87
|
}
|