@fnet/cli 0.3.6 → 0.3.8
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 +10 -10
- package/dist/fnode/{index.r7cr7ar9.js → index.a9tw7vtc.js} +3 -3
- package/dist/fnode/index.js +1 -1
- package/package.json +3 -3
- package/template/fnet/node/package.json.njk +2 -2
- package/template/fnet/node/src/cli/index.js.v1.njk +3 -3
- package/template/fnet/node/src/cli/v2/index.js.njk +4 -4
- package/template/fnode/node/package.json.njk +2 -2
- package/template/fnode/node/src/cli/index.js.v1.njk +8 -8
- package/template/fnode/node/src/cli/v2/index.js.njk +4 -4
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{b as CT,c as jT,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 l from"node:fs";import N from"node:path";import _ from"@flownet/lib-parse-imports-js";import wT 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=wT(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 f($){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 g($){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=N.resolve($,`./${O}.tsx`);if(!l.existsSync(z))z=N.resolve($,`./${O}.ts`);if(!l.existsSync(z))z=N.resolve($,`./${O}.jsx`);if(!l.existsSync(z))z=N.resolve($,`./${O}.js`);if(!l.existsSync(z))return{};let W=z,T=N.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=N.resolve(z.project.projectDir),Q=r({dir:N.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:N.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:N.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:`${N.normalize(T.app.dir||".")}`,files:[N.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,c($),D($),d($),u($),i($),g($),o($),f($),k($),m($),v($),w($),P($)}import PT 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 PT({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!==!1)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 vT 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 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!==!1)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 AT from"node:fs";import ST from"node:path";import mT 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=ST.resolve(z.projectDir,"src/app");if(!AT.existsSync(Q))AT.mkdirSync(Q,{recursive:!0});let G=["index.js.njk"];if($.doc.features.app.html!==!1)G.push("index.html.njk");await mT({pattern:G,dir:ST.resolve(K,"src/app"),outDir:Q,context:T})}import yT from"nunjucks";import B from"node:fs";import E from"node:path";import gT from"@flownet/lib-parse-imports-js";import kT from"@fnet/npm-pick-versions";import fT from"object-hash";import h from"node:fs";import UT from"node:path";async function C({projectDir:$,name:O,setProgress:z,count:W=1}){let T,Q=fT(["npm-pick-versions",O,W]),G=UT.join($,".cache"),Y=UT.join(G,Q+".json");if(h.existsSync(Y)){if(z)z(`Picking npm version of ${O} from cache ...`);T=JSON.parse(h.readFileSync(Y,"utf8"))}else{if(z)z(`Picking npm version of ${O} ...`);T=await kT({name:O,count:W}),h.mkdirSync(G,{recursive:!0}),h.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!==!1});if($.doc.features.cli.enabled===!0)Y.push({file:E.resolve(O.projectDir,"src/cli/index.js"),dev:$.doc.features.cli.dev!==!1});for await(let q of Y){let H=q.file;if(!B.existsSync(H))throw Error(`App file not found: ${H}`);let R=(await gT({file:H,recursive:!0,verbose:!1})).all;for await(let L of R){if(L.type!=="npm")continue;if(z.find((x)=>x.package===L.package))continue;if(W.find((x)=>x.package===L.package))continue;let xT=await C({name:L.package,projectDir:O.projectDir,setProgress:T});(q.dev===!0?W:z).push({package:L.package,subpath:L.subpath,version:xT.minorRange,type:"npm"})}}let M={atom:$,packageDependencies:z,packageDevDependencies:W},A=O.templateDir,V=yT.compile(B.readFileSync(E.resolve(A,"package.json.njk"),"utf8"),yT.configure(A)).render(M),X=O.projectDir,y=E.resolve(X,"package.json");B.writeFileSync(y,V,"utf8");let Z=E.resolve(O.project.projectDir,"fnet");if(B.existsSync(Z)){let q=E.resolve(O.projectDir,"fnet");if(!B.existsSync(q))B.mkdirSync(q);let H=B.readdirSync(Z);for(let U of H){let R=E.resolve(Z,U);if(!B.lstatSync(R).isFile())continue;let L=E.resolve(q,U);B.copyFileSync(R,L)}}}import XT from"node:fs";import VT 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=VT.resolve(z.projectDir,"src/cli");if(!XT.existsSync(Q))XT.mkdirSync(Q,{recursive:!0});await oT({pattern:["index.js.njk"],dir:VT.resolve(K,"src/cli"),outDir:Q,context:T})}import TT from"node:fs";import $T from"node:path";import JT from"nunjucks";import iT 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 iT({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 R=G[U];H.alias.entries[R]=`node:${R}`,H.alias.entries[`node:${R}`]=R}H.external_enabled=!0,H.external=H.external||[],H.external=H.external.concat(G)}}}let A=z.templateDir,V=JT.compile(TT.readFileSync($T.resolve(A,"rollup.config.mjs.njk"),"utf8"),JT.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 bT from"node:path";import NT 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=NT.compile(OT.readFileSync(bT.resolve(K,"build.js.njk"),"utf8"),NT.configure(K)).render(T),Y=z.projectDir,M=bT.resolve(Y,"build.js");OT.writeFileSync(M,G,"utf8"),OT.chmodSync(M,"755")}import KT from"node:fs";import qT from"node:path";import uT from"nunjucks";import dT from"ajv/dist/2020.js";import DT from"ajv/dist/standalone/index.js";import cT 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},R={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=uT.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}});cT(X);let y=X.compile(T),q=DT(X,y)+`
|
|
2
|
-
export { schema31 as schema };`;KT.writeFileSync(qT.resolve(J,"src/default/validate_input.js"),q,"utf8")}import
|
|
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
|
|
1
|
+
import{b as CT,c as jT,d as hT}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 wT 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=wT(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 PT 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 PT({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 vT 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 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"})}import AT from"node:fs";import ST from"node:path";import mT 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=ST.resolve(z.projectDir,"src/app");if(!AT.existsSync(Q))AT.mkdirSync(Q,{recursive:!0});let G=["index.js.njk"];if($.doc.features.app.html!==!1)G.push("index.html.njk");await mT({pattern:G,dir:ST.resolve(K,"src/app"),outDir:Q,context:T})}import yT from"nunjucks";import L from"node:fs";import E from"node:path";import fT from"@flownet/lib-parse-imports-js";import kT from"@fnet/npm-pick-versions";import gT from"object-hash";import l from"node:fs";import UT from"node:path";async function C({projectDir:$,name:O,setProgress:z,count:W=1}){let T,Q=gT(["npm-pick-versions",O,W]),G=UT.join($,".cache"),Y=UT.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 kT({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!==!1});if($.doc.features.cli.enabled===!0)Y.push({file:E.resolve(O.projectDir,"src/cli/index.js"),dev:$.doc.features.cli.dev!==!1});for await(let q of Y){let H=q.file;if(!L.existsSync(H))throw Error(`App file not found: ${H}`);let N=(await fT({file:H,recursive:!0,verbose:!1})).all;for await(let B of N){if(B.type!=="npm")continue;if(z.find((x)=>x.package===B.package))continue;if(W.find((x)=>x.package===B.package))continue;let xT=await C({name:B.package,projectDir:O.projectDir,setProgress:T});(q.dev===!0?W:z).push({package:B.package,subpath:B.subpath,version:xT.minorRange,type:"npm"})}}let M={atom:$,packageDependencies:z,packageDevDependencies:W},A=O.templateDir,V=yT.compile(L.readFileSync(E.resolve(A,"package.json.njk"),"utf8"),yT.configure(A)).render(M),X=O.projectDir,y=E.resolve(X,"package.json");L.writeFileSync(y,V,"utf8");let Z=E.resolve(O.project.projectDir,"fnet");if(L.existsSync(Z)){let q=E.resolve(O.projectDir,"fnet");if(!L.existsSync(q))L.mkdirSync(q);let H=L.readdirSync(Z);for(let U of H){let N=E.resolve(Z,U);if(!L.lstatSync(N).isFile())continue;let B=E.resolve(q,U);L.copyFileSync(N,B)}}}import XT from"node:fs";import VT 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=VT.resolve(z.projectDir,"src/cli");if(!XT.existsSync(Q))XT.mkdirSync(Q,{recursive:!0});await oT({pattern:["index.js.njk"],dir:VT.resolve(K,"src/cli"),outDir:Q,context:T})}import TT from"node:fs";import $T from"node:path";import JT from"nunjucks";import iT 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 iT({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 N=G[U];H.alias.entries[N]=`node:${N}`,H.alias.entries[`node:${N}`]=N}H.external_enabled=!0,H.external=H.external||[],H.external=H.external.concat(G)}}}let A=z.templateDir,V=JT.compile(TT.readFileSync($T.resolve(A,"rollup.config.mjs.njk"),"utf8"),JT.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 bT from"node:path";import RT 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=RT.compile(OT.readFileSync(bT.resolve(K,"build.js.njk"),"utf8"),RT.configure(K)).render(T),Y=z.projectDir,M=bT.resolve(Y,"build.js");OT.writeFileSync(M,G,"utf8"),OT.chmodSync(M,"755")}import KT from"node:fs";import qT from"node:path";import uT from"nunjucks";import dT from"ajv/dist/2020.js";import DT from"ajv/dist/standalone/index.js";import cT 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},N={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=uT.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}});cT(X);let y=X.compile(T),q=DT(X,y)+`
|
|
2
|
+
export { schema31 as schema };`;KT.writeFileSync(qT.resolve(J,"src/default/validate_input.js"),q,"utf8")}import NT from"node:fs";import LT from"node:path";import BT 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=BT.compile(NT.readFileSync(LT.resolve(K,"tsconfig.json.njk"),"utf8"),BT.configure(K)).render(T),Y=z.projectDir,M=LT.resolve(Y,"tsconfig.json");NT.writeFileSync(M,G,"utf8")}import rT from"node:path";import ET from"@fnet/shelljs";async function YT({setProgress:$,context:O}){let z=O.projectDir;await $({message:"Prettifiying source files."});let W=rT.join("src","**","*");if(j("bun")){let T=await ET(`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 ET(`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 nT 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 nT("tsc",{cwd:W})).code!==0)throw Error("Couldnt create .d.ts files.")}import IT 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 IT(`bun install ${O.doc.features.npm_install_flags}`,{cwd:W})).code!==0)throw Error("Couldnt install npm packages.")}else if((await IT(`npm install ${O.doc.features.npm_install_flags}`,{cwd:W})).code!==0)throw Error("Couldnt install npm packages.")}import _T from"node:fs";import pT from"node:path";import{spawn as sT}from"node:child_process";async function FT($){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=pT.resolve(O,"package.json");if(!_T.existsSync(Y))throw Error(`package.json not found at ${Y}`);let M=JSON.parse(_T.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=sT(J,[],{cwd:O,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 tT from"node:path";async function MT({setProgress:$,context:O}){let z=O.projectDir;await $({message:"Building main project."});let W=O.dev?"build:dev":"build",T={...process.env},K=tT.join(z,"node_modules");T.NODE_PATH=K;let Q=T.NODE_OPTIONS||"";T.NODE_OPTIONS=`${Q} --preserve-symlinks`.trim(),await FT({projectDir:z,scriptName:W,shell:!0,detached:!0,env:T})}class lT extends CT{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
|
+
`;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 hT(this.apiContext),await QT(this.apiContext),await jT(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 MT(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=lT;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.r7cr7ar9.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.r7cr7ar9.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.a9tw7vtc.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.a9tw7vtc.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
1
|
{
|
|
2
2
|
"name": "@fnet/cli",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.8",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist",
|
|
6
6
|
"template"
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@fnet/object-from-schema": "^0.1.25",
|
|
45
45
|
"@fnet/prompt": "^0.2.16",
|
|
46
46
|
"@fnet/rollup-plugin-delete": "^0.1.10",
|
|
47
|
-
"@fnet/service": "^0.1.
|
|
47
|
+
"@fnet/service": "^0.1.8",
|
|
48
48
|
"@fnet/shell-flow": "^0.2.8",
|
|
49
49
|
"@fnet/shelljs": "^0.2.4",
|
|
50
50
|
"@fnet/to-pyip": "^0.2.1",
|
|
@@ -87,6 +87,6 @@
|
|
|
87
87
|
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
88
88
|
"@rollup/plugin-replace": "^6.0.2",
|
|
89
89
|
"@rollup/plugin-terser": "^0.4.4",
|
|
90
|
-
"rollup": "^4.52.
|
|
90
|
+
"rollup": "^4.52.5"
|
|
91
91
|
}
|
|
92
92
|
}
|
|
@@ -72,14 +72,14 @@
|
|
|
72
72
|
{% if atom.doc.features.cli.enabled %}
|
|
73
73
|
{% if atom.doc.features.project.format ==='cjs' %}
|
|
74
74
|
,"cli": "bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.dir}}/index.cjs"
|
|
75
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
75
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
76
76
|
,"mcp": "bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.dir}}/index.cjs --cli-mode=mcp"
|
|
77
77
|
,"mcp-inspect": "bunx @modelcontextprotocol/inspector bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.dir}}/index.cjs --cli-mode=mcp"
|
|
78
78
|
{% endif %}
|
|
79
79
|
{% else %}
|
|
80
80
|
,"cli": "bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.output.file}}"
|
|
81
81
|
,"cli:dev": "bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.input.file}}"
|
|
82
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
82
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
83
83
|
,"cli:mcp": "bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.output.file}} --cli-mode=mcp"
|
|
84
84
|
,"cli:mcp:inspect": "bunx @modelcontextprotocol/inspector bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.output.file}} --cli-mode=mcp"
|
|
85
85
|
,"cli:mcp:dev": "bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.input.file}} --cli-mode=mcp"
|
|
@@ -261,7 +261,7 @@ import argv,{argsParser} from '../default/input.args.js';
|
|
|
261
261
|
import { schema as inputSchema } from '../default/validate_input.js';
|
|
262
262
|
import { default as Engine } from '../default/{{atom.doc.features.cli_default_entry_file or atom.doc.features.main_default_entry_file}}';
|
|
263
263
|
|
|
264
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
264
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
265
265
|
{{ importMcpDependencies() }}
|
|
266
266
|
{% elif atom.doc.features.cli.http.enabled===true %}
|
|
267
267
|
// Using express for HTTP mode
|
|
@@ -278,7 +278,7 @@ import express from 'express';
|
|
|
278
278
|
|
|
279
279
|
{{ defaultModeExtended() }}
|
|
280
280
|
|
|
281
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
281
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
282
282
|
{{ mcpModeCodeExtended('runExtended') }}
|
|
283
283
|
{% endif %}
|
|
284
284
|
|
|
@@ -301,7 +301,7 @@ import express from 'express';
|
|
|
301
301
|
|
|
302
302
|
{{ defaultModeEngine('engine') }}
|
|
303
303
|
|
|
304
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
304
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
305
305
|
{{ mcpModeCodeEngine('engine') }}
|
|
306
306
|
{% endif %}
|
|
307
307
|
|
|
@@ -42,7 +42,7 @@ const http = require('http');
|
|
|
42
42
|
{% endif %}
|
|
43
43
|
{% endif %}
|
|
44
44
|
|
|
45
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
45
|
+
{% if atom.doc.features.cli.mcp.enabled === true or atom.doc.features.cli.webhook.enabled===true %}
|
|
46
46
|
// Shared: crypto module (used by MCP and Webhook modes)
|
|
47
47
|
{% if atom.doc.features.project.format==='esm' %}
|
|
48
48
|
import crypto from 'crypto';
|
|
@@ -57,7 +57,7 @@ const crypto = require('crypto');
|
|
|
57
57
|
Import dependencies for ALL enabled CLI modes
|
|
58
58
|
Multiple modes can be enabled simultaneously
|
|
59
59
|
-------------------------------------------------------------------------- #}
|
|
60
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
60
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
61
61
|
{% include "./modes/mcp/imports.njk" %}
|
|
62
62
|
{% endif %}
|
|
63
63
|
|
|
@@ -107,7 +107,7 @@ const run = async () => {
|
|
|
107
107
|
--------------------------------------------------------------------------
|
|
108
108
|
Model Context Protocol server with multiple transport options
|
|
109
109
|
-------------------------------------------------------------------------- #}
|
|
110
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
110
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
111
111
|
{% include "./modes/mcp/index.njk" %}
|
|
112
112
|
{% endif %}
|
|
113
113
|
|
|
@@ -170,7 +170,7 @@ const run = async () => {
|
|
|
170
170
|
UNKNOWN MODE HANDLER
|
|
171
171
|
-------------------------------------------------------------------------- #}
|
|
172
172
|
console.error(`Unknown CLI mode: ${cliMode}`);
|
|
173
|
-
console.error(`Available modes: default{% if atom.doc.features.cli.mcp.enabled
|
|
173
|
+
console.error(`Available modes: default{% if atom.doc.features.cli.mcp.enabled === true %}, mcp{% endif %}{% if atom.doc.features.cli.http.enabled===true %}, http{% endif %}{% if atom.doc.features.cli.pipeline.enabled===true %}, pipeline{% endif %}{% if atom.doc.features.cli.websocket.enabled===true %}, websocket{% endif %}{% if atom.doc.features.cli.webhook.enabled===true %}, webhook{% endif %}`);
|
|
174
174
|
process.exit(1);
|
|
175
175
|
};
|
|
176
176
|
|
|
@@ -71,14 +71,14 @@
|
|
|
71
71
|
{% if atom.doc.features.cli.enabled %}
|
|
72
72
|
{% if atom.doc.features.project.format ==='cjs' %}
|
|
73
73
|
,"cli": "bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.dir}}/index.cjs"
|
|
74
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
74
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
75
75
|
,"mcp": "bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.dir}}/index.cjs --cli-mode=mcp"
|
|
76
76
|
,"mcp-inspect": "bunx @modelcontextprotocol/inspector bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.dir}}/index.cjs --cli-mode=mcp"
|
|
77
77
|
{% endif %}
|
|
78
78
|
{% else %}
|
|
79
79
|
,"cli": "bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.output.file}}"
|
|
80
80
|
,"cli:dev": "bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.input.file}}"
|
|
81
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
81
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
82
82
|
,"cli:mcp": "bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.output.file}} --cli-mode=mcp"
|
|
83
83
|
,"cli:mcp:inspect": "bunx @modelcontextprotocol/inspector bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.output.file}} --cli-mode=mcp"
|
|
84
84
|
,"cli:mcp:dev": "bun {{atom.doc.features.cli.node_options}} {{atom.doc.features.cli.input.file}} --cli-mode=mcp"
|
|
@@ -314,7 +314,7 @@ run()
|
|
|
314
314
|
import Node from '../../../cli';
|
|
315
315
|
|
|
316
316
|
{# Import dependencies based on enabled features #}
|
|
317
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
317
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
318
318
|
{{ importMcpDependencies('esm') }}
|
|
319
319
|
{% elif atom.doc.features.cli.http.enabled===true %}
|
|
320
320
|
// Using express for HTTP mode
|
|
@@ -327,7 +327,7 @@ run()
|
|
|
327
327
|
|
|
328
328
|
{{ defaultModeExtend('Node') }}
|
|
329
329
|
|
|
330
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
330
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
331
331
|
{{ mcpModeCode('Node') }}
|
|
332
332
|
{% endif %}
|
|
333
333
|
|
|
@@ -348,7 +348,7 @@ run()
|
|
|
348
348
|
import Node from '../../../src';
|
|
349
349
|
|
|
350
350
|
{# Import dependencies based on enabled features #}
|
|
351
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
351
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
352
352
|
{{ importMcpDependencies('esm') }}
|
|
353
353
|
{% elif atom.doc.features.cli.http.enabled===true %}
|
|
354
354
|
// Using express for HTTP mode
|
|
@@ -362,7 +362,7 @@ run()
|
|
|
362
362
|
|
|
363
363
|
{{ defaultModeStandard('Node') }}
|
|
364
364
|
|
|
365
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
365
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
366
366
|
{{ mcpModeCode('Node') }}
|
|
367
367
|
{% endif %}
|
|
368
368
|
|
|
@@ -393,7 +393,7 @@ run()
|
|
|
393
393
|
const Node = require('../../../cli');
|
|
394
394
|
|
|
395
395
|
{# Import dependencies based on enabled features #}
|
|
396
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
396
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
397
397
|
{{ importMcpDependencies('cjs') }}
|
|
398
398
|
{% elif atom.doc.features.cli.http.enabled===true %}
|
|
399
399
|
// Using express for HTTP mode
|
|
@@ -407,7 +407,7 @@ run()
|
|
|
407
407
|
|
|
408
408
|
{{ defaultModeExtend('Node') }}
|
|
409
409
|
|
|
410
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
410
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
411
411
|
{{ mcpModeCode('Node') }}
|
|
412
412
|
{% endif %}
|
|
413
413
|
|
|
@@ -428,7 +428,7 @@ run()
|
|
|
428
428
|
const Node = require('../../../src');
|
|
429
429
|
|
|
430
430
|
{# Import dependencies based on enabled features #}
|
|
431
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
431
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
432
432
|
{{ importMcpDependencies('cjs') }}
|
|
433
433
|
{% elif atom.doc.features.cli.http.enabled===true %}
|
|
434
434
|
// Using express for HTTP mode
|
|
@@ -442,7 +442,7 @@ run()
|
|
|
442
442
|
|
|
443
443
|
{{ defaultModeStandard('Node') }}
|
|
444
444
|
|
|
445
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
445
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
446
446
|
{{ mcpModeCode('Node') }}
|
|
447
447
|
{% endif %}
|
|
448
448
|
|
|
@@ -42,7 +42,7 @@ const http = require('http');
|
|
|
42
42
|
{% endif %}
|
|
43
43
|
{% endif %}
|
|
44
44
|
|
|
45
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
45
|
+
{% if atom.doc.features.cli.mcp.enabled === true or atom.doc.features.cli.webhook.enabled===true %}
|
|
46
46
|
// Shared: crypto module (used by MCP and Webhook modes)
|
|
47
47
|
{% if atom.doc.features.project.format==='esm' %}
|
|
48
48
|
import crypto from 'crypto';
|
|
@@ -57,7 +57,7 @@ const crypto = require('crypto');
|
|
|
57
57
|
Import dependencies for ALL enabled CLI modes
|
|
58
58
|
Multiple modes can be enabled simultaneously
|
|
59
59
|
-------------------------------------------------------------------------- #}
|
|
60
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
60
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
61
61
|
{% include "./modes/mcp/imports.njk" %}
|
|
62
62
|
{% endif %}
|
|
63
63
|
|
|
@@ -107,7 +107,7 @@ const run = async () => {
|
|
|
107
107
|
--------------------------------------------------------------------------
|
|
108
108
|
Model Context Protocol server with multiple transport options
|
|
109
109
|
-------------------------------------------------------------------------- #}
|
|
110
|
-
{% if atom.doc.features.cli.mcp.enabled
|
|
110
|
+
{% if atom.doc.features.cli.mcp.enabled === true %}
|
|
111
111
|
{% include "./modes/mcp/index.njk" %}
|
|
112
112
|
{% endif %}
|
|
113
113
|
|
|
@@ -170,7 +170,7 @@ const run = async () => {
|
|
|
170
170
|
UNKNOWN MODE HANDLER
|
|
171
171
|
-------------------------------------------------------------------------- #}
|
|
172
172
|
console.error(`Unknown CLI mode: ${cliMode}`);
|
|
173
|
-
console.error(`Available modes: default{% if atom.doc.features.cli.mcp.enabled
|
|
173
|
+
console.error(`Available modes: default{% if atom.doc.features.cli.mcp.enabled === true %}, mcp{% endif %}{% if atom.doc.features.cli.http.enabled===true %}, http{% endif %}{% if atom.doc.features.cli.pipeline.enabled===true %}, pipeline{% endif %}{% if atom.doc.features.cli.websocket.enabled===true %}, websocket{% endif %}{% if atom.doc.features.cli.webhook.enabled===true %}, webhook{% endif %}`);
|
|
174
174
|
process.exit(1);
|
|
175
175
|
};
|
|
176
176
|
|