@fnet/cli 1.0.11 → 1.0.13
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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./index.r19p3bpa.js";import C from"fs";import H from"path";import K from"@fnet/yaml";import L from"@fnet/shell-flow";async function U({projectType:B,group:A,tags:q,args:x,argv:I}){try{let z=await M(B),{parsed:J}=await K({file:z.path,tags:q}),D=J.commands;if(!D)throw Error(`Commands section not found in ${z.name}`);let E=D[A];if(!E)throw Error(`Command group '${A}' not found in ${z.name}`);await L({commands:E,context:{args:x,argv:I,projectType:z.type}})}catch(z){console.error(`Error: ${z.message}`),process.exit(1)}}async function M(B){let A=process.cwd(),q=H.resolve(A,"fnode.yaml"),x=H.resolve(A,"fnet.yaml");if(B==="fnode"){if(C.existsSync(q))return{path:q,name:"fnode.yaml",type:"fnode"};throw Error("fnode.yaml file not found in current directory")}if(B==="fnet"){if(C.existsSync(x))return{path:x,name:"fnet.yaml",type:"fnet"};throw Error("fnet.yaml file not found in current directory")}if(C.existsSync(q))return{path:q,name:"fnode.yaml",type:"fnode"};if(C.existsSync(x))return{path:x,name:"fnet.yaml",type:"fnet"};throw Error("No project file (fnode.yaml or fnet.yaml) found in current directory")}export{U as runCommandGroup,M as detectProjectFile};
|
package/dist/fnet/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{a as I0,b as M0}from"./index.2084z2ed.js";import{c as h,d as P9,e as g}from"./index.r19p3bpa.js";var v9=P9((yq,D9)=>{D9.exports=b9;function b9(Q,Z,X){if(Q instanceof RegExp)Q=N9(Q,X);if(Z instanceof RegExp)Z=N9(Z,X);var q=k9(Q,Z,X);return q&&{start:q[0],end:q[1],pre:X.slice(0,q[0]),body:X.slice(q[0]+Q.length,q[1]),post:X.slice(q[1]+Z.length)}}function N9(Q,Z){var X=Z.match(Q);return X?X[0]:null}b9.range=k9;function k9(Q,Z,X){var q,Y,J,H,W,V=X.indexOf(Q),K=X.indexOf(Z,V+1),z=V;if(V>=0&&K>0){if(Q===Z)return[V,K];q=[],J=X.length;while(z>=0&&!W){if(z==V)q.push(z),V=X.indexOf(Q,z+1);else if(q.length==1)W=[q.pop(),K];else{if(Y=q.pop(),Y<J)J=Y,H=K;K=X.indexOf(Z,z+1)}z=V<K&&V>=0?V:K}if(q.length)W=[J,H]}return W}});var m9=P9((Eq,g9)=>{var y9=v9();g9.exports=I5;var E9="\x00SLASH"+Math.random()+"\x00",x9="\x00OPEN"+Math.random()+"\x00",p6="\x00CLOSE"+Math.random()+"\x00",u9="\x00COMMA"+Math.random()+"\x00",f9="\x00PERIOD"+Math.random()+"\x00";function i6(Q){return parseInt(Q,10)==Q?parseInt(Q,10):Q.charCodeAt(0)}function B5(Q){return Q.split("\\\\").join(E9).split("\\{").join(x9).split("\\}").join(p6).split("\\,").join(u9).split("\\.").join(f9)}function R5(Q){return Q.split(E9).join("\\").split(x9).join("{").split(p6).join("}").split(u9).join(",").split(f9).join(".")}function h9(Q){if(!Q)return[""];var Z=[],X=y9("{","}",Q);if(!X)return Q.split(",");var{pre:q,body:Y,post:J}=X,H=q.split(",");H[H.length-1]+="{"+Y+"}";var W=h9(J);if(J.length)H[H.length-1]+=W.shift(),H.push.apply(H,W);return Z.push.apply(Z,H),Z}function I5(Q){if(!Q)return[];if(Q.substr(0,2)==="{}")Q="\\{\\}"+Q.substr(2);return o0(B5(Q),!0).map(R5)}function C5(Q){return"{"+Q+"}"}function L5(Q){return/^-?0\d/.test(Q)}function F5(Q,Z){return Q<=Z}function j5(Q,Z){return Q>=Z}function o0(Q,Z){var X=[],q=y9("{","}",Q);if(!q)return[Q];var Y=q.pre,J=q.post.length?o0(q.post,!1):[""];if(/\$$/.test(q.pre))for(var H=0;H<J.length;H++){var W=Y+"{"+q.body+"}"+J[H];X.push(W)}else{var V=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(q.body),K=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(q.body),z=V||K,G=q.body.indexOf(",")>=0;if(!z&&!G){if(q.post.match(/,.*\}/))return Q=q.pre+"{"+q.body+p6+q.post,o0(Q);return[Q]}var _;if(z)_=q.body.split(/\.\./);else if(_=h9(q.body),_.length===1){if(_=o0(_[0],!1).map(C5),_.length===1)return J.map(function(D7){return q.pre+_[0]+D7})}var O;if(z){var $=i6(_[0]),A=i6(_[1]),U=Math.max(_[0].length,_[1].length),B=_.length==3?Math.abs(i6(_[2])):1,M=F5,R=A<$;if(R)B*=-1,M=j5;var F=_.some(L5);O=[];for(var S=$;M(S,A);S+=B){var y;if(K){if(y=String.fromCharCode(S),y==="\\")y=""}else if(y=String(S),F){var v=U-y.length;if(v>0){var J0=Array(v+1).join("0");if(S<0)y="-"+J0+y.slice(1);else y=J0+y}}O.push(y)}}else{O=[];for(var W0=0;W0<_.length;W0++)O.push.apply(O,o0(_[W0],!1))}for(var W0=0;W0<O.length;W0++)for(var H=0;H<J.length;H++){var W=Y+O[W0]+J[H];if(!Z||z||W)X.push(W)}}return X}});import N2 from"yargs";import BZ from"chalk";import{promisify as PZ}from"node:util";import bZ from"tree-kill";var f7=PZ(bZ),v0=!1;async function e8(Q,Z){if(v0)return;if(v0=!0,!Q.killed&&Q.pid)try{if(await f7(Q.pid,"SIGTERM").catch(()=>{}),await new Promise((q)=>setTimeout(q,500)),!Q.killed)await f7(Q.pid,"SIGKILL").catch(()=>{})}catch(q){}await new Promise((q)=>setTimeout(q,100));let X=Z==="SIGINT"?130:Z==="SIGTERM"?143:1;process.exit(X)}function Q6(Q){["SIGINT","SIGTERM","SIGQUIT"].forEach((Z)=>{process.once(Z,async()=>{await e8(Q,Z)})}),process.on("uncaughtException",async(Z)=>{await e8(Q)}),process.on("unhandledRejection",async(Z)=>{await e8(Q)}),Q.on("close",(Z)=>{if(!v0)process.exit(Z)})}function h7(){process.on("uncaughtException",(Q)=>{if(!v0)v0=!0,setTimeout(()=>process.exit(1),500)}),process.on("unhandledRejection",(Q)=>{if(!v0)v0=!0,setTimeout(()=>process.exit(1),500)})}import s0 from"node:path";import{spawn as g7}from"node:child_process";import B8 from"node:fs";import r0 from"chalk";import kZ from"@fnet/config";function o(Q,{name:Z,bin:X,preArgs:q=[],createContext:Y}){if(typeof X==="function")X=X();return Q.command(`${Z||X} [commands..]`,`${X} ${q.join(" ")}`,(J)=>{return J.help(!1).version(!1)},async(J)=>{try{let H=await Y(J),{projectDir:W}=H,V=(O)=>{if(!O.includes(" "))return O;if(process.platform==="win32")return`"${O.replace(/(["^])/g,"^$1")}"`;else return`"${O.replace(/(["\\$`])/g,"\\$1")}"`},K=process.argv.slice(3).map(V),z={...process.env},G=s0.join(W,"node_modules");z.NODE_PATH=G,z.NODE_PRESERVE_SYMLINKS=1;let _=g7(X,[...q,...K],{cwd:W,stdio:"inherit",shell:!0,detached:!0,env:z});Q6(_)}catch(H){console.error(H.message),process.exit(1)}})}function m7(Q,{name:Z,preArgs:X=[],createContext:q}){return Q.command(`${Z} <config> <command> [options..]`,"Run a command with a config context",(Y)=>{return Y.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)},async(Y)=>{try{let J=await q(Y),{projectDir:H}=J,W=Y.config,K=(await kZ({name:W,dir:H,transferEnv:!1,optional:!0,tags:J.tags}))?.data?.env||void 0,z=Y.command,G=process.argv.slice(5),_=g7(z,[...X,...G],{cwd:B8.existsSync(H)?H:process.cwd(),stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...K}});Q6(_)}catch(J){console.error(J.message),process.exit(1)}})}function c7(Q,{name:Z,projectType:X="auto"}){return Q.command(`${Z} group [options..]`,"Run a command group.",(q)=>{return q.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)},async(q)=>{try{let{runCommandGroup:Y}=await import("./index.5azgp6xe.js");await Y({projectType:X,group:q.group,tags:q.ftag,args:q,argv:process.argv})}catch(Y){console.error(Y.message),process.exit(1)}})}function l7(Q,{name:Z,createContext:X}){return Q.command(`${Z} [options]`,"Install the project as a binary",(q)=>{return q.option("name",{alias:"n",describe:"Name to use for the installed binary",type:"string"}).option("force",{alias:"f",describe:"Force overwrite if binary already exists",type:"boolean",default:!1}).option("yes",{alias:"y",describe:"Automatically answer yes to all prompts",type:"boolean",default:!1})},async(q)=>{try{let Y=await X(q),{projectDir:J}=Y;console.log(r0.blue("Compiling project..."));let H=s0.join(J,".bin");if(!B8.existsSync(H))B8.mkdirSync(H,{recursive:!0});let W=s0.basename(s0.dirname(J)),V=Y.project?.projectFileParsed?.features?.cli?.bin,K=q.name||V||W;console.log(r0.blue(`Using binary name: ${K}`));let z=s0.join(H,K),{spawn:G}=await import("child_process"),_=G("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${z}`],{cwd:J,stdio:"inherit",shell:!0});if(await new Promise((A,U)=>{_.on("close",(B)=>{if(B===0)A();else U(Error(`Compilation failed with code ${B}`))}),_.on("error",(B)=>{U(B)})}),process.platform!=="win32")B8.chmodSync(z,493);console.log(r0.green(`Binary compiled successfully: ${z}`)),console.log(r0.blue("Installing binary..."));let O=["install",z];if(q.name)O.push("--name",q.name);if(q.force)O.push("--force");if(q.yes)O.push("--yes");let $=G("fbin",O,{stdio:"inherit",shell:!0});await new Promise((A,U)=>{$.on("close",(B)=>{if(B===0)A();else U(Error(`Installation failed with code ${B}`))}),$.on("error",(B)=>{U(B)})})}catch(Y){console.error(r0.red(`Failed to install binary: ${Y.message}`)),process.exit(1)}})}import Q0 from"node:path";import y0 from"node:fs";import Z6 from"@fnet/yaml";import DZ from"yaml";async function D(Q){if(Q.id)return{id:Q.id,buildId:Q.buildId,mode:Q.mode,protocol:Q.protocol||"ac:",templateDir:I0("./template/fnet/node"),coreDir:I0("./template/fnet/core"),projectDir:Q0.resolve(process.cwd(),`./.output/${Q.id}`),tags:Q.ftag,dev:Q.dev};else try{let Z=await vZ({tags:Q.ftag});return{buildId:Q.buildId,mode:Q.mode,protocol:Q.protocol||"src:",templateDir:I0("./template/fnet/node"),coreDir:I0("./template/fnet/core"),projectDir:Q0.resolve(Z.projectDir,"./.workspace"),projectSrcDir:Q0.resolve(Z.projectDir,"./src"),projectSrcDirSymlink:Q0.resolve(Z.projectDir,"./.workspace/src-core"),projectAppDir:Q0.resolve(Z.projectDir,"./app"),projectAppDirSymlink:Q0.resolve(Z.projectDir,"./.workspace/app"),projectCliDir:Q0.resolve(Z.projectDir,"./cli"),projectCliDirSymlink:Q0.resolve(Z.projectDir,"./.workspace/cli"),project:Z,tags:Q.ftag,dev:Q.dev}}catch(Z){return console.warn(`Warning: Could not load project: ${Z.message}`),{projectDir:process.cwd(),tags:Q.ftag}}}async function vZ({tags:Q}){let Z=yZ(process.cwd());if(!y0.existsSync(Z))throw Error("fnet.yaml file not found in current directory.");let{raw:X,parsed:q}=await Z6({file:Z,tags:Q}),Y=Q0.dirname(Z);q.features=q.features||{};let J=q.features;J.runtime=J.runtime||{},J.runtime.type=J.runtime.type||"node";let H;if(typeof q.flows==="object")H=q.flows;else{let G="flow.main.yaml";if(y0.existsSync(Q0.join(Y,"fnet","flows.yaml")))G=Q0.join("fnet","flows.yaml");let _=q.main||G,O=Q0.resolve(Y,_);if(!y0.existsSync(O))H={main:{steps:[]}};else{let{parsed:$}=await Z6({file:O,tags:Q});H=$}}let V={workflowAtom:{doc:{...q,content:H}},projectDir:Y,projectFilePath:Z,projectFileContent:X,projectFileParsed:q,runtime:J.runtime},K=Q0.resolve(Y,"fnet/targets.yaml");if(y0.existsSync(K)){let{raw:G,parsed:_}=await Z6({file:K,tags:Q}),O=DZ.parseDocument(G);V.devops={filePath:K,fileContent:G,yamlDocument:O,doc:{..._},type:"workflow.deploy",save:async()=>{y0.writeFileSync(V.devops.filePath,O.toString())}}}let z=Q0.resolve(Y,"readme.md");if(y0.existsSync(z)){let G=y0.readFileSync(z,"utf8");V.readme={filePath:z,fileContent:G,doc:{content:G,"content-type":"markdown"},type:"wiki"}}return V}function yZ(Q){return Q0.resolve(Q,"fnet.yaml")}import EZ from"node:path";import d7 from"node:fs";import xZ from"node:os";import uZ from"@flownet/lib-render-templates-dir";import X6 from"@fnet/shelljs";var fZ={command:"create",describe:"Initialize a new fnet project",builder:(Q)=>{return Q.option("name",{type:"string",describe:"Project name"}).option("vscode",{type:"boolean",default:!0,alias:"vs",describe:"Open in VS Code after creation"}).option("runtime",{type:"string",default:"node",choices:["node"],describe:"Runtime environment"})},handler:async(Q)=>{try{let Z=process.cwd(),X=I0("./template/fnet/project"),q=EZ.resolve(Z,Q.name);if(!d7.existsSync(q))d7.mkdirSync(q);await uZ({dir:X,outDir:q,context:Q,copyUnmatchedAlso:!0,platform:xZ.platform()});let Y=await X6("fnet build",{cwd:q});if(Y.code!==0)throw Error("Failed to build project.");if(M0("git")){if(Y=await X6("git init --initial-branch=main",{cwd:q}),Y.code!==0)throw Error("Failed to initialize git.")}if(M0("code")&&Q.vscode){if(Y=await X6(`cd ${q} && code .`),Y.code!==0)throw Error("Failed to open vscode.")}console.log("Creating project succeeded!"),process.exit(0)}catch(Z){console.error("Initialization failed!",Z.message),process.exit(1)}}},i7=fZ;import hZ from"node:os";import gZ from"@flownet/lib-render-templates-dir";import mZ from"@fnet/shelljs";var cZ={command:"project",describe:"Manage fnet project",builder:(Q)=>{return Q.option("update",{type:"boolean",default:!1,alias:"-u",describe:"Update project files"})},handler:async(Q)=>{try{let Z=I0("./template/fnet/project"),X=process.cwd(),q=await D(Q);if(Q.update){if(await gZ({dir:Z,outDir:X,context:{name:q.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0,platform:hZ.platform()}),(await mZ("fnet build",{cwd:X})).code!==0)throw Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(Z){console.error("Project failed.",Z.message),process.exit(1)}}},p7=cZ;import T from"node:fs";import k from"node:path";import QZ from"yaml";import ZZ from"@fnet/shelljs";import O8 from"nunjucks";import XZ from"lodash.clonedeep";import Q2 from"isobject";import{randomUUID as qZ}from"node:crypto";import q6 from"winston";var{combine:a7,timestamp:n7,printf:lZ,colorize:dZ}=q6.format,r7=lZ(({level:Q,message:Z,timestamp:X,category:q,depth:Y,...J})=>{let H=" ".repeat(Y||0),W=q?`[${q}]`:"",V=`${X} ${Q} ${W} ${H}${Z}`;if(Object.keys(J).length>0)V+=`
|
|
2
|
+
import{a as I0,b as M0}from"./index.2084z2ed.js";import{c as h,d as P9,e as g}from"./index.r19p3bpa.js";var v9=P9((yq,D9)=>{D9.exports=b9;function b9(Q,Z,X){if(Q instanceof RegExp)Q=N9(Q,X);if(Z instanceof RegExp)Z=N9(Z,X);var q=k9(Q,Z,X);return q&&{start:q[0],end:q[1],pre:X.slice(0,q[0]),body:X.slice(q[0]+Q.length,q[1]),post:X.slice(q[1]+Z.length)}}function N9(Q,Z){var X=Z.match(Q);return X?X[0]:null}b9.range=k9;function k9(Q,Z,X){var q,Y,J,H,W,V=X.indexOf(Q),K=X.indexOf(Z,V+1),z=V;if(V>=0&&K>0){if(Q===Z)return[V,K];q=[],J=X.length;while(z>=0&&!W){if(z==V)q.push(z),V=X.indexOf(Q,z+1);else if(q.length==1)W=[q.pop(),K];else{if(Y=q.pop(),Y<J)J=Y,H=K;K=X.indexOf(Z,z+1)}z=V<K&&V>=0?V:K}if(q.length)W=[J,H]}return W}});var m9=P9((Eq,g9)=>{var y9=v9();g9.exports=I5;var E9="\x00SLASH"+Math.random()+"\x00",x9="\x00OPEN"+Math.random()+"\x00",p6="\x00CLOSE"+Math.random()+"\x00",u9="\x00COMMA"+Math.random()+"\x00",f9="\x00PERIOD"+Math.random()+"\x00";function i6(Q){return parseInt(Q,10)==Q?parseInt(Q,10):Q.charCodeAt(0)}function B5(Q){return Q.split("\\\\").join(E9).split("\\{").join(x9).split("\\}").join(p6).split("\\,").join(u9).split("\\.").join(f9)}function R5(Q){return Q.split(E9).join("\\").split(x9).join("{").split(p6).join("}").split(u9).join(",").split(f9).join(".")}function h9(Q){if(!Q)return[""];var Z=[],X=y9("{","}",Q);if(!X)return Q.split(",");var{pre:q,body:Y,post:J}=X,H=q.split(",");H[H.length-1]+="{"+Y+"}";var W=h9(J);if(J.length)H[H.length-1]+=W.shift(),H.push.apply(H,W);return Z.push.apply(Z,H),Z}function I5(Q){if(!Q)return[];if(Q.substr(0,2)==="{}")Q="\\{\\}"+Q.substr(2);return o0(B5(Q),!0).map(R5)}function C5(Q){return"{"+Q+"}"}function L5(Q){return/^-?0\d/.test(Q)}function F5(Q,Z){return Q<=Z}function j5(Q,Z){return Q>=Z}function o0(Q,Z){var X=[],q=y9("{","}",Q);if(!q)return[Q];var Y=q.pre,J=q.post.length?o0(q.post,!1):[""];if(/\$$/.test(q.pre))for(var H=0;H<J.length;H++){var W=Y+"{"+q.body+"}"+J[H];X.push(W)}else{var V=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(q.body),K=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(q.body),z=V||K,G=q.body.indexOf(",")>=0;if(!z&&!G){if(q.post.match(/,.*\}/))return Q=q.pre+"{"+q.body+p6+q.post,o0(Q);return[Q]}var _;if(z)_=q.body.split(/\.\./);else if(_=h9(q.body),_.length===1){if(_=o0(_[0],!1).map(C5),_.length===1)return J.map(function(D7){return q.pre+_[0]+D7})}var O;if(z){var $=i6(_[0]),A=i6(_[1]),U=Math.max(_[0].length,_[1].length),B=_.length==3?Math.abs(i6(_[2])):1,M=F5,R=A<$;if(R)B*=-1,M=j5;var F=_.some(L5);O=[];for(var S=$;M(S,A);S+=B){var y;if(K){if(y=String.fromCharCode(S),y==="\\")y=""}else if(y=String(S),F){var v=U-y.length;if(v>0){var J0=Array(v+1).join("0");if(S<0)y="-"+J0+y.slice(1);else y=J0+y}}O.push(y)}}else{O=[];for(var W0=0;W0<_.length;W0++)O.push.apply(O,o0(_[W0],!1))}for(var W0=0;W0<O.length;W0++)for(var H=0;H<J.length;H++){var W=Y+O[W0]+J[H];if(!Z||z||W)X.push(W)}}return X}});import N2 from"yargs";import BZ from"chalk";import{promisify as PZ}from"node:util";import bZ from"tree-kill";var f7=PZ(bZ),v0=!1;async function e8(Q,Z){if(v0)return;if(v0=!0,!Q.killed&&Q.pid)try{if(await f7(Q.pid,"SIGTERM").catch(()=>{}),await new Promise((q)=>setTimeout(q,500)),!Q.killed)await f7(Q.pid,"SIGKILL").catch(()=>{})}catch(q){}await new Promise((q)=>setTimeout(q,100));let X=Z==="SIGINT"?130:Z==="SIGTERM"?143:1;process.exit(X)}function Q6(Q){["SIGINT","SIGTERM","SIGQUIT"].forEach((Z)=>{process.once(Z,async()=>{await e8(Q,Z)})}),process.on("uncaughtException",async(Z)=>{await e8(Q)}),process.on("unhandledRejection",async(Z)=>{await e8(Q)}),Q.on("close",(Z)=>{if(!v0)process.exit(Z)})}function h7(){process.on("uncaughtException",(Q)=>{if(!v0)v0=!0,setTimeout(()=>process.exit(1),500)}),process.on("unhandledRejection",(Q)=>{if(!v0)v0=!0,setTimeout(()=>process.exit(1),500)})}import s0 from"node:path";import{spawn as g7}from"node:child_process";import B8 from"node:fs";import r0 from"chalk";import kZ from"@fnet/config";function o(Q,{name:Z,bin:X,preArgs:q=[],createContext:Y}){if(typeof X==="function")X=X();return Q.command(`${Z||X} [commands..]`,`${X} ${q.join(" ")}`,(J)=>{return J.help(!1).version(!1)},async(J)=>{try{let H=await Y(J),{projectDir:W}=H,V=(O)=>{if(!O.includes(" "))return O;if(process.platform==="win32")return`"${O.replace(/(["^])/g,"^$1")}"`;else return`"${O.replace(/(["\\$`])/g,"\\$1")}"`},K=process.argv.slice(3).map(V),z={...process.env},G=s0.join(W,"node_modules");z.NODE_PATH=G,z.NODE_PRESERVE_SYMLINKS=1;let _=g7(X,[...q,...K],{cwd:W,stdio:"inherit",shell:!0,detached:!0,env:z});Q6(_)}catch(H){console.error(H.message),process.exit(1)}})}function m7(Q,{name:Z,preArgs:X=[],createContext:q}){return Q.command(`${Z} <config> <command> [options..]`,"Run a command with a config context",(Y)=>{return Y.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)},async(Y)=>{try{let J=await q(Y),{projectDir:H}=J,W=Y.config,K=(await kZ({name:W,dir:H,transferEnv:!1,optional:!0,tags:J.tags}))?.data?.env||void 0,z=Y.command,G=process.argv.slice(5),_=g7(z,[...X,...G],{cwd:B8.existsSync(H)?H:process.cwd(),stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...K}});Q6(_)}catch(J){console.error(J.message),process.exit(1)}})}function c7(Q,{name:Z,projectType:X="auto"}){return Q.command(`${Z} group [options..]`,"Run a command group.",(q)=>{return q.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)},async(q)=>{try{let{runCommandGroup:Y}=await import("./index.0jcm9pn5.js");await Y({projectType:X,group:q.group,tags:q.ftag,args:q,argv:process.argv})}catch(Y){console.error(Y.message),process.exit(1)}})}function l7(Q,{name:Z,createContext:X}){return Q.command(`${Z} [options]`,"Install the project as a binary",(q)=>{return q.option("name",{alias:"n",describe:"Name to use for the installed binary",type:"string"}).option("force",{alias:"f",describe:"Force overwrite if binary already exists",type:"boolean",default:!1}).option("yes",{alias:"y",describe:"Automatically answer yes to all prompts",type:"boolean",default:!1})},async(q)=>{try{let Y=await X(q),{projectDir:J}=Y;console.log(r0.blue("Compiling project..."));let H=s0.join(J,".bin");if(!B8.existsSync(H))B8.mkdirSync(H,{recursive:!0});let W=s0.basename(s0.dirname(J)),V=Y.project?.projectFileParsed?.features?.cli?.bin,K=q.name||V||W;console.log(r0.blue(`Using binary name: ${K}`));let z=s0.join(H,K),{spawn:G}=await import("child_process"),_=G("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${z}`],{cwd:J,stdio:"inherit",shell:!0});if(await new Promise((A,U)=>{_.on("close",(B)=>{if(B===0)A();else U(Error(`Compilation failed with code ${B}`))}),_.on("error",(B)=>{U(B)})}),process.platform!=="win32")B8.chmodSync(z,493);console.log(r0.green(`Binary compiled successfully: ${z}`)),console.log(r0.blue("Installing binary..."));let O=["install",z];if(q.name)O.push("--name",q.name);if(q.force)O.push("--force");if(q.yes)O.push("--yes");let $=G("fbin",O,{stdio:"inherit",shell:!0});await new Promise((A,U)=>{$.on("close",(B)=>{if(B===0)A();else U(Error(`Installation failed with code ${B}`))}),$.on("error",(B)=>{U(B)})})}catch(Y){console.error(r0.red(`Failed to install binary: ${Y.message}`)),process.exit(1)}})}import Q0 from"node:path";import y0 from"node:fs";import Z6 from"@fnet/yaml";import DZ from"yaml";async function D(Q){if(Q.id)return{id:Q.id,buildId:Q.buildId,mode:Q.mode,protocol:Q.protocol||"ac:",templateDir:I0("./template/fnet/node"),coreDir:I0("./template/fnet/core"),projectDir:Q0.resolve(process.cwd(),`./.output/${Q.id}`),tags:Q.ftag,dev:Q.dev};else try{let Z=await vZ({tags:Q.ftag});return{buildId:Q.buildId,mode:Q.mode,protocol:Q.protocol||"src:",templateDir:I0("./template/fnet/node"),coreDir:I0("./template/fnet/core"),projectDir:Q0.resolve(Z.projectDir,"./.workspace"),projectSrcDir:Q0.resolve(Z.projectDir,"./src"),projectSrcDirSymlink:Q0.resolve(Z.projectDir,"./.workspace/src-core"),projectAppDir:Q0.resolve(Z.projectDir,"./app"),projectAppDirSymlink:Q0.resolve(Z.projectDir,"./.workspace/app"),projectCliDir:Q0.resolve(Z.projectDir,"./cli"),projectCliDirSymlink:Q0.resolve(Z.projectDir,"./.workspace/cli"),project:Z,tags:Q.ftag,dev:Q.dev}}catch(Z){return console.warn(`Warning: Could not load project: ${Z.message}`),{projectDir:process.cwd(),tags:Q.ftag}}}async function vZ({tags:Q}){let Z=yZ(process.cwd());if(!y0.existsSync(Z))throw Error("fnet.yaml file not found in current directory.");let{raw:X,parsed:q}=await Z6({file:Z,tags:Q}),Y=Q0.dirname(Z);q.features=q.features||{};let J=q.features;J.runtime=J.runtime||{},J.runtime.type=J.runtime.type||"node";let H;if(typeof q.flows==="object")H=q.flows;else{let G="flow.main.yaml";if(y0.existsSync(Q0.join(Y,"fnet","flows.yaml")))G=Q0.join("fnet","flows.yaml");let _=q.main||G,O=Q0.resolve(Y,_);if(!y0.existsSync(O))H={main:{steps:[]}};else{let{parsed:$}=await Z6({file:O,tags:Q});H=$}}let V={workflowAtom:{doc:{...q,content:H}},projectDir:Y,projectFilePath:Z,projectFileContent:X,projectFileParsed:q,runtime:J.runtime},K=Q0.resolve(Y,"fnet/targets.yaml");if(y0.existsSync(K)){let{raw:G,parsed:_}=await Z6({file:K,tags:Q}),O=DZ.parseDocument(G);V.devops={filePath:K,fileContent:G,yamlDocument:O,doc:{..._},type:"workflow.deploy",save:async()=>{y0.writeFileSync(V.devops.filePath,O.toString())}}}let z=Q0.resolve(Y,"readme.md");if(y0.existsSync(z)){let G=y0.readFileSync(z,"utf8");V.readme={filePath:z,fileContent:G,doc:{content:G,"content-type":"markdown"},type:"wiki"}}return V}function yZ(Q){return Q0.resolve(Q,"fnet.yaml")}import EZ from"node:path";import d7 from"node:fs";import xZ from"node:os";import uZ from"@flownet/lib-render-templates-dir";import X6 from"@fnet/shelljs";var fZ={command:"create",describe:"Initialize a new fnet project",builder:(Q)=>{return Q.option("name",{type:"string",describe:"Project name"}).option("vscode",{type:"boolean",default:!0,alias:"vs",describe:"Open in VS Code after creation"}).option("runtime",{type:"string",default:"node",choices:["node"],describe:"Runtime environment"})},handler:async(Q)=>{try{let Z=process.cwd(),X=I0("./template/fnet/project"),q=EZ.resolve(Z,Q.name);if(!d7.existsSync(q))d7.mkdirSync(q);await uZ({dir:X,outDir:q,context:Q,copyUnmatchedAlso:!0,platform:xZ.platform()});let Y=await X6("fnet build",{cwd:q});if(Y.code!==0)throw Error("Failed to build project.");if(M0("git")){if(Y=await X6("git init --initial-branch=main",{cwd:q}),Y.code!==0)throw Error("Failed to initialize git.")}if(M0("code")&&Q.vscode){if(Y=await X6(`cd ${q} && code .`),Y.code!==0)throw Error("Failed to open vscode.")}console.log("Creating project succeeded!"),process.exit(0)}catch(Z){console.error("Initialization failed!",Z.message),process.exit(1)}}},i7=fZ;import hZ from"node:os";import gZ from"@flownet/lib-render-templates-dir";import mZ from"@fnet/shelljs";var cZ={command:"project",describe:"Manage fnet project",builder:(Q)=>{return Q.option("update",{type:"boolean",default:!1,alias:"-u",describe:"Update project files"})},handler:async(Q)=>{try{let Z=I0("./template/fnet/project"),X=process.cwd(),q=await D(Q);if(Q.update){if(await gZ({dir:Z,outDir:X,context:{name:q.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0,platform:hZ.platform()}),(await mZ("fnet build",{cwd:X})).code!==0)throw Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(Z){console.error("Project failed.",Z.message),process.exit(1)}}},p7=cZ;import T from"node:fs";import k from"node:path";import QZ from"yaml";import ZZ from"@fnet/shelljs";import O8 from"nunjucks";import XZ from"lodash.clonedeep";import Q2 from"isobject";import{randomUUID as qZ}from"node:crypto";import q6 from"winston";var{combine:a7,timestamp:n7,printf:lZ,colorize:dZ}=q6.format,r7=lZ(({level:Q,message:Z,timestamp:X,category:q,depth:Y,...J})=>{let H=" ".repeat(Y||0),W=q?`[${q}]`:"",V=`${X} ${Q} ${W} ${H}${Z}`;if(Object.keys(J).length>0)V+=`
|
|
3
3
|
${H} ${JSON.stringify(J,null,2)}`;return V}),R8=q6.createLogger({level:process.env.FNET_LOG_LEVEL||"info",format:a7(n7({format:"HH:mm:ss.SSS"}),r7),transports:[new q6.transports.Console({format:a7(dZ(),n7({format:"HH:mm:ss.SSS"}),r7)})]}),o7=(Q)=>{return{debug:(Z,X={})=>R8.debug(Z,{category:Q,...X}),info:(Z,X={})=>R8.info(Z,{category:Q,...X}),warn:(Z,X={})=>R8.warn(Z,{category:Q,...X}),error:(Z,X={})=>R8.error(Z,{category:Q,...X})}},f=o7("tree"),x=o7("bpmn"),s7=process.env.FNET_LOG_CATEGORIES?.split(",")||[],j=(Q)=>{if(s7.length===0)return!1;return s7.includes(Q)};import{Api as I8}from"@flownet/lib-atom-api-js";class t7{init({config:Q,accessToken:Z}){return new Promise((X,q)=>{if(I8.set_api_url(Q.data.url),Z){I8.set_req_token(Z),X(Z);return}fetch(`${Q.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(Q.data.grant.params)}).then(async(Y)=>{if(!Y.ok)throw Error(await Y.text());return Y.json()}).then((Y)=>{I8.set_req_token(Y.access_token),X(Y.access_token)}).catch((Y)=>{I8.set_req_token(),q(Y)})})}}import h0 from"lodash.merge";import C8 from"node:fs";import z0 from"node:path";import g0 from"@flownet/lib-parse-imports-js";import iZ from"lodash.merge";function E({feature:Q,features:Z,packageDevDependencies:X}){let{name:q,packages:Y,options:J,extraCheck:H,explicit:W}=Q,V=`${q}_enabled`,K=Z.rollup_output||{},z=Object.keys(K),G=J||{},_=Z[q]?.options;if(_)G=iZ(G,_);let O=!Z[q]||Z[q]?.enabled===!1;z.forEach((A)=>{let U=Z.rollup_output[A];if(!U)return;if(Reflect.has(U,q)){if(O||!U[q]||U[q]?.enabled===!1){delete U[q];return}if(U[q]===!0)U[q]={enabled:!0,options:G}}else if(!O&&!W&&Z[V]!==!1)U[q]={enabled:!0};else return;U[q]=U[q]||{},U[q].options={...G,...U[q].options}});let $=z.some((A)=>Z.rollup_output[A][q]?.enabled===!0);if(H)$=H()&&$;if(Z[V]=$,$)Y.forEach((A)=>X.push({package:A[0],version:A[1]}))}function Y6(Q){let{atom:Z,packageDevDependencies:X}=Q,q=Z.doc.features;E({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:q,packageDevDependencies:X})}function J6(Q){let{atom:Z,packageDevDependencies:X}=Q,q=Z.doc.features;E({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:q,packageDevDependencies:X})}function W6(Q){let{atom:Z,packageDevDependencies:X}=Q,q=Z.doc.features;E({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:q,packageDevDependencies:X})}function H6(Q){let{atom:Z,packageDevDependencies:X}=Q,q=Z.doc.features;E({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:q,packageDevDependencies:X})}function V6(Q){let{atom:Z,packageDevDependencies:X}=Q,q=Z.doc.features;E({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:q,packageDevDependencies:X})}function K6(Q){let{atom:Z,packageDevDependencies:X}=Q,q=Z.doc.features;E({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:q,packageDevDependencies:X})}function _6(Q){let{atom:Z,packageDevDependencies:X}=Q,q=Z.doc.features;E({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:q,packageDevDependencies:X})}function z6(Q){let{atom:Z,packageDevDependencies:X}=Q,q=Z.doc.features;E({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:q,packageDevDependencies:X})}function G6(Q){let{atom:Z,packageDevDependencies:X}=Q,q=Z.doc.features;if(q.runtime.type==="bun")return;E({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:q,packageDevDependencies:X})}function U6(Q){let{atom:Z,packageDevDependencies:X}=Q,q=Z.doc.features;E({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:q,packageDevDependencies:X})}function $6(Q){let{atom:Z,packageDevDependencies:X}=Q,q=Z.doc.features;E({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:q,packageDevDependencies:X})}function M6(Q){let{atom:Z,packageDevDependencies:X}=Q,q=Z.doc.features;if(q.runtime.type==="bun")return;let Y={};if(q.app?.enabled===!0){if(Y.targets=Y.targets||[],Y.targets.push({src:"./src/app/index.html",dest:q.app.dir}),!Reflect.has(q.app,"copy")){if(!Reflect.has(q,"copy"))q.copy=!0}}E({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:Y},features:q,packageDevDependencies:X})}function O6(Q){let{atom:Z,packageDevDependencies:X}=Q,q=Z.doc.features,Y=q.css&&q.css.enabled!==!1,J=[];if(Y)J.push(["rollup-plugin-postcss","^4"]),J.push(["sass","^1.66"]),(q.css?.options?.plugins||[]).forEach((W)=>{switch(W.name){case"postcss-import":J.push(["postcss-import","^15"]);break;case"postcss-url":J.push(["postcss-url","^10"]);break;case"postcss-preset-env":J.push(["postcss-preset-env","^9"]);break;case"autoprefixer":J.push(["autoprefixer","^10"]);break;case"cssnano":J.push(["cssnano","^6"]);break}});E({feature:{name:"css",packages:J},features:q,packageDevDependencies:X})}function A6({dir:Q,name:Z="index"}){let X=z0.resolve(Q,`./${Z}.tsx`);if(!C8.existsSync(X))X=z0.resolve(Q,`./${Z}.ts`);if(!C8.existsSync(X))X=z0.resolve(Q,`./${Z}.jsx`);if(!C8.existsSync(X))X=z0.resolve(Q,`./${Z}.js`);if(!C8.existsSync(X))return{};let q=X,Y=z0.extname(X);return{file:q,ext:Y,ts:Y===".ts"||Y===".tsx",name:Z}}async function B6(Q){let{atom:Z,context:X,setProgress:q}=Q;q("Initializing features..."),Z.doc.features=Z.doc.features||{};let Y=Z.doc.features;Y.project=Y.project||{},Y.project.format=Y.project.format||Y.project_format||"esm",Y.project_format=Y.project.format,Y.dts_enabled=Y.dts===!0||typeof Y.dts<"u"&&Y.dts!==!1;let J=z0.resolve(X.project.projectDir),H=A6({dir:z0.resolve(J,"./app")});if(H.file){q("Parsing app entry imports...");let A=await g0({file:H.file,recursive:!0}),U=A.all.some((B)=>B.usesJSX===!0&&B.type==="local");Y.app_uses_jsx=U,Y.app_has_entry=!0,A=await g0({file:H.file}),U=A.all.some((B)=>B.usesJSX===!0&&B.type==="local"),Y.app_entry_uses_jsx=U,Y.app_entry_is_ts=H.ts,Y.app_entry_ext=H.ext}let W=A6({dir:z0.resolve(J,"./cli")});if(W.file){q("Parsing cli entry imports...");let A=await g0({file:W.file,recursive:!0}),U=A.all.some((B)=>B.usesJSX===!0&&B.type==="local");Y.cli_uses_jsx=U,Y.cli_has_entry=!0,A=await g0({file:W.file}),U=A.all.some((B)=>B.usesJSX===!0&&B.type==="local"),Y.cli_entry_uses_jsx=U,Y.cli_entry_is_ts=W.ts,Y.cli_entry_ext=W.ext}if(Z.type==="workflow.lib"){let A=A6({dir:z0.resolve(J,"./src")});if(A.file){q("Parsing src entry imports...");let U=await g0({file:A.file,recursive:!0}),B=U.all.some((M)=>M.usesJSX===!0&&M.type==="local");Y.src_uses_jsx=B,Y.src_has_entry=!0,U=await g0({file:A.file}),B=U.all.some((M)=>M.usesJSX===!0&&M.type==="local"),Y.src_entry_uses_jsx=B,Y.src_entry_is_ts=A.ts,Y.src_entry_ext=A.ext}}let V=Reflect.has(Y,"app_entry_uses_jsx")?Y.app_entry_uses_jsx===!0:Y.src_entry_uses_jsx===!0,K=Reflect.has(Y,"cli_entry_uses_jsx")?Y.cli_entry_uses_jsx===!0:Y.src_entry_uses_jsx===!0;if(Y.form_enabled=V||K||Y.form===!0||Y.form?.enabled===!0,Y.multiple_enabled=Y.multiple_enabled||Y.multiple===!0||Y.multiple?.enabled===!0,Y.app===!1)Y.app={enabled:!1};else if(Y.app===!0)Y.app={enabled:!0,extend:Y.app_has_entry===!0,export:!0,react:V};else Y.app={enabled:!0,extend:Y.app_has_entry===!0,export:!0,react:V,...Y.app||{}};if(Y.app.enabled=Y.app.enabled===!0&&(Z.doc.features.form_enabled===!0||Y.app.extend===!0||Y.app.enabled===!0),Y.app.format=Y.app.format||"esm",Y.app.folder=Y.app.folder||Y.app.format||"default",Y.cli===!1)Y.cli={enabled:!1};else if(Y.cli===!0)Y.cli={enabled:!0,extend:Y.cli_has_entry===!0,export:!0,react:K};else Y.cli={enabled:!0,extend:Y.cli_has_entry===!0,export:!0,react:K,...Y.cli||{}};if(Y.cli.enabled=Y.cli.enabled===!0&&(Z.doc.features.form_enabled===!1||Y.cli.extend===!0||Y.cli.enabled===!0),Y.cli.format=Y.cli.format||"esm",Y.cli.folder=Y.cli.folder||Y.cli.folder||"esm",Y.cli.node_options=Y.cli.node?.options||Y.cli.node_options||"",Y.cli.bin=Y.cli.bin||Z.doc.name,Y.cli.installable=Y.cli.installable===!0,Y.cli.enabled)Z.doc["npm::bin"]=Y.cli.bin;Y.json=Y.cli.enabled||Y.json;let z={cjs:{format:"cjs",context:Y.form_enabled?"window":"global",babel:Y.src_uses_jsx===!0||!1,browser:!1,replace:!0,terser:!0,enabled:Y.cjs!==!1,copy:!1},esm:{format:"esm",context:Y.form_enabled?"window":"global",babel:Y.src_uses_jsx===!0||!1,browser:!1,replace:!0,terser:!1,enabled:Y.esm!==!1,copy:!0},iife:{format:"iife",context:Y.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:Y.iife===!0,terser:!0,copy:!1}},G={targets:{browsers:"last 9 versions, not dead",node:"18"}},_={};if(Y.webos===!0)z.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"}}};if(Y.electron===!0)z.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"};if(Y.nextjs===!0)z.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"};if(Y.ios===!0)z.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"};if(Y.macos===!0)z.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"};if(Y.app.enabled===!0)Y.app.dir=`./dist/app/${Y.app.folder}`,Y.app.output={file:`./dist/app/${Y.app.folder}/index.js`,dir:`./dist/app/${Y.app.folder}/`,...Y.app.output||{}},Y.app.input={file:"./src/app/index.js",dir:"./src/app/",...Y.app.input||{}},z.app={format:Y.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:Y.app.input.file,output_dir:Y.app.dir,terser:!0,output_exports:Y.app.export===!1?"none":"auto",browsersync:!0};if(Y.cli.enabled===!0)Y.cli.dir=`./dist/cli/${Y.cli.folder}`,Y.cli.output={file:`./dist/cli/${Y.cli.folder}/index.js`,dir:`./dist/cli/${Y.cli.folder}/`,...Y.cli.output||{}},Y.cli.input={file:"./src/cli/index.js",dir:"./src/cli/",...Y.cli.input||{}},z.cli={format:Y.cli.format,context:"global",babel:Y.src_uses_jsx===!0||Y.cli_uses_jsx===!0||!1,browser:!1,replace:!0,enabled:!0,input:Y.cli.input.file,output_dir:Y.cli.dir,banner:"#!/usr/bin/env bun",terser:!0,output_exports:Y.cli.export===!1?"none":"auto"};let O={server:".",startPath:`${z0.normalize(Y.app.dir||".")}`,files:[z0.normalize("./dist/**/*")],cors:!0,open:!1};if(Y.babel_options=h0(G,Y.babel_options||Y.babel?.options),Y.browsersync_options=h0(O,Y.browsersync_options||Y.browsersync?.options||{}),Y.replace_options=h0(_,Y.replace_options||Y.replace?.options||{}),Reflect.has(Y.browsersync_options,"proxy"))delete Y.browsersync_options.server;Y.rollup=Y.rollup||{},Y.rollup_output=h0(z,Y.rollup_output||Y.rollup?.output||{}),Y.preact_enabled=Y.preact===!0||Y.preact&&Y.preact?.enabled!==!1;let $=Object.keys(z);for(let A of $){let U=z[A];if(!U)continue;if(Y.rollup[A]===!1){delete Y.rollup_output[A];continue}if(U.babel_options=U.babel_options||Y.babel_options,U.browsersync_options=h0(Y.browsersync_options,U.browsersync_options),U.replace_options=h0(Y.replace_options,U.replace_options),Y.preact_enabled)U.alias_enabled=!0,U.alias=U.alias||{},U.alias.entries=U.alias.entries||{},U.alias.entries.react="preact/compat",U.alias.entries["react-dom"]="preact/compat";if(Y.form_enabled||Y.babel)U.babel=!0}$=Object.keys(Y.rollup_output),Y.babel_enabled=$.some((A)=>Y.rollup_output[A].babel===!0),Y.browser_enabled=$.some((A)=>Y.rollup_output[A].babel===!0),Y.browsersync_enabled=Y.browsersync!==!1&&$.some((A)=>Y.rollup_output[A].browsersync===!0),Y.browsersync_enabled=Y.browsersync_enabled&&Y.app.enabled,Y.dependency_auto_enabled=Y.dependency_auto!==!1&&Y.dependency_auto?.enabled!==!1,Y.npm_install_flags=Y.npm_install_flags||"",Y.react_version=Y.react_version||Y.react?.version||18,Y.bpmn=Y.bpmn||{},Y.bpmn.enabled=Y.bpmn.enabled!==!1,Y.bpmn.per_flow=Y.bpmn.per_flow===!0,O6(Q),M6(Q),$6(Q),U6(Q),G6(Q),_6(Q),z6(Q),K6(Q),V6(Q),H6(Q),W6(Q),Y6(Q),J6(Q)}import pZ from"@fnet/npm-list-versions";async function R6({atom:Q,packageDependencies:Z,packageDevDependencies:X,setProgress:q}){q("Initializing dependencies");let Y=Q.doc.dependencies||[];if(Y.filter((J)=>!J.dev).forEach((J)=>Z.push(J)),Y.filter((J)=>J.dev).forEach((J)=>X.push(J)),Q.type==="workflow")Z.push({package:"dot-prop",version:"^10"});if(Q.doc.features.form_enabled){if(Q.doc.features.dependency_auto_enabled){let J="^18.2";if(q("Fetching React versions"),J=`^${(await pZ({name:"react",groupBy:{major:!0}})).find((V)=>V[0]===Q.doc.features.react_version.toString())[0]}`,Z.push({package:"react",version:J}),Z.push({package:"react-dom",version:J}),Q.type==="workflow")Z.push({package:"@fnet/react-app",version:"^0.1"}),Z.push({package:"@fnet/react-app-state",version:"^0.1"})}}if(Q.doc.features.preact_enabled)Z.push({package:"preact",version:"^10"});if(Q.doc.features.cli.enabled===!0){if(Z.push({package:"@fnet/args",version:"^0.1"}),Q.doc.features.cli.fargs&&Q.doc.features.cli.fargs?.enabled!==!1)Z.push({package:"@fnet/config",version:"0.2.21"});if(Q.doc.features.cli.mcp&&Q.doc.features.cli.mcp.enabled===!0)Z.push({package:"@modelcontextprotocol/sdk",version:"^1.10"}),Z.push({package:"express",version:"^4.18"})}if(Q.doc.features.render&&Q.doc.features.render.enabled!==!1)X.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"});if(X.push({package:"@babel/core",version:"^7"}),X.push({package:"@rollup/plugin-commonjs",version:"^28"}),X.push({package:"@rollup/plugin-node-resolve",version:"^16"}),X.push({package:"@rollup/plugin-replace",version:"^6"}),X.push({package:"rollup",version:"^4"}),Q.doc.features.dts_enabled)X.push({package:"rollup-plugin-dts",version:"^6"});if(X.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),X.push({package:"@rollup/plugin-alias",version:"^5"}),X.push({package:"fs-extra",version:"^11"}),Q.doc.features.babel_enabled)X.push({package:"@rollup/plugin-babel",version:"^6"}),X.push({package:"@babel/preset-env",version:"^7"}),X.push({package:"@babel/preset-react",version:"^7"}),Q.doc.features.babel?.options?.plugins?.forEach((J)=>{switch(J[0]){case"@babel/plugin-proposal-decorators":X.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":X.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":X.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":X.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":X.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"});break}});if(X.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),Q.doc.features.browsersync_enabled)X.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}import aZ from"@fnet/npm-list-versions";async function I6({atom:Q,packageDependencies:Z,packageDevDependencies:X,setProgress:q}){q("Initializing dependencies for Bun");let Y=Q.doc.dependencies||[];if(Y.filter((J)=>!J.dev).forEach((J)=>Z.push(J)),Y.filter((J)=>J.dev).forEach((J)=>X.push(J)),Q.type==="workflow")Z.push({package:"dot-prop",version:"^10"});if(Q.doc.features.form_enabled){if(Q.doc.features.dependency_auto_enabled){let J="^18.2";if(q("Fetching React versions"),J=`^${(await aZ({name:"react",groupBy:{major:!0}})).find((V)=>V[0]===Q.doc.features.react_version.toString())[0]}`,Z.push({package:"react",version:J}),Z.push({package:"react-dom",version:J}),Q.type==="workflow")Z.push({package:"@fnet/react-app",version:"^0.1"}),Z.push({package:"@fnet/react-app-state",version:"^0.1"})}}if(Q.doc.features.preact_enabled)Z.push({package:"preact",version:"^10"});if(Q.doc.features.cli.enabled===!0){if(Z.push({package:"@fnet/args",version:"^0.1"}),Q.doc.features.cli.fargs&&Q.doc.features.cli.fargs?.enabled!==!1)Z.push({package:"@fnet/config",version:"0.2.21"});if(Q.doc.features.cli.mcp&&Q.doc.features.cli.mcp.enabled===!0)Z.push({package:"@modelcontextprotocol/sdk",version:"^1.10"}),Z.push({package:"express",version:"^4.18"})}if(Q.doc.features.render&&Q.doc.features.render.enabled!==!1)X.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"})}import e7 from"node:fs";import Q9 from"node:path";import nZ from"@flownet/lib-render-templates-dir";async function C6({atom:Q,setProgress:Z,context:X,packageDependencies:q}){if(Q.doc.features.app.enabled!==!0)return;await Z({message:"Creating app folder"});let Y={atom:Q,packageDependencies:q,ts:Date.now()},J=X.templateDir,H=Q9.resolve(X.projectDir,"src/app");if(!e7.existsSync(H))e7.mkdirSync(H,{recursive:!0});let W=["index.js.njk"];if(Q.doc.features.app.html!==!1)W.push("index.html.njk");await nZ({pattern:W,dir:Q9.resolve(J,"src/app"),outDir:H,context:Y})}import X9 from"nunjucks";import C0 from"node:fs";import S0 from"node:path";import oZ from"@flownet/lib-parse-imports-js";import rZ from"@fnet/npm-pick-versions";import sZ from"object-hash";import L8 from"node:fs";import Z9 from"node:path";async function w0({projectDir:Q,name:Z,setProgress:X,count:q=1}){let Y,H=sZ(["npm-pick-versions",Z,q]),W=Z9.join(Q,".cache"),V=Z9.join(W,H+".json");if(L8.existsSync(V)){if(X)X(`Picking npm version of ${Z} from cache ...`);Y=JSON.parse(L8.readFileSync(V,"utf8"))}else{if(X)X(`Picking npm version of ${Z} ...`);Y=await rZ({name:Z,count:q}),L8.mkdirSync(W,{recursive:!0}),L8.writeFileSync(V,JSON.stringify(Y),"utf8")}return Y}async function L6({atom:Q,context:Z,packageDependencies:X,packageDevDependencies:q,setProgress:Y}){await Y({message:"Creating package.json."}),X.filter((U)=>U.dev===!0).forEach((U)=>{if(!q.find((M)=>M.package===U.package))q.push(U);let B=X.findIndex((M)=>M.package===U.package);X.splice(B,1)});let H=X.find((U)=>U.package==="react"),W=X.find((U)=>U.package==="react-dom");if(H&&!W)X.push({package:"react-dom",version:H.version});else if(H&&W)W.version=H.version;if(H&&Q.doc.features.react_version>=17){if(!X.find((U)=>U.package==="@emotion/react"))X.push({package:"@emotion/react",version:"^11"});if(!X.find((U)=>U.package==="@emotion/styled"))X.push({package:"@emotion/styled",version:"^11"})}let V=[];if(Q.doc.features.app.enabled===!0)V.push({file:S0.resolve(Z.projectDir,"src/app/index.js"),dev:Q.doc.features.app.dev===!0});if(Q.doc.features.cli.enabled===!0)V.push({file:S0.resolve(Z.projectDir,"src/cli/index.js"),dev:Q.doc.features.cli.dev===!0});for await(let U of V){let B=U.file;if(!C0.existsSync(B))throw Error(`App file not found: ${B}`);let R=(await oZ({file:B,recursive:!0,verbose:!1})).all;for await(let F of R){if(F.type!=="npm")continue;if(X.find((v)=>v.package===F.package))continue;if(q.find((v)=>v.package===F.package))continue;let S=await w0({name:F.package,projectDir:Z.projectDir,setProgress:Y});(U.dev===!0?q:X).push({package:F.package,subpath:F.subpath,version:S.minorRange,type:"npm"})}}for await(let U of X){if(U.version!==void 0)continue;let B=await w0({name:U.package,projectDir:Z.projectDir,setProgress:Y});U.version=B.minorRange}for await(let U of q){if(U.version!==void 0)continue;let B=await w0({name:U.package,projectDir:Z.projectDir,setProgress:Y});U.version=B.minorRange}let K={atom:Q,packageDependencies:X,packageDevDependencies:q},z=Z.templateDir,_=X9.compile(C0.readFileSync(S0.resolve(z,"package.json.njk"),"utf8"),X9.configure(z)).render(K),O=Z.projectDir,$=S0.resolve(O,"package.json");C0.writeFileSync($,_,"utf8");let A=S0.resolve(Z.project.projectDir,"fnet");if(C0.existsSync(A)){let U=S0.resolve(Z.projectDir,"fnet");if(!C0.existsSync(U))C0.mkdirSync(U);let B=C0.readdirSync(A);for(let M of B){let R=S0.resolve(A,M);if(!C0.lstatSync(R).isFile())continue;let F=S0.resolve(U,M);C0.copyFileSync(R,F)}}}import q9 from"node:fs";import Y9 from"node:path";import tZ from"@flownet/lib-render-templates-dir";async function F6({atom:Q,setProgress:Z,context:X,packageDependencies:q}){if(Q.doc.features.cli.enabled!==!0)return;await Z({message:"Creating cli."});let Y={atom:Q,packageDependencies:q},J=X.templateDir,H=Y9.resolve(X.projectDir,"src/cli");if(!q9.existsSync(H))q9.mkdirSync(H,{recursive:!0});await tZ({pattern:["index.js.njk"],dir:Y9.resolve(J,"src/cli"),outDir:H,context:Y})}import j6 from"node:fs";import T6 from"node:path";import J9 from"nunjucks";import eZ from"@flownet/lib-parse-imports-js";async function w6({atom:Q,setProgress:Z,context:X,packageDependencies:q}){await Z({message:"Creating rollup file."});let Y={atom:Q,packageDependencies:q},J=T6.resolve(X.projectDir,"src","default/index.js");if(!j6.existsSync(J))throw Error(`Entry file not found: ${J}`);let W=(await eZ({file:J,recursive:!0})).all.filter((A)=>A.type==="node").map((A)=>A.path),V=Q.doc.features.rollup_output,K=Object.keys(V);for(let A=0;A<K.length;A++){let U=K[A],B=V[U];if(B.browser===!0){if(W.length>0){B.globals_enabled=!0,B.globals=B.globals||[],B.globals=B.globals.concat(W.map((M)=>{return{key:M,value:M}})),B.alias_enabled=!0,B.alias=B.alias||{},B.alias.entries=B.alias.entries||{};for(let M=0;M<W.length;M++){let R=W[M];B.alias.entries[R]=`node:${R}`,B.alias.entries[`node:${R}`]=R}B.external_enabled=!0,B.external=B.external||[],B.external=B.external.concat(W)}}}let z=X.templateDir,_=J9.compile(j6.readFileSync(T6.resolve(z,"rollup.config.mjs.njk"),"utf8"),J9.configure(z)).render(Y),O=X.projectDir,$=T6.resolve(O,"rollup.config.mjs");j6.writeFileSync($,_,"utf8")}import S6 from"node:fs";import W9 from"node:path";import H9 from"nunjucks";async function N6({atom:Q,setProgress:Z,context:X,packageDependencies:q}){await Z({message:"Creating build.js file."});let Y={atom:Q,packageDependencies:q},J=X.templateDir,W=H9.compile(S6.readFileSync(W9.resolve(J,"build.js.njk"),"utf8"),H9.configure(J)).render(Y),V=X.projectDir,K=W9.resolve(V,"build.js");S6.writeFileSync(K,W,"utf8"),S6.chmodSync(K,"755")}import P6 from"node:fs";import b6 from"node:path";import Q5 from"nunjucks";import Z5 from"ajv/dist/2020.js";import X5 from"ajv/dist/standalone/index.js";import q5 from"ajv-formats";async function k6({atom:Q,setProgress:Z,context:X,njEnv:q}){if(Q.doc.features.cli.enabled!==!0)return;await Z({message:"Creating input args."});let Y={},J=[];if(Q.doc.input)Y=Q.doc.input;else Y={type:"object",properties:{},required:[]};if(Q.doc.features.cli.fargs&&Q.doc.features.cli.fargs?.enabled!==!1){let B=Q.doc.features.cli.fargs,M={type:"string",description:"Config name to load args",hidden:!1},R={type:"array",description:"Tags to filter the config",hidden:!1};if(Reflect.has(B,"default"))M.default=B.default}let W={imports:J,atom:Q},V=X.templateDir,z=Q5.compile(P6.readFileSync(b6.resolve(V,"src/default/input.args.js.njk"),"utf8"),q).render(W),G=X.projectDir,_=b6.resolve(G,"src/default/input.args.js");P6.writeFileSync(_,z,"utf8");let O=new Z5({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});q5(O);let $=O.compile(Y),U=X5(O,$)+`
|
|
4
4
|
export { schema31 as schema };`;P6.writeFileSync(b6.resolve(G,"src/default/validate_input.js"),U,"utf8")}import V9 from"node:fs";import K9 from"node:path";import _9 from"nunjucks";async function D6({atom:Q,setProgress:Z,context:X,packageDependencies:q}){await Z({message:"Creating .gitignore"});let Y={atom:Q,packageDependencies:q},J=X.templateDir,W=_9.compile(V9.readFileSync(K9.resolve(J,".gitignore.njk"),"utf8"),_9.configure(J)).render(Y),V=X.projectDir,K=K9.resolve(V,".gitignore");V9.writeFileSync(K,W,"utf8")}import z9 from"node:fs";import G9 from"node:path";import U9 from"nunjucks";async function v6({atom:Q,setProgress:Z,context:X,packageDependencies:q}){await Z({message:"Creating tsconfig.json."});let Y={atom:Q,packageDependencies:q},J=X.templateDir,W=U9.compile(z9.readFileSync(G9.resolve(J,"tsconfig.json.njk"),"utf8"),U9.configure(J)).render(Y),V=X.projectDir,K=G9.resolve(V,"tsconfig.json");z9.writeFileSync(K,W,"utf8")}import F8 from"nunjucks";import N0 from"node:fs";import E0 from"node:path";import $9 from"@fnet/yaml";async function y6({atom:Q,context:Z,setProgress:X,Atom:q}){if(await X({message:"Creating readme.md"}),Z.project?.readme){let H=Z.projectDir,W={content:Z.project.readme.doc.content},V=E0.resolve(Z.project.projectDir,"fnet/how-to.md");if(N0.existsSync(V)){let A=N0.readFileSync(V,"utf8");W.howto=A}let K=E0.resolve(Z.project.projectDir,"fnet/input.yaml");if(N0.existsSync(K)){let A=await $9({file:K,tags:Z.tags});W.input=A.content}let z=E0.resolve(Z.project.projectDir,"fnet/output.yaml");if(N0.existsSync(z)){let A=await $9({file:z,tags:Z.tags});W.output=A.content}let G=Z.templateDir,O=F8.compile(N0.readFileSync(E0.resolve(G,"readme.md.njk"),"utf8"),F8.configure(G)).render(W),$=E0.resolve(H,"readme.md");N0.writeFileSync($,O,"utf8")}else if(Q.id){let H=await q.first({type:"wiki",parent_id:Q.id});if(!H||H.doc?.["content-type"]!=="markdown")return;let{content:W,...V}=H.doc,K={content:W},z=Z.templateDir,_=F8.compile(N0.readFileSync(E0.resolve(z,"readme.md.njk"),"utf8"),F8.configure(z)).render(K),O=Z.projectDir,$=E0.resolve(O,"readme.md");N0.writeFileSync($,_,"utf8")}}import Y5 from"node:path";import M9 from"@fnet/shelljs";async function E6({setProgress:Q,context:Z}){let X=Z.projectDir;await Q({message:"Prettifiying source files."});let q=Y5.join("src","**","*");if(M0("bun")){let Y=await M9(`prettier --write ${q} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:X});if(Y.code!==0)throw Error(Y.stderr)}else{let Y=await M9(`prettier --write ${q} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:X});if(Y.code!==0)throw Error(Y.stderr)}}import J5 from"@fnet/shelljs";async function x6({atom:Q,setProgress:Z,context:X}){if(!Q.doc.features.dts_enabled)return;let q=X.projectDir;if(await Z({message:"Creating .d.ts"}),(await J5("tsc",{cwd:q})).code!==0)throw Error("Couldnt create .d.ts files.")}import O9 from"@fnet/shelljs";async function u6({setProgress:Q,atom:Z,context:X}){let q=X.projectDir;if(await Q({message:"Installing npm packages."}),M0("bun")){if((await O9(`bun install ${Z.doc.features.npm_install_flags}`,{cwd:q})).code!==0)throw Error("Couldnt install npm packages.")}else if((await O9(`npm install ${Z.doc.features.npm_install_flags}`,{cwd:q})).code!==0)throw Error("Couldnt install npm packages.")}import A9 from"node:fs";import W5 from"node:path";import{spawn as H5}from"node:child_process";async function B9(Q){let{projectDir:Z,scriptName:X,args:q=[],env:Y=process.env,shell:J=!0,detached:H=!0,onSpawn:W}=Q;if(!Z||!X)throw Error("projectDir and scriptName are required");let V=W5.resolve(Z,"package.json");if(!A9.existsSync(V))throw Error(`package.json not found at ${V}`);let K=JSON.parse(A9.readFileSync(V,"utf8")),z=K.scripts?.[X];if(!z){let O=Object.keys(K.scripts||{}).join(", ");throw Error(`Script '${X}' not found. Available: ${O}`)}let G=q.length>0?`${z} ${q.join(" ")}`:z,_=H5(G,[],{cwd:Z,stdio:"inherit",shell:J,detached:H,env:{...Y}});if(W)W(_);return new Promise((O,$)=>{_.on("error",(A)=>{$(Error(`Failed to start '${X}': ${A.message}`))}),_.on("close",(A)=>{O({subprocess:_,exitCode:A})})})}import V5 from"node:path";async function f6({setProgress:Q,context:Z}){let X=Z.projectDir;await Q({message:"Building main project."});let q=Z.dev?"build:dev":"build",Y={...process.env},J=V5.join(X,"node_modules");Y.NODE_PATH=J,Y.NODE_PRESERVE_SYMLINKS=1,await B9({projectDir:X,scriptName:q,shell:!0,detached:!0,env:Y})}var R9=async(Q)=>{let{atom:Z,packageDependencies:X,context:q,deploymentProjectTarget:Y,setProgress:J,deploymentProject:H,yamlTarget:W}=Q;if(Y.enabled!==!0)return;let V=Y.type;try{if(V==="lib")await(await import("./index.p0zb7e1b.js")).default({...Q});else if(V==="red")await(await import("./index.490y87nc.js")).default({...Q});else if(V==="npm")await(await import("./index.gh75wt1m.js")).default({...Q});else if(V==="gcs")await(await import("./index.hzsfswvp.js")).default({...Q});else if(V==="gitlab")await(await import("./index.jgpc3grc.js")).default({...Q});else if(V==="fnet-package")await(await import("./index.r82rtnmz.js")).default({...Q});else if(V==="fnet-form")await(await import("./index.3exge2js.js")).default({...Q});else if(V==="fnet-node")await(await import("./index.4jkat7r4.js")).default({...Q});else if(V==="fnet-flow")await(await import("./index.s662t98v.js")).default({...Q});else if(V==="nextjs")await(await import("./index.7vw06nrn.js")).default({atom:Z,target:Y,onProgress:J,projectDir:q.projectDir,dependencies:X,context:q,yamlTarget:W}),H.isDirty=!0;else if(V==="webos")await(await import("./index.zm4kesg6.js")).default({atom:Z,target:Y,onProgress:J,projectDir:q.projectDir,dependencies:X,context:q,yamlTarget:W}),H.isDirty=!0;else if(V==="electron")await(await import("./index.9567fa9x.js")).default({atom:Z,target:Y,onProgress:J,projectDir:q.projectDir,dependencies:X,context:q,yamlTarget:W}),H.isDirty=!0;else if(V==="docker")await(await import("./index.w74dpnpn.js")).default({atom:Z,target:Y,onProgress:J,projectDir:q.projectDir,dependencies:X,context:q,yamlTarget:W}),H.isDirty=!0;else if(V==="ios")await(await import("./index.7crx8ky1.js")).default({atom:Z,target:Y,onProgress:J,projectDir:q.projectDir,dependencies:X,context:q,yamlTarget:W}),H.isDirty=!0;else if(V==="macos")await(await import("./index.xeaw5xa9.js")).default({atom:Z,target:Y,onProgress:J,projectDir:q.projectDir,dependencies:X,context:q,yamlTarget:W}),H.isDirty=!0;else if(V==="rust")await(await import("./index.3kfx538h.js")).default({atom:Z,target:Y,onProgress:J,projectDir:q.projectDir,dependencies:X,context:q,yamlTarget:W}),H.isDirty=!0;else if(V==="pypi")await(await import("./index.33f1ggpr.js")).default({atom:Z,target:Y,onProgress:J,projectDir:q.projectDir,dependencies:X,context:q,yamlTarget:W}),H.isDirty=!0;else{console.warn(`No deployer found for type: ${V}`);return}}catch(K){throw console.error(`Error during deployment for type "${V}":`,K),K}};import{Atom as R0}from"@flownet/lib-atom-api-js";import Z2 from"@flownet/lib-parse-node-url";import C9 from"bpmn-moddle";import I9 from"dagre";import m6 from"lodash.clonedeep";var h6={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 L9(Q){let{nodes:Z,nodeIndex:X,root:q}=Q,Y=[],J=new Set,H=(W)=>{if(J.has(W.indexKey))return;if(J.add(W.indexKey),W.hasReturn&&W.type!=="return"){let V=`${W.indexKey}/_inline_end`;if(X[V])return;let K={name:"",type:"return",virtual:!0,parent:W.parent,childs:[],definition:{return:W.definition.return},index:W.parent.childs.length,indexKey:V,pathKey:`${W.pathKey}._inline_end`,codeKey:`${W.codeKey}_inline_end`,context:{next:null},hasReturn:!0,_inlineParent:W};if(Y.push(K),j("bpmn"))x.info(`[INLINE-RETURN] EndEvent: ${K.indexKey} (parent: ${W.indexKey})`)}W.childs.forEach((V)=>H(V))};Z.forEach((W)=>H(W)),Y.forEach((W)=>{W.parent.childs.push(W),X[W.indexKey]=W,Z.push(W)}),Z.forEach((W)=>{let V=[],K=[],z=($)=>{let A=Y.find((U)=>U._inlineParent===$);if(A)V.push({from:$,to:A,type:"bpmn:SequenceFlow"});else if($.context.next){if(V.push({from:$,to:$.context.next,type:"bpmn:SequenceFlow"}),$===W)K.push({to:$.context.next,type:"bpmn:SequenceFlow",next:!0})}$.childs.forEach((U)=>{if($===W){if(W.type==="switch"){if(!(U.indexKey&&U.indexKey.endsWith("/_inline_end")))K.push({to:U,type:"bpmn:SequenceFlow"})}}z(U)})};z(W);let G=V.filter(($)=>$.to.parent.indexKey===W.parent.indexKey).map(($)=>{return{...$,from:W.indexKey,to:$.to.indexKey}}),_=V.filter(($)=>$.to.parent.indexKey!==W.parent.indexKey&&!$.to.indexKey.startsWith(W.indexKey+"/")).map(($)=>{return{...$,from:W.indexKey,to:$.to.indexKey}}),O=K.map(($)=>{return{...$,to:$.to.indexKey}});if(W.bpmn=W.bpmn||{},W.bpmn.edges=g6(G,"to"),W.bpmn.outside=g6(_,"to"),W.bpmn.starts=g6(O,"to"),W.bpmn.type=_5(W),W.bpmn.width=120,W.bpmn.height=80,W.type==="return")W.bpmn.width=36,W.bpmn.height=36;if(W.bpmn.type==="bpmn:CallActivity")W.bpmn.fill="#E1F5FE",W.bpmn.stroke="#0277BD"})}function _5(Q){let Z;if(Q.type==="call"){if(Q.context?.lib?.type==="subworkflow"||Q.context?.lib?.type==="workflow"){if(Z="bpmn:CallActivity",j("bpmn"))x.info(`[CALL] CallActivity (subworkflow): ${Q.indexKey} (${Q.context?.lib?.name||"unknown"})`)}else if(Z="bpmn:ServiceTask",j("bpmn"))x.info(`[CALL] ServiceTask (external): ${Q.indexKey} (${Q.context?.lib?.name||"unknown"})`)}else if(Q.type==="form"){if(Z="bpmn:UserTask",j("bpmn"))x.info(`[FORM] UserTask: ${Q.indexKey}`)}else if(Q.type==="return"){if(Z="bpmn:EndEvent",j("bpmn"))x.info(`[RETURN] EndEvent: ${Q.indexKey}`)}else if(Q.type==="raise"){let X=!1;if(Q.name==="try"&&Q.parent?.type==="tryexcept")X=!0;else{let q=Q.parent;while(q){if(q.name==="try"&&q.parent?.type==="tryexcept"){X=!0;break}q=q.parent}}if(X){if(Z="bpmn:IntermediateThrowEvent",j("bpmn"))x.info(`[RAISE] IntermediateThrowEvent (inside try): ${Q.indexKey}`)}else if(Z="bpmn:EndEvent",j("bpmn"))x.info(`[RAISE] EndEvent (error): ${Q.indexKey}`)}else if(Q.type==="pipeline"){if(Z="bpmn:ServiceTask",j("bpmn"))x.info(`[PIPELINE] ServiceTask (external binary): ${Q.indexKey} (${Q.context?.binaryName||"unknown"})`)}else if(Q.type==="http"){if(Z="bpmn:ServiceTask",j("bpmn"))x.info(`[HTTP] ServiceTask (external API): ${Q.indexKey} (${Q.context?.http?.method||"GET"} ${Q.context?.http?.url||"unknown"})`)}else if(Q.type==="assign"||Q.type==="new"){if(Z="bpmn:ScriptTask",j("bpmn"))x.info(`[${Q.type.toUpperCase()}] ScriptTask: ${Q.indexKey}`)}else if(Z="bpmn:Task",j("bpmn"))x.info(`[${Q.type.toUpperCase()}] Task: ${Q.indexKey}`);return Z}function g6(Q,Z){return Q.filter((X,q,Y)=>{return Y.map((J)=>J[Z]).indexOf(X[Z])===q})}function c6(Q){let{nodes:Z,nodeIndex:X,root:q}=Q,Y=Q.targetNodes||q.childs;Y.forEach((J)=>{let H=J.type==="workflow"||J.type==="subworkflow",W=!H&&J.childs.filter((G)=>!G.virtual).length>0,V=(J.name==="try"||J.name==="except")&&J.parent?.type==="tryexcept",K=J.type==="schedule",z=J.type==="retry";if(W||V||K||z){if(J.bpmn.type="bpmn:SubProcess",J.type==="for"){if(J.bpmn.loopCharacteristics=!0,j("bpmn"))x.info(`[FOR] SubProcess + Loop Marker: ${J.indexKey}`)}if(J.name==="try"&&J.type==="raise"&&J.parent?.type==="tryexcept"){let G=t({location:0,...Q,parent:J,bpmnType:"bpmn:IntermediateThrowEvent",type:"raise",attrs:{},definitions:[{type:"bpmn:ErrorEventDefinition"}]});if(j("bpmn"))x.info(`[VIRTUAL] IntermediateThrowEvent for single-step try block: ${J.indexKey}`)}}if(H||W){let G=J.childs.filter((M)=>M.module!==!0&&!M.indexKey.endsWith("/_inline_end"))[0];J.childs.filter((M)=>M.module===!0).forEach((M)=>{let R=t({...Q,parent:J,bpmnType:"bpmn:IntermediateCatchEvent",type:"inter",definitions:[{type:"bpmn:SignalEventDefinition"}]});R.bpmn.edges=[{from:R.indexKey,to:M.indexKey,type:"bpmn:SequenceFlow"}]});let O=J.childs.find((M)=>M.name==="try"&&J.type==="tryexcept"),$=J.childs.filter((M)=>M.name==="except"&&J.type==="tryexcept");if(O&&$.length)$.forEach((M)=>{let R=t({location:J.childs.indexOf(M),...Q,parent:J,bpmnType:"bpmn:BoundaryEvent",type:"boundary",attrs:{attachedToRef:O},definitions:[{type:"bpmn:ErrorEventDefinition"}]});if(R.bpmn.edges=[{from:R.indexKey,to:M.indexKey,type:"bpmn:SequenceFlow"}],j("bpmn"))x.info(`[TRY-EXCEPT] BoundaryEvent: ${J.indexKey} (try: ${O.indexKey}, except: ${M.indexKey})`)});let A=J.childs.find((M)=>M.type==="raise");if(A){let M=t({...Q,parent:J,bpmnType:"bpmn:EndEvent",type:"end",name:"ERROR",definitions:[{type:"bpmn:ErrorEventDefinition"}]});A.bpmn.edges=[{from:A.indexKey,to:M.indexKey,type:"bpmn:SequenceFlow"}]}if(J.type==="schedule"){let M=J.childs[0];if(M){let R=t({...Q,parent:J,bpmnType:"bpmn:StartEvent",type:"timer-start",definitions:[{type:"bpmn:TimerEventDefinition",timerType:"timeCycle",expression:J.context?.cron||"* * * * *"}]});if(R.bpmn.edges=[{from:R.indexKey,to:M.indexKey,type:"bpmn:SequenceFlow"}],j("bpmn"))x.info(`[SCHEDULE] SubProcess + TimerStartEvent: ${J.indexKey} (cron: ${J.context?.cron})`)}}if(G)if(J.type==="schedule"){if(j("bpmn"))x.info(`[SCHEDULE] Skipping normal StartEvent (using TimerStartEvent): ${J.indexKey}`)}else if(J.type==="retry"){let M=t({...Q,parent:J,bpmnType:"bpmn:StartEvent",type:"start"});if(M.bpmn.edges.push({from:M.indexKey,to:G.indexKey,type:"bpmn:SequenceFlow"}),j("bpmn"))x.info(`[RETRY] SubProcess with loop characteristics: ${J.indexKey} (attempts: ${J.context?.attempts})`)}else if(J.type==="parallel"){let M=t({...Q,parent:J,bpmnType:"bpmn:StartEvent",type:"start"}),R=t({...Q,parent:J,bpmnType:"bpmn:ParallelGateway",type:"fork"}),F=t({...Q,parent:J,bpmnType:"bpmn:ParallelGateway",type:"join"}),S=t({...Q,parent:J,bpmnType:"bpmn:EndEvent",type:"end"});M.bpmn.edges=[{from:M.indexKey,to:R.indexKey,type:"bpmn:SequenceFlow"}];let y=J.childs.filter((v)=>!v.virtual&&!v.module&&!v.indexKey.endsWith("/_inline_end"));if(R.bpmn.edges=y.map((v)=>{return{from:R.indexKey,to:v.indexKey,type:"bpmn:SequenceFlow"}}),y.forEach((v)=>{v.bpmn.edges=[{from:v.indexKey,to:F.indexKey,type:"bpmn:SequenceFlow"}]}),F.bpmn.edges=[{from:F.indexKey,to:S.indexKey,type:"bpmn:SequenceFlow"}],j("bpmn"))x.info(`[PARALLEL] Fork/Join Gateways: ${J.indexKey} (${y.length} children)`)}else if(J.bpmn.starts.length>1){let M=t({...Q,parent:J,bpmnType:"bpmn:StartEvent",type:"start"}),R=t({...Q,parent:J,bpmnType:"bpmn:ExclusiveGateway",type:"switch"});M.bpmn.edges=[{from:M.indexKey,to:R.indexKey,type:"bpmn:SequenceFlow"}],R.bpmn.edges=J.bpmn.starts.map((S)=>{return{...S,from:R.indexKey}});let F=R.bpmn.edges.find((S)=>S.next===!0);if(F){let S=t({...Q,parent:J,bpmnType:"bpmn:EndEvent",type:"end",name:F.to});F.to=S.indexKey}}else{let M=t({...Q,parent:J,bpmnType:"bpmn:StartEvent",type:"start"});M.bpmn.edges.push({from:M.indexKey,to:G.indexKey,type:"bpmn:SequenceFlow"})}else if(j("bpmn"))x.info(`[START-EVENT] skipped (no valid firstNode): ${J.indexKey}`);J.childs.filter((M)=>M.virtual!==!0&&M.bpmn.outside.length&&M.bpmn.type!=="bpmn:EndEvent").forEach((M)=>{M.bpmn.outside.forEach((R)=>{let F=Y.indexOf(J),S=t({...Q,parent:J,bpmnType:"bpmn:EndEvent",type:"end",name:R.to,location:F+1});M.bpmn.edges.push({from:M.indexKey,to:S.indexKey,type:"bpmn:SequenceFlow"})})}),J.childs.filter((M)=>M.virtual!==!0&&M.bpmn.edges.length>1).forEach((M)=>{let R=Y.indexOf(M),F=t({...Q,parent:J,bpmnType:"bpmn:ExclusiveGateway",type:"switch",location:R+1});F.bpmn.edges=M.bpmn.edges.map((S)=>{return{...S,from:F.indexKey}}),M.bpmn.edges=[{from:M.indexKey,to:F.indexKey,type:"bpmn:SequenceFlow"}],M.bpmn.outside=[]})}c6({...Q,targetNodes:J.childs})})}function t(Q){let{parent:Z,nodes:X,nodeIndex:q,bpmnType:Y,type:J,name:H,outside:W,location:V,definitions:K,attrs:z}=Q,G=Z.childs.filter((O)=>O.type===`v${J}`).length;if(j("bpmn"))x.info(`[VIRTUAL] ${J.toUpperCase()} → ${Y}: ${Z.indexKey}/_${J}${G}`);let _={indexKey:`${Z.indexKey}/_${J}${G}`,pathKey:`${Z.pathKey}._${J}${G}`,type:`v${J}`,name:H,bpmn:{edges:[],outside:[],type:Y,width:36,height:36,fill:"#c8e6c9",stroke:"#205022",definitions:K,attrs:z},virtual:!0,childs:[]};return Z.childs.splice(V||0,0,_),X.push(_),q[_.indexKey]=_,_}function l6(Q){let{targetNode:Z,targetFlowElementsContainer:X,targetPlaneElement:q,moddle:Y,elementIndex:J,nodeIndex:H,diagrams:W,nodes:V}=Q;z5(Q),G5(Q),U5(Q),$5(Q)}function z5(Q){let{targetNode:Z,targetFlowElementsContainer:X,targetPlaneElement:q,moddle:Y,elementIndex:J,nodeIndex:H,nodes:W}=Q,V=X.get("flowElements");if(X.$nodes=X.$nodes||[],j("bpmn"))x.info(`[BPMN] Creating elements for: ${Z.indexKey} (${Z.childs.length} children)`);Z.childs.forEach((K)=>{let z=Y.create(K.bpmn.type,{id:`node.${K.pathKey}`,name:K.definition?.title||K.name});if(J[z.id]=z,z.$isNode=!0,z.$node=K,K.$flow=z,X.$nodes.push(z),V.push(z),K.bpmn.type==="bpmn:CallActivity"&&K.context?.lib){if(z.calledElement=K.context.lib.name,j("bpmn"))x.info(`[CREATED] ${K.bpmn.type} (chip!): ${z.id} → ${z.calledElement}`)}else if(j("bpmn"))x.info(`[CREATED] ${K.bpmn.type}: ${z.id}${K.virtual?" (virtual)":""}`);if(K.bpmn.attrs)Object.keys(K.bpmn.attrs).forEach((_)=>{if(_==="attachedToRef")z.set(_,K.bpmn.attrs[_].$flow)});if(K.bpmn.definitions){let G=K.bpmn.definitions.map((_)=>{let O=Y.create(_.type);return Object.keys(_.attrs||{}).forEach((A)=>{O.set(A,_.attrs[A])}),O});z.eventDefinitions=G}if(K.bpmn.loopCharacteristics&&K.bpmn.type==="bpmn:SubProcess"){if(z.loopCharacteristics=Y.create("bpmn:StandardLoopCharacteristics"),j("bpmn"))x.info(`[LOOP] Added loop marker to: ${z.id} (${K.type})`)}})}function G5(Q){let{targetNode:Z,targetFlowElementsContainer:X,targetPlaneElement:q,moddle:Y,elementIndex:J,nodeIndex:H}=Q,W=X.get("flowElements");X.$edges=X.$edges||[],Z.childs.forEach((V)=>{V.bpmn.edges.forEach((z)=>{let G=V,_=H[z.to],O=`edge.${G.pathKey}_${_.pathKey}`;if(J[O])return;let $=J[`node.${G.pathKey}`],A=J[`node.${_.pathKey}`],U=Y.create(z.type,{id:O,sourceRef:$,targetRef:A});J[U.id]=U,U.$is_edge=!0,$.get("outgoing").push(U),A.get("incoming").push(U),X.$edges.push({from:$,to:A,flow:U}),W.push(U)})})}function U5(Q){let{targetNode:Z,targetFlowElementsContainer:X,targetPlaneElement:q,moddle:Y,elementIndex:J,nodeIndex:H}=Q,W=120,V=80,K=160,z=160,G=new I9.graphlib.Graph;G.setDefaultEdgeLabel(()=>({})),G.setGraph({rankdir:"TB",nodesep:120,ranksep:80,xranker:"longest-path"}),X.$nodes.forEach((_)=>{G.setNode(_.id,{width:_.$node?.bpmn.width||120,height:_.$node?.bpmn.height||80,label:_.id})}),X.$edges.forEach((_)=>{G.setEdge(_.from.id,_.to.id)}),I9.layout(G),X.$nodes.forEach((_)=>{let O=G.node(_.id),$=O.width,A=O.height,U=Y.create("bpmndi:BPMNShape",{id:`shape.${_.id}`,bpmnElement:_,bounds:Y.create("dc:Bounds",{x:160+O.x-O.width/2,y:160+O.y-O.height/2,width:$,height:A}),label:Y.create("bpmndi:BPMNLabel")});if(_.$node.bpmn.fill)U.set("bioc:fill",_.$node.bpmn.fill);if(_.$node.bpmn.stroke)U.set("bioc:stroke",_.$node.bpmn.stroke);q.get("planeElement").push(U)}),X.$edges.forEach((_)=>{let O=G.edge(_.from.id,_.to.id),$=Y.create("bpmndi:BPMNEdge",{id:`edge.${_.from.id}_${_.to.id}`,bpmnElement:_.flow,label:Y.create("bpmndi:BPMNLabel")});O.points.forEach((U)=>{let B=Y.create("dc:Point",{x:160+U.x,y:160+U.y});$.get("waypoint").push(B)}),q.get("planeElement").push($)})}function $5(Q){let{targetNode:Z,targetFlowElementsContainer:X,targetPlaneElement:q,moddle:Y,elementIndex:J,nodeIndex:H,diagrams:W}=Q;Z.childs.filter((K)=>K.bpmn.type==="bpmn:SubProcess").forEach((K)=>{let z=J[`node.${K.pathKey}`],G=Y.create("bpmndi:BPMNDiagram",{id:`diagram_${K.pathKey}`});J[G.id]=G,W.push(G);let _=Y.create("bpmndi:BPMNPlane",{id:`plane_${K.pathKey}`});J[_.id]=_,G.plane=_,_.bpmnElement=z,l6({...Q,targetNode:K,targetFlowElementsContainer:z,targetPlaneElement:_})})}async function M5(Q){let Z=Q.root,X=Z.context.index,q=Object.keys(X).map((K)=>X[K]);L9({nodes:q,nodeIndex:X,root:Z}),c6({nodes:q,nodeIndex:X,root:Z});let Y=void 0,J=new C9({atom:h6}),H={},W=J.create("bpmn:Definitions",{id:"definitions_0"});H[W.id]=W;for await(let K of Z.childs){let z=W.get("rootElements"),G=W.get("diagrams"),_=J.create("bpmn:Process",{id:`process_${K.pathKey}`,name:K.name,documentation:[J.create("bpmn:Documentation",{text:`Workflow - ${K.name}`})]});H[_.id]=_,_.isExecutable=!0,z.push(_);let O=J.create("bpmndi:BPMNDiagram",{id:`diagram_${K.pathKey}`});H[O.id]=O,G.push(O);let $=J.create("bpmndi:BPMNPlane",{id:`plane_${K.pathKey}`});H[$.id]=$,O.plane=$,$.bpmnElement=_,l6({targetNode:K,targetFlowElementsContainer:_,targetPlaneElement:$,moddle:J,elementIndex:H,nodeIndex:X,nodes:q,diagrams:G})}let V=await J.toXML(W,{format:!0});return{diagramXML:Y||V.xml}}async function O5(Q){let{root:Z,flowName:X}=Q,q=m6(Z),Y=q.childs.find((F)=>F.name===X);if(!Y)throw Error(`Flow "${X}" not found`);let J={...q,childs:[Y]},H=J.context.index,W=Object.keys(H).map((F)=>H[F]);L9({nodes:W,nodeIndex:H,root:J}),c6({nodes:W,nodeIndex:H,root:J});let V=new C9({atom:h6}),K={},z=V.create("bpmn:Definitions",{id:`definitions_${X}`});K[z.id]=z;let G=z.get("rootElements"),_=z.get("diagrams"),O=V.create("bpmn:Process",{id:`process_${Y.pathKey}`,name:Y.name,documentation:[V.create("bpmn:Documentation",{text:`Workflow - ${Y.name}`})]});K[O.id]=O,O.isExecutable=!0,G.push(O);let $=V.create("bpmndi:BPMNDiagram",{id:`diagram_${Y.pathKey}`});K[$.id]=$,_.push($);let A=V.create("bpmndi:BPMNPlane",{id:`plane_${Y.pathKey}`});return K[A.id]=A,$.plane=A,A.bpmnElement=O,l6({targetNode:Y,targetFlowElementsContainer:O,targetPlaneElement:A,moddle:V,elementIndex:K,nodeIndex:H,nodes:W,diagrams:_}),{diagramXML:(await V.toXML(z,{format:!0})).xml,flowName:Y.name}}async function j8(Q={}){return await M5(m6(Q))}async function F9(Q={}){let Z=m6(Q),{root:X}=Z,q=[];for(let Y of X.childs){let J=await O5({root:X,flowName:Y.name});q.push(J)}return q}import X2 from"@fnet/config";import q2 from"@flownet/lib-parse-imports-js";class T8 extends SyntaxError{constructor(Q,Z,X,q){super(Q);this.expected=Z,this.found=X,this.location=q,this.name="SyntaxError"}format(Q){let Z="Error: "+this.message;if(this.location){let X=null,q=Q.find((W)=>W.source===this.location.source);if(q)X=q.text.split(/\r\n|\n|\r/g);let Y=this.location.start,J=this.location.source&&typeof this.location.source.offset==="function"?this.location.source.offset(Y):Y,H=this.location.source+":"+J.line+":"+J.column;if(X){let W=this.location.end,V="".padEnd(J.line.toString().length," "),K=X[Y.line-1],G=(Y.line===W.line?W.column:K.length+1)-Y.column||1;Z+=`
|
|
5
5
|
--> `+H+`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./index.cvxrf34y.js";import C from"fs";import H from"path";import K from"@fnet/yaml";import L from"@fnet/shell-flow";async function U({projectType:B,group:A,tags:q,args:x,argv:I}){try{let z=await M(B),{parsed:J}=await K({file:z.path,tags:q}),D=J.commands;if(!D)throw Error(`Commands section not found in ${z.name}`);let E=D[A];if(!E)throw Error(`Command group '${A}' not found in ${z.name}`);await L({commands:E,context:{args:x,argv:I,projectType:z.type}})}catch(z){console.error(`Error: ${z.message}`),process.exit(1)}}async function M(B){let A=process.cwd(),q=H.resolve(A,"fnode.yaml"),x=H.resolve(A,"fnet.yaml");if(B==="fnode"){if(C.existsSync(q))return{path:q,name:"fnode.yaml",type:"fnode"};throw Error("fnode.yaml file not found in current directory")}if(B==="fnet"){if(C.existsSync(x))return{path:x,name:"fnet.yaml",type:"fnet"};throw Error("fnet.yaml file not found in current directory")}if(C.existsSync(q))return{path:q,name:"fnode.yaml",type:"fnode"};if(C.existsSync(x))return{path:x,name:"fnet.yaml",type:"fnet"};throw Error("No project file (fnode.yaml or fnet.yaml) found in current directory")}export{U as runCommandGroup,M as detectProjectFile};
|
package/dist/fnode/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{e as S}from"./index.9qgtmxq3.js";import{f as o}from"./index.05n3mvs9.js";import{g as x,i as k}from"./index.cvxrf34y.js";import q$ from"yargs";import B1 from"chalk";import{promisify as I1}from"node:util";import F1 from"tree-kill";var a=I1(F1),N=!1;async function n($,W){if(N)return;if(N=!0,!$.killed&&$.pid)try{if(await a($.pid,"SIGTERM").catch(()=>{}),await new Promise((q)=>setTimeout(q,500)),!$.killed)await a($.pid,"SIGKILL").catch(()=>{})}catch(q){}await new Promise((q)=>setTimeout(q,100));let z=W==="SIGINT"?130:W==="SIGTERM"?143:1;process.exit(z)}function u($){["SIGINT","SIGTERM","SIGQUIT"].forEach((W)=>{process.once(W,async()=>{await n($,W)})}),process.on("uncaughtException",async(W)=>{await n($)}),process.on("unhandledRejection",async(W)=>{await n($)}),$.on("close",(W)=>{if(!N)process.exit(W)})}function t(){process.on("uncaughtException",($)=>{if(!N)N=!0,setTimeout(()=>process.exit(1),500)}),process.on("unhandledRejection",($)=>{if(!N)N=!0,setTimeout(()=>process.exit(1),500)})}import E from"node:path";import{spawn as i}from"node:child_process";import v from"node:fs";import b from"chalk";import _1 from"@fnet/config";function C($,{name:W,bin:z,preArgs:q=[],createContext:G}){if(typeof z==="function")z=z();return $.command(`${W||z} [commands..]`,`${z} ${q.join(" ")}`,(Z)=>{return Z.help(!1).version(!1)},async(Z)=>{try{let Q=await G(Z),{projectDir:Y}=Q,O=(I)=>{if(!I.includes(" "))return I;if(process.platform==="win32")return`"${I.replace(/(["^])/g,"^$1")}"`;else return`"${I.replace(/(["\\$`])/g,"\\$1")}"`},M=process.argv.slice(3).map(O),J={...process.env},U=E.join(Y,"node_modules");J.NODE_PATH=U,J.NODE_PRESERVE_SYMLINKS=1;let T=i(z,[...q,...M],{cwd:Y,stdio:"inherit",shell:!0,detached:!0,env:J});u(T)}catch(Q){console.error(Q.message),process.exit(1)}})}function y($,{name:W,bin:z,preArgs:q=[],createContext:G}){return $.command(`${W||z} [commands..]`,`${z} ${q.join(" ")}`,(Z)=>{return Z.help(!1).version(!1)},async(Z)=>{try{let Q=await G(Z),{projectDir:Y}=Q,O=(U)=>{if(!U.includes(" "))return U;if(process.platform==="win32")return`"${U.replace(/(["^])/g,"^$1")}"`;else return`"${U.replace(/(["\\$`])/g,"\\$1")}"`},M=process.argv.slice(3).map(O);z=E.join(Y,".conda","bin",z||W);let J=i(z,[...q,...M],{cwd:Y,stdio:"inherit",shell:!0,detached:!0,env:{PYTHONPATH:Y}});u(J)}catch(Q){console.error(Q.message),process.exit(1)}})}function e($,{name:W,preArgs:z=[],createContext:q}){return $.command(`${W} <config> <command> [options..]`,"Run a command with a config context",(G)=>{return G.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)},async(G)=>{try{let Z=await q(G),{projectDir:Q}=Z,Y=G.config,M=(await _1({name:Y,dir:Q,transferEnv:!1,optional:!0,tags:Z.tags}))?.data?.env||void 0,J=G.command,U=process.argv.slice(5),T=i(J,[...z,...U],{cwd:v.existsSync(Q)?Q:process.cwd(),stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...M}});u(T)}catch(Z){console.error(Z.message),process.exit(1)}})}function $1($,{name:W,projectType:z="auto"}){return $.command(`${W} group [options..]`,"Run a command group.",(q)=>{return q.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)},async(q)=>{try{let{runCommandGroup:G}=await import("./index.g6gyvs2p.js");await G({projectType:z,group:q.group,tags:q.ftag,args:q,argv:process.argv})}catch(G){console.error(G.message),process.exit(1)}})}function W1($,{name:W,createContext:z}){return $.command(`${W} [options]`,"Install the project as a binary",(q)=>{return q.option("name",{alias:"n",describe:"Name to use for the installed binary",type:"string"}).option("force",{alias:"f",describe:"Force overwrite if binary already exists",type:"boolean",default:!1}).option("yes",{alias:"y",describe:"Automatically answer yes to all prompts",type:"boolean",default:!1})},async(q)=>{try{let G=await z(q),{projectDir:Z}=G;console.log(b.blue("Compiling project..."));let Q=E.join(Z,".bin");if(!v.existsSync(Q))v.mkdirSync(Q,{recursive:!0});let Y=E.basename(E.dirname(Z)),O=G.project?.projectFileParsed?.features?.cli?.bin,M=q.name||O||Y;console.log(b.blue(`Using binary name: ${M}`));let J=E.join(Q,M),{spawn:U}=await import("child_process"),T=U("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${J}`],{cwd:Z,stdio:"inherit",shell:!0});if(await new Promise((f,F)=>{T.on("close",(_)=>{if(_===0)f();else F(Error(`Compilation failed with code ${_}`))}),T.on("error",(_)=>{F(_)})}),process.platform!=="win32")v.chmodSync(J,493);console.log(b.green(`Binary compiled successfully: ${J}`)),console.log(b.blue("Installing binary..."));let I=["install",J];if(q.name)I.push("--name",q.name);if(q.force)I.push("--force");if(q.yes)I.push("--yes");let D=U("fbin",I,{stdio:"inherit",shell:!0});await new Promise((f,F)=>{D.on("close",(_)=>{if(_===0)f();else F(Error(`Installation failed with code ${_}`))}),D.on("error",(_)=>{F(_)})})}catch(G){console.error(b.red(`Failed to install binary: ${G.message}`)),process.exit(1)}})}import B from"node:path";import w from"node:fs";import q1 from"@fnet/yaml";import A1 from"yaml";async function V($){if($.id)return{id:$.id,buildId:$.buildId,mode:$.mode,protocol:$.protocol||"ac:",templateDir:S("./template/fnode/node"),projectDir:B.resolve(process.cwd(),`./.output/${$.id}`),tags:$.ftag,dev:$.dev};else try{let W=await R1({tags:$.ftag}),z=W.runtime.type==="bun"?"node":W.runtime.type;return{buildId:$.buildId,mode:$.mode,protocol:$.protocol||"src:",templateDir:S(`./template/fnode/${z}`),projectDir:B.resolve(W.projectDir,"./.workspace"),projectSrcDir:B.resolve(W.projectDir,"./src"),projectSrcDirSymlink:B.resolve(W.projectDir,"./.workspace/src-core"),projectAppDir:B.resolve(W.projectDir,"./app"),projectAppDirSymlink:B.resolve(W.projectDir,"./.workspace/app"),projectCliDir:B.resolve(W.projectDir,"./cli"),projectCliDirSymlink:B.resolve(W.projectDir,"./.workspace/cli"),project:W,tags:$.ftag,dev:$.dev}}catch(W){return console.warn(`Warning: Could not load project: ${W.message}`),{projectDir:process.cwd(),tags:$.ftag}}}async function R1({tags:$}){let W=N1(process.cwd());if(!w.existsSync(W))throw Error("fnode.yaml file not found in current directory.");let{raw:z,parsed:q}=await q1({file:W,tags:$}),G=B.dirname(W);q.features=q.features||{};let Z=q.features;if(Z.runtime=Z.runtime||{},Z.runtime.type=Z.runtime.type||"node",Z.runtime.type==="python")Z.runtime.template=Z.runtime.template||"python";else if(Z.runtime.type==="bun")Z.runtime.template=Z.runtime.template||"node";else Z.runtime.template=Z.runtime.template||"node";let Q={libraryAtom:{doc:{...q},fileName:"index"},projectDir:G,projectFilePath:W,projectFileContent:z,projectFileParsed:q,runtime:Z.runtime},Y=B.resolve(G,"fnet/targets.yaml");if(!w.existsSync(Y)){if(Y=B.resolve(G,"node.devops.yaml"),w.existsSync(Y)){let M=B.resolve(G,"fnet");if(!w.existsSync(M))w.mkdirSync(M);w.copyFileSync(Y,B.resolve(G,"fnet/targets.yaml")),w.unlinkSync(Y)}}if(w.existsSync(Y)){let{raw:M,parsed:J}=await q1({file:Y,tags:$}),U=A1.parseDocument(M);Q.devops={filePath:Y,fileContent:M,yamlDocument:U,doc:{...J},type:"library.deploy",save:async()=>{w.writeFileSync(Q.devops.filePath,U.toString())}}}let O=B.resolve(G,"readme.md");if(w.existsSync(O)){let M=w.readFileSync(O,"utf8");Q.readme={filePath:O,fileContent:M,doc:{content:M,"content-type":"markdown"},type:"wiki"}}return Q}function N1($){let W=B.resolve($,"node.yaml"),z=B.resolve($,"fnode.yaml");if(w.existsSync(z))return z;if(w.existsSync(W))try{let q=w.readFileSync(W,"utf8");return w.writeFileSync(z,q,"utf8"),w.unlinkSync(W),console.log(`Migrated node.yaml to fnode.yaml in ${$}`),z}catch(q){return console.error(`Error migrating node.yaml to fnode.yaml: ${q.message}`),W}return z}import x1 from"node:path";import z1 from"node:fs";import k1 from"node:os";import S1 from"@flownet/lib-render-templates-dir";import c from"@fnet/shelljs";var E1={command:"create",describe:"Create a new fnode project",builder:($)=>{return $.option("name",{type:"string",describe:"Project name",demandOption:!0}).option("vscode",{type:"boolean",default:!0,alias:"vs",describe:"Open in VS Code after creation"}).option("runtime",{type:"string",default:"node",choices:["node","python","bun"],describe:"Runtime environment"})},handler:async($)=>{try{let W=process.cwd(),z=S("./template/fnode/project"),q=x1.resolve(W,$.name);if(!z1.existsSync(q))z1.mkdirSync(q);await S1({dir:z,outDir:q,context:{name:$.name,runtime:$.runtime,platform:k1.platform()},copyUnmatchedAlso:!0});let G=await c("fnode build",{cwd:q});if(G.code!==0)throw Error("Failed to build project.");if(o("git")){if(G=await c("git init --initial-branch=main",{cwd:q}),G.code!==0)throw Error("Failed to initialize git.")}if(o("code")&&$.vscode){if(G=await c(`cd ${q} && code .`),G.code!==0)throw Error("Failed to open vscode.")}console.log("Creating project succeeded!"),process.exit(0)}catch(W){console.error("Initialization failed!",W.message),process.exit(1)}}},G1=E1;import b1 from"node:os";import y1 from"@flownet/lib-render-templates-dir";import D1 from"@fnet/shelljs";var f1={command:"project",describe:"Manage fnode project",builder:($)=>{return $.option("update",{type:"boolean",default:!1,alias:"-u",describe:"Update project files"})},handler:async($)=>{try{let W=S("./template/fnode/project"),z=process.cwd(),q=await V($);if($.update){if(await y1({dir:W,outDir:z,context:{name:q.project.projectFileParsed.name,runtime:q.project.runtime.type,platform:b1.platform()},copyUnmatchedAlso:!0}),(await D1("fnode build",{cwd:z})).code!==0)throw Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(W){console.error("Project failed.",W.message),process.exit(1)}}},Q1=f1;class Z1{static async createBuilder($){if(!$.project)return console.warn("No project provided, defaulting to node runtime"),new(await import("./index.kvedj83h.js")).default($);let W=$.project?.runtime?.type||"node";try{return new(await this.loadBuilderClass(W))($)}catch(z){throw Error(`Failed to create builder for runtime '${W}': ${z.message}`)}}static async loadBuilderClass($){switch($.toLowerCase()){case"node":case"bun":return(await import("./index.kvedj83h.js")).default;case"python":return(await import("./index.hv4s25f0.js")).default;default:throw Error(`Unsupported runtime type: ${$}`)}}}var R=Z1;var u1={command:"build",describe:"Build fnode project",builder:($)=>{return $.option("id",{type:"string",describe:"Project ID"}).option("buildId",{type:"string",alias:"bid",describe:"Build ID"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"],describe:"Build mode"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"}).option("dev",{type:"boolean",default:!1,describe:"Development mode"})},handler:async($)=>{try{let W=await V($),z=await R.createBuilder(W);await z.init(),await z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(W){console.error("Building library failed!",W.message),process.exit(1)}}},Y1=u1;var v1={command:"build:dev",describe:"Build fnode project",builder:($)=>{return $.option("id",{type:"string",describe:"Project ID"}).option("buildId",{type:"string",alias:"bid",describe:"Build ID"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"],describe:"Build mode"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"}).option("dev",{type:"boolean",default:!1,describe:"Development mode"})},handler:async($)=>{try{$.dev=!0;let W=await V($),z=await R.createBuilder(W);await z.init(),await z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(W){console.error("Building library failed!",W.message),process.exit(1)}}},K1=v1;var P1={command:"deploy",describe:"Build and deploy fnode project",builder:($)=>{return $.option("id",{type:"string",describe:"Project ID"}).option("buildId",{type:"string",alias:"bid",describe:"Build ID"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"})},handler:async($)=>{try{let W=await V({...$,mode:"all"}),z=await R.createBuilder(W);await z.init(),await z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(W){console.error("Building library failed!",W.message),process.exit(1)}}},U1=P1;var j1={command:"file",describe:"Just create files",builder:($)=>{return $.option("id",{type:"string",describe:"Project ID"}).option("buildId",{type:"string",alias:"bid",describe:"Build ID"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"})},handler:async($)=>{try{let W=await V({...$,mode:"file"}),z=await R.createBuilder(W);await z.init(),await z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(W){console.error("Building library failed!",W.message),process.exit(1)}}},H1=j1;import J1 from"node:path";import P from"node:fs";import d1 from"@fnet/prompt";var m1={command:"input [name]",describe:"Create or modify an input config file",builder:($)=>{return $.positional("name",{type:"string",demandOption:!1,describe:"Input name"})},handler:async($)=>{try{let W=await V($),{project:z}=W,{projectDir:q,projectFileParsed:G}=z,Z=G.input;if(!Z)throw Error("Config schema not found in project file.");if(!Reflect.has($,"name")){let{inputName:U}=await d1({type:"input",name:"inputName",message:"Input name:",initial:"dev"});$.name=U}let Q=J1.resolve(q,".fnet");if(!P.existsSync(Q))P.mkdirSync(Q);let Y=J1.resolve(Q,`${$.name}.fnet`),O=P.existsSync(Y),M=(await import("@fnet/object-from-schema")).default,J=await M({schema:Z,format:"yaml",ref:O?Y:void 0});P.writeFileSync(Y,J)}catch(W){console.error(W.message),process.exit(1)}}},M1=m1;import L from"node:path";import H from"node:fs";import d from"node:os";import{spawn as m}from"node:child_process";import K from"chalk";import A from"@fnet/prompt";import j from"chalk";import L1 from"@fnet/prompt";async function g1($){let{items:W,message:z,nameField:q="name",valueField:G="name",initialValue:Z=null,allowAbort:Q=!0}=$;if(!W||W.length===0)return console.log(j.yellow("No items available for selection.")),null;if(W.length===1&&!Q){let U=W[0],T=typeof U==="string"?U:U[G];return console.log(j.blue(`Only one option available: ${typeof U==="string"?U:U[q]}`)),T}let Y=W.map((U)=>{if(typeof U==="string")return{name:U,value:U,message:U};else return{name:U[G],value:U[G],message:U[q]||U[G]}});if(Q)Y.push({name:"cancel",value:null,message:j.yellow("Cancel")});let O=null;if(Z){let U=Y.findIndex((T)=>T.name===Z);if(U!==-1)O=U}let M="selectedItem",{[M]:J}=await L1({type:"select",name:M,message:z,choices:Y,initial:O});if(J==="cancel")return null;return J}async function l1($){let{items:W,message:z,nameField:q="name",valueField:G="name",initialValues:Z=[],allowAbort:Q=!0}=$;if(!W||W.length===0)return console.log(j.yellow("No items available for selection.")),null;let Y=W.map((U)=>{if(typeof U==="string")return{name:U,value:U,message:U};else return{name:U[G],value:U[G],message:U[q]||U[G]}}),O=[];if(Z&&Z.length>0)O=Y.map((U,T)=>Z.includes(U.name)?T:-1).filter((U)=>U!==-1);let M="selectedItems",J=await L1({type:"multiselect",name:M,message:z,choices:Y,initial:O,hint:"(Use space to select, enter to confirm)",validate:(U)=>{if(U.length===0&&!Q)return"Please select at least one item";return!0}});if(Q&&J[M].length===0)return null;return J[M]}var s={promptForSelection:g1,promptForMultipleSelection:l1};var X=L.join(d.homedir(),".fnet","express");async function V1($){$.command(["$0 [project-name]","create [project-name]"],"Create a new express project",(W)=>{return W.positional("project-name",{describe:"Name of the project",type:"string"}).option("yes",{alias:"y",describe:"Skip all prompts and use defaults",type:"boolean",default:!1}).option("runtime",{describe:"Runtime to use (node, python, bun)",type:"string",choices:["node","python","bun"],default:"node"})},async(W)=>{await h1(W)}).command("list","List express projects",(W)=>{return W.option("today",{describe:"Show only projects created today",type:"boolean",default:!1}).option("type",{describe:"Filter by project type (fnode or fnet)",type:"string",choices:["fnode","fnet"]}).option("all",{describe:"Show all projects regardless of type",type:"boolean",default:!1,alias:"a"}).option("name",{describe:"Filter by project name",type:"string"})},async(W)=>{await p1(W)}).command("open [project-name]","Open an express project",(W)=>{return W.positional("project-name",{describe:"Name of the project to open",type:"string"}).option("latest",{describe:"Open the most recent project",type:"boolean",default:!1})},async(W)=>{await n1(W)}).command("move [project-name] [destination]","Move an express project to a real project location",(W)=>{return W.positional("project-name",{describe:"Name of the project to move",type:"string"}).positional("destination",{describe:"Destination directory",type:"string"}).option("latest",{describe:"Move the most recent project",type:"boolean",default:!1})},async(W)=>{await i1(W)}).command("remove [project-name]","Remove an express project",(W)=>{return W.positional("project-name",{describe:"Name of the project to remove",type:"string"}).option("latest",{describe:"Remove the most recent project",type:"boolean",default:!1}).option("yes",{alias:"y",describe:"Skip confirmation prompt",type:"boolean",default:!1})},async(W)=>{await o1(W)}).command("enter [project-name]","Enter the directory of an express project in the active terminal",(W)=>{return W.positional("project-name",{describe:"Name of the project to enter",type:"string"}).option("latest",{describe:"Enter the most recent project directory",type:"boolean",default:!1})},async(W)=>{await s1(W)}).demandCommand(1,"You need to specify a command").help()}async function h1($){try{if(!H.existsSync(X))H.mkdirSync(X,{recursive:!0});let W=new Date().toISOString().slice(0,10).replace(/-/g,""),z=L.join(X,W);if(!H.existsSync(z))H.mkdirSync(z,{recursive:!0});let q=$.projectName,G,Z=$.runtime;if(!$.yes){if(!q){let T=H.readdirSync(z).filter((F)=>F.startsWith("fnode-")).map((F)=>parseInt(F.replace("fnode-",""),10)).filter((F)=>!isNaN(F)),D=`fnode-${T.length>0?Math.max(...T)+1:1}`;q=(await A([{type:"input",name:"projectName",message:"Enter project name:",default:D}])).projectName}Z=(await A({type:"select",name:"runtime",message:"Select runtime:",choices:["node","python","bun"],initial:Z||"node"})).runtime}else{if(!q){let J=H.readdirSync(z).filter((T)=>T.startsWith("fnode-")).map((T)=>parseInt(T.replace("fnode-",""),10)).filter((T)=>!isNaN(T));q=`fnode-${J.length>0?Math.max(...J)+1:1}`}if(!Z)Z="node"}if(G=L.join(z,q),H.existsSync(G)){let J=1;while(H.existsSync(L.join(z,`${q}-${J}`)))J++;q=`${q}-${J}`,G=L.join(z,q)}if(!$.yes){if(!(await A([{type:"confirm",name:"proceed",message:`Create express project "${q}" in ${G}?`,default:!0}])).proceed){console.log(K.yellow("Project creation cancelled."));return}}console.log(K.blue(`Creating express project "${q}" in ${G}...`));let Q=L.dirname(G),O=["create","--name",L.basename(G)];if(O.push("--runtime",Z),$.yes)O.push("--yes");if(!H.existsSync(Q))H.mkdirSync(Q,{recursive:!0});let M=m("fnode",O,{stdio:"inherit",shell:!0,cwd:Q});return new Promise((J,U)=>{M.on("close",(T)=>{if(T===0)if(console.log(K.green(`
|
|
3
|
-
Express project "${q}" created successfully!`)),console.log(
|
|
4
|
-
Project location: ${G}`)),!$.yes)
|
|
5
|
-
Failed to create express project "${q}".`)),
|
|
6
|
-
Express Projects:`));let q=(await import("./index.bhapgrs7.js")).default,G=["NAME","TYPE","DATE","PATH"],Z=q.createTable(G,{chars:{mid:"","mid-mid":"","left-mid":"","right-mid":""}});for(let Q of z){let Y=Q.path;if(Y.startsWith(
|
|
7
|
-
Total: ${z.length} projects`))}catch(W){console.error(
|
|
8
|
-
Project moved successfully to ${G}`)),(await A({type:"confirm",name:"deleteOriginal",message:"Delete the original express project?",initial:!1})).deleteOriginal)H.rmSync(q,{recursive:!0,force:!0}),console.log(
|
|
9
|
-
Opening a new shell in the project directory...`));let z=process.env.SHELL||"/bin/bash",q=
|
|
10
|
-
Returned from project directory.`)),G()})})}catch(W){console.error(
|
|
2
|
+
import{e as S}from"./index.9qgtmxq3.js";import{f as o}from"./index.05n3mvs9.js";import{g as k,i as E}from"./index.cvxrf34y.js";import z$ from"yargs";import I1 from"chalk";import{promisify as F1}from"node:util";import _1 from"tree-kill";var a=F1(_1),N=!1;async function i($,W){if(N)return;if(N=!0,!$.killed&&$.pid)try{if(await a($.pid,"SIGTERM").catch(()=>{}),await new Promise((q)=>setTimeout(q,500)),!$.killed)await a($.pid,"SIGKILL").catch(()=>{})}catch(q){}await new Promise((q)=>setTimeout(q,100));let z=W==="SIGINT"?130:W==="SIGTERM"?143:1;process.exit(z)}function b($){["SIGINT","SIGTERM","SIGQUIT"].forEach((W)=>{process.once(W,async()=>{await i($,W)})}),process.on("uncaughtException",async(W)=>{await i($)}),process.on("unhandledRejection",async(W)=>{await i($)}),$.on("close",(W)=>{if(!N)process.exit(W)})}function t(){process.on("uncaughtException",($)=>{if(!N)N=!0,setTimeout(()=>process.exit(1),500)}),process.on("unhandledRejection",($)=>{if(!N)N=!0,setTimeout(()=>process.exit(1),500)})}import x from"node:path";import{spawn as P}from"node:child_process";import v from"node:fs";import y from"chalk";import A1 from"@fnet/config";function C($,{name:W,bin:z,preArgs:q=[],createContext:G}){if(typeof z==="function")z=z();return $.command(`${W||z} [commands..]`,`${z} ${q.join(" ")}`,(Z)=>{return Z.help(!1).version(!1)},async(Z)=>{try{let Q=await G(Z),{projectDir:Y}=Q,L=(I)=>{if(!I.includes(" "))return I;if(process.platform==="win32")return`"${I.replace(/(["^])/g,"^$1")}"`;else return`"${I.replace(/(["\\$`])/g,"\\$1")}"`},M=process.argv.slice(3).map(L),J={...process.env},K=x.join(Y,"node_modules");J.NODE_PATH=K,J.NODE_PRESERVE_SYMLINKS=1;let T=P(z,[...q,...M],{cwd:Y,stdio:"inherit",shell:!0,detached:!0,env:J});b(T)}catch(Q){console.error(Q.message),process.exit(1)}})}function D($,{name:W,bin:z,preArgs:q=[],createContext:G}){return $.command(`${W||z} [commands..]`,`${z} ${q.join(" ")}`,(Z)=>{return Z.help(!1).version(!1)},async(Z)=>{try{let Q=await G(Z),{projectDir:Y}=Q,L=(K)=>{if(!K.includes(" "))return K;if(process.platform==="win32")return`"${K.replace(/(["^])/g,"^$1")}"`;else return`"${K.replace(/(["\\$`])/g,"\\$1")}"`},M=process.argv.slice(3).map(L);z=x.join(Y,".conda","bin",z||W);let J=P(z,[...q,...M],{cwd:Y,stdio:"inherit",shell:!0,detached:!0,env:{PYTHONPATH:Y}});b(J)}catch(Q){console.error(Q.message),process.exit(1)}})}function e($,{name:W,createContext:z}){return $.command(`${W} <binary> [commands..]`,"Run a binary from conda environment",(q)=>{return q.positional("binary",{type:"string",describe:"Binary name to run from .conda/bin"}).help(!1).version(!1)},async(q)=>{try{let G=await z(q),{projectDir:Z}=G,Q=(K)=>{if(!K.includes(" "))return K;if(process.platform==="win32")return`"${K.replace(/(["^])/g,"^$1")}"`;else return`"${K.replace(/(["\\$`])/g,"\\$1")}"`},Y=q.binary,L=process.argv.slice(4).map(Q),M=x.join(Z,".conda","bin",Y),J=P(M,L,{cwd:Z,stdio:"inherit",shell:!0,detached:!0,env:{PYTHONPATH:Z}});b(J)}catch(G){console.error(G.message),process.exit(1)}})}function $1($,{name:W,preArgs:z=[],createContext:q}){return $.command(`${W} <config> <command> [options..]`,"Run a command with a config context",(G)=>{return G.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)},async(G)=>{try{let Z=await q(G),{projectDir:Q}=Z,Y=G.config,M=(await A1({name:Y,dir:Q,transferEnv:!1,optional:!0,tags:Z.tags}))?.data?.env||void 0,J=G.command,K=process.argv.slice(5),T=P(J,[...z,...K],{cwd:v.existsSync(Q)?Q:process.cwd(),stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...M}});b(T)}catch(Z){console.error(Z.message),process.exit(1)}})}function W1($,{name:W,projectType:z="auto"}){return $.command(`${W} group [options..]`,"Run a command group.",(q)=>{return q.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)},async(q)=>{try{let{runCommandGroup:G}=await import("./index.2pnjg6dc.js");await G({projectType:z,group:q.group,tags:q.ftag,args:q,argv:process.argv})}catch(G){console.error(G.message),process.exit(1)}})}function q1($,{name:W,createContext:z}){return $.command(`${W} [options]`,"Install the project as a binary",(q)=>{return q.option("name",{alias:"n",describe:"Name to use for the installed binary",type:"string"}).option("force",{alias:"f",describe:"Force overwrite if binary already exists",type:"boolean",default:!1}).option("yes",{alias:"y",describe:"Automatically answer yes to all prompts",type:"boolean",default:!1})},async(q)=>{try{let G=await z(q),{projectDir:Z}=G;console.log(y.blue("Compiling project..."));let Q=x.join(Z,".bin");if(!v.existsSync(Q))v.mkdirSync(Q,{recursive:!0});let Y=x.basename(x.dirname(Z)),L=G.project?.projectFileParsed?.features?.cli?.bin,M=q.name||L||Y;console.log(y.blue(`Using binary name: ${M}`));let J=x.join(Q,M),{spawn:K}=await import("child_process"),T=K("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${J}`],{cwd:Z,stdio:"inherit",shell:!0});if(await new Promise((u,F)=>{T.on("close",(_)=>{if(_===0)u();else F(Error(`Compilation failed with code ${_}`))}),T.on("error",(_)=>{F(_)})}),process.platform!=="win32")v.chmodSync(J,493);console.log(y.green(`Binary compiled successfully: ${J}`)),console.log(y.blue("Installing binary..."));let I=["install",J];if(q.name)I.push("--name",q.name);if(q.force)I.push("--force");if(q.yes)I.push("--yes");let f=K("fbin",I,{stdio:"inherit",shell:!0});await new Promise((u,F)=>{f.on("close",(_)=>{if(_===0)u();else F(Error(`Installation failed with code ${_}`))}),f.on("error",(_)=>{F(_)})})}catch(G){console.error(y.red(`Failed to install binary: ${G.message}`)),process.exit(1)}})}import w from"node:path";import B from"node:fs";import z1 from"@fnet/yaml";import R1 from"yaml";async function O($){if($.id)return{id:$.id,buildId:$.buildId,mode:$.mode,protocol:$.protocol||"ac:",templateDir:S("./template/fnode/node"),projectDir:w.resolve(process.cwd(),`./.output/${$.id}`),tags:$.ftag,dev:$.dev};else try{let W=await N1({tags:$.ftag}),z=W.runtime.type==="bun"?"node":W.runtime.type;return{buildId:$.buildId,mode:$.mode,protocol:$.protocol||"src:",templateDir:S(`./template/fnode/${z}`),projectDir:w.resolve(W.projectDir,"./.workspace"),projectSrcDir:w.resolve(W.projectDir,"./src"),projectSrcDirSymlink:w.resolve(W.projectDir,"./.workspace/src-core"),projectAppDir:w.resolve(W.projectDir,"./app"),projectAppDirSymlink:w.resolve(W.projectDir,"./.workspace/app"),projectCliDir:w.resolve(W.projectDir,"./cli"),projectCliDirSymlink:w.resolve(W.projectDir,"./.workspace/cli"),project:W,tags:$.ftag,dev:$.dev}}catch(W){return console.warn(`Warning: Could not load project: ${W.message}`),{projectDir:process.cwd(),tags:$.ftag}}}async function N1({tags:$}){let W=x1(process.cwd());if(!B.existsSync(W))throw Error("fnode.yaml file not found in current directory.");let{raw:z,parsed:q}=await z1({file:W,tags:$}),G=w.dirname(W);q.features=q.features||{};let Z=q.features;if(Z.runtime=Z.runtime||{},Z.runtime.type=Z.runtime.type||"node",Z.runtime.type==="python")Z.runtime.template=Z.runtime.template||"python";else if(Z.runtime.type==="bun")Z.runtime.template=Z.runtime.template||"node";else Z.runtime.template=Z.runtime.template||"node";let Q={libraryAtom:{doc:{...q},fileName:"index"},projectDir:G,projectFilePath:W,projectFileContent:z,projectFileParsed:q,runtime:Z.runtime},Y=w.resolve(G,"fnet/targets.yaml");if(!B.existsSync(Y)){if(Y=w.resolve(G,"node.devops.yaml"),B.existsSync(Y)){let M=w.resolve(G,"fnet");if(!B.existsSync(M))B.mkdirSync(M);B.copyFileSync(Y,w.resolve(G,"fnet/targets.yaml")),B.unlinkSync(Y)}}if(B.existsSync(Y)){let{raw:M,parsed:J}=await z1({file:Y,tags:$}),K=R1.parseDocument(M);Q.devops={filePath:Y,fileContent:M,yamlDocument:K,doc:{...J},type:"library.deploy",save:async()=>{B.writeFileSync(Q.devops.filePath,K.toString())}}}let L=w.resolve(G,"readme.md");if(B.existsSync(L)){let M=B.readFileSync(L,"utf8");Q.readme={filePath:L,fileContent:M,doc:{content:M,"content-type":"markdown"},type:"wiki"}}return Q}function x1($){let W=w.resolve($,"node.yaml"),z=w.resolve($,"fnode.yaml");if(B.existsSync(z))return z;if(B.existsSync(W))try{let q=B.readFileSync(W,"utf8");return B.writeFileSync(z,q,"utf8"),B.unlinkSync(W),console.log(`Migrated node.yaml to fnode.yaml in ${$}`),z}catch(q){return console.error(`Error migrating node.yaml to fnode.yaml: ${q.message}`),W}return z}import k1 from"node:path";import G1 from"node:fs";import E1 from"node:os";import S1 from"@flownet/lib-render-templates-dir";import c from"@fnet/shelljs";var b1={command:"create",describe:"Create a new fnode project",builder:($)=>{return $.option("name",{type:"string",describe:"Project name",demandOption:!0}).option("vscode",{type:"boolean",default:!0,alias:"vs",describe:"Open in VS Code after creation"}).option("runtime",{type:"string",default:"node",choices:["node","python","bun"],describe:"Runtime environment"})},handler:async($)=>{try{let W=process.cwd(),z=S("./template/fnode/project"),q=k1.resolve(W,$.name);if(!G1.existsSync(q))G1.mkdirSync(q);await S1({dir:z,outDir:q,context:{name:$.name,runtime:$.runtime,platform:E1.platform()},copyUnmatchedAlso:!0});let G=await c("fnode build",{cwd:q});if(G.code!==0)throw Error("Failed to build project.");if(o("git")){if(G=await c("git init --initial-branch=main",{cwd:q}),G.code!==0)throw Error("Failed to initialize git.")}if(o("code")&&$.vscode){if(G=await c(`cd ${q} && code .`),G.code!==0)throw Error("Failed to open vscode.")}console.log("Creating project succeeded!"),process.exit(0)}catch(W){console.error("Initialization failed!",W.message),process.exit(1)}}},Q1=b1;import y1 from"node:os";import D1 from"@flownet/lib-render-templates-dir";import f1 from"@fnet/shelljs";var u1={command:"project",describe:"Manage fnode project",builder:($)=>{return $.option("update",{type:"boolean",default:!1,alias:"-u",describe:"Update project files"})},handler:async($)=>{try{let W=S("./template/fnode/project"),z=process.cwd(),q=await O($);if($.update){if(await D1({dir:W,outDir:z,context:{name:q.project.projectFileParsed.name,runtime:q.project.runtime.type,platform:y1.platform()},copyUnmatchedAlso:!0}),(await f1("fnode build",{cwd:z})).code!==0)throw Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(W){console.error("Project failed.",W.message),process.exit(1)}}},Z1=u1;class Y1{static async createBuilder($){if(!$.project)return console.warn("No project provided, defaulting to node runtime"),new(await import("./index.kvedj83h.js")).default($);let W=$.project?.runtime?.type||"node";try{return new(await this.loadBuilderClass(W))($)}catch(z){throw Error(`Failed to create builder for runtime '${W}': ${z.message}`)}}static async loadBuilderClass($){switch($.toLowerCase()){case"node":case"bun":return(await import("./index.kvedj83h.js")).default;case"python":return(await import("./index.hv4s25f0.js")).default;default:throw Error(`Unsupported runtime type: ${$}`)}}}var R=Y1;var v1={command:"build",describe:"Build fnode project",builder:($)=>{return $.option("id",{type:"string",describe:"Project ID"}).option("buildId",{type:"string",alias:"bid",describe:"Build ID"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"],describe:"Build mode"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"}).option("dev",{type:"boolean",default:!1,describe:"Development mode"})},handler:async($)=>{try{let W=await O($),z=await R.createBuilder(W);await z.init(),await z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(W){console.error("Building library failed!",W.message),process.exit(1)}}},K1=v1;var P1={command:"build:dev",describe:"Build fnode project",builder:($)=>{return $.option("id",{type:"string",describe:"Project ID"}).option("buildId",{type:"string",alias:"bid",describe:"Build ID"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"],describe:"Build mode"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"}).option("dev",{type:"boolean",default:!1,describe:"Development mode"})},handler:async($)=>{try{$.dev=!0;let W=await O($),z=await R.createBuilder(W);await z.init(),await z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(W){console.error("Building library failed!",W.message),process.exit(1)}}},U1=P1;var j1={command:"deploy",describe:"Build and deploy fnode project",builder:($)=>{return $.option("id",{type:"string",describe:"Project ID"}).option("buildId",{type:"string",alias:"bid",describe:"Build ID"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"})},handler:async($)=>{try{let W=await O({...$,mode:"all"}),z=await R.createBuilder(W);await z.init(),await z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(W){console.error("Building library failed!",W.message),process.exit(1)}}},J1=j1;var d1={command:"file",describe:"Just create files",builder:($)=>{return $.option("id",{type:"string",describe:"Project ID"}).option("buildId",{type:"string",alias:"bid",describe:"Build ID"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"})},handler:async($)=>{try{let W=await O({...$,mode:"file"}),z=await R.createBuilder(W);await z.init(),await z.build(),console.log("Building library succeeded!"),process.exit(0)}catch(W){console.error("Building library failed!",W.message),process.exit(1)}}},M1=d1;import H1 from"node:path";import j from"node:fs";import m1 from"@fnet/prompt";var g1={command:"input [name]",describe:"Create or modify an input config file",builder:($)=>{return $.positional("name",{type:"string",demandOption:!1,describe:"Input name"})},handler:async($)=>{try{let W=await O($),{project:z}=W,{projectDir:q,projectFileParsed:G}=z,Z=G.input;if(!Z)throw Error("Config schema not found in project file.");if(!Reflect.has($,"name")){let{inputName:K}=await m1({type:"input",name:"inputName",message:"Input name:",initial:"dev"});$.name=K}let Q=H1.resolve(q,".fnet");if(!j.existsSync(Q))j.mkdirSync(Q);let Y=H1.resolve(Q,`${$.name}.fnet`),L=j.existsSync(Y),M=(await import("@fnet/object-from-schema")).default,J=await M({schema:Z,format:"yaml",ref:L?Y:void 0});j.writeFileSync(Y,J)}catch(W){console.error(W.message),process.exit(1)}}},L1=g1;import V from"node:path";import H from"node:fs";import m from"node:os";import{spawn as g}from"node:child_process";import U from"chalk";import A from"@fnet/prompt";import d from"chalk";import O1 from"@fnet/prompt";async function h1($){let{items:W,message:z,nameField:q="name",valueField:G="name",initialValue:Z=null,allowAbort:Q=!0}=$;if(!W||W.length===0)return console.log(d.yellow("No items available for selection.")),null;if(W.length===1&&!Q){let K=W[0],T=typeof K==="string"?K:K[G];return console.log(d.blue(`Only one option available: ${typeof K==="string"?K:K[q]}`)),T}let Y=W.map((K)=>{if(typeof K==="string")return{name:K,value:K,message:K};else return{name:K[G],value:K[G],message:K[q]||K[G]}});if(Q)Y.push({name:"cancel",value:null,message:d.yellow("Cancel")});let L=null;if(Z){let K=Y.findIndex((T)=>T.name===Z);if(K!==-1)L=K}let M="selectedItem",{[M]:J}=await O1({type:"select",name:M,message:z,choices:Y,initial:L});if(J==="cancel")return null;return J}async function l1($){let{items:W,message:z,nameField:q="name",valueField:G="name",initialValues:Z=[],allowAbort:Q=!0}=$;if(!W||W.length===0)return console.log(d.yellow("No items available for selection.")),null;let Y=W.map((K)=>{if(typeof K==="string")return{name:K,value:K,message:K};else return{name:K[G],value:K[G],message:K[q]||K[G]}}),L=[];if(Z&&Z.length>0)L=Y.map((K,T)=>Z.includes(K.name)?T:-1).filter((K)=>K!==-1);let M="selectedItems",J=await O1({type:"multiselect",name:M,message:z,choices:Y,initial:L,hint:"(Use space to select, enter to confirm)",validate:(K)=>{if(K.length===0&&!Q)return"Please select at least one item";return!0}});if(Q&&J[M].length===0)return null;return J[M]}var s={promptForSelection:h1,promptForMultipleSelection:l1};var X=V.join(m.homedir(),".fnet","express");async function T1($){$.command(["$0 [project-name]","create [project-name]"],"Create a new express project",(W)=>{return W.positional("project-name",{describe:"Name of the project",type:"string"}).option("yes",{alias:"y",describe:"Skip all prompts and use defaults",type:"boolean",default:!1}).option("runtime",{describe:"Runtime to use (node, python, bun)",type:"string",choices:["node","python","bun"],default:"node"})},async(W)=>{await p1(W)}).command("list","List express projects",(W)=>{return W.option("today",{describe:"Show only projects created today",type:"boolean",default:!1}).option("type",{describe:"Filter by project type (fnode or fnet)",type:"string",choices:["fnode","fnet"]}).option("all",{describe:"Show all projects regardless of type",type:"boolean",default:!1,alias:"a"}).option("name",{describe:"Filter by project name",type:"string"})},async(W)=>{await n1(W)}).command("open [project-name]","Open an express project",(W)=>{return W.positional("project-name",{describe:"Name of the project to open",type:"string"}).option("latest",{describe:"Open the most recent project",type:"boolean",default:!1})},async(W)=>{await i1(W)}).command("move [project-name] [destination]","Move an express project to a real project location",(W)=>{return W.positional("project-name",{describe:"Name of the project to move",type:"string"}).positional("destination",{describe:"Destination directory",type:"string"}).option("latest",{describe:"Move the most recent project",type:"boolean",default:!1})},async(W)=>{await c1(W)}).command("remove [project-name]","Remove an express project",(W)=>{return W.positional("project-name",{describe:"Name of the project to remove",type:"string"}).option("latest",{describe:"Remove the most recent project",type:"boolean",default:!1}).option("yes",{alias:"y",describe:"Skip confirmation prompt",type:"boolean",default:!1})},async(W)=>{await s1(W)}).command("enter [project-name]","Enter the directory of an express project in the active terminal",(W)=>{return W.positional("project-name",{describe:"Name of the project to enter",type:"string"}).option("latest",{describe:"Enter the most recent project directory",type:"boolean",default:!1})},async(W)=>{await r1(W)}).demandCommand(1,"You need to specify a command").help()}async function p1($){try{if(!H.existsSync(X))H.mkdirSync(X,{recursive:!0});let W=new Date().toISOString().slice(0,10).replace(/-/g,""),z=V.join(X,W);if(!H.existsSync(z))H.mkdirSync(z,{recursive:!0});let q=$.projectName,G,Z=$.runtime;if(!$.yes){if(!q){let T=H.readdirSync(z).filter((F)=>F.startsWith("fnode-")).map((F)=>parseInt(F.replace("fnode-",""),10)).filter((F)=>!isNaN(F)),f=`fnode-${T.length>0?Math.max(...T)+1:1}`;q=(await A([{type:"input",name:"projectName",message:"Enter project name:",default:f}])).projectName}Z=(await A({type:"select",name:"runtime",message:"Select runtime:",choices:["node","python","bun"],initial:Z||"node"})).runtime}else{if(!q){let J=H.readdirSync(z).filter((T)=>T.startsWith("fnode-")).map((T)=>parseInt(T.replace("fnode-",""),10)).filter((T)=>!isNaN(T));q=`fnode-${J.length>0?Math.max(...J)+1:1}`}if(!Z)Z="node"}if(G=V.join(z,q),H.existsSync(G)){let J=1;while(H.existsSync(V.join(z,`${q}-${J}`)))J++;q=`${q}-${J}`,G=V.join(z,q)}if(!$.yes){if(!(await A([{type:"confirm",name:"proceed",message:`Create express project "${q}" in ${G}?`,default:!0}])).proceed){console.log(U.yellow("Project creation cancelled."));return}}console.log(U.blue(`Creating express project "${q}" in ${G}...`));let Q=V.dirname(G),L=["create","--name",V.basename(G)];if(L.push("--runtime",Z),$.yes)L.push("--yes");if(!H.existsSync(Q))H.mkdirSync(Q,{recursive:!0});let M=g("fnode",L,{stdio:"inherit",shell:!0,cwd:Q});return new Promise((J,K)=>{M.on("close",(T)=>{if(T===0)if(console.log(U.green(`
|
|
3
|
+
Express project "${q}" created successfully!`)),console.log(U.blue(`
|
|
4
|
+
Project location: ${G}`)),!$.yes)o1(G);else J();else console.error(U.red(`
|
|
5
|
+
Failed to create express project "${q}".`)),K(Error(`Process exited with code ${T}`))})})}catch(W){console.error(U.red(`Error creating express project: ${W.message}`)),process.exit(1)}}async function n1($){try{if(!H.existsSync(X)){console.log(U.yellow("No express projects found."));return}let W=H.readdirSync(X).filter((Q)=>/^\d{8}$/.test(Q)).sort((Q,Y)=>Y.localeCompare(Q));if($.today){let Q=new Date().toISOString().slice(0,10).replace(/-/g,""),Y=W.indexOf(Q);if(Y===-1){console.log(U.yellow("No express projects found for today."));return}W.splice(0,Y),W.splice(1)}let z=[];if(!$.type&&!$.all)$.type="fnode";for(let Q of W){let Y=V.join(X,Q),L=H.readdirSync(Y);for(let M of L){let J=V.join(Y,M),K=H.statSync(J),T="unknown";if(M.startsWith("fnode-")||H.existsSync(V.join(J,"fnode.yaml")))T="fnode";else if(M.startsWith("fnet-")||H.existsSync(V.join(J,"fnet.yaml")))T="fnet";if($.type&&T!==$.type)continue;if($.name&&!M.includes($.name))continue;let I=`${Q.slice(0,4)}-${Q.slice(4,6)}-${Q.slice(6,8)}`;z.push({name:M,type:T,date:I,path:J,created:K.birthtime})}}if(z.sort((Q,Y)=>Y.created-Q.created),z.length===0){console.log(U.yellow("No express projects found matching the criteria."));return}console.log(U.blue(`
|
|
6
|
+
Express Projects:`));let q=(await import("./index.bhapgrs7.js")).default,G=["NAME","TYPE","DATE","PATH"],Z=q.createTable(G,{chars:{mid:"","mid-mid":"","left-mid":"","right-mid":""}});for(let Q of z){let Y=Q.path;if(Y.startsWith(m.homedir()))Y="~"+Y.substring(m.homedir().length);Z.push([U.white(Q.name),Q.type==="fnet"?U.cyan(Q.type):Q.type==="fnode"?U.green(Q.type):Q.type,Q.date,Y])}console.log(Z.toString()),console.log(U.green("Projects: ")+U.yellow(z.filter((Q)=>Q.type==="fnode").length+" fnode, ")+U.cyan(z.filter((Q)=>Q.type==="fnet").length+" fnet")),console.log(U.blue(`
|
|
7
|
+
Total: ${z.length} projects`))}catch(W){console.error(U.red(`Error listing express projects: ${W.message}`)),process.exit(1)}}async function i1($){try{if(!H.existsSync(X)){console.log(U.yellow("No express projects found."));return}let W;if($.latest){if(W=await h(),!W){console.log(U.yellow("No express projects found."));return}}else if($.projectName){if(W=await l($.projectName),!W){console.log(U.yellow(`Project "${$.projectName}" not found.`));return}}else{let z=await p();if(!z){console.log(U.yellow("No project selected."));return}W=V.join(X,z)}await r(W)}catch(W){console.error(U.red(`Error opening express project: ${W.message}`)),process.exit(1)}}async function c1($){try{let W=process.cwd(),z=W.includes(X),q;if(z)q=W,console.log(U.blue(`Using current express project: ${V.basename(q)}`));else if($.latest){if(q=await h(),!q){console.log(U.yellow("No express projects found."));return}}else if($.projectName){if(q=await l($.projectName),!q){console.log(U.yellow(`Project "${$.projectName}" not found.`));return}}else{let Q=await p();if(!Q){console.log(U.yellow("No project selected."));return}q=V.join(X,Q)}let G=$.destination;if(!G)G=(await A({type:"input",name:"destination",message:"Enter destination directory:",initial:V.join(process.cwd(),V.basename(q))})).destination;if(G.startsWith("~"))G=V.join(m.homedir(),G.slice(1));if(G=V.resolve(G),G.startsWith(q+V.sep)||G===q){console.log(U.red("Destination cannot be inside the source directory."));return}if(H.existsSync(G)){if(!H.statSync(G).isDirectory()){console.log(U.red(`Destination "${G}" is not a directory.`));return}if(H.readdirSync(G).length>0){if(!(await A({type:"confirm",name:"overwrite",message:`Destination "${G}" is not empty. Continue anyway?`,initial:!1})).overwrite){console.log(U.yellow("Project move cancelled."));return}}}else H.mkdirSync(G,{recursive:!0});if(console.log(U.blue(`Moving project from ${q} to ${G}...`)),X1(q,G),console.log(U.green(`
|
|
8
|
+
Project moved successfully to ${G}`)),(await A({type:"confirm",name:"deleteOriginal",message:"Delete the original express project?",initial:!1})).deleteOriginal)H.rmSync(q,{recursive:!0,force:!0}),console.log(U.green("Original project deleted."));await r(G)}catch(W){console.error(U.red(`Error moving express project: ${W.message}`)),process.exit(1)}}async function h(){let $=H.readdirSync(X).filter((Q)=>/^\d{8}$/.test(Q)).sort((Q,Y)=>Y.localeCompare(Q));if($.length===0)return null;let W=$[0],z=V.join(X,W),q=H.readdirSync(z);if(q.length===0)return null;let G=null,Z=0;for(let Q of q){let Y=V.join(z,Q),L=H.statSync(Y);if(L.birthtimeMs>Z)Z=L.birthtimeMs,G=Y}return G}async function l($){let W=H.readdirSync(X).filter((z)=>/^\d{8}$/.test(z)).sort((z,q)=>q.localeCompare(z));for(let z of W){let q=V.join(X,z),G=H.readdirSync(q);if(G.includes($))return V.join(q,$);let Z=G.filter((Q)=>Q.includes($));if(Z.length>0)if(Z.length===1)return V.join(q,Z[0]);else{let Q=Z.map((L)=>({name:V.join(q,L),value:V.join(q,L),message:`${L} (${z})`})),Y=await s.promptForSelection({items:Q,message:`Multiple projects match "${$}". Please select one:`,nameField:"message",valueField:"value",allowAbort:!0});if(Y===null)return console.log(U.yellow("Operation cancelled.")),null;return Y}}return null}async function p(){let $=[],W=H.readdirSync(X).filter((q)=>/^\d{8}$/.test(q)).sort((q,G)=>G.localeCompare(q));for(let q of W){let G=V.join(X,q),Z=H.readdirSync(G);for(let Q of Z){let Y=V.join(G,Q),L=H.statSync(Y),M=`${q}/${Q}`;$.push({name:M,value:M,message:`${Q} (${q})`,created:L.birthtime})}}if($.sort((q,G)=>G.created-q.created),$.length===0)return null;let z=await s.promptForSelection({items:$,message:"Select a project:",nameField:"message",valueField:"value",allowAbort:!0});if(z===null)return console.log(U.yellow("Operation cancelled.")),null;return z}async function o1($){try{if((await A({type:"confirm",name:"openIDE",message:"Would you like to open the project in an IDE?",initial:!0})).openIDE)await r($)}catch(W){console.error(U.red(`Error opening IDE: ${W.message}`))}}async function r($){let W=await V1("code --version"),z=await V1("code-insiders --version"),q=null;if(W&&z)q=(await A({type:"select",name:"ide",message:"Which IDE would you like to use?",choices:[{name:"Visual Studio Code",value:"code"},{name:"Visual Studio Code Insiders",value:"code-insiders"}]})).ide;else if(W)q="code";else if(z)q="code-insiders";else{console.log(U.yellow("No supported IDE found. Please open the project manually.")),console.log(U.blue(`Project path: ${$}`));return}console.log(U.blue(`Opening project in ${q}...`)),console.log(U.blue(`Project path: ${$}`));let G=g(q,[$],{stdio:"inherit",shell:!0});return new Promise((Z,Q)=>{G.on("close",(Y)=>{if(Y===0)console.log(U.green(`Project opened in ${q}.`)),Z();else console.error(U.red(`Failed to open project in ${q}.`)),Q(Error(`Process exited with code ${Y}`))})})}async function V1($){return new Promise((W)=>{g($,{shell:!0,stdio:"ignore"}).on("close",(q)=>{W(q===0)})})}function X1($,W){if(!H.existsSync(W))H.mkdirSync(W,{recursive:!0});let z=H.readdirSync($,{withFileTypes:!0});for(let q of z){let G=V.join($,q.name),Z=V.join(W,q.name);if(q.isDirectory()){if(q.name===".git"||q.name===".workspace")continue;X1(G,Z)}else H.copyFileSync(G,Z)}}async function s1($){try{if(!H.existsSync(X)){console.log(U.yellow("No express projects found."));return}let W;if($.latest){if(W=await h(),!W){console.log(U.yellow("No express projects found."));return}}else if($.projectName){if(W=await l($.projectName),!W){console.log(U.yellow(`Project "${$.projectName}" not found.`));return}}else{let q=await p();if(!q){console.log(U.yellow("No project selected."));return}W=V.join(X,q)}let z=V.basename(W);if(!$.yes){if(!(await A({type:"confirm",name:"confirm",message:`Are you sure you want to remove project "${z}"?`,initial:!1})).confirm){console.log(U.yellow("Project removal cancelled."));return}}console.log(U.blue(`Removing project "${z}"...`)),H.rmSync(W,{recursive:!0,force:!0}),console.log(U.green(`Project "${z}" removed successfully.`))}catch(W){console.error(U.red(`Error removing express project: ${W.message}`)),process.exit(1)}}async function r1($){try{if(!H.existsSync(X)){console.log(U.yellow("No express projects found."));return}let W;if($.latest){if(W=await h(),!W){console.log(U.yellow("No express projects found."));return}}else if($.projectName){if(W=await l($.projectName),!W){console.log(U.yellow(`Project "${$.projectName}" not found.`));return}}else{let G=await p();if(!G){console.log(U.yellow("No project selected."));return}W=V.join(X,G)}console.log(U.blue(`Entering project directory: ${W}`)),console.log(U.yellow(`
|
|
9
|
+
Opening a new shell in the project directory...`));let z=process.env.SHELL||"/bin/bash",q=g(z,[],{stdio:"inherit",cwd:W,shell:!0});return new Promise((G)=>{q.on("close",()=>{console.log(U.green(`
|
|
10
|
+
Returned from project directory.`)),G()})})}catch(W){console.error(U.red(`Error entering express project directory: ${W.message}`)),process.exit(1)}}import B1 from"node:path";import{fileURLToPath as W$}from"node:url";import a1 from"node:fs";import n from"node:path";import{fileURLToPath as t1}from"node:url";var e1=n.dirname(t1(import.meta.url));function $$({baseDir:$}){$=$||e1;let W=$;while(W!==n.parse(W).root){let z=n.join(W,"node_modules");if(a1.existsSync(z))return z;W=n.dirname(W)}return null}var C1=$$;var q$=B1.dirname(W$(import.meta.url));function w1(){let $=C1({baseDir:q$}),W=process.platform==="win32"?";":":";if($)process.env.PATH=`${B1.join($,"/.bin")}${W}${process.env.PATH}`}t();w1();async function G$(){try{let $=z$(process.argv.slice(2)).usage("Usage: $0 <command> [options]").command(Q1).command(Z1).command(K1).command(U1).command(J1).command(M1).command(L1).command("express","Create and manage express projects",T1);$=C($,{bin:"npm",createContext:O}),$=C($,{bin:"node",createContext:O}),$=C($,{bin:"bun",createContext:O}),$=C($,{name:"serve",bin:"bun",preArgs:["run","serve","--"],createContext:O}),$=C($,{name:"watch",bin:"bun",preArgs:["run","watch","--"],createContext:O}),$=C($,{name:"app",bin:"bun",preArgs:["run","app","--"],createContext:O}),$=C($,{name:"cli",bin:"bun",preArgs:["run","cli","--"],createContext:O}),$=C($,{name:"cli:dev",bin:"bun",preArgs:["run","cli:dev","--"],createContext:O}),$=C($,{name:"cli:compile",bin:"bun",preArgs:["run","cli:compile","--"],createContext:O}),$=C($,{name:"cli:compile:dev",bin:"bun",preArgs:["run","cli:compile:dev","--"],createContext:O}),$=C($,{name:"cli:install",bin:"bun",preArgs:["run","cli:install","--"],createContext:O}),$=C($,{name:"compile",bin:"bun",preArgs:["run","compile","--"],createContext:O}),$=q1($,{name:"install",createContext:O}),$=C($,{bin:"npx",createContext:O}),$=C($,{bin:"cdk",createContext:O}),$=C($,{bin:"aws",createContext:O}),$=$1($,{name:"with",createContext:O}),$=W1($,{name:"run",projectType:"fnode"}),$=D($,{name:"python",createContext:O}),$=D($,{name:"python3",createContext:O}),$=D($,{name:"pip",createContext:O}),$=D($,{name:"pip3",createContext:O}),$=e($,{name:"bin",createContext:O}),$.demandCommand(1,"You need at least one command before moving on").help().version().argv}catch($){console.error(I1.red(`Fatal error: ${$.message}`)),process.exit(1)}}G$().catch(($)=>{console.error(I1.red(`Fatal error: ${$.message}`)),process.exit(1)});
|
package/dist/frun/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import G from"yargs";import{hideBin as A}from"yargs/helpers";import{promisify as W}from"node:util";import X from"tree-kill";var F=W(X),M=!1;function J(){process.on("uncaughtException",($)=>{if(!M)M=!0,setTimeout(()=>process.exit(1),500)}),process.on("unhandledRejection",($)=>{if(!M)M=!0,setTimeout(()=>process.exit(1),500)})}import U from"fs";import N from"path";import Z from"@fnet/yaml";import _ from"@fnet/shell-flow";async function O({projectType:$,group:B,tags:I,args:H,argv:q}){try{let L=await C($),{parsed:V}=await Z({file:L.path,tags:I}),z=V.commands;if(!z)throw Error(`Commands section not found in ${L.name}`);let D=z[B];if(!D)throw Error(`Command group '${B}' not found in ${L.name}`);
|
|
2
|
+
import G from"yargs";import{hideBin as A}from"yargs/helpers";import{promisify as W}from"node:util";import X from"tree-kill";var F=W(X),M=!1;function J(){process.on("uncaughtException",($)=>{if(!M)M=!0,setTimeout(()=>process.exit(1),500)}),process.on("unhandledRejection",($)=>{if(!M)M=!0,setTimeout(()=>process.exit(1),500)})}import U from"fs";import N from"path";import Z from"@fnet/yaml";import _ from"@fnet/shell-flow";async function O({projectType:$,group:B,tags:I,args:H,argv:q}){try{let L=await C($),{parsed:V}=await Z({file:L.path,tags:I}),z=V.commands;if(!z)throw Error(`Commands section not found in ${L.name}`);let D=z[B];if(!D)throw Error(`Command group '${B}' not found in ${L.name}`);await _({commands:D,context:{args:H,argv:q,projectType:L.type}})}catch(L){console.error(`Error: ${L.message}`),process.exit(1)}}async function C($){let B=process.cwd(),I=N.resolve(B,"fnode.yaml"),H=N.resolve(B,"fnet.yaml");if($==="fnode"){if(U.existsSync(I))return{path:I,name:"fnode.yaml",type:"fnode"};throw Error("fnode.yaml file not found in current directory")}if($==="fnet"){if(U.existsSync(H))return{path:H,name:"fnet.yaml",type:"fnet"};throw Error("fnet.yaml file not found in current directory")}if(U.existsSync(I))return{path:I,name:"fnode.yaml",type:"fnode"};if(U.existsSync(H))return{path:H,name:"fnet.yaml",type:"fnet"};throw Error("No project file (fnode.yaml or fnet.yaml) found in current directory")}var R={command:"$0 <group> [options..]",describe:"Run a command group from project file",builder:($)=>{return $.parserConfiguration({}).middleware((B)=>{let I=/^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)+$/;Object.keys(B).forEach((H)=>{if(I.test(H)){let q=H.replace(/-/g,"_");B[q]=B[H]}})}).positional("group",{type:"string",describe:"Command group to run"}).option("ftag",{type:"array",describe:"Tags for conditional configuration"}).example("$0 build","Run the build command group").example("$0 test --ftag dev","Run the test command group with dev tag")},handler:async($)=>{try{await O({projectType:"auto",group:$.group,tags:$.ftag,args:$,argv:process.argv})}catch(B){console.error(`Error: ${B.message}`),process.exit(1)}}},Q=R;J();async function w(){try{let $=G(A(process.argv)).usage("Usage: $0 <command> [options]").command(Q).help().version().argv}catch($){console.error(`Fatal error: ${$.message}`),process.exit(1)}}w().catch(($)=>{console.error(`Fatal error: ${$.message}`),process.exit(1)});
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./index.r19p3bpa.js";import C from"fs";import H from"path";import K from"@fnet/yaml";import L from"@fnet/shell-flow";async function U({projectType:B,group:A,tags:x,args:q,argv:I}){try{let z=await M(B),{parsed:J}=await K({file:z.path,tags:x}),D=J.commands;if(!D)throw Error(`Commands section not found in ${z.name}`);let E=D[A];if(!E)throw Error(`Command group '${A}' not found in ${z.name}`);console.log(q),await L({commands:E,context:{args:q,argv:I,projectType:z.type}})}catch(z){console.error(`Error: ${z.message}`),process.exit(1)}}async function M(B){let A=process.cwd(),x=H.resolve(A,"fnode.yaml"),q=H.resolve(A,"fnet.yaml");if(B==="fnode"){if(C.existsSync(x))return{path:x,name:"fnode.yaml",type:"fnode"};throw Error("fnode.yaml file not found in current directory")}if(B==="fnet"){if(C.existsSync(q))return{path:q,name:"fnet.yaml",type:"fnet"};throw Error("fnet.yaml file not found in current directory")}if(C.existsSync(x))return{path:x,name:"fnode.yaml",type:"fnode"};if(C.existsSync(q))return{path:q,name:"fnet.yaml",type:"fnet"};throw Error("No project file (fnode.yaml or fnet.yaml) found in current directory")}export{U as runCommandGroup,M as detectProjectFile};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./index.cvxrf34y.js";import C from"fs";import H from"path";import K from"@fnet/yaml";import L from"@fnet/shell-flow";async function U({projectType:B,group:A,tags:x,args:q,argv:I}){try{let z=await M(B),{parsed:J}=await K({file:z.path,tags:x}),D=J.commands;if(!D)throw Error(`Commands section not found in ${z.name}`);let E=D[A];if(!E)throw Error(`Command group '${A}' not found in ${z.name}`);console.log(q),await L({commands:E,context:{args:q,argv:I,projectType:z.type}})}catch(z){console.error(`Error: ${z.message}`),process.exit(1)}}async function M(B){let A=process.cwd(),x=H.resolve(A,"fnode.yaml"),q=H.resolve(A,"fnet.yaml");if(B==="fnode"){if(C.existsSync(x))return{path:x,name:"fnode.yaml",type:"fnode"};throw Error("fnode.yaml file not found in current directory")}if(B==="fnet"){if(C.existsSync(q))return{path:q,name:"fnet.yaml",type:"fnet"};throw Error("fnet.yaml file not found in current directory")}if(C.existsSync(x))return{path:x,name:"fnode.yaml",type:"fnode"};if(C.existsSync(q))return{path:q,name:"fnet.yaml",type:"fnet"};throw Error("No project file (fnode.yaml or fnet.yaml) found in current directory")}export{U as runCommandGroup,M as detectProjectFile};
|