@fnet/cli 0.120.0 → 0.122.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fnet/index.js +1 -1
- package/dist/fnode/{index.BccmKJid.js → index.B1OhKt7p.js} +1 -1
- package/dist/fnode/{index.C297FGrE.js → index.BgwaIU1c.js} +1 -1
- package/dist/fnode/index.js +1 -1
- package/package.json +1 -1
- package/template/fnet/bun/src/default/blocks/assign.js.njk +1 -1
- package/template/fnet/bun/src/default/blocks/call.js.njk +5 -1
- package/template/fnet/bun/src/default/blocks/for.js.njk +2 -2
- package/template/fnet/bun/src/default/blocks/form.js.njk +6 -1
- package/template/fnet/bun/src/default/blocks/jump.js.njk +1 -1
- package/template/fnet/bun/src/default/blocks/modules.js.njk +1 -1
- package/template/fnet/bun/src/default/blocks/operation.js.njk +1 -1
- package/template/fnet/bun/src/default/blocks/raise.js.njk +5 -1
- package/template/fnet/bun/src/default/blocks/return.js.njk +1 -1
- package/template/fnet/bun/src/default/blocks/steps.js.njk +2 -2
- package/template/fnet/bun/src/default/blocks/switch.js.njk +3 -4
- package/template/fnet/bun/src/default/blocks/tryexcept.js.njk +4 -4
- package/template/fnet/bun/src/default/macros/block-entry-args.js.njk +2 -0
- package/template/fnet/bun/src/default/macros/block-next.js.njk +2 -2
- package/template/fnet/bun/src/default/workflow.js.njk +1 -1
- package/template/fnet/node/package.json.njk +3 -1
- package/template/fnet/node/src/default/blocks/assign.js.njk +1 -1
- package/template/fnet/node/src/default/blocks/call.js.njk +6 -1
- package/template/fnet/node/src/default/blocks/for.js.njk +2 -2
- package/template/fnet/node/src/default/blocks/form.js.njk +6 -1
- package/template/fnet/node/src/default/blocks/jump.js.njk +1 -1
- package/template/fnet/node/src/default/blocks/modules.js.njk +1 -1
- package/template/fnet/node/src/default/blocks/operation.js.njk +1 -1
- package/template/fnet/node/src/default/blocks/raise.js.njk +5 -1
- package/template/fnet/node/src/default/blocks/return.js.njk +1 -1
- package/template/fnet/node/src/default/blocks/steps.js.njk +2 -2
- package/template/fnet/node/src/default/blocks/switch.js.njk +2 -2
- package/template/fnet/node/src/default/blocks/tryexcept.js.njk +3 -4
- package/template/fnet/node/src/default/macros/block-entry-args.js.njk +2 -0
- package/template/fnet/node/src/default/macros/block-next.js.njk +2 -2
- package/template/fnet/node/src/default/workflow.js.njk +1 -1
- package/template/fnode/bun/package.json.njk +3 -1
- package/template/fnode/node/package.json.njk +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"node:fs";import t from"node:path";import a from"nunjucks";import s from"@flownet/lib-parse-imports-js";import o from"@flownet/lib-parse-node-url";import{B as i,c as r,a as n}from"./index.DBxLarjt.js";import p from"lodash.merge";import{f as l,i as c,a as d,b as u,c as f,d as m,p as b,e as g,g as h,h as _,j as w,k as y,l as x,m as v,r as k}from"./index.BqI7rTjk.js";import j from"@fnet/npm-list-versions";import D from"@fnet/shelljs";import"node:crypto";import"yaml";import"chalk";import"@flownet/lib-atom-api-js";import"@fnet/config";import"@fnet/list-files";import"redis";import"@flownet/lib-is-redis-online";import"@fnet/yaml";import"@flownet/lib-render-templates-dir";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"./index.js";import"node:url";import"yargs";import"node:util";import"tree-kill";import"node:child_process";import"node:os";import"@fnet/prompt";import"fs";import"path";import"@fnet/shell-flow";function C({dir:a,name:s="index"}){let o=t.resolve(a,`./${s}.tsx`);if(e.existsSync(o)||(o=t.resolve(a,`./${s}.ts`)),e.existsSync(o)||(o=t.resolve(a,`./${s}.jsx`)),e.existsSync(o)||(o=t.resolve(a,`./${s}.js`)),!e.existsSync(o))return{};const i=o,r=t.extname(o);return{file:i,ext:r,ts:".ts"===r||".tsx"===r,name:s}}async function S(e){const{atom:a,context:o,setProgress:i}=e;i("Initializing features..."),a.doc.features=a.doc.features||{};const r=a.doc.features;r.project=r.project||{},r.project.format=r.project.format||r.project_format||"esm",r.project_format=r.project.format,r.dts_enabled=!0===r.dts||void 0!==r.dts&&!1!==r.dts;const n=t.resolve(o.project.projectDir),b=C({dir:t.resolve(n,"./app")});if(b.file){i("Parsing app entry imports...");let e=await s({file:b.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.app_uses_jsx=t,r.app_has_entry=!0,e=await s({file:b.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.app_entry_uses_jsx=t,r.app_entry_is_ts=b.ts,r.app_entry_ext=b.ext}const g=C({dir:t.resolve(n,"./cli")});if(g.file){i("Parsing cli entry imports...");let e=await s({file:g.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.cli_uses_jsx=t,r.cli_has_entry=!0,e=await s({file:g.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.cli_entry_uses_jsx=t,r.cli_entry_is_ts=g.ts,r.cli_entry_ext=g.ext}if("workflow.lib"===a.type){const e=C({dir:t.resolve(n,"./src")});if(e.file){i("Parsing src entry imports...");let t=await s({file:e.file,recursive:!0}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.src_uses_jsx=a,r.src_has_entry=!0,t=await s({file:e.file}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.src_entry_uses_jsx=a,r.src_entry_is_ts=e.ts,r.src_entry_ext=e.ext}}const h=Reflect.has(r,"app_entry_uses_jsx")?!0===r.app_entry_uses_jsx:!0===r.src_entry_uses_jsx,_=Reflect.has(r,"cli_entry_uses_jsx")?!0===r.cli_entry_uses_jsx:!0===r.src_entry_uses_jsx;r.form_enabled=h||_||!0===r.form||!0===r.form?.enabled,r.multiple_enabled=r.multiple_enabled||!0===r.multiple||!0===r.multiple?.enabled,!1===r.app?r.app={enabled:!1}:!0===r.app?r.app={enabled:!0,extend:!0===r.app_has_entry,export:!0,react:h}:r.app={enabled:!0,extend:!0===r.app_has_entry,export:!0,react:h,...r.app||{}},r.app.enabled=!0===r.app.enabled&&(!0===a.doc.features.form_enabled||!0===r.app.extend||!0===r.app.enabled),r.app.format=r.app.format||"esm",r.app.folder=r.app.folder||r.app.format||"default",!1===r.cli?r.cli={enabled:!1}:!0===r.cli?r.cli={enabled:!0,extend:!0===r.cli_has_entry,export:!0,react:_}:r.cli={enabled:!0,extend:!0===r.cli_has_entry,export:!0,react:_,...r.cli||{}},r.cli.enabled=!0===r.cli.enabled&&(!1===a.doc.features.form_enabled||!0===r.cli.extend||!0===r.cli.enabled),r.cli.format=r.cli.format||"esm",r.cli.folder=r.cli.folder||r.cli.folder||"esm",r.cli.node_options=r.cli.node?.options||r.cli.node_options||"",r.cli.bin=r.cli.bin||a.doc.name,r.cli.installable=!0===r.cli.installable,r.cli.enabled&&(a.doc["npm::bin"]=r.cli.bin,console.log(`Setting npm::bin to ${r.cli.bin} from features.cli.bin`)),r.json=r.cli.enabled||r.json;const w={cjs:{format:"cjs",context:r.form_enabled?"window":"global",babel:!0===r.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==r.cjs,copy:!1},esm:{format:"esm",context:r.form_enabled?"window":"global",babel:!0===r.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==r.esm,copy:!0},iife:{format:"iife",context:r.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===r.iife,terser:!0,copy:!1}};!0===r.webos&&(w.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===r.electron&&(w.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===r.nextjs&&(w.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===r.ios&&(w.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===r.macos&&(w.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===r.app.enabled&&(r.app.dir=`./dist/app/${r.app.folder}`,w.app={format:r.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:r.app.dir,terser:!0,output_exports:!1===r.app.export?"none":"auto",browsersync:!0}),!0===r.cli.enabled&&(r.cli.dir=`./dist/cli/${r.cli.folder}`,w.cli={format:r.cli.format,context:"global",babel:!0===r.src_uses_jsx||!0===r.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:r.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===r.cli.export?"none":"auto"});const y={server:".",startPath:`${t.normalize(r.app.dir||".")}`,files:[t.normalize("./dist/**/*")],cors:!0,open:!1};r.babel_options=p({targets:{browsers:"last 9 versions, not dead",node:"18"}},r.babel_options||r.babel?.options),r.browsersync_options=p(y,r.browsersync_options||r.browsersync?.options||{}),r.replace_options=p({},r.replace_options||r.replace?.options||{}),Reflect.has(r.browsersync_options,"proxy")&&delete r.browsersync_options.server,r.rollup=r.rollup||{},r.rollup_output=p(w,r.rollup_output||r.rollup?.output||{}),r.preact_enabled=!0===r.preact||r.preact&&!1!==r.preact?.enabled;let x=Object.keys(w);for(const e of x){const t=w[e];t&&(!1!==r.rollup[e]?(t.babel_options=t.babel_options||r.babel_options,t.browsersync_options=p(r.browsersync_options,t.browsersync_options),t.replace_options=p(r.replace_options,t.replace_options),r.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),(r.form_enabled||r.babel)&&(t.babel=!0)):delete r.rollup_output[e])}x=Object.keys(r.rollup_output),r.babel_enabled=x.some((e=>!0===r.rollup_output[e].babel)),r.browser_enabled=x.some((e=>!0===r.rollup_output[e].babel)),r.browsersync_enabled=!1!==r.browsersync&&x.some((e=>!0===r.rollup_output[e].browsersync)),r.browsersync_enabled=r.browsersync_enabled&&r.app.enabled,r.dependency_auto_enabled=!1!==r.dependency_auto&&!1!==r.dependency_auto?.enabled,r.npm_install_flags=r.npm_install_flags||"",r.react_version=r.react_version||r.react?.version||18,c(e),d(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:s,packageDevDependencies:a})}(e),u(e),f(e),m(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:s,packageDevDependencies:a})}(e)}class A extends i{async initRuntime(){await S(this.apiContext),await async function({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:s}){s("Initializing dependencies");const o=e.doc.dependencies||[];if(o.filter((e=>!e.dev)).forEach((e=>t.push(e))),o.filter((e=>e.dev)).forEach((e=>a.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";s("Fetching React versions"),a=`^${(await j({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),a.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"}),e.doc.features.cli.mcp&&!0===e.doc.features.cli.mcp.enabled&&(t.push({package:"@modelcontextprotocol/sdk",version:"^1.10"}),t.push({package:"express",version:"^4.18"}))),e.doc.features.render&&!1!==e.doc.features.render.enabled&&a.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),a.push({package:"@babel/core",version:"^7"}),a.push({package:"@rollup/plugin-commonjs",version:"^28"}),a.push({package:"@rollup/plugin-node-resolve",version:"^16"}),a.push({package:"@rollup/plugin-replace",version:"^6"}),a.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&a.push({package:"rollup-plugin-dts",version:"^6"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),a.push({package:"@rollup/plugin-alias",version:"^5"}),a.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6"}),a.push({package:"@babel/preset-env",version:"^7"}),a.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":a.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":a.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":a.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":a.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":a.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(this.apiContext),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initLibs(){this.setProgress({message:"Initializing external libs."});const e=[{name:this.atom.doc.name,type:"atom",parent_id:this.atom.parent_id}];this.libs=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.apiContext.packageDependencies})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const s=a[e],o=await this.findAtomLibrary({url:s.name});s.atom=o;const i=o.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));i?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const a=o({url:e});if(!a)throw new Error(`Invalid package name: ${e}`);if(a.protocol||(a.protocol=this.context.protocol),"ac:"===a.protocol){const t=a.pathname.split("/");if(1===t.length)return await this.apiContext.Atom.first({where:{name:e,parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await this.apiContext.Atom.first({where:{name:t[0],parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"folder"}});return await this.apiContext.Atom.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===a.protocol){const e=this.atom;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const a=t.resolve(this.context.projectSrcDir,"index.js"),o=await s({file:a,recursive:!0}),i=e.doc.dependencies,r=o.all;for await(const e of r){if("npm"!==e.type)continue;if(i.find((t=>t.package===e.package)))continue;const t=await b({name:e.package,projectDir:this.context.projectDir,setProgress:this.apiContext.setProgress});i.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:a}){await this.setProgress({message:"Creating external lib files."}),this.atom.typesDir="./types";const s=a.filter((e=>"atom"===e.type));for(let a=0;a<s.length;a++){const o=s[a].atom,i=this.context.projectDir;if("local:"===o.protocol){const a=t.resolve(this.context.projectSrcDir,`${o.fileName||o.name}.js`),s=t.relative(t.join(this.context.projectDir,"src","default"),a);if(!e.existsSync(a)){e.mkdirSync(t.dirname(a),{recursive:!0});let s="export default async (args)=>{\n";s+="}",e.writeFileSync(a,s,"utf8")}o.relativePath=s.split(t.sep).join("/"),this.atom.typesDir=`./types/${t.basename(i)}/src`}else{const a=t.join(i,"src","libs",`${o.id}.js`),s=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;e.writeFileSync(a,s.content,"utf8")}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const s={libs:this.libs.filter((e=>"atom"===e.type)),libraryAtom:this.atom,atom:this.atom},o=this.context.templateDir,i=a.compile(e.readFileSync(t.resolve(o,t.join("src","default","engine.js.njk")),"utf8"),this.apiContext.njEnv).render(s),r=this.context.projectDir,n=t.resolve(r,t.join("src","default","index.js"));e.writeFileSync(n,i,"utf8")}async build(){try{this.fileMode&&(await this.createAtomLibFiles({libs:this.libs}),await this.createEngine(),await this.createProjectYaml(),await r(this.apiContext),await g(this.apiContext),await n(this.apiContext),await h(this.apiContext),await _(this.apiContext),await w(this.apiContext),await async function({atom:o,setProgress:i,context:r,packageDependencies:n}){await i({message:"Creating rollup file."});const p={atom:o,packageDependencies:n},l=t.resolve(r.projectDir,"src","default/index.js");if(!e.existsSync(l))throw new Error(`Entry file not found: ${l}`);const c=(await s({file:l,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),d=o.doc.features.rollup_output,u=Object.keys(d);for(let e=0;e<u.length;e++){const t=d[u[e]];if(!0===t.browser&&c.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(c.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<c.length;e++){const a=c[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(c)}}const f=r.templateDir;let m=a.compile(e.readFileSync(t.resolve(f,"rollup.config.mjs.njk"),"utf8"),a.configure(f)).render(p);const b=r.projectDir;let g=t.resolve(b,"rollup.config.mjs");e.writeFileSync(g,m,"utf8")}(this.apiContext),await y(this.apiContext),await x(this.apiContext),await async function({atom:e,setProgress:t,context:a}){if(!e.doc.features.dts_enabled)return;const s=a.projectDir;if(await t({message:"Creating .d.ts"}),0!==(await D("tsc",{cwd:s})).code)throw new Error("Couldnt create .d.ts files.")}(this.apiContext),this.buildMode&&(await v(this.apiContext),await k(this.apiContext),this.deployMode&&await this.deploy())),await this._cache_set(this.buildKey,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.buildKey,{status:"FAILED",message:e.message||e}),console.log(e),e}}}export{A as default};
|
|
1
|
+
import e from"node:fs";import t from"node:path";import a from"nunjucks";import s from"@flownet/lib-parse-imports-js";import o from"@flownet/lib-parse-node-url";import{B as i,c as r,a as n}from"./index.DBxLarjt.js";import p from"lodash.merge";import{f as l,i as c,a as d,b as u,c as f,d as m,p as b,e as g,g as h,h as _,j as w,k as y,l as x,m as v,r as k}from"./index.BqI7rTjk.js";import j from"@fnet/npm-list-versions";import D from"@fnet/shelljs";import"node:crypto";import"yaml";import"chalk";import"@flownet/lib-atom-api-js";import"@fnet/config";import"@fnet/list-files";import"redis";import"@flownet/lib-is-redis-online";import"@fnet/yaml";import"@flownet/lib-render-templates-dir";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"./index.js";import"node:url";import"yargs";import"node:util";import"tree-kill";import"node:child_process";import"node:os";import"@fnet/prompt";import"fs";import"path";import"@fnet/shell-flow";function C({dir:a,name:s="index"}){let o=t.resolve(a,`./${s}.tsx`);if(e.existsSync(o)||(o=t.resolve(a,`./${s}.ts`)),e.existsSync(o)||(o=t.resolve(a,`./${s}.jsx`)),e.existsSync(o)||(o=t.resolve(a,`./${s}.js`)),!e.existsSync(o))return{};const i=o,r=t.extname(o);return{file:i,ext:r,ts:".ts"===r||".tsx"===r,name:s}}async function S(e){const{atom:a,context:o,setProgress:i}=e;i("Initializing features..."),a.doc.features=a.doc.features||{};const r=a.doc.features;r.project=r.project||{},r.project.format=r.project.format||r.project_format||"esm",r.project_format=r.project.format,r.dts_enabled=!0===r.dts||void 0!==r.dts&&!1!==r.dts;const n=t.resolve(o.project.projectDir),b=C({dir:t.resolve(n,"./app")});if(b.file){i("Parsing app entry imports...");let e=await s({file:b.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.app_uses_jsx=t,r.app_has_entry=!0,e=await s({file:b.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.app_entry_uses_jsx=t,r.app_entry_is_ts=b.ts,r.app_entry_ext=b.ext}const g=C({dir:t.resolve(n,"./cli")});if(g.file){i("Parsing cli entry imports...");let e=await s({file:g.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.cli_uses_jsx=t,r.cli_has_entry=!0,e=await s({file:g.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.cli_entry_uses_jsx=t,r.cli_entry_is_ts=g.ts,r.cli_entry_ext=g.ext}if("workflow.lib"===a.type){const e=C({dir:t.resolve(n,"./src")});if(e.file){i("Parsing src entry imports...");let t=await s({file:e.file,recursive:!0}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));r.src_uses_jsx=a,r.src_has_entry=!0,t=await s({file:e.file}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),r.src_entry_uses_jsx=a,r.src_entry_is_ts=e.ts,r.src_entry_ext=e.ext}}const h=Reflect.has(r,"app_entry_uses_jsx")?!0===r.app_entry_uses_jsx:!0===r.src_entry_uses_jsx,_=Reflect.has(r,"cli_entry_uses_jsx")?!0===r.cli_entry_uses_jsx:!0===r.src_entry_uses_jsx;r.form_enabled=h||_||!0===r.form||!0===r.form?.enabled,r.multiple_enabled=r.multiple_enabled||!0===r.multiple||!0===r.multiple?.enabled,!1===r.app?r.app={enabled:!1}:!0===r.app?r.app={enabled:!0,extend:!0===r.app_has_entry,export:!0,react:h}:r.app={enabled:!0,extend:!0===r.app_has_entry,export:!0,react:h,...r.app||{}},r.app.enabled=!0===r.app.enabled&&(!0===a.doc.features.form_enabled||!0===r.app.extend||!0===r.app.enabled),r.app.format=r.app.format||"esm",r.app.folder=r.app.folder||r.app.format||"default",!1===r.cli?r.cli={enabled:!1}:!0===r.cli?r.cli={enabled:!0,extend:!0===r.cli_has_entry,export:!0,react:_}:r.cli={enabled:!0,extend:!0===r.cli_has_entry,export:!0,react:_,...r.cli||{}},r.cli.enabled=!0===r.cli.enabled&&(!1===a.doc.features.form_enabled||!0===r.cli.extend||!0===r.cli.enabled),r.cli.format=r.cli.format||"esm",r.cli.folder=r.cli.folder||r.cli.folder||"esm",r.cli.node_options=r.cli.node?.options||r.cli.node_options||"",r.cli.bin=r.cli.bin||a.doc.name,r.cli.installable=!0===r.cli.installable,r.cli.enabled&&(a.doc["npm::bin"]=r.cli.bin,console.log(`Setting npm::bin to ${r.cli.bin} from features.cli.bin`)),r.json=r.cli.enabled||r.json;const w={cjs:{format:"cjs",context:r.form_enabled?"window":"global",babel:!0===r.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==r.cjs,copy:!1},esm:{format:"esm",context:r.form_enabled?"window":"global",babel:!0===r.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==r.esm,copy:!0},iife:{format:"iife",context:r.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===r.iife,terser:!0,copy:!1}};!0===r.webos&&(w.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===r.electron&&(w.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===r.nextjs&&(w.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===r.ios&&(w.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===r.macos&&(w.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===r.app.enabled&&(r.app.dir=`./dist/app/${r.app.folder}`,w.app={format:r.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:r.app.dir,terser:!0,output_exports:!1===r.app.export?"none":"auto",browsersync:!0}),!0===r.cli.enabled&&(r.cli.dir=`./dist/cli/${r.cli.folder}`,w.cli={format:r.cli.format,context:"global",babel:!0===r.src_uses_jsx||!0===r.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:r.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===r.cli.export?"none":"auto"});const y={server:".",startPath:`${t.normalize(r.app.dir||".")}`,files:[t.normalize("./dist/**/*")],cors:!0,open:!1};r.babel_options=p({targets:{browsers:"last 9 versions, not dead",node:"18"}},r.babel_options||r.babel?.options),r.browsersync_options=p(y,r.browsersync_options||r.browsersync?.options||{}),r.replace_options=p({},r.replace_options||r.replace?.options||{}),Reflect.has(r.browsersync_options,"proxy")&&delete r.browsersync_options.server,r.rollup=r.rollup||{},r.rollup_output=p(w,r.rollup_output||r.rollup?.output||{}),r.preact_enabled=!0===r.preact||r.preact&&!1!==r.preact?.enabled;let x=Object.keys(w);for(const e of x){const t=w[e];t&&(!1!==r.rollup[e]?(t.babel_options=t.babel_options||r.babel_options,t.browsersync_options=p(r.browsersync_options,t.browsersync_options),t.replace_options=p(r.replace_options,t.replace_options),r.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),(r.form_enabled||r.babel)&&(t.babel=!0)):delete r.rollup_output[e])}x=Object.keys(r.rollup_output),r.babel_enabled=x.some((e=>!0===r.rollup_output[e].babel)),r.browser_enabled=x.some((e=>!0===r.rollup_output[e].babel)),r.browsersync_enabled=!1!==r.browsersync&&x.some((e=>!0===r.rollup_output[e].browsersync)),r.browsersync_enabled=r.browsersync_enabled&&r.app.enabled,r.dependency_auto_enabled=!1!==r.dependency_auto&&!1!==r.dependency_auto?.enabled,r.npm_install_flags=r.npm_install_flags||"",r.react_version=r.react_version||r.react?.version||18,c(e),d(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:s,packageDevDependencies:a})}(e),u(e),f(e),m(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:s,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,s=t.doc.features;l({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:s,packageDevDependencies:a})}(e)}class A extends i{async initRuntime(){await S(this.apiContext),await async function({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:s}){s("Initializing dependencies");const o=e.doc.dependencies||[];if(o.filter((e=>!e.dev)).forEach((e=>t.push(e))),o.filter((e=>e.dev)).forEach((e=>a.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";s("Fetching React versions"),a=`^${(await j({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),a.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"}),e.doc.features.cli.mcp&&!0===e.doc.features.cli.mcp.enabled&&(t.push({package:"@modelcontextprotocol/sdk",version:"^1.10"}),t.push({package:"express",version:"^4.18"}))),e.doc.features.render&&!1!==e.doc.features.render.enabled&&a.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),a.push({package:"@babel/core",version:"^7"}),a.push({package:"@rollup/plugin-commonjs",version:"^28"}),a.push({package:"@rollup/plugin-node-resolve",version:"^16"}),a.push({package:"@rollup/plugin-replace",version:"^6"}),a.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&a.push({package:"rollup-plugin-dts",version:"^6"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),a.push({package:"@rollup/plugin-alias",version:"^5"}),a.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6"}),a.push({package:"@babel/preset-env",version:"^7"}),a.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":a.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":a.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":a.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":a.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":a.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(this.apiContext),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initLibs(){this.setProgress({message:"Initializing external libs."});const e=[{name:this.atom.doc.name,type:"atom",parent_id:this.atom.parent_id}];this.libs=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.apiContext.packageDependencies})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const s=a[e],o=await this.findAtomLibrary({url:s.name});s.atom=o;const i=o.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));i?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const a=o({url:e});if(!a)throw new Error(`Invalid package name: ${e}`);if(a.protocol||(a.protocol=this.context.protocol),"ac:"===a.protocol){const t=a.pathname.split("/");if(1===t.length)return await this.apiContext.Atom.first({where:{name:e,parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await this.apiContext.Atom.first({where:{name:t[0],parent_id:this.atomConfig.env.ATOM_LIBRARIES_ID,type:"folder"}});return await this.apiContext.Atom.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===a.protocol){const e=this.atom;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const a=t.resolve(this.context.projectSrcDir,"index.js"),o=await s({file:a,recursive:!0}),i=e.doc.dependencies,r=o.all;for await(const e of r){if("npm"!==e.type)continue;if(i.find((t=>t.package===e.package)))continue;const t=await b({name:e.package,projectDir:this.context.projectDir,setProgress:this.apiContext.setProgress});i.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:a}){await this.setProgress({message:"Creating external lib files."}),this.atom.typesDir="./types";const s=a.filter((e=>"atom"===e.type));for(let a=0;a<s.length;a++){const o=s[a].atom,i=this.context.projectDir;if("local:"===o.protocol){const a=t.resolve(this.context.projectSrcDir,`${o.fileName||o.name}.js`),s=t.relative(t.join(this.context.projectDir,"src","default"),a);if(!e.existsSync(a)){e.mkdirSync(t.dirname(a),{recursive:!0});let s="export default async (input)=>{\n";s+="}",e.writeFileSync(a,s,"utf8")}o.relativePath=s.split(t.sep).join("/"),this.atom.typesDir=`./types/${t.basename(i)}/src`}else{const a=t.join(i,"src","libs",`${o.id}.js`),s=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;e.writeFileSync(a,s.content,"utf8")}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const s={libs:this.libs.filter((e=>"atom"===e.type)),libraryAtom:this.atom,atom:this.atom},o=this.context.templateDir,i=a.compile(e.readFileSync(t.resolve(o,t.join("src","default","engine.js.njk")),"utf8"),this.apiContext.njEnv).render(s),r=this.context.projectDir,n=t.resolve(r,t.join("src","default","index.js"));e.writeFileSync(n,i,"utf8")}async build(){try{this.fileMode&&(await this.createAtomLibFiles({libs:this.libs}),await this.createEngine(),await this.createProjectYaml(),await r(this.apiContext),await g(this.apiContext),await n(this.apiContext),await h(this.apiContext),await _(this.apiContext),await w(this.apiContext),await async function({atom:o,setProgress:i,context:r,packageDependencies:n}){await i({message:"Creating rollup file."});const p={atom:o,packageDependencies:n},l=t.resolve(r.projectDir,"src","default/index.js");if(!e.existsSync(l))throw new Error(`Entry file not found: ${l}`);const c=(await s({file:l,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),d=o.doc.features.rollup_output,u=Object.keys(d);for(let e=0;e<u.length;e++){const t=d[u[e]];if(!0===t.browser&&c.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(c.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<c.length;e++){const a=c[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(c)}}const f=r.templateDir;let m=a.compile(e.readFileSync(t.resolve(f,"rollup.config.mjs.njk"),"utf8"),a.configure(f)).render(p);const b=r.projectDir;let g=t.resolve(b,"rollup.config.mjs");e.writeFileSync(g,m,"utf8")}(this.apiContext),await y(this.apiContext),await x(this.apiContext),await async function({atom:e,setProgress:t,context:a}){if(!e.doc.features.dts_enabled)return;const s=a.projectDir;if(await t({message:"Creating .d.ts"}),0!==(await D("tsc",{cwd:s})).code)throw new Error("Couldnt create .d.ts files.")}(this.apiContext),this.buildMode&&(await v(this.apiContext),await k(this.apiContext),this.deployMode&&await this.deploy())),await this._cache_set(this.buildKey,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.buildKey,{status:"FAILED",message:e.message||e}),console.log(e),e}}}export{A as default};
|
package/dist/fnode/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import e,{delimiter as o,join as t}from"node:path";import{fileURLToPath as n}from"node:url";import r from"yargs";import i from"chalk";import s from"@fnet/config";import a,{existsSync as c}from"node:fs";import{promisify as l}from"node:util";import d from"tree-kill";import{spawn as p}from"node:child_process";import m from"node:os";import u from"@flownet/lib-render-templates-dir";import f from"@fnet/shelljs";import y from"@fnet/yaml";import g from"yaml";import w from"@fnet/prompt";import"fs";import"path";import"@fnet/shell-flow";const j=e.dirname(n(import.meta.url));const h=l(d);let b=!1;async function v(e,o){if(b)return;if(b=!0,!e.killed&&e.pid)try{await h(e.pid,"SIGTERM").catch((()=>{})),await new Promise((e=>setTimeout(e,500))),e.killed||await h(e.pid,"SIGKILL").catch((()=>{}))}catch(e){}await new Promise((e=>setTimeout(e,100)));const t="SIGINT"===o?130:"SIGTERM"===o?143:1;process.exit(t)}function x(e){["SIGINT","SIGTERM","SIGQUIT"].forEach((o=>{process.once(o,(async()=>{await v(e,o)}))})),process.on("uncaughtException",(async o=>{await v(e)})),process.on("unhandledRejection",(async o=>{await v(e)})),e.on("close",(e=>{b||process.exit(e)}))}function $(e,{name:o,bin:t,preArgs:n=[]}){return"function"==typeof t&&(t=t()),e.command(`${o||t} [commands..]`,`${t} ${n.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const o=await N(e),{projectDir:r}=o,i=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,s=process.argv.slice(3).map(i);x(p(t,[...n,...s],{cwd:r,stdio:"inherit",shell:!0,detached:!0}))}catch(e){console.error(e.message),process.exit(1)}}))}function S(o,{name:t,bin:n,preArgs:r=[]}){return o.command(`${t||n} [commands..]`,`${n} ${r.join(" ")}`,(e=>e.help(!1).version(!1)),(async o=>{try{const i=await N(o),{projectDir:s}=i,a=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,c=process.argv.slice(3).map(a);n=e.join(s,".conda","bin",n||t);x(p(n,[...r,...c],{cwd:s,stdio:"inherit",shell:!0,detached:!0,env:{PYTHONPATH:s}}))}catch(e){console.error(e.message),process.exit(1)}}))}async function N(e){try{const o=process.argv[1].split("/").pop().split(".")[0];if("fnode"===o){const{createContext:o}=await Promise.resolve().then((function(){return T}));return o(e)}if("fnet"===o){const{createContext:o}=await import("./index.B_0ZxySP.js");return o(e)}if("frun"===o){const{createContext:o}=await import("./index.CuMyez3E.js");return o(e)}if("fbin"===o){const{createContext:o}=await import("./index.DWpw12No.js");return o(e)}}catch(e){console.warn(`Warning: Could not import context from CLI tool: ${e.message}`)}return{projectDir:process.cwd(),tags:e.ftag}}var P=e=>{const n=process.env.PATH||"",r="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],i=n.split(o);for(const o of i)for(const n of r){const r=t(o,"win32"===process.platform?e+n:e);if(c(r))return r}return null};const E=e.dirname(n(import.meta.url)),D=process.cwd();function I(o){const t=e.resolve(D,o);if(a.existsSync(t))return t;const n=e.resolve(E,"../..",o);if(a.existsSync(n))return n;throw new Error(`Template path not found: ${o}`)}const C={command:"create",describe:"Create a new fnode project",builder:e=>e.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 o=>{try{const t=process.cwd(),n=I("./template/fnode/project"),r=e.resolve(t,o.name);a.existsSync(r)||a.mkdirSync(r),await u({dir:n,outDir:r,context:{name:o.name,runtime:o.runtime,platform:m.platform()},copyUnmatchedAlso:!0});let i=await f("fnode build",{cwd:r});if(0!==i.code)throw new Error("Failed to build project.");if(P("git")&&(i=await f("git init --initial-branch=main",{cwd:r}),0!==i.code))throw new Error("Failed to initialize git.");if(P("code")&&o.vscode&&(i=await f(`cd ${r} && code .`),0!==i.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}}};async function F(o){if(o.id)return{id:o.id,buildId:o.buildId,mode:o.mode,protocol:o.protocol||"ac:",templateDir:I("./template/fnode/node"),projectDir:e.resolve(process.cwd(),`./.output/${o.id}`),tags:o.ftag,dev:o.dev};try{const t=await async function({tags:o}){let t=function(o){const t=e.resolve(o,"node.yaml"),n=e.resolve(o,"fnode.yaml");if(a.existsSync(n))return n;if(a.existsSync(t))try{const e=a.readFileSync(t,"utf8");return a.writeFileSync(n,e,"utf8"),a.unlinkSync(t),console.log(`Migrated node.yaml to fnode.yaml in ${o}`),n}catch(e){return console.error(`Error migrating node.yaml to fnode.yaml: ${e.message}`),t}return n}(process.cwd());if(!a.existsSync(t))throw new Error("fnode.yaml file not found in current directory.");const{raw:n,parsed:r}=await y({file:t,tags:o}),i=e.dirname(t);r.features=r.features||{};const s=r.features;s.runtime=s.runtime||{},s.runtime.type=s.runtime.type||"node","python"===s.runtime.type?s.runtime.template=s.runtime.template||"python":"bun"===s.runtime.type?s.runtime.template=s.runtime.template||"bun":s.runtime.template=s.runtime.template||"node";const c={libraryAtom:{doc:{...r},fileName:"index"},projectDir:i,projectFilePath:t,projectFileContent:n,projectFileParsed:r,runtime:s.runtime};let l=e.resolve(i,"fnet/targets.yaml");if(!a.existsSync(l)&&(l=e.resolve(i,"node.devops.yaml"),a.existsSync(l))){const o=e.resolve(i,"fnet");a.existsSync(o)||a.mkdirSync(o),a.copyFileSync(l,e.resolve(i,"fnet/targets.yaml")),a.unlinkSync(l)}if(a.existsSync(l)){const{raw:e,parsed:t}=await y({file:l,tags:o}),n=g.parseDocument(e);c.devops={filePath:l,fileContent:e,yamlDocument:n,doc:{...t},type:"library.deploy",save:async()=>{a.writeFileSync(c.devops.filePath,n.toString())}}}const d=e.resolve(i,"readme.md");if(a.existsSync(d)){const e=a.readFileSync(d,"utf8");c.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return c}({tags:o.ftag});return{buildId:o.buildId,mode:o.mode,protocol:o.protocol||"local:",templateDir:I(`./template/fnode/${t.runtime.template}`),projectDir:e.resolve(t.projectDir,"./.workspace"),projectSrcDir:e.resolve(t.projectDir,"./src"),project:t,tags:o.ftag,dev:o.dev}}catch(e){return console.warn(`Warning: Could not load project: ${e.message}`),{projectDir:process.cwd(),tags:o.ftag}}}var T=Object.freeze({__proto__:null,createContext:F});const k={command:"project",describe:"Manage fnode project",builder:e=>e.option("update",{type:"boolean",default:!1,alias:"-u",describe:"Update project files"}),handler:async e=>{try{const o=I("./template/fnode/project"),t=process.cwd(),n=await F(e);if(e.update){if(await u({dir:o,outDir:t,context:{name:n.project.projectFileParsed.name,runtime:n.project.runtime.type,platform:m.platform()},copyUnmatchedAlso:!0}),0!==(await f("fnode build",{cwd:t})).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}}};class A{static async createBuilder(e){if(!e.project){console.warn("No project provided, defaulting to node runtime");return new(0,(await import("./index.C297FGrE.js")).default)(e)}const o=e.project?.runtime?.type||"node";try{return new(await this.loadBuilderClass(o))(e)}catch(t){console.warn(`Warning: Could not load builder for runtime '${o}'. Falling back to node builder.`),console.warn(`Error: ${t.message}`);return new(0,(await import("./index.C297FGrE.js")).default)(e)}}static async loadBuilderClass(e){switch(e.toLowerCase()){case"node":return(await import("./index.C297FGrE.js")).default;case"python":return(await import("./index.De_RsTV6.js")).default;case"bun":return(await import("./index.BccmKJid.js")).default;default:throw new Error(`Unsupported runtime type: ${e}`)}}}const B={command:"build",describe:"Build fnode project",builder:e=>e.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 e=>{try{const o=await F(e),t=await A.createBuilder(o);await t.init(),await t.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}},O={command:"deploy",describe:"Build and deploy fnode project",builder:e=>e.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 e=>{try{const o=await F({...e,mode:"all"}),t=await A.createBuilder(o);await t.init(),await t.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}},M={command:"file",describe:"Just create files",builder:e=>e.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 e=>{try{const o=await F({...e,mode:"file"}),t=await A.createBuilder(o);await t.init(),await t.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}},R={command:"input [name]",describe:"Create or modify an input config file",builder:e=>e.positional("name",{type:"string",demandOption:!1,describe:"Input name"}),handler:async o=>{try{const t=await F(o),{project:n}=t,{projectDir:r,projectFileParsed:i}=n,s=i.input;if(!s)throw new Error("Config schema not found in project file.");if(!Reflect.has(o,"name")){const{inputName:e}=await w({type:"input",name:"inputName",message:"Input name:",initial:"dev"});o.name=e}const c=e.resolve(r,".fnet");a.existsSync(c)||a.mkdirSync(c);const l=e.resolve(c,`${o.name}.fnet`),d=a.existsSync(l),p=(await import("@fnet/object-from-schema")).default,m=await p({schema:s,format:"yaml",ref:d?l:void 0});a.writeFileSync(l,m)}catch(e){console.error(e.message),process.exit(1)}}};var W={promptForSelection:async function(e){const{items:o,message:t,nameField:n="name",valueField:r="name",initialValue:s=null,allowAbort:a=!0}=e;if(!o||0===o.length)return console.log(i.yellow("No items available for selection.")),null;if(1===o.length&&!a){const e=o[0],t="string"==typeof e?e:e[r];return console.log(i.blue(`Only one option available: ${"string"==typeof e?e:e[n]}`)),t}let c=o.map((e=>"string"==typeof e?{name:e,value:e,message:e}:{name:e[r],value:e[r],message:e[n]||e[r]}));a&&c.push({name:"cancel",value:null,message:i.yellow("Cancel")});let l=null;if(s){const e=c.findIndex((e=>e.name===s));-1!==e&&(l=e)}const d="selectedItem",{[d]:p}=await w({type:"select",name:d,message:t,choices:c,initial:l});return"cancel"===p?null:p},promptForMultipleSelection:async function(e){const{items:o,message:t,nameField:n="name",valueField:r="name",initialValues:s=[],allowAbort:a=!0}=e;if(!o||0===o.length)return console.log(i.yellow("No items available for selection.")),null;let c=o.map((e=>"string"==typeof e?{name:e,value:e,message:e}:{name:e[r],value:e[r],message:e[n]||e[r]})),l=[];s&&s.length>0&&(l=c.map(((e,o)=>s.includes(e.name)?o:-1)).filter((e=>-1!==e)));const d="selectedItems",p=await w({type:"multiselect",name:d,message:t,choices:c,initial:l,hint:"(Use space to select, enter to confirm)",validate:e=>!(0===e.length&&!a)||"Please select at least one item"});return a&&0===p[d].length?null:p[d]}};const U=e.join(m.homedir(),".fnet","express");async function G(o){o.command(["$0 [project-name]","create [project-name]"],"Create a new express project",(e=>e.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 o=>{await async function(o){try{a.existsSync(U)||a.mkdirSync(U,{recursive:!0});const t=(new Date).toISOString().slice(0,10).replace(/-/g,""),n=e.join(U,t);a.existsSync(n)||a.mkdirSync(n,{recursive:!0});let r,s=o.projectName,c=o.runtime;if(o.yes){if(!s){const e=a.readdirSync(n).filter((e=>e.startsWith("fnode-"))).map((e=>parseInt(e.replace("fnode-",""),10))).filter((e=>!isNaN(e))),o=e.length>0?Math.max(...e)+1:1;s=`fnode-${o}`}c||(c="node")}else{if(!s){const e=a.readdirSync(n).filter((e=>e.startsWith("fnode-"))).map((e=>parseInt(e.replace("fnode-",""),10))).filter((e=>!isNaN(e))),o=`fnode-${e.length>0?Math.max(...e)+1:1}`,t=await w([{type:"input",name:"projectName",message:"Enter project name:",default:o}]);s=t.projectName}const e=c||"node";c=(await w({type:"select",name:"runtime",message:"Select runtime:",choices:["node","python","bun"],initial:e})).runtime}if(r=e.join(n,s),a.existsSync(r)){let o=1;for(;a.existsSync(e.join(n,`${s}-${o}`));)o++;s=`${s}-${o}`,r=e.join(n,s)}if(!o.yes){if(!(await w([{type:"confirm",name:"proceed",message:`Create express project "${s}" in ${r}?`,default:!0}])).proceed)return void console.log(i.yellow("Project creation cancelled."))}console.log(i.blue(`Creating express project "${s}" in ${r}...`));const l=e.dirname(r),d=["create","--name",e.basename(r)];d.push("--runtime",c),o.yes&&d.push("--yes"),a.existsSync(l)||a.mkdirSync(l,{recursive:!0});const m=p("fnode",d,{stdio:"inherit",shell:!0,cwd:l});return new Promise(((e,t)=>{m.on("close",(n=>{0===n?(console.log(i.green(`\nExpress project "${s}" created successfully!`)),console.log(i.blue(`\nProject location: ${r}`)),o.yes?e():async function(e){try{(await w({type:"confirm",name:"openIDE",message:"Would you like to open the project in an IDE?",initial:!0})).openIDE&&await V(e)}catch(e){console.error(i.red(`Error opening IDE: ${e.message}`))}}(r)):(console.error(i.red(`\nFailed to create express project "${s}".`)),t(new Error(`Process exited with code ${n}`)))}))}))}catch(e){console.error(i.red(`Error creating express project: ${e.message}`)),process.exit(1)}}(o)})).command("list","List express projects",(e=>e.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 o=>{await async function(o){try{if(!a.existsSync(U))return void console.log(i.yellow("No express projects found."));const t=a.readdirSync(U).filter((e=>/^\d{8}$/.test(e))).sort(((e,o)=>o.localeCompare(e)));if(o.today){const e=(new Date).toISOString().slice(0,10).replace(/-/g,""),o=t.indexOf(e);if(-1===o)return void console.log(i.yellow("No express projects found for today."));t.splice(0,o),t.splice(1)}const n=[];o.type||o.all||(o.type="fnode");for(const r of t){const t=e.join(U,r),i=a.readdirSync(t);for(const s of i){const i=e.join(t,s),c=a.statSync(i);let l="unknown";if(s.startsWith("fnode-")||a.existsSync(e.join(i,"fnode.yaml"))?l="fnode":(s.startsWith("fnet-")||a.existsSync(e.join(i,"fnet.yaml")))&&(l="fnet"),o.type&&l!==o.type)continue;if(o.name&&!s.includes(o.name))continue;const d=`${r.slice(0,4)}-${r.slice(4,6)}-${r.slice(6,8)}`;n.push({name:s,type:l,date:d,path:i,created:c.birthtime})}}if(n.sort(((e,o)=>o.created-e.created)),0===n.length)return void console.log(i.yellow("No express projects found matching the criteria."));console.log(i.blue("\nExpress Projects:"));const r=(await import("./index.-SGbq2cI.js")).default,s=["NAME","TYPE","DATE","PATH"],c=r.createTable(s,{chars:{mid:"","mid-mid":"","left-mid":"","right-mid":""}});for(const e of n){let o=e.path;o.startsWith(m.homedir())&&(o="~"+o.substring(m.homedir().length)),c.push([i.white(e.name),"fnet"===e.type?i.cyan(e.type):"fnode"===e.type?i.green(e.type):e.type,e.date,o])}console.log(c.toString()),console.log(i.green("Projects: ")+i.yellow(n.filter((e=>"fnode"===e.type)).length+" fnode, ")+i.cyan(n.filter((e=>"fnet"===e.type)).length+" fnet")),console.log(i.blue(`\nTotal: ${n.length} projects`))}catch(e){console.error(i.red(`Error listing express projects: ${e.message}`)),process.exit(1)}}(o)})).command("open [project-name]","Open an express project",(e=>e.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 o=>{await async function(o){try{if(!a.existsSync(U))return void console.log(i.yellow("No express projects found."));let t;if(o.latest){if(t=await H(),!t)return void console.log(i.yellow("No express projects found."))}else if(o.projectName){if(t=await L(o.projectName),!t)return void console.log(i.yellow(`Project "${o.projectName}" not found.`))}else{const o=await _();if(!o)return void console.log(i.yellow("No project selected."));t=e.join(U,o)}await V(t)}catch(e){console.error(i.red(`Error opening express project: ${e.message}`)),process.exit(1)}}(o)})).command("move [project-name] [destination]","Move an express project to a real project location",(e=>e.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 o=>{await async function(o){try{const t=process.cwd();let n;if(t.includes(U))n=t,console.log(i.blue(`Using current express project: ${e.basename(n)}`));else if(o.latest){if(n=await H(),!n)return void console.log(i.yellow("No express projects found."))}else if(o.projectName){if(n=await L(o.projectName),!n)return void console.log(i.yellow(`Project "${o.projectName}" not found.`))}else{const o=await _();if(!o)return void console.log(i.yellow("No project selected."));n=e.join(U,o)}let r=o.destination;if(!r){r=(await w({type:"input",name:"destination",message:"Enter destination directory:",initial:e.join(process.cwd(),e.basename(n))})).destination}if(r.startsWith("~")&&(r=e.join(m.homedir(),r.slice(1))),r=e.resolve(r),r.startsWith(n+e.sep)||r===n)return void console.log(i.red("Destination cannot be inside the source directory."));if(a.existsSync(r)){if(!a.statSync(r).isDirectory())return void console.log(i.red(`Destination "${r}" is not a directory.`));if(a.readdirSync(r).length>0){if(!(await w({type:"confirm",name:"overwrite",message:`Destination "${r}" is not empty. Continue anyway?`,initial:!1})).overwrite)return void console.log(i.yellow("Project move cancelled."))}}else a.mkdirSync(r,{recursive:!0});console.log(i.blue(`Moving project from ${n} to ${r}...`)),z(n,r),console.log(i.green(`\nProject moved successfully to ${r}`));(await w({type:"confirm",name:"deleteOriginal",message:"Delete the original express project?",initial:!1})).deleteOriginal&&(a.rmSync(n,{recursive:!0,force:!0}),console.log(i.green("Original project deleted."))),await V(r)}catch(e){console.error(i.red(`Error moving express project: ${e.message}`)),process.exit(1)}}(o)})).command("remove [project-name]","Remove an express project",(e=>e.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 o=>{await async function(o){try{if(!a.existsSync(U))return void console.log(i.yellow("No express projects found."));let t;if(o.latest){if(t=await H(),!t)return void console.log(i.yellow("No express projects found."))}else if(o.projectName){if(t=await L(o.projectName),!t)return void console.log(i.yellow(`Project "${o.projectName}" not found.`))}else{const o=await _();if(!o)return void console.log(i.yellow("No project selected."));t=e.join(U,o)}const n=e.basename(t);if(!o.yes){if(!(await w({type:"confirm",name:"confirm",message:`Are you sure you want to remove project "${n}"?`,initial:!1})).confirm)return void console.log(i.yellow("Project removal cancelled."))}console.log(i.blue(`Removing project "${n}"...`)),a.rmSync(t,{recursive:!0,force:!0}),console.log(i.green(`Project "${n}" removed successfully.`))}catch(e){console.error(i.red(`Error removing express project: ${e.message}`)),process.exit(1)}}(o)})).command("enter [project-name]","Enter the directory of an express project in the active terminal",(e=>e.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 o=>{await async function(o){try{if(!a.existsSync(U))return void console.log(i.yellow("No express projects found."));let t;if(o.latest){if(t=await H(),!t)return void console.log(i.yellow("No express projects found."))}else if(o.projectName){if(t=await L(o.projectName),!t)return void console.log(i.yellow(`Project "${o.projectName}" not found.`))}else{const o=await _();if(!o)return void console.log(i.yellow("No project selected."));t=e.join(U,o)}console.log(i.blue(`Entering project directory: ${t}`)),console.log(i.yellow("\nOpening a new shell in the project directory..."));const n=process.env.SHELL||"/bin/bash",r=p(n,[],{stdio:"inherit",cwd:t,shell:!0});return new Promise((e=>{r.on("close",(()=>{console.log(i.green("\nReturned from project directory.")),e()}))}))}catch(e){console.error(i.red(`Error entering express project directory: ${e.message}`)),process.exit(1)}}(o)})).demandCommand(1,"You need to specify a command").help()}async function H(){const o=a.readdirSync(U).filter((e=>/^\d{8}$/.test(e))).sort(((e,o)=>o.localeCompare(e)));if(0===o.length)return null;const t=o[0],n=e.join(U,t),r=a.readdirSync(n);if(0===r.length)return null;let i=null,s=0;for(const o of r){const t=e.join(n,o),r=a.statSync(t);r.birthtimeMs>s&&(s=r.birthtimeMs,i=t)}return i}async function L(o){const t=a.readdirSync(U).filter((e=>/^\d{8}$/.test(e))).sort(((e,o)=>o.localeCompare(e)));for(const n of t){const t=e.join(U,n),r=a.readdirSync(t);if(r.includes(o))return e.join(t,o);const s=r.filter((e=>e.includes(o)));if(s.length>0){if(1===s.length)return e.join(t,s[0]);{const r=s.map((o=>({name:e.join(t,o),value:e.join(t,o),message:`${o} (${n})`}))),a=await W.promptForSelection({items:r,message:`Multiple projects match "${o}". Please select one:`,nameField:"message",valueField:"value",allowAbort:!0});return null===a?(console.log(i.yellow("Operation cancelled.")),null):a}}}return null}async function _(){const o=[],t=a.readdirSync(U).filter((e=>/^\d{8}$/.test(e))).sort(((e,o)=>o.localeCompare(e)));for(const n of t){const t=e.join(U,n),r=a.readdirSync(t);for(const i of r){const r=e.join(t,i),s=a.statSync(r),c=`${n}/${i}`;o.push({name:c,value:c,message:`${i} (${n})`,created:s.birthtime})}}if(o.sort(((e,o)=>o.created-e.created)),0===o.length)return null;const n=await W.promptForSelection({items:o,message:"Select a project:",nameField:"message",valueField:"value",allowAbort:!0});return null===n?(console.log(i.yellow("Operation cancelled.")),null):n}async function V(e){const o=await Y("code --version"),t=await Y("code-insiders --version");let n=null;if(o&&t){const e=await w({type:"select",name:"ide",message:"Which IDE would you like to use?",choices:[{name:"Visual Studio Code",value:"code"},{name:"Visual Studio Code Insiders",value:"code-insiders"}]});n=e.ide}else if(o)n="code";else{if(!t)return console.log(i.yellow("No supported IDE found. Please open the project manually.")),void console.log(i.blue(`Project path: ${e}`));n="code-insiders"}console.log(i.blue(`Opening project in ${n}...`)),console.log(i.blue(`Project path: ${e}`));const r=p(n,[e],{stdio:"inherit",shell:!0});return new Promise(((e,o)=>{r.on("close",(t=>{0===t?(console.log(i.green(`Project opened in ${n}.`)),e()):(console.error(i.red(`Failed to open project in ${n}.`)),o(new Error(`Process exited with code ${t}`)))}))}))}async function Y(e){return new Promise((o=>{p(e,{shell:!0,stdio:"ignore"}).on("close",(e=>{o(0===e)}))}))}function z(o,t){a.existsSync(t)||a.mkdirSync(t,{recursive:!0});const n=a.readdirSync(o,{withFileTypes:!0});for(const r of n){const n=e.join(o,r.name),i=e.join(t,r.name);if(r.isDirectory()){if(".git"===r.name||".workspace"===r.name)continue;z(n,i)}else a.copyFileSync(n,i)}}const X=e.dirname(n(import.meta.url)),J=process.cwd();process.on("uncaughtException",(e=>{b||(b=!0,setTimeout((()=>process.exit(1)),500))})),process.on("unhandledRejection",(e=>{b||(b=!0,setTimeout((()=>process.exit(1)),500))})),function(){s({name:["redis"],dir:J,optional:!0});const o=function({baseDir:o}){let t=o=o||j;for(;t!==e.parse(t).root;){const o=e.join(t,"node_modules");if(a.existsSync(o))return o;t=e.dirname(t)}return null}({baseDir:X}),t="win32"===process.platform?";":":";o&&(process.env.PATH=`${e.join(o,"/.bin")}${t}${process.env.PATH}`)}(),async function(){try{let o=r(process.argv.slice(2)).usage("Usage: $0 <command> [options]").command(C).command(k).command(B).command(O).command(M).command(R).command("express","Create and manage express projects",G);o=$(o,{bin:"npm"}),o=$(o,{bin:"node"}),o=$(o,{bin:"bun"}),o=$(o,{name:"serve",bin:"bun",preArgs:["run","serve","--"]}),o=$(o,{name:"watch",bin:"bun",preArgs:["run","watch","--"]}),o=$(o,{name:"app",bin:"bun",preArgs:["run","app","--"]}),o=$(o,{name:"cli",bin:"bun",preArgs:["run","cli","--"]}),o=$(o,{name:"compile",bin:"bun",preArgs:["run","compile","--"]}),o=function(o,{name:t}){return o.command(`${t} [options]`,"Install the project as a binary",(e=>e.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 o=>{try{const t=await N(o),{projectDir:n}=t;console.log(i.blue("Compiling project..."));const r=e.join(n,".bin");a.existsSync(r)||a.mkdirSync(r,{recursive:!0});const s=e.basename(e.dirname(n)),c=t.project?.projectFileParsed?.features?.cli?.bin,l=o.name||c||s;console.log(i.blue(`Using binary name: ${l}`));const d=e.join(r,l),{spawn:p}=await import("child_process"),m=p("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${d}`],{cwd:n,stdio:"inherit",shell:!0});await new Promise(((e,o)=>{m.on("close",(t=>{0===t?e():o(new Error(`Compilation failed with code ${t}`))})),m.on("error",(e=>{o(e)}))})),"win32"!==process.platform&&a.chmodSync(d,493),console.log(i.green(`Binary compiled successfully: ${d}`)),console.log(i.blue("Installing binary..."));const u=["install",d];o.name&&u.push("--name",o.name),o.force&&u.push("--force"),o.yes&&u.push("--yes");const f=p("fbin",u,{stdio:"inherit",shell:!0});await new Promise(((e,o)=>{f.on("close",(t=>{0===t?e():o(new Error(`Installation failed with code ${t}`))})),f.on("error",(e=>{o(e)}))}))}catch(e){console.error(i.red(`Failed to install binary: ${e.message}`)),process.exit(1)}}))}(o,{name:"install"}),o=$(o,{bin:"npx"}),o=$(o,{bin:"cdk"}),o=$(o,{bin:"aws"}),o=function(e,{name:o,preArgs:t=[]}){return e.command(`${o} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const o=await N(e),{projectDir:n}=o,r=e.config,i=await s({name:r,dir:n,transferEnv:!1,optional:!0,tags:o.tags}),c=i?.data?.env||void 0,l=e.command,d=process.argv.slice(5);x(p(l,[...t,...d],{cwd:a.existsSync(n)?n:process.cwd(),stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...c}}))}catch(e){console.error(e.message),process.exit(1)}}))}(o,{name:"with"}),o=function(e,{name:o,projectType:t="auto"}){return e.command(`${o} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const{runCommandGroup:o}=await import("./index.DrwlOzAe.js");await o({projectType:t,group:e.group,tags:e.ftag,args:e,argv:process.argv})}catch(e){console.error(e.message),process.exit(1)}}))}(o,{name:"run",projectType:"fnode"}),o=S(o,{name:"python"}),o=S(o,{name:"python3"}),o=S(o,{name:"pip"}),o=S(o,{name:"pip3"}),o.demandCommand(1,"You need at least one command before moving on").help().version().argv}catch(e){console.error(i.red(`Fatal error: ${e.message}`)),process.exit(1)}}().catch((e=>{console.error(i.red(`Fatal error: ${e.message}`)),process.exit(1)}));export{I as r,P as w};
|
|
2
|
+
import e,{delimiter as o,join as t}from"node:path";import{fileURLToPath as n}from"node:url";import r from"yargs";import i from"chalk";import s from"@fnet/config";import a,{existsSync as c}from"node:fs";import{promisify as l}from"node:util";import d from"tree-kill";import{spawn as p}from"node:child_process";import m from"node:os";import u from"@flownet/lib-render-templates-dir";import f from"@fnet/shelljs";import y from"@fnet/yaml";import g from"yaml";import w from"@fnet/prompt";import"fs";import"path";import"@fnet/shell-flow";const j=e.dirname(n(import.meta.url));const h=l(d);let b=!1;async function v(e,o){if(b)return;if(b=!0,!e.killed&&e.pid)try{await h(e.pid,"SIGTERM").catch((()=>{})),await new Promise((e=>setTimeout(e,500))),e.killed||await h(e.pid,"SIGKILL").catch((()=>{}))}catch(e){}await new Promise((e=>setTimeout(e,100)));const t="SIGINT"===o?130:"SIGTERM"===o?143:1;process.exit(t)}function x(e){["SIGINT","SIGTERM","SIGQUIT"].forEach((o=>{process.once(o,(async()=>{await v(e,o)}))})),process.on("uncaughtException",(async o=>{await v(e)})),process.on("unhandledRejection",(async o=>{await v(e)})),e.on("close",(e=>{b||process.exit(e)}))}function $(e,{name:o,bin:t,preArgs:n=[]}){return"function"==typeof t&&(t=t()),e.command(`${o||t} [commands..]`,`${t} ${n.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const o=await N(e),{projectDir:r}=o,i=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,s=process.argv.slice(3).map(i);x(p(t,[...n,...s],{cwd:r,stdio:"inherit",shell:!0,detached:!0}))}catch(e){console.error(e.message),process.exit(1)}}))}function S(o,{name:t,bin:n,preArgs:r=[]}){return o.command(`${t||n} [commands..]`,`${n} ${r.join(" ")}`,(e=>e.help(!1).version(!1)),(async o=>{try{const i=await N(o),{projectDir:s}=i,a=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,c=process.argv.slice(3).map(a);n=e.join(s,".conda","bin",n||t);x(p(n,[...r,...c],{cwd:s,stdio:"inherit",shell:!0,detached:!0,env:{PYTHONPATH:s}}))}catch(e){console.error(e.message),process.exit(1)}}))}async function N(e){try{const o=process.argv[1].split("/").pop().split(".")[0];if("fnode"===o){const{createContext:o}=await Promise.resolve().then((function(){return T}));return o(e)}if("fnet"===o){const{createContext:o}=await import("./index.B_0ZxySP.js");return o(e)}if("frun"===o){const{createContext:o}=await import("./index.CuMyez3E.js");return o(e)}if("fbin"===o){const{createContext:o}=await import("./index.DWpw12No.js");return o(e)}}catch(e){console.warn(`Warning: Could not import context from CLI tool: ${e.message}`)}return{projectDir:process.cwd(),tags:e.ftag}}var P=e=>{const n=process.env.PATH||"",r="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],i=n.split(o);for(const o of i)for(const n of r){const r=t(o,"win32"===process.platform?e+n:e);if(c(r))return r}return null};const E=e.dirname(n(import.meta.url)),D=process.cwd();function I(o){const t=e.resolve(D,o);if(a.existsSync(t))return t;const n=e.resolve(E,"../..",o);if(a.existsSync(n))return n;throw new Error(`Template path not found: ${o}`)}const C={command:"create",describe:"Create a new fnode project",builder:e=>e.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 o=>{try{const t=process.cwd(),n=I("./template/fnode/project"),r=e.resolve(t,o.name);a.existsSync(r)||a.mkdirSync(r),await u({dir:n,outDir:r,context:{name:o.name,runtime:o.runtime,platform:m.platform()},copyUnmatchedAlso:!0});let i=await f("fnode build",{cwd:r});if(0!==i.code)throw new Error("Failed to build project.");if(P("git")&&(i=await f("git init --initial-branch=main",{cwd:r}),0!==i.code))throw new Error("Failed to initialize git.");if(P("code")&&o.vscode&&(i=await f(`cd ${r} && code .`),0!==i.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}}};async function F(o){if(o.id)return{id:o.id,buildId:o.buildId,mode:o.mode,protocol:o.protocol||"ac:",templateDir:I("./template/fnode/node"),projectDir:e.resolve(process.cwd(),`./.output/${o.id}`),tags:o.ftag,dev:o.dev};try{const t=await async function({tags:o}){let t=function(o){const t=e.resolve(o,"node.yaml"),n=e.resolve(o,"fnode.yaml");if(a.existsSync(n))return n;if(a.existsSync(t))try{const e=a.readFileSync(t,"utf8");return a.writeFileSync(n,e,"utf8"),a.unlinkSync(t),console.log(`Migrated node.yaml to fnode.yaml in ${o}`),n}catch(e){return console.error(`Error migrating node.yaml to fnode.yaml: ${e.message}`),t}return n}(process.cwd());if(!a.existsSync(t))throw new Error("fnode.yaml file not found in current directory.");const{raw:n,parsed:r}=await y({file:t,tags:o}),i=e.dirname(t);r.features=r.features||{};const s=r.features;s.runtime=s.runtime||{},s.runtime.type=s.runtime.type||"node","python"===s.runtime.type?s.runtime.template=s.runtime.template||"python":"bun"===s.runtime.type?s.runtime.template=s.runtime.template||"bun":s.runtime.template=s.runtime.template||"node";const c={libraryAtom:{doc:{...r},fileName:"index"},projectDir:i,projectFilePath:t,projectFileContent:n,projectFileParsed:r,runtime:s.runtime};let l=e.resolve(i,"fnet/targets.yaml");if(!a.existsSync(l)&&(l=e.resolve(i,"node.devops.yaml"),a.existsSync(l))){const o=e.resolve(i,"fnet");a.existsSync(o)||a.mkdirSync(o),a.copyFileSync(l,e.resolve(i,"fnet/targets.yaml")),a.unlinkSync(l)}if(a.existsSync(l)){const{raw:e,parsed:t}=await y({file:l,tags:o}),n=g.parseDocument(e);c.devops={filePath:l,fileContent:e,yamlDocument:n,doc:{...t},type:"library.deploy",save:async()=>{a.writeFileSync(c.devops.filePath,n.toString())}}}const d=e.resolve(i,"readme.md");if(a.existsSync(d)){const e=a.readFileSync(d,"utf8");c.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return c}({tags:o.ftag});return{buildId:o.buildId,mode:o.mode,protocol:o.protocol||"local:",templateDir:I(`./template/fnode/${t.runtime.template}`),projectDir:e.resolve(t.projectDir,"./.workspace"),projectSrcDir:e.resolve(t.projectDir,"./src"),project:t,tags:o.ftag,dev:o.dev}}catch(e){return console.warn(`Warning: Could not load project: ${e.message}`),{projectDir:process.cwd(),tags:o.ftag}}}var T=Object.freeze({__proto__:null,createContext:F});const k={command:"project",describe:"Manage fnode project",builder:e=>e.option("update",{type:"boolean",default:!1,alias:"-u",describe:"Update project files"}),handler:async e=>{try{const o=I("./template/fnode/project"),t=process.cwd(),n=await F(e);if(e.update){if(await u({dir:o,outDir:t,context:{name:n.project.projectFileParsed.name,runtime:n.project.runtime.type,platform:m.platform()},copyUnmatchedAlso:!0}),0!==(await f("fnode build",{cwd:t})).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}}};class A{static async createBuilder(e){if(!e.project){console.warn("No project provided, defaulting to node runtime");return new(0,(await import("./index.BgwaIU1c.js")).default)(e)}const o=e.project?.runtime?.type||"node";try{return new(await this.loadBuilderClass(o))(e)}catch(t){console.warn(`Warning: Could not load builder for runtime '${o}'. Falling back to node builder.`),console.warn(`Error: ${t.message}`);return new(0,(await import("./index.BgwaIU1c.js")).default)(e)}}static async loadBuilderClass(e){switch(e.toLowerCase()){case"node":return(await import("./index.BgwaIU1c.js")).default;case"python":return(await import("./index.De_RsTV6.js")).default;case"bun":return(await import("./index.B1OhKt7p.js")).default;default:throw new Error(`Unsupported runtime type: ${e}`)}}}const B={command:"build",describe:"Build fnode project",builder:e=>e.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 e=>{try{const o=await F(e),t=await A.createBuilder(o);await t.init(),await t.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}},O={command:"deploy",describe:"Build and deploy fnode project",builder:e=>e.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 e=>{try{const o=await F({...e,mode:"all"}),t=await A.createBuilder(o);await t.init(),await t.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}},M={command:"file",describe:"Just create files",builder:e=>e.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 e=>{try{const o=await F({...e,mode:"file"}),t=await A.createBuilder(o);await t.init(),await t.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}},R={command:"input [name]",describe:"Create or modify an input config file",builder:e=>e.positional("name",{type:"string",demandOption:!1,describe:"Input name"}),handler:async o=>{try{const t=await F(o),{project:n}=t,{projectDir:r,projectFileParsed:i}=n,s=i.input;if(!s)throw new Error("Config schema not found in project file.");if(!Reflect.has(o,"name")){const{inputName:e}=await w({type:"input",name:"inputName",message:"Input name:",initial:"dev"});o.name=e}const c=e.resolve(r,".fnet");a.existsSync(c)||a.mkdirSync(c);const l=e.resolve(c,`${o.name}.fnet`),d=a.existsSync(l),p=(await import("@fnet/object-from-schema")).default,m=await p({schema:s,format:"yaml",ref:d?l:void 0});a.writeFileSync(l,m)}catch(e){console.error(e.message),process.exit(1)}}};var W={promptForSelection:async function(e){const{items:o,message:t,nameField:n="name",valueField:r="name",initialValue:s=null,allowAbort:a=!0}=e;if(!o||0===o.length)return console.log(i.yellow("No items available for selection.")),null;if(1===o.length&&!a){const e=o[0],t="string"==typeof e?e:e[r];return console.log(i.blue(`Only one option available: ${"string"==typeof e?e:e[n]}`)),t}let c=o.map((e=>"string"==typeof e?{name:e,value:e,message:e}:{name:e[r],value:e[r],message:e[n]||e[r]}));a&&c.push({name:"cancel",value:null,message:i.yellow("Cancel")});let l=null;if(s){const e=c.findIndex((e=>e.name===s));-1!==e&&(l=e)}const d="selectedItem",{[d]:p}=await w({type:"select",name:d,message:t,choices:c,initial:l});return"cancel"===p?null:p},promptForMultipleSelection:async function(e){const{items:o,message:t,nameField:n="name",valueField:r="name",initialValues:s=[],allowAbort:a=!0}=e;if(!o||0===o.length)return console.log(i.yellow("No items available for selection.")),null;let c=o.map((e=>"string"==typeof e?{name:e,value:e,message:e}:{name:e[r],value:e[r],message:e[n]||e[r]})),l=[];s&&s.length>0&&(l=c.map(((e,o)=>s.includes(e.name)?o:-1)).filter((e=>-1!==e)));const d="selectedItems",p=await w({type:"multiselect",name:d,message:t,choices:c,initial:l,hint:"(Use space to select, enter to confirm)",validate:e=>!(0===e.length&&!a)||"Please select at least one item"});return a&&0===p[d].length?null:p[d]}};const U=e.join(m.homedir(),".fnet","express");async function G(o){o.command(["$0 [project-name]","create [project-name]"],"Create a new express project",(e=>e.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 o=>{await async function(o){try{a.existsSync(U)||a.mkdirSync(U,{recursive:!0});const t=(new Date).toISOString().slice(0,10).replace(/-/g,""),n=e.join(U,t);a.existsSync(n)||a.mkdirSync(n,{recursive:!0});let r,s=o.projectName,c=o.runtime;if(o.yes){if(!s){const e=a.readdirSync(n).filter((e=>e.startsWith("fnode-"))).map((e=>parseInt(e.replace("fnode-",""),10))).filter((e=>!isNaN(e))),o=e.length>0?Math.max(...e)+1:1;s=`fnode-${o}`}c||(c="node")}else{if(!s){const e=a.readdirSync(n).filter((e=>e.startsWith("fnode-"))).map((e=>parseInt(e.replace("fnode-",""),10))).filter((e=>!isNaN(e))),o=`fnode-${e.length>0?Math.max(...e)+1:1}`,t=await w([{type:"input",name:"projectName",message:"Enter project name:",default:o}]);s=t.projectName}const e=c||"node";c=(await w({type:"select",name:"runtime",message:"Select runtime:",choices:["node","python","bun"],initial:e})).runtime}if(r=e.join(n,s),a.existsSync(r)){let o=1;for(;a.existsSync(e.join(n,`${s}-${o}`));)o++;s=`${s}-${o}`,r=e.join(n,s)}if(!o.yes){if(!(await w([{type:"confirm",name:"proceed",message:`Create express project "${s}" in ${r}?`,default:!0}])).proceed)return void console.log(i.yellow("Project creation cancelled."))}console.log(i.blue(`Creating express project "${s}" in ${r}...`));const l=e.dirname(r),d=["create","--name",e.basename(r)];d.push("--runtime",c),o.yes&&d.push("--yes"),a.existsSync(l)||a.mkdirSync(l,{recursive:!0});const m=p("fnode",d,{stdio:"inherit",shell:!0,cwd:l});return new Promise(((e,t)=>{m.on("close",(n=>{0===n?(console.log(i.green(`\nExpress project "${s}" created successfully!`)),console.log(i.blue(`\nProject location: ${r}`)),o.yes?e():async function(e){try{(await w({type:"confirm",name:"openIDE",message:"Would you like to open the project in an IDE?",initial:!0})).openIDE&&await V(e)}catch(e){console.error(i.red(`Error opening IDE: ${e.message}`))}}(r)):(console.error(i.red(`\nFailed to create express project "${s}".`)),t(new Error(`Process exited with code ${n}`)))}))}))}catch(e){console.error(i.red(`Error creating express project: ${e.message}`)),process.exit(1)}}(o)})).command("list","List express projects",(e=>e.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 o=>{await async function(o){try{if(!a.existsSync(U))return void console.log(i.yellow("No express projects found."));const t=a.readdirSync(U).filter((e=>/^\d{8}$/.test(e))).sort(((e,o)=>o.localeCompare(e)));if(o.today){const e=(new Date).toISOString().slice(0,10).replace(/-/g,""),o=t.indexOf(e);if(-1===o)return void console.log(i.yellow("No express projects found for today."));t.splice(0,o),t.splice(1)}const n=[];o.type||o.all||(o.type="fnode");for(const r of t){const t=e.join(U,r),i=a.readdirSync(t);for(const s of i){const i=e.join(t,s),c=a.statSync(i);let l="unknown";if(s.startsWith("fnode-")||a.existsSync(e.join(i,"fnode.yaml"))?l="fnode":(s.startsWith("fnet-")||a.existsSync(e.join(i,"fnet.yaml")))&&(l="fnet"),o.type&&l!==o.type)continue;if(o.name&&!s.includes(o.name))continue;const d=`${r.slice(0,4)}-${r.slice(4,6)}-${r.slice(6,8)}`;n.push({name:s,type:l,date:d,path:i,created:c.birthtime})}}if(n.sort(((e,o)=>o.created-e.created)),0===n.length)return void console.log(i.yellow("No express projects found matching the criteria."));console.log(i.blue("\nExpress Projects:"));const r=(await import("./index.-SGbq2cI.js")).default,s=["NAME","TYPE","DATE","PATH"],c=r.createTable(s,{chars:{mid:"","mid-mid":"","left-mid":"","right-mid":""}});for(const e of n){let o=e.path;o.startsWith(m.homedir())&&(o="~"+o.substring(m.homedir().length)),c.push([i.white(e.name),"fnet"===e.type?i.cyan(e.type):"fnode"===e.type?i.green(e.type):e.type,e.date,o])}console.log(c.toString()),console.log(i.green("Projects: ")+i.yellow(n.filter((e=>"fnode"===e.type)).length+" fnode, ")+i.cyan(n.filter((e=>"fnet"===e.type)).length+" fnet")),console.log(i.blue(`\nTotal: ${n.length} projects`))}catch(e){console.error(i.red(`Error listing express projects: ${e.message}`)),process.exit(1)}}(o)})).command("open [project-name]","Open an express project",(e=>e.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 o=>{await async function(o){try{if(!a.existsSync(U))return void console.log(i.yellow("No express projects found."));let t;if(o.latest){if(t=await H(),!t)return void console.log(i.yellow("No express projects found."))}else if(o.projectName){if(t=await L(o.projectName),!t)return void console.log(i.yellow(`Project "${o.projectName}" not found.`))}else{const o=await _();if(!o)return void console.log(i.yellow("No project selected."));t=e.join(U,o)}await V(t)}catch(e){console.error(i.red(`Error opening express project: ${e.message}`)),process.exit(1)}}(o)})).command("move [project-name] [destination]","Move an express project to a real project location",(e=>e.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 o=>{await async function(o){try{const t=process.cwd();let n;if(t.includes(U))n=t,console.log(i.blue(`Using current express project: ${e.basename(n)}`));else if(o.latest){if(n=await H(),!n)return void console.log(i.yellow("No express projects found."))}else if(o.projectName){if(n=await L(o.projectName),!n)return void console.log(i.yellow(`Project "${o.projectName}" not found.`))}else{const o=await _();if(!o)return void console.log(i.yellow("No project selected."));n=e.join(U,o)}let r=o.destination;if(!r){r=(await w({type:"input",name:"destination",message:"Enter destination directory:",initial:e.join(process.cwd(),e.basename(n))})).destination}if(r.startsWith("~")&&(r=e.join(m.homedir(),r.slice(1))),r=e.resolve(r),r.startsWith(n+e.sep)||r===n)return void console.log(i.red("Destination cannot be inside the source directory."));if(a.existsSync(r)){if(!a.statSync(r).isDirectory())return void console.log(i.red(`Destination "${r}" is not a directory.`));if(a.readdirSync(r).length>0){if(!(await w({type:"confirm",name:"overwrite",message:`Destination "${r}" is not empty. Continue anyway?`,initial:!1})).overwrite)return void console.log(i.yellow("Project move cancelled."))}}else a.mkdirSync(r,{recursive:!0});console.log(i.blue(`Moving project from ${n} to ${r}...`)),z(n,r),console.log(i.green(`\nProject moved successfully to ${r}`));(await w({type:"confirm",name:"deleteOriginal",message:"Delete the original express project?",initial:!1})).deleteOriginal&&(a.rmSync(n,{recursive:!0,force:!0}),console.log(i.green("Original project deleted."))),await V(r)}catch(e){console.error(i.red(`Error moving express project: ${e.message}`)),process.exit(1)}}(o)})).command("remove [project-name]","Remove an express project",(e=>e.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 o=>{await async function(o){try{if(!a.existsSync(U))return void console.log(i.yellow("No express projects found."));let t;if(o.latest){if(t=await H(),!t)return void console.log(i.yellow("No express projects found."))}else if(o.projectName){if(t=await L(o.projectName),!t)return void console.log(i.yellow(`Project "${o.projectName}" not found.`))}else{const o=await _();if(!o)return void console.log(i.yellow("No project selected."));t=e.join(U,o)}const n=e.basename(t);if(!o.yes){if(!(await w({type:"confirm",name:"confirm",message:`Are you sure you want to remove project "${n}"?`,initial:!1})).confirm)return void console.log(i.yellow("Project removal cancelled."))}console.log(i.blue(`Removing project "${n}"...`)),a.rmSync(t,{recursive:!0,force:!0}),console.log(i.green(`Project "${n}" removed successfully.`))}catch(e){console.error(i.red(`Error removing express project: ${e.message}`)),process.exit(1)}}(o)})).command("enter [project-name]","Enter the directory of an express project in the active terminal",(e=>e.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 o=>{await async function(o){try{if(!a.existsSync(U))return void console.log(i.yellow("No express projects found."));let t;if(o.latest){if(t=await H(),!t)return void console.log(i.yellow("No express projects found."))}else if(o.projectName){if(t=await L(o.projectName),!t)return void console.log(i.yellow(`Project "${o.projectName}" not found.`))}else{const o=await _();if(!o)return void console.log(i.yellow("No project selected."));t=e.join(U,o)}console.log(i.blue(`Entering project directory: ${t}`)),console.log(i.yellow("\nOpening a new shell in the project directory..."));const n=process.env.SHELL||"/bin/bash",r=p(n,[],{stdio:"inherit",cwd:t,shell:!0});return new Promise((e=>{r.on("close",(()=>{console.log(i.green("\nReturned from project directory.")),e()}))}))}catch(e){console.error(i.red(`Error entering express project directory: ${e.message}`)),process.exit(1)}}(o)})).demandCommand(1,"You need to specify a command").help()}async function H(){const o=a.readdirSync(U).filter((e=>/^\d{8}$/.test(e))).sort(((e,o)=>o.localeCompare(e)));if(0===o.length)return null;const t=o[0],n=e.join(U,t),r=a.readdirSync(n);if(0===r.length)return null;let i=null,s=0;for(const o of r){const t=e.join(n,o),r=a.statSync(t);r.birthtimeMs>s&&(s=r.birthtimeMs,i=t)}return i}async function L(o){const t=a.readdirSync(U).filter((e=>/^\d{8}$/.test(e))).sort(((e,o)=>o.localeCompare(e)));for(const n of t){const t=e.join(U,n),r=a.readdirSync(t);if(r.includes(o))return e.join(t,o);const s=r.filter((e=>e.includes(o)));if(s.length>0){if(1===s.length)return e.join(t,s[0]);{const r=s.map((o=>({name:e.join(t,o),value:e.join(t,o),message:`${o} (${n})`}))),a=await W.promptForSelection({items:r,message:`Multiple projects match "${o}". Please select one:`,nameField:"message",valueField:"value",allowAbort:!0});return null===a?(console.log(i.yellow("Operation cancelled.")),null):a}}}return null}async function _(){const o=[],t=a.readdirSync(U).filter((e=>/^\d{8}$/.test(e))).sort(((e,o)=>o.localeCompare(e)));for(const n of t){const t=e.join(U,n),r=a.readdirSync(t);for(const i of r){const r=e.join(t,i),s=a.statSync(r),c=`${n}/${i}`;o.push({name:c,value:c,message:`${i} (${n})`,created:s.birthtime})}}if(o.sort(((e,o)=>o.created-e.created)),0===o.length)return null;const n=await W.promptForSelection({items:o,message:"Select a project:",nameField:"message",valueField:"value",allowAbort:!0});return null===n?(console.log(i.yellow("Operation cancelled.")),null):n}async function V(e){const o=await Y("code --version"),t=await Y("code-insiders --version");let n=null;if(o&&t){const e=await w({type:"select",name:"ide",message:"Which IDE would you like to use?",choices:[{name:"Visual Studio Code",value:"code"},{name:"Visual Studio Code Insiders",value:"code-insiders"}]});n=e.ide}else if(o)n="code";else{if(!t)return console.log(i.yellow("No supported IDE found. Please open the project manually.")),void console.log(i.blue(`Project path: ${e}`));n="code-insiders"}console.log(i.blue(`Opening project in ${n}...`)),console.log(i.blue(`Project path: ${e}`));const r=p(n,[e],{stdio:"inherit",shell:!0});return new Promise(((e,o)=>{r.on("close",(t=>{0===t?(console.log(i.green(`Project opened in ${n}.`)),e()):(console.error(i.red(`Failed to open project in ${n}.`)),o(new Error(`Process exited with code ${t}`)))}))}))}async function Y(e){return new Promise((o=>{p(e,{shell:!0,stdio:"ignore"}).on("close",(e=>{o(0===e)}))}))}function z(o,t){a.existsSync(t)||a.mkdirSync(t,{recursive:!0});const n=a.readdirSync(o,{withFileTypes:!0});for(const r of n){const n=e.join(o,r.name),i=e.join(t,r.name);if(r.isDirectory()){if(".git"===r.name||".workspace"===r.name)continue;z(n,i)}else a.copyFileSync(n,i)}}const X=e.dirname(n(import.meta.url)),J=process.cwd();process.on("uncaughtException",(e=>{b||(b=!0,setTimeout((()=>process.exit(1)),500))})),process.on("unhandledRejection",(e=>{b||(b=!0,setTimeout((()=>process.exit(1)),500))})),function(){s({name:["redis"],dir:J,optional:!0});const o=function({baseDir:o}){let t=o=o||j;for(;t!==e.parse(t).root;){const o=e.join(t,"node_modules");if(a.existsSync(o))return o;t=e.dirname(t)}return null}({baseDir:X}),t="win32"===process.platform?";":":";o&&(process.env.PATH=`${e.join(o,"/.bin")}${t}${process.env.PATH}`)}(),async function(){try{let o=r(process.argv.slice(2)).usage("Usage: $0 <command> [options]").command(C).command(k).command(B).command(O).command(M).command(R).command("express","Create and manage express projects",G);o=$(o,{bin:"npm"}),o=$(o,{bin:"node"}),o=$(o,{bin:"bun"}),o=$(o,{name:"serve",bin:"bun",preArgs:["run","serve","--"]}),o=$(o,{name:"watch",bin:"bun",preArgs:["run","watch","--"]}),o=$(o,{name:"app",bin:"bun",preArgs:["run","app","--"]}),o=$(o,{name:"cli",bin:"bun",preArgs:["run","cli","--"]}),o=$(o,{name:"compile",bin:"bun",preArgs:["run","compile","--"]}),o=function(o,{name:t}){return o.command(`${t} [options]`,"Install the project as a binary",(e=>e.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 o=>{try{const t=await N(o),{projectDir:n}=t;console.log(i.blue("Compiling project..."));const r=e.join(n,".bin");a.existsSync(r)||a.mkdirSync(r,{recursive:!0});const s=e.basename(e.dirname(n)),c=t.project?.projectFileParsed?.features?.cli?.bin,l=o.name||c||s;console.log(i.blue(`Using binary name: ${l}`));const d=e.join(r,l),{spawn:p}=await import("child_process"),m=p("bun",["build","./dist/cli/esm/index.js","--compile",`--outfile=${d}`],{cwd:n,stdio:"inherit",shell:!0});await new Promise(((e,o)=>{m.on("close",(t=>{0===t?e():o(new Error(`Compilation failed with code ${t}`))})),m.on("error",(e=>{o(e)}))})),"win32"!==process.platform&&a.chmodSync(d,493),console.log(i.green(`Binary compiled successfully: ${d}`)),console.log(i.blue("Installing binary..."));const u=["install",d];o.name&&u.push("--name",o.name),o.force&&u.push("--force"),o.yes&&u.push("--yes");const f=p("fbin",u,{stdio:"inherit",shell:!0});await new Promise(((e,o)=>{f.on("close",(t=>{0===t?e():o(new Error(`Installation failed with code ${t}`))})),f.on("error",(e=>{o(e)}))}))}catch(e){console.error(i.red(`Failed to install binary: ${e.message}`)),process.exit(1)}}))}(o,{name:"install"}),o=$(o,{bin:"npx"}),o=$(o,{bin:"cdk"}),o=$(o,{bin:"aws"}),o=function(e,{name:o,preArgs:t=[]}){return e.command(`${o} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const o=await N(e),{projectDir:n}=o,r=e.config,i=await s({name:r,dir:n,transferEnv:!1,optional:!0,tags:o.tags}),c=i?.data?.env||void 0,l=e.command,d=process.argv.slice(5);x(p(l,[...t,...d],{cwd:a.existsSync(n)?n:process.cwd(),stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...c}}))}catch(e){console.error(e.message),process.exit(1)}}))}(o,{name:"with"}),o=function(e,{name:o,projectType:t="auto"}){return e.command(`${o} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const{runCommandGroup:o}=await import("./index.DrwlOzAe.js");await o({projectType:t,group:e.group,tags:e.ftag,args:e,argv:process.argv})}catch(e){console.error(e.message),process.exit(1)}}))}(o,{name:"run",projectType:"fnode"}),o=S(o,{name:"python"}),o=S(o,{name:"python3"}),o=S(o,{name:"pip"}),o=S(o,{name:"pip3"}),o.demandCommand(1,"You need at least one command before moving on").help().version().argv}catch(e){console.error(i.red(`Fatal error: ${e.message}`)),process.exit(1)}}().catch((e=>{console.error(i.red(`Fatal error: ${e.message}`)),process.exit(1)}));export{I as r,P as w};
|
package/package.json
CHANGED
|
@@ -12,7 +12,7 @@ export default function Block(context){
|
|
|
12
12
|
|
|
13
13
|
this.run= function (){
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
{% include "src/default/macros/block-entry-args.js.njk" %}
|
|
16
16
|
|
|
17
17
|
return new Promise(async (resolve,reject)=>{
|
|
18
18
|
|
|
@@ -72,6 +72,10 @@ export default function Block(context){
|
|
|
72
72
|
flow.set({{assign.key | safe}},{{assign.value | safe}});
|
|
73
73
|
{% endfor%}
|
|
74
74
|
|
|
75
|
+
{% for assign in context.transform.assign %}
|
|
76
|
+
flow.set({{assign.key | safe}},{{assign.value | safe}});
|
|
77
|
+
{% endfor%}
|
|
78
|
+
|
|
75
79
|
{% if context.transform.return %}
|
|
76
80
|
resolve({type:'return',value: {{context.transform.return | safe}}});
|
|
77
81
|
{% elseif context.next and context.transform.operation!=='wait-for-next'%}
|
|
@@ -18,7 +18,7 @@ export default function Block(context) {
|
|
|
18
18
|
|
|
19
19
|
this.run= function (){
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
{% include "src/default/macros/block-entry-args.js.njk" %}
|
|
22
22
|
|
|
23
23
|
return new Promise(async (resolve,reject)=>{
|
|
24
24
|
|
|
@@ -58,7 +58,7 @@ export default function Block(context) {
|
|
|
58
58
|
return resolve(nextBlock);
|
|
59
59
|
|
|
60
60
|
current=new nextBlock.toType({ parent:_this, engine, flow, caller:c, onError, error });
|
|
61
|
-
currentArgs=nextBlock.
|
|
61
|
+
currentArgs=nextBlock.input;
|
|
62
62
|
|
|
63
63
|
} while(true);
|
|
64
64
|
|
|
@@ -14,7 +14,7 @@ export default function Block(context){
|
|
|
14
14
|
|
|
15
15
|
this.run= function (){
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
{% include "src/default/macros/block-entry-args.js.njk" %}
|
|
18
18
|
|
|
19
19
|
return new Promise(async (resolve,reject)=>{
|
|
20
20
|
|
|
@@ -28,6 +28,11 @@ export default function Block(context){
|
|
|
28
28
|
flow.waitForNext({
|
|
29
29
|
key:'{{indexKey}}',
|
|
30
30
|
next: async () => {
|
|
31
|
+
|
|
32
|
+
{% for assign in context.transform.assign %}
|
|
33
|
+
flow.set({{assign.key | safe}},{{assign.value | safe}});
|
|
34
|
+
{% endfor%}
|
|
35
|
+
|
|
31
36
|
{% if context.transform.return %}
|
|
32
37
|
resolve({type:'return',value: {{context.transform.return | safe}}});
|
|
33
38
|
{% elseif context.next %}
|
|
@@ -8,7 +8,7 @@ export default function Block(context){
|
|
|
8
8
|
|
|
9
9
|
this.run= function (){
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
{% include "src/default/macros/block-entry-args.js.njk" %}
|
|
12
12
|
|
|
13
13
|
return new Promise(async (resolve,reject)=>{
|
|
14
14
|
{% include "src/default/macros/block-run-header.js.njk" %}
|
|
@@ -6,7 +6,7 @@ export default function Block(context){
|
|
|
6
6
|
|
|
7
7
|
this.run= function (){
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
{% include "src/default/macros/block-entry-args.js.njk" %}
|
|
10
10
|
|
|
11
11
|
return new Promise(async (resolve,reject)=>{
|
|
12
12
|
{% include "src/default/macros/block-run-header.js.njk" %}
|
|
@@ -6,7 +6,7 @@ export default function Block(context){
|
|
|
6
6
|
|
|
7
7
|
this.run= function (){
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
{% include "src/default/macros/block-entry-args.js.njk" %}
|
|
10
10
|
|
|
11
11
|
return new Promise(async (resolve,reject)=>{
|
|
12
12
|
{% include "src/default/macros/block-run-header.js.njk" %}
|
|
@@ -15,6 +15,10 @@ export default function Block(context){
|
|
|
15
15
|
|
|
16
16
|
const raise = {{context.transform.raise | safe}};
|
|
17
17
|
|
|
18
|
+
{% for assign in context.transform.assign %}
|
|
19
|
+
flow.set({{assign.key | safe}},{{assign.value | safe}});
|
|
20
|
+
{% endfor%}
|
|
21
|
+
|
|
18
22
|
onError? onError(new Error(raise?.message||raise||"Unknown error")) : reject(new Error(raise?.message||raise||"Unknown error"));
|
|
19
23
|
});
|
|
20
24
|
}
|
|
@@ -6,7 +6,7 @@ export default function Block(context){
|
|
|
6
6
|
|
|
7
7
|
this.run= function (){
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
{% include "src/default/macros/block-entry-args.js.njk" %}
|
|
10
10
|
|
|
11
11
|
return new Promise(async (resolve,reject)=>{
|
|
12
12
|
{% include "src/default/macros/block-run-header.js.njk" %}
|
|
@@ -8,7 +8,7 @@ export default function Block(context){
|
|
|
8
8
|
|
|
9
9
|
this.run= function (){
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
{% include "src/default/macros/block-entry-args.js.njk" %}
|
|
12
12
|
|
|
13
13
|
return new Promise(async (resolve,reject)=>{
|
|
14
14
|
|
|
@@ -40,7 +40,7 @@ export default function Block(context){
|
|
|
40
40
|
return resolve(nextBlock);
|
|
41
41
|
|
|
42
42
|
current=new nextBlock.toType({ parent:_this, engine, flow, caller:c, onError, error });
|
|
43
|
-
currentArgs=nextBlock.
|
|
43
|
+
currentArgs=nextBlock.input;
|
|
44
44
|
|
|
45
45
|
} while(true);
|
|
46
46
|
|
|
@@ -18,7 +18,7 @@ export default function Block(context) {
|
|
|
18
18
|
|
|
19
19
|
this.run= function (){
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
{% include "src/default/macros/block-entry-args.js.njk" %}
|
|
22
22
|
|
|
23
23
|
return new Promise(async (resolve,reject)=>{
|
|
24
24
|
|
|
@@ -41,8 +41,7 @@ export default function Block(context) {
|
|
|
41
41
|
console.log(new Date().toLocaleString(),' * ',_this.constructor.IndexKey,' -> ',current.constructor.IndexKey);
|
|
42
42
|
{% endif %}
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
current.run.apply(current,args).then(resolve);
|
|
44
|
+
Array.isArray(args)? current.run.apply(current,args).then(resolve):current.run.call(current,args).then(resolve);
|
|
46
45
|
};
|
|
47
46
|
|
|
48
47
|
{% if context.try.definition.dynamic %}
|
|
@@ -55,7 +54,7 @@ export default function Block(context) {
|
|
|
55
54
|
console.log(new Date().toLocaleString(),' * ',_this.constructor.IndexKey,' -> ',current.constructor.IndexKey);
|
|
56
55
|
{% endif %}
|
|
57
56
|
|
|
58
|
-
return resolve(await current.run.apply(current,args));
|
|
57
|
+
return resolve(Array.isArray(args)? await current.run.apply(current,args) : await current.run.call(current,args));
|
|
59
58
|
}
|
|
60
59
|
catch({{context.except.context.transform.as | safe}}){
|
|
61
60
|
throw new Error('Error must not reach here!');
|
|
@@ -18,7 +18,7 @@ export default function Block(context) {
|
|
|
18
18
|
|
|
19
19
|
this.run= function (){
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
{% include "src/default/macros/block-entry-args.js.njk" %}
|
|
22
22
|
|
|
23
23
|
return new Promise(async (resolve,reject)=>{
|
|
24
24
|
|
|
@@ -41,7 +41,7 @@ export default function Block(context) {
|
|
|
41
41
|
console.log(new Date().toLocaleString(),' * ',_this.constructor.IndexKey,' -> ',current.constructor.IndexKey);
|
|
42
42
|
{% endif %}
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
Array.isArray(args)? current.run.apply(current,args).then(resolve):current.run.call(current,args).then(resolve);
|
|
45
45
|
};
|
|
46
46
|
|
|
47
47
|
{% if context.try.definition.dynamic %}
|
|
@@ -54,7 +54,7 @@ export default function Block(context) {
|
|
|
54
54
|
console.log(new Date().toLocaleString(),' * ',_this.constructor.IndexKey,' -> ',current.constructor.IndexKey);
|
|
55
55
|
{% endif %}
|
|
56
56
|
|
|
57
|
-
return resolve(await current.run.apply(current,args));
|
|
57
|
+
return resolve(Array.isArray(args)? await current.run.apply(current,args) : await current.run.call(current,args));
|
|
58
58
|
}
|
|
59
59
|
catch({{context.except.context.transform.as | safe}}){
|
|
60
60
|
|
|
@@ -68,7 +68,7 @@ export default function Block(context) {
|
|
|
68
68
|
console.log(new Date().toLocaleString(),' * ',_this.constructor.IndexKey,' -> ',current.constructor.IndexKey);
|
|
69
69
|
{% endif %}
|
|
70
70
|
|
|
71
|
-
return resolve(await current.run.apply(current,args));
|
|
71
|
+
return resolve(Array.isArray(args)? await current.run.apply(current,args) : await current.run.call(current,args));
|
|
72
72
|
}
|
|
73
73
|
});
|
|
74
74
|
}
|
|
@@ -13,8 +13,8 @@ return resolve ({
|
|
|
13
13
|
fromClosure: c,
|
|
14
14
|
toType:{{context.next.codeKey}},
|
|
15
15
|
onError,
|
|
16
|
-
{% if context.transform.
|
|
17
|
-
|
|
16
|
+
{% if context.transform.output %}
|
|
17
|
+
input: {{context.transform.output | safe}},
|
|
18
18
|
{% endif %}
|
|
19
19
|
});
|
|
20
20
|
|
|
@@ -103,7 +103,7 @@ export default class Workflow extends Object {
|
|
|
103
103
|
throw new Error('Unknown situation');
|
|
104
104
|
|
|
105
105
|
current=new nextBlock.toType({ parent:this, engine:this.engine, flow:this, caller:c });
|
|
106
|
-
currentArgs=nextBlock.
|
|
106
|
+
currentArgs=nextBlock.input;
|
|
107
107
|
|
|
108
108
|
} while(true);
|
|
109
109
|
|
|
@@ -12,7 +12,7 @@ export default function Block(context){
|
|
|
12
12
|
|
|
13
13
|
this.run= function (){
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
{% include "src/default/macros/block-entry-args.js.njk" %}
|
|
16
16
|
|
|
17
17
|
return new Promise(async (resolve,reject)=>{
|
|
18
18
|
|
|
@@ -72,6 +72,11 @@ export default function Block(context){
|
|
|
72
72
|
flow.set({{assign.key | safe}},{{assign.value | safe}});
|
|
73
73
|
{% endfor%}
|
|
74
74
|
|
|
75
|
+
{% for assign in context.transform.assign %}
|
|
76
|
+
flow.set({{assign.key | safe}},{{assign.value | safe}});
|
|
77
|
+
{% endfor%}
|
|
78
|
+
|
|
79
|
+
|
|
75
80
|
{% if context.transform.return %}
|
|
76
81
|
resolve({type:'return',value: {{context.transform.return | safe}}});
|
|
77
82
|
{% elseif context.next and context.transform.operation!=='wait-for-next'%}
|
|
@@ -18,7 +18,7 @@ export default function Block(context) {
|
|
|
18
18
|
|
|
19
19
|
this.run= function (){
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
{% include "src/default/macros/block-entry-args.js.njk" %}
|
|
22
22
|
|
|
23
23
|
return new Promise(async (resolve,reject)=>{
|
|
24
24
|
|
|
@@ -58,7 +58,7 @@ export default function Block(context) {
|
|
|
58
58
|
return resolve(nextBlock);
|
|
59
59
|
|
|
60
60
|
current=new nextBlock.toType({ parent:_this, engine, flow, caller:c, onError, error });
|
|
61
|
-
currentArgs=nextBlock.
|
|
61
|
+
currentArgs=nextBlock.input;
|
|
62
62
|
|
|
63
63
|
} while(true);
|
|
64
64
|
|
|
@@ -14,7 +14,7 @@ export default function Block(context){
|
|
|
14
14
|
|
|
15
15
|
this.run= function (){
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
{% include "src/default/macros/block-entry-args.js.njk" %}
|
|
18
18
|
|
|
19
19
|
return new Promise(async (resolve,reject)=>{
|
|
20
20
|
|
|
@@ -28,6 +28,11 @@ export default function Block(context){
|
|
|
28
28
|
flow.waitForNext({
|
|
29
29
|
key:'{{indexKey}}',
|
|
30
30
|
next: async () => {
|
|
31
|
+
|
|
32
|
+
{% for assign in context.transform.assign %}
|
|
33
|
+
flow.set({{assign.key | safe}},{{assign.value | safe}});
|
|
34
|
+
{% endfor%}
|
|
35
|
+
|
|
31
36
|
{% if context.transform.return %}
|
|
32
37
|
resolve({type:'return',value: {{context.transform.return | safe}}});
|
|
33
38
|
{% elseif context.next %}
|
|
@@ -8,7 +8,7 @@ export default function Block(context){
|
|
|
8
8
|
|
|
9
9
|
this.run= function (){
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
{% include "src/default/macros/block-entry-args.js.njk" %}
|
|
12
12
|
|
|
13
13
|
return new Promise(async (resolve,reject)=>{
|
|
14
14
|
{% include "src/default/macros/block-run-header.js.njk" %}
|