@fnet/cli 0.101.2 → 0.102.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.
@@ -0,0 +1 @@
1
+ import r from"semver";import e from"@fnet/config";import o from"node:fs";import t from"@fnet/shelljs";import n from"form-data";async function i({setProgress:i,context:s,deploymentProject:a,deploymentProjectTarget:f,yamlTarget:c}){await i({message:"Deploying it as fnet flow."});const{file:p,data:w}=await e({name:f.config||"fnet-flow",dir:s.project.projectDir,tags:s.tags});if(!w.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${p}`);if(!w.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${p}`);if(!w.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${p}`);const d=`${w.env.ATOM_API_URL}/v1/auth/token`,m=w.env.ATOM_API_USERNAME,l=w.env.ATOM_API_PASSWORD,A=await fetch(d,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:m,password:l})});if(!A.ok)throw new Error(`Failed to fetch token: ${A.statusText}`);const h=await A.json(),_=h?.access_token;if(!_)throw new Error(`Invalid access_token from ${d}`);a.isDirty=!0;const u=r.inc(f.version,"patch");f.params.version=u,f.version=u,c.set("version",u);const v=`${w.env.ATOM_API_URL}/v1/service/fnet-flow/publish`,T=await fetch(v,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${_}`},body:JSON.stringify({name:f.params.name,version:f.params.version,docs:f.params.docs,configs:f.params.configs})});if(!T.ok)throw new Error(`Error publishing fnet flow: ${T.statusText}`);const E=await T.json();if(E?.error)throw new Error("Error publishing fnet flow.");const O=E?.upload.id;let P="fnet-dir-zipper";P+=` --sourceDir='${s.project.projectDir}'`,P+=" --pattern=**/*",P+=" --stdout_format=json";const g=await t(P);if(0!==g.code)throw new Error(g.stderr);const S=JSON.parse(g.stdout).path;let M=new n;M.append("file",o.createReadStream(S));const $=await fetch(`${w.env.ATOM_API_URL}/v1/service/upload/single/${O}`,{method:"POST",headers:{...M.getHeaders(),Authorization:`Bearer ${_}`},body:M});if(!$.ok)throw new Error(`Error uploading fnet flow: ${$.statusText}`);const j=await $.json();if(j?.error)throw new Error("Error uploading fnet flow.")}export{i as default};
@@ -0,0 +1 @@
1
+ import e from"semver";import r from"@fnet/config";import o from"node:fs";import t from"@fnet/shelljs";import n from"form-data";async function i({setProgress:i,context:s,deploymentProject:a,deploymentProjectTarget:d,yamlTarget:c}){await i({message:"Deploying it as fnet node."});const{file:f,data:p}=await r({name:d.config||"fnet-node",dir:s.project.projectDir,tags:s.tags});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${f}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${f}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${f}`);const m=`${p.env.ATOM_API_URL}/v1/auth/token`,w=p.env.ATOM_API_USERNAME,A=p.env.ATOM_API_PASSWORD,h=await fetch(m,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:w,password:A})});if(!h.ok)throw new Error(`Failed to fetch token: ${h.statusText}`);const _=await h.json(),l=_?.access_token;if(!l)throw new Error(`Invalid access_token from ${m}`);a.isDirty=!0;const u=e.inc(d.version,"patch");d.params.version=u,d.version=u,c.set("version",u);const v=`${p.env.ATOM_API_URL}/v1/service/fnet-node/publish`,T=await fetch(v,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${l}`},body:JSON.stringify({name:d.params.name,version:d.params.version,docs:d.params.docs,configs:d.params.configs})});if(!T.ok)throw new Error(`Error publishing fnet node: ${T.statusText}`);const E=await T.json();if(E?.error)throw new Error("Error publishing fnet node.");const O=E?.upload.id;let P="fnet-dir-zipper";P+=` --sourceDir='${s.project.projectDir}'`,P+=" --pattern=**/*",P+=" --stdout_format=json";const g=await t(P);if(0!==g.code)throw new Error(g.stderr);const S=JSON.parse(g.stdout).path;let M=new n;M.append("file",o.createReadStream(S));const $=await fetch(`${p.env.ATOM_API_URL}/v1/service/upload/single/${O}`,{method:"POST",headers:{...M.getHeaders(),Authorization:`Bearer ${l}`},body:M});if(!$.ok)throw new Error(`Error uploading fnet node: ${$.statusText}`);const j=await $.json();if(j?.error)throw new Error("Error uploading fnet node.")}export{i as default};
@@ -0,0 +1 @@
1
+ import e from"node:fs";import t from"node:path";import o from"@fnet/config";async function n({atom:n,Atom:i,setProgress:r,context:a,packageDependencies:d,deploymentProject:c,deploymentProjectTarget:l}){await r({message:"Deploying it as workflow lib."});const s=(await o({name:"atom",dir:a.projectDir,tags:a.tags}))?.data;let f,p,y,m=l.deploy.name.split("/");if(1===m.length)p=s.env.ATOM_LIBRARIES_ID,y=l.deploy.name;else{if(2!==m.length)throw new Error("Wrong name path.");{const e=await i.first({where:{name:m[0],parent_id:s.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");p=e.id,y=m[1]}}if(!0===l.dryRun)return;if(c.isDirty=!0,l.deploy.id){if(f=await i.get({id:l.deploy.id}),!f)return}else{if(f=await i.create({parent_id:p,doc:{name:y,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!f)return;l.deploy.id=f.id}const w=a.projectDir;f.doc.contents=[{content:e.readFileSync(t.resolve(w,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:e.readFileSync(t.resolve(w,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:e.readFileSync(t.resolve(w,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],f.doc.name=y,f.doc.dependencies=d,"workflow.lib"===n.type?f.doc.subtype="library":"workflow"===n.type&&(f.doc.subtype="workflow"),f=await i.update(f,{id:f.id})}export{n as default};
@@ -0,0 +1 @@
1
+ import e from"node:fs";import t from"node:path";import o from"semver";import r from"@fnet/shelljs";import i from"@fnet/config";import n from"@fnet/up-list-files";import s from"@fnet/object-from-schema";import m from"yaml";import{w as p}from"./index.js";import{fileURLToPath as a}from"node:url";import"node:child_process";import"node:os";import"yargs";import"@fnet/prompt";import"@fnet/yaml";import"@fnet/shell-flow";import"@flownet/lib-render-templates-dir";import"nunjucks";import"lodash.clonedeep";import"isobject";import"redis";import"@flownet/lib-is-redis-online";import"node:crypto";import"@flownet/lib-atom-api-js";import"lodash.merge";import"@flownet/lib-parse-imports-js";import"@fnet/npm-list-versions";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"@flownet/lib-parse-node-url";import"bpmn-moddle";import"dagre";import"@fnet/expression";import"chalk";import"@fnet/list-files";import"@fnet/key-value-transformer";import"lodash.pick";import"lodash.omit";const l=t.dirname(a(import.meta.url));async function c({atom:a,setProgress:c,context:f,deploymentProject:d,deploymentProjectTarget:h,yamlTarget:u}){await c({message:"Deploying it as npm package."});const w=f.projectDir,y=t.resolve(w,"package.json"),b=e.readFileSync(y),g=JSON.parse(b);g.name=h.params.name,g.version=o.inc(h.version,"patch");const j=h.params.bin?.name||h.params.bin;!1!==h.params.bin?.enabled&&j&&"string"==typeof j&&(g.bin={[j]:"dist/cli/esm/index.js"}),delete g.scripts,delete g.devDependencies,g.scripts={serve:"npx serve ."},e.writeFileSync(y,JSON.stringify(g,null,"\t"));const v=h.config||"npm";let k=(await i({name:v,dir:f.projectDir,tags:f.tags,optional:!0}))?.data;if(!k){const o=n({dir:l,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===o.length)throw new Error("Couldnt find schema to create npm config");const r=await s({schema:o[0],tags:f.tags}),i=f.project.projectDir,p=t.resolve(i,".fnet");e.existsSync(p)||e.mkdirSync(p),e.writeFileSync(t.resolve(p,`${v}.fnet`),m.stringify(r)),k=r}if(e.writeFileSync(t.resolve(w,".npmrc"),`//registry.npmjs.org/:_authToken=${k.env.NPM_TOKEN}`),!0!==h.dryRun){if(p("bun")){if(0!==(await r("bun publish --access public",{cwd:w})).code)throw new Error("Couldnt publish to npm")}else{if(0!==(await r("npm publish --access public",{cwd:w})).code)throw new Error("Couldnt publish to npm")}e.writeFileSync(y,b),d.isDirty=!0,h.version=g.version,u.set("version",g.version)}}export{c as default};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{spawn as e}from"child_process";import t from"@fnet/prompt";import o,{existsSync as n}from"node:fs";import i,{delimiter as s,join as a}from"node:path";import r from"@fnet/config";import{fileURLToPath as c}from"node:url";import p from"yargs";import l from"fs";import d from"yaml";import f from"@fnet/shelljs";import m from"@fnet/yaml";import u from"@fnet/object-from-schema";import h from"@fnet/shell-flow";import y from"@flownet/lib-render-templates-dir";import g from"nunjucks";import w from"lodash.clonedeep";import x from"isobject";import b from"redis";import k from"@flownet/lib-is-redis-online";import{randomUUID as v}from"node:crypto";import{Api as j,Atom as D}from"@flownet/lib-atom-api-js";import _ from"lodash.merge";import E from"@flownet/lib-parse-imports-js";import S from"@fnet/npm-list-versions";import P from"@fnet/npm-pick-versions";import $ from"object-hash";import T from"ajv/dist/2020.js";import C from"ajv/dist/standalone/index.js";import N from"ajv-formats";import F from"path";import A from"@flownet/lib-parse-node-url";import O from"bpmn-moddle";import B from"dagre";import I from"@fnet/expression";import K from"chalk";import R from"@fnet/list-files";import M from"@fnet/key-value-transformer";import J from"lodash.pick";import L from"lodash.omit";var z=e=>{const t=process.env.PATH||"",o="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],i=t.split(s);for(const t of i)for(const i of o){const o=a(t,"win32"===process.platform?e+i:e);if(n(o))return o}return null};class q{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(j.set_api_url(e.data.url),t)return j.set_req_token(t),void o(t);fetch(`${e.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((e=>{j.set_req_token(e.access_token),o(e.access_token)})).catch((e=>{j.set_req_token(),n(e)}))}))}}function W({feature:e,features:t,packageDevDependencies:o}){const{name:n,packages:i,options:s,extraCheck:a,explicit:r}=e,c=`${n}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=s||{};const f=t[n]?.options;f&&(d=_(d,f));const m=!t[n]||!1===t[n]?.enabled;l.forEach((e=>{const o=t.rollup_output[e];if(o){if(Reflect.has(o,n)){if(m||!o[n]||!1===o[n]?.enabled)return void delete o[n];!0===o[n]&&(o[n]={enabled:!0,options:d})}else{if(m||r||!1===t[c])return;o[n]={enabled:!0}}o[n]=o[n]||{},o[n].options={...d,...o[n].options}}}));let u=l.some((e=>!0===t.rollup_output[e][n]?.enabled));a&&(u=a()&&u),t[c]=u,u&&i.forEach((e=>o.push({package:e[0],version:e[1]})))}function X({dir:e,name:t="index"}){let n=i.resolve(e,`./${t}.tsx`);if(o.existsSync(n)||(n=i.resolve(e,`./${t}.ts`)),o.existsSync(n)||(n=i.resolve(e,`./${t}.jsx`)),o.existsSync(n)||(n=i.resolve(e,`./${t}.js`)),!o.existsSync(n))return{};const s=n,a=i.extname(n);return{file:s,ext:a,ts:".ts"===a||".tsx"===a,name:t}}async function V(e){const{atom:t,context:o,setProgress:n}=e;n("Initializing features..."),t.doc.features=t.doc.features||{};const s=t.doc.features;s.project=s.project||{},s.project.format=s.project.format||s.project_format||"esm",s.project_format=s.project.format,s.dts_enabled=!0===s.dts||void 0!==s.dts&&!1!==s.dts;const a=i.resolve(o.project.projectDir),r=X({dir:i.resolve(a,"./app")});if(r.file){n("Parsing app entry imports...");let e=await E({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.app_uses_jsx=t,s.app_has_entry=!0,e=await E({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.app_entry_uses_jsx=t,s.app_entry_is_ts=r.ts,s.app_entry_ext=r.ext}const c=X({dir:i.resolve(a,"./cli")});if(c.file){n("Parsing cli entry imports...");let e=await E({file:c.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.cli_uses_jsx=t,s.cli_has_entry=!0,e=await E({file:c.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.cli_entry_uses_jsx=t,s.cli_entry_is_ts=c.ts,s.cli_entry_ext=c.ext}if("workflow.lib"===t.type){const e=X({dir:i.resolve(a,"./src")});if(e.file){n("Parsing src entry imports...");let t=await E({file:e.file,recursive:!0}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.src_uses_jsx=o,s.src_has_entry=!0,t=await E({file:e.file}),o=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.src_entry_uses_jsx=o,s.src_entry_is_ts=e.ts,s.src_entry_ext=e.ext}}const p=Reflect.has(s,"app_entry_uses_jsx")?!0===s.app_entry_uses_jsx:!0===s.src_entry_uses_jsx,l=Reflect.has(s,"cli_entry_uses_jsx")?!0===s.cli_entry_uses_jsx:!0===s.src_entry_uses_jsx;s.form_enabled=p||l||!0===s.form||!0===s.form?.enabled,s.multiple_enabled=s.multiple_enabled||!0===s.multiple||!0===s.multiple?.enabled,!1===s.app?s.app={enabled:!1}:!0===s.app?s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p}:s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p,...s.app||{}},s.app.enabled=!0===s.app.enabled&&(!0===t.doc.features.form_enabled||!0===s.app.extend||!0===s.app.enabled),s.app.format=s.app.format||"esm",s.app.folder=s.app.folder||s.app.format||"default",!1===s.cli?s.cli={enabled:!1}:!0===s.cli?s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l}:s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l,...s.cli||{}},s.cli.enabled=!0===s.cli.enabled&&(!1===t.doc.features.form_enabled||!0===s.cli.extend||!0===s.cli.enabled),s.cli.format=s.cli.format||"esm",s.cli.folder=s.cli.folder||s.cli.folder||"esm",s.cli.node_options=s.cli.node?.options||s.cli.node_options||"",s.json=s.cli.enabled||s.json;const d={cjs:{format:"cjs",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==s.cjs,copy:!1},esm:{format:"esm",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==s.esm,copy:!0},iife:{format:"iife",context:s.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===s.iife,terser:!0,copy:!1}};!0===s.webos&&(d.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===s.electron&&(d.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===s.nextjs&&(d.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===s.ios&&(d.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===s.macos&&(d.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===s.app.enabled&&(s.app.dir=`./dist/app/${s.app.folder}`,d.app={format:s.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:s.app.dir,terser:!0,output_exports:!1===s.app.export?"none":"auto",browsersync:!0}),!0===s.cli.enabled&&(s.cli.dir=`./dist/cli/${s.cli.folder}`,d.cli={format:s.cli.format,context:"global",babel:!0===s.src_uses_jsx||!0===s.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:s.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===s.cli.export?"none":"auto"});const f={server:".",startPath:`${i.normalize(s.app.dir||".")}`,files:[i.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=_({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=_(f,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=_({},s.replace_options||s.replace?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=_(d,s.rollup_output||s.rollup?.output||{}),s.preact_enabled=!0===s.preact||s.preact&&!1!==s.preact?.enabled;let m=Object.keys(d);for(const e of m){const t=d[e];t&&(!1!==s.rollup[e]?(t.babel_options=t.babel_options||s.babel_options,t.browsersync_options=_(s.browsersync_options,t.browsersync_options),t.replace_options=_(s.replace_options,t.replace_options),s.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),(s.form_enabled||s.babel)&&(t.babel=!0)):delete s.rollup_output[e])}m=Object.keys(s.rollup_output),s.babel_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browser_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browsersync_enabled=!1!==s.browsersync&&m.some((e=>!0===s.rollup_output[e].browsersync)),s.browsersync_enabled=s.browsersync_enabled&&s.app.enabled,s.dependency_auto_enabled=!1!==s.dependency_auto&&!1!==s.dependency_auto?.enabled,s.npm_install_flags=s.npm_install_flags||"",s.react_version=s.react_version||s.react?.version||18,function(e){const{atom:t,packageDevDependencies:o}=e,n=t.doc.features,i=n.css&&!1!==n.css.enabled;let s=[];i&&(s.push(["rollup-plugin-postcss","^4"]),s.push(["sass","^1.66"]),(n.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":s.push(["postcss-import","^15"]);break;case"postcss-url":s.push(["postcss-url","^10"]);break;case"postcss-preset-env":s.push(["postcss-preset-env","^9"]);break;case"autoprefixer":s.push(["autoprefixer","^10"]);break;case"cssnano":s.push(["cssnano","^6"])}})));W({feature:{name:"css",packages:s},features:n,packageDevDependencies:o})}(e),function(e){const{atom:t,packageDevDependencies:o}=e,n=t.doc.features,i={};!0===n.app?.enabled&&(i.targets=i.targets||[],i.targets.push({src:"./src/app/index.html",dest:n.app.dir}),Reflect.has(n.app,"copy")||Reflect.has(n,"copy")||(n.copy=!0)),W({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:n,packageDevDependencies:o})}(e),function(e){const{atom:t,packageDevDependencies:o}=e;W({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:t.doc.features,packageDevDependencies:o})}(e),function(e){const{atom:t,packageDevDependencies:o}=e;W({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:t.doc.features,packageDevDependencies:o})}(e),function(e){const{atom:t,packageDevDependencies:o}=e;W({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:t.doc.features,packageDevDependencies:o})}(e),function(e){const{atom:t,packageDevDependencies:o}=e;W({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:t.doc.features,packageDevDependencies:o})}(e),function(e){const{atom:t,packageDevDependencies:o}=e;W({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:t.doc.features,packageDevDependencies:o})}(e),function(e){const{atom:t,packageDevDependencies:o}=e;W({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:t.doc.features,packageDevDependencies:o})}(e),function(e){const{atom:t,packageDevDependencies:o}=e;W({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:t.doc.features,packageDevDependencies:o})}(e),function(e){const{atom:t,packageDevDependencies:o}=e;W({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:t.doc.features,packageDevDependencies:o})}(e),function(e){const{atom:t,packageDevDependencies:o}=e;W({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:t.doc.features,packageDevDependencies:o})}(e),function(e){const{atom:t,packageDevDependencies:o}=e;W({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:t.doc.features,packageDevDependencies:o})}(e),function(e){const{atom:t,packageDevDependencies:o}=e;W({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:t.doc.features,packageDevDependencies:o})}(e)}async function U({projectDir:e,name:t,setProgress:n,count:s=1}){let a;const r=$(["npm-pick-versions",t,s]),c=i.join(e,".cache"),p=i.join(c,r+".json");return o.existsSync(p)?(n&&n(`Picking npm version of ${t} from cache ...`),a=JSON.parse(o.readFileSync(p,"utf8"))):(n&&n(`Picking npm version of ${t} ...`),a=await P({name:t,count:s}),o.mkdirSync(c,{recursive:!0}),o.writeFileSync(p,JSON.stringify(a),"utf8")),a}var G=async e=>{const{atom:t,packageDependencies:o,context:n,deploymentProjectTarget:i,setProgress:s,deploymentProject:a,yamlTarget:r}=e;if(!0!==i.enabled)return;const c=i.type;try{if("lib"===c)await(await import("./index.DLGSTm8o.js")).default({...e});else if("red"===c)await(await import("./index.CmMM-Ek9.js")).default({...e});else if("npm"===c)await(await import("./index.Rl3XkXvK.js")).default({...e});else if("gcs"===c)await(await import("./index.UOds5XLl.js")).default({...e});else if("gitlab"===c)await(await import("./index.DI3yyTtl.js")).default({...e});else if("fnet-package"===c)await(await import("./index.Bfg4lyu-.js")).default({...e});else if("fnet-form"===c)await(await import("./index.Q-CYRcna.js")).default({...e});else if("fnet-node"===c)await(await import("./index.BoO2Mnox.js")).default({...e});else if("fnet-flow"===c)await(await import("./index.dpz2QIRu.js")).default({...e});else if("nextjs"===c)await(await import("./index.CDct_kkF.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("webos"===c)await(await import("./index.CMC8mlye.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("electron"===c)await(await import("./index.xd8c7XMr.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("docker"===c)await(await import("./index.D2N9YZmA.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("ios"===c)await(await import("./index.B5XE4ChJ.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("macos"===c)await(await import("./index.W6RYgypK.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else if("rust"===c)await(await import("./index.CzAV0S36.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0;else{if("pypi"!==c)return void console.warn(`No deployer found for type: ${c}`);await(await import("./index.C7saWH6d.js")).default({atom:t,target:i,onProgress:s,projectDir:n.projectDir,dependencies:o,context:n,yamlTarget:r}),a.isDirty=!0}}catch(e){throw console.error(`Error during deployment for type "${c}":`,e),e}},H={name:"ATOM",uri:"http://atom.org/bpmn",prefix:"atom",types:[{name:"AtomExtension",extends:["bpmn:BaseElement"],properties:[{name:"atom",type:"atom:Atom",isMany:!1}]},{name:"Atom",properties:[{name:"type",type:"String",isAttr:!0}]}]};function Y(e,t){return e.filter(((e,o,n)=>n.map((e=>e[t])).indexOf(e[t])===o))}function Z(e){const{nodes:t,nodeIndex:o,root:n}=e,i=e.targetNodes||n.childs;i.forEach((t=>{const o="workflow"===t.type||"subworkflow"===t.type,n=!o&&t.childs.filter((e=>!e.virtual)).length>0;if(n&&(t.bpmn.type="bpmn:SubProcess"),o||n){const o=t.childs.filter((e=>!0!==e.module))[0];t.childs.filter((e=>!0===e.module)).forEach((o=>{const n=Q({...e,parent:t,bpmnType:"bpmn:IntermediateCatchEvent",type:"inter",definitions:[{type:"bpmn:SignalEventDefinition"}]});n.bpmn.edges=[{from:n.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}]}));const n=t.childs.find((e=>"try"===e.name&&"tryexcept"===t.type)),s=t.childs.filter((e=>"except"===e.name&&"tryexcept"===t.type));n&&s.length&&s.forEach((o=>{const i=Q({location:t.childs.indexOf(o),...e,parent:t,bpmnType:"bpmn:BoundaryEvent",type:"boundary",attrs:{attachedToRef:n},definitions:[{type:"bpmn:ErrorEventDefinition"}]});i.bpmn.edges=[{from:i.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}]}));const a=t.childs.find((e=>"raise"===e.type));if(a){const o=Q({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:"ERROR",definitions:[{type:"bpmn:ErrorEventDefinition"}]});a.bpmn.edges=[{from:a.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}]}if(o)if(t.bpmn.starts.length>1){const o=Q({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"}),n=Q({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch"});o.bpmn.edges=[{from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}],n.bpmn.edges=t.bpmn.starts.map((e=>({...e,from:n.indexKey})));const i=n.bpmn.edges.find((e=>!0===e.next));if(i){const o=Q({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:i.to});i.to=o.indexKey}}else{const n=Q({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"});n.bpmn.edges.push({from:n.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"})}t.childs.filter((e=>!0!==e.virtual&&e.bpmn.outside.length&&"bpmn:EndEvent"!==e.bpmn.type)).forEach((o=>{o.bpmn.outside.forEach((n=>{const s=i.indexOf(t),a=Q({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:n.to,location:s+1});o.bpmn.edges.push({from:o.indexKey,to:a.indexKey,type:"bpmn:SequenceFlow"})}))}));t.childs.filter((e=>!0!==e.virtual&&e.bpmn.edges.length>1)).forEach((o=>{const n=i.indexOf(o),s=Q({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch",location:n+1});s.bpmn.edges=o.bpmn.edges.map((e=>({...e,from:s.indexKey}))),o.bpmn.edges=[{from:o.indexKey,to:s.indexKey,type:"bpmn:SequenceFlow"}],o.bpmn.outside=[]}))}Z({...e,targetNodes:t.childs})}))}function Q(e){const{parent:t,nodes:o,nodeIndex:n,bpmnType:i,type:s,name:a,outside:r,location:c,definitions:p,attrs:l}=e,d=t.childs.filter((e=>e.type===`v${s}`)).length,f={indexKey:`${t.indexKey}/_${s}${d}`,pathKey:`${t.pathKey}._${s}${d}`,type:`v${s}`,name:a,bpmn:{edges:[],outside:[],type:i,width:36,height:36,fill:"#c8e6c9",stroke:"#205022",definitions:p,attrs:l},virtual:!0,childs:[]};return t.childs.splice(c||0,0,f),o.push(f),n[f.indexKey]=f,f}function ee(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a,diagrams:r,nodes:c}=e;!function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a,nodes:r}=e,c=o.get("flowElements");o.$nodes=o.$nodes||[],t.childs.forEach((e=>{const t=i.create(e.bpmn.type,{id:`node.${e.pathKey}`,name:e.definition?.title||e.name});if(s[t.id]=t,t.$isNode=!0,t.$node=e,e.$flow=t,o.$nodes.push(t),c.push(t),e.bpmn.attrs){Object.keys(e.bpmn.attrs).forEach((o=>{"attachedToRef"===o&&t.set(o,e.bpmn.attrs[o].$flow)}))}if(e.bpmn.definitions){const o=e.bpmn.definitions.map((e=>{const t=i.create(e.type);return Object.keys(e.attrs||{}).forEach((o=>{t.set(o,e.attrs[o])})),t}));t.eventDefinitions=o}}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a}=e,r=o.get("flowElements");o.$edges=o.$edges||[],t.childs.forEach((e=>{e.bpmn.edges.forEach((t=>{const n=e,c=a[t.to],p=`edge.${n.pathKey}_${c.pathKey}`;if(s[p])return;const l=s[`node.${n.pathKey}`],d=s[`node.${c.pathKey}`],f=i.create(t.type,{id:p,sourceRef:l,targetRef:d});s[f.id]=f,f.$is_edge=!0,l.get("outgoing").push(f),d.get("incoming").push(f),o.$edges.push({from:l,to:d,flow:f}),r.push(f)}))}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a}=e,r=120,c=80,p=160,l=160,d=new B.graphlib.Graph;d.setDefaultEdgeLabel((()=>({}))),d.setGraph({rankdir:"TB",nodesep:r,ranksep:c,xranker:"longest-path"}),o.$nodes.forEach((e=>{d.setNode(e.id,{width:e.$node?.bpmn.width||r,height:e.$node?.bpmn.height||c,label:e.id})})),o.$edges.forEach((e=>{d.setEdge(e.from.id,e.to.id)})),B.layout(d),o.$nodes.forEach((e=>{const t=d.node(e.id);let o=t.width,s=t.height;const a=i.create("bpmndi:BPMNShape",{id:`shape.${e.id}`,bpmnElement:e,bounds:i.create("dc:Bounds",{x:p+t.x-t.width/2,y:l+t.y-t.height/2,width:o,height:s}),label:i.create("bpmndi:BPMNLabel")});e.$node.bpmn.fill&&a.set("bioc:fill",e.$node.bpmn.fill),e.$node.bpmn.stroke&&a.set("bioc:stroke",e.$node.bpmn.stroke);n.get("planeElement").push(a)})),o.$edges.forEach((e=>{const t=d.edge(e.from.id,e.to.id),o=i.create("bpmndi:BPMNEdge",{id:`edge.${e.from.id}_${e.to.id}`,bpmnElement:e.flow,label:i.create("bpmndi:BPMNLabel")});t.points.forEach((e=>{const t=i.create("dc:Point",{x:p+e.x,y:l+e.y});o.get("waypoint").push(t)}));n.get("planeElement").push(o)}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:n,moddle:i,elementIndex:s,nodeIndex:a,diagrams:r}=e,c=t.childs.filter((e=>"bpmn:SubProcess"===e.bpmn.type));c.forEach((t=>{const o=s[`node.${t.pathKey}`],n=i.create("bpmndi:BPMNDiagram",{id:`diagram_${t.pathKey}`});s[n.id]=n,r.push(n);const a=i.create("bpmndi:BPMNPlane",{id:`plane_${t.pathKey}`});s[a.id]=a,n.plane=a,a.bpmnElement=o,ee({...e,targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:a})}))}(e)}async function te(e){const t=e.root,o=t.context.index,n=Object.keys(o).map((e=>o[e]));!function(e){const{nodes:t}=e;t.forEach((e=>{const t=[],o=[],n=i=>{i.context.next&&(t.push({from:i,to:i.context.next,type:"bpmn:SequenceFlow"}),i===e&&o.push({to:i.context.next,type:"bpmn:SequenceFlow",next:!0})),i.childs.forEach((t=>{i===e&&"switch"===e.type&&o.push({to:t,type:"bpmn:SequenceFlow"}),n(t)}))};n(e);const i=t.filter((t=>t.to.parent.indexKey===e.parent.indexKey)).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),s=t.filter((t=>t.to.parent.indexKey!==e.parent.indexKey&&!t.to.indexKey.startsWith(e.indexKey+"/"))).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),a=o.map((e=>({...e,to:e.to.indexKey})));e.bpmn=e.bpmn||{},e.bpmn.edges=Y(i,"to"),e.bpmn.outside=Y(s,"to"),e.bpmn.starts=Y(a,"to"),e.bpmn.type=function(e){return"call"===e.type?"bpmn:ServiceTask":"form"===e.type?"bpmn:UserTask":"return"===e.type?"bpmn:EndEvent":"bpmn:Task"}(e),e.bpmn.width=120,e.bpmn.height=80,"return"===e.type&&(e.bpmn.width=36,e.bpmn.height=36)}))}({nodes:n}),Z({nodes:n,nodeIndex:o,root:t});const i=new O({atom:H}),s={},a=i.create("bpmn:Definitions",{id:"definitions_0"});s[a.id]=a;for await(const e of t.childs){const r=a.get("rootElements"),c=a.get("diagrams"),p=i.create("bpmn:Process",{id:`process_${e.pathKey}`,documentation:[i.create("bpmn:Documentation",{text:`Atom Workflow - ${t.context.atom.name}`})]});s[p.id]=p,p.isExecutable=!0,r.push(p);const l=i.create("bpmndi:BPMNDiagram",{id:`diagram_${e.pathKey}`});s[l.id]=l,c.push(l);const d=i.create("bpmndi:BPMNPlane",{id:`plane_${e.pathKey}`});s[d.id]=d,l.plane=d,d.bpmnElement=p;ee({targetNode:e,targetFlowElementsContainer:p,targetPlaneElement:d,moddle:i,elementIndex:s,nodeIndex:o,nodes:n,diagrams:c})}return{diagramXML:(await i.toXML(a,{format:!0})).xml}}async function oe(e={}){return await te(w(e))}async function ne({node:e,initNode:t}){if(Reflect.has(e.definition,"modules")&&!Array.isArray(e.definition.modules)){const t=e.definition.modules;e.definition.modules=[],Object.keys(t).forEach((o=>{const n={...t[o]};"modules"===e.type&&(n.export=n.export||o),e.definition.modules.push({[o]:n})}))}const o=[],n=await M({data:e.definition,callback:(e,t,n)=>{const i=I({expression:e});if("m"===i?.processor){const e=n.slice(0,-1);e.push(i.statement);const s=e.join("_");return o.push({[s]:t}),[i.statement,`m::${s}`]}return[e,t]}});o.length>0&&(e.definition=n,e.definition.modules=e.definition.modules||[],e.definition.modules=e.definition.modules.concat(o)),e.hasModules=e.definition.modules?.length>0;for(let o=0;o<e.definition.modules?.length;o++){const n=e.definition.modules[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}}async function ie({node:e,transformExpression:t}){const o=e.context.transform;Reflect.has(o,"export")&&(o.export=await t(o.export)),Reflect.has(o,"return")&&(e.hasReturn=!0,o.return=await t(o.return)),o.hasOwnProperty("nextArgs")&&(e.hasNextArgs=!0,o.nextArgs=await t(o.nextArgs))}async function se({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition),e.context.transform;for(const t of e.childs)t.context.transform=t.context.transform||w(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await ie({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var ae={hits:async function({node:e}){return!!e.definition.hasOwnProperty("switch")},init:async function({node:e,initNode:t}){e.type="switch";const o=e.definition.switch||[];if(!o.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===o.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const n=o.filter((e=>e.hasOwnProperty("default")));if(n.length>1)throw new Error("Switch must have only one default");if(1===n.length&&!o[o.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");e.hasDefaultCondition=1===n.length,await ne({node:e,initNode:t}),e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let o=0;o<e.definition.switch.length;o++){let n=e.definition.switch[o],i=`${o}`;n.hasOwnProperty("default")&&(i="default",n=n.default);const s={name:n.condition||i,childs:[],parent:e,definition:n,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=se},resolve:se};var re={hits:async function({node:e}){return 1===Object.keys(e.definition).map((e=>I({expression:e}))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,o=Object.keys(t.definition).map((e=>I({expression:e}))),n=[],i=o.find((e=>"if"===e?.processor)),s=t.definition[i.expression];n.push({name:`${t.name}_if`,definition:s,processor:i}),delete t.definition[i.expression];const a=o.filter((e=>"elseif"===e?.processor));let r=0;for(const e of a){const o=t.definition[e.expression];n.push({name:`${t.name}_elseif_${r++}`,definition:o,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of n)t.definition.switch.push({condition:e.processor.statement,...e.definition});if(t.definition?.else){const e=t.definition.else;t.definition.switch.push({default:e}),delete t.definition.else}await ae.init(e)}};async function ce({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){if(e.context.transform=e.context.transform||w(e.definition),e.context.transform,e.context.try=e.childs.find((e=>"try"===e.name)),e.context.except=e.childs.find((e=>"except"===e.name)),e.context.except){const t=e.context.except;t.context.transform=t.context.transform||w(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await ie({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var pe={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:t}){if(e.type="tryexcept",await ne({node:e,initNode:t}),e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const o="try",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}if(e.definition.except){const o="except",n={name:o,childs:[],parent:e,definition:e.definition[o],index:e.childs.length,context:{}};e.childs.push(n),await t({node:n})}e.resolve=ce},resolve:ce};async function le({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],o=Object.keys(t)[0],s=t[o],a={key:await n(o),value:await n(s)};i.assign[e]=a}await ie({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var de={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",await ne({node:e,initNode:t}),e.resolve=le},resolve:le};async function fe({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await ie({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var me={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",await ne({node:e,initNode:t}),e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[o,n]=[J(e.definition.for,t),L(e.definition.for,t)];e.definition.for=o,e.definition.for.steps=[{[`${e.name}_step`]:n}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let o=0;o<e.definition.for.steps.length;o++){const n=e.definition.for.steps[o],i=Object.keys(n)[0],s={name:i,childs:[],parent:e,definition:n[i],index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=fe},resolve:fe};var ue={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){}};async function he({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var ye={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=he},resolve:he};async function ge({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);const n=e.context.transform;e.hasReturn=!0,n.return=await o(n.return),await t({node:e})}var we={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=ge},resolve:ge};async function xe({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;if("function"===e.target?.atom?.doc?.type&&(i.call=await n(e.target.atom.name)),i.args&&(i.args=await n(i.args)),i.result){"string"==typeof i.result&&(i.result=[{[i.result]:"e::result"}]);for(let e=0;e<i.result?.length;e++){let t=i.result[e],o=Object.keys(t)[0],s=t[o],a={key:await n(o),value:await n(s)};i.result[e]=a}}const s=e.workflow.parent;i.import?e.context.lib=s.context.libs.find((e=>e.name===i.import)):e.context.lib=s.context.libs.find((e=>e.name===i.call)),await ie({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var be={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call",await ne({node:e,initNode:t}),e.resolve=xe},resolve:xe};async function ke({node:e,transformExpression:t}){e.context.next=e.childs[0],e.context.transform=e.context.transform||w(e.definition),await ie({node:e,transformExpression:t})}var ve={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const o=e.definition.steps||[];for await(const n of o){const o=Object.keys(n)[0],i={name:o,childs:[],parent:e,definition:n[o],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=ke},resolve:ke};async function je({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;i.props&&(i.props=await n(i.props));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.form)),await ie({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var De={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form",await ne({node:e,initNode:t}),e.resolve=je},resolve:je};async function _e({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||w(e.definition),await t({node:e})}var Ee={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=_e},resolve:_e};async function Se({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;i.next=await n(i.next),await ie({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var Pe={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Se},resolve:Se};async function $e({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition),e.context.transform,await ie({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var Te={hits:async function({node:e}){return e.definition.hasOwnProperty("modules")},init:async function({node:e,initNode:t}){e.type="modules",await ne({node:e,initNode:t}),e.resolve=$e},resolve:$e};function Ce({node:e}){const t=e.definition;if(!e.hasReturn)if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let o=e.parent;for(;o.parent;){const n=o.childs.find((e=>e.name===t.next));if(n){e.context.next=n;break}o=o.parent}}else{if(!0===e.module)return;let t=e.parent,o=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(Reflect.has(t,"blockAutoJumpToParent")||Reflect.has(t,"blockAutoJumpToSibling")){if(t.blockAutoJumpToParent){const n=t.childs.find((e=>e.index===o));n&&(e.context.next=n);break}t.blockAutoJumpToParent||(o=t.index+1,t=t.parent)}else{const n=t.childs.find((e=>e.index===o));if(n){e.context.next=n;break}o=t.index+1,t=t.parent}}}class Ne{#e;#t;#o;#n;constructor({key:e,npm:t,master:o,extras:n}){this.#e=e,this.#t=t,this.#o=o,this.#n=n}hits({node:e}){return e.definition.hasOwnProperty(this.#e)}async init(e){const{node:t}=e,o=this.#e,n=t.definition,i=typeof n[o];if(n.call=`npm:${this.#t}`,n.args="object"!==i?{...n.args,[`${this.#o}`]:n[o]}:n[o],delete n[o],this.#n)for(const e in this.#n)n[e]=this.#n[e];console.log(`[npm-block] ${this.#e} --\x3e ${this.#t}`),await be.init(e)}}function Fe(e){return new Ne(e)}class Ae{#i;#s;#a;#r;#c;#p;#l;#d;#f;#m;#u;#h;#y;#g;#w;#x;#b;#k;#v;#j;#D;#_=[];constructor(e){this.#i=new q,this.#s=e,this.#p=[],this.#l=[],this.#d={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#_.push(Fe({key:"config",npm:"@fnet/config",master:"name"})),this.#_.push(Fe({key:"yaml",npm:"@fnet/yaml",master:"file"})),this.#_.push(Fe({key:"prompt",npm:"@fnet/prompt",master:"message"})),this.#_.push(Fe({key:"html-link",npm:"@flownet/lib-load-browser-link-url",master:"src"})),this.#_.push(Fe({key:"html-script",npm:"@flownet/lib-load-browser-script-url",master:"src"})),this.#_.push(Fe({key:"http-server",npm:"@fnet/node-express",master:"server_port"})),this.#_.push(Fe({key:"shell",npm:"@fnet/shell-flow",master:"commands"})),this.#_.push(Fe({key:"list-files",npm:"@fnet/list-files",master:"pattern"})),this.#_.push(Fe({key:"up-list-files",npm:"@fnet/up-list-files",master:"pattern"})),this.#_.push(Fe({key:"auto-conda-env",npm:"@fnet/auto-conda-env",master:"envDir"})),this.#_.push(Fe({key:"ollama-chat",npm:"@fnet/ollama-chat",master:"model"})),this.#_.push(Fe({key:"ai",npm:"@fnet/ai",master:"prompt",extras:{subtype:"flow"}})),this.#_.push(Fe({key:"invoke",npm:"@fnet/invoke",master:"method",extras:{}})),this.#_.push(Fe({key:"fetch",npm:"@fnet/fetch",master:"url",extras:{}})),this.#_.push(Fe({key:"filemap",npm:"@fnet/filemap",master:"target",extras:{}})),this.#j={packageDependencies:this.#p,packageDevDependencies:this.#l,setProgress:this.setProgress.bind(this),context:this.#s,Atom:D,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#D={initNode:this.initNode.bind(this),cloneDeep:w,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Ce,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,o){this._redis_client&&await this._redis_client.SETEX(e,o||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await async function(){if(!await k({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=b.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}(),this.#u=this.#s.buildId||v(),this.#j.buildId=this.#u,this.#w=this.#s.mode,this.#x=["all","deploy","build","file"].includes(this.#w),this.#b=["all","deploy","build"].includes(this.#w),this.#k=["all","deploy"].includes(this.#w),this.#v=["all","deploy","build","file","bpmn"].includes(this.#w),this.#y=this.#s.protocol,this.#h="BUILD:"+this.#u,this.#g=(await r({optional:!0,name:"atom",dir:this.#s.projectDir,tags:this.#s.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),this.transformWorkflow({workflow:this.#r});const e=await this.initNodeTree({workflow:this.#r});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initEntryFiles({root:e,features:this.#a.doc.features}),await this.initFeaturesFromNodes({childs:e.childs,features:this.#a.doc.features}),await V(this.#j),await async function({atom:e,packageDependencies:t,packageDevDependencies:o,setProgress:n}){n("Initializing dependencies");const i=e.doc.dependencies||[];if(i.filter((e=>!e.dev)).forEach((e=>t.push(e))),i.filter((e=>e.dev)).forEach((e=>o.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let o="^18.2";n("Fetching React versions"),o=`^${(await S({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:o}),t.push({package:"react-dom",version:o}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),o.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&o.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),o.push({package:"@babel/core",version:"^7"}),o.push({package:"@rollup/plugin-commonjs",version:"^28"}),o.push({package:"@rollup/plugin-node-resolve",version:"^16"}),o.push({package:"@rollup/plugin-replace",version:"^6"}),o.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&o.push({package:"rollup-plugin-dts",version:"^6"}),o.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),o.push({package:"@rollup/plugin-alias",version:"^5"}),o.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(o.push({package:"@rollup/plugin-babel",version:"^6"}),o.push({package:"@babel/preset-env",version:"^7"}),o.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":o.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":o.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":o.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":o.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":o.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),o.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),e.doc.features.browsersync_enabled&&o.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(this.#j),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#p}),await this.resolveNodeTree({root:e}),this.#m=e}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#s.id&&(this.#f=await this.#i.init({config:this.#g}),this.#j.atomAccessToken=this.#f)}async initWorkflow(){const e=this.#s.id;this.#a=this.#s.project?.workflowAtom||await D.get({id:e}),this.#r="string"==typeof this.#a.doc.content?(await m({content:this.#a.doc.content,tags:this.#s.tags})).parsed:this.#a.doc.content;let t=this.#a.doc.bundleName;t=t||(this.#a.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#a.doc.bundleName=t,this.#a.type=this.#a.type||"workflow",this.#j.atom=this.#a,this.#a.doc.features=this.#a.doc.features||{}}#E(e){console.log("filePath",e),o.statSync(e).isDirectory()?(o.readdirSync(e).forEach((t=>{const o=i.join(e,t);this.#E(o)})),o.rmSync(e)):o.unlinkSync(e)}#S(e,t){const n=o.existsSync(e),s=n&&o.statSync(e);n&&s.isDirectory()?(o.mkdirSync(t,{recursive:!0}),o.readdirSync(e).forEach((o=>{this.#S(i.join(e,o),i.join(t,o))}))):o.copyFileSync(e,t)}async initWorkflowDir(){this.setProgress({message:"Initializing library directory."});const e=this.#s.projectDir,t=this.#s.coreDir;this.setProgress({message:"Cleaning project directory."});const n=R({dir:e,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of n)o.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."}),o.existsSync(e)||o.mkdirSync(e,{recursive:!0});const s=i.join(e,"src");o.existsSync(s)||o.mkdirSync(s,{recursive:!0});const a=i.join(s,"core");this.#S(t,a);const r=i.join(s,"default","blocks");o.existsSync(r)||o.mkdirSync(r,{recursive:!0})}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#s.templateDir;this.#c=g.configure(e,{watch:!1,dev:!0}),this.#j.njEnv=this.#c}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.filter((e=>Object.keys(e).length>0)),t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,o]=Object.entries(e)[0];if(o.hasOwnProperty("onerror")){const{onerror:n,...i}=o;e[t]={try:i,except:n}}if(e[t].hasOwnProperty("steps")){const o=e[t].steps;if(!Array.isArray(o))throw new Error("Steps must be an array.");e[t].steps=o.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),o={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#a}};t.forEach((t=>{const n={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:o,definition:e[t],index:o.childs.length,depth:o.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};o.childs.push(n)}));for await(const e of o.childs)await this.initNode({node:e});return o}async initNode({node:e}){const t={...this.#D,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await pe.hits(t))await pe.init(t);else if(await me.hits(t))await me.init(t);else if(await ae.hits(t))await ae.init(t);else if(await re.hits(t))await re.init(t);else if(await ue.hits(t))await ue.init(t);else if(await de.hits(t))await de.init(t);else if(await ye.hits(t))await ye.init(t);else if(await be.hits(t))await be.init(t);else if(this.#_.find((e=>e.hits(t))))await this.#_.find((e=>e.hits(t))).init(t);else if(await De.hits(t))await De.init(t);else if(await Ee.hits(t))await Ee.init(t);else if(await ve.hits(t))await ve.init(t);else if(await Pe.hits(t))await Pe.init(t);else if(await Te.hits(t))await Te.init(t);else{if(!await we.hits(t))throw new Error("Undefined step type.");await we.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const o of e.childs)await this.initNodeIndex({node:o,index:t});return e.context.index=t,t}async initNodeIndex({node:e,index:t}){const o=i.join(e.parent.indexKey,e.name);e.indexKey=o,t[o]=e;const n=[];let s=e;for(;s?.parent;)n.push(s.index),s=s.parent;n.reverse(),e.codeKey=`B_${n.join("_")}_${e.type}`,e.pathKey=`${n.join(".")}`,e.typeId=v();for await(const o of e.childs)await this.initNodeIndex({node:o,index:t})}async initNodeCalls({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"call"===n.type&&o.push(n)}return e.context.calls=o,o}async initNodeCallLibs({root:e}){const t=[],o=e.context.calls;for await(const e of o){const o=e.definition.import||e.definition.call,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom",definition:e.definition},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.call,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,o=[];for await(const e of Object.keys(t)){const n=t[e];"form"===n.type&&o.push(n)}return e.context.forms=o,o}async initNodeFormLibs({root:e}){const t=[],o=e.context.forms;for await(const e of o){const o=e.definition.import||e.definition.form,n=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:o,type:"atom"},i=t.find((e=>e.name===n.name&&e.type===n.type));i||t.push(n),e.target=i||n}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async initFeaturesFromNodes({childs:e,features:t}){for await(const o of e)"form"!==o.type||Reflect.has(t,"form")||(t.form=!0),await this.initFeaturesFromNodes({childs:o.childs,features:t})}async initEntryFiles({root:e,features:t}){for await(const o of e.childs){let e;if("main"===o.name)e="index.js";else if("cli"===o.name)e="cli.js";else if("app"===o.name)e="app.js";else{if("api"!==o.name)continue;e="api.js"}t[`${o.name}_default_entry_file`]=e,o.entryFile=e}}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const o=e.definition.form,n=t.childs.find((e=>e.name===o&&"subworkflow"===e.type));return n||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const o=e.filter((e=>"atom"===e.type));for(let e=0;e<o.length;e++){const n=o[e],i=await this.findAtomLibrary({url:n.name,libRef:n});n.atom=i;const s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const o=t.find((t=>t.package===e.package));o?"string"==typeof e.path?(o.path||[]).some((t=>t===e.path))||(o.path=o.path||[],o.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(o.path||[]).some((t=>t===e))||(o.path=o.path||[],o.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e,libRef:t}){const o=A({url:e});if(!o)throw new Error(`Invalid package name: ${e}`);if(o.protocol||(o.protocol=this.#y),"ac:"===o.protocol){const t=o.pathname.split("/");if(1===t.length)return await D.first({where:{name:e,parent_id:this.#g.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===t.length){const e=await D.first({where:{name:t[0],parent_id:this.#g.env.ATOM_LIBRARIES_ID,type:"folder"}});return await D.first({where:{name:t[1],parent_id:e.id,type:"workflow.lib"}})}}else{if("local:"===o.protocol){const e=i.resolve(this.#s.projectSrcDir,`${o.pathname}.js`),t=[],n=(await E({file:e,recursive:!0})).all;for await(const e of n){if("npm"!==e.type)continue;if(t.find((t=>t.package===e.package)))continue;const o=await U({name:e.package,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});t.push({package:e.package,subpath:e.subpath,version:o.minorRange,type:"npm"})}return{name:o.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:t},protocol:o.protocol}}if("npm:"===o.protocol){const e=await U({name:o.pathname,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});return{name:o.pathname,doc:{type:"workflow.lib",subtype:"flow"===t?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:o.pathname,version:e.minorRange,type:"npm"}]},protocol:o.protocol}}if("use:"===o.protocol){return{name:o.pathname,doc:{type:"function",dependencies:[]},protocol:o.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=e.context.transform||w(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const o=t.params[e];if("string"==typeof o)t.params[e]={key:o,hasDefault:!1};else{const n=Object.keys(o)[0];t.params[e]={key:n,hasDefault:!0,default:o[n],type:typeof o[n]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#D,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:e}){await this.setProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const t=e.context.libs.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const n=t[e].atom,s=this.#s.projectDir;if("local:"===n.protocol){const e=i.resolve(this.#s.projectSrcDir,`${n.fileName||n.name}.js`),t=i.relative(`${this.#s.projectDir}/src/default/blocks`,e);if(!o.existsSync(e)){o.mkdirSync(i.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",o.writeFileSync(e,t,"utf8")}n.relativePath=t.split(i.sep).join("/"),this.#a.typesDir=`./types/${i.basename(s)}/src`}else if("npm:"===n.protocol)n.relativePath=n.name;else if("use:"===n.protocol);else{const e=`${s}/src/libs/${n.id}.js`,t=n.doc.contents?.find((e=>"esm"===e.format))||n.doc;o.writeFileSync(i.normalize(e),t.content,"utf8")}}}async createEngine({root:e}){await this.setProgress({message:"Creating engine file."});const t=this.#s.templateDir,n=g.compile(o.readFileSync(i.resolve(t,"src/default/engine.js.njk"),"utf8"),this.#c);for(let t=0;t<e.childs.length;t++){const s=e.childs[t];if(!s.entryFile)continue;const a=n.render({flow:s,ui:{package:"@fnet/react-app"}}),r=this.#s.projectDir,c=i.resolve(r,`src/default/${s.entryFile}`);o.writeFileSync(c,a,"utf8")}}async createNodeTree({root:e}){await this.setProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:e}){const t=this.#s.templateDir,n=g.compile(o.readFileSync(i.resolve(t,"src/default/workflow.js.njk"),"utf8"),this.#c).render(e),s=this.#s.projectDir,a=i.resolve(s,`src/default/${e.codeKey}.js`);o.writeFileSync(a,n,"utf8");for await(const t of e.childs)await this.createType({node:t})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":case"modules":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:e}){let t=this.#d[e.type];if(t)return t;const n=this.#s.templateDir;return t=g.compile(o.readFileSync(i.resolve(n,`src/default/blocks/${e.type}.js.njk`),"utf8"),this.#c),this.#d[e.type]=t,t}createStepFile({node:e}){const t=this.#s.projectDir,n=`${e.codeKey}.js`,s=i.resolve(t,`src/default/blocks/${n}`);o.writeFileSync(s,e.context.render,"utf8"),e.context.fileName=n,e.context.filePath=s}async transformExpression(e){let t=await this.transformValue(e);return t=JSON.stringify(t),t=this.replaceSpecialPattern(t),t}async transformValue(e){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=await this.transformValue(e[t]);else if(x(e)){const t=Object.keys(e);for(let o=0;o<t.length;o++){const n=t[o],i=I({expression:n});if(i)if("e"===i.processor){const t=e[n].replace(/(\r\n|\n|\r)/g,"");e[i.statement]=`$::${t}::`,delete e[n]}else e[n]=await this.transformValue(e[n]);else e[n]=await this.transformValue(e[n])}}else if("string"==typeof e){const t=I({expression:e});if(t){const{processor:o,statement:n}=t;switch(o){case"v":e=`$::v.${n}::`;break;case"e":e=`$::${n}::`;break;case"m":e=`$::c.module['${n}']::`;break;case"fm":e=`$::flow.getModule('${n}')::`;break;case"f":e=`$::c.form.${n}::`;break;case"for":e=`$::caller.for.${n}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const e="fnet.yaml",t=`Creating ${e}`;await this.setProgress({message:t});const{content:n,...s}=this.#a.doc,a={content:d.stringify(s)},r=this.#s.templateDir,c=g.compile(o.readFileSync(i.resolve(r,`${e}.njk`),"utf8"),this.#c).render(a),p=this.#s.projectDir,l=i.resolve(p,`${e}`);o.writeFileSync(l,c,"utf8")}async createProjectMainYaml(){const e="flow.main.yaml",t=`Creating ${e}`;await this.setProgress({message:t});const n={content:d.stringify(this.#r)},s=this.#s.templateDir,a=g.compile(o.readFileSync(i.resolve(s,`${e}.njk`),"utf8"),this.#c).render(n),r=this.#s.projectDir,c=i.resolve(r,`${e}`);o.writeFileSync(c,a,"utf8")}async runPrettifier(){const e=this.#s.projectDir,t=await f("prettier --write .",{cwd:i.resolve(e,"src")});if(0!==t.code)throw new Error(t.stderr)}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#s.project?.devops){const e=[this.#s.project?.devops];for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&await o.save()}}else if(this.#a.id){const e=await D.list({type:"workflow.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let o=e[t];await this.deployProject({deploymentProject:o}),!0===o.isDirty&&(o=await D.update(o,{id:o.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:o}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const n=Object.keys(t.doc||{}),i=o||{};for(let e=0;e<n.length;e++){const o=t.doc[n[e]];o.name=n[e];const s=i.get(n[e]);await G({...this.#j,deploymentProject:t,deploymentProjectTarget:o,yamlTarget:s})}}async registerToPackageManager(e){const{target:t,packageJSON:o}=e;if(!this.#s.id)return;let n=await D.first({name:t.params.name,parent_id:this.#g.env.ATOM_PACKAGES_ID});n?(n.doc.versions.splice(0,0,{v:o.version}),await D.update(n,{id:n.id})):n=await D.create({parent_id:this.#g.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:o.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(K.blue(t)),await this._cache_set(this.#h,{status:"IN_PROGRESS",message:t})}async build(){if(this.#v&&!this.#x)return await this.createNetwork();try{const e=this.#v?await oe({root:this.#m}):void 0;if(this.#x){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#v){let t=this.#s.project?.projectDir||this.#s.projectDir;t=i.resolve(t,"fnet"),o.existsSync(t)&&o.writeFileSync(i.resolve(t,"flow.bpmn"),e.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#m}),await this.createEngine({root:this.#m}),await this.createNodeTree({root:this.#m}),await this.createProjectYaml(),await async function({atom:e,context:t,setProgress:n,Atom:s}){const a="readme.md",r=`Creating ${a}`;if(await n({message:r}),t.project?.readme){const e=t.projectDir,n={content:t.project.readme.doc.content},s=i.resolve(t.project.projectDir,"fnet/how-to.md");if(o.existsSync(s)){const e=o.readFileSync(s,"utf8");n.howto=e}const r=i.resolve(t.project.projectDir,"fnet/input.yaml");if(o.existsSync(r)){const e=await m({file:r,tags:t.tags});n.input=e.content}const c=t.templateCommonDir,p=g.compile(o.readFileSync(i.resolve(c,`${a}.njk`),"utf8"),g.configure(c)).render(n),l=i.resolve(e,`${a}`);o.writeFileSync(l,p,"utf8")}else if(e.id){const n=await s.first({type:"wiki",parent_id:e.id});if(!n||"markdown"!==n.doc?.["content-type"])return;const{content:r,...c}=n.doc,p={content:r},l=t.templateCommonDir,d=g.compile(o.readFileSync(i.resolve(l,`${a}.njk`),"utf8"),g.configure(l)).render(p),f=t.projectDir,m=i.resolve(f,`${a}`);o.writeFileSync(m,d,"utf8")}}(this.#j),await async function({atom:e,setProgress:t,context:n,packageDependencies:s}){await t({message:"Creating tsconfig.json."});const a={atom:e,packageDependencies:s},r=n.templateCommonDir,c=g.compile(o.readFileSync(i.resolve(r,"tsconfig.json.njk"),"utf8"),g.configure(r)).render(a),p=n.projectDir,l=i.resolve(p,"tsconfig.json");o.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:e,setProgress:t,context:n,packageDependencies:s}){await t({message:"Creating .gitignore"});const a={atom:e,packageDependencies:s},r=n.templateCommonDir,c=g.compile(o.readFileSync(i.resolve(r,".gitignore.njk"),"utf8"),g.configure(r)).render(a),p=n.projectDir,l=i.resolve(p,".gitignore");o.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:e,setProgress:t,context:n,njEnv:s}){if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let a={};if(a=e.doc.input?e.doc.input:{type:"object",properties:{},required:[]},e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const t=e.doc.features.cli.fargs,o={type:"string",description:"Config name to load args",hidden:!1},n={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(t,"default")&&(o.default=t.default),a.properties&&(a.properties.fargs=o,a.properties.ftag=n)}const r={options:a,imports:[],atom:e},c=n.templateDir,p=g.compile(o.readFileSync(i.resolve(c,"src/default/to.args.js.njk"),"utf8"),s).render(r),l=n.projectDir,d=i.resolve(l,"src/default/to.args.js");o.writeFileSync(d,p,"utf8");const f=new T({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});N(f);const m=f.compile(a),u=C(f,m);o.writeFileSync(i.resolve(l,"src/default/validate_input.js"),u,"utf8")}(this.#j),await async function({atom:e,setProgress:t,context:n,packageDependencies:s}){if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const a={atom:e,packageDependencies:s},r=n.templateDir,c=i.resolve(n.projectDir,"src/cli");o.existsSync(c)||o.mkdirSync(c,{recursive:!0}),await y({pattern:["index.js.njk"],dir:i.resolve(r,"src/cli"),outDir:c,context:a})}(this.#j),await async function({atom:e,setProgress:t,context:n,packageDependencies:s}){if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating app folder"});const a={atom:e,packageDependencies:s,ts:Date.now()},r=n.templateDir,c=i.resolve(n.projectDir,"src/app");o.existsSync(c)||o.mkdirSync(c,{recursive:!0});let p=["index.js.njk"];!1!==e.doc.features.app.html&&p.push("index.html.njk"),await y({pattern:p,dir:i.resolve(r,"src/app"),outDir:c,context:a})}(this.#j),await async function({atom:e,setProgress:t,context:n,packageDependencies:s}){await t({message:"Creating rollup file."});const a={atom:e,packageDependencies:s},r=i.resolve(n.projectDir,"src","default/index.js");if(!o.existsSync(r))throw new Error(`Entry file not found: ${r}`);const c=(await E({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),p=e.doc.features.rollup_output,l=Object.keys(p);for(let e=0;e<l.length;e++){const t=p[l[e]];if(!0===t.browser&&c.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(c.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<c.length;e++){const o=c[e];t.alias.entries[o]=`node:${o}`,t.alias.entries[`node:${o}`]=o}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(c)}}const d=n.templateCommonDir;let f=g.compile(o.readFileSync(i.resolve(d,"rollup.config.mjs.njk"),"utf8"),g.configure(d)).render(a);const m=n.projectDir;let u=i.resolve(m,"rollup.config.mjs");o.writeFileSync(u,f,"utf8")}(this.#j),await async function({atom:e,context:t,packageDependencies:n,packageDevDependencies:s,setProgress:a}){await a({message:"Creating package.json."}),n.filter((e=>!0===e.dev)).forEach((e=>{s.find((t=>t.package===e.package))||s.push(e);const t=n.findIndex((t=>t.package===e.package));n.splice(t,1)}));const r=n.find((e=>"react"===e.package)),c=n.find((e=>"react-dom"===e.package));r&&!c?n.push({package:"react-dom",version:r.version}):r&&c&&(c.version=r.version),r&&e.doc.features.react_version>=17&&(n.find((e=>"@emotion/react"===e.package))||n.push({package:"@emotion/react",version:"^11"}),n.find((e=>"@emotion/styled"===e.package))||n.push({package:"@emotion/styled",version:"^11"}));const p=[];!0===e.doc.features.app.enabled&&p.push({file:i.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&p.push({file:i.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const e of p){const i=e.file;if(!o.existsSync(i))throw new Error(`App file not found: ${i}`);const r=(await E({file:i,recursive:!0})).all;for await(const o of r){if("npm"!==o.type)continue;if(n.find((e=>e.package===o.package)))continue;if(s.find((e=>e.package===o.package)))continue;const i=await U({name:o.package,projectDir:t.projectDir,setProgress:a});(!0===e.dev?s:n).push({package:o.package,subpath:o.subpath,version:i.minorRange,type:"npm"})}}const l={atom:e,packageDependencies:n,packageDevDependencies:s},d=t.templateCommonDir,f=g.compile(o.readFileSync(i.resolve(d,"package.json.njk"),"utf8"),g.configure(d)).render(l),m=t.projectDir,u=i.resolve(m,"package.json");o.writeFileSync(u,f,"utf8");const h=i.resolve(t.project.projectDir,"fnet");if(o.existsSync(h)){const e=i.resolve(t.projectDir,"fnet");o.existsSync(e)||o.mkdirSync(e);const n=o.readdirSync(h);for(const t of n){const n=i.resolve(h,t);if(!o.lstatSync(n).isFile())continue;const s=i.resolve(e,t);o.copyFileSync(n,s)}}}(this.#j),await async function({setProgress:e,context:t}){const o=t.projectDir;await e({message:"Prettifiying source files."});let n=F.join("src","**","*");await h({commands:{steps:[`prettier --write ${n} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`],wdir:o}})}(this.#j),await async function({atom:e,setProgress:t,context:o}){if(!e.doc.features.dts_enabled)return;const n=o.projectDir;if(await t({message:"Creating .d.ts"}),0!==(await f("tsc",{cwd:n})).code)throw new Error("Couldnt create .d.ts files.")}(this.#j),this.#b&&(await async function({setProgress:e,atom:t,context:o}){const n=o.projectDir;await e({message:"Installing npm packages."});const i=z("bun")?"bun":"npm";if(0!==(await f(`${i} install ${t.doc.features.npm_install_flags}`,{cwd:n})).code)throw new Error("Couldnt install npm packages.")}(this.#j),await async function({setProgress:e,context:t}){const o=t.projectDir;if(await e({message:"Building main project."}),0!==(await f("npm run build",{cwd:o})).code)throw new Error("Couldnt build project.")}(this.#j),this.#k&&await this.deploy())}await this._cache_set(this.#h,{status:"COMPLETED",data:{network:e}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await oe({root:this.#m});await this._cache_set(this.#h,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}}const Oe=i.dirname(c(import.meta.url));const Be=i.dirname(c(import.meta.url)),Ie=process.cwd();r({name:["redis"],dir:Ie,optional:!0});const Ke=function({baseDir:e}){let t=e=e||Oe;for(;t!==i.parse(t).root;){const e=i.join(t,"node_modules");if(o.existsSync(e))return e;t=i.dirname(t)}return null}({baseDir:Be}),Re="win32"===process.platform?";":":";Ke&&(process.env.PATH=`${i.join(Ke,"/.bin")}${Re}${process.env.PATH}`);let Me=p(process.argv.slice(2)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"}).option("vscode",{type:"boolean",default:!0,alias:"vs"}).option("runtime",{type:"string",default:"node",choices:["node"]})),(async e=>{try{const t=i.resolve(Ke,"./@fnet/cli-project-flow/dist/template/project"),o=i.resolve(Ie,e.name);l.existsSync(o)||l.mkdirSync(o),await y({dir:t,outDir:o,context:e,copyUnmatchedAlso:!0});let n=await f("fnet build",{cwd:o});if(0!==n.code)throw new Error("Failed to build project.");if(z("git")&&(n=await f("git init --initial-branch=main",{cwd:o}),0!==n.code))throw new Error("Failed to initialize git.");if(z("code")&&e.vscode&&(n=await f(`cd ${o} && code .`),0!==n.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async e=>{try{const t=i.resolve(Ke,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd(),n=await Le(e);if(e.update){if(await y({dir:t,outDir:o,context:{name:n.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0}),0!==(await f("fnet build",{cwd:o})).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await Le(e),o=new Ae(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Le({...e,mode:"all"}),o=new Ae(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Le({...e,mode:"file"}),o=new Ae(t);await o.init(),await o.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function Je(t,{name:o,bin:n,preArgs:i=[]}){return t.command(`${o||n} [commands..]`,`${n} ${i.join(" ")}`,(e=>e.help(!1).version(!1)),(async t=>{try{const o=await Le(t),{projectDir:s}=o,a=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,r=process.argv.slice(3).map(a);e(n,[...i,...r],{cwd:s,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Le(e){if(e.id){return{id:e.id,buildId:e.buildId,mode:e.mode,protocol:e.protocol||"ac:",projectDir:i.resolve(Ie,`./.output/${e.id}`),templateDir:i.resolve(Ke,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:i.resolve(Ke,"./@fnet/cli-project-common/dist/template/default"),coreDir:i.resolve(Ke,"./@fnet/cli-project-flow/dist/template/core"),tags:e.ftag}}{const t=await async function({tags:e}){const t=i.resolve(Ie,"fnet.yaml");if(!l.existsSync(t))throw new Error("fnet.yaml file not found in current directory.");const{raw:o,parsed:n}=await m({file:t,tags:e}),s=i.dirname(t);let a;if("object"==typeof n.flows)a=n.flows;else{let t="flow.main.yaml";l.existsSync(i.join(s,"fnet","flows.yaml"))&&(t=i.join("fnet","flows.yaml"));const o=n.main||t;let r=i.resolve(s,o);if(l.existsSync(r)){const{parsed:t}=await m({file:r,tags:e});a=t}else a={main:{steps:[]}}}const r={workflowAtom:{doc:{...n,content:a}},projectDir:s,projectFilePath:t,projectFileContent:o,projectFileParsed:n};let c=i.resolve(s,"fnet/targets.yaml");if(!l.existsSync(c)&&(c=i.resolve(s,"flow.devops.yaml"),l.existsSync(c))){const e=i.resolve(s,"fnet");l.existsSync(e)||l.mkdirSync(e),l.copyFileSync(c,i.resolve(s,"fnet/targets.yaml")),l.unlinkSync(c)}if(l.existsSync(c)){const{raw:t,parsed:o}=await m({file:c,tags:e}),n=d.parseDocument(t);r.devops={filePath:c,fileContent:t,yamlDocument:n,doc:{...o},type:"workflow.deploy",save:async()=>{l.writeFileSync(r.devops.filePath,n.toString())}}}const p=i.resolve(s,"readme.md");if(l.existsSync(p)){const e=l.readFileSync(p,"utf8");r.readme={filePath:p,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return r}({tags:e.ftag});return{buildId:e.buildId,mode:e.mode,protocol:e.protocol||"local:",templateDir:i.resolve(Ke,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:i.resolve(Ke,"./@fnet/cli-project-common/dist/template/default"),coreDir:i.resolve(Ke,"./@fnet/cli-project-flow/dist/template/core"),projectDir:i.resolve(t.projectDir,"./.workspace"),projectSrcDir:i.resolve(t.projectDir,"./src"),project:t,tags:e.ftag}}}Me=Me.command("input [name]","Create or modify an input config file",(e=>e.positional("name",{type:"string",demandOption:!1}).help(!1).version(!1)),(async e=>{try{const o=await Le(e),{project:n}=o,{projectDir:s,projectFileParsed:a}=n,r=a.input;if(!r)throw new Error("Config schema not found in project file.");if(!Reflect.has(e,"name")){const{inputName:o}=await t({type:"input",name:"inputName",message:"Input name:",initial:"dev"});e.name=o}const c=i.resolve(s,".fnet");l.existsSync(c)||l.mkdirSync(c);const p=i.resolve(c,`${e.name}.fnet`),d=l.existsSync(p),f=await u({schema:r,format:"yaml",ref:d?p:void 0});l.writeFileSync(p,f)}catch(e){console.error(e.message),process.exit(1)}})),Me=Je(Me,{bin:"npm"}),Me=Je(Me,{bin:"node"}),Me=Je(Me,{bin:"bun"}),Me=Je(Me,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Me=Je(Me,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Me=Je(Me,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Me=Je(Me,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Me=Je(Me,{bin:"npx"}),Me=Je(Me,{bin:"cdk"}),Me=Je(Me,{bin:"aws"}),Me=function(t,{name:o,preArgs:n=[]}){return t.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 t=>{try{const o=await Le(t),{projectDir:i}=o,s=t.config,a=await r({name:s,dir:i,transferEnv:!1,optional:!0,tags:o.tags}),c=a?.data?.env||void 0,p=t.command,d=process.argv.slice(5);e(p,[...n,...d],{cwd:l.existsSync(i)?i:Ie,stdio:"inherit",shell:!0,env:{...process.env,...c}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(Me,{name:"with"}),Me=function(e,{name:t,preArgs:o=[]}){return e.command(`${t} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const t=await Le(e),{project:o}=t,{projectFileParsed:n}=o,i=n.commands;if(!i)throw new Error("Commands not found in project file.");const s=i[e.group];if(!s)throw new Error(`Command group '${e.group}' not found in project file.`);await h({commands:s})}catch(e){console.error(e.message),process.exit(1)}}))}(Me,{name:"run"}),Me.demandCommand(1,"You need at least one command before moving on").help().argv;export{z as w};
2
+ import e,{delimiter as t,join as n}from"node:path";import{fileURLToPath as o}from"node:url";import{spawn as i}from"node:child_process";import s from"node:os";import a,{existsSync as r}from"node:fs";import c from"yaml";import p from"yargs";import l from"@fnet/prompt";import d from"@fnet/shelljs";import f from"@fnet/yaml";import m from"@fnet/config";import u from"@fnet/shell-flow";import h from"@flownet/lib-render-templates-dir";import y from"nunjucks";import w from"lodash.clonedeep";import g from"isobject";import x from"redis";import b from"@flownet/lib-is-redis-online";import{randomUUID as k}from"node:crypto";import{Api as v,Atom as j}from"@flownet/lib-atom-api-js";import _ from"lodash.merge";import D from"@flownet/lib-parse-imports-js";import E from"@fnet/npm-list-versions";import S from"@fnet/npm-pick-versions";import P from"object-hash";import $ from"ajv/dist/2020.js";import T from"ajv/dist/standalone/index.js";import C from"ajv-formats";import N from"@flownet/lib-parse-node-url";import F from"bpmn-moddle";import A from"dagre";import O from"@fnet/expression";import B from"chalk";import I from"@fnet/list-files";import K from"@fnet/key-value-transformer";import R from"lodash.pick";import M from"lodash.omit";const J=e.dirname(o(import.meta.url));var L=e=>{const o=process.env.PATH||"",i="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],s=o.split(t);for(const t of s)for(const o of i){const i=n(t,"win32"===process.platform?e+o:e);if(r(i))return i}return null};class z{init({config:e,accessToken:t}){return new Promise(((n,o)=>{if(v.set_api_url(e.data.url),t)return v.set_req_token(t),void n(t);fetch(`${e.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((e=>{v.set_req_token(e.access_token),n(e.access_token)})).catch((e=>{v.set_req_token(),o(e)}))}))}}function q({feature:e,features:t,packageDevDependencies:n}){const{name:o,packages:i,options:s,extraCheck:a,explicit:r}=e,c=`${o}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=s||{};const f=t[o]?.options;f&&(d=_(d,f));const m=!t[o]||!1===t[o]?.enabled;l.forEach((e=>{const n=t.rollup_output[e];if(n){if(Reflect.has(n,o)){if(m||!n[o]||!1===n[o]?.enabled)return void delete n[o];!0===n[o]&&(n[o]={enabled:!0,options:d})}else{if(m||r||!1===t[c])return;n[o]={enabled:!0}}n[o]=n[o]||{},n[o].options={...d,...n[o].options}}}));let u=l.some((e=>!0===t.rollup_output[e][o]?.enabled));a&&(u=a()&&u),t[c]=u,u&&i.forEach((e=>n.push({package:e[0],version:e[1]})))}function W({dir:t,name:n="index"}){let o=e.resolve(t,`./${n}.tsx`);if(a.existsSync(o)||(o=e.resolve(t,`./${n}.ts`)),a.existsSync(o)||(o=e.resolve(t,`./${n}.jsx`)),a.existsSync(o)||(o=e.resolve(t,`./${n}.js`)),!a.existsSync(o))return{};const i=o,s=e.extname(o);return{file:i,ext:s,ts:".ts"===s||".tsx"===s,name:n}}async function X(t){const{atom:n,context:o,setProgress:i}=t;i("Initializing features..."),n.doc.features=n.doc.features||{};const s=n.doc.features;s.project=s.project||{},s.project.format=s.project.format||s.project_format||"esm",s.project_format=s.project.format,s.dts_enabled=!0===s.dts||void 0!==s.dts&&!1!==s.dts;const a=e.resolve(o.project.projectDir),r=W({dir:e.resolve(a,"./app")});if(r.file){i("Parsing app entry imports...");let e=await D({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.app_uses_jsx=t,s.app_has_entry=!0,e=await D({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.app_entry_uses_jsx=t,s.app_entry_is_ts=r.ts,s.app_entry_ext=r.ext}const c=W({dir:e.resolve(a,"./cli")});if(c.file){i("Parsing cli entry imports...");let e=await D({file:c.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.cli_uses_jsx=t,s.cli_has_entry=!0,e=await D({file:c.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.cli_entry_uses_jsx=t,s.cli_entry_is_ts=c.ts,s.cli_entry_ext=c.ext}if("workflow.lib"===n.type){const t=W({dir:e.resolve(a,"./src")});if(t.file){i("Parsing src entry imports...");let e=await D({file:t.file,recursive:!0}),n=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.src_uses_jsx=n,s.src_has_entry=!0,e=await D({file:t.file}),n=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.src_entry_uses_jsx=n,s.src_entry_is_ts=t.ts,s.src_entry_ext=t.ext}}const p=Reflect.has(s,"app_entry_uses_jsx")?!0===s.app_entry_uses_jsx:!0===s.src_entry_uses_jsx,l=Reflect.has(s,"cli_entry_uses_jsx")?!0===s.cli_entry_uses_jsx:!0===s.src_entry_uses_jsx;s.form_enabled=p||l||!0===s.form||!0===s.form?.enabled,s.multiple_enabled=s.multiple_enabled||!0===s.multiple||!0===s.multiple?.enabled,!1===s.app?s.app={enabled:!1}:!0===s.app?s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p}:s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p,...s.app||{}},s.app.enabled=!0===s.app.enabled&&(!0===n.doc.features.form_enabled||!0===s.app.extend||!0===s.app.enabled),s.app.format=s.app.format||"esm",s.app.folder=s.app.folder||s.app.format||"default",!1===s.cli?s.cli={enabled:!1}:!0===s.cli?s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l}:s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l,...s.cli||{}},s.cli.enabled=!0===s.cli.enabled&&(!1===n.doc.features.form_enabled||!0===s.cli.extend||!0===s.cli.enabled),s.cli.format=s.cli.format||"esm",s.cli.folder=s.cli.folder||s.cli.folder||"esm",s.cli.node_options=s.cli.node?.options||s.cli.node_options||"",s.json=s.cli.enabled||s.json;const d={cjs:{format:"cjs",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==s.cjs,copy:!1},esm:{format:"esm",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==s.esm,copy:!0},iife:{format:"iife",context:s.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===s.iife,terser:!0,copy:!1}};!0===s.webos&&(d.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===s.electron&&(d.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===s.nextjs&&(d.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===s.ios&&(d.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===s.macos&&(d.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===s.app.enabled&&(s.app.dir=`./dist/app/${s.app.folder}`,d.app={format:s.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:s.app.dir,terser:!0,output_exports:!1===s.app.export?"none":"auto",browsersync:!0}),!0===s.cli.enabled&&(s.cli.dir=`./dist/cli/${s.cli.folder}`,d.cli={format:s.cli.format,context:"global",babel:!0===s.src_uses_jsx||!0===s.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:s.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===s.cli.export?"none":"auto"});const f={server:".",startPath:`${e.normalize(s.app.dir||".")}`,files:[e.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=_({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=_(f,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=_({},s.replace_options||s.replace?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=_(d,s.rollup_output||s.rollup?.output||{}),s.preact_enabled=!0===s.preact||s.preact&&!1!==s.preact?.enabled;let m=Object.keys(d);for(const e of m){const t=d[e];t&&(!1!==s.rollup[e]?(t.babel_options=t.babel_options||s.babel_options,t.browsersync_options=_(s.browsersync_options,t.browsersync_options),t.replace_options=_(s.replace_options,t.replace_options),s.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),(s.form_enabled||s.babel)&&(t.babel=!0)):delete s.rollup_output[e])}m=Object.keys(s.rollup_output),s.babel_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browser_enabled=m.some((e=>!0===s.rollup_output[e].babel)),s.browsersync_enabled=!1!==s.browsersync&&m.some((e=>!0===s.rollup_output[e].browsersync)),s.browsersync_enabled=s.browsersync_enabled&&s.app.enabled,s.dependency_auto_enabled=!1!==s.dependency_auto&&!1!==s.dependency_auto?.enabled,s.npm_install_flags=s.npm_install_flags||"",s.react_version=s.react_version||s.react?.version||18,function(e){const{atom:t,packageDevDependencies:n}=e,o=t.doc.features,i=o.css&&!1!==o.css.enabled;let s=[];i&&(s.push(["rollup-plugin-postcss","^4"]),s.push(["sass","^1.66"]),(o.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":s.push(["postcss-import","^15"]);break;case"postcss-url":s.push(["postcss-url","^10"]);break;case"postcss-preset-env":s.push(["postcss-preset-env","^9"]);break;case"autoprefixer":s.push(["autoprefixer","^10"]);break;case"cssnano":s.push(["cssnano","^6"])}})));q({feature:{name:"css",packages:s},features:o,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e,o=t.doc.features,i={};!0===o.app?.enabled&&(i.targets=i.targets||[],i.targets.push({src:"./src/app/index.html",dest:o.app.dir}),Reflect.has(o.app,"copy")||Reflect.has(o,"copy")||(o.copy=!0)),q({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:o,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;q({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;q({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;q({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;q({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;q({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;q({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;q({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;q({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;q({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;q({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:t.doc.features,packageDevDependencies:n})}(t),function(e){const{atom:t,packageDevDependencies:n}=e;q({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:t.doc.features,packageDevDependencies:n})}(t)}async function V({projectDir:t,name:n,setProgress:o,count:i=1}){let s;const r=P(["npm-pick-versions",n,i]),c=e.join(t,".cache"),p=e.join(c,r+".json");return a.existsSync(p)?(o&&o(`Picking npm version of ${n} from cache ...`),s=JSON.parse(a.readFileSync(p,"utf8"))):(o&&o(`Picking npm version of ${n} ...`),s=await S({name:n,count:i}),a.mkdirSync(c,{recursive:!0}),a.writeFileSync(p,JSON.stringify(s),"utf8")),s}var U=async e=>{const{atom:t,packageDependencies:n,context:o,deploymentProjectTarget:i,setProgress:s,deploymentProject:a,yamlTarget:r}=e;if(!0!==i.enabled)return;const c=i.type;try{if("lib"===c)await(await import("./index.DG8TqL-1.js")).default({...e});else if("red"===c)await(await import("./index.CmMM-Ek9.js")).default({...e});else if("npm"===c)await(await import("./index.DHsBGWgK.js")).default({...e});else if("gcs"===c)await(await import("./index.UOds5XLl.js")).default({...e});else if("gitlab"===c)await(await import("./index.DI3yyTtl.js")).default({...e});else if("fnet-package"===c)await(await import("./index.Bfg4lyu-.js")).default({...e});else if("fnet-form"===c)await(await import("./index.Q-CYRcna.js")).default({...e});else if("fnet-node"===c)await(await import("./index.C2S9JYhS.js")).default({...e});else if("fnet-flow"===c)await(await import("./index.BuYxdKtK.js")).default({...e});else if("nextjs"===c)await(await import("./index.CDct_kkF.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("webos"===c)await(await import("./index.CMC8mlye.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("electron"===c)await(await import("./index.xd8c7XMr.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("docker"===c)await(await import("./index.D2N9YZmA.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("ios"===c)await(await import("./index.B5XE4ChJ.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("macos"===c)await(await import("./index.W6RYgypK.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else if("rust"===c)await(await import("./index.CzAV0S36.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0;else{if("pypi"!==c)return void console.warn(`No deployer found for type: ${c}`);await(await import("./index.C7saWH6d.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:n,context:o,yamlTarget:r}),a.isDirty=!0}}catch(e){throw console.error(`Error during deployment for type "${c}":`,e),e}},G={name:"ATOM",uri:"http://atom.org/bpmn",prefix:"atom",types:[{name:"AtomExtension",extends:["bpmn:BaseElement"],properties:[{name:"atom",type:"atom:Atom",isMany:!1}]},{name:"Atom",properties:[{name:"type",type:"String",isAttr:!0}]}]};function H(e,t){return e.filter(((e,n,o)=>o.map((e=>e[t])).indexOf(e[t])===n))}function Y(e){const{nodes:t,nodeIndex:n,root:o}=e,i=e.targetNodes||o.childs;i.forEach((t=>{const n="workflow"===t.type||"subworkflow"===t.type,o=!n&&t.childs.filter((e=>!e.virtual)).length>0;if(o&&(t.bpmn.type="bpmn:SubProcess"),n||o){const n=t.childs.filter((e=>!0!==e.module))[0];t.childs.filter((e=>!0===e.module)).forEach((n=>{const o=Z({...e,parent:t,bpmnType:"bpmn:IntermediateCatchEvent",type:"inter",definitions:[{type:"bpmn:SignalEventDefinition"}]});o.bpmn.edges=[{from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}));const o=t.childs.find((e=>"try"===e.name&&"tryexcept"===t.type)),s=t.childs.filter((e=>"except"===e.name&&"tryexcept"===t.type));o&&s.length&&s.forEach((n=>{const i=Z({location:t.childs.indexOf(n),...e,parent:t,bpmnType:"bpmn:BoundaryEvent",type:"boundary",attrs:{attachedToRef:o},definitions:[{type:"bpmn:ErrorEventDefinition"}]});i.bpmn.edges=[{from:i.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}));const a=t.childs.find((e=>"raise"===e.type));if(a){const n=Z({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:"ERROR",definitions:[{type:"bpmn:ErrorEventDefinition"}]});a.bpmn.edges=[{from:a.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"}]}if(n)if(t.bpmn.starts.length>1){const n=Z({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"}),o=Z({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch"});n.bpmn.edges=[{from:n.indexKey,to:o.indexKey,type:"bpmn:SequenceFlow"}],o.bpmn.edges=t.bpmn.starts.map((e=>({...e,from:o.indexKey})));const i=o.bpmn.edges.find((e=>!0===e.next));if(i){const n=Z({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:i.to});i.to=n.indexKey}}else{const o=Z({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"});o.bpmn.edges.push({from:o.indexKey,to:n.indexKey,type:"bpmn:SequenceFlow"})}t.childs.filter((e=>!0!==e.virtual&&e.bpmn.outside.length&&"bpmn:EndEvent"!==e.bpmn.type)).forEach((n=>{n.bpmn.outside.forEach((o=>{const s=i.indexOf(t),a=Z({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:o.to,location:s+1});n.bpmn.edges.push({from:n.indexKey,to:a.indexKey,type:"bpmn:SequenceFlow"})}))}));t.childs.filter((e=>!0!==e.virtual&&e.bpmn.edges.length>1)).forEach((n=>{const o=i.indexOf(n),s=Z({...e,parent:t,bpmnType:"bpmn:ExclusiveGateway",type:"switch",location:o+1});s.bpmn.edges=n.bpmn.edges.map((e=>({...e,from:s.indexKey}))),n.bpmn.edges=[{from:n.indexKey,to:s.indexKey,type:"bpmn:SequenceFlow"}],n.bpmn.outside=[]}))}Y({...e,targetNodes:t.childs})}))}function Z(e){const{parent:t,nodes:n,nodeIndex:o,bpmnType:i,type:s,name:a,outside:r,location:c,definitions:p,attrs:l}=e,d=t.childs.filter((e=>e.type===`v${s}`)).length,f={indexKey:`${t.indexKey}/_${s}${d}`,pathKey:`${t.pathKey}._${s}${d}`,type:`v${s}`,name:a,bpmn:{edges:[],outside:[],type:i,width:36,height:36,fill:"#c8e6c9",stroke:"#205022",definitions:p,attrs:l},virtual:!0,childs:[]};return t.childs.splice(c||0,0,f),n.push(f),o[f.indexKey]=f,f}function Q(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:a,diagrams:r,nodes:c}=e;!function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:a,nodes:r}=e,c=n.get("flowElements");n.$nodes=n.$nodes||[],t.childs.forEach((e=>{const t=i.create(e.bpmn.type,{id:`node.${e.pathKey}`,name:e.definition?.title||e.name});if(s[t.id]=t,t.$isNode=!0,t.$node=e,e.$flow=t,n.$nodes.push(t),c.push(t),e.bpmn.attrs){Object.keys(e.bpmn.attrs).forEach((n=>{"attachedToRef"===n&&t.set(n,e.bpmn.attrs[n].$flow)}))}if(e.bpmn.definitions){const n=e.bpmn.definitions.map((e=>{const t=i.create(e.type);return Object.keys(e.attrs||{}).forEach((n=>{t.set(n,e.attrs[n])})),t}));t.eventDefinitions=n}}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:a}=e,r=n.get("flowElements");n.$edges=n.$edges||[],t.childs.forEach((e=>{e.bpmn.edges.forEach((t=>{const o=e,c=a[t.to],p=`edge.${o.pathKey}_${c.pathKey}`;if(s[p])return;const l=s[`node.${o.pathKey}`],d=s[`node.${c.pathKey}`],f=i.create(t.type,{id:p,sourceRef:l,targetRef:d});s[f.id]=f,f.$is_edge=!0,l.get("outgoing").push(f),d.get("incoming").push(f),n.$edges.push({from:l,to:d,flow:f}),r.push(f)}))}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:a}=e,r=120,c=80,p=160,l=160,d=new A.graphlib.Graph;d.setDefaultEdgeLabel((()=>({}))),d.setGraph({rankdir:"TB",nodesep:r,ranksep:c,xranker:"longest-path"}),n.$nodes.forEach((e=>{d.setNode(e.id,{width:e.$node?.bpmn.width||r,height:e.$node?.bpmn.height||c,label:e.id})})),n.$edges.forEach((e=>{d.setEdge(e.from.id,e.to.id)})),A.layout(d),n.$nodes.forEach((e=>{const t=d.node(e.id);let n=t.width,s=t.height;const a=i.create("bpmndi:BPMNShape",{id:`shape.${e.id}`,bpmnElement:e,bounds:i.create("dc:Bounds",{x:p+t.x-t.width/2,y:l+t.y-t.height/2,width:n,height:s}),label:i.create("bpmndi:BPMNLabel")});e.$node.bpmn.fill&&a.set("bioc:fill",e.$node.bpmn.fill),e.$node.bpmn.stroke&&a.set("bioc:stroke",e.$node.bpmn.stroke);o.get("planeElement").push(a)})),n.$edges.forEach((e=>{const t=d.edge(e.from.id,e.to.id),n=i.create("bpmndi:BPMNEdge",{id:`edge.${e.from.id}_${e.to.id}`,bpmnElement:e.flow,label:i.create("bpmndi:BPMNLabel")});t.points.forEach((e=>{const t=i.create("dc:Point",{x:p+e.x,y:l+e.y});n.get("waypoint").push(t)}));o.get("planeElement").push(n)}))}(e),function(e){const{targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:o,moddle:i,elementIndex:s,nodeIndex:a,diagrams:r}=e,c=t.childs.filter((e=>"bpmn:SubProcess"===e.bpmn.type));c.forEach((t=>{const n=s[`node.${t.pathKey}`],o=i.create("bpmndi:BPMNDiagram",{id:`diagram_${t.pathKey}`});s[o.id]=o,r.push(o);const a=i.create("bpmndi:BPMNPlane",{id:`plane_${t.pathKey}`});s[a.id]=a,o.plane=a,a.bpmnElement=n,Q({...e,targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:a})}))}(e)}async function ee(e){const t=e.root,n=t.context.index,o=Object.keys(n).map((e=>n[e]));!function(e){const{nodes:t}=e;t.forEach((e=>{const t=[],n=[],o=i=>{i.context.next&&(t.push({from:i,to:i.context.next,type:"bpmn:SequenceFlow"}),i===e&&n.push({to:i.context.next,type:"bpmn:SequenceFlow",next:!0})),i.childs.forEach((t=>{i===e&&"switch"===e.type&&n.push({to:t,type:"bpmn:SequenceFlow"}),o(t)}))};o(e);const i=t.filter((t=>t.to.parent.indexKey===e.parent.indexKey)).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),s=t.filter((t=>t.to.parent.indexKey!==e.parent.indexKey&&!t.to.indexKey.startsWith(e.indexKey+"/"))).map((t=>({...t,from:e.indexKey,to:t.to.indexKey}))),a=n.map((e=>({...e,to:e.to.indexKey})));e.bpmn=e.bpmn||{},e.bpmn.edges=H(i,"to"),e.bpmn.outside=H(s,"to"),e.bpmn.starts=H(a,"to"),e.bpmn.type=function(e){return"call"===e.type?"bpmn:ServiceTask":"form"===e.type?"bpmn:UserTask":"return"===e.type?"bpmn:EndEvent":"bpmn:Task"}(e),e.bpmn.width=120,e.bpmn.height=80,"return"===e.type&&(e.bpmn.width=36,e.bpmn.height=36)}))}({nodes:o}),Y({nodes:o,nodeIndex:n,root:t});const i=new F({atom:G}),s={},a=i.create("bpmn:Definitions",{id:"definitions_0"});s[a.id]=a;for await(const e of t.childs){const r=a.get("rootElements"),c=a.get("diagrams"),p=i.create("bpmn:Process",{id:`process_${e.pathKey}`,documentation:[i.create("bpmn:Documentation",{text:`Atom Workflow - ${t.context.atom.name}`})]});s[p.id]=p,p.isExecutable=!0,r.push(p);const l=i.create("bpmndi:BPMNDiagram",{id:`diagram_${e.pathKey}`});s[l.id]=l,c.push(l);const d=i.create("bpmndi:BPMNPlane",{id:`plane_${e.pathKey}`});s[d.id]=d,l.plane=d,d.bpmnElement=p;Q({targetNode:e,targetFlowElementsContainer:p,targetPlaneElement:d,moddle:i,elementIndex:s,nodeIndex:n,nodes:o,diagrams:c})}return{diagramXML:(await i.toXML(a,{format:!0})).xml}}async function te(e={}){return await ee(w(e))}async function ne({node:e,initNode:t}){if(Reflect.has(e.definition,"modules")&&!Array.isArray(e.definition.modules)){const t=e.definition.modules;e.definition.modules=[],Object.keys(t).forEach((n=>{const o={...t[n]};"modules"===e.type&&(o.export=o.export||n),e.definition.modules.push({[n]:o})}))}const n=[],o=await K({data:e.definition,callback:(e,t,o)=>{const i=O({expression:e});if("m"===i?.processor){const e=o.slice(0,-1);e.push(i.statement);const s=e.join("_");return n.push({[s]:t}),[i.statement,`m::${s}`]}return[e,t]}});n.length>0&&(e.definition=o,e.definition.modules=e.definition.modules||[],e.definition.modules=e.definition.modules.concat(n)),e.hasModules=e.definition.modules?.length>0;for(let n=0;n<e.definition.modules?.length;n++){const o=e.definition.modules[n],i=Object.keys(o)[0],s={name:i,childs:[],parent:e,definition:o[i],module:!0,blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}}async function oe({node:e,transformExpression:t}){const n=e.context.transform;Reflect.has(n,"export")&&(n.export=await t(n.export)),Reflect.has(n,"return")&&(e.hasReturn=!0,n.return=await t(n.return)),n.hasOwnProperty("nextArgs")&&(e.hasNextArgs=!0,n.nextArgs=await t(n.nextArgs))}async function ie({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition),e.context.transform;for(const t of e.childs)t.context.transform=t.context.transform||w(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await o(t.definition.condition));await oe({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var se={hits:async function({node:e}){return!!e.definition.hasOwnProperty("switch")},init:async function({node:e,initNode:t}){e.type="switch";const n=e.definition.switch||[];if(!n.every((e=>e.hasOwnProperty("condition")||e.hasOwnProperty("default"))))throw new Error("Switch must have condition or default");if(0===n.filter((e=>e.hasOwnProperty("condition"))).length)throw new Error("Switch must have at least one condition");const o=n.filter((e=>e.hasOwnProperty("default")));if(o.length>1)throw new Error("Switch must have only one default");if(1===o.length&&!n[n.length-1].hasOwnProperty("default"))throw new Error("Switch default must be the last child");e.hasDefaultCondition=1===o.length,await ne({node:e,initNode:t}),e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0;for(let n=0;n<e.definition.switch.length;n++){let o=e.definition.switch[n],i=`${n}`;o.hasOwnProperty("default")&&(i="default",o=o.default);const s={name:o.condition||i,childs:[],parent:e,definition:o,index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=ie},resolve:ie};var ae={hits:async function({node:e}){return 1===Object.keys(e.definition).map((e=>O({expression:e}))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,n=Object.keys(t.definition).map((e=>O({expression:e}))),o=[],i=n.find((e=>"if"===e?.processor)),s=t.definition[i.expression];o.push({name:`${t.name}_if`,definition:s,processor:i}),delete t.definition[i.expression];const a=n.filter((e=>"elseif"===e?.processor));let r=0;for(const e of a){const n=t.definition[e.expression];o.push({name:`${t.name}_elseif_${r++}`,definition:n,processor:e}),delete t.definition[e.expression]}t.definition.switch=[];for(const e of o)t.definition.switch.push({condition:e.processor.statement,...e.definition});if(t.definition?.else){const e=t.definition.else;t.definition.switch.push({default:e}),delete t.definition.else}await se.init(e)}};async function re({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){if(e.context.transform=e.context.transform||w(e.definition),e.context.transform,e.context.try=e.childs.find((e=>"try"===e.name)),e.context.except=e.childs.find((e=>"except"===e.name)),e.context.except){const t=e.context.except;t.context.transform=t.context.transform||w(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await oe({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var ce={hits:async function({node:e}){return e.definition.hasOwnProperty("try")&&e.definition.hasOwnProperty("except")},init:async function({node:e,initNode:t}){if(e.type="tryexcept",await ne({node:e,initNode:t}),e.blockAutoJumpToParent=!1,e.blockAutoJumpToSibling=!0,e.definition.try){const n="try",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}if(e.definition.except){const n="except",o={name:n,childs:[],parent:e,definition:e.definition[n],index:e.childs.length,context:{}};e.childs.push(o),await t({node:o})}e.resolve=re},resolve:re};async function pe({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;for(let e=0;e<i.assign?.length;e++){let t=i.assign[e],n=Object.keys(t)[0],s=t[n],a={key:await o(n),value:await o(s)};i.assign[e]=a}await oe({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var le={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",await ne({node:e,initNode:t}),e.resolve=pe},resolve:pe};async function de({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);e.context.transform.for.in=await o(e.definition.for.in),await oe({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var fe={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",await ne({node:e,initNode:t}),e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[n,o]=[R(e.definition.for,t),M(e.definition.for,t)];e.definition.for=n,e.definition.for.steps=[{[`${e.name}_step`]:o}]}Array.isArray(e.definition.for.steps)||(e.definition.for.steps=[{[`${e.name}_step`]:e.definition.for.steps}]);for(let n=0;n<e.definition.for.steps.length;n++){const o=e.definition.for.steps[n],i=Object.keys(o)[0],s={name:i,childs:[],parent:e,definition:o[i],index:e.childs.length,context:{}};e.childs.push(s),await t({node:s})}e.resolve=de},resolve:de};var me={hits:async function({node:e}){return!1},init:async function({node:e,initNode:t}){},resolve:async function({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){}};async function ue({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const o=e.context.transform;o.raise=await n(o.raise),await t({node:e})}var he={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=ue},resolve:ue};async function ye({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||w(e.definition);const o=e.context.transform;e.hasReturn=!0,o.return=await n(o.return),await t({node:e})}var we={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=ye},resolve:ye};async function ge({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;if("function"===e.target?.atom?.doc?.type&&(i.call=await o(e.target.atom.name)),i.args&&(i.args=await o(i.args)),i.result){"string"==typeof i.result&&(i.result=[{[i.result]:"e::result"}]);for(let e=0;e<i.result?.length;e++){let t=i.result[e],n=Object.keys(t)[0],s=t[n],a={key:await o(n),value:await o(s)};i.result[e]=a}}const s=e.workflow.parent;i.import?e.context.lib=s.context.libs.find((e=>e.name===i.import)):e.context.lib=s.context.libs.find((e=>e.name===i.call)),await oe({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var xe={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call",await ne({node:e,initNode:t}),e.resolve=ge},resolve:ge};async function be({node:e,transformExpression:t}){e.context.next=e.childs[0],e.context.transform=e.context.transform||w(e.definition),await oe({node:e,transformExpression:t})}var ke={hits:async function({node:e}){return e.definition.hasOwnProperty("steps")},init:async function({node:e,initNode:t}){e.type||(e.type="steps");const n=e.definition.steps||[];for await(const o of n){const n=Object.keys(o)[0],i={name:n,childs:[],parent:e,definition:o[n],index:e.childs.length,context:{}};e.childs.push(i),await t({node:i})}e.resolve=be},resolve:be};async function ve({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;i.props&&(i.props=await o(i.props));const s=e.workflow.parent;e.context.lib=s.context.libs.find((e=>e.name===i.form)),await oe({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var je={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form",await ne({node:e,initNode:t}),e.resolve=ve},resolve:ve};async function _e({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){e.context.transform=e.context.transform||w(e.definition),await t({node:e})}var De={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=_e},resolve:_e};async function Ee({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition);const i=e.context.transform;i.next=await o(i.next),await oe({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Se={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Ee},resolve:Ee};async function Pe({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||w(e.definition),e.context.transform,await oe({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var $e={hits:async function({node:e}){return e.definition.hasOwnProperty("modules")},init:async function({node:e,initNode:t}){e.type="modules",await ne({node:e,initNode:t}),e.resolve=Pe},resolve:Pe};function Te({node:e}){const t=e.definition;if(!e.hasReturn)if("end"===t.next);else if("stop"===t.next);else if("none"===t.next);else if(t.next){let n=e.parent;for(;n.parent;){const o=n.childs.find((e=>e.name===t.next));if(o){e.context.next=o;break}n=n.parent}}else{if(!0===e.module)return;let t=e.parent,n=e.index+1;for(;t.parent&&(!t.blockAutoJumpToParent||!t.blockAutoJumpToSibling);)if(Reflect.has(t,"blockAutoJumpToParent")||Reflect.has(t,"blockAutoJumpToSibling")){if(t.blockAutoJumpToParent){const o=t.childs.find((e=>e.index===n));o&&(e.context.next=o);break}t.blockAutoJumpToParent||(n=t.index+1,t=t.parent)}else{const o=t.childs.find((e=>e.index===n));if(o){e.context.next=o;break}n=t.index+1,t=t.parent}}}class Ce{#e;#t;#n;#o;constructor({key:e,npm:t,master:n,extras:o}){this.#e=e,this.#t=t,this.#n=n,this.#o=o}hits({node:e}){return e.definition.hasOwnProperty(this.#e)}async init(e){const{node:t}=e,n=this.#e,o=t.definition,i=typeof o[n];if(o.call=`npm:${this.#t}`,o.args="object"!==i?{...o.args,[`${this.#n}`]:o[n]}:o[n],delete o[n],this.#o)for(const e in this.#o)o[e]=this.#o[e];console.log(`[npm-block] ${this.#e} --\x3e ${this.#t}`),await xe.init(e)}}function Ne(e){return new Ce(e)}class Fe{#i;#s;#a;#r;#c;#p;#l;#d;#f;#m;#u;#h;#y;#w;#g;#x;#b;#k;#v;#j;#_;#D=[];constructor(e){this.#i=new z,this.#s=e,this.#p=[],this.#l=[],this.#d={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#D.push(Ne({key:"config",npm:"@fnet/config",master:"name"})),this.#D.push(Ne({key:"yaml",npm:"@fnet/yaml",master:"file"})),this.#D.push(Ne({key:"prompt",npm:"@fnet/prompt",master:"message"})),this.#D.push(Ne({key:"html-link",npm:"@flownet/lib-load-browser-link-url",master:"src"})),this.#D.push(Ne({key:"html-script",npm:"@flownet/lib-load-browser-script-url",master:"src"})),this.#D.push(Ne({key:"http-server",npm:"@fnet/node-express",master:"server_port"})),this.#D.push(Ne({key:"shell",npm:"@fnet/shell-flow",master:"commands"})),this.#D.push(Ne({key:"list-files",npm:"@fnet/list-files",master:"pattern"})),this.#D.push(Ne({key:"up-list-files",npm:"@fnet/up-list-files",master:"pattern"})),this.#D.push(Ne({key:"auto-conda-env",npm:"@fnet/auto-conda-env",master:"envDir"})),this.#D.push(Ne({key:"ollama-chat",npm:"@fnet/ollama-chat",master:"model"})),this.#D.push(Ne({key:"ai",npm:"@fnet/ai",master:"prompt",extras:{subtype:"flow"}})),this.#D.push(Ne({key:"invoke",npm:"@fnet/invoke",master:"method",extras:{}})),this.#D.push(Ne({key:"fetch",npm:"@fnet/fetch",master:"url",extras:{}})),this.#D.push(Ne({key:"filemap",npm:"@fnet/filemap",master:"target",extras:{}})),this.#j={packageDependencies:this.#p,packageDevDependencies:this.#l,setProgress:this.setProgress.bind(this),context:this.#s,Atom:j,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#_={initNode:this.initNode.bind(this),cloneDeep:w,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Te,transformExpression:this.transformExpression.bind(this),transformValue:this.transformValue.bind(this)}}async _cache_set(e,t,n){this._redis_client&&await this._redis_client.SETEX(e,n||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async init(){this._redis_client=await async function(){if(!await b({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=x.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}(),this.#u=this.#s.buildId||k(),this.#j.buildId=this.#u,this.#g=this.#s.mode,this.#x=["all","deploy","build","file"].includes(this.#g),this.#b=["all","deploy","build"].includes(this.#g),this.#k=["all","deploy"].includes(this.#g),this.#v=["all","deploy","build","file","bpmn"].includes(this.#g),this.#y=this.#s.protocol,this.#h="BUILD:"+this.#u,this.#w=(await m({optional:!0,name:"atom",dir:this.#s.projectDir,tags:this.#s.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initWorkflow(),this.transformWorkflow({workflow:this.#r});const e=await this.initNodeTree({workflow:this.#r});await this.initNodeTreeIndex({root:e}),await this.initNodeCalls({root:e}),await this.initNodeCallLibs({root:e}),await this.initNodeForms({root:e}),await this.initNodeFormLibs({root:e}),await this.initEntryFiles({root:e,features:this.#a.doc.features}),await this.initFeaturesFromNodes({childs:e.childs,features:this.#a.doc.features}),await X(this.#j),await async function({atom:e,packageDependencies:t,packageDevDependencies:n,setProgress:o}){o("Initializing dependencies");const i=e.doc.dependencies||[];if(i.filter((e=>!e.dev)).forEach((e=>t.push(e))),i.filter((e=>e.dev)).forEach((e=>n.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 n="^18.2";o("Fetching React versions"),n=`^${(await E({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:n}),t.push({package:"react-dom",version:n}),"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"}),n.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&n.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),n.push({package:"@babel/core",version:"^7"}),n.push({package:"@rollup/plugin-commonjs",version:"^28"}),n.push({package:"@rollup/plugin-node-resolve",version:"^16"}),n.push({package:"@rollup/plugin-replace",version:"^6"}),n.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&n.push({package:"rollup-plugin-dts",version:"^6"}),n.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),n.push({package:"@rollup/plugin-alias",version:"^5"}),n.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(n.push({package:"@rollup/plugin-babel",version:"^6"}),n.push({package:"@babel/preset-env",version:"^7"}),n.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":n.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":n.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":n.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":n.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":n.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),n.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),e.doc.features.browsersync_enabled&&n.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(this.#j),await this.initAtomLibsAndDeps({libs:e.context.libs,packageDependencies:this.#p}),await this.resolveNodeTree({root:e}),this.#m=e}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e?.message||e}),e}}async initAuth(){this.#s.id&&(this.#f=await this.#i.init({config:this.#w}),this.#j.atomAccessToken=this.#f)}async initWorkflow(){const e=this.#s.id;this.#a=this.#s.project?.workflowAtom||await j.get({id:e}),this.#r="string"==typeof this.#a.doc.content?(await f({content:this.#a.doc.content,tags:this.#s.tags})).parsed:this.#a.doc.content;let t=this.#a.doc.bundleName;t=t||(this.#a.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#a.doc.bundleName=t,this.#a.type=this.#a.type||"workflow",this.#j.atom=this.#a,this.#a.doc.features=this.#a.doc.features||{}}#E(t){console.log("filePath",t),a.statSync(t).isDirectory()?(a.readdirSync(t).forEach((n=>{const o=e.join(t,n);this.#E(o)})),a.rmSync(t)):a.unlinkSync(t)}#S(t,n){const o=a.existsSync(t),i=o&&a.statSync(t);o&&i.isDirectory()?(a.mkdirSync(n,{recursive:!0}),a.readdirSync(t).forEach((o=>{this.#S(e.join(t,o),e.join(n,o))}))):a.copyFileSync(t,n)}async initWorkflowDir(){this.setProgress({message:"Initializing library directory."});const t=this.#s.projectDir,n=this.#s.coreDir;this.setProgress({message:"Cleaning project directory."});const o=I({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of o)a.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."}),a.existsSync(t)||a.mkdirSync(t,{recursive:!0});const i=e.join(t,"src");a.existsSync(i)||a.mkdirSync(i,{recursive:!0});const s=e.join(i,"core");this.#S(n,s);const r=e.join(i,"default","blocks");a.existsSync(r)||a.mkdirSync(r,{recursive:!0})}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#s.templateDir;this.#c=y.configure(e,{watch:!1,dev:!0}),this.#j.njEnv=this.#c}transformWorkflow({workflow:e}){for(const t of Object.values(e))t.steps=t.steps||[],t.steps=t.steps.filter((e=>Object.keys(e).length>0)),t.steps=t.steps.map((e=>this.transformStep({step:e})))}transformStep({step:e}){if(Array.isArray(e))throw new Error("Step must be an object.");const[t,n]=Object.entries(e)[0];if(n.hasOwnProperty("onerror")){const{onerror:o,...i}=n;e[t]={try:i,except:o}}if(e[t].hasOwnProperty("steps")){const n=e[t].steps;if(!Array.isArray(n))throw new Error("Steps must be an array.");e[t].steps=n.map((e=>this.transformStep({step:e})))}return e}async initNodeTree({workflow:e}){const t=Object.keys(e),n={definition:e,name:void 0,type:"root",parent:void 0,childs:[],blockAutoJumpToParent:!0,blockAutoJumpToSibling:!0,index:0,depth:0,context:{libs:[],atom:this.#a}};t.forEach((t=>{const o={name:t,type:"main"===t?"workflow":"subworkflow",childs:[],parent:n,definition:e[t],index:n.childs.length,depth:n.depth+1,context:{},blockAutoJumpToParent:!0,blockAutoJumpToSibling:!1};n.childs.push(o)}));for await(const e of n.childs)await this.initNode({node:e});return n}async initNode({node:e}){const t={...this.#_,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await ce.hits(t))await ce.init(t);else if(await fe.hits(t))await fe.init(t);else if(await se.hits(t))await se.init(t);else if(await ae.hits(t))await ae.init(t);else if(await me.hits(t))await me.init(t);else if(await le.hits(t))await le.init(t);else if(await he.hits(t))await he.init(t);else if(await xe.hits(t))await xe.init(t);else if(this.#D.find((e=>e.hits(t))))await this.#D.find((e=>e.hits(t))).init(t);else if(await je.hits(t))await je.init(t);else if(await De.hits(t))await De.init(t);else if(await ke.hits(t))await ke.init(t);else if(await Se.hits(t))await Se.init(t);else if(await $e.hits(t))await $e.init(t);else{if(!await we.hits(t))throw new Error("Undefined step type.");await we.init(t)}}async initNodeTreeIndex({root:e}){const t={};e.indexKey="/";for await(const n of e.childs)await this.initNodeIndex({node:n,index:t});return e.context.index=t,t}async initNodeIndex({node:t,index:n}){const o=e.join(t.parent.indexKey,t.name);t.indexKey=o,n[o]=t;const i=[];let s=t;for(;s?.parent;)i.push(s.index),s=s.parent;i.reverse(),t.codeKey=`B_${i.join("_")}_${t.type}`,t.pathKey=`${i.join(".")}`,t.typeId=k();for await(const e of t.childs)await this.initNodeIndex({node:e,index:n})}async initNodeCalls({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"call"===o.type&&n.push(o)}return e.context.calls=n,n}async initNodeCallLibs({root:e}){const t=[],n=e.context.calls;for await(const e of n){const n=e.definition.import||e.definition.call,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom",definition:e.definition},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.callLibs=t,e.context.libs=[...e.context.libs,...t],t}async findNodeCallTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.call,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeCallTarget({refNode:e,curNode:t.parent})}async initNodeForms({root:e}){const t=e.context.index,n=[];for await(const e of Object.keys(t)){const o=t[e];"form"===o.type&&n.push(o)}return e.context.forms=n,n}async initNodeFormLibs({root:e}){const t=[],n=e.context.forms;for await(const e of n){const n=e.definition.import||e.definition.form,o=await this.findNodeCallTarget({refNode:e,curNode:e.parent})||{name:n,type:"atom"},i=t.find((e=>e.name===o.name&&e.type===o.type));i||t.push(o),e.target=i||o}return e.context.formLibs=t,e.context.libs=[...e.context.libs,...t],t}async initFeaturesFromNodes({childs:e,features:t}){for await(const n of e)"form"!==n.type||Reflect.has(t,"form")||(t.form=!0),await this.initFeaturesFromNodes({childs:n.childs,features:t})}async initEntryFiles({root:e,features:t}){for await(const n of e.childs){let e;if("main"===n.name)e="index.js";else if("cli"===n.name)e="cli.js";else if("app"===n.name)e="app.js";else{if("api"!==n.name)continue;e="api.js"}t[`${n.name}_default_entry_file`]=e,n.entryFile=e}}async findNodeFormTarget({refNode:e,curNode:t}){if(!t)return;const n=e.definition.form,o=t.childs.find((e=>e.name===n&&"subworkflow"===e.type));return o||await this.findNodeFormTarget({refNode:e,curNode:t.parent})}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const n=e.filter((e=>"atom"===e.type));for(let e=0;e<n.length;e++){const o=n[e],i=await this.findAtomLibrary({url:o.name,libRef:o});o.atom=i;const s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const n=t.find((t=>t.package===e.package));n?"string"==typeof e.path?(n.path||[]).some((t=>t===e.path))||(n.path=n.path||[],n.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(n.path||[]).some((t=>t===e))||(n.path=n.path||[],n.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:t,libRef:n}){const o=N({url:t});if(!o)throw new Error(`Invalid package name: ${t}`);if(o.protocol||(o.protocol=this.#y),"ac:"===o.protocol){const e=o.pathname.split("/");if(1===e.length)return await j.first({where:{name:t,parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===e.length){const t=await j.first({where:{name:e[0],parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"folder"}});return await j.first({where:{name:e[1],parent_id:t.id,type:"workflow.lib"}})}}else{if("local:"===o.protocol){const t=e.resolve(this.#s.projectSrcDir,`${o.pathname}.js`),n=[],i=(await D({file:t,recursive:!0})).all;for await(const e of i){if("npm"!==e.type)continue;if(n.find((t=>t.package===e.package)))continue;const t=await V({name:e.package,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});n.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return{name:o.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:n},protocol:o.protocol}}if("npm:"===o.protocol){const e=await V({name:o.pathname,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});return{name:o.pathname,doc:{type:"workflow.lib",subtype:"flow"===n?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:o.pathname,version:e.minorRange,type:"npm"}]},protocol:o.protocol}}if("use:"===o.protocol){return{name:o.pathname,doc:{type:"function",dependencies:[]},protocol:o.protocol}}}}async resolveNodeTree({root:e}){for await(const t of e.childs)await this.resolveTypeWorkflow({node:t})}async resolveTypeWorkflow({node:e}){e.context.transform=e.context.transform||w(e.definition);const t=e.context.transform;for(let e=0;e<t.params?.length;e++){const n=t.params[e];if("string"==typeof n)t.params[e]={key:n,hasDefault:!1};else{const o=Object.keys(n)[0];t.params[e]={key:o,hasDefault:!0,default:n[o],type:typeof n[o]}}}e.context.next=e.childs[0];for await(const t of e.childs)await this.resolveType({node:t})}async resolveType({node:e}){const t={...this.#_,node:e};"function"==typeof e.resolve&&await e.resolve(t);for await(const t of e.childs)await this.resolveType({node:t})}async resolveTypeCommon({node:e}){const t=e.context.transform;t.hasOwnProperty("operation")&&(t.operation=await this.transformExpression(t.operation)),t.hasOwnProperty("page")&&(t.page=await this.transformExpression(t.page)),t.hasOwnProperty("print")&&(t.print=await this.transformExpression(t.print)),t.hasOwnProperty("sleep")&&(t.sleep=await this.transformExpression(t.sleep)),t.hasOwnProperty("assert")&&(t.assert=await this.transformExpression(t.assert))}async createAtomLibFiles({root:t}){await this.setProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const n=t.context.libs.filter((e=>"atom"===e.type));for(let t=0;t<n.length;t++){const o=n[t].atom,i=this.#s.projectDir;if("local:"===o.protocol){const t=e.resolve(this.#s.projectSrcDir,`${o.fileName||o.name}.js`),n=e.relative(`${this.#s.projectDir}/src/default/blocks`,t);if(!a.existsSync(t)){a.mkdirSync(e.dirname(t),{recursive:!0});let n="export default async (args)=>{\n";n+="}",a.writeFileSync(t,n,"utf8")}o.relativePath=n.split(e.sep).join("/"),this.#a.typesDir=`./types/${e.basename(i)}/src`}else if("npm:"===o.protocol)o.relativePath=o.name;else if("use:"===o.protocol);else{const t=`${i}/src/libs/${o.id}.js`,n=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;a.writeFileSync(e.normalize(t),n.content,"utf8")}}}async createEngine({root:t}){await this.setProgress({message:"Creating engine file."});const n=this.#s.templateDir,o=y.compile(a.readFileSync(e.resolve(n,"src/default/engine.js.njk"),"utf8"),this.#c);for(let n=0;n<t.childs.length;n++){const i=t.childs[n];if(!i.entryFile)continue;const s=o.render({flow:i,ui:{package:"@fnet/react-app"}}),r=this.#s.projectDir,c=e.resolve(r,`src/default/${i.entryFile}`);a.writeFileSync(c,s,"utf8")}}async createNodeTree({root:e}){await this.setProgress({message:"Creating block files."});for await(const t of e.childs)await this.createTypeWorkflow({node:t})}async createTypeWorkflow({node:t}){const n=this.#s.templateDir,o=y.compile(a.readFileSync(e.resolve(n,"src/default/workflow.js.njk"),"utf8"),this.#c).render(t),i=this.#s.projectDir,s=e.resolve(i,`src/default/${t.codeKey}.js`);a.writeFileSync(s,o,"utf8");for await(const e of t.childs)await this.createType({node:e})}async createType({node:e}){switch(e.type){case"assign":case"steps":case"return":case"call":case"form":case"raise":case"switch":case"jump":case"tryexcept":case"for":case"operation":case"modules":this.createBlockFromTemplate({node:e})}for await(const t of e.childs)await this.createType({node:t})}createBlockFromTemplate({node:e}){const t=this.getBlockTemplate({node:e});e.context.render=t.render(e),this.createStepFile({node:e})}getBlockTemplate({node:t}){let n=this.#d[t.type];if(n)return n;const o=this.#s.templateDir;return n=y.compile(a.readFileSync(e.resolve(o,`src/default/blocks/${t.type}.js.njk`),"utf8"),this.#c),this.#d[t.type]=n,n}createStepFile({node:t}){const n=this.#s.projectDir,o=`${t.codeKey}.js`,i=e.resolve(n,`src/default/blocks/${o}`);a.writeFileSync(i,t.context.render,"utf8"),t.context.fileName=o,t.context.filePath=i}async transformExpression(e){let t=await this.transformValue(e);return t=JSON.stringify(t),t=this.replaceSpecialPattern(t),t}async transformValue(e){if(Array.isArray(e))for(let t=0;t<e.length;t++)e[t]=await this.transformValue(e[t]);else if(g(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++){const o=t[n],i=O({expression:o});if(i)if("e"===i.processor){const t=e[o].replace(/(\r\n|\n|\r)/g,"");e[i.statement]=`$::${t}::`,delete e[o]}else e[o]=await this.transformValue(e[o]);else e[o]=await this.transformValue(e[o])}}else if("string"==typeof e){const t=O({expression:e});if(t){const{processor:n,statement:o}=t;switch(n){case"v":e=`$::v.${o}::`;break;case"e":e=`$::${o}::`;break;case"m":e=`$::c.module['${o}']::`;break;case"fm":e=`$::flow.getModule('${o}')::`;break;case"f":e=`$::c.form.${o}::`;break;case"for":e=`$::caller.for.${o}::`}}}return e}replaceSpecialPattern(e){return e.replace(/"\$::(.*?)::"/g,"$1")}replaceExpressionLegacy(e){return e.replaceAll(/(?<outer>"\${(?<inner>[^{]*)}")/g,"$2")}async createProjectYaml(){const t="fnet.yaml",n=`Creating ${t}`;await this.setProgress({message:n});const{content:o,...i}=this.#a.doc,s={content:c.stringify(i)},r=this.#s.templateDir,p=y.compile(a.readFileSync(e.resolve(r,`${t}.njk`),"utf8"),this.#c).render(s),l=this.#s.projectDir,d=e.resolve(l,`${t}`);a.writeFileSync(d,p,"utf8")}async createProjectMainYaml(){const t="flow.main.yaml",n=`Creating ${t}`;await this.setProgress({message:n});const o={content:c.stringify(this.#r)},i=this.#s.templateDir,s=y.compile(a.readFileSync(e.resolve(i,`${t}.njk`),"utf8"),this.#c).render(o),r=this.#s.projectDir,p=e.resolve(r,`${t}`);a.writeFileSync(p,s,"utf8")}async runPrettifier(){const t=this.#s.projectDir;if(L("bun")){const n=await d("bunx prettier --write .",{cwd:e.resolve(t,"src"),env:process.env});if(0!==n.code)throw new Error(n.stderr)}else{const n=await d("npx prettier --write .",{cwd:e.resolve(t,"src"),env:process.env});if(0!==n.code)throw new Error(n.stderr)}}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#s.project?.devops){const e=[this.#s.project?.devops];for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&await n.save()}}else if(this.#a.id){const e=await j.list({type:"workflow.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let n=e[t];await this.deployProject({deploymentProject:n}),!0===n.isDirty&&(n=await j.update(n,{id:n.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:n}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const o=Object.keys(t.doc||{}),i=n||{};for(let e=0;e<o.length;e++){const n=t.doc[o[e]];n.name=o[e];const s=i.get(o[e]);await U({...this.#j,deploymentProject:t,deploymentProjectTarget:n,yamlTarget:s})}}async registerToPackageManager(e){const{target:t,packageJSON:n}=e;if(!this.#s.id)return;let o=await j.first({name:t.params.name,parent_id:this.#w.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await j.update(o,{id:o.id})):o=await j.create({parent_id:this.#w.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:n.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(B.blue(t)),await this._cache_set(this.#h,{status:"IN_PROGRESS",message:t})}async build(){if(this.#v&&!this.#x)return await this.createNetwork();try{const t=this.#v?await te({root:this.#m}):void 0;if(this.#x){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#v){let n=this.#s.project?.projectDir||this.#s.projectDir;n=e.resolve(n,"fnet"),a.existsSync(n)&&a.writeFileSync(e.resolve(n,"flow.bpmn"),t.diagramXML,"utf8")}await this.createAtomLibFiles({root:this.#m}),await this.createEngine({root:this.#m}),await this.createNodeTree({root:this.#m}),await this.createProjectYaml(),await async function({atom:t,context:n,setProgress:o,Atom:i}){const s="readme.md",r=`Creating ${s}`;if(await o({message:r}),n.project?.readme){const t=n.projectDir,o={content:n.project.readme.doc.content},i=e.resolve(n.project.projectDir,"fnet/how-to.md");if(a.existsSync(i)){const e=a.readFileSync(i,"utf8");o.howto=e}const r=e.resolve(n.project.projectDir,"fnet/input.yaml");if(a.existsSync(r)){const e=await f({file:r,tags:n.tags});o.input=e.content}const c=n.templateCommonDir,p=y.compile(a.readFileSync(e.resolve(c,`${s}.njk`),"utf8"),y.configure(c)).render(o),l=e.resolve(t,`${s}`);a.writeFileSync(l,p,"utf8")}else if(t.id){const o=await i.first({type:"wiki",parent_id:t.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:r,...c}=o.doc,p={content:r},l=n.templateCommonDir,d=y.compile(a.readFileSync(e.resolve(l,`${s}.njk`),"utf8"),y.configure(l)).render(p),f=n.projectDir,m=e.resolve(f,`${s}`);a.writeFileSync(m,d,"utf8")}}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){await n({message:"Creating tsconfig.json."});const s={atom:t,packageDependencies:i},r=o.templateCommonDir,c=y.compile(a.readFileSync(e.resolve(r,"tsconfig.json.njk"),"utf8"),y.configure(r)).render(s),p=o.projectDir,l=e.resolve(p,"tsconfig.json");a.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){await n({message:"Creating .gitignore"});const s={atom:t,packageDependencies:i},r=o.templateCommonDir,c=y.compile(a.readFileSync(e.resolve(r,".gitignore.njk"),"utf8"),y.configure(r)).render(s),p=o.projectDir,l=e.resolve(p,".gitignore");a.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:t,setProgress:n,context:o,njEnv:i}){if(!0!==t.doc.features.cli.enabled)return;await n({message:"Creating yargs."});let s={};if(s=t.doc.input?t.doc.input:{type:"object",properties:{},required:[]},t.doc.features.cli.fargs&&!1!==t.doc.features.cli.fargs?.enabled){const e=t.doc.features.cli.fargs,n={type:"string",description:"Config name to load args",hidden:!1},o={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(e,"default")&&(n.default=e.default),s.properties&&(s.properties.fargs=n,s.properties.ftag=o)}const r={options:s,imports:[],atom:t},c=o.templateDir,p=y.compile(a.readFileSync(e.resolve(c,"src/default/to.args.js.njk"),"utf8"),i).render(r),l=o.projectDir,d=e.resolve(l,"src/default/to.args.js");a.writeFileSync(d,p,"utf8");const f=new $({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});C(f);const m=f.compile(s),u=T(f,m);a.writeFileSync(e.resolve(l,"src/default/validate_input.js"),u,"utf8")}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){if(!0!==t.doc.features.cli.enabled)return;await n({message:"Creating cli."});const s={atom:t,packageDependencies:i},r=o.templateDir,c=e.resolve(o.projectDir,"src/cli");a.existsSync(c)||a.mkdirSync(c,{recursive:!0}),await h({pattern:["index.js.njk"],dir:e.resolve(r,"src/cli"),outDir:c,context:s})}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){if(!0!==t.doc.features.app.enabled)return;await n({message:"Creating app folder"});const s={atom:t,packageDependencies:i,ts:Date.now()},r=o.templateDir,c=e.resolve(o.projectDir,"src/app");a.existsSync(c)||a.mkdirSync(c,{recursive:!0});let p=["index.js.njk"];!1!==t.doc.features.app.html&&p.push("index.html.njk"),await h({pattern:p,dir:e.resolve(r,"src/app"),outDir:c,context:s})}(this.#j),await async function({atom:t,setProgress:n,context:o,packageDependencies:i}){await n({message:"Creating rollup file."});const s={atom:t,packageDependencies:i},r=e.resolve(o.projectDir,"src","default/index.js");if(!a.existsSync(r))throw new Error(`Entry file not found: ${r}`);const c=(await D({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),p=t.doc.features.rollup_output,l=Object.keys(p);for(let e=0;e<l.length;e++){const t=p[l[e]];if(!0===t.browser&&c.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(c.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<c.length;e++){const n=c[e];t.alias.entries[n]=`node:${n}`,t.alias.entries[`node:${n}`]=n}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(c)}}const d=o.templateCommonDir;let f=y.compile(a.readFileSync(e.resolve(d,"rollup.config.mjs.njk"),"utf8"),y.configure(d)).render(s);const m=o.projectDir;let u=e.resolve(m,"rollup.config.mjs");a.writeFileSync(u,f,"utf8")}(this.#j),await async function({atom:t,context:n,packageDependencies:o,packageDevDependencies:i,setProgress:s}){await s({message:"Creating package.json."}),o.filter((e=>!0===e.dev)).forEach((e=>{i.find((t=>t.package===e.package))||i.push(e);const t=o.findIndex((t=>t.package===e.package));o.splice(t,1)}));const r=o.find((e=>"react"===e.package)),c=o.find((e=>"react-dom"===e.package));r&&!c?o.push({package:"react-dom",version:r.version}):r&&c&&(c.version=r.version),r&&t.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const p=[];!0===t.doc.features.app.enabled&&p.push({file:e.resolve(n.projectDir,"src/app/index.js"),dev:!1!==t.doc.features.app.dev}),!0===t.doc.features.cli.enabled&&p.push({file:e.resolve(n.projectDir,"src/cli/index.js"),dev:!1!==t.doc.features.cli.dev});for await(const e of p){const t=e.file;if(!a.existsSync(t))throw new Error(`App file not found: ${t}`);const r=(await D({file:t,recursive:!0})).all;for await(const t of r){if("npm"!==t.type)continue;if(o.find((e=>e.package===t.package)))continue;if(i.find((e=>e.package===t.package)))continue;const a=await V({name:t.package,projectDir:n.projectDir,setProgress:s});(!0===e.dev?i:o).push({package:t.package,subpath:t.subpath,version:a.minorRange,type:"npm"})}}const l={atom:t,packageDependencies:o,packageDevDependencies:i},d=n.templateCommonDir,f=y.compile(a.readFileSync(e.resolve(d,"package.json.njk"),"utf8"),y.configure(d)).render(l),m=n.projectDir,u=e.resolve(m,"package.json");a.writeFileSync(u,f,"utf8");const h=e.resolve(n.project.projectDir,"fnet");if(a.existsSync(h)){const t=e.resolve(n.projectDir,"fnet");a.existsSync(t)||a.mkdirSync(t);const o=a.readdirSync(h);for(const n of o){const o=e.resolve(h,n);if(!a.lstatSync(o).isFile())continue;const i=e.resolve(t,n);a.copyFileSync(o,i)}}}(this.#j),await async function({setProgress:t,context:n}){const o=n.projectDir;await t({message:"Prettifiying source files."});let i=e.join("src","**","*");await u({commands:{steps:[`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`],wdir:o}})}(this.#j),await async function({atom:e,setProgress:t,context:n}){if(!e.doc.features.dts_enabled)return;const o=n.projectDir;if(await t({message:"Creating .d.ts"}),L("bun")){if(0!==(await d("bunx tsc",{cwd:o})).code)throw new Error("Couldnt create .d.ts files.")}else if(0!==(await d("npx tsc",{cwd:o})).code)throw new Error("Couldnt create .d.ts files.")}(this.#j),this.#b&&(await async function({setProgress:e,atom:t,context:n}){const o=n.projectDir;if(await e({message:"Installing npm packages."}),L("bun")){if(0!==(await d(`bun install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}else if(0!==(await d(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}(this.#j),await async function({setProgress:e,context:t}){const n=t.projectDir;if(await e({message:"Building main project."}),0!==(await d("npm run build",{cwd:n})).code)throw new Error("Couldnt build project.")}(this.#j),this.#k&&await this.deploy())}await this._cache_set(this.#h,{status:"COMPLETED",data:{network:t}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await te({root:this.#m});await this._cache_set(this.#h,{status:"COMPLETED",data:{...e}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}}const Ae=e.dirname(o(import.meta.url)),Oe=process.cwd();m({name:["redis"],dir:Oe,optional:!0});const Be=function({baseDir:t}){let n=t=t||J;for(;n!==e.parse(n).root;){const t=e.join(n,"node_modules");if(a.existsSync(t))return t;n=e.dirname(n)}return null}({baseDir:Ae}),Ie="win32"===process.platform?";":":";Be&&(process.env.PATH=`${e.join(Be,"/.bin")}${Ie}${process.env.PATH}`);let Ke=p(process.argv.slice(2)).command("create","Initialize flow node project",(e=>e.option("name",{type:"string"}).option("vscode",{type:"boolean",default:!0,alias:"vs"}).option("runtime",{type:"string",default:"node",choices:["node"]})),(async t=>{try{const n=e.resolve(Be,"./@fnet/cli-project-flow/dist/template/project"),o=e.resolve(Oe,t.name);a.existsSync(o)||a.mkdirSync(o),await h({dir:n,outDir:o,context:t,copyUnmatchedAlso:!0,platform:s.platform()});let i=await d("fnet build",{cwd:o});if(0!==i.code)throw new Error("Failed to build project.");if(L("git")&&(i=await d("git init --initial-branch=main",{cwd:o}),0!==i.code))throw new Error("Failed to initialize git.");if(L("code")&&t.vscode&&(i=await d(`cd ${o} && code .`),0!==i.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async t=>{try{const n=e.resolve(Be,"@fnet/cli-project-flow/dist/template/project"),o=process.cwd(),i=await Me(t);if(t.update){if(await h({dir:n,outDir:o,context:{name:i.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0,platform:s.platform()}),0!==(await d("fnet build",{cwd:o})).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await Me(e),n=new Fe(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flownet project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Me({...e,mode:"all"}),n=new Fe(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Me({...e,mode:"file"}),n=new Fe(t);await n.init(),await n.build(),console.log("Building workflow succeeded!"),process.exit(0)}catch(e){console.error("Building workflow failed!",e.message),process.exit(1)}}));function Re(e,{name:t,bin:n,preArgs:o=[]}){return e.command(`${t||n} [commands..]`,`${n} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Me(e),{projectDir:s}=t,a=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,r=process.argv.slice(3).map(a);i(n,[...o,...r],{cwd:s,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Me(t){if(t.id){return{id:t.id,buildId:t.buildId,mode:t.mode,protocol:t.protocol||"ac:",projectDir:e.resolve(Oe,`./.output/${t.id}`),templateDir:e.resolve(Be,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:e.resolve(Be,"./@fnet/cli-project-common/dist/template/default"),coreDir:e.resolve(Be,"./@fnet/cli-project-flow/dist/template/core"),tags:t.ftag}}{const n=await async function({tags:t}){const n=e.resolve(Oe,"fnet.yaml");if(!a.existsSync(n))throw new Error("fnet.yaml file not found in current directory.");const{raw:o,parsed:i}=await f({file:n,tags:t}),s=e.dirname(n);let r;if("object"==typeof i.flows)r=i.flows;else{let n="flow.main.yaml";a.existsSync(e.join(s,"fnet","flows.yaml"))&&(n=e.join("fnet","flows.yaml"));const o=i.main||n;let c=e.resolve(s,o);if(a.existsSync(c)){const{parsed:e}=await f({file:c,tags:t});r=e}else r={main:{steps:[]}}}const p={workflowAtom:{doc:{...i,content:r}},projectDir:s,projectFilePath:n,projectFileContent:o,projectFileParsed:i};let l=e.resolve(s,"fnet/targets.yaml");if(!a.existsSync(l)&&(l=e.resolve(s,"flow.devops.yaml"),a.existsSync(l))){const t=e.resolve(s,"fnet");a.existsSync(t)||a.mkdirSync(t),a.copyFileSync(l,e.resolve(s,"fnet/targets.yaml")),a.unlinkSync(l)}if(a.existsSync(l)){const{raw:e,parsed:n}=await f({file:l,tags:t}),o=c.parseDocument(e);p.devops={filePath:l,fileContent:e,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{a.writeFileSync(p.devops.filePath,o.toString())}}}const d=e.resolve(s,"readme.md");if(a.existsSync(d)){const e=a.readFileSync(d,"utf8");p.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return p}({tags:t.ftag});return{buildId:t.buildId,mode:t.mode,protocol:t.protocol||"local:",templateDir:e.resolve(Be,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:e.resolve(Be,"./@fnet/cli-project-common/dist/template/default"),coreDir:e.resolve(Be,"./@fnet/cli-project-flow/dist/template/core"),projectDir:e.resolve(n.projectDir,"./.workspace"),projectSrcDir:e.resolve(n.projectDir,"./src"),project:n,tags:t.ftag}}}Ke=Ke.command("input [name]","Create or modify an input config file",(e=>e.positional("name",{type:"string",demandOption:!1}).help(!1).version(!1)),(async t=>{try{const n=await Me(t),{project:o}=n,{projectDir:i,projectFileParsed:s}=o,r=s.input;if(!r)throw new Error("Config schema not found in project file.");if(!Reflect.has(t,"name")){const{inputName:e}=await l({type:"input",name:"inputName",message:"Input name:",initial:"dev"});t.name=e}const c=e.resolve(i,".fnet");a.existsSync(c)||a.mkdirSync(c);const p=e.resolve(c,`${t.name}.fnet`),d=a.existsSync(p),f=(await import("@fnet/object-from-schema")).default,m=await f({schema:r,format:"yaml",ref:d?p:void 0});a.writeFileSync(p,m)}catch(e){console.error(e.message),process.exit(1)}})),Ke=Re(Ke,{bin:"npm"}),Ke=Re(Ke,{bin:"node"}),Ke=Re(Ke,{bin:"bun"}),Ke=Re(Ke,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Ke=Re(Ke,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Ke=Re(Ke,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Ke=Re(Ke,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Ke=Re(Ke,{bin:"npx"}),Ke=Re(Ke,{bin:"cdk"}),Ke=Re(Ke,{bin:"aws"}),Ke=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Me(e),{projectDir:o}=t,s=e.config,r=await m({name:s,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),c=r?.data?.env||void 0,p=e.command,l=process.argv.slice(5);i(p,[...n,...l],{cwd:a.existsSync(o)?o:Oe,stdio:"inherit",shell:!0,env:{...process.env,...c}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(Ke,{name:"with"}),Ke=function(e,{name:t,preArgs:n=[]}){return e.command(`${t} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const t=await Me(e),{project:n}=t,{projectFileParsed:o}=n,i=o.commands;if(!i)throw new Error("Commands not found in project file.");const s=i[e.group];if(!s)throw new Error(`Command group '${e.group}' not found in project file.`);await u({commands:s})}catch(e){console.error(e.message),process.exit(1)}}))}(Ke,{name:"run"}),Ke.demandCommand(1,"You need at least one command before moving on").help().argv;export{L as w};
@@ -0,0 +1 @@
1
+ import r from"semver";import e from"@fnet/config";import o from"node:fs";import t from"@fnet/shelljs";import n from"form-data";async function i({setProgress:i,context:s,deploymentProject:a,deploymentProjectTarget:f,yamlTarget:c}){await i({message:"Deploying it as fnet flow."});const{file:p,data:w}=await e({name:f.config||"fnet-flow",dir:s.project.projectDir,tags:s.tags});if(!w.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${p}`);if(!w.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${p}`);if(!w.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${p}`);const d=`${w.env.ATOM_API_URL}/v1/auth/token`,m=w.env.ATOM_API_USERNAME,l=w.env.ATOM_API_PASSWORD,A=await fetch(d,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:m,password:l})});if(!A.ok)throw new Error(`Failed to fetch token: ${A.statusText}`);const h=await A.json(),_=h?.access_token;if(!_)throw new Error(`Invalid access_token from ${d}`);a.isDirty=!0;const u=r.inc(f.version,"patch");f.params.version=u,f.version=u,c.set("version",u);const v=`${w.env.ATOM_API_URL}/v1/service/fnet-flow/publish`,T=await fetch(v,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${_}`},body:JSON.stringify({name:f.params.name,version:f.params.version,docs:f.params.docs,configs:f.params.configs})});if(!T.ok)throw new Error(`Error publishing fnet flow: ${T.statusText}`);const E=await T.json();if(E?.error)throw new Error("Error publishing fnet flow.");const O=E?.upload.id;let P="fnet-dir-zipper";P+=` --sourceDir='${s.project.projectDir}'`,P+=" --pattern=**/*",P+=" --stdout_format=json";const g=await t(P);if(0!==g.code)throw new Error(g.stderr);const S=JSON.parse(g.stdout).path;let M=new n;M.append("file",o.createReadStream(S));const $=await fetch(`${w.env.ATOM_API_URL}/v1/service/upload/single/${O}`,{method:"POST",headers:{...M.getHeaders(),Authorization:`Bearer ${_}`},body:M});if(!$.ok)throw new Error(`Error uploading fnet flow: ${$.statusText}`);const j=await $.json();if(j?.error)throw new Error("Error uploading fnet flow.")}export{i as default};
@@ -0,0 +1 @@
1
+ import e from"semver";import r from"@fnet/config";import o from"node:fs";import t from"@fnet/shelljs";import n from"form-data";async function i({setProgress:i,context:s,deploymentProject:a,deploymentProjectTarget:d,yamlTarget:c}){await i({message:"Deploying it as fnet node."});const{file:f,data:p}=await r({name:d.config||"fnet-node",dir:s.project.projectDir,tags:s.tags});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${f}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${f}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${f}`);const m=`${p.env.ATOM_API_URL}/v1/auth/token`,w=p.env.ATOM_API_USERNAME,A=p.env.ATOM_API_PASSWORD,h=await fetch(m,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:w,password:A})});if(!h.ok)throw new Error(`Failed to fetch token: ${h.statusText}`);const _=await h.json(),l=_?.access_token;if(!l)throw new Error(`Invalid access_token from ${m}`);a.isDirty=!0;const u=e.inc(d.version,"patch");d.params.version=u,d.version=u,c.set("version",u);const v=`${p.env.ATOM_API_URL}/v1/service/fnet-node/publish`,T=await fetch(v,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${l}`},body:JSON.stringify({name:d.params.name,version:d.params.version,docs:d.params.docs,configs:d.params.configs})});if(!T.ok)throw new Error(`Error publishing fnet node: ${T.statusText}`);const E=await T.json();if(E?.error)throw new Error("Error publishing fnet node.");const O=E?.upload.id;let P="fnet-dir-zipper";P+=` --sourceDir='${s.project.projectDir}'`,P+=" --pattern=**/*",P+=" --stdout_format=json";const g=await t(P);if(0!==g.code)throw new Error(g.stderr);const S=JSON.parse(g.stdout).path;let M=new n;M.append("file",o.createReadStream(S));const $=await fetch(`${p.env.ATOM_API_URL}/v1/service/upload/single/${O}`,{method:"POST",headers:{...M.getHeaders(),Authorization:`Bearer ${l}`},body:M});if(!$.ok)throw new Error(`Error uploading fnet node: ${$.statusText}`);const j=await $.json();if(j?.error)throw new Error("Error uploading fnet node.")}export{i as default};
@@ -0,0 +1 @@
1
+ import e from"node:fs";import t from"node:path";import r from"semver";import o from"@fnet/shelljs";import i from"@fnet/config";import n from"@fnet/up-list-files";import s from"@fnet/object-from-schema";import m from"yaml";import{w as p}from"./index.js";import{fileURLToPath as a}from"node:url";import"node:child_process";import"node:os";import"yargs";import"@fnet/prompt";import"@fnet/yaml";import"@fnet/shell-flow";import"@flownet/lib-render-templates-dir";import"nunjucks";import"node:crypto";import"@flownet/lib-atom-api-js";import"@flownet/lib-parse-node-url";import"@flownet/lib-parse-imports-js";import"@fnet/list-files";import"chalk";import"redis";import"@flownet/lib-is-redis-online";import"lodash.merge";import"@fnet/npm-list-versions";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"@fnet/auto-conda-env";const l=t.dirname(a(import.meta.url));async function c({atom:a,setProgress:c,context:f,deploymentProject:d,deploymentProjectTarget:u,yamlTarget:w}){await c({message:"Deploying it as npm package."});const h=f.projectDir,y=t.resolve(h,"package.json"),g=e.readFileSync(y),j=JSON.parse(g);j.name=u.params.name,j.version=r.inc(u.version,"patch");const b=u.params.bin?.name||u.params.bin;!1!==u.params.bin?.enabled&&b&&"string"==typeof b&&(j.bin={[b]:"dist/cli/esm/index.js"}),delete j.scripts,delete j.devDependencies,j.scripts={serve:"npx serve ."},e.writeFileSync(y,JSON.stringify(j,null,"\t"));const v=u.config||"npm";let S=(await i({name:v,dir:f.projectDir,tags:f.tags,optional:!0}))?.data;if(!S){const r=n({dir:l,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===r.length)throw new Error("Couldnt find schema to create npm config");const o=await s({schema:r[0],tags:f.tags}),i=f.project.projectDir,p=t.resolve(i,".fnet");e.existsSync(p)||e.mkdirSync(p),e.writeFileSync(t.resolve(p,`${v}.fnet`),m.stringify(o)),S=o}if(e.writeFileSync(t.resolve(h,".npmrc"),`//registry.npmjs.org/:_authToken=${S.env.NPM_TOKEN}`),!0!==u.dryRun){if(p("bun")){if(0!==(await o("bun publish --access public",{cwd:h})).code)throw new Error("Couldnt publish to npm")}else{if(0!==(await o("npm publish --access public",{cwd:h})).code)throw new Error("Couldnt publish to npm")}e.writeFileSync(y,g),d.isDirty=!0,u.version=j.version,w.set("version",j.version)}}export{c as default};
@@ -0,0 +1 @@
1
+ import e from"node:fs";import t from"node:path";import o from"@fnet/config";async function n({atom:n,Atom:i,setProgress:r,context:a,packageDependencies:d,deploymentProject:c,deploymentProjectTarget:l}){await r({message:"Deploying it as workflow lib."});const s=(await o({name:"atom",dir:a.projectDir,tags:a.tags}))?.data;let f,p,y,m=l.deploy.name.split("/");if(1===m.length)p=s.env.ATOM_LIBRARIES_ID,y=l.deploy.name;else{if(2!==m.length)throw new Error("Wrong name path.");{const e=await i.first({where:{name:m[0],parent_id:s.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");p=e.id,y=m[1]}}if(!0===l.dryRun)return;if(c.isDirty=!0,l.deploy.id){if(f=await i.get({id:l.deploy.id}),!f)return}else{if(f=await i.create({parent_id:p,doc:{name:y,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!f)return;l.deploy.id=f.id}const w=a.projectDir;f.doc.contents=[{content:e.readFileSync(t.resolve(w,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:e.readFileSync(t.resolve(w,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:e.readFileSync(t.resolve(w,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],f.doc.name=y,f.doc.dependencies=d,"workflow.lib"===n.type?f.doc.subtype="library":"workflow"===n.type&&(f.doc.subtype="workflow"),f=await i.update(f,{id:f.id})}export{n as default};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import e from"path";import{fileURLToPath as t}from"node:url";import{spawn as a}from"child_process";import o from"@fnet/prompt";import i from"fs";import s from"yaml";import n from"@fnet/shelljs";import r from"os";import c from"@fnet/yaml";import p from"@fnet/config";import l from"@fnet/object-from-schema";import d from"@fnet/shell-flow";import m from"@flownet/lib-render-templates-dir";import u,{existsSync as f}from"node:fs";import g,{delimiter as y,join as h}from"node:path";import w from"node:os";import b from"nunjucks";import{randomUUID as j}from"node:crypto";import{Api as v,Atom as x}from"@flownet/lib-atom-api-js";import k from"@flownet/lib-parse-node-url";import D from"@flownet/lib-parse-imports-js";import _ from"@fnet/list-files";import S from"chalk";import P from"redis";import C from"@flownet/lib-is-redis-online";import $ from"lodash.merge";import E from"@fnet/npm-list-versions";import A from"@fnet/npm-pick-versions";import F from"object-hash";import I from"ajv/dist/2020.js";import T from"ajv/dist/standalone/index.js";import O from"ajv-formats";import R from"@fnet/auto-conda-env";import L from"yargs";class N{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(v.set_api_url(e.data.url),t)return v.set_req_token(t),void a(t);fetch(`${e.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((e=>{v.set_req_token(e.access_token),a(e.access_token)})).catch((e=>{v.set_req_token(),o(e)}))}))}}function M({feature:e,features:t,packageDevDependencies:a}){const{name:o,packages:i,options:s,extraCheck:n,explicit:r}=e,c=`${o}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=s||{};const m=t[o]?.options;m&&(d=$(d,m));const u=!t[o]||!1===t[o]?.enabled;l.forEach((e=>{const a=t.rollup_output[e];if(a){if(Reflect.has(a,o)){if(u||!a[o]||!1===a[o]?.enabled)return void delete a[o];!0===a[o]&&(a[o]={enabled:!0,options:d})}else{if(u||r||!1===t[c])return;a[o]={enabled:!0}}a[o]=a[o]||{},a[o].options={...d,...a[o].options}}}));let f=l.some((e=>!0===t.rollup_output[e][o]?.enabled));n&&(f=n()&&f),t[c]=f,f&&i.forEach((e=>a.push({package:e[0],version:e[1]})))}function z({dir:e,name:t="index"}){let a=g.resolve(e,`./${t}.tsx`);if(u.existsSync(a)||(a=g.resolve(e,`./${t}.ts`)),u.existsSync(a)||(a=g.resolve(e,`./${t}.jsx`)),u.existsSync(a)||(a=g.resolve(e,`./${t}.js`)),!u.existsSync(a))return{};const o=a,i=g.extname(a);return{file:o,ext:i,ts:".ts"===i||".tsx"===i,name:t}}async function B(e){const{atom:t,context:a,setProgress:o}=e;o("Initializing features..."),t.doc.features=t.doc.features||{};const i=t.doc.features;i.project=i.project||{},i.project.format=i.project.format||i.project_format||"esm",i.project_format=i.project.format,i.dts_enabled=!0===i.dts||void 0!==i.dts&&!1!==i.dts;const s=g.resolve(a.project.projectDir),n=z({dir:g.resolve(s,"./app")});if(n.file){o("Parsing app entry imports...");let e=await D({file:n.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));i.app_uses_jsx=t,i.app_has_entry=!0,e=await D({file:n.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),i.app_entry_uses_jsx=t,i.app_entry_is_ts=n.ts,i.app_entry_ext=n.ext}const r=z({dir:g.resolve(s,"./cli")});if(r.file){o("Parsing cli entry imports...");let e=await D({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));i.cli_uses_jsx=t,i.cli_has_entry=!0,e=await D({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),i.cli_entry_uses_jsx=t,i.cli_entry_is_ts=r.ts,i.cli_entry_ext=r.ext}if("workflow.lib"===t.type){const e=z({dir:g.resolve(s,"./src")});if(e.file){o("Parsing src entry imports...");let t=await D({file:e.file,recursive:!0}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));i.src_uses_jsx=a,i.src_has_entry=!0,t=await D({file:e.file}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),i.src_entry_uses_jsx=a,i.src_entry_is_ts=e.ts,i.src_entry_ext=e.ext}}const c=Reflect.has(i,"app_entry_uses_jsx")?!0===i.app_entry_uses_jsx:!0===i.src_entry_uses_jsx,p=Reflect.has(i,"cli_entry_uses_jsx")?!0===i.cli_entry_uses_jsx:!0===i.src_entry_uses_jsx;i.form_enabled=c||p||!0===i.form||!0===i.form?.enabled,i.multiple_enabled=i.multiple_enabled||!0===i.multiple||!0===i.multiple?.enabled,!1===i.app?i.app={enabled:!1}:!0===i.app?i.app={enabled:!0,extend:!0===i.app_has_entry,export:!0,react:c}:i.app={enabled:!0,extend:!0===i.app_has_entry,export:!0,react:c,...i.app||{}},i.app.enabled=!0===i.app.enabled&&(!0===t.doc.features.form_enabled||!0===i.app.extend||!0===i.app.enabled),i.app.format=i.app.format||"esm",i.app.folder=i.app.folder||i.app.format||"default",!1===i.cli?i.cli={enabled:!1}:!0===i.cli?i.cli={enabled:!0,extend:!0===i.cli_has_entry,export:!0,react:p}:i.cli={enabled:!0,extend:!0===i.cli_has_entry,export:!0,react:p,...i.cli||{}},i.cli.enabled=!0===i.cli.enabled&&(!1===t.doc.features.form_enabled||!0===i.cli.extend||!0===i.cli.enabled),i.cli.format=i.cli.format||"esm",i.cli.folder=i.cli.folder||i.cli.folder||"esm",i.cli.node_options=i.cli.node?.options||i.cli.node_options||"",i.json=i.cli.enabled||i.json;const l={cjs:{format:"cjs",context:i.form_enabled?"window":"global",babel:!0===i.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==i.cjs,copy:!1},esm:{format:"esm",context:i.form_enabled?"window":"global",babel:!0===i.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==i.esm,copy:!0},iife:{format:"iife",context:i.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===i.iife,terser:!0,copy:!1}};!0===i.webos&&(l.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===i.electron&&(l.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===i.nextjs&&(l.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===i.ios&&(l.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===i.macos&&(l.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===i.app.enabled&&(i.app.dir=`./dist/app/${i.app.folder}`,l.app={format:i.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:i.app.dir,terser:!0,output_exports:!1===i.app.export?"none":"auto",browsersync:!0}),!0===i.cli.enabled&&(i.cli.dir=`./dist/cli/${i.cli.folder}`,l.cli={format:i.cli.format,context:"global",babel:!0===i.src_uses_jsx||!0===i.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:i.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===i.cli.export?"none":"auto"});const d={server:".",startPath:`${g.normalize(i.app.dir||".")}`,files:[g.normalize("./dist/**/*")],cors:!0,open:!1};i.babel_options=$({targets:{browsers:"last 9 versions, not dead",node:"18"}},i.babel_options||i.babel?.options),i.browsersync_options=$(d,i.browsersync_options||i.browsersync?.options||{}),i.replace_options=$({},i.replace_options||i.replace?.options||{}),Reflect.has(i.browsersync_options,"proxy")&&delete i.browsersync_options.server,i.rollup=i.rollup||{},i.rollup_output=$(l,i.rollup_output||i.rollup?.output||{}),i.preact_enabled=!0===i.preact||i.preact&&!1!==i.preact?.enabled;let m=Object.keys(l);for(const e of m){const t=l[e];t&&(!1!==i.rollup[e]?(t.babel_options=t.babel_options||i.babel_options,t.browsersync_options=$(i.browsersync_options,t.browsersync_options),t.replace_options=$(i.replace_options,t.replace_options),i.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"),(i.form_enabled||i.babel)&&(t.babel=!0)):delete i.rollup_output[e])}m=Object.keys(i.rollup_output),i.babel_enabled=m.some((e=>!0===i.rollup_output[e].babel)),i.browser_enabled=m.some((e=>!0===i.rollup_output[e].babel)),i.browsersync_enabled=!1!==i.browsersync&&m.some((e=>!0===i.rollup_output[e].browsersync)),i.browsersync_enabled=i.browsersync_enabled&&i.app.enabled,i.dependency_auto_enabled=!1!==i.dependency_auto&&!1!==i.dependency_auto?.enabled,i.npm_install_flags=i.npm_install_flags||"",i.react_version=i.react_version||i.react?.version||18,function(e){const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,i=o.css&&!1!==o.css.enabled;let s=[];i&&(s.push(["rollup-plugin-postcss","^4"]),s.push(["sass","^1.66"]),(o.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":s.push(["postcss-import","^15"]);break;case"postcss-url":s.push(["postcss-url","^10"]);break;case"postcss-preset-env":s.push(["postcss-preset-env","^9"]);break;case"autoprefixer":s.push(["autoprefixer","^10"]);break;case"cssnano":s.push(["cssnano","^6"])}})));M({feature:{name:"css",packages:s},features:o,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,i={};!0===o.app?.enabled&&(i.targets=i.targets||[],i.targets.push({src:"./src/app/index.html",dest:o.app.dir}),Reflect.has(o.app,"copy")||Reflect.has(o,"copy")||(o.copy=!0)),M({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:o,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e;M({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:t.doc.features,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e;M({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:t.doc.features,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e;M({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:t.doc.features,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e;M({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:t.doc.features,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e;M({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:t.doc.features,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e;M({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:t.doc.features,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e;M({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:t.doc.features,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e;M({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:t.doc.features,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e;M({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:t.doc.features,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e;M({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:t.doc.features,packageDevDependencies:a})}(e),function(e){const{atom:t,packageDevDependencies:a}=e;M({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:t.doc.features,packageDevDependencies:a})}(e)}async function J({projectDir:e,name:t,setProgress:a,count:o=1}){let i;const s=F(["npm-pick-versions",t,o]),n=g.join(e,".cache"),r=g.join(n,s+".json");return u.existsSync(r)?(a&&a(`Picking npm version of ${t} from cache ...`),i=JSON.parse(u.readFileSync(r,"utf8"))):(a&&a(`Picking npm version of ${t} ...`),i=await A({name:t,count:o}),u.mkdirSync(n,{recursive:!0}),u.writeFileSync(r,JSON.stringify(i),"utf8")),i}async function H({atom:e,setProgress:t,context:a,packageDependencies:o}){await t({message:"Creating .gitignore"});const i={atom:e,packageDependencies:o},s=a.templateCommonDir,n=b.compile(u.readFileSync(g.resolve(s,".gitignore.njk"),"utf8"),b.configure(s)).render(i),r=a.projectDir,c=g.resolve(r,".gitignore");u.writeFileSync(c,n,"utf8")}async function X({atom:e,context:t,setProgress:a,Atom:o}){const i="readme.md",s=`Creating ${i}`;if(await a({message:s}),t.project?.readme){const e=t.projectDir,a={content:t.project.readme.doc.content},o=g.resolve(t.project.projectDir,"fnet/how-to.md");if(u.existsSync(o)){const e=u.readFileSync(o,"utf8");a.howto=e}const s=g.resolve(t.project.projectDir,"fnet/input.yaml");if(u.existsSync(s)){const e=await c({file:s,tags:t.tags});a.input=e.content}const n=t.templateCommonDir,r=b.compile(u.readFileSync(g.resolve(n,`${i}.njk`),"utf8"),b.configure(n)).render(a),p=g.resolve(e,`${i}`);u.writeFileSync(p,r,"utf8")}else if(e.id){const a=await o.first({type:"wiki",parent_id:e.id});if(!a||"markdown"!==a.doc?.["content-type"])return;const{content:s,...n}=a.doc,r={content:s},c=t.templateCommonDir,p=b.compile(u.readFileSync(g.resolve(c,`${i}.njk`),"utf8"),b.configure(c)).render(r),l=t.projectDir,d=g.resolve(l,`${i}`);u.writeFileSync(d,p,"utf8")}}var K=e=>{const t=process.env.PATH||"",a="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],o=t.split(y);for(const t of o)for(const o of a){const a=h(t,"win32"===process.platform?e+o:e);if(f(a))return a}return null};var q=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:i,setProgress:s,deploymentProject:n,yamlTarget:r}=e;if(!0!==i.enabled)return;const c=i.type;try{if("lib"===c)await(await import("./index.DLGSTm8o.js")).default({...e});else if("red"===c)await(await import("./index.CmMM-Ek9.js")).default({...e});else if("npm"===c)await(await import("./index.Cr2Vp1gC.js")).default({...e});else if("gcs"===c)await(await import("./index.UOds5XLl.js")).default({...e});else if("gitlab"===c)await(await import("./index.DI3yyTtl.js")).default({...e});else if("fnet-package"===c)await(await import("./index.Bfg4lyu-.js")).default({...e});else if("fnet-form"===c)await(await import("./index.Q-CYRcna.js")).default({...e});else if("fnet-node"===c)await(await import("./index.BoO2Mnox.js")).default({...e});else if("fnet-flow"===c)await(await import("./index.dpz2QIRu.js")).default({...e});else if("nextjs"===c)await(await import("./index.CDct_kkF.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("webos"===c)await(await import("./index.CMC8mlye.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("electron"===c)await(await import("./index.xd8c7XMr.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("docker"===c)await(await import("./index.D2N9YZmA.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("ios"===c)await(await import("./index.B5XE4ChJ.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("macos"===c)await(await import("./index.W6RYgypK.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("rust"===c)await(await import("./index.CzAV0S36.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else{if("pypi"!==c)return void console.warn(`No deployer found for type: ${c}`);await(await import("./index.C7saWH6d.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0}}catch(e){throw console.error(`Error during deployment for type "${c}":`,e),e}};class U{#e;#t;#a;#o;#i;#s;#n;#r;#c;#p;#l;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new N,this.#t=e,this.#s=[],this.#n=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#s,packageDevDependencies:this.#n,setProgress:this.setProgress.bind(this),context:this.#t,Atom:x,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,a){this._redis_client&&await this._redis_client.SETEX(e,a||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async initAuth(){this.#t.id&&(this.#r=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#r)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await x.get({id:e});let t=this.#a.doc.bundleName;t=t||(this.#a.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#a.doc.bundleName=t,this.#a.type=this.#a.type||"workflow.lib",this.#y.atom=this.#a}async initLibraryDir(){this.setProgress({message:"Initializing library directory."});const e=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const t=_({dir:e,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of t)u.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let a=e;u.existsSync(a)||u.mkdirSync(a,{recursive:!0}),a=g.join(e,"src"),u.existsSync(a)||u.mkdirSync(a,{recursive:!0}),a=g.join(e,"src","default"),u.existsSync()||u.mkdirSync(a,{recursive:!0})}async initLibraryDirPython(){this.setProgress({message:"Initializing library directory."});const e=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const t=_({dir:e,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of t)u.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let a=e;u.existsSync(a)||u.mkdirSync(a,{recursive:!0}),a=g.join(e,"src"),u.existsSync(a)||u.mkdirSync(a,{recursive:!0}),a=g.join(e,"src","default");const o=this.#t.projectSrcDir;if(!u.existsSync(a))try{"win32"===w.platform()?u.symlinkSync(o,a,"junction"):u.symlinkSync(o,a,"dir")}catch(e){throw new Error(`Couldn't create symlink. Error: ${e.message}`)}}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#t.templateDir;this.#o=b.configure(e,{watch:!1,dev:!0}),this.#y.njEnv=this.#o}async initLibs(){this.setProgress({message:"Initializing external libs."});const e=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id}];this.#i=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#s})}async initLibsPython(){this.setProgress({message:"Initializing external libs."});const e=this.#a;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id,atom:e}];this.#i=t}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],i=await this.findAtomLibrary({url:o.name});o.atom=i;const s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:e}){const t=k({url:e});if(!t)throw new Error(`Invalid package name: ${e}`);if(t.protocol||(t.protocol=this.#l),"ac:"===t.protocol){const a=t.pathname.split("/");if(1===a.length)return await x.first({where:{name:e,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===a.length){const e=await x.first({where:{name:a[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await x.first({where:{name:a[1],parent_id:e.id,type:"workflow.lib"}})}}else if("local:"===t.protocol){const e=this.#a;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=g.resolve(this.#t.projectSrcDir,"index.js"),a=await D({file:t,recursive:!0}),o=e.doc.dependencies,i=a.all;for await(const e of i){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await J({name:e.package,projectDir:this.#t.projectDir,setProgress:this.#y.setProgress});o.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return e}}async createAtomLibFiles({libs:e}){await this.setProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const t=e.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const a=t[e].atom,o=this.#t.projectDir;if("local:"===a.protocol){const e=g.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.js`),t=g.relative(g.join(this.#t.projectDir,"src","default"),e);if(!u.existsSync(e)){u.mkdirSync(g.dirname(e),{recursive:!0});let t="export default async (args)=>{\n";t+="}",u.writeFileSync(e,t,"utf8")}a.relativePath=t.split(g.sep).join("/"),this.#a.typesDir=`./types/${g.basename(o)}/src`}else{const e=g.join(o,"src","libs",`${a.id}.js`),t=a.doc.contents?.find((e=>"esm"===e.format))||a.doc;u.writeFileSync(e,t.content,"utf8")}}}async createAtomLibFilesPython({libs:e}){await this.setProgress({message:"Creating external lib files."});const t=e.filter((e=>"atom"===e.type));for(let e=0;e<t.length;e++){const a=t[e].atom;if("local:"===a.protocol){const e=g.resolve(this.#t.projectSrcDir,`${a.fileName||a.name}.py`);if(!u.existsSync(e)){u.mkdirSync(g.dirname(e),{recursive:!0});let t="def default():\n";t+=' print("Hello world!")\n',u.writeFileSync(e,t,"utf8")}}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const e={libs:this.#i.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},t=this.#t.templateDir,a=b.compile(u.readFileSync(g.resolve(t,g.join("src","default","engine.js.njk")),"utf8"),this.#o).render(e),o=this.#t.projectDir,i=g.resolve(o,g.join("src","default","index.js"));u.writeFileSync(i,a,"utf8")}async createProjectYaml(){const e="node.yaml",t=`Creating ${e}`;await this.setProgress({message:t});const{content:a,...o}=this.#a.doc,i={content:s.stringify(o)},n=this.#t.templateDir,r=b.compile(u.readFileSync(g.resolve(n,`${e}.njk`),"utf8"),this.#o).render(i),c=this.#t.projectDir,p=g.resolve(c,`${e}`);u.writeFileSync(p,r,"utf8")}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&await a.save()}}else if(this.#a.id){const e=await x.list({type:"library.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&(a=await x.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:a}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const o=Object.keys(t.doc||{}),i=a||{};for(let e=0;e<o.length;e++){const a=t.doc[o[e]];a.name=o[e];const s=i.get(o[e]);await q({...this.#y,deploymentProject:t,deploymentProjectTarget:a,yamlTarget:s})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await x.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await x.update(o,{id:o.id})):o=await x.create({parent_id:this.#d.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:a.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(S.blue(t)),await this._cache_set(this.#p,{status:"IN_PROGRESS",message:t})}async initNode(){await B(this.#y),await async function({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:o}){o("Initializing dependencies");const i=e.doc.dependencies||[];if(i.filter((e=>!e.dev)).forEach((e=>t.push(e))),i.filter((e=>e.dev)).forEach((e=>a.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";o("Fetching React versions"),a=`^${(await E({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),a.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&a.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),a.push({package:"@babel/core",version:"^7"}),a.push({package:"@rollup/plugin-commonjs",version:"^28"}),a.push({package:"@rollup/plugin-node-resolve",version:"^16"}),a.push({package:"@rollup/plugin-replace",version:"^6"}),a.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&a.push({package:"rollup-plugin-dts",version:"^6"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),a.push({package:"@rollup/plugin-alias",version:"^5"}),a.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6"}),a.push({package:"@babel/preset-env",version:"^7"}),a.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":a.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":a.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":a.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":a.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":a.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initPython(){await async function(e){const{atom:t,context:a,setProgress:o}=e;o("Initializing features..."),t.doc.features=t.doc.features||{};const i=t.doc.features;!1===i.cli?i.cli={enabled:!1}:(i.cli,i.cli={enabled:!0}),i.cli.enabled=!0===i.cli.enabled&&(!1===t.doc.features.form_enabled||!0===i.cli.extend||!0===i.cli.enabled)}(this.#y),await async function({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:o}){o("Initializing dependencies")}(this.#y),await this.initLibraryDirPython(),await this.initNunjucks(),await this.initLibsPython()}async nodeBuild(){this.#u&&(await this.createAtomLibFiles({libs:this.#i}),await this.createEngine(),await this.createProjectYaml(),await X(this.#y),await async function({atom:e,setProgress:t,context:a,packageDependencies:o}){await t({message:"Creating tsconfig.json."});const i={atom:e,packageDependencies:o},s=a.templateCommonDir,n=b.compile(u.readFileSync(g.resolve(s,"tsconfig.json.njk"),"utf8"),b.configure(s)).render(i),r=a.projectDir,c=g.resolve(r,"tsconfig.json");u.writeFileSync(c,n,"utf8")}(this.#y),await H(this.#y),await async function({atom:e,setProgress:t,context:a,njEnv:o}){if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating yargs."});let i={};if(i=e.doc.input?e.doc.input:{type:"object",properties:{},required:[]},e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled){const t=e.doc.features.cli.fargs,a={type:"string",description:"Config name to load args",hidden:!1},o={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(t,"default")&&(a.default=t.default),i.properties&&(i.properties.fargs=a,i.properties.ftag=o)}const s={options:i,imports:[],atom:e},n=a.templateDir,r=b.compile(u.readFileSync(g.resolve(n,"src/default/to.args.js.njk"),"utf8"),o).render(s),c=a.projectDir,p=g.resolve(c,"src/default/to.args.js");u.writeFileSync(p,r,"utf8");const l=new I({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});O(l);const d=l.compile(i),m=T(l,d);u.writeFileSync(g.resolve(c,"src/default/validate_input.js"),m,"utf8")}(this.#y),await async function({atom:e,setProgress:t,context:a,packageDependencies:o}){if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={atom:e,packageDependencies:o},s=a.templateDir,n=g.resolve(a.projectDir,"src/cli");u.existsSync(n)||u.mkdirSync(n,{recursive:!0}),await m({pattern:["index.js.njk"],dir:g.resolve(s,"src/cli"),outDir:n,context:i})}(this.#y),await async function({atom:e,setProgress:t,context:a,packageDependencies:o}){if(!0!==e.doc.features.app.enabled)return;await t({message:"Creating app folder"});const i={atom:e,packageDependencies:o,ts:Date.now()},s=a.templateDir,n=g.resolve(a.projectDir,"src/app");u.existsSync(n)||u.mkdirSync(n,{recursive:!0});let r=["index.js.njk"];!1!==e.doc.features.app.html&&r.push("index.html.njk"),await m({pattern:r,dir:g.resolve(s,"src/app"),outDir:n,context:i})}(this.#y),await async function({atom:e,setProgress:t,context:a,packageDependencies:o}){await t({message:"Creating rollup file."});const i={atom:e,packageDependencies:o},s=g.resolve(a.projectDir,"src","default/index.js");if(!u.existsSync(s))throw new Error(`Entry file not found: ${s}`);const n=(await D({file:s,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),r=e.doc.features.rollup_output,c=Object.keys(r);for(let e=0;e<c.length;e++){const t=r[c[e]];if(!0===t.browser&&n.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(n.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<n.length;e++){const a=n[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(n)}}const p=a.templateCommonDir;let l=b.compile(u.readFileSync(g.resolve(p,"rollup.config.mjs.njk"),"utf8"),b.configure(p)).render(i);const d=a.projectDir;let m=g.resolve(d,"rollup.config.mjs");u.writeFileSync(m,l,"utf8")}(this.#y),await async function({atom:e,context:t,packageDependencies:a,packageDevDependencies:o,setProgress:i}){await i({message:"Creating package.json."}),a.filter((e=>!0===e.dev)).forEach((e=>{o.find((t=>t.package===e.package))||o.push(e);const t=a.findIndex((t=>t.package===e.package));a.splice(t,1)}));const s=a.find((e=>"react"===e.package)),n=a.find((e=>"react-dom"===e.package));s&&!n?a.push({package:"react-dom",version:s.version}):s&&n&&(n.version=s.version),s&&e.doc.features.react_version>=17&&(a.find((e=>"@emotion/react"===e.package))||a.push({package:"@emotion/react",version:"^11"}),a.find((e=>"@emotion/styled"===e.package))||a.push({package:"@emotion/styled",version:"^11"}));const r=[];!0===e.doc.features.app.enabled&&r.push({file:g.resolve(t.projectDir,"src/app/index.js"),dev:!1!==e.doc.features.app.dev}),!0===e.doc.features.cli.enabled&&r.push({file:g.resolve(t.projectDir,"src/cli/index.js"),dev:!1!==e.doc.features.cli.dev});for await(const e of r){const s=e.file;if(!u.existsSync(s))throw new Error(`App file not found: ${s}`);const n=(await D({file:s,recursive:!0})).all;for await(const s of n){if("npm"!==s.type)continue;if(a.find((e=>e.package===s.package)))continue;if(o.find((e=>e.package===s.package)))continue;const n=await J({name:s.package,projectDir:t.projectDir,setProgress:i});(!0===e.dev?o:a).push({package:s.package,subpath:s.subpath,version:n.minorRange,type:"npm"})}}const c={atom:e,packageDependencies:a,packageDevDependencies:o},p=t.templateCommonDir,l=b.compile(u.readFileSync(g.resolve(p,"package.json.njk"),"utf8"),b.configure(p)).render(c),d=t.projectDir,m=g.resolve(d,"package.json");u.writeFileSync(m,l,"utf8");const f=g.resolve(t.project.projectDir,"fnet");if(u.existsSync(f)){const e=g.resolve(t.projectDir,"fnet");u.existsSync(e)||u.mkdirSync(e);const a=u.readdirSync(f);for(const t of a){const a=g.resolve(f,t);if(!u.lstatSync(a).isFile())continue;const o=g.resolve(e,t);u.copyFileSync(a,o)}}}(this.#y),await async function({setProgress:t,context:a}){const o=a.projectDir;await t({message:"Prettifiying source files."});let i=e.join("src","**","*");await d({commands:{steps:[`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`],wdir:o}})}(this.#y),await async function({atom:e,setProgress:t,context:a}){if(!e.doc.features.dts_enabled)return;const o=a.projectDir;if(await t({message:"Creating .d.ts"}),0!==(await n("tsc",{cwd:o})).code)throw new Error("Couldnt create .d.ts files.")}(this.#y),this.#f&&(await async function({setProgress:e,atom:t,context:a}){const o=a.projectDir;await e({message:"Installing npm packages."});const i=K("bun")?"bun":"npm";if(0!==(await n(`${i} install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}(this.#y),await async function({setProgress:e,context:t}){const a=t.projectDir;if(await e({message:"Building main project."}),0!==(await n("npm run build",{cwd:a})).code)throw new Error("Couldnt build project.")}(this.#y),this.#g&&await this.deploy()))}async pythonBuild(){this.#u&&(await this.createAtomLibFilesPython({libs:this.#i}),await this.createProjectYaml(),await X(this.#y),await H(this.#y),await async function({atom:e,setProgress:t,context:a,packageDependencies:o}){if(!0!==e.doc.features.cli.enabled)return;await t({message:"Creating cli."});const i={atom:e,packageDependencies:o},s=a.templateDir,n=g.join(a.projectDir,"src","cli");u.existsSync(n)||u.mkdirSync(n,{recursive:!0}),await m({pattern:["index.py.njk","__init__.py.njk"],dir:g.join(s,"src","cli"),outDir:n,context:i})}(this.#y),this.#f&&(await async function(e){const{setProgress:t,atom:a,context:o}=e;t({message:"Installing Python packages"});const i=o.projectDir,s=await R({pythonVersion:"3.12",packages:[{package:"fnet-import-parser",version:"0.1.9"}]}),{errors:n,result:r}=await s.runBin("fnet_import_parser",["--entry_file",g.join(i,"src","default","index.py")],{captureName:"result"});if(n)throw new Error(n.format());const c=JSON.parse(r.items[0].stdout),p=c.required["third-party"]?.map((e=>({package:e.metadata?.package||e.path,version:e.metadata?.version||void 0,channel:e.metadata?.channel||void 0})))||[],l=a.doc.dependencies||[];for(const e of p)l.some((t=>t.package===e.package))||l.push(e);const d=g.join(i,".conda"),u=await R({envDir:d,pythonVersion:a.doc.features.runtime.version||"3.12",packages:l});o.pythonEnv=u,e.packageDependencies=l;const f=a.doc.features.render?.dirs||[];for(const e of f)e.dir=g.resolve(i,e.dir),e.outDir=g.resolve(i,e.outDir),await m(e);let y={params:{}};y.params.package_name=a.doc.name,y.params.version="0.1.0",y.params.bin_name=a.doc.name,y.params.python_requires=a.doc.features.runtime.version||">=3.12",y.params.dependencies=l,y.params.scripts=JSON.stringify({cli:`PYTHONPATH='${g.join("src")}' '${g.relative(o.projectDir,u.pythonBin)}' '${g.join("src","cli","index.py")}'`}),await m({pattern:["setup.py.njk","package.json.njk","pyproject.toml.njk"],dir:o.templateDir,outDir:o.projectDir,context:y})}(this.#y),this.#g&&await this.deploy()))}async init(){this._redis_client=await async function(){if(!await C({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=P.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}(),this.#c=this.#t.buildId||j(),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#f=["all","deploy","build"].includes(this.#m),this.#g=["all","deploy"].includes(this.#m),this.#l=this.#t.protocol,this.#p="BUILD:"+this.#c,this.#d=(await p({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),"node"===this.#a.doc.features.runtime.type?await this.initNode():"python"===this.#a.doc.features.runtime.type&&await this.initPython()}catch(e){throw await this._cache_set(this.#p,{status:"FAILED",message:e?.message||e}),e}}async build(){try{"node"===this.#a.doc.features.runtime.type?await this.nodeBuild():"python"===this.#a.doc.features.runtime.type&&await this.pythonBuild(),await this._cache_set(this.#p,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#p,{status:"FAILED",message:e.message||e}),console.log(e),e}}}const Y=g.dirname(t(import.meta.url));const G=e.dirname(t(import.meta.url)),V=process.cwd();p({name:["redis"],dir:V,optional:!0});const W=function({baseDir:e}){let t=e=e||Y;for(;t!==g.parse(t).root;){const e=g.join(t,"node_modules");if(u.existsSync(e))return e;t=g.dirname(t)}return null}({baseDir:G}),Z="win32"===process.platform?";":":";W&&(process.env.PATH=`${e.join(W,"/.bin")}${Z}${process.env.PATH}`);let Q=L(process.argv.slice(2)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0}).option("vscode",{type:"boolean",default:!0,alias:"vs"}).option("runtime",{type:"string",default:"node",choices:["node","python"]})),(async t=>{try{const a=e.resolve(W,"@fnet/cli-project-node/dist/template/project"),o=e.resolve(V,t.name);i.existsSync(o)||i.mkdirSync(o),await m({dir:a,outDir:o,context:{name:t.name,runtime:t.runtime,platform:r.platform()},copyUnmatchedAlso:!0});let s=await n("fnode build",{cwd:o});if(0!==s.code)throw new Error("Failed to build project.");if(K("git")&&(s=await n("git init --initial-branch=main",{cwd:o}),0!==s.code))throw new Error("Failed to initialize git.");if(K("code")&&t.vscode&&(s=await n(`cd ${o} && code .`),0!==s.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async t=>{try{const a=e.resolve(W,"@fnet/cli-project-node/dist/template/project"),o=process.cwd(),i=await ae(t);if(t.update){if(await m({dir:a,outDir:o,context:{name:i.project.projectFileParsed.name,runtime:i.project.runtime.type,platform:r.platform()},copyUnmatchedAlso:!0}),0!==(await n("fnode build",{cwd:o})).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await ae(e),a=new U(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await ae({...e,mode:"all"}),a=new U(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await ae({...e,mode:"file"}),a=new U(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function ee(e,{name:t,bin:o,preArgs:i=[]}){return e.command(`${t||o} [commands..]`,`${o} ${i.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await ae(e),{projectDir:s}=t,n=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,r=process.argv.slice(3).map(n);a(o,[...i,...r],{cwd:s,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}function te(t,{name:o,bin:i,preArgs:s=[]}){return t.command(`${o||i} [commands..]`,`${i} ${s.join(" ")}`,(e=>e.help(!1).version(!1)),(async t=>{try{const n=await ae(t),{projectDir:r}=n,c=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,p=process.argv.slice(3).map(c);i=e.join(r,".conda","bin",i||o);a(i,[...s,...p],{cwd:r,stdio:"inherit",shell:!0,env:{PYTHONPATH:r}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function ae(t){if(t.id)return{id:t.id,buildId:t.buildId,mode:t.mode,protocol:t.protocol||"ac:",templateDir:e.resolve(W,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:e.resolve(W,"./@fnet/cli-project-common/dist/template/default"),projectDir:e.resolve(V,`./.output/${t.id}`),tags:t.ftag};{const a=await async function({tags:t}){const a=e.resolve(V,"node.yaml");if(!i.existsSync(a))throw new Error("node.yaml file not found in current directory.");const{raw:o,parsed:n}=await c({file:a,tags:t}),r=e.dirname(a);n.features=n.features||{};const p=n.features;p.runtime=p.runtime||{},p.runtime.type=p.runtime.type||"node","python"===p.runtime.type?p.runtime.template=p.runtime.template||"python":p.runtime.template=p.runtime.template||"default";const l={libraryAtom:{doc:{...n},fileName:"index"},projectDir:r,projectFilePath:a,projectFileContent:o,projectFileParsed:n,runtime:p.runtime};let d=e.resolve(r,"fnet/targets.yaml");if(!i.existsSync(d)&&(d=e.resolve(r,"node.devops.yaml"),i.existsSync(d))){const t=e.resolve(r,"fnet");i.existsSync(t)||i.mkdirSync(t),i.copyFileSync(d,e.resolve(r,"fnet/targets.yaml")),i.unlinkSync(d)}if(i.existsSync(d)){const{raw:e,parsed:a}=await c({file:d,tags:t}),o=s.parseDocument(e);l.devops={filePath:d,fileContent:e,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{i.writeFileSync(l.devops.filePath,o.toString())}}}const m=e.resolve(r,"readme.md");if(i.existsSync(m)){const e=i.readFileSync(m,"utf8");l.readme={filePath:m,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return l}({tags:t.ftag});return{buildId:t.buildId,mode:t.mode,protocol:t.protocol||"local:",templateDir:e.resolve(W,`./@fnet/cli-project-node/dist/template/${a.runtime.template}`),templateCommonDir:e.resolve(W,`./@fnet/cli-project-common/dist/template/${a.runtime.template}`),projectDir:e.resolve(a.projectDir,"./.workspace"),projectSrcDir:e.resolve(a.projectDir,"./src"),project:a,tags:t.ftag}}}Q=Q.command("input [name]","Create or modify an input config file",(e=>e.positional("name",{type:"string",demandOption:!1}).help(!1).version(!1)),(async t=>{try{const a=await ae(t),{project:s}=a,{projectDir:n,projectFileParsed:r}=s,c=r.input;if(!c)throw new Error("Config schema not found in project file.");if(!Reflect.has(t,"name")){const{inputName:e}=await o({type:"input",name:"inputName",message:"Input name:",initial:"dev"});t.name=e}const p=e.resolve(n,".fnet");i.existsSync(p)||i.mkdirSync(p);const d=e.resolve(p,`${t.name}.fnet`),m=i.existsSync(d),u=await l({schema:c,format:"yaml",ref:m?d:void 0});i.writeFileSync(d,u)}catch(e){console.error(e.message),process.exit(1)}})),Q=ee(Q,{bin:"npm"}),Q=ee(Q,{bin:"node"}),Q=ee(Q,{bin:"bun"}),Q=ee(Q,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),Q=ee(Q,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),Q=ee(Q,{name:"app",bin:"npm",preArgs:["run","app","--"]}),Q=ee(Q,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),Q=ee(Q,{bin:"npx"}),Q=ee(Q,{bin:"cdk"}),Q=ee(Q,{bin:"aws"}),Q=function(e,{name:t,preArgs:o=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await ae(e),{projectDir:s}=t,n=e.config,r=await p({name:n,dir:s,transferEnv:!1,optional:!0,tags:t.tags}),c=r?.data?.env||void 0,l=e.command,d=process.argv.slice(5);a(l,[...o,...d],{cwd:i.existsSync(s)?s:V,stdio:"inherit",shell:!0,env:{...process.env,...c}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(Q,{name:"with"}),Q=function(e,{name:t,preArgs:a=[]}){return e.command(`${t} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const t=await ae(e),{project:a}=t,{projectFileParsed:o}=a,i=o.commands;if(!i)throw new Error("Commands not found in project file.");const s=i[e.group];if(!s)throw new Error(`Command group '${e.group}' not found in project file.`);await d({commands:s})}catch(e){console.error(e.message),process.exit(1)}}))}(Q,{name:"run"}),Q=te(Q,{name:"python"}),Q=te(Q,{name:"python3"}),Q=te(Q,{name:"pip"}),Q=te(Q,{name:"pip3"}),Q.demandCommand(1,"You need at least one command before moving on").help().argv;export{K as w};
2
+ import e,{delimiter as t,join as a}from"node:path";import{fileURLToPath as o}from"node:url";import{spawn as i}from"node:child_process";import s from"node:os";import n,{existsSync as r}from"node:fs";import c from"yaml";import p from"yargs";import l from"@fnet/prompt";import d from"@fnet/shelljs";import m from"@fnet/yaml";import u from"@fnet/config";import f from"@fnet/shell-flow";import g from"@flownet/lib-render-templates-dir";import y from"nunjucks";import{randomUUID as h}from"node:crypto";import{Api as w,Atom as b}from"@flownet/lib-atom-api-js";import j from"@flownet/lib-parse-node-url";import v from"@flownet/lib-parse-imports-js";import x from"@fnet/list-files";import k from"chalk";import _ from"redis";import D from"@flownet/lib-is-redis-online";import S from"lodash.merge";import P from"@fnet/npm-list-versions";import C from"@fnet/npm-pick-versions";import $ from"object-hash";import E from"ajv/dist/2020.js";import A from"ajv/dist/standalone/index.js";import F from"ajv-formats";import I from"@fnet/auto-conda-env";const T=e.dirname(o(import.meta.url));var O=e=>{const o=process.env.PATH||"",i="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],s=o.split(t);for(const t of s)for(const o of i){const i=a(t,"win32"===process.platform?e+o:e);if(r(i))return i}return null};class R{init({config:e,accessToken:t}){return new Promise(((a,o)=>{if(w.set_api_url(e.data.url),t)return w.set_req_token(t),void a(t);fetch(`${e.data.issuer}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e.data.grant.params)}).then((async e=>{if(!e.ok)throw new Error(await e.text());return e.json()})).then((e=>{w.set_req_token(e.access_token),a(e.access_token)})).catch((e=>{w.set_req_token(),o(e)}))}))}}function L({feature:e,features:t,packageDevDependencies:a}){const{name:o,packages:i,options:s,extraCheck:n,explicit:r}=e,c=`${o}_enabled`,p=t.rollup_output||{},l=Object.keys(p);let d=s||{};const m=t[o]?.options;m&&(d=S(d,m));const u=!t[o]||!1===t[o]?.enabled;l.forEach((e=>{const a=t.rollup_output[e];if(a){if(Reflect.has(a,o)){if(u||!a[o]||!1===a[o]?.enabled)return void delete a[o];!0===a[o]&&(a[o]={enabled:!0,options:d})}else{if(u||r||!1===t[c])return;a[o]={enabled:!0}}a[o]=a[o]||{},a[o].options={...d,...a[o].options}}}));let f=l.some((e=>!0===t.rollup_output[e][o]?.enabled));n&&(f=n()&&f),t[c]=f,f&&i.forEach((e=>a.push({package:e[0],version:e[1]})))}function N({dir:t,name:a="index"}){let o=e.resolve(t,`./${a}.tsx`);if(n.existsSync(o)||(o=e.resolve(t,`./${a}.ts`)),n.existsSync(o)||(o=e.resolve(t,`./${a}.jsx`)),n.existsSync(o)||(o=e.resolve(t,`./${a}.js`)),!n.existsSync(o))return{};const i=o,s=e.extname(o);return{file:i,ext:s,ts:".ts"===s||".tsx"===s,name:a}}async function M(t){const{atom:a,context:o,setProgress:i}=t;i("Initializing features..."),a.doc.features=a.doc.features||{};const s=a.doc.features;s.project=s.project||{},s.project.format=s.project.format||s.project_format||"esm",s.project_format=s.project.format,s.dts_enabled=!0===s.dts||void 0!==s.dts&&!1!==s.dts;const n=e.resolve(o.project.projectDir),r=N({dir:e.resolve(n,"./app")});if(r.file){i("Parsing app entry imports...");let e=await v({file:r.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.app_uses_jsx=t,s.app_has_entry=!0,e=await v({file:r.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.app_entry_uses_jsx=t,s.app_entry_is_ts=r.ts,s.app_entry_ext=r.ext}const c=N({dir:e.resolve(n,"./cli")});if(c.file){i("Parsing cli entry imports...");let e=await v({file:c.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.cli_uses_jsx=t,s.cli_has_entry=!0,e=await v({file:c.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.cli_entry_uses_jsx=t,s.cli_entry_is_ts=c.ts,s.cli_entry_ext=c.ext}if("workflow.lib"===a.type){const t=N({dir:e.resolve(n,"./src")});if(t.file){i("Parsing src entry imports...");let e=await v({file:t.file,recursive:!0}),a=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.src_uses_jsx=a,s.src_has_entry=!0,e=await v({file:t.file}),a=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.src_entry_uses_jsx=a,s.src_entry_is_ts=t.ts,s.src_entry_ext=t.ext}}const p=Reflect.has(s,"app_entry_uses_jsx")?!0===s.app_entry_uses_jsx:!0===s.src_entry_uses_jsx,l=Reflect.has(s,"cli_entry_uses_jsx")?!0===s.cli_entry_uses_jsx:!0===s.src_entry_uses_jsx;s.form_enabled=p||l||!0===s.form||!0===s.form?.enabled,s.multiple_enabled=s.multiple_enabled||!0===s.multiple||!0===s.multiple?.enabled,!1===s.app?s.app={enabled:!1}:!0===s.app?s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p}:s.app={enabled:!0,extend:!0===s.app_has_entry,export:!0,react:p,...s.app||{}},s.app.enabled=!0===s.app.enabled&&(!0===a.doc.features.form_enabled||!0===s.app.extend||!0===s.app.enabled),s.app.format=s.app.format||"esm",s.app.folder=s.app.folder||s.app.format||"default",!1===s.cli?s.cli={enabled:!1}:!0===s.cli?s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l}:s.cli={enabled:!0,extend:!0===s.cli_has_entry,export:!0,react:l,...s.cli||{}},s.cli.enabled=!0===s.cli.enabled&&(!1===a.doc.features.form_enabled||!0===s.cli.extend||!0===s.cli.enabled),s.cli.format=s.cli.format||"esm",s.cli.folder=s.cli.folder||s.cli.folder||"esm",s.cli.node_options=s.cli.node?.options||s.cli.node_options||"",s.json=s.cli.enabled||s.json;const d={cjs:{format:"cjs",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!0,enabled:!1!==s.cjs,copy:!1},esm:{format:"esm",context:s.form_enabled?"window":"global",babel:!0===s.src_uses_jsx||!1,browser:!1,replace:!0,terser:!1,enabled:!1!==s.esm,copy:!0},iife:{format:"iife",context:s.form_enabled?"window":"global",babel:!0,browser:!0,replace:!0,enabled:!0===s.iife,terser:!0,copy:!1}};!0===s.webos&&(d.webos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,input:"./src/app/index.js",output_dir:"./dist/app/webos",copy:!1,babel_options:{targets:{chrome:"79"}}}),!0===s.electron&&(d.electron={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/electron"}),!0===s.nextjs&&(d.nextjs={format:"esm",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/nextjs"}),!0===s.ios&&(d.ios={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/ios"}),!0===s.macos&&(d.macos={format:"iife",browser:!0,babel:!0,context:"window",replace:!0,terser:!0,copy:!1,input:"./src/app/index.js",output_dir:"./dist/app/macos"}),!0===s.app.enabled&&(s.app.dir=`./dist/app/${s.app.folder}`,d.app={format:s.app.format,browser:!0,babel:!0,context:"window",replace:!0,input:"./src/app/index.js",output_dir:s.app.dir,terser:!0,output_exports:!1===s.app.export?"none":"auto",browsersync:!0}),!0===s.cli.enabled&&(s.cli.dir=`./dist/cli/${s.cli.folder}`,d.cli={format:s.cli.format,context:"global",babel:!0===s.src_uses_jsx||!0===s.cli_uses_jsx||!1,browser:!1,replace:!0,enabled:!0,input:"./src/cli/index.js",output_dir:s.cli.dir,banner:"#!/usr/bin/env node",terser:!0,output_exports:!1===s.cli.export?"none":"auto"});const m={server:".",startPath:`${e.normalize(s.app.dir||".")}`,files:[e.normalize("./dist/**/*")],cors:!0,open:!1};s.babel_options=S({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=S(m,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=S({},s.replace_options||s.replace?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=S(d,s.rollup_output||s.rollup?.output||{}),s.preact_enabled=!0===s.preact||s.preact&&!1!==s.preact?.enabled;let u=Object.keys(d);for(const e of u){const t=d[e];t&&(!1!==s.rollup[e]?(t.babel_options=t.babel_options||s.babel_options,t.browsersync_options=S(s.browsersync_options,t.browsersync_options),t.replace_options=S(s.replace_options,t.replace_options),s.preact_enabled&&(t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{},t.alias.entries.react="preact/compat",t.alias.entries["react-dom"]="preact/compat"),(s.form_enabled||s.babel)&&(t.babel=!0)):delete s.rollup_output[e])}u=Object.keys(s.rollup_output),s.babel_enabled=u.some((e=>!0===s.rollup_output[e].babel)),s.browser_enabled=u.some((e=>!0===s.rollup_output[e].babel)),s.browsersync_enabled=!1!==s.browsersync&&u.some((e=>!0===s.rollup_output[e].browsersync)),s.browsersync_enabled=s.browsersync_enabled&&s.app.enabled,s.dependency_auto_enabled=!1!==s.dependency_auto&&!1!==s.dependency_auto?.enabled,s.npm_install_flags=s.npm_install_flags||"",s.react_version=s.react_version||s.react?.version||18,function(e){const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,i=o.css&&!1!==o.css.enabled;let s=[];i&&(s.push(["rollup-plugin-postcss","^4"]),s.push(["sass","^1.66"]),(o.css?.options?.plugins||[]).forEach((e=>{switch(e.name){case"postcss-import":s.push(["postcss-import","^15"]);break;case"postcss-url":s.push(["postcss-url","^10"]);break;case"postcss-preset-env":s.push(["postcss-preset-env","^9"]);break;case"autoprefixer":s.push(["autoprefixer","^10"]);break;case"cssnano":s.push(["cssnano","^6"])}})));L({feature:{name:"css",packages:s},features:o,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e,o=t.doc.features,i={};!0===o.app?.enabled&&(i.targets=i.targets||[],i.targets.push({src:"./src/app/index.html",dest:o.app.dir}),Reflect.has(o.app,"copy")||Reflect.has(o,"copy")||(o.copy=!0)),L({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:o,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"workbox",packages:[["rollup-plugin-workbox","^8"]],options:{generate:{swDest:"dist/app/esm/sw.js",globDirectory:"dist/app/esm",globPatterns:["**/*.{html,js,css,png,jpg}"],skipWaiting:!0,clientsClaim:!0}},explicit:!0},features:t.doc.features,packageDevDependencies:a})}(t),function(e){const{atom:t,packageDevDependencies:a}=e;L({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:t.doc.features,packageDevDependencies:a})}(t)}async function z({projectDir:t,name:a,setProgress:o,count:i=1}){let s;const r=$(["npm-pick-versions",a,i]),c=e.join(t,".cache"),p=e.join(c,r+".json");return n.existsSync(p)?(o&&o(`Picking npm version of ${a} from cache ...`),s=JSON.parse(n.readFileSync(p,"utf8"))):(o&&o(`Picking npm version of ${a} ...`),s=await C({name:a,count:i}),n.mkdirSync(c,{recursive:!0}),n.writeFileSync(p,JSON.stringify(s),"utf8")),s}async function B({atom:t,setProgress:a,context:o,packageDependencies:i}){await a({message:"Creating .gitignore"});const s={atom:t,packageDependencies:i},r=o.templateCommonDir,c=y.compile(n.readFileSync(e.resolve(r,".gitignore.njk"),"utf8"),y.configure(r)).render(s),p=o.projectDir,l=e.resolve(p,".gitignore");n.writeFileSync(l,c,"utf8")}async function J({atom:t,context:a,setProgress:o,Atom:i}){const s="readme.md",r=`Creating ${s}`;if(await o({message:r}),a.project?.readme){const t=a.projectDir,o={content:a.project.readme.doc.content},i=e.resolve(a.project.projectDir,"fnet/how-to.md");if(n.existsSync(i)){const e=n.readFileSync(i,"utf8");o.howto=e}const r=e.resolve(a.project.projectDir,"fnet/input.yaml");if(n.existsSync(r)){const e=await m({file:r,tags:a.tags});o.input=e.content}const c=a.templateCommonDir,p=y.compile(n.readFileSync(e.resolve(c,`${s}.njk`),"utf8"),y.configure(c)).render(o),l=e.resolve(t,`${s}`);n.writeFileSync(l,p,"utf8")}else if(t.id){const o=await i.first({type:"wiki",parent_id:t.id});if(!o||"markdown"!==o.doc?.["content-type"])return;const{content:r,...c}=o.doc,p={content:r},l=a.templateCommonDir,d=y.compile(n.readFileSync(e.resolve(l,`${s}.njk`),"utf8"),y.configure(l)).render(p),m=a.projectDir,u=e.resolve(m,`${s}`);n.writeFileSync(u,d,"utf8")}}var H=async e=>{const{atom:t,packageDependencies:a,context:o,deploymentProjectTarget:i,setProgress:s,deploymentProject:n,yamlTarget:r}=e;if(!0!==i.enabled)return;const c=i.type;try{if("lib"===c)await(await import("./index.DG8TqL-1.js")).default({...e});else if("red"===c)await(await import("./index.CmMM-Ek9.js")).default({...e});else if("npm"===c)await(await import("./index.CDt7klJc.js")).default({...e});else if("gcs"===c)await(await import("./index.UOds5XLl.js")).default({...e});else if("gitlab"===c)await(await import("./index.DI3yyTtl.js")).default({...e});else if("fnet-package"===c)await(await import("./index.Bfg4lyu-.js")).default({...e});else if("fnet-form"===c)await(await import("./index.Q-CYRcna.js")).default({...e});else if("fnet-node"===c)await(await import("./index.C2S9JYhS.js")).default({...e});else if("fnet-flow"===c)await(await import("./index.BuYxdKtK.js")).default({...e});else if("nextjs"===c)await(await import("./index.CDct_kkF.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("webos"===c)await(await import("./index.CMC8mlye.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("electron"===c)await(await import("./index.xd8c7XMr.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("docker"===c)await(await import("./index.D2N9YZmA.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("ios"===c)await(await import("./index.B5XE4ChJ.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("macos"===c)await(await import("./index.W6RYgypK.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else if("rust"===c)await(await import("./index.CzAV0S36.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0;else{if("pypi"!==c)return void console.warn(`No deployer found for type: ${c}`);await(await import("./index.C7saWH6d.js")).default({atom:t,target:i,onProgress:s,projectDir:o.projectDir,dependencies:a,context:o,yamlTarget:r}),n.isDirty=!0}}catch(e){throw console.error(`Error during deployment for type "${c}":`,e),e}};class X{#e;#t;#a;#o;#i;#s;#n;#r;#c;#p;#l;#d;#m;#u;#f;#g;#y;constructor(e){this.#e=new R,this.#t=e,this.#s=[],this.#n=[],this._expire_ttl=3600,this._expire_ttl_short=300,this.#y={packageDependencies:this.#s,packageDevDependencies:this.#n,setProgress:this.setProgress.bind(this),context:this.#t,Atom:b,registerToPackageManager:this.registerToPackageManager.bind(this)}}async _cache_set(e,t,a){this._redis_client&&await this._redis_client.SETEX(e,a||this._expire_ttl,JSON.stringify(t)).catch(console.error)}async initAuth(){this.#t.id&&(this.#r=await this.#e.init({config:this.#d}),this.#y.atomAccessToken=this.#r)}async initLibrary(){const e=this.#t.id;this.#a=this.#t.project?.libraryAtom||await b.get({id:e});let t=this.#a.doc.bundleName;t=t||(this.#a.doc.name||"").toUpperCase().replace(/[^A-Z0-9]/g,"_"),this.#a.doc.bundleName=t,this.#a.type=this.#a.type||"workflow.lib",this.#y.atom=this.#a}async initLibraryDir(){this.setProgress({message:"Initializing library directory."});const t=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const a=x({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of a)n.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let o=t;n.existsSync(o)||n.mkdirSync(o,{recursive:!0}),o=e.join(t,"src"),n.existsSync(o)||n.mkdirSync(o,{recursive:!0}),o=e.join(t,"src","default"),n.existsSync()||n.mkdirSync(o,{recursive:!0})}async initLibraryDirPython(){this.setProgress({message:"Initializing library directory."});const t=this.#t.projectDir;this.setProgress({message:"Cleaning project directory."});const a=x({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of a)n.rmSync(e,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let o=t;n.existsSync(o)||n.mkdirSync(o,{recursive:!0}),o=e.join(t,"src"),n.existsSync(o)||n.mkdirSync(o,{recursive:!0}),o=e.join(t,"src","default");const i=this.#t.projectSrcDir;if(!n.existsSync(o))try{"win32"===s.platform()?n.symlinkSync(i,o,"junction"):n.symlinkSync(i,o,"dir")}catch(e){throw new Error(`Couldn't create symlink. Error: ${e.message}`)}}async initNunjucks(){this.setProgress({message:"Initializing nunjucks."});const e=this.#t.templateDir;this.#o=y.configure(e,{watch:!1,dev:!0}),this.#y.njEnv=this.#o}async initLibs(){this.setProgress({message:"Initializing external libs."});const e=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id}];this.#i=e,await this.initAtomLibsAndDeps({libs:e,packageDependencies:this.#s})}async initLibsPython(){this.setProgress({message:"Initializing external libs."});const e=this.#a;e.protocol="local:",e.doc.dependencies=e.doc.dependencies||[],e.name=e.doc.name;const t=[{name:this.#a.doc.name,type:"atom",parent_id:this.#a.parent_id,atom:e}];this.#i=t}async initAtomLibsAndDeps({libs:e,packageDependencies:t}){const a=e.filter((e=>"atom"===e.type));for(let e=0;e<a.length;e++){const o=a[e],i=await this.findAtomLibrary({url:o.name});o.atom=i;const s=i.doc.dependencies?.filter((e=>void 0===e.repo||"npm"===e.repo));s?.forEach((e=>{const a=t.find((t=>t.package===e.package));a?"string"==typeof e.path?(a.path||[]).some((t=>t===e.path))||(a.path=a.path||[],a.path.push(e.path)):Array.isArray(e.path)&&e.path.forEach((e=>{(a.path||[]).some((t=>t===e))||(a.path=a.path||[],a.path.push(e))})):t.push(e)}))}t.sort(((e,t)=>e.package?.localeCompare(t.package)))}async findAtomLibrary({url:t}){const a=j({url:t});if(!a)throw new Error(`Invalid package name: ${t}`);if(a.protocol||(a.protocol=this.#l),"ac:"===a.protocol){const e=a.pathname.split("/");if(1===e.length)return await b.first({where:{name:t,parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===e.length){const t=await b.first({where:{name:e[0],parent_id:this.#d.env.ATOM_LIBRARIES_ID,type:"folder"}});return await b.first({where:{name:e[1],parent_id:t.id,type:"workflow.lib"}})}}else if("local:"===a.protocol){const t=this.#a;t.protocol="local:",t.doc.dependencies=t.doc.dependencies||[],t.name=t.doc.name;const a=e.resolve(this.#t.projectSrcDir,"index.js"),o=await v({file:a,recursive:!0}),i=t.doc.dependencies,s=o.all;for await(const e of s){if("npm"!==e.type)continue;if(i.find((t=>t.package===e.package)))continue;const t=await z({name:e.package,projectDir:this.#t.projectDir,setProgress:this.#y.setProgress});i.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return t}}async createAtomLibFiles({libs:t}){await this.setProgress({message:"Creating external lib files."}),this.#a.typesDir="./types";const a=t.filter((e=>"atom"===e.type));for(let t=0;t<a.length;t++){const o=a[t].atom,i=this.#t.projectDir;if("local:"===o.protocol){const t=e.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.js`),a=e.relative(e.join(this.#t.projectDir,"src","default"),t);if(!n.existsSync(t)){n.mkdirSync(e.dirname(t),{recursive:!0});let a="export default async (args)=>{\n";a+="}",n.writeFileSync(t,a,"utf8")}o.relativePath=a.split(e.sep).join("/"),this.#a.typesDir=`./types/${e.basename(i)}/src`}else{const t=e.join(i,"src","libs",`${o.id}.js`),a=o.doc.contents?.find((e=>"esm"===e.format))||o.doc;n.writeFileSync(t,a.content,"utf8")}}}async createAtomLibFilesPython({libs:t}){await this.setProgress({message:"Creating external lib files."});const a=t.filter((e=>"atom"===e.type));for(let t=0;t<a.length;t++){const o=a[t].atom;if("local:"===o.protocol){const t=e.resolve(this.#t.projectSrcDir,`${o.fileName||o.name}.py`);if(!n.existsSync(t)){n.mkdirSync(e.dirname(t),{recursive:!0});let a="def default():\n";a+=' print("Hello world!")\n',n.writeFileSync(t,a,"utf8")}}}}async createEngine(){await this.setProgress({message:"Creating engine file."});const t={libs:this.#i.filter((e=>"atom"===e.type)),libraryAtom:this.#a,atom:this.#a},a=this.#t.templateDir,o=y.compile(n.readFileSync(e.resolve(a,e.join("src","default","engine.js.njk")),"utf8"),this.#o).render(t),i=this.#t.projectDir,s=e.resolve(i,e.join("src","default","index.js"));n.writeFileSync(s,o,"utf8")}async createProjectYaml(){const t="node.yaml",a=`Creating ${t}`;await this.setProgress({message:a});const{content:o,...i}=this.#a.doc,s={content:c.stringify(i)},r=this.#t.templateDir,p=y.compile(n.readFileSync(e.resolve(r,`${t}.njk`),"utf8"),this.#o).render(s),l=this.#t.projectDir,d=e.resolve(l,`${t}`);n.writeFileSync(d,p,"utf8")}async deploy(){if(await this.setProgress({message:"Deploying."}),this.#t.project?.devops){const e=[this.#t.project?.devops];for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&await a.save()}}else if(this.#a.id){const e=await b.list({type:"library.deploy",parent_id:this.#a.id});for(let t=0;t<e.length;t++){let a=e[t];await this.deployProject({deploymentProject:a}),!0===a.isDirty&&(a=await b.update(a,{id:a.id}))}}}async deployProject(e){const{deploymentProject:t}=e,{yamlDocument:a}=t;if(t.doc.targets&&Array.isArray(t.doc.targets))throw new Error("Deployment project targets are deprecated. Please update targets in the yaml file.");const o=Object.keys(t.doc||{}),i=a||{};for(let e=0;e<o.length;e++){const a=t.doc[o[e]];a.name=o[e];const s=i.get(o[e]);await H({...this.#y,deploymentProject:t,deploymentProjectTarget:a,yamlTarget:s})}}async registerToPackageManager(e){const{target:t,packageJSON:a}=e;if(!this.#t.id)return;let o=await b.first({name:t.params.name,parent_id:this.#d.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:a.version}),await b.update(o,{id:o.id})):o=await b.create({parent_id:this.#d.env.ATOM_PACKAGES_ID,doc:{name:t.params.name,type:"pm",versions:[{v:a.version}]}})}async setProgress(e){const t="string"==typeof e?e:e?.message;console.log(k.blue(t)),await this._cache_set(this.#p,{status:"IN_PROGRESS",message:t})}async initNode(){await M(this.#y),await async function({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:o}){o("Initializing dependencies");const i=e.doc.dependencies||[];if(i.filter((e=>!e.dev)).forEach((e=>t.push(e))),i.filter((e=>e.dev)).forEach((e=>a.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";o("Fetching React versions"),a=`^${(await P({name:"react",groupBy:{major:!0}})).find((t=>t[0]===e.doc.features.react_version.toString()))[0]}`,t.push({package:"react",version:a}),t.push({package:"react-dom",version:a}),"workflow"===e.type&&(t.push({package:"@fnet/react-app",version:"^0.1"}),t.push({package:"@fnet/react-app-state",version:"^0.1"}))}e.doc.features.preact_enabled&&t.push({package:"preact",version:"^10"}),!0===e.doc.features.cli.enabled&&(t.push({package:"@fnet/args",version:"^0.1"}),a.push({package:"ajv",version:"^8"}),e.doc.features.cli.fargs&&!1!==e.doc.features.cli.fargs?.enabled&&t.push({package:"@fnet/config",version:"0.2.21"})),e.doc.features.render&&!1!==e.doc.features.render.enabled&&a.push({package:"@flownet/lib-render-templates-dir",version:"0.1.19"}),a.push({package:"@babel/core",version:"^7"}),a.push({package:"@rollup/plugin-commonjs",version:"^28"}),a.push({package:"@rollup/plugin-node-resolve",version:"^16"}),a.push({package:"@rollup/plugin-replace",version:"^6"}),a.push({package:"rollup",version:"^4"}),e.doc.features.dts_enabled&&a.push({package:"rollup-plugin-dts",version:"^6"}),a.push({package:"rollup-plugin-peer-deps-external",version:"^2"}),a.push({package:"@rollup/plugin-alias",version:"^5"}),a.push({package:"fs-extra",version:"^11"}),e.doc.features.babel_enabled&&(a.push({package:"@rollup/plugin-babel",version:"^6"}),a.push({package:"@babel/preset-env",version:"^7"}),a.push({package:"@babel/preset-react",version:"^7"}),e.doc.features.babel?.options?.plugins?.forEach((e=>{switch(e[0]){case"@babel/plugin-proposal-decorators":a.push({package:"@babel/plugin-proposal-decorators",version:"^7"});break;case"@babel/plugin-proposal-class-properties":a.push({package:"@babel/plugin-proposal-class-properties",version:"^7"});break;case"@babel/plugin-proposal-private-methods":a.push({package:"@babel/plugin-proposal-private-methods",version:"^7"});break;case"@babel/plugin-proposal-private-property-in-object":a.push({package:"@babel/plugin-proposal-private-property-in-object",version:"^7"});break;case"@babel/plugin-proposal-optional-chaining":a.push({package:"@babel/plugin-proposal-optional-chaining",version:"^7"})}}))),a.push({package:"@fnet/rollup-plugin-delete",version:"0.1.10"}),e.doc.features.browsersync_enabled&&a.push({package:"@fnet/rollup-plugin-browsersync",version:"0.1.11"})}(this.#y),await this.initLibraryDir(),await this.initNunjucks(),await this.initLibs()}async initPython(){await async function(e){const{atom:t,context:a,setProgress:o}=e;o("Initializing features..."),t.doc.features=t.doc.features||{};const i=t.doc.features;!1===i.cli?i.cli={enabled:!1}:(i.cli,i.cli={enabled:!0}),i.cli.enabled=!0===i.cli.enabled&&(!1===t.doc.features.form_enabled||!0===i.cli.extend||!0===i.cli.enabled)}(this.#y),await async function({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:o}){o("Initializing dependencies")}(this.#y),await this.initLibraryDirPython(),await this.initNunjucks(),await this.initLibsPython()}async nodeBuild(){this.#u&&(await this.createAtomLibFiles({libs:this.#i}),await this.createEngine(),await this.createProjectYaml(),await J(this.#y),await async function({atom:t,setProgress:a,context:o,packageDependencies:i}){await a({message:"Creating tsconfig.json."});const s={atom:t,packageDependencies:i},r=o.templateCommonDir,c=y.compile(n.readFileSync(e.resolve(r,"tsconfig.json.njk"),"utf8"),y.configure(r)).render(s),p=o.projectDir,l=e.resolve(p,"tsconfig.json");n.writeFileSync(l,c,"utf8")}(this.#y),await B(this.#y),await async function({atom:t,setProgress:a,context:o,njEnv:i}){if(!0!==t.doc.features.cli.enabled)return;await a({message:"Creating yargs."});let s={};if(s=t.doc.input?t.doc.input:{type:"object",properties:{},required:[]},t.doc.features.cli.fargs&&!1!==t.doc.features.cli.fargs?.enabled){const e=t.doc.features.cli.fargs,a={type:"string",description:"Config name to load args",hidden:!1},o={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(e,"default")&&(a.default=e.default),s.properties&&(s.properties.fargs=a,s.properties.ftag=o)}const r={options:s,imports:[],atom:t},c=o.templateDir,p=y.compile(n.readFileSync(e.resolve(c,"src/default/to.args.js.njk"),"utf8"),i).render(r),l=o.projectDir,d=e.resolve(l,"src/default/to.args.js");n.writeFileSync(d,p,"utf8");const m=new E({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});F(m);const u=m.compile(s),f=A(m,u);n.writeFileSync(e.resolve(l,"src/default/validate_input.js"),f,"utf8")}(this.#y),await async function({atom:t,setProgress:a,context:o,packageDependencies:i}){if(!0!==t.doc.features.cli.enabled)return;await a({message:"Creating cli."});const s={atom:t,packageDependencies:i},r=o.templateDir,c=e.resolve(o.projectDir,"src/cli");n.existsSync(c)||n.mkdirSync(c,{recursive:!0}),await g({pattern:["index.js.njk"],dir:e.resolve(r,"src/cli"),outDir:c,context:s})}(this.#y),await async function({atom:t,setProgress:a,context:o,packageDependencies:i}){if(!0!==t.doc.features.app.enabled)return;await a({message:"Creating app folder"});const s={atom:t,packageDependencies:i,ts:Date.now()},r=o.templateDir,c=e.resolve(o.projectDir,"src/app");n.existsSync(c)||n.mkdirSync(c,{recursive:!0});let p=["index.js.njk"];!1!==t.doc.features.app.html&&p.push("index.html.njk"),await g({pattern:p,dir:e.resolve(r,"src/app"),outDir:c,context:s})}(this.#y),await async function({atom:t,setProgress:a,context:o,packageDependencies:i}){await a({message:"Creating rollup file."});const s={atom:t,packageDependencies:i},r=e.resolve(o.projectDir,"src","default/index.js");if(!n.existsSync(r))throw new Error(`Entry file not found: ${r}`);const c=(await v({file:r,recursive:!0})).all.filter((e=>"node"===e.type)).map((e=>e.path)),p=t.doc.features.rollup_output,l=Object.keys(p);for(let e=0;e<l.length;e++){const t=p[l[e]];if(!0===t.browser&&c.length>0){t.globals_enabled=!0,t.globals=t.globals||[],t.globals=t.globals.concat(c.map((e=>({key:e,value:e})))),t.alias_enabled=!0,t.alias=t.alias||{},t.alias.entries=t.alias.entries||{};for(let e=0;e<c.length;e++){const a=c[e];t.alias.entries[a]=`node:${a}`,t.alias.entries[`node:${a}`]=a}t.external_enabled=!0,t.external=t.external||[],t.external=t.external.concat(c)}}const d=o.templateCommonDir;let m=y.compile(n.readFileSync(e.resolve(d,"rollup.config.mjs.njk"),"utf8"),y.configure(d)).render(s);const u=o.projectDir;let f=e.resolve(u,"rollup.config.mjs");n.writeFileSync(f,m,"utf8")}(this.#y),await async function({atom:t,context:a,packageDependencies:o,packageDevDependencies:i,setProgress:s}){await s({message:"Creating package.json."}),o.filter((e=>!0===e.dev)).forEach((e=>{i.find((t=>t.package===e.package))||i.push(e);const t=o.findIndex((t=>t.package===e.package));o.splice(t,1)}));const r=o.find((e=>"react"===e.package)),c=o.find((e=>"react-dom"===e.package));r&&!c?o.push({package:"react-dom",version:r.version}):r&&c&&(c.version=r.version),r&&t.doc.features.react_version>=17&&(o.find((e=>"@emotion/react"===e.package))||o.push({package:"@emotion/react",version:"^11"}),o.find((e=>"@emotion/styled"===e.package))||o.push({package:"@emotion/styled",version:"^11"}));const p=[];!0===t.doc.features.app.enabled&&p.push({file:e.resolve(a.projectDir,"src/app/index.js"),dev:!1!==t.doc.features.app.dev}),!0===t.doc.features.cli.enabled&&p.push({file:e.resolve(a.projectDir,"src/cli/index.js"),dev:!1!==t.doc.features.cli.dev});for await(const e of p){const t=e.file;if(!n.existsSync(t))throw new Error(`App file not found: ${t}`);const r=(await v({file:t,recursive:!0})).all;for await(const t of r){if("npm"!==t.type)continue;if(o.find((e=>e.package===t.package)))continue;if(i.find((e=>e.package===t.package)))continue;const n=await z({name:t.package,projectDir:a.projectDir,setProgress:s});(!0===e.dev?i:o).push({package:t.package,subpath:t.subpath,version:n.minorRange,type:"npm"})}}const l={atom:t,packageDependencies:o,packageDevDependencies:i},d=a.templateCommonDir,m=y.compile(n.readFileSync(e.resolve(d,"package.json.njk"),"utf8"),y.configure(d)).render(l),u=a.projectDir,f=e.resolve(u,"package.json");n.writeFileSync(f,m,"utf8");const g=e.resolve(a.project.projectDir,"fnet");if(n.existsSync(g)){const t=e.resolve(a.projectDir,"fnet");n.existsSync(t)||n.mkdirSync(t);const o=n.readdirSync(g);for(const a of o){const o=e.resolve(g,a);if(!n.lstatSync(o).isFile())continue;const i=e.resolve(t,a);n.copyFileSync(o,i)}}}(this.#y),await async function({setProgress:t,context:a}){const o=a.projectDir;await t({message:"Prettifiying source files."});let i=e.join("src","**","*");await f({commands:{steps:[`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`],wdir:o}})}(this.#y),await async function({atom:e,setProgress:t,context:a}){if(!e.doc.features.dts_enabled)return;const o=a.projectDir;if(await t({message:"Creating .d.ts"}),O("bun")){if(0!==(await d("bunx tsc",{cwd:o})).code)throw new Error("Couldnt create .d.ts files.")}else if(0!==(await d("npx tsc",{cwd:o})).code)throw new Error("Couldnt create .d.ts files.")}(this.#y),this.#f&&(await async function({setProgress:e,atom:t,context:a}){const o=a.projectDir;if(await e({message:"Installing npm packages."}),O("bun")){if(0!==(await d(`bun install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}else if(0!==(await d(`npm install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}(this.#y),await async function({setProgress:e,context:t}){const a=t.projectDir;if(await e({message:"Building main project."}),0!==(await d("npm run build",{cwd:a})).code)throw new Error("Couldnt build project.")}(this.#y),this.#g&&await this.deploy()))}async pythonBuild(){this.#u&&(await this.createAtomLibFilesPython({libs:this.#i}),await this.createProjectYaml(),await J(this.#y),await B(this.#y),await async function({atom:t,setProgress:a,context:o,packageDependencies:i}){if(!0!==t.doc.features.cli.enabled)return;await a({message:"Creating cli."});const s={atom:t,packageDependencies:i},r=o.templateDir,c=e.join(o.projectDir,"src","cli");n.existsSync(c)||n.mkdirSync(c,{recursive:!0}),await g({pattern:["index.py.njk","__init__.py.njk"],dir:e.join(r,"src","cli"),outDir:c,context:s})}(this.#y),this.#f&&(await async function(t){const{setProgress:a,atom:o,context:i}=t;a({message:"Installing Python packages"});const s=i.projectDir,n=await I({pythonVersion:"3.12",packages:[{package:"fnet-import-parser",version:"0.1.9"}]}),{errors:r,result:c}=await n.runBin("fnet_import_parser",["--entry_file",e.join(s,"src","default","index.py")],{captureName:"result"});if(r)throw new Error(r.format());const p=JSON.parse(c.items[0].stdout),l=p.required["third-party"]?.map((e=>({package:e.metadata?.package||e.path,version:e.metadata?.version||void 0,channel:e.metadata?.channel||void 0})))||[],d=o.doc.dependencies||[];for(const e of l)d.some((t=>t.package===e.package))||d.push(e);const m=e.join(s,".conda"),u=await I({envDir:m,pythonVersion:o.doc.features.runtime.version||"3.12",packages:d});i.pythonEnv=u,t.packageDependencies=d;const f=o.doc.features.render?.dirs||[];for(const t of f)t.dir=e.resolve(s,t.dir),t.outDir=e.resolve(s,t.outDir),await g(t);let y={params:{}};y.params.package_name=o.doc.name,y.params.version="0.1.0",y.params.bin_name=o.doc.name,y.params.python_requires=o.doc.features.runtime.version||">=3.12",y.params.dependencies=d,y.params.scripts=JSON.stringify({cli:`PYTHONPATH='${e.join("src")}' '${e.relative(i.projectDir,u.pythonBin)}' '${e.join("src","cli","index.py")}'`}),await g({pattern:["setup.py.njk","package.json.njk","pyproject.toml.njk"],dir:i.templateDir,outDir:i.projectDir,context:y})}(this.#y),this.#g&&await this.deploy()))}async init(){this._redis_client=await async function(){if(!await D({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=_.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}(),this.#c=this.#t.buildId||h(),this.#y.buildId=this.#c,this.#m=this.#t.mode,this.#u=["all","deploy","build","file"].includes(this.#m),this.#f=["all","deploy","build"].includes(this.#m),this.#g=["all","deploy"].includes(this.#m),this.#l=this.#t.protocol,this.#p="BUILD:"+this.#c,this.#d=(await u({optional:!0,name:this.#t.atomConfig||"atom",dir:this.#t.projectDir,tags:this.#t.tags}))?.data;try{await this.setProgress({message:"Initialization started."}),await this.initAuth(),await this.initLibrary(),"node"===this.#a.doc.features.runtime.type?await this.initNode():"python"===this.#a.doc.features.runtime.type&&await this.initPython()}catch(e){throw await this._cache_set(this.#p,{status:"FAILED",message:e?.message||e}),e}}async build(){try{"node"===this.#a.doc.features.runtime.type?await this.nodeBuild():"python"===this.#a.doc.features.runtime.type&&await this.pythonBuild(),await this._cache_set(this.#p,{status:"COMPLETED"})}catch(e){throw await this._cache_set(this.#p,{status:"FAILED",message:e.message||e}),console.log(e),e}}}const K=e.dirname(o(import.meta.url)),q=process.cwd();u({name:["redis"],dir:q,optional:!0});const U=function({baseDir:t}){let a=t=t||T;for(;a!==e.parse(a).root;){const t=e.join(a,"node_modules");if(n.existsSync(t))return t;a=e.dirname(a)}return null}({baseDir:K}),Y="win32"===process.platform?";":":";U&&(process.env.PATH=`${e.join(U,"/.bin")}${Y}${process.env.PATH}`);let G=p(process.argv.slice(2)).command("create","Create flow node project",(e=>e.option("name",{type:"Project name",demandOption:!0}).option("vscode",{type:"boolean",default:!0,alias:"vs"}).option("runtime",{type:"string",default:"node",choices:["node","python"]})),(async t=>{try{const a=e.resolve(U,"@fnet/cli-project-node/dist/template/project"),o=e.resolve(q,t.name);n.existsSync(o)||n.mkdirSync(o),await g({dir:a,outDir:o,context:{name:t.name,runtime:t.runtime,platform:s.platform()},copyUnmatchedAlso:!0});let i=await d("fnode build",{cwd:o});if(0!==i.code)throw new Error("Failed to build project.");if(O("git")&&(i=await d("git init --initial-branch=main",{cwd:o}),0!==i.code))throw new Error("Failed to initialize git.");if(O("code")&&t.vscode&&(i=await d(`cd ${o} && code .`),0!==i.code))throw new Error("Failed to open vscode.");console.log("Creating project succeeded!"),process.exit(0)}catch(e){console.error("Initialization failed!",e.message),process.exit(1)}})).command("project","Flow node project",(e=>e.option("update",{type:"boolean",default:!1,alias:"-u"})),(async t=>{try{const a=e.resolve(U,"@fnet/cli-project-node/dist/template/project"),o=process.cwd(),i=await Z(t);if(t.update){if(await g({dir:a,outDir:o,context:{name:i.project.projectFileParsed.name,runtime:i.project.runtime.type,platform:s.platform()},copyUnmatchedAlso:!0}),0!==(await d("fnode build",{cwd:o})).code)throw new Error("Failed to build project.");console.log("Updating project succeeded!")}process.exit(0)}catch(e){console.error("Project failed.",e.message),process.exit(1)}})).command("build","Build flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("mode",{type:"string",default:"build",choices:["all","file","build","deploy","bpmn"]}).option("ftag",{type:"array"})),(async e=>{try{const t=await Z(e),a=new X(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("deploy","Build and deploy flow node project",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Z({...e,mode:"all"}),a=new X(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}})).command("file","Just create files",(e=>e.option("id",{type:"string"}).option("buildId",{type:"string",alias:"bid"}).option("ftag",{type:"array"})),(async e=>{try{const t=await Z({...e,mode:"file"}),a=new X(t);await a.init(),await a.build(),console.log("Building library succeeded!"),process.exit(0)}catch(e){console.error("Building library failed!",e.message),process.exit(1)}}));function V(e,{name:t,bin:a,preArgs:o=[]}){return e.command(`${t||a} [commands..]`,`${a} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Z(e),{projectDir:s}=t,n=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,r=process.argv.slice(3).map(n);i(a,[...o,...r],{cwd:s,stdio:"inherit",shell:!0}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}function W(t,{name:a,bin:o,preArgs:s=[]}){return t.command(`${a||o} [commands..]`,`${o} ${s.join(" ")}`,(e=>e.help(!1).version(!1)),(async t=>{try{const n=await Z(t),{projectDir:r}=n,c=e=>e.includes(" ")?"win32"===process.platform?`"${e.replace(/(["^])/g,"^$1")}"`:`"${e.replace(/(["\\$`])/g,"\\$1")}"`:e,p=process.argv.slice(3).map(c);o=e.join(r,".conda","bin",o||a);i(o,[...s,...p],{cwd:r,stdio:"inherit",shell:!0,env:{PYTHONPATH:r}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Z(t){if(t.id)return{id:t.id,buildId:t.buildId,mode:t.mode,protocol:t.protocol||"ac:",templateDir:e.resolve(U,"./@fnet/cli-project-node/dist/template/default"),templateCommonDir:e.resolve(U,"./@fnet/cli-project-common/dist/template/default"),projectDir:e.resolve(q,`./.output/${t.id}`),tags:t.ftag};{const a=await async function({tags:t}){const a=e.resolve(q,"node.yaml");if(!n.existsSync(a))throw new Error("node.yaml file not found in current directory.");const{raw:o,parsed:i}=await m({file:a,tags:t}),s=e.dirname(a);i.features=i.features||{};const r=i.features;r.runtime=r.runtime||{},r.runtime.type=r.runtime.type||"node","python"===r.runtime.type?r.runtime.template=r.runtime.template||"python":r.runtime.template=r.runtime.template||"default";const p={libraryAtom:{doc:{...i},fileName:"index"},projectDir:s,projectFilePath:a,projectFileContent:o,projectFileParsed:i,runtime:r.runtime};let l=e.resolve(s,"fnet/targets.yaml");if(!n.existsSync(l)&&(l=e.resolve(s,"node.devops.yaml"),n.existsSync(l))){const t=e.resolve(s,"fnet");n.existsSync(t)||n.mkdirSync(t),n.copyFileSync(l,e.resolve(s,"fnet/targets.yaml")),n.unlinkSync(l)}if(n.existsSync(l)){const{raw:e,parsed:a}=await m({file:l,tags:t}),o=c.parseDocument(e);p.devops={filePath:l,fileContent:e,yamlDocument:o,doc:{...a},type:"library.deploy",save:async()=>{n.writeFileSync(p.devops.filePath,o.toString())}}}const d=e.resolve(s,"readme.md");if(n.existsSync(d)){const e=n.readFileSync(d,"utf8");p.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return p}({tags:t.ftag});return{buildId:t.buildId,mode:t.mode,protocol:t.protocol||"local:",templateDir:e.resolve(U,`./@fnet/cli-project-node/dist/template/${a.runtime.template}`),templateCommonDir:e.resolve(U,`./@fnet/cli-project-common/dist/template/${a.runtime.template}`),projectDir:e.resolve(a.projectDir,"./.workspace"),projectSrcDir:e.resolve(a.projectDir,"./src"),project:a,tags:t.ftag}}}G=G.command("input [name]","Create or modify an input config file",(e=>e.positional("name",{type:"string",demandOption:!1}).help(!1).version(!1)),(async t=>{try{const a=await Z(t),{project:o}=a,{projectDir:i,projectFileParsed:s}=o,r=s.input;if(!r)throw new Error("Config schema not found in project file.");if(!Reflect.has(t,"name")){const{inputName:e}=await l({type:"input",name:"inputName",message:"Input name:",initial:"dev"});t.name=e}const c=e.resolve(i,".fnet");n.existsSync(c)||n.mkdirSync(c);const p=e.resolve(c,`${t.name}.fnet`),d=n.existsSync(p),m=(await import("@fnet/object-from-schema")).default,u=await m({schema:r,format:"yaml",ref:d?p:void 0});n.writeFileSync(p,u)}catch(e){console.error(e.message),process.exit(1)}})),G=V(G,{bin:"npm"}),G=V(G,{bin:"node"}),G=V(G,{bin:"bun"}),G=V(G,{name:"serve",bin:"npm",preArgs:["run","serve","--"]}),G=V(G,{name:"watch",bin:"npm",preArgs:["run","watch","--"]}),G=V(G,{name:"app",bin:"npm",preArgs:["run","app","--"]}),G=V(G,{name:"cli",bin:"npm",preArgs:["run","cli","--"]}),G=V(G,{bin:"npx"}),G=V(G,{bin:"cdk"}),G=V(G,{bin:"aws"}),G=function(e,{name:t,preArgs:a=[]}){return e.command(`${t} <config> <command> [options..]`,"Run a command with a config context",(e=>e.positional("config",{type:"string"}).positional("command",{type:"string"}).help(!1).version(!1)),(async e=>{try{const t=await Z(e),{projectDir:o}=t,s=e.config,r=await u({name:s,dir:o,transferEnv:!1,optional:!0,tags:t.tags}),c=r?.data?.env||void 0,p=e.command,l=process.argv.slice(5);i(p,[...a,...l],{cwd:n.existsSync(o)?o:q,stdio:"inherit",shell:!0,env:{...process.env,...c}}).on("close",(e=>{process.exit(e)}))}catch(e){console.error(e.message),process.exit(1)}}))}(G,{name:"with"}),G=function(e,{name:t,preArgs:a=[]}){return e.command(`${t} group [options..]`,"Run a command group.",(e=>e.positional("group",{type:"string"}).option("ftag",{type:"array"}).help(!1).version(!1)),(async e=>{try{const t=await Z(e),{project:a}=t,{projectFileParsed:o}=a,i=o.commands;if(!i)throw new Error("Commands not found in project file.");const s=i[e.group];if(!s)throw new Error(`Command group '${e.group}' not found in project file.`);await f({commands:s})}catch(e){console.error(e.message),process.exit(1)}}))}(G,{name:"run"}),G=W(G,{name:"python"}),G=W(G,{name:"python3"}),G=W(G,{name:"pip"}),G=W(G,{name:"pip3"}),G.demandCommand(1,"You need at least one command before moving on").help().argv;export{O as w};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fnet/cli",
3
- "version": "0.101.2",
3
+ "version": "0.102.0",
4
4
  "files": [
5
5
  "dist"
6
6
  ],
@@ -69,6 +69,7 @@
69
69
  "redis": "^4.7.0",
70
70
  "semver": "^7.7.1",
71
71
  "set-value": "^4.1.0",
72
+ "tsc": "^2.0.4",
72
73
  "typescript": "^5.8.2",
73
74
  "yaml": "^2.7.1",
74
75
  "yargs": "^17.7.2"
@@ -1 +0,0 @@
1
- import e from"semver";import r from"@fnet/config";import o from"fs";import t from"@fnet/shelljs";import n from"form-data";async function i({setProgress:i,context:s,deploymentProject:a,deploymentProjectTarget:c,yamlTarget:d}){await i({message:"Deploying it as fnet node."});const{file:f,data:p}=await r({name:c.config||"fnet-node",dir:s.project.projectDir,tags:s.tags});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${f}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${f}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${f}`);const m=`${p.env.ATOM_API_URL}/v1/auth/token`,w=p.env.ATOM_API_USERNAME,A=p.env.ATOM_API_PASSWORD,h=await fetch(m,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:w,password:A})});if(!h.ok)throw new Error(`Failed to fetch token: ${h.statusText}`);const _=await h.json(),l=_?.access_token;if(!l)throw new Error(`Invalid access_token from ${m}`);a.isDirty=!0;const u=e.inc(c.version,"patch");c.params.version=u,c.version=u,d.set("version",u);const v=`${p.env.ATOM_API_URL}/v1/service/fnet-node/publish`,T=await fetch(v,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${l}`},body:JSON.stringify({name:c.params.name,version:c.params.version,docs:c.params.docs,configs:c.params.configs})});if(!T.ok)throw new Error(`Error publishing fnet node: ${T.statusText}`);const E=await T.json();if(E?.error)throw new Error("Error publishing fnet node.");const O=E?.upload.id;let P="fnet-dir-zipper";P+=` --sourceDir='${s.project.projectDir}'`,P+=" --pattern=**/*",P+=" --stdout_format=json";const g=await t(P);if(0!==g.code)throw new Error(g.stderr);const S=JSON.parse(g.stdout).path;let M=new n;M.append("file",o.createReadStream(S));const $=await fetch(`${p.env.ATOM_API_URL}/v1/service/upload/single/${O}`,{method:"POST",headers:{...M.getHeaders(),Authorization:`Bearer ${l}`},body:M});if(!$.ok)throw new Error(`Error uploading fnet node: ${$.statusText}`);const j=await $.json();if(j?.error)throw new Error("Error uploading fnet node.")}export{i as default};
@@ -1 +0,0 @@
1
- import e from"fs";import t from"path";import o from"@fnet/config";async function i({atom:i,Atom:n,setProgress:r,context:a,packageDependencies:d,deploymentProject:c,deploymentProjectTarget:l}){await r({message:"Deploying it as workflow lib."});const s=(await o({name:"atom",dir:a.projectDir,tags:a.tags}))?.data;let f,p,y,m=l.deploy.name.split("/");if(1===m.length)p=s.env.ATOM_LIBRARIES_ID,y=l.deploy.name;else{if(2!==m.length)throw new Error("Wrong name path.");{const e=await n.first({where:{name:m[0],parent_id:s.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");p=e.id,y=m[1]}}if(!0===l.dryRun)return;if(c.isDirty=!0,l.deploy.id){if(f=await n.get({id:l.deploy.id}),!f)return}else{if(f=await n.create({parent_id:p,doc:{name:y,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!f)return;l.deploy.id=f.id}const w=a.projectDir;f.doc.contents=[{content:e.readFileSync(t.resolve(w,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:e.readFileSync(t.resolve(w,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:e.readFileSync(t.resolve(w,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],f.doc.name=y,f.doc.dependencies=d,"workflow.lib"===i.type?f.doc.subtype="library":"workflow"===i.type&&(f.doc.subtype="workflow"),f=await n.update(f,{id:f.id})}export{i as default};
@@ -1 +0,0 @@
1
- import e from"node:fs";import t from"node:path";import r from"semver";import o from"@fnet/shelljs";import i from"@fnet/config";import n from"@fnet/up-list-files";import s from"@fnet/object-from-schema";import m from"yaml";import{w as p}from"./index.js";import{fileURLToPath as a}from"node:url";import"child_process";import"@fnet/prompt";import"yargs";import"fs";import"@fnet/yaml";import"@fnet/shell-flow";import"@flownet/lib-render-templates-dir";import"nunjucks";import"lodash.clonedeep";import"isobject";import"redis";import"@flownet/lib-is-redis-online";import"node:crypto";import"@flownet/lib-atom-api-js";import"lodash.merge";import"@flownet/lib-parse-imports-js";import"@fnet/npm-list-versions";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"path";import"@flownet/lib-parse-node-url";import"bpmn-moddle";import"dagre";import"@fnet/expression";import"chalk";import"@fnet/list-files";import"@fnet/key-value-transformer";import"lodash.pick";import"lodash.omit";const l=t.dirname(a(import.meta.url));async function c({atom:a,setProgress:c,context:f,deploymentProject:d,deploymentProjectTarget:h,yamlTarget:y}){await c({message:"Deploying it as npm package."});const g=f.projectDir,j=t.resolve(g,"package.json"),u=e.readFileSync(j),v=JSON.parse(u);v.name=h.params.name,v.version=r.inc(h.version,"patch");const b=h.params.bin?.name||h.params.bin;!1!==h.params.bin?.enabled&&b&&"string"==typeof b&&(v.bin={[b]:"dist/cli/esm/index.js"}),delete v.scripts,delete v.devDependencies,v.scripts={serve:"npx serve ."},e.writeFileSync(j,JSON.stringify(v,null,"\t"));const w=h.config||"npm";let k=(await i({name:w,dir:f.projectDir,tags:f.tags,optional:!0}))?.data;if(!k){const r=n({dir:l,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===r.length)throw new Error("Couldnt find schema to create npm config");const o=await s({schema:r[0],tags:f.tags}),i=f.project.projectDir,p=t.resolve(i,".fnet");e.existsSync(p)||e.mkdirSync(p),e.writeFileSync(t.resolve(p,`${w}.fnet`),m.stringify(o)),k=o}if(e.writeFileSync(t.resolve(g,".npmrc"),`//registry.npmjs.org/:_authToken=${k.env.NPM_TOKEN}`),!0===h.dryRun)return;const S=p("bun")?"bun":"npm";if(0!==(await o(`${S} publish --access public`,{cwd:g})).code)throw new Error("Couldnt publish to npm");e.writeFileSync(j,u),d.isDirty=!0,h.version=v.version,y.set("version",v.version)}export{c as default};
@@ -1 +0,0 @@
1
- import r from"semver";import e from"@fnet/config";import o from"fs";import t from"@fnet/shelljs";import n from"form-data";async function i({setProgress:i,context:s,deploymentProject:a,deploymentProjectTarget:f,yamlTarget:c}){await i({message:"Deploying it as fnet flow."});const{file:p,data:w}=await e({name:f.config||"fnet-flow",dir:s.project.projectDir,tags:s.tags});if(!w.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${p}`);if(!w.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${p}`);if(!w.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${p}`);const d=`${w.env.ATOM_API_URL}/v1/auth/token`,m=w.env.ATOM_API_USERNAME,l=w.env.ATOM_API_PASSWORD,A=await fetch(d,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:m,password:l})});if(!A.ok)throw new Error(`Failed to fetch token: ${A.statusText}`);const h=await A.json(),_=h?.access_token;if(!_)throw new Error(`Invalid access_token from ${d}`);a.isDirty=!0;const u=r.inc(f.version,"patch");f.params.version=u,f.version=u,c.set("version",u);const v=`${w.env.ATOM_API_URL}/v1/service/fnet-flow/publish`,T=await fetch(v,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${_}`},body:JSON.stringify({name:f.params.name,version:f.params.version,docs:f.params.docs,configs:f.params.configs})});if(!T.ok)throw new Error(`Error publishing fnet flow: ${T.statusText}`);const E=await T.json();if(E?.error)throw new Error("Error publishing fnet flow.");const O=E?.upload.id;let P="fnet-dir-zipper";P+=` --sourceDir='${s.project.projectDir}'`,P+=" --pattern=**/*",P+=" --stdout_format=json";const g=await t(P);if(0!==g.code)throw new Error(g.stderr);const S=JSON.parse(g.stdout).path;let M=new n;M.append("file",o.createReadStream(S));const $=await fetch(`${w.env.ATOM_API_URL}/v1/service/upload/single/${O}`,{method:"POST",headers:{...M.getHeaders(),Authorization:`Bearer ${_}`},body:M});if(!$.ok)throw new Error(`Error uploading fnet flow: ${$.statusText}`);const j=await $.json();if(j?.error)throw new Error("Error uploading fnet flow.")}export{i as default};
@@ -1 +0,0 @@
1
- import e from"semver";import r from"@fnet/config";import o from"fs";import t from"@fnet/shelljs";import n from"form-data";async function i({setProgress:i,context:s,deploymentProject:a,deploymentProjectTarget:c,yamlTarget:d}){await i({message:"Deploying it as fnet node."});const{file:f,data:p}=await r({name:c.config||"fnet-node",dir:s.project.projectDir,tags:s.tags});if(!p.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${f}`);if(!p.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${f}`);if(!p.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${f}`);const m=`${p.env.ATOM_API_URL}/v1/auth/token`,w=p.env.ATOM_API_USERNAME,A=p.env.ATOM_API_PASSWORD,h=await fetch(m,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:w,password:A})});if(!h.ok)throw new Error(`Failed to fetch token: ${h.statusText}`);const _=await h.json(),l=_?.access_token;if(!l)throw new Error(`Invalid access_token from ${m}`);a.isDirty=!0;const u=e.inc(c.version,"patch");c.params.version=u,c.version=u,d.set("version",u);const v=`${p.env.ATOM_API_URL}/v1/service/fnet-node/publish`,T=await fetch(v,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${l}`},body:JSON.stringify({name:c.params.name,version:c.params.version,docs:c.params.docs,configs:c.params.configs})});if(!T.ok)throw new Error(`Error publishing fnet node: ${T.statusText}`);const E=await T.json();if(E?.error)throw new Error("Error publishing fnet node.");const O=E?.upload.id;let P="fnet-dir-zipper";P+=` --sourceDir='${s.project.projectDir}'`,P+=" --pattern=**/*",P+=" --stdout_format=json";const g=await t(P);if(0!==g.code)throw new Error(g.stderr);const S=JSON.parse(g.stdout).path;let M=new n;M.append("file",o.createReadStream(S));const $=await fetch(`${p.env.ATOM_API_URL}/v1/service/upload/single/${O}`,{method:"POST",headers:{...M.getHeaders(),Authorization:`Bearer ${l}`},body:M});if(!$.ok)throw new Error(`Error uploading fnet node: ${$.statusText}`);const j=await $.json();if(j?.error)throw new Error("Error uploading fnet node.")}export{i as default};
@@ -1 +0,0 @@
1
- import t from"node:fs";import e from"node:path";import r from"semver";import o from"@fnet/shelljs";import i from"@fnet/config";import n from"@fnet/up-list-files";import s from"@fnet/object-from-schema";import m from"yaml";import{w as p}from"./index.js";import{fileURLToPath as a}from"node:url";import"path";import"child_process";import"@fnet/prompt";import"fs";import"os";import"@fnet/yaml";import"@fnet/shell-flow";import"@flownet/lib-render-templates-dir";import"node:os";import"nunjucks";import"node:crypto";import"@flownet/lib-atom-api-js";import"@flownet/lib-parse-node-url";import"@flownet/lib-parse-imports-js";import"@fnet/list-files";import"chalk";import"redis";import"@flownet/lib-is-redis-online";import"lodash.merge";import"@fnet/npm-list-versions";import"@fnet/npm-pick-versions";import"object-hash";import"ajv/dist/2020.js";import"ajv/dist/standalone/index.js";import"ajv-formats";import"@fnet/auto-conda-env";import"yargs";const l=e.dirname(a(import.meta.url));async function c({atom:a,setProgress:c,context:f,deploymentProject:d,deploymentProjectTarget:y,yamlTarget:g}){await c({message:"Deploying it as npm package."});const j=f.projectDir,h=e.resolve(j,"package.json"),u=t.readFileSync(h),v=JSON.parse(u);v.name=y.params.name,v.version=r.inc(y.version,"patch");const w=y.params.bin?.name||y.params.bin;!1!==y.params.bin?.enabled&&w&&"string"==typeof w&&(v.bin={[w]:"dist/cli/esm/index.js"}),delete v.scripts,delete v.devDependencies,v.scripts={serve:"npx serve ."},t.writeFileSync(h,JSON.stringify(v,null,"\t"));const b=y.config||"npm";let S=(await i({name:b,dir:f.projectDir,tags:f.tags,optional:!0}))?.data;if(!S){const r=n({dir:l,pattern:"@fnet/cli-project-schemas/dist/schemas/to-npm.yaml",absolute:!0});if(0===r.length)throw new Error("Couldnt find schema to create npm config");const o=await s({schema:r[0],tags:f.tags}),i=f.project.projectDir,p=e.resolve(i,".fnet");t.existsSync(p)||t.mkdirSync(p),t.writeFileSync(e.resolve(p,`${b}.fnet`),m.stringify(o)),S=o}if(t.writeFileSync(e.resolve(j,".npmrc"),`//registry.npmjs.org/:_authToken=${S.env.NPM_TOKEN}`),!0===y.dryRun)return;const k=p("bun")?"bun":"npm";if(0!==(await o(`${k} publish --access public`,{cwd:j})).code)throw new Error("Couldnt publish to npm");t.writeFileSync(h,u),d.isDirty=!0,y.version=v.version,g.set("version",v.version)}export{c as default};
@@ -1 +0,0 @@
1
- import e from"fs";import t from"path";import o from"@fnet/config";async function i({atom:i,Atom:n,setProgress:r,context:a,packageDependencies:d,deploymentProject:c,deploymentProjectTarget:l}){await r({message:"Deploying it as workflow lib."});const s=(await o({name:"atom",dir:a.projectDir,tags:a.tags}))?.data;let f,p,y,m=l.deploy.name.split("/");if(1===m.length)p=s.env.ATOM_LIBRARIES_ID,y=l.deploy.name;else{if(2!==m.length)throw new Error("Wrong name path.");{const e=await n.first({where:{name:m[0],parent_id:s.env.ATOM_LIBRARIES_ID,type:"folder"},limit:1});if(!e)throw new Error("Couldnt file lib folder.");p=e.id,y=m[1]}}if(!0===l.dryRun)return;if(c.isDirty=!0,l.deploy.id){if(f=await n.get({id:l.deploy.id}),!f)return}else{if(f=await n.create({parent_id:p,doc:{name:y,type:"workflow.lib","content-type":"javascript",dependencies:[],content:void 0,subtype:"workflow"}}),!f)return;l.deploy.id=f.id}const w=a.projectDir;f.doc.contents=[{content:e.readFileSync(t.resolve(w,"dist/default/esm/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"esm"},{content:e.readFileSync(t.resolve(w,"dist/default/cjs/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"cjs"},{content:e.readFileSync(t.resolve(w,"dist/default/iife/index.js"),{encoding:"utf8",flag:"r"}),"content-type":"javascript",format:"iife"}],f.doc.name=y,f.doc.dependencies=d,"workflow.lib"===i.type?f.doc.subtype="library":"workflow"===i.type&&(f.doc.subtype="workflow"),f=await n.update(f,{id:f.id})}export{i as default};
@@ -1 +0,0 @@
1
- import r from"semver";import e from"@fnet/config";import o from"fs";import t from"@fnet/shelljs";import n from"form-data";async function i({setProgress:i,context:s,deploymentProject:a,deploymentProjectTarget:f,yamlTarget:c}){await i({message:"Deploying it as fnet flow."});const{file:p,data:w}=await e({name:f.config||"fnet-flow",dir:s.project.projectDir,tags:s.tags});if(!w.env.ATOM_API_URL)throw new Error(`ATOM_API_URL is required in ${p}`);if(!w.env.ATOM_API_USERNAME)throw new Error(`ATOM_API_USERNAME is required in ${p}`);if(!w.env.ATOM_API_PASSWORD)throw new Error(`ATOM_API_PASSWORD is required in ${p}`);const d=`${w.env.ATOM_API_URL}/v1/auth/token`,m=w.env.ATOM_API_USERNAME,l=w.env.ATOM_API_PASSWORD,A=await fetch(d,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:m,password:l})});if(!A.ok)throw new Error(`Failed to fetch token: ${A.statusText}`);const h=await A.json(),_=h?.access_token;if(!_)throw new Error(`Invalid access_token from ${d}`);a.isDirty=!0;const u=r.inc(f.version,"patch");f.params.version=u,f.version=u,c.set("version",u);const v=`${w.env.ATOM_API_URL}/v1/service/fnet-flow/publish`,T=await fetch(v,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${_}`},body:JSON.stringify({name:f.params.name,version:f.params.version,docs:f.params.docs,configs:f.params.configs})});if(!T.ok)throw new Error(`Error publishing fnet flow: ${T.statusText}`);const E=await T.json();if(E?.error)throw new Error("Error publishing fnet flow.");const O=E?.upload.id;let P="fnet-dir-zipper";P+=` --sourceDir='${s.project.projectDir}'`,P+=" --pattern=**/*",P+=" --stdout_format=json";const g=await t(P);if(0!==g.code)throw new Error(g.stderr);const S=JSON.parse(g.stdout).path;let M=new n;M.append("file",o.createReadStream(S));const $=await fetch(`${w.env.ATOM_API_URL}/v1/service/upload/single/${O}`,{method:"POST",headers:{...M.getHeaders(),Authorization:`Bearer ${_}`},body:M});if(!$.ok)throw new Error(`Error uploading fnet flow: ${$.statusText}`);const j=await $.json();if(j?.error)throw new Error("Error uploading fnet flow.")}export{i as default};