@fnet/cli 0.4.6 → 0.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fnet/index.js +1 -1
- package/dist/fnode/{index.kf49tavj.js → index.cs7b2zj8.js} +1 -1
- package/dist/fnode/index.js +1 -1
- package/package.json +1 -1
- package/template/fnet/core/object.js +10 -10
- package/template/fnet/node/src/default/macros/block-header.js.njk +0 -3
- package/template/fnet/node/src/default/macros/block-run-footer.js.njk +1 -1
- package/template/fnet/node/src/default/workflow.js.njk +4 -2
- package/template/fnet/core/print.js +0 -1
- package/template/fnet/node/src/default/macros/workflow-header.js.njk +0 -7
package/dist/fnet/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import{a as I0,b as M0}from"./index.2084z2ed.js";import{c as h,d as b9,e as g}from"./index.r19p3bpa.js";var y9=b9((vq,v9)=>{v9.exports=k9;function k9(Q,Z,X){if(Q instanceof RegExp)Q=P9(Q,X);if(Z instanceof RegExp)Z=P9(Z,X);var q=D9(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 P9(Q,Z){var X=Z.match(Q);return X?X[0]:null}k9.range=D9;function D9(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 c9=b9((yq,m9)=>{var E9=y9();m9.exports=I5;var x9="\x00SLASH"+Math.random()+"\x00",u9="\x00OPEN"+Math.random()+"\x00",a6="\x00CLOSE"+Math.random()+"\x00",f9="\x00COMMA"+Math.random()+"\x00",h9="\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(x9).split("\\{").join(u9).split("\\}").join(a6).split("\\,").join(f9).split("\\.").join(h9)}function R5(Q){return Q.split(x9).join("\\").split(u9).join("{").split(a6).join("}").split(f9).join(",").split(h9).join(".")}function g9(Q){if(!Q)return[""];var Z=[],X=E9("{","}",Q);if(!X)return Q.split(",");var{pre:q,body:Y,post:J}=X,H=q.split(",");H[H.length-1]+="{"+Y+"}";var W=g9(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=E9("{","}",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+a6+q.post,o0(Q);return[Q]}var _;if(z)_=q.body.split(/\.\./);else if(_=g9(q.body),_.length===1){if(_=o0(_[0],!1).map(C5),_.length===1)return J.map(function(v7){return q.pre+_[0]+v7})}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 w=$;M(w,A);w+=B){var y;if(K){if(y=String.fromCharCode(w),y==="\\")y=""}else if(y=String(w),F){var v=U-y.length;if(v>0){var Y0=Array(v+1).join("0");if(w<0)y="-"+Y0+y.slice(1);else y=Y0+y}}O.push(y)}}else{O=[];for(var J0=0;J0<_.length;J0++)O.push.apply(O,o0(_[J0],!1))}for(var J0=0;J0<O.length;J0++)for(var H=0;H<J.length;H++){var W=Y+O[J0]+J[H];if(!Z||z||W)X.push(W)}}return X}});import S1 from"yargs";import RZ from"chalk";import{promisify as bZ}from"node:util";import kZ from"tree-kill";var h7=bZ(kZ),D0=!1;async function e8(Q,Z){if(D0)return;if(D0=!0,!Q.killed&&Q.pid)try{if(await h7(Q.pid,"SIGTERM").catch(()=>{}),await new Promise((q)=>setTimeout(q,500)),!Q.killed)await h7(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(!D0)process.exit(Z)})}function g7(){process.on("uncaughtException",(Q)=>{if(!D0)D0=!0,setTimeout(()=>process.exit(1),500)}),process.on("unhandledRejection",(Q)=>{if(!D0)D0=!0,setTimeout(()=>process.exit(1),500)})}import s0 from"node:path";import{spawn as m7}from"node:child_process";import B8 from"node:fs";import r0 from"chalk";import DZ 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=($)=>{if(!$.includes(" "))return $;if(process.platform==="win32")return`"${$.replace(/(["^])/g,"^$1")}"`;else return`"${$.replace(/(["\\$`])/g,"\\$1")}"`},K=process.argv.slice(3).map(V),z={...process.env},G=s0.join(W,"node_modules");z.NODE_PATH=G;let _=z.NODE_OPTIONS||"";z.NODE_OPTIONS=`${_} --preserve-symlinks`.trim();let O=m7(X,[...q,...K],{cwd:W,stdio:"inherit",shell:!0,detached:!0,env:z});Q6(O)}catch(H){console.error(H.message),process.exit(1)}})}function c7(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 DZ({name:W,dir:H,transferEnv:!1,optional:!0,tags:J.tags}))?.data?.env||void 0,z=Y.command,G=process.argv.slice(5),_=m7(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 l7(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 d7(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 $0 from"node:path";import v0 from"node:fs";import Z6 from"@fnet/yaml";import vZ 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:$0.resolve(process.cwd(),`./.output/${Q.id}`),tags:Q.ftag,dev:Q.dev};else try{let Z=await yZ({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:$0.resolve(Z.projectDir,"./.workspace"),projectSrcDir:$0.resolve(Z.projectDir,"./src"),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 yZ({tags:Q}){let Z=EZ(process.cwd());if(!v0.existsSync(Z))throw Error("fnet.yaml file not found in current directory.");let{raw:X,parsed:q}=await Z6({file:Z,tags:Q}),Y=$0.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(v0.existsSync($0.join(Y,"fnet","flows.yaml")))G=$0.join("fnet","flows.yaml");let _=q.main||G,O=$0.resolve(Y,_);if(!v0.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=$0.resolve(Y,"fnet/targets.yaml");if(v0.existsSync(K)){let{raw:G,parsed:_}=await Z6({file:K,tags:Q}),O=vZ.parseDocument(G);V.devops={filePath:K,fileContent:G,yamlDocument:O,doc:{..._},type:"workflow.deploy",save:async()=>{v0.writeFileSync(V.devops.filePath,O.toString())}}}let z=$0.resolve(Y,"readme.md");if(v0.existsSync(z)){let G=v0.readFileSync(z,"utf8");V.readme={filePath:z,fileContent:G,doc:{content:G,"content-type":"markdown"},type:"wiki"}}return V}function EZ(Q){return $0.resolve(Q,"fnet.yaml")}import xZ from"node:path";import p7 from"node:fs";import uZ from"node:os";import fZ from"@flownet/lib-render-templates-dir";import X6 from"@fnet/shelljs";var hZ={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=xZ.resolve(Z,Q.name);if(!p7.existsSync(q))p7.mkdirSync(q);await fZ({dir:X,outDir:q,context:Q,copyUnmatchedAlso:!0,platform:uZ.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=hZ;import gZ from"node:os";import mZ from"@flownet/lib-render-templates-dir";import cZ from"@fnet/shelljs";var lZ={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 mZ({dir:Z,outDir:X,context:{name:q.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0,platform:gZ.platform()}),(await cZ("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)}}},a7=lZ;import N from"node:fs";import k from"node:path";import ZZ from"yaml";import XZ from"@fnet/shelljs";import O8 from"nunjucks";import qZ from"lodash.clonedeep";import Q1 from"isobject";import{randomUUID as YZ}from"node:crypto";import q6 from"winston";var{combine:n7,timestamp:r7,printf:dZ,colorize:pZ}=q6.format,s7=dZ(({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
|
-
${H} ${JSON.stringify(J,null,2)}`;return V}),R8=q6.createLogger({level:process.env.FNET_LOG_LEVEL||"info",format:n7(r7({format:"HH:mm:ss.SSS"}),s7),transports:[new q6.transports.Console({format:n7(pZ(),r7({format:"HH:mm:ss.SSS"}),s7)})]}),t7=(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=t7("tree"),x=t7("bpmn"),o7=process.env.FNET_LOG_CATEGORIES?.split(",")||[],j=(Q)=>{if(o7.length===0)return!1;return o7.includes(Q)};import{Api as I8}from"@flownet/lib-atom-api-js";class e7{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 f0 from"lodash.merge";import C8 from"node:fs";import _0 from"node:path";import h0 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=_0.resolve(Q,`./${Z}.tsx`);if(!C8.existsSync(X))X=_0.resolve(Q,`./${Z}.ts`);if(!C8.existsSync(X))X=_0.resolve(Q,`./${Z}.jsx`);if(!C8.existsSync(X))X=_0.resolve(Q,`./${Z}.js`);if(!C8.existsSync(X))return{};let q=X,Y=_0.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=_0.resolve(X.project.projectDir),H=A6({dir:_0.resolve(J,"./app")});if(H.file){q("Parsing app entry imports...");let A=await h0({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 h0({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:_0.resolve(J,"./cli")});if(W.file){q("Parsing cli entry imports...");let A=await h0({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 h0({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:_0.resolve(J,"./src")});if(A.file){q("Parsing src entry imports...");let U=await h0({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 h0({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:`${_0.normalize(Y.app.dir||".")}`,files:[_0.normalize("./dist/**/*")],cors:!0,open:!1};if(Y.babel_options=f0(G,Y.babel_options||Y.babel?.options),Y.browsersync_options=f0(O,Y.browsersync_options||Y.browsersync?.options||{}),Y.replace_options=f0(_,Y.replace_options||Y.replace?.options||{}),Reflect.has(Y.browsersync_options,"proxy"))delete Y.browsersync_options.server;Y.rollup=Y.rollup||{},Y.rollup_output=f0(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=f0(Y.browsersync_options,U.browsersync_options),U.replace_options=f0(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 aZ 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:"get-value",version:"^3"}),Z.push({package:"set-value",version:"^4"});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"});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 nZ 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:"get-value",version:"^3"}),Z.push({package:"set-value",version:"^4"});if(Q.doc.features.form_enabled){if(Q.doc.features.dependency_auto_enabled){let J="^18.2";if(q("Fetching React versions"),J=`^${(await nZ({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 Q9 from"node:fs";import Z9 from"node:path";import rZ 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=Z9.resolve(X.projectDir,"src/app");if(!Q9.existsSync(H))Q9.mkdirSync(H,{recursive:!0});let W=["index.js.njk"];if(Q.doc.features.app.html!==!1)W.push("index.html.njk");await rZ({pattern:W,dir:Z9.resolve(J,"src/app"),outDir:H,context:Y})}import q9 from"nunjucks";import C0 from"node:fs";import w0 from"node:path";import tZ from"@flownet/lib-parse-imports-js";import sZ from"@fnet/npm-pick-versions";import oZ from"object-hash";import L8 from"node:fs";import X9 from"node:path";async function g0({projectDir:Q,name:Z,setProgress:X,count:q=1}){let Y,H=oZ(["npm-pick-versions",Z,q]),W=X9.join(Q,".cache"),V=X9.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 sZ({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:w0.resolve(Z.projectDir,"src/app/index.js"),dev:Q.doc.features.app.dev===!0});if(Q.doc.features.cli.enabled===!0)V.push({file:w0.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 tZ({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 w=await g0({name:F.package,projectDir:Z.projectDir,setProgress:Y});(U.dev===!0?q:X).push({package:F.package,subpath:F.subpath,version:w.minorRange,type:"npm"})}}let K={atom:Q,packageDependencies:X,packageDevDependencies:q},z=Z.templateDir,_=q9.compile(C0.readFileSync(w0.resolve(z,"package.json.njk"),"utf8"),q9.configure(z)).render(K),O=Z.projectDir,$=w0.resolve(O,"package.json");C0.writeFileSync($,_,"utf8");let A=w0.resolve(Z.project.projectDir,"fnet");if(C0.existsSync(A)){let U=w0.resolve(Z.projectDir,"fnet");if(!C0.existsSync(U))C0.mkdirSync(U);let B=C0.readdirSync(A);for(let M of B){let R=w0.resolve(A,M);if(!C0.lstatSync(R).isFile())continue;let F=w0.resolve(U,M);C0.copyFileSync(R,F)}}}import Y9 from"node:fs";import J9 from"node:path";import eZ 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=J9.resolve(X.projectDir,"src/cli");if(!Y9.existsSync(H))Y9.mkdirSync(H,{recursive:!0});await eZ({pattern:["index.js.njk"],dir:J9.resolve(J,"src/cli"),outDir:H,context:Y})}import j6 from"node:fs";import T6 from"node:path";import W9 from"nunjucks";import Q5 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 Q5({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,_=W9.compile(j6.readFileSync(T6.resolve(z,"rollup.config.mjs.njk"),"utf8"),W9.configure(z)).render(Y),O=X.projectDir,$=T6.resolve(O,"rollup.config.mjs");j6.writeFileSync($,_,"utf8")}import S6 from"node:fs";import H9 from"node:path";import V9 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=V9.compile(S6.readFileSync(H9.resolve(J,"build.js.njk"),"utf8"),V9.configure(J)).render(Y),V=X.projectDir,K=H9.resolve(V,"build.js");S6.writeFileSync(K,W,"utf8"),S6.chmodSync(K,"755")}import P6 from"node:fs";import b6 from"node:path";import Z5 from"nunjucks";import X5 from"ajv/dist/2020.js";import q5 from"ajv/dist/standalone/index.js";import Y5 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=Z5.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 X5({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});Y5(O);let $=O.compile(Y),U=q5(O,$)+`
|
|
3
|
+
${H} ${JSON.stringify(J,null,2)}`;return V}),R8=q6.createLogger({level:process.env.FNET_LOG_LEVEL||"info",format:n7(r7({format:"HH:mm:ss.SSS"}),s7),transports:[new q6.transports.Console({format:n7(pZ(),r7({format:"HH:mm:ss.SSS"}),s7)})]}),t7=(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=t7("tree"),x=t7("bpmn"),o7=process.env.FNET_LOG_CATEGORIES?.split(",")||[],j=(Q)=>{if(o7.length===0)return!1;return o7.includes(Q)};import{Api as I8}from"@flownet/lib-atom-api-js";class e7{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 f0 from"lodash.merge";import C8 from"node:fs";import _0 from"node:path";import h0 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=_0.resolve(Q,`./${Z}.tsx`);if(!C8.existsSync(X))X=_0.resolve(Q,`./${Z}.ts`);if(!C8.existsSync(X))X=_0.resolve(Q,`./${Z}.jsx`);if(!C8.existsSync(X))X=_0.resolve(Q,`./${Z}.js`);if(!C8.existsSync(X))return{};let q=X,Y=_0.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=_0.resolve(X.project.projectDir),H=A6({dir:_0.resolve(J,"./app")});if(H.file){q("Parsing app entry imports...");let A=await h0({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 h0({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:_0.resolve(J,"./cli")});if(W.file){q("Parsing cli entry imports...");let A=await h0({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 h0({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:_0.resolve(J,"./src")});if(A.file){q("Parsing src entry imports...");let U=await h0({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 h0({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:`${_0.normalize(Y.app.dir||".")}`,files:[_0.normalize("./dist/**/*")],cors:!0,open:!1};if(Y.babel_options=f0(G,Y.babel_options||Y.babel?.options),Y.browsersync_options=f0(O,Y.browsersync_options||Y.browsersync?.options||{}),Y.replace_options=f0(_,Y.replace_options||Y.replace?.options||{}),Reflect.has(Y.browsersync_options,"proxy"))delete Y.browsersync_options.server;Y.rollup=Y.rollup||{},Y.rollup_output=f0(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=f0(Y.browsersync_options,U.browsersync_options),U.replace_options=f0(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 aZ 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 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"});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 nZ 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 nZ({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 Q9 from"node:fs";import Z9 from"node:path";import rZ 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=Z9.resolve(X.projectDir,"src/app");if(!Q9.existsSync(H))Q9.mkdirSync(H,{recursive:!0});let W=["index.js.njk"];if(Q.doc.features.app.html!==!1)W.push("index.html.njk");await rZ({pattern:W,dir:Z9.resolve(J,"src/app"),outDir:H,context:Y})}import q9 from"nunjucks";import C0 from"node:fs";import w0 from"node:path";import tZ from"@flownet/lib-parse-imports-js";import sZ from"@fnet/npm-pick-versions";import oZ from"object-hash";import L8 from"node:fs";import X9 from"node:path";async function g0({projectDir:Q,name:Z,setProgress:X,count:q=1}){let Y,H=oZ(["npm-pick-versions",Z,q]),W=X9.join(Q,".cache"),V=X9.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 sZ({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:w0.resolve(Z.projectDir,"src/app/index.js"),dev:Q.doc.features.app.dev===!0});if(Q.doc.features.cli.enabled===!0)V.push({file:w0.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 tZ({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 w=await g0({name:F.package,projectDir:Z.projectDir,setProgress:Y});(U.dev===!0?q:X).push({package:F.package,subpath:F.subpath,version:w.minorRange,type:"npm"})}}let K={atom:Q,packageDependencies:X,packageDevDependencies:q},z=Z.templateDir,_=q9.compile(C0.readFileSync(w0.resolve(z,"package.json.njk"),"utf8"),q9.configure(z)).render(K),O=Z.projectDir,$=w0.resolve(O,"package.json");C0.writeFileSync($,_,"utf8");let A=w0.resolve(Z.project.projectDir,"fnet");if(C0.existsSync(A)){let U=w0.resolve(Z.projectDir,"fnet");if(!C0.existsSync(U))C0.mkdirSync(U);let B=C0.readdirSync(A);for(let M of B){let R=w0.resolve(A,M);if(!C0.lstatSync(R).isFile())continue;let F=w0.resolve(U,M);C0.copyFileSync(R,F)}}}import Y9 from"node:fs";import J9 from"node:path";import eZ 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=J9.resolve(X.projectDir,"src/cli");if(!Y9.existsSync(H))Y9.mkdirSync(H,{recursive:!0});await eZ({pattern:["index.js.njk"],dir:J9.resolve(J,"src/cli"),outDir:H,context:Y})}import j6 from"node:fs";import T6 from"node:path";import W9 from"nunjucks";import Q5 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 Q5({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,_=W9.compile(j6.readFileSync(T6.resolve(z,"rollup.config.mjs.njk"),"utf8"),W9.configure(z)).render(Y),O=X.projectDir,$=T6.resolve(O,"rollup.config.mjs");j6.writeFileSync($,_,"utf8")}import S6 from"node:fs";import H9 from"node:path";import V9 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=V9.compile(S6.readFileSync(H9.resolve(J,"build.js.njk"),"utf8"),V9.configure(J)).render(Y),V=X.projectDir,K=H9.resolve(V,"build.js");S6.writeFileSync(K,W,"utf8"),S6.chmodSync(K,"755")}import P6 from"node:fs";import b6 from"node:path";import Z5 from"nunjucks";import X5 from"ajv/dist/2020.js";import q5 from"ajv/dist/standalone/index.js";import Y5 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=Z5.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 X5({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});Y5(O);let $=O.compile(Y),U=q5(O,$)+`
|
|
4
4
|
export { schema31 as schema };`;P6.writeFileSync(b6.resolve(G,"src/default/validate_input.js"),U,"utf8")}import K9 from"node:fs";import _9 from"node:path";import z9 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=z9.compile(K9.readFileSync(_9.resolve(J,".gitignore.njk"),"utf8"),z9.configure(J)).render(Y),V=X.projectDir,K=_9.resolve(V,".gitignore");K9.writeFileSync(K,W,"utf8")}import G9 from"node:fs";import U9 from"node:path";import $9 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=$9.compile(G9.readFileSync(U9.resolve(J,"tsconfig.json.njk"),"utf8"),$9.configure(J)).render(Y),V=X.projectDir,K=U9.resolve(V,"tsconfig.json");G9.writeFileSync(K,W,"utf8")}import F8 from"nunjucks";import S0 from"node:fs";import y0 from"node:path";import M9 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=y0.resolve(Z.project.projectDir,"fnet/how-to.md");if(S0.existsSync(V)){let A=S0.readFileSync(V,"utf8");W.howto=A}let K=y0.resolve(Z.project.projectDir,"fnet/input.yaml");if(S0.existsSync(K)){let A=await M9({file:K,tags:Z.tags});W.input=A.content}let z=y0.resolve(Z.project.projectDir,"fnet/output.yaml");if(S0.existsSync(z)){let A=await M9({file:z,tags:Z.tags});W.output=A.content}let G=Z.templateDir,O=F8.compile(S0.readFileSync(y0.resolve(G,"readme.md.njk"),"utf8"),F8.configure(G)).render(W),$=y0.resolve(H,"readme.md");S0.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(S0.readFileSync(y0.resolve(z,"readme.md.njk"),"utf8"),F8.configure(z)).render(K),O=Z.projectDir,$=y0.resolve(O,"readme.md");S0.writeFileSync($,_,"utf8")}}import J5 from"node:path";import O9 from"@fnet/shelljs";async function E6({setProgress:Q,context:Z}){let X=Z.projectDir;await Q({message:"Prettifiying source files."});let q=J5.join("src","**","*");if(M0("bun")){let Y=await O9(`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 O9(`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 W5 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 W5("tsc",{cwd:q})).code!==0)throw Error("Couldnt create .d.ts files.")}import A9 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 A9(`bun install ${Z.doc.features.npm_install_flags}`,{cwd:q})).code!==0)throw Error("Couldnt install npm packages.")}else if((await A9(`npm install ${Z.doc.features.npm_install_flags}`,{cwd:q})).code!==0)throw Error("Couldnt install npm packages.")}import B9 from"node:fs";import H5 from"node:path";import{spawn as V5}from"node:child_process";async function R9(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=H5.resolve(Z,"package.json");if(!B9.existsSync(V))throw Error(`package.json not found at ${V}`);let K=JSON.parse(B9.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,_=V5(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 f6 from"node:path";async function h6({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=f6.join(X,"node_modules");Y.NODE_PATH=J,Y.PATH=`${f6.join(J,"/.bin")}${f6.delimiter}${Y.PATH}`;let H=Y.NODE_OPTIONS||"";Y.NODE_OPTIONS=`${H} --preserve-symlinks`.trim(),await R9({projectDir:X,scriptName:q,shell:!0,detached:!0,env:Y})}var I9=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 Z1 from"@flownet/lib-parse-node-url";import L9 from"bpmn-moddle";import C9 from"dagre";import c6 from"lodash.clonedeep";var g6={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 F9(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=m6(G,"to"),W.bpmn.outside=m6(_,"to"),W.bpmn.starts=m6(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 m6(Q,Z){return Q.filter((X,q,Y)=>{return Y.map((J)=>J[Z]).indexOf(X[Z])===q})}function l6(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"}),w=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:w.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((w)=>{return{...w,from:R.indexKey}});let F=R.bpmn.edges.find((w)=>w.next===!0);if(F){let w=t({...Q,parent:J,bpmnType:"bpmn:EndEvent",type:"end",name:F.to});F.to=w.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),w=t({...Q,parent:J,bpmnType:"bpmn:EndEvent",type:"end",name:R.to,location:F+1});M.bpmn.edges.push({from:M.indexKey,to:w.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((w)=>{return{...w,from:F.indexKey}}),M.bpmn.edges=[{from:M.indexKey,to:F.indexKey,type:"bpmn:SequenceFlow"}],M.bpmn.outside=[]})}l6({...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 d6(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 C9.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)}),C9.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,d6({...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]);F9({nodes:q,nodeIndex:X,root:Z}),l6({nodes:q,nodeIndex:X,root:Z});let Y=void 0,J=new L9({atom:g6}),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=_,d6({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=c6(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]);F9({nodes:W,nodeIndex:H,root:J}),l6({nodes:W,nodeIndex:H,root:J});let V=new L9({atom:g6}),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,d6({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(c6(Q))}async function j9(Q={}){let Z=c6(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 X1 from"@fnet/config";import q1 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+`
|
|
6
6
|
`+V+` |
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{b as jT,c as hT,d as lT}from"./index.s0nk6cv8.js";import{f as j}from"./index.05n3mvs9.js";import"./index.cvxrf34y.js";import F from"node:fs";import b from"node:path";import aT from"nunjucks";import eT from"@flownet/lib-parse-imports-js";import T0 from"@flownet/lib-parse-node-url";import I from"lodash.merge";import h from"node:fs";import R from"node:path";import _ from"@flownet/lib-parse-imports-js";import PT from"lodash.merge";function S({feature:$,features:O,packageDevDependencies:z}){let{name:W,packages:T,options:K,extraCheck:Q,explicit:G}=$,Y=`${W}_enabled`,M=O.rollup_output||{},A=Object.keys(M),J=K||{},V=O[W]?.options;if(V)J=PT(J,V);let X=!O[W]||O[W]?.enabled===!1;A.forEach((Z)=>{let q=O.rollup_output[Z];if(!q)return;if(Reflect.has(q,W)){if(X||!q[W]||q[W]?.enabled===!1){delete q[W];return}if(q[W]===!0)q[W]={enabled:!0,options:J}}else if(!X&&!G&&O[Y]!==!1)q[W]={enabled:!0};else return;q[W]=q[W]||{},q[W].options={...J,...q[W].options}});let y=A.some((Z)=>O.rollup_output[Z][W]?.enabled===!0);if(Q)y=Q()&&y;if(O[Y]=y,y)T.forEach((Z)=>z.push({package:Z[0],version:Z[1]}))}function w($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({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:W,packageDevDependencies:z})}function P($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:W,packageDevDependencies:z})}function v($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:W,packageDevDependencies:z})}function m($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:W,packageDevDependencies:z})}function k($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:W,packageDevDependencies:z})}function g($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:W,packageDevDependencies:z})}function f($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:W,packageDevDependencies:z})}function o($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:W,packageDevDependencies:z})}function i($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;if(W.runtime.type==="bun")return;S({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:W,packageDevDependencies:z})}function u($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:W,packageDevDependencies:z})}function d($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:W,packageDevDependencies:z})}function D($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;if(W.runtime.type==="bun")return;let T={};if(W.app?.enabled===!0){if(T.targets=T.targets||[],T.targets.push({src:"./src/app/index.html",dest:W.app.dir}),!Reflect.has(W.app,"copy")){if(!Reflect.has(W,"copy"))W.copy=!0}}S({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:T},features:W,packageDevDependencies:z})}function c($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features,T=W.css&&W.css.enabled!==!1,K=[];if(T)K.push(["rollup-plugin-postcss","^4"]),K.push(["sass","^1.66"]),(W.css?.options?.plugins||[]).forEach((G)=>{switch(G.name){case"postcss-import":K.push(["postcss-import","^15"]);break;case"postcss-url":K.push(["postcss-url","^10"]);break;case"postcss-preset-env":K.push(["postcss-preset-env","^9"]);break;case"autoprefixer":K.push(["autoprefixer","^10"]);break;case"cssnano":K.push(["cssnano","^6"]);break}});S({feature:{name:"css",packages:K},features:W,packageDevDependencies:z})}function r({dir:$,name:O="index"}){let z=R.resolve($,`./${O}.tsx`);if(!h.existsSync(z))z=R.resolve($,`./${O}.ts`);if(!h.existsSync(z))z=R.resolve($,`./${O}.jsx`);if(!h.existsSync(z))z=R.resolve($,`./${O}.js`);if(!h.existsSync(z))return{};let W=z,T=R.extname(z);return{file:W,ext:T,ts:T===".ts"||T===".tsx",name:O}}async function n($){let{atom:O,context:z,setProgress:W}=$;W("Initializing features..."),O.doc.features=O.doc.features||{};let T=O.doc.features;T.project=T.project||{},T.project.format=T.project.format||T.project_format||"esm",T.project_format=T.project.format,T.dts_enabled=T.dts===!0||typeof T.dts<"u"&&T.dts!==!1;let K=R.resolve(z.project.projectDir),Q=r({dir:R.resolve(K,"./app")});if(Q.file){W("Parsing app entry imports...");let Z=await _({file:Q.file,recursive:!0}),q=Z.all.some((H)=>H.usesJSX===!0&&H.type==="local");T.app_uses_jsx=q,T.app_has_entry=!0,Z=await _({file:Q.file}),q=Z.all.some((H)=>H.usesJSX===!0&&H.type==="local"),T.app_entry_uses_jsx=q,T.app_entry_is_ts=Q.ts,T.app_entry_ext=Q.ext}let G=r({dir:R.resolve(K,"./cli")});if(G.file){W("Parsing cli entry imports...");let Z=await _({file:G.file,recursive:!0}),q=Z.all.some((H)=>H.usesJSX===!0&&H.type==="local");T.cli_uses_jsx=q,T.cli_has_entry=!0,Z=await _({file:G.file}),q=Z.all.some((H)=>H.usesJSX===!0&&H.type==="local"),T.cli_entry_uses_jsx=q,T.cli_entry_is_ts=G.ts,T.cli_entry_ext=G.ext}if(O.type==="workflow.lib"){let Z=r({dir:R.resolve(K,"./src")});if(Z.file){W("Parsing src entry imports...");let q=await _({file:Z.file,recursive:!0}),H=q.all.some((U)=>U.usesJSX===!0&&U.type==="local");T.src_uses_jsx=H,T.src_has_entry=!0,q=await _({file:Z.file}),H=q.all.some((U)=>U.usesJSX===!0&&U.type==="local"),T.src_entry_uses_jsx=H,T.src_entry_is_ts=Z.ts,T.src_entry_ext=Z.ext}}let Y=Reflect.has(T,"app_entry_uses_jsx")?T.app_entry_uses_jsx===!0:T.src_entry_uses_jsx===!0,M=Reflect.has(T,"cli_entry_uses_jsx")?T.cli_entry_uses_jsx===!0:T.src_entry_uses_jsx===!0;if(T.form_enabled=Y||M||T.form===!0||T.form?.enabled===!0,T.multiple_enabled=T.multiple_enabled||T.multiple===!0||T.multiple?.enabled===!0,T.app===!1)T.app={enabled:!1};else if(T.app===!0)T.app={enabled:!0,extend:T.app_has_entry===!0,export:!0,react:Y};else T.app={enabled:!0,extend:T.app_has_entry===!0,export:!0,react:Y,...T.app||{}};if(T.app.enabled=T.app.enabled===!0&&(O.doc.features.form_enabled===!0||T.app.extend===!0||T.app.enabled===!0),T.app.format=T.app.format||"esm",T.app.folder=T.app.folder||T.app.format||"default",T.cli===!1)T.cli={enabled:!1};else if(T.cli===!0)T.cli={enabled:!0,extend:T.cli_has_entry===!0,export:!0,react:M};else T.cli={enabled:!0,extend:T.cli_has_entry===!0,export:!0,react:M,...T.cli||{}};if(T.cli.enabled=T.cli.enabled===!0&&(O.doc.features.form_enabled===!1||T.cli.extend===!0||T.cli.enabled===!0),T.cli.format=T.cli.format||"esm",T.cli.folder=T.cli.folder||T.cli.folder||"esm",T.cli.node_options=T.cli.node?.options||T.cli.node_options||"",T.cli.bin=T.cli.bin||O.doc.name,T.cli.installable=T.cli.installable===!0,T.cli.enabled)O.doc["npm::bin"]=T.cli.bin;T.json=T.cli.enabled||T.json;let A={cjs:{format:"cjs",context:T.form_enabled?"window":"global",babel:T.src_uses_jsx===!0||!1,browser:!1,replace:!0,terser:!0,enabled:T.cjs!==!1,copy:!1},esm:{format:"esm",context:T.form_enabled?"window":"global",babel:T.src_uses_jsx===!0||!1,browser:!1,replace:!0,terser:!1,enabled:T.esm!==!1,copy:!0},iife:{format:"iife",context:T.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:T.iife===!0,terser:!0,copy:!1}},J={targets:{browsers:"last 9 versions, not dead",node:"18"}},V={};if(T.webos===!0)A.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(T.electron===!0)A.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(T.nextjs===!0)A.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(T.ios===!0)A.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(T.macos===!0)A.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(T.app.enabled===!0)T.app.dir=`./dist/app/${T.app.folder}`,T.app.output={file:`./dist/app/${T.app.folder}/index.js`,dir:`./dist/app/${T.app.folder}/`,...T.app.output||{}},T.app.input={file:"./src/app/index.js",dir:"./src/app/",...T.app.input||{}},A.app={format:T.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:T.app.input.file,output_dir:T.app.dir,terser:!0,output_exports:T.app.export===!1?"none":"auto",browsersync:!0};if(T.cli.enabled===!0)T.cli.dir=`./dist/cli/${T.cli.folder}`,T.cli.output={file:`./dist/cli/${T.cli.folder}/index.js`,dir:`./dist/cli/${T.cli.folder}/`,...T.cli.output||{}},T.cli.input={file:"./src/cli/index.js",dir:"./src/cli/",...T.cli.input||{}},A.cli={format:T.cli.format,context:"global",babel:T.src_uses_jsx===!0||T.cli_uses_jsx===!0||!1,browser:!1,replace:!0,enabled:!0,input:T.cli.input.file,output_dir:T.cli.dir,banner:"#!/usr/bin/env bun",terser:!0,output_exports:T.cli.export===!1?"none":"auto"};let X={server:".",startPath:`${R.normalize(T.app.dir||".")}`,files:[R.normalize("./dist/**/*")],cors:!0,open:!1};if(T.babel_options=I(J,T.babel_options||T.babel?.options),T.browsersync_options=I(X,T.browsersync_options||T.browsersync?.options||{}),T.replace_options=I(V,T.replace_options||T.replace?.options||{}),Reflect.has(T.browsersync_options,"proxy"))delete T.browsersync_options.server;T.rollup=T.rollup||{},T.rollup_output=I(A,T.rollup_output||T.rollup?.output||{}),T.preact_enabled=T.preact===!0||T.preact&&T.preact?.enabled!==!1;let y=Object.keys(A);for(let Z of y){let q=A[Z];if(!q)continue;if(T.rollup[Z]===!1){delete T.rollup_output[Z];continue}if(q.babel_options=q.babel_options||T.babel_options,q.browsersync_options=I(T.browsersync_options,q.browsersync_options),q.replace_options=I(T.replace_options,q.replace_options),T.preact_enabled)q.alias_enabled=!0,q.alias=q.alias||{},q.alias.entries=q.alias.entries||{},q.alias.entries.react="preact/compat",q.alias.entries["react-dom"]="preact/compat";if(T.form_enabled||T.babel)q.babel=!0}y=Object.keys(T.rollup_output),T.babel_enabled=y.some((Z)=>T.rollup_output[Z].babel===!0),T.browser_enabled=y.some((Z)=>T.rollup_output[Z].babel===!0),T.browsersync_enabled=T.browsersync!==!1&&y.some((Z)=>T.rollup_output[Z].browsersync===!0),T.browsersync_enabled=T.browsersync_enabled&&T.app.enabled,T.dependency_auto_enabled=T.dependency_auto!==!1&&T.dependency_auto?.enabled!==!1,T.npm_install_flags=T.npm_install_flags||"",T.react_version=T.react_version||T.react?.version||18,T.bpmn=T.bpmn||{},T.bpmn.enabled=T.bpmn.enabled!==!1,T.bpmn.per_flow=T.bpmn.per_flow===!0,c($),D($),d($),u($),i($),f($),o($),g($),k($),m($),v($),w($),P($)}import vT from"@fnet/npm-list-versions";async function p({atom:$,packageDependencies:O,packageDevDependencies:z,setProgress:W}){W("Initializing dependencies");let T=$.doc.dependencies||[];if(T.filter((K)=>!K.dev).forEach((K)=>O.push(K)),T.filter((K)=>K.dev).forEach((K)=>z.push(K)),$.type==="workflow")O.push({package:"get-value",version:"^3"}),O.push({package:"set-value",version:"^4"});if($.doc.features.form_enabled){if($.doc.features.dependency_auto_enabled){let K="^18.2";if(W("Fetching React versions"),K=`^${(await vT({name:"react",groupBy:{major:!0}})).find((Y)=>Y[0]===$.doc.features.react_version.toString())[0]}`,O.push({package:"react",version:K}),O.push({package:"react-dom",version:K}),$.type==="workflow")O.push({package:"@fnet/react-app",version:"^0.1"}),O.push({package:"@fnet/react-app-state",version:"^0.1"})}}if($.doc.features.preact_enabled)O.push({package:"preact",version:"^10"});if($.doc.features.cli.enabled===!0){if(O.push({package:"@fnet/args",version:"^0.1"}),$.doc.features.cli.fargs&&$.doc.features.cli.fargs?.enabled!==!1)O.push({package:"@fnet/config",version:"0.2.21"});if($.doc.features.cli.mcp&&$.doc.features.cli.mcp.enabled===!0)O.push({package:"@modelcontextprotocol/sdk",version:"^1.10"}),O.push({package:"express",version:"^4.18"})}if($.doc.features.render&&$.doc.features.render.enabled!==!1)z.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"});if(z.push({package:"@babel/core",version:"^7"}),z.push({package:"@rollup/plugin-commonjs",version:"^28"}),z.push({package:"@rollup/plugin-node-resolve",version:"^16"}),z.push({package:"@rollup/plugin-replace",version:"^6"}),z.push({package:"rollup",version:"^4"}),$.doc.features.dts_enabled)z.push({package:"rollup-plugin-dts",version:"^6"});if(z.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),z.push({package:"@rollup/plugin-alias",version:"^5"}),z.push({package:"fs-extra",version:"^11"}),$.doc.features.babel_enabled)z.push({package:"@rollup/plugin-babel",version:"^6"}),z.push({package:"@babel/preset-env",version:"^7"}),z.push({package:"@babel/preset-react",version:"^7"}),$.doc.features.babel?.options?.plugins?.forEach((K)=>{switch(K[0]){case"@babel/plugin-proposal-decorators":z.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":z.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":z.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":z.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":z.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"});break}});if(z.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),$.doc.features.browsersync_enabled)z.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}import mT from"@fnet/npm-list-versions";async function s({atom:$,packageDependencies:O,packageDevDependencies:z,setProgress:W}){W("Initializing dependencies for Bun");let T=$.doc.dependencies||[];if(T.filter((K)=>!K.dev).forEach((K)=>O.push(K)),T.filter((K)=>K.dev).forEach((K)=>z.push(K)),$.type==="workflow")O.push({package:"get-value",version:"^3"}),O.push({package:"set-value",version:"^4"});if($.doc.features.form_enabled){if($.doc.features.dependency_auto_enabled){let K="^18.2";if(W("Fetching React versions"),K=`^${(await mT({name:"react",groupBy:{major:!0}})).find((Y)=>Y[0]===$.doc.features.react_version.toString())[0]}`,O.push({package:"react",version:K}),O.push({package:"react-dom",version:K}),$.type==="workflow")O.push({package:"@fnet/react-app",version:"^0.1"}),O.push({package:"@fnet/react-app-state",version:"^0.1"})}}if($.doc.features.preact_enabled)O.push({package:"preact",version:"^10"});if($.doc.features.cli.enabled===!0){if(O.push({package:"@fnet/args",version:"^0.1"}),$.doc.features.cli.fargs&&$.doc.features.cli.fargs?.enabled!==!1)O.push({package:"@fnet/config",version:"0.2.21"});if($.doc.features.cli.mcp&&$.doc.features.cli.mcp.enabled===!0)O.push({package:"@modelcontextprotocol/sdk",version:"^1.10"}),O.push({package:"express",version:"^4.18"})}if($.doc.features.render&&$.doc.features.render.enabled!==!1)z.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"})}import ST from"node:fs";import UT from"node:path";import kT from"@flownet/lib-render-templates-dir";async function t({atom:$,setProgress:O,context:z,packageDependencies:W}){if($.doc.features.app.enabled!==!0)return;await O({message:"Creating app folder"});let T={atom:$,packageDependencies:W,ts:Date.now()},K=z.templateDir,Q=UT.resolve(z.projectDir,"src/app");if(!ST.existsSync(Q))ST.mkdirSync(Q,{recursive:!0});let G=["index.js.njk"];if($.doc.features.app.html!==!1)G.push("index.html.njk");await kT({pattern:G,dir:UT.resolve(K,"src/app"),outDir:Q,context:T})}import XT from"nunjucks";import N from"node:fs";import E from"node:path";import oT from"@flownet/lib-parse-imports-js";import gT from"@fnet/npm-pick-versions";import fT from"object-hash";import l from"node:fs";import yT from"node:path";async function C({projectDir:$,name:O,setProgress:z,count:W=1}){let T,Q=fT(["npm-pick-versions",O,W]),G=yT.join($,".cache"),Y=yT.join(G,Q+".json");if(l.existsSync(Y)){if(z)z(`Picking npm version of ${O} from cache ...`);T=JSON.parse(l.readFileSync(Y,"utf8"))}else{if(z)z(`Picking npm version of ${O} ...`);T=await gT({name:O,count:W}),l.mkdirSync(G,{recursive:!0}),l.writeFileSync(Y,JSON.stringify(T),"utf8")}return T}async function a({atom:$,context:O,packageDependencies:z,packageDevDependencies:W,setProgress:T}){await T({message:"Creating package.json."}),z.filter((q)=>q.dev===!0).forEach((q)=>{if(!W.find((U)=>U.package===q.package))W.push(q);let H=z.findIndex((U)=>U.package===q.package);z.splice(H,1)});let Q=z.find((q)=>q.package==="react"),G=z.find((q)=>q.package==="react-dom");if(Q&&!G)z.push({package:"react-dom",version:Q.version});else if(Q&&G)G.version=Q.version;if(Q&&$.doc.features.react_version>=17){if(!z.find((q)=>q.package==="@emotion/react"))z.push({package:"@emotion/react",version:"^11"});if(!z.find((q)=>q.package==="@emotion/styled"))z.push({package:"@emotion/styled",version:"^11"})}let Y=[];if($.doc.features.app.enabled===!0)Y.push({file:E.resolve(O.projectDir,"src/app/index.js"),dev:$.doc.features.app.dev===!0});if($.doc.features.cli.enabled===!0)Y.push({file:E.resolve(O.projectDir,"src/cli/index.js"),dev:$.doc.features.cli.dev===!0});for await(let q of Y){let H=q.file;if(!N.existsSync(H))throw Error(`App file not found: ${H}`);let L=(await oT({file:H,recursive:!0,verbose:!1})).all;for await(let B of L){if(B.type!=="npm")continue;if(z.find((x)=>x.package===B.package))continue;if(W.find((x)=>x.package===B.package))continue;let wT=await C({name:B.package,projectDir:O.projectDir,setProgress:T});(q.dev===!0?W:z).push({package:B.package,subpath:B.subpath,version:wT.minorRange,type:"npm"})}}let M={atom:$,packageDependencies:z,packageDevDependencies:W},A=O.templateDir,V=XT.compile(N.readFileSync(E.resolve(A,"package.json.njk"),"utf8"),XT.configure(A)).render(M),X=O.projectDir,y=E.resolve(X,"package.json");N.writeFileSync(y,V,"utf8");let Z=E.resolve(O.project.projectDir,"fnet");if(N.existsSync(Z)){let q=E.resolve(O.projectDir,"fnet");if(!N.existsSync(q))N.mkdirSync(q);let H=N.readdirSync(Z);for(let U of H){let L=E.resolve(Z,U);if(!N.lstatSync(L).isFile())continue;let B=E.resolve(q,U);N.copyFileSync(L,B)}}}import VT from"node:fs";import JT from"node:path";import iT from"@flownet/lib-render-templates-dir";async function e({atom:$,setProgress:O,context:z,packageDependencies:W}){if($.doc.features.cli.enabled!==!0)return;await O({message:"Creating cli."});let T={atom:$,packageDependencies:W},K=z.templateDir,Q=JT.resolve(z.projectDir,"src/cli");if(!VT.existsSync(Q))VT.mkdirSync(Q,{recursive:!0});await iT({pattern:["index.js.njk"],dir:JT.resolve(K,"src/cli"),outDir:Q,context:T})}import TT from"node:fs";import $T from"node:path";import bT from"nunjucks";import uT from"@flownet/lib-parse-imports-js";async function zT({atom:$,setProgress:O,context:z,packageDependencies:W}){await O({message:"Creating rollup file."});let T={atom:$,packageDependencies:W},K=$T.resolve(z.projectDir,"src","default/index.js");if(!TT.existsSync(K))throw Error(`Entry file not found: ${K}`);let G=(await uT({file:K,recursive:!0})).all.filter((Z)=>Z.type==="node").map((Z)=>Z.path),Y=$.doc.features.rollup_output,M=Object.keys(Y);for(let Z=0;Z<M.length;Z++){let q=M[Z],H=Y[q];if(H.browser===!0){if(G.length>0){H.globals_enabled=!0,H.globals=H.globals||[],H.globals=H.globals.concat(G.map((U)=>{return{key:U,value:U}})),H.alias_enabled=!0,H.alias=H.alias||{},H.alias.entries=H.alias.entries||{};for(let U=0;U<G.length;U++){let L=G[U];H.alias.entries[L]=`node:${L}`,H.alias.entries[`node:${L}`]=L}H.external_enabled=!0,H.external=H.external||[],H.external=H.external.concat(G)}}}let A=z.templateDir,V=bT.compile(TT.readFileSync($T.resolve(A,"rollup.config.mjs.njk"),"utf8"),bT.configure(A)).render(T),X=z.projectDir,y=$T.resolve(X,"rollup.config.mjs");TT.writeFileSync(y,V,"utf8")}import OT from"node:fs";import RT from"node:path";import LT from"nunjucks";async function WT({atom:$,setProgress:O,context:z,packageDependencies:W}){await O({message:"Creating build.js file."});let T={atom:$,packageDependencies:W},K=z.templateDir,G=LT.compile(OT.readFileSync(RT.resolve(K,"build.js.njk"),"utf8"),LT.configure(K)).render(T),Y=z.projectDir,M=RT.resolve(Y,"build.js");OT.writeFileSync(M,G,"utf8"),OT.chmodSync(M,"755")}import KT from"node:fs";import qT from"node:path";import dT from"nunjucks";import DT from"ajv/dist/2020.js";import cT from"ajv/dist/standalone/index.js";import rT from"ajv-formats";async function GT({atom:$,setProgress:O,context:z,njEnv:W}){if($.doc.features.cli.enabled!==!0)return;await O({message:"Creating input args."});let T={},K=[];if($.doc.input)T=$.doc.input;else T={type:"object",properties:{},required:[]};if($.doc.features.cli.fargs&&$.doc.features.cli.fargs?.enabled!==!1){let H=$.doc.features.cli.fargs,U={type:"string",description:"Config name to load args",hidden:!1},L={type:"array",description:"Tags to filter the config",hidden:!1};if(Reflect.has(H,"default"))U.default=H.default}let G={imports:K,atom:$},Y=z.templateDir,A=dT.compile(KT.readFileSync(qT.resolve(Y,"src/default/input.args.js.njk"),"utf8"),W).render(G),J=z.projectDir,V=qT.resolve(J,"src/default/input.args.js");KT.writeFileSync(V,A,"utf8");let X=new DT({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});rT(X);let y=X.compile(T),q=cT(X,y)+`
|
|
1
|
+
import{b as jT,c as hT,d as lT}from"./index.s0nk6cv8.js";import{f as j}from"./index.05n3mvs9.js";import"./index.cvxrf34y.js";import F from"node:fs";import b from"node:path";import aT from"nunjucks";import eT from"@flownet/lib-parse-imports-js";import T0 from"@flownet/lib-parse-node-url";import I from"lodash.merge";import h from"node:fs";import R from"node:path";import _ from"@flownet/lib-parse-imports-js";import PT from"lodash.merge";function S({feature:$,features:O,packageDevDependencies:z}){let{name:W,packages:T,options:K,extraCheck:Q,explicit:G}=$,Y=`${W}_enabled`,M=O.rollup_output||{},A=Object.keys(M),J=K||{},V=O[W]?.options;if(V)J=PT(J,V);let X=!O[W]||O[W]?.enabled===!1;A.forEach((Z)=>{let q=O.rollup_output[Z];if(!q)return;if(Reflect.has(q,W)){if(X||!q[W]||q[W]?.enabled===!1){delete q[W];return}if(q[W]===!0)q[W]={enabled:!0,options:J}}else if(!X&&!G&&O[Y]!==!1)q[W]={enabled:!0};else return;q[W]=q[W]||{},q[W].options={...J,...q[W].options}});let y=A.some((Z)=>O.rollup_output[Z][W]?.enabled===!0);if(Q)y=Q()&&y;if(O[Y]=y,y)T.forEach((Z)=>z.push({package:Z[0],version:Z[1]}))}function w($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({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:W,packageDevDependencies:z})}function P($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:W,packageDevDependencies:z})}function v($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:W,packageDevDependencies:z})}function m($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:W,packageDevDependencies:z})}function k($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]],expilicit:!0},features:W,packageDevDependencies:z})}function g($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:W,packageDevDependencies:z})}function f($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:W,packageDevDependencies:z})}function i($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:W,packageDevDependencies:z})}function o($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;if(W.runtime.type==="bun")return;S({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:W,packageDevDependencies:z})}function u($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:W,packageDevDependencies:z})}function d($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;S({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:W,packageDevDependencies:z})}function D($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features;if(W.runtime.type==="bun")return;let T={};if(W.app?.enabled===!0){if(T.targets=T.targets||[],T.targets.push({src:"./src/app/index.html",dest:W.app.dir}),!Reflect.has(W.app,"copy")){if(!Reflect.has(W,"copy"))W.copy=!0}}S({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:T},features:W,packageDevDependencies:z})}function c($){let{atom:O,packageDevDependencies:z}=$,W=O.doc.features,T=W.css&&W.css.enabled!==!1,K=[];if(T)K.push(["rollup-plugin-postcss","^4"]),K.push(["sass","^1.66"]),(W.css?.options?.plugins||[]).forEach((G)=>{switch(G.name){case"postcss-import":K.push(["postcss-import","^15"]);break;case"postcss-url":K.push(["postcss-url","^10"]);break;case"postcss-preset-env":K.push(["postcss-preset-env","^9"]);break;case"autoprefixer":K.push(["autoprefixer","^10"]);break;case"cssnano":K.push(["cssnano","^6"]);break}});S({feature:{name:"css",packages:K},features:W,packageDevDependencies:z})}function r({dir:$,name:O="index"}){let z=R.resolve($,`./${O}.tsx`);if(!h.existsSync(z))z=R.resolve($,`./${O}.ts`);if(!h.existsSync(z))z=R.resolve($,`./${O}.jsx`);if(!h.existsSync(z))z=R.resolve($,`./${O}.js`);if(!h.existsSync(z))return{};let W=z,T=R.extname(z);return{file:W,ext:T,ts:T===".ts"||T===".tsx",name:O}}async function n($){let{atom:O,context:z,setProgress:W}=$;W("Initializing features..."),O.doc.features=O.doc.features||{};let T=O.doc.features;T.project=T.project||{},T.project.format=T.project.format||T.project_format||"esm",T.project_format=T.project.format,T.dts_enabled=T.dts===!0||typeof T.dts<"u"&&T.dts!==!1;let K=R.resolve(z.project.projectDir),Q=r({dir:R.resolve(K,"./app")});if(Q.file){W("Parsing app entry imports...");let Z=await _({file:Q.file,recursive:!0}),q=Z.all.some((H)=>H.usesJSX===!0&&H.type==="local");T.app_uses_jsx=q,T.app_has_entry=!0,Z=await _({file:Q.file}),q=Z.all.some((H)=>H.usesJSX===!0&&H.type==="local"),T.app_entry_uses_jsx=q,T.app_entry_is_ts=Q.ts,T.app_entry_ext=Q.ext}let G=r({dir:R.resolve(K,"./cli")});if(G.file){W("Parsing cli entry imports...");let Z=await _({file:G.file,recursive:!0}),q=Z.all.some((H)=>H.usesJSX===!0&&H.type==="local");T.cli_uses_jsx=q,T.cli_has_entry=!0,Z=await _({file:G.file}),q=Z.all.some((H)=>H.usesJSX===!0&&H.type==="local"),T.cli_entry_uses_jsx=q,T.cli_entry_is_ts=G.ts,T.cli_entry_ext=G.ext}if(O.type==="workflow.lib"){let Z=r({dir:R.resolve(K,"./src")});if(Z.file){W("Parsing src entry imports...");let q=await _({file:Z.file,recursive:!0}),H=q.all.some((U)=>U.usesJSX===!0&&U.type==="local");T.src_uses_jsx=H,T.src_has_entry=!0,q=await _({file:Z.file}),H=q.all.some((U)=>U.usesJSX===!0&&U.type==="local"),T.src_entry_uses_jsx=H,T.src_entry_is_ts=Z.ts,T.src_entry_ext=Z.ext}}let Y=Reflect.has(T,"app_entry_uses_jsx")?T.app_entry_uses_jsx===!0:T.src_entry_uses_jsx===!0,M=Reflect.has(T,"cli_entry_uses_jsx")?T.cli_entry_uses_jsx===!0:T.src_entry_uses_jsx===!0;if(T.form_enabled=Y||M||T.form===!0||T.form?.enabled===!0,T.multiple_enabled=T.multiple_enabled||T.multiple===!0||T.multiple?.enabled===!0,T.app===!1)T.app={enabled:!1};else if(T.app===!0)T.app={enabled:!0,extend:T.app_has_entry===!0,export:!0,react:Y};else T.app={enabled:!0,extend:T.app_has_entry===!0,export:!0,react:Y,...T.app||{}};if(T.app.enabled=T.app.enabled===!0&&(O.doc.features.form_enabled===!0||T.app.extend===!0||T.app.enabled===!0),T.app.format=T.app.format||"esm",T.app.folder=T.app.folder||T.app.format||"default",T.cli===!1)T.cli={enabled:!1};else if(T.cli===!0)T.cli={enabled:!0,extend:T.cli_has_entry===!0,export:!0,react:M};else T.cli={enabled:!0,extend:T.cli_has_entry===!0,export:!0,react:M,...T.cli||{}};if(T.cli.enabled=T.cli.enabled===!0&&(O.doc.features.form_enabled===!1||T.cli.extend===!0||T.cli.enabled===!0),T.cli.format=T.cli.format||"esm",T.cli.folder=T.cli.folder||T.cli.folder||"esm",T.cli.node_options=T.cli.node?.options||T.cli.node_options||"",T.cli.bin=T.cli.bin||O.doc.name,T.cli.installable=T.cli.installable===!0,T.cli.enabled)O.doc["npm::bin"]=T.cli.bin;T.json=T.cli.enabled||T.json;let A={cjs:{format:"cjs",context:T.form_enabled?"window":"global",babel:T.src_uses_jsx===!0||!1,browser:!1,replace:!0,terser:!0,enabled:T.cjs!==!1,copy:!1},esm:{format:"esm",context:T.form_enabled?"window":"global",babel:T.src_uses_jsx===!0||!1,browser:!1,replace:!0,terser:!1,enabled:T.esm!==!1,copy:!0},iife:{format:"iife",context:T.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:T.iife===!0,terser:!0,copy:!1}},J={targets:{browsers:"last 9 versions, not dead",node:"18"}},V={};if(T.webos===!0)A.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(T.electron===!0)A.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(T.nextjs===!0)A.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(T.ios===!0)A.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(T.macos===!0)A.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(T.app.enabled===!0)T.app.dir=`./dist/app/${T.app.folder}`,T.app.output={file:`./dist/app/${T.app.folder}/index.js`,dir:`./dist/app/${T.app.folder}/`,...T.app.output||{}},T.app.input={file:"./src/app/index.js",dir:"./src/app/",...T.app.input||{}},A.app={format:T.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:T.app.input.file,output_dir:T.app.dir,terser:!0,output_exports:T.app.export===!1?"none":"auto",browsersync:!0};if(T.cli.enabled===!0)T.cli.dir=`./dist/cli/${T.cli.folder}`,T.cli.output={file:`./dist/cli/${T.cli.folder}/index.js`,dir:`./dist/cli/${T.cli.folder}/`,...T.cli.output||{}},T.cli.input={file:"./src/cli/index.js",dir:"./src/cli/",...T.cli.input||{}},A.cli={format:T.cli.format,context:"global",babel:T.src_uses_jsx===!0||T.cli_uses_jsx===!0||!1,browser:!1,replace:!0,enabled:!0,input:T.cli.input.file,output_dir:T.cli.dir,banner:"#!/usr/bin/env bun",terser:!0,output_exports:T.cli.export===!1?"none":"auto"};let X={server:".",startPath:`${R.normalize(T.app.dir||".")}`,files:[R.normalize("./dist/**/*")],cors:!0,open:!1};if(T.babel_options=I(J,T.babel_options||T.babel?.options),T.browsersync_options=I(X,T.browsersync_options||T.browsersync?.options||{}),T.replace_options=I(V,T.replace_options||T.replace?.options||{}),Reflect.has(T.browsersync_options,"proxy"))delete T.browsersync_options.server;T.rollup=T.rollup||{},T.rollup_output=I(A,T.rollup_output||T.rollup?.output||{}),T.preact_enabled=T.preact===!0||T.preact&&T.preact?.enabled!==!1;let y=Object.keys(A);for(let Z of y){let q=A[Z];if(!q)continue;if(T.rollup[Z]===!1){delete T.rollup_output[Z];continue}if(q.babel_options=q.babel_options||T.babel_options,q.browsersync_options=I(T.browsersync_options,q.browsersync_options),q.replace_options=I(T.replace_options,q.replace_options),T.preact_enabled)q.alias_enabled=!0,q.alias=q.alias||{},q.alias.entries=q.alias.entries||{},q.alias.entries.react="preact/compat",q.alias.entries["react-dom"]="preact/compat";if(T.form_enabled||T.babel)q.babel=!0}y=Object.keys(T.rollup_output),T.babel_enabled=y.some((Z)=>T.rollup_output[Z].babel===!0),T.browser_enabled=y.some((Z)=>T.rollup_output[Z].babel===!0),T.browsersync_enabled=T.browsersync!==!1&&y.some((Z)=>T.rollup_output[Z].browsersync===!0),T.browsersync_enabled=T.browsersync_enabled&&T.app.enabled,T.dependency_auto_enabled=T.dependency_auto!==!1&&T.dependency_auto?.enabled!==!1,T.npm_install_flags=T.npm_install_flags||"",T.react_version=T.react_version||T.react?.version||18,T.bpmn=T.bpmn||{},T.bpmn.enabled=T.bpmn.enabled!==!1,T.bpmn.per_flow=T.bpmn.per_flow===!0,c($),D($),d($),u($),o($),f($),i($),g($),k($),m($),v($),w($),P($)}import vT from"@fnet/npm-list-versions";async function p({atom:$,packageDependencies:O,packageDevDependencies:z,setProgress:W}){W("Initializing dependencies");let T=$.doc.dependencies||[];if(T.filter((K)=>!K.dev).forEach((K)=>O.push(K)),T.filter((K)=>K.dev).forEach((K)=>z.push(K)),$.type==="workflow")O.push({package:"dot-prop",version:"^10"});if($.doc.features.form_enabled){if($.doc.features.dependency_auto_enabled){let K="^18.2";if(W("Fetching React versions"),K=`^${(await vT({name:"react",groupBy:{major:!0}})).find((Y)=>Y[0]===$.doc.features.react_version.toString())[0]}`,O.push({package:"react",version:K}),O.push({package:"react-dom",version:K}),$.type==="workflow")O.push({package:"@fnet/react-app",version:"^0.1"}),O.push({package:"@fnet/react-app-state",version:"^0.1"})}}if($.doc.features.preact_enabled)O.push({package:"preact",version:"^10"});if($.doc.features.cli.enabled===!0){if(O.push({package:"@fnet/args",version:"^0.1"}),$.doc.features.cli.fargs&&$.doc.features.cli.fargs?.enabled!==!1)O.push({package:"@fnet/config",version:"0.2.21"});if($.doc.features.cli.mcp&&$.doc.features.cli.mcp.enabled===!0)O.push({package:"@modelcontextprotocol/sdk",version:"^1.10"}),O.push({package:"express",version:"^4.18"})}if($.doc.features.render&&$.doc.features.render.enabled!==!1)z.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"});if(z.push({package:"@babel/core",version:"^7"}),z.push({package:"@rollup/plugin-commonjs",version:"^28"}),z.push({package:"@rollup/plugin-node-resolve",version:"^16"}),z.push({package:"@rollup/plugin-replace",version:"^6"}),z.push({package:"rollup",version:"^4"}),$.doc.features.dts_enabled)z.push({package:"rollup-plugin-dts",version:"^6"});if(z.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),z.push({package:"@rollup/plugin-alias",version:"^5"}),z.push({package:"fs-extra",version:"^11"}),$.doc.features.babel_enabled)z.push({package:"@rollup/plugin-babel",version:"^6"}),z.push({package:"@babel/preset-env",version:"^7"}),z.push({package:"@babel/preset-react",version:"^7"}),$.doc.features.babel?.options?.plugins?.forEach((K)=>{switch(K[0]){case"@babel/plugin-proposal-decorators":z.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":z.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":z.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":z.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":z.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"});break}});if(z.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),$.doc.features.browsersync_enabled)z.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}import mT from"@fnet/npm-list-versions";async function s({atom:$,packageDependencies:O,packageDevDependencies:z,setProgress:W}){W("Initializing dependencies for Bun");let T=$.doc.dependencies||[];if(T.filter((K)=>!K.dev).forEach((K)=>O.push(K)),T.filter((K)=>K.dev).forEach((K)=>z.push(K)),$.type==="workflow")O.push({package:"dot-prop",version:"^10"});if($.doc.features.form_enabled){if($.doc.features.dependency_auto_enabled){let K="^18.2";if(W("Fetching React versions"),K=`^${(await mT({name:"react",groupBy:{major:!0}})).find((Y)=>Y[0]===$.doc.features.react_version.toString())[0]}`,O.push({package:"react",version:K}),O.push({package:"react-dom",version:K}),$.type==="workflow")O.push({package:"@fnet/react-app",version:"^0.1"}),O.push({package:"@fnet/react-app-state",version:"^0.1"})}}if($.doc.features.preact_enabled)O.push({package:"preact",version:"^10"});if($.doc.features.cli.enabled===!0){if(O.push({package:"@fnet/args",version:"^0.1"}),$.doc.features.cli.fargs&&$.doc.features.cli.fargs?.enabled!==!1)O.push({package:"@fnet/config",version:"0.2.21"});if($.doc.features.cli.mcp&&$.doc.features.cli.mcp.enabled===!0)O.push({package:"@modelcontextprotocol/sdk",version:"^1.10"}),O.push({package:"express",version:"^4.18"})}if($.doc.features.render&&$.doc.features.render.enabled!==!1)z.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"})}import ST from"node:fs";import UT from"node:path";import kT from"@flownet/lib-render-templates-dir";async function t({atom:$,setProgress:O,context:z,packageDependencies:W}){if($.doc.features.app.enabled!==!0)return;await O({message:"Creating app folder"});let T={atom:$,packageDependencies:W,ts:Date.now()},K=z.templateDir,Q=UT.resolve(z.projectDir,"src/app");if(!ST.existsSync(Q))ST.mkdirSync(Q,{recursive:!0});let G=["index.js.njk"];if($.doc.features.app.html!==!1)G.push("index.html.njk");await kT({pattern:G,dir:UT.resolve(K,"src/app"),outDir:Q,context:T})}import XT from"nunjucks";import N from"node:fs";import E from"node:path";import iT from"@flownet/lib-parse-imports-js";import gT from"@fnet/npm-pick-versions";import fT from"object-hash";import l from"node:fs";import yT from"node:path";async function C({projectDir:$,name:O,setProgress:z,count:W=1}){let T,Q=fT(["npm-pick-versions",O,W]),G=yT.join($,".cache"),Y=yT.join(G,Q+".json");if(l.existsSync(Y)){if(z)z(`Picking npm version of ${O} from cache ...`);T=JSON.parse(l.readFileSync(Y,"utf8"))}else{if(z)z(`Picking npm version of ${O} ...`);T=await gT({name:O,count:W}),l.mkdirSync(G,{recursive:!0}),l.writeFileSync(Y,JSON.stringify(T),"utf8")}return T}async function a({atom:$,context:O,packageDependencies:z,packageDevDependencies:W,setProgress:T}){await T({message:"Creating package.json."}),z.filter((q)=>q.dev===!0).forEach((q)=>{if(!W.find((U)=>U.package===q.package))W.push(q);let H=z.findIndex((U)=>U.package===q.package);z.splice(H,1)});let Q=z.find((q)=>q.package==="react"),G=z.find((q)=>q.package==="react-dom");if(Q&&!G)z.push({package:"react-dom",version:Q.version});else if(Q&&G)G.version=Q.version;if(Q&&$.doc.features.react_version>=17){if(!z.find((q)=>q.package==="@emotion/react"))z.push({package:"@emotion/react",version:"^11"});if(!z.find((q)=>q.package==="@emotion/styled"))z.push({package:"@emotion/styled",version:"^11"})}let Y=[];if($.doc.features.app.enabled===!0)Y.push({file:E.resolve(O.projectDir,"src/app/index.js"),dev:$.doc.features.app.dev===!0});if($.doc.features.cli.enabled===!0)Y.push({file:E.resolve(O.projectDir,"src/cli/index.js"),dev:$.doc.features.cli.dev===!0});for await(let q of Y){let H=q.file;if(!N.existsSync(H))throw Error(`App file not found: ${H}`);let L=(await iT({file:H,recursive:!0,verbose:!1})).all;for await(let B of L){if(B.type!=="npm")continue;if(z.find((x)=>x.package===B.package))continue;if(W.find((x)=>x.package===B.package))continue;let wT=await C({name:B.package,projectDir:O.projectDir,setProgress:T});(q.dev===!0?W:z).push({package:B.package,subpath:B.subpath,version:wT.minorRange,type:"npm"})}}let M={atom:$,packageDependencies:z,packageDevDependencies:W},A=O.templateDir,V=XT.compile(N.readFileSync(E.resolve(A,"package.json.njk"),"utf8"),XT.configure(A)).render(M),X=O.projectDir,y=E.resolve(X,"package.json");N.writeFileSync(y,V,"utf8");let Z=E.resolve(O.project.projectDir,"fnet");if(N.existsSync(Z)){let q=E.resolve(O.projectDir,"fnet");if(!N.existsSync(q))N.mkdirSync(q);let H=N.readdirSync(Z);for(let U of H){let L=E.resolve(Z,U);if(!N.lstatSync(L).isFile())continue;let B=E.resolve(q,U);N.copyFileSync(L,B)}}}import VT from"node:fs";import JT from"node:path";import oT from"@flownet/lib-render-templates-dir";async function e({atom:$,setProgress:O,context:z,packageDependencies:W}){if($.doc.features.cli.enabled!==!0)return;await O({message:"Creating cli."});let T={atom:$,packageDependencies:W},K=z.templateDir,Q=JT.resolve(z.projectDir,"src/cli");if(!VT.existsSync(Q))VT.mkdirSync(Q,{recursive:!0});await oT({pattern:["index.js.njk"],dir:JT.resolve(K,"src/cli"),outDir:Q,context:T})}import TT from"node:fs";import $T from"node:path";import bT from"nunjucks";import uT from"@flownet/lib-parse-imports-js";async function zT({atom:$,setProgress:O,context:z,packageDependencies:W}){await O({message:"Creating rollup file."});let T={atom:$,packageDependencies:W},K=$T.resolve(z.projectDir,"src","default/index.js");if(!TT.existsSync(K))throw Error(`Entry file not found: ${K}`);let G=(await uT({file:K,recursive:!0})).all.filter((Z)=>Z.type==="node").map((Z)=>Z.path),Y=$.doc.features.rollup_output,M=Object.keys(Y);for(let Z=0;Z<M.length;Z++){let q=M[Z],H=Y[q];if(H.browser===!0){if(G.length>0){H.globals_enabled=!0,H.globals=H.globals||[],H.globals=H.globals.concat(G.map((U)=>{return{key:U,value:U}})),H.alias_enabled=!0,H.alias=H.alias||{},H.alias.entries=H.alias.entries||{};for(let U=0;U<G.length;U++){let L=G[U];H.alias.entries[L]=`node:${L}`,H.alias.entries[`node:${L}`]=L}H.external_enabled=!0,H.external=H.external||[],H.external=H.external.concat(G)}}}let A=z.templateDir,V=bT.compile(TT.readFileSync($T.resolve(A,"rollup.config.mjs.njk"),"utf8"),bT.configure(A)).render(T),X=z.projectDir,y=$T.resolve(X,"rollup.config.mjs");TT.writeFileSync(y,V,"utf8")}import OT from"node:fs";import RT from"node:path";import LT from"nunjucks";async function WT({atom:$,setProgress:O,context:z,packageDependencies:W}){await O({message:"Creating build.js file."});let T={atom:$,packageDependencies:W},K=z.templateDir,G=LT.compile(OT.readFileSync(RT.resolve(K,"build.js.njk"),"utf8"),LT.configure(K)).render(T),Y=z.projectDir,M=RT.resolve(Y,"build.js");OT.writeFileSync(M,G,"utf8"),OT.chmodSync(M,"755")}import KT from"node:fs";import qT from"node:path";import dT from"nunjucks";import DT from"ajv/dist/2020.js";import cT from"ajv/dist/standalone/index.js";import rT from"ajv-formats";async function GT({atom:$,setProgress:O,context:z,njEnv:W}){if($.doc.features.cli.enabled!==!0)return;await O({message:"Creating input args."});let T={},K=[];if($.doc.input)T=$.doc.input;else T={type:"object",properties:{},required:[]};if($.doc.features.cli.fargs&&$.doc.features.cli.fargs?.enabled!==!1){let H=$.doc.features.cli.fargs,U={type:"string",description:"Config name to load args",hidden:!1},L={type:"array",description:"Tags to filter the config",hidden:!1};if(Reflect.has(H,"default"))U.default=H.default}let G={imports:K,atom:$},Y=z.templateDir,A=dT.compile(KT.readFileSync(qT.resolve(Y,"src/default/input.args.js.njk"),"utf8"),W).render(G),J=z.projectDir,V=qT.resolve(J,"src/default/input.args.js");KT.writeFileSync(V,A,"utf8");let X=new DT({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});rT(X);let y=X.compile(T),q=cT(X,y)+`
|
|
2
2
|
export { schema31 as schema };`;KT.writeFileSync(qT.resolve(J,"src/default/validate_input.js"),q,"utf8")}import NT from"node:fs";import BT from"node:path";import ET from"nunjucks";async function QT({atom:$,setProgress:O,context:z,packageDependencies:W}){await O({message:"Creating tsconfig.json."});let T={atom:$,packageDependencies:W},K=z.templateDir,G=ET.compile(NT.readFileSync(BT.resolve(K,"tsconfig.json.njk"),"utf8"),ET.configure(K)).render(T),Y=z.projectDir,M=BT.resolve(Y,"tsconfig.json");NT.writeFileSync(M,G,"utf8")}import nT from"node:path";import IT from"@fnet/shelljs";async function YT({setProgress:$,context:O}){let z=O.projectDir;await $({message:"Prettifiying source files."});let W=nT.join("src","**","*");if(j("bun")){let T=await IT(`prettier --write ${W} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:z});if(T.code!==0)throw Error(T.stderr)}else{let T=await IT(`prettier --write ${W} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:z});if(T.code!==0)throw Error(T.stderr)}}import pT from"@fnet/shelljs";async function ZT({atom:$,setProgress:O,context:z}){if(!$.doc.features.dts_enabled)return;let W=z.projectDir;if(await O({message:"Creating .d.ts"}),(await pT("tsc",{cwd:W})).code!==0)throw Error("Couldnt create .d.ts files.")}import _T from"@fnet/shelljs";async function HT({setProgress:$,atom:O,context:z}){let W=z.projectDir;if(await $({message:"Installing npm packages."}),j("bun")){if((await _T(`bun install ${O.doc.features.npm_install_flags}`,{cwd:W})).code!==0)throw Error("Couldnt install npm packages.")}else if((await _T(`npm install ${O.doc.features.npm_install_flags}`,{cwd:W})).code!==0)throw Error("Couldnt install npm packages.")}import FT from"node:fs";import sT from"node:path";import{spawn as tT}from"node:child_process";async function CT($){let{projectDir:O,scriptName:z,args:W=[],env:T=process.env,shell:K=!0,detached:Q=!0,onSpawn:G}=$;if(!O||!z)throw Error("projectDir and scriptName are required");let Y=sT.resolve(O,"package.json");if(!FT.existsSync(Y))throw Error(`package.json not found at ${Y}`);let M=JSON.parse(FT.readFileSync(Y,"utf8")),A=M.scripts?.[z];if(!A){let X=Object.keys(M.scripts||{}).join(", ");throw Error(`Script '${z}' not found. Available: ${X}`)}let J=W.length>0?`${A} ${W.join(" ")}`:A,V=tT(J,[],{cwd:O,stdio:"inherit",shell:K,detached:Q,env:{...T}});if(G)G(V);return new Promise((X,y)=>{V.on("error",(Z)=>{y(Error(`Failed to start '${z}': ${Z.message}`))}),V.on("close",(Z)=>{X({subprocess:V,exitCode:Z})})})}import MT from"node:path";async function AT({setProgress:$,context:O}){let z=O.projectDir;await $({message:"Building main project."});let W=O.dev?"build:dev":"build",T={...process.env},K=MT.join(z,"node_modules");T.NODE_PATH=K,T.PATH=`${MT.join(K,"/.bin")}${MT.delimiter}${T.PATH}`;let Q=T.NODE_OPTIONS||"";T.NODE_OPTIONS=`${Q} --preserve-symlinks`.trim(),await CT({projectDir:z,scriptName:W,shell:!0,detached:!0,env:T})}class xT extends jT{async initRuntime(){if(await n(this.apiContext),this.apiContext.context.project.runtime.type==="bun")await s(this.apiContext);else await p(this.apiContext);await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initLibs(){this.setProgress({message:"Initializing external libs."});let $=[{name:this.atom.doc.name,type:"atom",parent_id:this.atom.parent_id}];this.libs=$,await this.initAtomLibsAndDeps({libs:$,packageDependencies:this.apiContext.packageDependencies})}async initAtomLibsAndDeps({libs:$,packageDependencies:O}){let z=$.filter((W)=>W.type==="atom");for(let W=0;W<z.length;W++){let T=z[W],K=await this.findAtomLibrary({url:T.name});T.atom=K,K.doc.dependencies?.filter((G)=>typeof G.repo>"u"||G.repo==="npm")?.forEach((G)=>{let Y=O.find((M)=>M.package===G.package);if(Y){if(typeof G.path==="string"){if(!(Y.path||[]).some((M)=>M===G.path))Y.path=Y.path||[],Y.path.push(G.path)}else if(Array.isArray(G.path))G.path.forEach((M)=>{if(!(Y.path||[]).some((A)=>A===M))Y.path=Y.path||[],Y.path.push(M)})}else O.push(G)})}O.sort((W,T)=>W.package?.localeCompare(T.package))}async findAtomLibrary({url:$}){let O=T0({url:$});if(!O)throw Error(`Invalid package name: ${$}`);if(!O.protocol)O.protocol=this.context.protocol;if(O.protocol==="ac:"){let z=O.pathname.split("/");if(z.length===1)return await this.apiContext.Atom.first({where:{name:$,parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(z.length===2){let W=await this.apiContext.Atom.first({where:{name:z[0],parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"folder"}});return await this.apiContext.Atom.first({where:{name:z[1],parent_id:W.id,type:"workflow.lib"}})}}else if(O.protocol==="src:"){let z=this.atom;z.protocol="src:",z.doc.dependencies=z.doc.dependencies||[],z.name=z.doc.name;let W=b.resolve(this.context.projectSrcDir,"index.js"),T=await eT({file:W,recursive:!0}),K=z.doc.dependencies,Q=T.all;for await(let G of Q){if(G.type!=="npm")continue;if(K.find((M)=>M.package===G.package))continue;let Y=await C({name:G.package,projectDir:this.context.projectDir,setProgress:this.apiContext.setProgress});K.push({package:G.package,subpath:G.subpath,version:Y.minorRange,type:"npm"})}return z}}async createAtomLibFiles({libs:$}){await this.setProgress({message:"Creating external lib files."}),this.atom.typesDir="./types";let O=$.filter((z)=>z.type==="atom");for(let z=0;z<O.length;z++){let T=O[z].atom,K=this.context.projectDir;if(T.protocol==="src:"){let Q=b.resolve(this.context.projectSrcDir,`${T.fileName||T.name}.js`),G=b.relative(b.join(this.context.projectDir,"src","default"),Q);if(!F.existsSync(Q)){F.mkdirSync(b.dirname(Q),{recursive:!0});let Y=`export default async (input)=>{
|
|
3
3
|
`;Y+="}",F.writeFileSync(Q,Y,"utf8")}T.relativePath=G.split(b.sep).join("/"),this.atom.typesDir=`./types/${b.basename(K)}/src`}else{let Q=b.join(K,"src","libs",`${T.id}.js`),G=T.doc.contents?.find((Y)=>Y.format==="esm")||T.doc;F.writeFileSync(Q,G.content,"utf8")}}}async createEngine(){await this.setProgress({message:"Creating engine file."});let O={libs:this.libs.filter((G)=>G.type==="atom"),libraryAtom:this.atom,atom:this.atom},z=this.context.templateDir,T=aT.compile(F.readFileSync(b.resolve(z,b.join("src","default","engine.js.njk")),"utf8"),this.apiContext.njEnv).render(O),K=this.context.projectDir,Q=b.resolve(K,b.join("src","default","index.js"));F.writeFileSync(Q,T,"utf8")}async build(){try{if(this.fileMode){let $=this.apiContext.context.project;if(await this.createAtomLibFiles({libs:this.libs}),await this.createEngine(),await this.createProjectYaml(),await lT(this.apiContext),await QT(this.apiContext),await hT(this.apiContext),await GT(this.apiContext),await e(this.apiContext),await t(this.apiContext),$.runtime.type==="bun")await WT(this.apiContext);else await zT(this.apiContext);if(await a(this.apiContext),await YT(this.apiContext),await ZT(this.apiContext),this.buildMode){if(await HT(this.apiContext),await AT(this.apiContext),this.deployMode)await this.deploy()}}await this._cache_set(this.buildKey,{status:"COMPLETED"})}catch($){throw await this._cache_set(this.buildKey,{status:"FAILED",message:$.message||$}),console.log($),$}}}var B1=xT;export{B1 as default};
|
package/dist/fnode/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{e as E}from"./index.9qgtmxq3.js";import{f as o}from"./index.05n3mvs9.js";import{g as k,i as S}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),x=!1;async function n($,W){if(x)return;if(x=!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(!x)process.exit(W)})}function t(){process.on("uncaughtException",($)=>{if(!x)x=!0,setTimeout(()=>process.exit(1),500)}),process.on("unhandledRejection",($)=>{if(!x)x=!0,setTimeout(()=>process.exit(1),500)})}import b from"node:path";import{spawn as c}from"node:child_process";import v from"node:fs";import y 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=(_)=>{if(!_.includes(" "))return _;if(process.platform==="win32")return`"${_.replace(/(["^])/g,"^$1")}"`;else return`"${_.replace(/(["\\$`])/g,"\\$1")}"`},M=process.argv.slice(3).map(O),H={...process.env},U=b.join(Y,"node_modules");H.NODE_PATH=U;let T=H.NODE_OPTIONS||"";H.NODE_OPTIONS=`${T} --preserve-symlinks`.trim();let F=c(z,[...q,...M],{cwd:Y,stdio:"inherit",shell:!0,detached:!0,env:H});u(F)}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,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=b.join(Y,".conda","bin",z||W);let H=c(z,[...q,...M],{cwd:Y,stdio:"inherit",shell:!0,detached:!0,env:{PYTHONPATH:Y}});u(H)}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,H=G.command,U=process.argv.slice(5),T=c(H,[...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.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 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(y.blue("Compiling project..."));let Q=b.join(Z,".bin");if(!v.existsSync(Q))v.mkdirSync(Q,{recursive:!0});let Y=b.basename(b.dirname(Z)),O=G.project?.projectFileParsed?.features?.cli?.bin,M=q.name||O||Y;console.log(y.blue(`Using binary name: ${M}`));let H=b.join(Q,M),{spawn:U}=await import("child_process"),T=U("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${H}`],{cwd:Z,stdio:"inherit",shell:!0});if(await new Promise((f,B)=>{T.on("close",(A)=>{if(A===0)f();else B(Error(`Compilation failed with code ${A}`))}),T.on("error",(A)=>{B(A)})}),process.platform!=="win32")v.chmodSync(H,493);console.log(y.green(`Binary compiled successfully: ${H}`)),console.log(y.blue("Installing binary..."));let F=["install",H];if(q.name)F.push("--name",q.name);if(q.force)F.push("--force");if(q.yes)F.push("--yes");let _=U("fbin",F,{stdio:"inherit",shell:!0});await new Promise((f,B)=>{_.on("close",(A)=>{if(A===0)f();else B(Error(`Installation failed with code ${A}`))}),_.on("error",(A)=>{B(A)})})}catch(G){console.error(y.red(`Failed to install binary: ${G.message}`)),process.exit(1)}})}import I 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:E("./template/fnode/node"),projectDir:I.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:E(`./template/fnode/${z}`),projectDir:I.resolve(W.projectDir,"./.workspace"),projectSrcDir:I.resolve(W.projectDir,"./src"),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=I.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=I.resolve(G,"fnet/targets.yaml");if(!w.existsSync(Y)){if(Y=I.resolve(G,"node.devops.yaml"),w.existsSync(Y)){let M=I.resolve(G,"fnet");if(!w.existsSync(M))w.mkdirSync(M);w.copyFileSync(Y,I.resolve(G,"fnet/targets.yaml")),w.unlinkSync(Y)}}if(w.existsSync(Y)){let{raw:M,parsed:H}=await q1({file:Y,tags:$}),U=A1.parseDocument(M);Q.devops={filePath:Y,fileContent:M,yamlDocument:U,doc:{...H},type:"library.deploy",save:async()=>{w.writeFileSync(Q.devops.filePath,U.toString())}}}let O=I.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=I.resolve($,"node.yaml"),z=I.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 i 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=E("./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 i("fnode build",{cwd:q});if(G.code!==0)throw Error("Failed to build project.");if(o("git")){if(G=await i("git init --initial-branch=main",{cwd:q}),G.code!==0)throw Error("Failed to initialize git.")}if(o("code")&&$.vscode){if(G=await i(`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=E("./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.kf49tavj.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.kf49tavj.js")).default;case"python":return(await import("./index.hv4s25f0.js")).default;default:throw Error(`Unsupported runtime type: ${$}`)}}}var N=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 N.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 N.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 N.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 N.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,H=await M({schema:Z,format:"yaml",ref:O?Y:void 0});P.writeFileSync(Y,H)}catch(W){console.error(W.message),process.exit(1)}}},M1=m1;import L from"node:path";import J from"node:fs";import d from"node:os";import{spawn as m}from"node:child_process";import K from"chalk";import R 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]:H}=await L1({type:"select",name:M,message:z,choices:Y,initial:O});if(H==="cancel")return null;return H}async function h1($){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",H=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&&H[M].length===0)return null;return H[M]}var s={promptForSelection:g1,promptForMultipleSelection:h1};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 l1(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 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 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 l1($){try{if(!J.existsSync(X))J.mkdirSync(X,{recursive:!0});let W=new Date().toISOString().slice(0,10).replace(/-/g,""),z=L.join(X,W);if(!J.existsSync(z))J.mkdirSync(z,{recursive:!0});let q=$.projectName,G,Z=$.runtime;if(!$.yes){if(!q){let T=J.readdirSync(z).filter((B)=>B.startsWith("fnode-")).map((B)=>parseInt(B.replace("fnode-",""),10)).filter((B)=>!isNaN(B)),_=`fnode-${T.length>0?Math.max(...T)+1:1}`;q=(await R([{type:"input",name:"projectName",message:"Enter project name:",default:_}])).projectName}Z=(await R({type:"select",name:"runtime",message:"Select runtime:",choices:["node","python","bun"],initial:Z||"node"})).runtime}else{if(!q){let H=J.readdirSync(z).filter((T)=>T.startsWith("fnode-")).map((T)=>parseInt(T.replace("fnode-",""),10)).filter((T)=>!isNaN(T));q=`fnode-${H.length>0?Math.max(...H)+1:1}`}if(!Z)Z="node"}if(G=L.join(z,q),J.existsSync(G)){let H=1;while(J.existsSync(L.join(z,`${q}-${H}`)))H++;q=`${q}-${H}`,G=L.join(z,q)}if(!$.yes){if(!(await R([{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(!J.existsSync(Q))J.mkdirSync(Q,{recursive:!0});let M=m("fnode",O,{stdio:"inherit",shell:!0,cwd:Q});return new Promise((H,U)=>{M.on("close",(T)=>{if(T===0)if(console.log(K.green(`
|
|
2
|
+
import{e as E}from"./index.9qgtmxq3.js";import{f as o}from"./index.05n3mvs9.js";import{g as k,i as S}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),x=!1;async function n($,W){if(x)return;if(x=!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(!x)process.exit(W)})}function t(){process.on("uncaughtException",($)=>{if(!x)x=!0,setTimeout(()=>process.exit(1),500)}),process.on("unhandledRejection",($)=>{if(!x)x=!0,setTimeout(()=>process.exit(1),500)})}import b from"node:path";import{spawn as c}from"node:child_process";import v from"node:fs";import y 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=(_)=>{if(!_.includes(" "))return _;if(process.platform==="win32")return`"${_.replace(/(["^])/g,"^$1")}"`;else return`"${_.replace(/(["\\$`])/g,"\\$1")}"`},M=process.argv.slice(3).map(O),H={...process.env},U=b.join(Y,"node_modules");H.NODE_PATH=U;let T=H.NODE_OPTIONS||"";H.NODE_OPTIONS=`${T} --preserve-symlinks`.trim();let F=c(z,[...q,...M],{cwd:Y,stdio:"inherit",shell:!0,detached:!0,env:H});u(F)}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,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=b.join(Y,".conda","bin",z||W);let H=c(z,[...q,...M],{cwd:Y,stdio:"inherit",shell:!0,detached:!0,env:{PYTHONPATH:Y}});u(H)}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,H=G.command,U=process.argv.slice(5),T=c(H,[...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.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 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(y.blue("Compiling project..."));let Q=b.join(Z,".bin");if(!v.existsSync(Q))v.mkdirSync(Q,{recursive:!0});let Y=b.basename(b.dirname(Z)),O=G.project?.projectFileParsed?.features?.cli?.bin,M=q.name||O||Y;console.log(y.blue(`Using binary name: ${M}`));let H=b.join(Q,M),{spawn:U}=await import("child_process"),T=U("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${H}`],{cwd:Z,stdio:"inherit",shell:!0});if(await new Promise((f,B)=>{T.on("close",(A)=>{if(A===0)f();else B(Error(`Compilation failed with code ${A}`))}),T.on("error",(A)=>{B(A)})}),process.platform!=="win32")v.chmodSync(H,493);console.log(y.green(`Binary compiled successfully: ${H}`)),console.log(y.blue("Installing binary..."));let F=["install",H];if(q.name)F.push("--name",q.name);if(q.force)F.push("--force");if(q.yes)F.push("--yes");let _=U("fbin",F,{stdio:"inherit",shell:!0});await new Promise((f,B)=>{_.on("close",(A)=>{if(A===0)f();else B(Error(`Installation failed with code ${A}`))}),_.on("error",(A)=>{B(A)})})}catch(G){console.error(y.red(`Failed to install binary: ${G.message}`)),process.exit(1)}})}import I 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:E("./template/fnode/node"),projectDir:I.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:E(`./template/fnode/${z}`),projectDir:I.resolve(W.projectDir,"./.workspace"),projectSrcDir:I.resolve(W.projectDir,"./src"),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=I.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=I.resolve(G,"fnet/targets.yaml");if(!w.existsSync(Y)){if(Y=I.resolve(G,"node.devops.yaml"),w.existsSync(Y)){let M=I.resolve(G,"fnet");if(!w.existsSync(M))w.mkdirSync(M);w.copyFileSync(Y,I.resolve(G,"fnet/targets.yaml")),w.unlinkSync(Y)}}if(w.existsSync(Y)){let{raw:M,parsed:H}=await q1({file:Y,tags:$}),U=A1.parseDocument(M);Q.devops={filePath:Y,fileContent:M,yamlDocument:U,doc:{...H},type:"library.deploy",save:async()=>{w.writeFileSync(Q.devops.filePath,U.toString())}}}let O=I.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=I.resolve($,"node.yaml"),z=I.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 i 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=E("./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 i("fnode build",{cwd:q});if(G.code!==0)throw Error("Failed to build project.");if(o("git")){if(G=await i("git init --initial-branch=main",{cwd:q}),G.code!==0)throw Error("Failed to initialize git.")}if(o("code")&&$.vscode){if(G=await i(`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=E("./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.cs7b2zj8.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.cs7b2zj8.js")).default;case"python":return(await import("./index.hv4s25f0.js")).default;default:throw Error(`Unsupported runtime type: ${$}`)}}}var N=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 N.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 N.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 N.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 N.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,H=await M({schema:Z,format:"yaml",ref:O?Y:void 0});P.writeFileSync(Y,H)}catch(W){console.error(W.message),process.exit(1)}}},M1=m1;import L from"node:path";import J from"node:fs";import d from"node:os";import{spawn as m}from"node:child_process";import K from"chalk";import R 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]:H}=await L1({type:"select",name:M,message:z,choices:Y,initial:O});if(H==="cancel")return null;return H}async function h1($){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",H=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&&H[M].length===0)return null;return H[M]}var s={promptForSelection:g1,promptForMultipleSelection:h1};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 l1(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 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 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 l1($){try{if(!J.existsSync(X))J.mkdirSync(X,{recursive:!0});let W=new Date().toISOString().slice(0,10).replace(/-/g,""),z=L.join(X,W);if(!J.existsSync(z))J.mkdirSync(z,{recursive:!0});let q=$.projectName,G,Z=$.runtime;if(!$.yes){if(!q){let T=J.readdirSync(z).filter((B)=>B.startsWith("fnode-")).map((B)=>parseInt(B.replace("fnode-",""),10)).filter((B)=>!isNaN(B)),_=`fnode-${T.length>0?Math.max(...T)+1:1}`;q=(await R([{type:"input",name:"projectName",message:"Enter project name:",default:_}])).projectName}Z=(await R({type:"select",name:"runtime",message:"Select runtime:",choices:["node","python","bun"],initial:Z||"node"})).runtime}else{if(!q){let H=J.readdirSync(z).filter((T)=>T.startsWith("fnode-")).map((T)=>parseInt(T.replace("fnode-",""),10)).filter((T)=>!isNaN(T));q=`fnode-${H.length>0?Math.max(...H)+1:1}`}if(!Z)Z="node"}if(G=L.join(z,q),J.existsSync(G)){let H=1;while(J.existsSync(L.join(z,`${q}-${H}`)))H++;q=`${q}-${H}`,G=L.join(z,q)}if(!$.yes){if(!(await R([{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(!J.existsSync(Q))J.mkdirSync(Q,{recursive:!0});let M=m("fnode",O,{stdio:"inherit",shell:!0,cwd:Q});return new Promise((H,U)=>{M.on("close",(T)=>{if(T===0)if(console.log(K.green(`
|
|
3
3
|
Express project "${q}" created successfully!`)),console.log(K.blue(`
|
|
4
4
|
Project location: ${G}`)),!$.yes)i1(G);else H();else console.error(K.red(`
|
|
5
5
|
Failed to create express project "${q}".`)),U(Error(`Process exited with code ${T}`))})})}catch(W){console.error(K.red(`Error creating express project: ${W.message}`)),process.exit(1)}}async function p1($){try{if(!J.existsSync(X)){console.log(K.yellow("No express projects found."));return}let W=J.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(K.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=L.join(X,Q),O=J.readdirSync(Y);for(let M of O){let H=L.join(Y,M),U=J.statSync(H),T="unknown";if(M.startsWith("fnode-")||J.existsSync(L.join(H,"fnode.yaml")))T="fnode";else if(M.startsWith("fnet-")||J.existsSync(L.join(H,"fnet.yaml")))T="fnet";if($.type&&T!==$.type)continue;if($.name&&!M.includes($.name))continue;let F=`${Q.slice(0,4)}-${Q.slice(4,6)}-${Q.slice(6,8)}`;z.push({name:M,type:T,date:F,path:H,created:U.birthtime})}}if(z.sort((Q,Y)=>Y.created-Q.created),z.length===0){console.log(K.yellow("No express projects found matching the criteria."));return}console.log(K.blue(`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import getValue from "get-value";
|
|
2
|
-
import setValue from "set-value";
|
|
3
|
-
import
|
|
1
|
+
// import getValue from "get-value";
|
|
2
|
+
// import setValue from "set-value";
|
|
3
|
+
import { setProperty, getProperty } from "dot-prop";
|
|
4
4
|
|
|
5
5
|
export default class Object {
|
|
6
6
|
#property;
|
|
@@ -14,14 +14,14 @@ export default class Object {
|
|
|
14
14
|
this.#context = context;
|
|
15
15
|
|
|
16
16
|
this.get = (path, options) => {
|
|
17
|
-
return
|
|
17
|
+
return getProperty(this.#property, path, options);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
this.set = (path, value, options) => {
|
|
21
|
-
return
|
|
21
|
+
return setProperty(this.#property, path, value, options);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
this.print =
|
|
24
|
+
this.print = console.log;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
get module() {
|
|
@@ -29,19 +29,19 @@ export default class Object {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
getModule(path) {
|
|
32
|
-
return
|
|
32
|
+
return getProperty(this.#module, path);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
setModule(path, module) {
|
|
36
36
|
if (typeof module !== "function") throw new Error("Module must be a function");
|
|
37
|
-
return
|
|
37
|
+
return setProperty(this.#module, path, module);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
get getValue() {
|
|
41
|
-
return
|
|
41
|
+
return getProperty;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
get setValue() {
|
|
45
|
-
return
|
|
45
|
+
return setProperty;
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
{
|
|
1
|
+
// WORKFLOW: {{ indexKey }}
|
|
2
|
+
|
|
3
|
+
import Object from "../core/object.js";
|
|
2
4
|
|
|
3
5
|
{% if context.next %}
|
|
4
6
|
{% if not context.next.definition.dynamic %}
|
|
@@ -108,7 +110,7 @@ export default class Workflow extends Object {
|
|
|
108
110
|
|
|
109
111
|
|
|
110
112
|
{% if context.transform.print %}
|
|
111
|
-
|
|
113
|
+
console.log({{context.transform.print | safe}});
|
|
112
114
|
{% endif%}
|
|
113
115
|
|
|
114
116
|
{% if context.transform.assert %}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default console.log;
|