@fnet/cli 0.111.0 → 0.111.1

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.
Files changed (155) hide show
  1. package/README.md +145 -0
  2. package/dist/fnet/index.DBSKvJyG.js +1 -0
  3. package/dist/fnet/index.DrwlOzAe.js +1 -0
  4. package/dist/fnet/index.js +1 -1
  5. package/dist/fnode/index.53yND1Av.js +1 -0
  6. package/dist/fnode/index.B1zLg4Y2.js +1 -0
  7. package/dist/fnode/index.B2LXSSn7.js +1 -0
  8. package/dist/fnode/index.BBrItYB9.js +1 -0
  9. package/dist/fnode/index.BSQp_bJN.js +1 -0
  10. package/dist/fnode/index.Bqzc7Bx8.js +1 -0
  11. package/dist/fnode/index.BwhWziH6.js +1 -0
  12. package/dist/fnode/index.CLlKzCGk.js +1 -0
  13. package/dist/fnode/index.Chvv_TJm.js +1 -0
  14. package/dist/fnode/index.D4KQB1ot.js +1 -0
  15. package/dist/fnode/index.DItyYiZ_.js +1 -0
  16. package/dist/fnode/index.DrwlOzAe.js +1 -0
  17. package/dist/fnode/index.js +1 -1
  18. package/dist/frun/index.js +126 -0
  19. package/package.json +8 -9
  20. package/template/fnet/bun/fnet/flows.yaml.njk +1 -0
  21. package/template/fnet/bun/fnet.yaml.njk +1 -0
  22. package/template/fnet/bun/src/app/index.html.njk +67 -0
  23. package/template/fnet/bun/src/app/index.js.njk +36 -0
  24. package/template/fnet/bun/src/cli/index.js.njk +44 -0
  25. package/template/fnet/bun/src/default/blocks/assign.js.njk +40 -0
  26. package/template/fnet/bun/src/default/blocks/call.js.njk +92 -0
  27. package/template/fnet/bun/src/default/blocks/for.js.njk +81 -0
  28. package/template/fnet/bun/src/default/blocks/form.js.njk +65 -0
  29. package/template/fnet/bun/src/default/blocks/jump.js.njk +31 -0
  30. package/template/fnet/bun/src/default/blocks/modules.js.njk +50 -0
  31. package/template/fnet/bun/src/default/blocks/operation.js.njk +24 -0
  32. package/template/fnet/bun/src/default/blocks/raise.js.njk +25 -0
  33. package/template/fnet/bun/src/default/blocks/return.js.njk +27 -0
  34. package/template/fnet/bun/src/default/blocks/steps.js.njk +56 -0
  35. package/template/fnet/bun/src/default/blocks/switch.js.njk +73 -0
  36. package/template/fnet/bun/src/default/blocks/tryexcept.js.njk +65 -0
  37. package/template/fnet/bun/src/default/engine.js.njk +79 -0
  38. package/template/fnet/bun/src/default/macros/block-body-header.js.njk +7 -0
  39. package/template/fnet/bun/src/default/macros/block-footer.js.njk +3 -0
  40. package/template/fnet/bun/src/default/macros/block-header.js.njk +14 -0
  41. package/template/fnet/bun/src/default/macros/block-library-header.js.njk +19 -0
  42. package/template/fnet/bun/src/default/macros/block-modules-header.js.njk +8 -0
  43. package/template/fnet/bun/src/default/macros/block-modules.js.njk +29 -0
  44. package/template/fnet/bun/src/default/macros/block-next-header.js.njk +6 -0
  45. package/template/fnet/bun/src/default/macros/block-next.js.njk +20 -0
  46. package/template/fnet/bun/src/default/macros/block-run-form.js.njk +32 -0
  47. package/template/fnet/bun/src/default/macros/block-run-header.js.njk +39 -0
  48. package/template/fnet/bun/src/default/macros/page.js.njk +8 -0
  49. package/template/fnet/bun/src/default/macros/workflow-header.js.njk +7 -0
  50. package/template/fnet/bun/src/default/to.args.js.njk +120 -0
  51. package/template/fnet/bun/src/default/workflow.js.njk +117 -0
  52. package/template/fnet/core/assert.js +6 -0
  53. package/template/fnet/core/message.js +3 -0
  54. package/template/fnet/core/object.js +43 -0
  55. package/template/fnet/core/print.js +1 -0
  56. package/template/fnet/core/sleep.js +5 -0
  57. package/template/fnet/node/.gitignore.njk +8 -0
  58. package/template/fnet/node/fnet/flows.yaml.njk +1 -0
  59. package/template/fnet/node/fnet.yaml.njk +1 -0
  60. package/template/fnet/node/package.json.njk +90 -0
  61. package/template/fnet/node/readme.md.njk +21 -0
  62. package/template/fnet/node/rollup.config.mjs.njk +363 -0
  63. package/template/fnet/node/rollup_config_external.njk +8 -0
  64. package/template/fnet/node/rollup_config_onwarn.njk +9 -0
  65. package/template/fnet/node/rollup_config_output_banner.njk +3 -0
  66. package/template/fnet/node/rollup_config_output_footer.njk +5 -0
  67. package/template/fnet/node/rollup_config_output_globals.njk +9 -0
  68. package/template/fnet/node/rollup_config_output_name.njk +3 -0
  69. package/template/fnet/node/rollup_config_plugins.njk +90 -0
  70. package/template/fnet/node/src/app/index.html.njk +67 -0
  71. package/template/fnet/node/src/app/index.js.njk +36 -0
  72. package/template/fnet/node/src/cli/index.js.njk +44 -0
  73. package/template/fnet/node/src/default/blocks/assign.js.njk +40 -0
  74. package/template/fnet/node/src/default/blocks/call.js.njk +92 -0
  75. package/template/fnet/node/src/default/blocks/for.js.njk +81 -0
  76. package/template/fnet/node/src/default/blocks/form.js.njk +65 -0
  77. package/template/fnet/node/src/default/blocks/jump.js.njk +31 -0
  78. package/template/fnet/node/src/default/blocks/modules.js.njk +50 -0
  79. package/template/fnet/node/src/default/blocks/operation.js.njk +24 -0
  80. package/template/fnet/node/src/default/blocks/raise.js.njk +25 -0
  81. package/template/fnet/node/src/default/blocks/return.js.njk +27 -0
  82. package/template/fnet/node/src/default/blocks/steps.js.njk +56 -0
  83. package/template/fnet/node/src/default/blocks/switch.js.njk +73 -0
  84. package/template/fnet/node/src/default/blocks/tryexcept.js.njk +65 -0
  85. package/template/fnet/node/src/default/engine.js.njk +79 -0
  86. package/template/fnet/node/src/default/macros/block-body-header.js.njk +7 -0
  87. package/template/fnet/node/src/default/macros/block-footer.js.njk +3 -0
  88. package/template/fnet/node/src/default/macros/block-header.js.njk +14 -0
  89. package/template/fnet/node/src/default/macros/block-library-header.js.njk +19 -0
  90. package/template/fnet/node/src/default/macros/block-modules-header.js.njk +8 -0
  91. package/template/fnet/node/src/default/macros/block-modules.js.njk +29 -0
  92. package/template/fnet/node/src/default/macros/block-next-header.js.njk +6 -0
  93. package/template/fnet/node/src/default/macros/block-next.js.njk +20 -0
  94. package/template/fnet/node/src/default/macros/block-run-form.js.njk +32 -0
  95. package/template/fnet/node/src/default/macros/block-run-header.js.njk +39 -0
  96. package/template/fnet/node/src/default/macros/page.js.njk +8 -0
  97. package/template/fnet/node/src/default/macros/workflow-header.js.njk +7 -0
  98. package/template/fnet/node/src/default/to.args.js.njk +120 -0
  99. package/template/fnet/node/src/default/workflow.js.njk +117 -0
  100. package/template/fnet/node/tsconfig.json.njk +16 -0
  101. package/template/fnet/project/.gitignore.njk +7 -0
  102. package/template/fnet/project/.vscode/launch.json +41 -0
  103. package/template/fnet/project/.vscode/tasks.json +46 -0
  104. package/template/fnet/project/fnet/flows.yaml.njk +4 -0
  105. package/template/fnet/project/fnet/targets.yaml.njk +7 -0
  106. package/template/fnet/project/fnet.yaml.njk +3 -0
  107. package/template/fnode/bun/.gitignore.njk +8 -0
  108. package/template/fnode/bun/build.js.njk +156 -0
  109. package/template/fnode/bun/fnode.yaml.njk +1 -0
  110. package/template/fnode/bun/package.json.njk +89 -0
  111. package/template/fnode/bun/readme.md.njk +21 -0
  112. package/template/fnode/bun/src/app/index-js-with-react-host.njk +50 -0
  113. package/template/fnode/bun/src/app/index-js-without-react-host.njk +23 -0
  114. package/template/fnode/bun/src/app/index.html.njk +67 -0
  115. package/template/fnode/bun/src/app/index.js.njk +9 -0
  116. package/template/fnode/bun/src/cli/index.js.njk +81 -0
  117. package/template/fnode/bun/src/default/engine.js.njk +17 -0
  118. package/template/fnode/bun/src/default/to.args.js.njk +120 -0
  119. package/template/fnode/bun/tsconfig.json.njk +16 -0
  120. package/template/fnode/node/.gitignore.njk +8 -0
  121. package/template/fnode/node/fnode.yaml.njk +1 -0
  122. package/template/fnode/node/package.json.njk +90 -0
  123. package/template/fnode/node/readme.md.njk +21 -0
  124. package/template/fnode/node/rollup.config.mjs.njk +363 -0
  125. package/template/fnode/node/rollup_config_external.njk +8 -0
  126. package/template/fnode/node/rollup_config_onwarn.njk +9 -0
  127. package/template/fnode/node/rollup_config_output_banner.njk +3 -0
  128. package/template/fnode/node/rollup_config_output_footer.njk +5 -0
  129. package/template/fnode/node/rollup_config_output_globals.njk +9 -0
  130. package/template/fnode/node/rollup_config_output_name.njk +3 -0
  131. package/template/fnode/node/rollup_config_plugins.njk +90 -0
  132. package/template/fnode/node/src/app/index-js-with-react-host.njk +50 -0
  133. package/template/fnode/node/src/app/index-js-without-react-host.njk +23 -0
  134. package/template/fnode/node/src/app/index.html.njk +67 -0
  135. package/template/fnode/node/src/app/index.js.njk +9 -0
  136. package/template/fnode/node/src/cli/index.js.njk +81 -0
  137. package/template/fnode/node/src/default/engine.js.njk +17 -0
  138. package/template/fnode/node/src/default/to.args.js.njk +120 -0
  139. package/template/fnode/node/tsconfig.json.njk +16 -0
  140. package/template/fnode/project/.gitignore.njk +11 -0
  141. package/template/fnode/project/.vscode/launch.json.njk +78 -0
  142. package/template/fnode/project/.vscode/tasks.json.njk +46 -0
  143. package/template/fnode/project/fnet/targets.yaml.njk +25 -0
  144. package/template/fnode/project/fnode.yaml.njk +12 -0
  145. package/template/fnode/python/.gitignore.njk +7 -0
  146. package/template/fnode/python/fnode.yaml.njk +1 -0
  147. package/template/fnode/python/package.json.njk +4 -0
  148. package/template/fnode/python/pyproject.toml.njk +3 -0
  149. package/template/fnode/python/readme.md.njk +12 -0
  150. package/template/fnode/python/setup.py.njk +19 -0
  151. package/template/fnode/python/src/cli/index.py.njk +25 -0
  152. package/template/schemas/to-npm.yaml +14 -0
  153. package/dist/fnet/index.DZbefC4O.js +0 -1
  154. package/dist/fnode/index.DrdnDArw.js +0 -1
  155. package/readme.md +0 -50
package/README.md ADDED
@@ -0,0 +1,145 @@
1
+ # @fnet/cli: Flownet CLI Tools
2
+
3
+ <p align="center">
4
+ <img src="https://raw.githubusercontent.com/fnetai/cli/main/assets/flownet-logo.png" alt="Flownet Logo" width="200"/>
5
+ </p>
6
+
7
+ <p align="center">
8
+ <b>Focus on functional code, let Flownet handle the rest</b>
9
+ </p>
10
+
11
+ <p align="center">
12
+ <a href="https://www.npmjs.com/package/@fnet/cli"><img src="https://img.shields.io/npm/v/@fnet/cli.svg" alt="npm version"></a>
13
+ <a href="https://www.npmjs.com/package/@fnet/cli"><img src="https://img.shields.io/npm/dm/@fnet/cli.svg" alt="npm downloads"></a>
14
+ <a href="https://github.com/fnetai/cli/blob/main/LICENSE"><img src="https://img.shields.io/github/license/fnetai/cli.svg" alt="license"></a>
15
+ </p>
16
+
17
+ ## Overview
18
+
19
+ Flownet is a revolutionary development framework that isolates non-functional components, allowing developers to focus solely on functional code. The `@fnet/cli` package provides command-line tools to create, build, and manage Flownet projects.
20
+
21
+ ### Key Features
22
+
23
+ - **Language Agnostic**: Support for multiple programming languages (JavaScript, Python, Go, Rust, C) in the same project
24
+ - **Runtime Flexibility**: Choose the best runtime for each task (Node.js, Python, Bun)
25
+ - **Unified Interface**: Consistent commands across different project types
26
+ - **Tag-Based Configuration**: Powerful conditional configuration with `--ftag` parameter
27
+ - **Isolated Workspace**: All build artifacts and dependencies are kept in `.workspace` directory
28
+
29
+ ## Installation
30
+
31
+ ```bash
32
+ # Using npm
33
+ npm install -g @fnet/cli
34
+
35
+ # Using yarn
36
+ yarn global add @fnet/cli
37
+
38
+ # Using bun
39
+ bun install -g @fnet/cli
40
+ ```
41
+
42
+ ## Quick Start
43
+
44
+ ### Create a New Project
45
+
46
+ ```bash
47
+ # Create a Node.js project
48
+ fnode create my-node-project
49
+
50
+ # Create a Python project
51
+ fnode create my-python-project --runtime python
52
+
53
+ # Create a Bun project
54
+ fnode create my-bun-project --runtime bun
55
+
56
+ # Create a workflow project
57
+ fnet create my-workflow-project
58
+ ```
59
+
60
+ ### Build and Run
61
+
62
+ ```bash
63
+ # Build the project
64
+ frun build
65
+
66
+ # Run the project
67
+ fnode cli
68
+
69
+ # Execute a command group from project file
70
+ frun <command-group> [--ftag <tags>]
71
+ ```
72
+
73
+ ## Project Types
74
+
75
+ Flownet supports two main project types:
76
+
77
+ ### fnode Project
78
+
79
+ An **fnode project** (Flow Node Project) is a classic/node-style project that focuses on creating reusable components or standalone applications. These projects:
80
+
81
+ - Use `fnode.yaml` as their configuration file
82
+ - Typically contain a single code file in the `src` directory
83
+ - Can be built with different runtimes (Node.js, Python, Bun)
84
+ - Support multiple programming languages simultaneously
85
+
86
+ ### fnet Project
87
+
88
+ An **fnet project** (Flow Project) is a workflow-oriented project that focuses on orchestrating multiple components. These projects:
89
+
90
+ - Use `fnet.yaml` as their configuration file
91
+ - Define workflows that connect multiple components
92
+ - Support complex data flows and transformations
93
+
94
+ ## CLI Tools
95
+
96
+ Flownet provides three main CLI tools:
97
+
98
+ - **`fnode`**: For Node/classic projects (uses `fnode.yaml`)
99
+ - **`fnet`**: For Workflow projects (uses `fnet.yaml`)
100
+ - **`frun`**: Unified interface that works with both project types (auto-detects project file)
101
+
102
+ ## Multi-Language Support
103
+
104
+ Flownet is evolving to support multiple programming languages simultaneously within the same project:
105
+
106
+ ```text
107
+ my-project/
108
+ ├── src/
109
+ │ ├── index.js # JavaScript implementation
110
+ │ ├── index.python # Python implementation
111
+ │ ├── index.go # Go implementation
112
+ │ ├── index.rs # Rust implementation
113
+ │ └── index.c # C implementation
114
+ ├── fnode.yaml # Project configuration file
115
+ └── .workspace/ # Build infrastructure (managed by CLI)
116
+ ```
117
+
118
+ This allows you to:
119
+
120
+ - Write your core logic once and migrate it to other languages as needed
121
+ - Choose the best language for each specific use case
122
+ - Start with one language for rapid prototyping, then migrate performance-critical parts to more efficient languages
123
+
124
+ ## Tag-Based Configuration
125
+
126
+ Both CLI tools support the `--ftag` parameter for powerful conditional configuration:
127
+
128
+ ```bash
129
+ frun build --ftag dev --ftag local
130
+ ```
131
+
132
+ This activates sections in your project file marked with `t::dev::` or `t::local::` tags:
133
+
134
+ ```yaml
135
+ # Base configuration
136
+ name: my-project
137
+
138
+ # Development environment configuration
139
+ t::dev::database:
140
+ url: "mongodb://localhost:27017"
141
+
142
+ # Production environment configuration
143
+ t::prod::database:
144
+ url: "mongodb://production-server:27017"
145
+ ```
@@ -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 s from"@fnet/object-from-schema";import n from"yaml";import{r as m,w as p}from"./index.js";import{fileURLToPath as a}from"node:url";import"node:child_process";import"node:os";import"tree-kill";import"yargs";import"@fnet/prompt";import"@fnet/yaml";import"@fnet/shell-flow";import"@flownet/lib-render-templates-dir";import"node:util";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";async function l({atom:a,setProgress:l,context:c,deploymentProject:d,deploymentProjectTarget:f,yamlTarget:y}){await l({message:"Deploying it as npm package."});const w=c.projectDir,b=t.resolve(w,"package.json"),h=e.readFileSync(b),j=JSON.parse(h);j.name=f.params.name,j.version=r.inc(f.version,"patch");const u=f.params.bin?.name||f.params.bin;!1!==f.params.bin?.enabled&&u&&"string"==typeof u&&(j.bin={[u]:"dist/cli/esm/index.js"}),delete j.scripts,delete j.devDependencies,j.scripts={serve:"npx serve ."},e.writeFileSync(b,JSON.stringify(j,null,"\t"));const g=f.config||"npm";let v=(await i({name:g,dir:c.projectDir,tags:c.tags,optional:!0}))?.data;if(!v){const r=m("./template/schemas/to-npm.yaml"),o=await s({schema:r,tags:c.tags}),i=c.project.projectDir,p=t.resolve(i,".fnet");e.existsSync(p)||e.mkdirSync(p),e.writeFileSync(t.resolve(p,`${g}.fnet`),n.stringify(o)),v=o}if(e.writeFileSync(t.resolve(w,".npmrc"),`//registry.npmjs.org/:_authToken=${v.env.NPM_TOKEN}`),!0!==f.dryRun){if(p("bun")){if(0!==(await o("bun publish --access public",{cwd:w})).code)throw new Error("Couldnt publish to npm")}else{if(0!==(await o("npm publish --access public",{cwd:w})).code)throw new Error("Couldnt publish to npm")}e.writeFileSync(b,h),d.isDirty=!0,f.version=j.version,y.set("version",j.version)}}t.dirname(a(import.meta.url)),process.cwd();export{l as default};
@@ -0,0 +1 @@
1
+ import e from"fs";import r from"path";import n from"@fnet/yaml";import t from"@fnet/shell-flow";async function o({projectType:e,group:r,tags:o,args:f,argv:i}){try{const m=await a(e),{parsed:s}=await n({file:m.path,tags:o}),c=s.commands;if(!c)throw new Error(`Commands section not found in ${m.name}`);const y=c[r];if(!y)throw new Error(`Command group '${r}' not found in ${m.name}`);await t({commands:y,context:{args:f,argv:i,projectType:m.type}})}catch(e){console.error(`Error: ${e.message}`),process.exit(1)}}async function a(n){const t=process.cwd(),o=r.resolve(t,"fnode.yaml"),a=r.resolve(t,"fnet.yaml");if("fnode"===n){if(e.existsSync(o))return{path:o,name:"fnode.yaml",type:"fnode"};throw new Error("fnode.yaml file not found in current directory")}if("fnet"===n){if(e.existsSync(a))return{path:a,name:"fnet.yaml",type:"fnet"};throw new Error("fnet.yaml file not found in current directory")}if(e.existsSync(o))return{path:o,name:"fnode.yaml",type:"fnode"};if(e.existsSync(a))return{path:a,name:"fnet.yaml",type:"fnet"};throw new Error("No project file (fnode.yaml or fnet.yaml) found in current directory")}export{a as detectProjectFile,o as runCommandGroup};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import e,{delimiter as t,join as o}from"node:path";import{fileURLToPath as n}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"tree-kill";import p from"yaml";import l from"yargs";import d from"@fnet/prompt";import f from"@fnet/shelljs";import m from"@fnet/yaml";import u from"@fnet/config";import h from"@fnet/shell-flow";import y from"@flownet/lib-render-templates-dir";import{promisify as w}from"node:util";import g from"nunjucks";import x from"lodash.clonedeep";import b from"isobject";import k from"redis";import v from"@flownet/lib-is-redis-online";import{randomUUID as j}from"node:crypto";import{Api as _,Atom as D}from"@flownet/lib-atom-api-js";import E from"lodash.merge";import S from"@flownet/lib-parse-imports-js";import P from"@fnet/npm-list-versions";import $ from"@fnet/npm-pick-versions";import T from"object-hash";import C from"ajv/dist/2020.js";import N from"ajv/dist/standalone/index.js";import F from"ajv-formats";import A from"@flownet/lib-parse-node-url";import O from"bpmn-moddle";import I from"dagre";import B 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";const z=e.dirname(n(import.meta.url));var q=e=>{const n=process.env.PATH||"",i="win32"===process.platform?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";"):[""],s=n.split(t);for(const t of s)for(const n of i){const i=o(t,"win32"===process.platform?e+n:e);if(r(i))return i}return null};const G=w(c);let W=!1;async function X(e,t){if(W)return;if(W=!0,!e.killed&&e.pid)try{await G(e.pid,"SIGTERM").catch((()=>{})),await new Promise((e=>setTimeout(e,500))),e.killed||await G(e.pid,"SIGKILL").catch((()=>{}))}catch(e){}await new Promise((e=>setTimeout(e,100)));const o="SIGINT"===t?130:"SIGTERM"===t?143:1;process.exit(o)}function U(e){["SIGINT","SIGTERM","SIGQUIT"].forEach((t=>{process.once(t,(async()=>{await X(e,t)}))})),process.on("uncaughtException",(async t=>{await X(e)})),process.on("unhandledRejection",(async t=>{await X(e)})),e.on("close",(e=>{W||process.exit(e)}))}class V{init({config:e,accessToken:t}){return new Promise(((o,n)=>{if(_.set_api_url(e.data.url),t)return _.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=>{_.set_req_token(e.access_token),o(e.access_token)})).catch((e=>{_.set_req_token(),n(e)}))}))}}function H({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=E(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 Y({dir:t,name:o="index"}){let n=e.resolve(t,`./${o}.tsx`);if(a.existsSync(n)||(n=e.resolve(t,`./${o}.ts`)),a.existsSync(n)||(n=e.resolve(t,`./${o}.jsx`)),a.existsSync(n)||(n=e.resolve(t,`./${o}.js`)),!a.existsSync(n))return{};const i=n,s=e.extname(n);return{file:i,ext:s,ts:".ts"===s||".tsx"===s,name:o}}async function Q(t){const{atom:o,context:n,setProgress:i}=t;i("Initializing features..."),o.doc.features=o.doc.features||{};const s=o.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(n.project.projectDir),r=Y({dir:e.resolve(a,"./app")});if(r.file){i("Parsing app entry imports...");let e=await S({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 S({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=Y({dir:e.resolve(a,"./cli")});if(c.file){i("Parsing cli entry imports...");let e=await S({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 S({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"===o.type){const t=Y({dir:e.resolve(a,"./src")});if(t.file){i("Parsing src entry imports...");let e=await S({file:t.file,recursive:!0}),o=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));s.src_uses_jsx=o,s.src_has_entry=!0,e=await S({file:t.file}),o=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),s.src_entry_uses_jsx=o,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===o.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===o.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=E({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=E(f,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=E({},s.replace_options||s.replace?.options||{}),Reflect.has(s.browsersync_options,"proxy")&&delete s.browsersync_options.server,s.rollup=s.rollup||{},s.rollup_output=E(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=E(s.browsersync_options,t.browsersync_options),t.replace_options=E(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"])}})));H({feature:{name:"css",packages:s},features:n,packageDevDependencies:o})}(t),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)),H({feature:{name:"copy",packages:[["rollup-plugin-copy","^3"],["chokidar","^3"]],options:i},features:n,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"wasm",packages:[["@rollup/plugin-wasm","^6"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"terser",packages:[["@rollup/plugin-terser","^0.4"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"json",packages:[["@rollup/plugin-json","^6"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"string",packages:[["rollup-plugin-string","^3"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"image",packages:[["@rollup/plugin-image","^3"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"analyzer",packages:[["rollup-plugin-analyzer","^3"]],options:{summaryOnly:!0,limit:12},explicit:!0},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"visualizer",packages:[["rollup-plugin-visualizer","^5"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"polyfill",packages:[["rollup-plugin-node-polyfills","^0.2"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"nunjucks",packages:[["@fnet/rollup-plugin-nunjucks","0.1.8"]]},features:t.doc.features,packageDevDependencies:o})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({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})}(t),function(e){const{atom:t,packageDevDependencies:o}=e;H({feature:{name:"gzip",packages:[["rollup-plugin-gzip","^4"]],explicit:!0},features:t.doc.features,packageDevDependencies:o})}(t)}async function Z({projectDir:t,name:o,setProgress:n,count:i=1}){let s;const r=T(["npm-pick-versions",o,i]),c=e.join(t,".cache"),p=e.join(c,r+".json");return a.existsSync(p)?(n&&n(`Picking npm version of ${o} from cache ...`),s=JSON.parse(a.readFileSync(p,"utf8"))):(n&&n(`Picking npm version of ${o} ...`),s=await $({name:o,count:i}),a.mkdirSync(c,{recursive:!0}),a.writeFileSync(p,JSON.stringify(s),"utf8")),s}var ee=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.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.DZbefC4O.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: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}},te={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 oe(e,t){return e.filter(((e,o,n)=>n.map((e=>e[t])).indexOf(e[t])===o))}function ne(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=ie({...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=ie({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=ie({...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=ie({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"}),n=ie({...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=ie({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:i.to});i.to=o.indexKey}}else{const n=ie({...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=ie({...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=ie({...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=[]}))}ne({...e,targetNodes:t.childs})}))}function ie(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 se(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 I.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)})),I.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,se({...e,targetNode:t,targetFlowElementsContainer:o,targetPlaneElement:a})}))}(e)}async function ae(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=oe(i,"to"),e.bpmn.outside=oe(s,"to"),e.bpmn.starts=oe(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}),ne({nodes:n,nodeIndex:o,root:t});const i=new O({atom:te}),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;se({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 re(e={}){return await ae(x(e))}async function ce({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=B({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 pe({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 le({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||x(e.definition),e.context.transform;for(const t of e.childs)t.context.transform=t.context.transform||x(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await n(t.definition.condition));await pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var de={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 ce({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=le},resolve:le};var fe={hits:async function({node:e}){return 1===Object.keys(e.definition).map((e=>B({expression:e}))).filter((e=>"if"===e?.processor)).length},init:async function(e){const{node:t}=e,o=Object.keys(t.definition).map((e=>B({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 de.init(e)}};async function me({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){if(e.context.transform=e.context.transform||x(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||x(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var ue={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 ce({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=me},resolve:me};async function he({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||x(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 pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var ye={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",await ce({node:e,initNode:t}),e.resolve=he},resolve:he};async function we({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||x(e.definition);e.context.transform.for.in=await n(e.definition.for.in),await pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var ge={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",await ce({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=we},resolve:we};var xe={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 be({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||x(e.definition);const n=e.context.transform;n.raise=await o(n.raise),await t({node:e})}var ke={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=be},resolve:be};async function ve({node:e,resolveTypeCommon:t,transformExpression:o}){e.context.transform=e.context.transform||x(e.definition);const n=e.context.transform;e.hasReturn=!0,n.return=await o(n.return),await t({node:e})}var je={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=ve},resolve:ve};async function _e({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||x(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 pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var De={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call",await ce({node:e,initNode:t}),e.resolve=_e},resolve:_e};async function Ee({node:e,transformExpression:t}){e.context.next=e.childs[0],e.context.transform=e.context.transform||x(e.definition),await pe({node:e,transformExpression:t})}var Se={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=Ee},resolve:Ee};async function Pe({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||x(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 pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var $e={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form",await ce({node:e,initNode:t}),e.resolve=Pe},resolve:Pe};async function Te({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n,transformValue:i}){e.context.transform=e.context.transform||x(e.definition),await t({node:e})}var Ce={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Te},resolve:Te};async function Ne({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||x(e.definition);const i=e.context.transform;i.next=await n(i.next),await pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var Fe={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Ne},resolve:Ne};async function Ae({node:e,resolveTypeCommon:t,resolveNextBlock:o,transformExpression:n}){e.context.transform=e.context.transform||x(e.definition),e.context.transform,await pe({node:e,transformExpression:n}),await t({node:e}),o({node:e})}var Oe={hits:async function({node:e}){return e.definition.hasOwnProperty("modules")},init:async function({node:e,initNode:t}){e.type="modules",await ce({node:e,initNode:t}),e.resolve=Ae},resolve:Ae};function Ie({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 Be{#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 De.init(e)}}function Ke(e){return new Be(e)}class Re{#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 V,this.#s=e,this.#p=[],this.#l=[],this.#d={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#D.push(Ke({key:"config",npm:"@fnet/config",master:"name"})),this.#D.push(Ke({key:"yaml",npm:"@fnet/yaml",master:"file"})),this.#D.push(Ke({key:"prompt",npm:"@fnet/prompt",master:"message"})),this.#D.push(Ke({key:"html-link",npm:"@flownet/lib-load-browser-link-url",master:"src"})),this.#D.push(Ke({key:"html-script",npm:"@flownet/lib-load-browser-script-url",master:"src"})),this.#D.push(Ke({key:"http-server",npm:"@fnet/node-express",master:"server_port"})),this.#D.push(Ke({key:"shell",npm:"@fnet/shell-flow",master:"commands"})),this.#D.push(Ke({key:"list-files",npm:"@fnet/list-files",master:"pattern"})),this.#D.push(Ke({key:"up-list-files",npm:"@fnet/up-list-files",master:"pattern"})),this.#D.push(Ke({key:"auto-conda-env",npm:"@fnet/auto-conda-env",master:"envDir"})),this.#D.push(Ke({key:"ollama-chat",npm:"@fnet/ollama-chat",master:"model"})),this.#D.push(Ke({key:"ai",npm:"@fnet/ai",master:"prompt",extras:{subtype:"flow"}})),this.#D.push(Ke({key:"invoke",npm:"@fnet/invoke",master:"method",extras:{}})),this.#D.push(Ke({key:"fetch",npm:"@fnet/fetch",master:"url",extras:{}})),this.#D.push(Ke({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.#_={initNode:this.initNode.bind(this),cloneDeep:x,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Ie,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 v({host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}))return;const e=k.createClient({socket:{host:process.env.REDIS_HOST,port:process.env.REDIS_PORT}});return await e.connect(),e}(),this.#u=this.#s.buildId||j(),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 u({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 Q(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 P({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.#w}),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(t){console.log("filePath",t),a.statSync(t).isDirectory()?(a.readdirSync(t).forEach((o=>{const n=e.join(t,o);this.#E(n)})),a.rmSync(t)):a.unlinkSync(t)}#S(t,o){const n=a.existsSync(t),i=n&&a.statSync(t);n&&i.isDirectory()?(a.mkdirSync(o,{recursive:!0}),a.readdirSync(t).forEach((n=>{this.#S(e.join(t,n),e.join(o,n))}))):a.copyFileSync(t,o)}async initWorkflowDir(){this.setProgress({message:"Initializing library directory."});const t=this.#s.projectDir,o=this.#s.coreDir;this.setProgress({message:"Cleaning project directory."});const n=R({dir:t,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const e of n)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(o,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=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.#_,node:e};if(e.workflow=e.parent.workflow||e,e.depth=e.parent.depth+1,await ue.hits(t))await ue.init(t);else if(await ge.hits(t))await ge.init(t);else if(await de.hits(t))await de.init(t);else if(await fe.hits(t))await fe.init(t);else if(await xe.hits(t))await xe.init(t);else if(await ye.hits(t))await ye.init(t);else if(await ke.hits(t))await ke.init(t);else if(await De.hits(t))await De.init(t);else if(this.#D.find((e=>e.hits(t))))await this.#D.find((e=>e.hits(t))).init(t);else if(await $e.hits(t))await $e.init(t);else if(await Ce.hits(t))await Ce.init(t);else if(await Se.hits(t))await Se.init(t);else if(await Fe.hits(t))await Fe.init(t);else if(await Oe.hits(t))await Oe.init(t);else{if(!await je.hits(t))throw new Error("Undefined step type.");await je.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:t,index:o}){const n=e.join(t.parent.indexKey,t.name);t.indexKey=n,o[n]=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=j();for await(const e of t.childs)await this.initNodeIndex({node:e,index:o})}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:t,libRef:o}){const n=A({url:t});if(!n)throw new Error(`Invalid package name: ${t}`);if(n.protocol||(n.protocol=this.#y),"ac:"===n.protocol){const e=n.pathname.split("/");if(1===e.length)return await D.first({where:{name:t,parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===e.length){const t=await D.first({where:{name:e[0],parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"folder"}});return await D.first({where:{name:e[1],parent_id:t.id,type:"workflow.lib"}})}}else{if("local:"===n.protocol){const t=e.resolve(this.#s.projectSrcDir,`${n.pathname}.js`),o=[],i=(await S({file:t,recursive:!0})).all;for await(const e of i){if("npm"!==e.type)continue;if(o.find((t=>t.package===e.package)))continue;const t=await Z({name:e.package,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});o.push({package:e.package,subpath:e.subpath,version:t.minorRange,type:"npm"})}return{name:n.pathname,doc:{type:"workflow.lib","content-type":"javascript",language:"js",dependencies:o},protocol:n.protocol}}if("npm:"===n.protocol){const e=await Z({name:n.pathname,projectDir:this.#s.projectDir,setProgress:this.#j.setProgress});return{name:n.pathname,doc:{type:"workflow.lib",subtype:"flow"===o?.definition?.subtype?"workflow":null,"content-type":"javascript",language:"js",dependencies:[{package:n.pathname,version:e.minorRange,type:"npm"}]},protocol:n.protocol}}if("use:"===n.protocol){return{name:n.pathname,doc:{type:"function",dependencies:[]},protocol:n.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||x(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.#_,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 o=t.context.libs.filter((e=>"atom"===e.type));for(let t=0;t<o.length;t++){const n=o[t].atom,i=this.#s.projectDir;if("local:"===n.protocol){const t=e.resolve(this.#s.projectSrcDir,`${n.fileName||n.name}.js`),o=e.relative(`${this.#s.projectDir}/src/default/blocks`,t);if(!a.existsSync(t)){a.mkdirSync(e.dirname(t),{recursive:!0});let o="export default async (args)=>{\n";o+="}",a.writeFileSync(t,o,"utf8")}n.relativePath=o.split(e.sep).join("/"),this.#a.typesDir=`./types/${e.basename(i)}/src`}else if("npm:"===n.protocol)n.relativePath=n.name;else if("use:"===n.protocol);else{const t=`${i}/src/libs/${n.id}.js`,o=n.doc.contents?.find((e=>"esm"===e.format))||n.doc;a.writeFileSync(e.normalize(t),o.content,"utf8")}}}async createEngine({root:t}){await this.setProgress({message:"Creating engine file."});const o=this.#s.templateDir,n=g.compile(a.readFileSync(e.resolve(o,"src/default/engine.js.njk"),"utf8"),this.#c);for(let o=0;o<t.childs.length;o++){const i=t.childs[o];if(!i.entryFile)continue;const s=n.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 o=this.#s.templateDir,n=g.compile(a.readFileSync(e.resolve(o,"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,n,"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 o=this.#d[t.type];if(o)return o;const n=this.#s.templateDir;return o=g.compile(a.readFileSync(e.resolve(n,`src/default/blocks/${t.type}.js.njk`),"utf8"),this.#c),this.#d[t.type]=o,o}createStepFile({node:t}){const o=this.#s.projectDir,n=`${t.codeKey}.js`,i=e.resolve(o,`src/default/blocks/${n}`);a.writeFileSync(i,t.context.render,"utf8"),t.context.fileName=n,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(b(e)){const t=Object.keys(e);for(let o=0;o<t.length;o++){const n=t[o],i=B({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=B({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 t="fnet.yaml",o=`Creating ${t}`;await this.setProgress({message:o});const{content:n,...i}=this.#a.doc,s={content:p.stringify(i)},r=this.#s.templateDir,c=g.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,c,"utf8")}async createProjectMainYaml(){const t="flow.main.yaml",o=`Creating ${t}`;await this.setProgress({message:o});const n={content:p.stringify(this.#r)},i=this.#s.templateDir,s=g.compile(a.readFileSync(e.resolve(i,`${t}.njk`),"utf8"),this.#c).render(n),r=this.#s.projectDir,c=e.resolve(r,`${t}`);a.writeFileSync(c,s,"utf8")}async runPrettifier(){const t=this.#s.projectDir;if(q("bun")){const o=await f("prettier --write .",{cwd:e.resolve(t,"src")});if(0!==o.code)throw new Error(o.stderr)}else{const o=await f("prettier --write .",{cwd:e.resolve(t,"src")});if(0!==o.code)throw new Error(o.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 ee({...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.#w.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.#w.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 t=this.#v?await re({root:this.#m}):void 0;if(this.#x){if(await this.initWorkflowDir(),await this.initNunjucks(),this.#v){let o=this.#s.project?.projectDir||this.#s.projectDir;o=e.resolve(o,"fnet"),a.existsSync(o)&&a.writeFileSync(e.resolve(o,"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:o,setProgress:n,Atom:i}){const s="readme.md",r=`Creating ${s}`;if(await n({message:r}),o.project?.readme){const t=o.projectDir,n={content:o.project.readme.doc.content},i=e.resolve(o.project.projectDir,"fnet/how-to.md");if(a.existsSync(i)){const e=a.readFileSync(i,"utf8");n.howto=e}const r=e.resolve(o.project.projectDir,"fnet/input.yaml");if(a.existsSync(r)){const e=await m({file:r,tags:o.tags});n.input=e.content}const c=e.resolve(o.project.projectDir,"fnet/output.yaml");if(a.existsSync(c)){const e=await m({file:c,tags:o.tags});n.output=e.content}const p=o.templateCommonDir,l=g.compile(a.readFileSync(e.resolve(p,`${s}.njk`),"utf8"),g.configure(p)).render(n),d=e.resolve(t,`${s}`);a.writeFileSync(d,l,"utf8")}else if(t.id){const n=await i.first({type:"wiki",parent_id:t.id});if(!n||"markdown"!==n.doc?.["content-type"])return;const{content:r,...c}=n.doc,p={content:r},l=o.templateCommonDir,d=g.compile(a.readFileSync(e.resolve(l,`${s}.njk`),"utf8"),g.configure(l)).render(p),f=o.projectDir,m=e.resolve(f,`${s}`);a.writeFileSync(m,d,"utf8")}}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){await o({message:"Creating tsconfig.json."});const s={atom:t,packageDependencies:i},r=n.templateCommonDir,c=g.compile(a.readFileSync(e.resolve(r,"tsconfig.json.njk"),"utf8"),g.configure(r)).render(s),p=n.projectDir,l=e.resolve(p,"tsconfig.json");a.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){await o({message:"Creating .gitignore"});const s={atom:t,packageDependencies:i},r=n.templateCommonDir,c=g.compile(a.readFileSync(e.resolve(r,".gitignore.njk"),"utf8"),g.configure(r)).render(s),p=n.projectDir,l=e.resolve(p,".gitignore");a.writeFileSync(l,c,"utf8")}(this.#j),await async function({atom:t,setProgress:o,context:n,njEnv:i}){if(!0!==t.doc.features.cli.enabled)return;await o({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,o={type:"string",description:"Config name to load args",hidden:!1},n={type:"array",description:"Tags to filter the config",hidden:!1};Reflect.has(e,"default")&&(o.default=e.default),s.properties&&(s.properties.fargs=o,s.properties.ftag=n)}const r={options:s,imports:[],atom:t},c=n.templateDir,p=g.compile(a.readFileSync(e.resolve(c,"src/default/to.args.js.njk"),"utf8"),i).render(r),l=n.projectDir,d=e.resolve(l,"src/default/to.args.js");a.writeFileSync(d,p,"utf8");const f=new C({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});F(f);const m=f.compile(s),u=N(f,m);a.writeFileSync(e.resolve(l,"src/default/validate_input.js"),u,"utf8")}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){if(!0!==t.doc.features.cli.enabled)return;await o({message:"Creating cli."});const s={atom:t,packageDependencies:i},r=n.templateDir,c=e.resolve(n.projectDir,"src/cli");a.existsSync(c)||a.mkdirSync(c,{recursive:!0}),await y({pattern:["index.js.njk"],dir:e.resolve(r,"src/cli"),outDir:c,context:s})}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){if(!0!==t.doc.features.app.enabled)return;await o({message:"Creating app folder"});const s={atom:t,packageDependencies:i,ts:Date.now()},r=n.templateDir,c=e.resolve(n.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 y({pattern:p,dir:e.resolve(r,"src/app"),outDir:c,context:s})}(this.#j),await async function({atom:t,setProgress:o,context:n,packageDependencies:i}){await o({message:"Creating rollup file."});const s={atom:t,packageDependencies:i},r=e.resolve(n.projectDir,"src","default/index.js");if(!a.existsSync(r))throw new Error(`Entry file not found: ${r}`);const c=(await S({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 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(a.readFileSync(e.resolve(d,"rollup.config.mjs.njk"),"utf8"),g.configure(d)).render(s);const m=n.projectDir;let u=e.resolve(m,"rollup.config.mjs");a.writeFileSync(u,f,"utf8")}(this.#j),await async function({atom:t,context:o,packageDependencies:n,packageDevDependencies:i,setProgress:s}){await s({message:"Creating package.json."}),n.filter((e=>!0===e.dev)).forEach((e=>{i.find((t=>t.package===e.package))||i.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&&t.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===t.doc.features.app.enabled&&p.push({file:e.resolve(o.projectDir,"src/app/index.js"),dev:!1!==t.doc.features.app.dev}),!0===t.doc.features.cli.enabled&&p.push({file:e.resolve(o.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 S({file:t,recursive:!0})).all;for await(const t of r){if("npm"!==t.type)continue;if(n.find((e=>e.package===t.package)))continue;if(i.find((e=>e.package===t.package)))continue;const a=await Z({name:t.package,projectDir:o.projectDir,setProgress:s});(!0===e.dev?i:n).push({package:t.package,subpath:t.subpath,version:a.minorRange,type:"npm"})}}const l={atom:t,packageDependencies:n,packageDevDependencies:i},d=o.templateCommonDir,f=g.compile(a.readFileSync(e.resolve(d,"package.json.njk"),"utf8"),g.configure(d)).render(l),m=o.projectDir,u=e.resolve(m,"package.json");a.writeFileSync(u,f,"utf8");const h=e.resolve(o.project.projectDir,"fnet");if(a.existsSync(h)){const t=e.resolve(o.projectDir,"fnet");a.existsSync(t)||a.mkdirSync(t);const n=a.readdirSync(h);for(const o of n){const n=e.resolve(h,o);if(!a.lstatSync(n).isFile())continue;const i=e.resolve(t,o);a.copyFileSync(n,i)}}}(this.#j),await async function({setProgress:t,context:o}){const n=o.projectDir;await t({message:"Prettifiying source files."});let i=e.join("src","**","*");if(q("bun")){const e=await f(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n});if(0!==e.code)throw new Error(e.stderr)}else{const e=await f(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:n});if(0!==e.code)throw new Error(e.stderr)}}(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;if(await e({message:"Installing npm packages."}),q("bun")){if(0!==(await f(`bun install ${t.doc.features.npm_install_flags}`,{cwd:n})).code)throw new Error("Couldnt install npm packages.")}else if(0!==(await f(`npm 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:t}})}catch(e){throw await this._cache_set(this.#h,{status:"FAILED",message:e.message||e}),e}}async createNetwork(){try{const e=await re({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 Me=e.dirname(n(import.meta.url)),Je=process.cwd();process.on("uncaughtException",(e=>{W||(W=!0,setTimeout((()=>process.exit(1)),500))})),process.on("unhandledRejection",(e=>{W||(W=!0,setTimeout((()=>process.exit(1)),500))})),u({name:["redis"],dir:Je,optional:!0});const Le=function({baseDir:t}){let o=t=t||z;for(;o!==e.parse(o).root;){const t=e.join(o,"node_modules");if(a.existsSync(t))return t;o=e.dirname(o)}return null}({baseDir:Me}),ze="win32"===process.platform?";":":";Le&&(process.env.PATH=`${e.join(Le,"/.bin")}${ze}${process.env.PATH}`);let qe=l(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 o=e.resolve(Le,"./@fnet/cli-project-flow/dist/template/project"),n=e.resolve(Je,t.name);a.existsSync(n)||a.mkdirSync(n),await y({dir:o,outDir:n,context:t,copyUnmatchedAlso:!0,platform:s.platform()});let i=await f("fnet build",{cwd:n});if(0!==i.code)throw new Error("Failed to build project.");if(q("git")&&(i=await f("git init --initial-branch=main",{cwd:n}),0!==i.code))throw new Error("Failed to initialize git.");if(q("code")&&t.vscode&&(i=await f(`cd ${n} && 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 o=e.resolve(Le,"@fnet/cli-project-flow/dist/template/project"),n=process.cwd(),i=await We(t);if(t.update){if(await y({dir:o,outDir:n,context:{name:i.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0,platform:s.platform()}),0!==(await f("fnet build",{cwd:n})).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 We(e),o=new Re(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 We({...e,mode:"all"}),o=new Re(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 We({...e,mode:"file"}),o=new Re(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 Ge(e,{name:t,bin:o,preArgs:n=[]}){return"function"==typeof o&&(o=o()),e.command(`${t||o} [commands..]`,`${o} ${n.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await We(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);U(i(o,[...n,...r],{cwd:s,stdio:"inherit",shell:!0,detached:!0}))}catch(e){console.error(e.message),process.exit(1)}}))}async function We(t){if(t.id){return{id:t.id,buildId:t.buildId,mode:t.mode,protocol:t.protocol||"ac:",projectDir:e.resolve(Je,`./.output/${t.id}`),templateDir:e.resolve(Le,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:e.resolve(Le,"./@fnet/cli-project-common/dist/template/default"),coreDir:e.resolve(Le,"./@fnet/cli-project-flow/dist/template/core"),tags:t.ftag}}{const o=await async function({tags:t}){const o=e.resolve(Je,"fnet.yaml");if(!a.existsSync(o))throw new Error("fnet.yaml file not found in current directory.");const{raw:n,parsed:i}=await m({file:o,tags:t}),s=e.dirname(o);let r;if("object"==typeof i.flows)r=i.flows;else{let o="flow.main.yaml";a.existsSync(e.join(s,"fnet","flows.yaml"))&&(o=e.join("fnet","flows.yaml"));const n=i.main||o;let c=e.resolve(s,n);if(a.existsSync(c)){const{parsed:e}=await m({file:c,tags:t});r=e}else r={main:{steps:[]}}}const c={workflowAtom:{doc:{...i,content:r}},projectDir:s,projectFilePath:o,projectFileContent:n,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:o}=await m({file:l,tags:t}),n=p.parseDocument(e);c.devops={filePath:l,fileContent:e,yamlDocument:n,doc:{...o},type:"workflow.deploy",save:async()=>{a.writeFileSync(c.devops.filePath,n.toString())}}}const d=e.resolve(s,"readme.md");if(a.existsSync(d)){const e=a.readFileSync(d,"utf8");c.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return c}({tags:t.ftag});return{buildId:t.buildId,mode:t.mode,protocol:t.protocol||"local:",templateDir:e.resolve(Le,"./@fnet/cli-project-flow/dist/template/default"),templateCommonDir:e.resolve(Le,"./@fnet/cli-project-common/dist/template/default"),coreDir:e.resolve(Le,"./@fnet/cli-project-flow/dist/template/core"),projectDir:e.resolve(o.projectDir,"./.workspace"),projectSrcDir:e.resolve(o.projectDir,"./src"),project:o,tags:t.ftag}}}qe=qe.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 o=await We(t),{project:n}=o,{projectDir:i,projectFileParsed:s}=n,r=s.input;if(!r)throw new Error("Config schema not found in project file.");if(!Reflect.has(t,"name")){const{inputName:e}=await d({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`),l=a.existsSync(p),f=(await import("@fnet/object-from-schema")).default,m=await f({schema:r,format:"yaml",ref:l?p:void 0});a.writeFileSync(p,m)}catch(e){console.error(e.message),process.exit(1)}})),qe=Ge(qe,{bin:"npm"}),qe=Ge(qe,{bin:"node"}),qe=Ge(qe,{bin:"bun"}),qe=Ge(qe,{name:"serve",bin:"bun",preArgs:["run","serve","--"]}),qe=Ge(qe,{name:"watch",bin:"bun",preArgs:["run","watch","--"]}),qe=Ge(qe,{name:"app",bin:"bun",preArgs:["run","app","--"]}),qe=Ge(qe,{name:"cli",bin:"bun",preArgs:["run","cli","--"]}),qe=Ge(qe,{bin:"npx"}),qe=Ge(qe,{bin:"cdk"}),qe=Ge(qe,{bin:"aws"}),qe=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 We(e),{projectDir:n}=t,s=e.config,r=await u({name:s,dir:n,transferEnv:!1,optional:!0,tags:t.tags}),c=r?.data?.env||void 0,p=e.command,l=process.argv.slice(5);U(i(p,[...o,...l],{cwd:a.existsSync(n)?n:Je,stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...c}}))}catch(e){console.error(e.message),process.exit(1)}}))}(qe,{name:"with"}),qe=function(e,{name:t}){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 We(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,context:{args:e,argv:process.argv}})}catch(e){console.error(e.message),process.exit(1)}}))}(qe,{name:"run"}),qe.demandCommand(1,"You need at least one command before moving on").help().argv;export{q 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"tree-kill";import p from"yaml";import l from"yargs";import d from"@fnet/prompt";import f from"@fnet/shelljs";import m from"@fnet/yaml";import u from"@fnet/config";import"@fnet/shell-flow";import h from"@flownet/lib-render-templates-dir";import{promisify as y}from"node:util";import w from"nunjucks";import g 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 _}from"@flownet/lib-atom-api-js";import D 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 N from"ajv/dist/standalone/index.js";import C from"ajv-formats";import F from"@flownet/lib-parse-node-url";import A from"bpmn-moddle";import O from"dagre";import I from"@fnet/expression";import B from"chalk";import K from"@fnet/list-files";import R from"@fnet/key-value-transformer";import M from"lodash.pick";import J from"lodash.omit";const L=e.dirname(o(import.meta.url));var z=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};const G=y(c);let q=!1;async function W(e,t){if(q)return;if(q=!0,!e.killed&&e.pid)try{await G(e.pid,"SIGTERM").catch((()=>{})),await new Promise((e=>setTimeout(e,500))),e.killed||await G(e.pid,"SIGKILL").catch((()=>{}))}catch(e){}await new Promise((e=>setTimeout(e,100)));const n="SIGINT"===t?130:"SIGTERM"===t?143:1;process.exit(n)}function X(e){["SIGINT","SIGTERM","SIGQUIT"].forEach((t=>{process.once(t,(async()=>{await W(e,t)}))})),process.on("uncaughtException",(async t=>{await W(e)})),process.on("unhandledRejection",(async t=>{await W(e)})),e.on("close",(e=>{q||process.exit(e)}))}const U=e.dirname(o(import.meta.url)),V=process.cwd();function H(t){const n=e.resolve(V,t);if(a.existsSync(n))return n;const o=e.resolve(U,"../..",t);if(a.existsSync(o))return o;throw new Error(`Template path not found: ${t}`)}class Y{init({config:e,accessToken:t}){return new Promise(((n,o)=>{if(j.set_api_url(e.data.url),t)return j.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=>{j.set_req_token(e.access_token),n(e.access_token)})).catch((e=>{j.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(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 Z({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 ee(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=Z({dir:e.resolve(a,"./app")});if(r.file){i("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=Z({dir:e.resolve(a,"./cli")});if(c.file){i("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"===n.type){const t=Z({dir:e.resolve(a,"./src")});if(t.file){i("Parsing src entry imports...");let e=await E({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 E({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=D({targets:{browsers:"last 9 versions, not dead",node:"18"}},s.babel_options||s.babel?.options),s.browsersync_options=D(f,s.browsersync_options||s.browsersync?.options||{}),s.replace_options=D({},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(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=D(s.browsersync_options,t.browsersync_options),t.replace_options=D(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 te({projectDir:t,name:n,setProgress:o,count:i=1}){let s;const r=$(["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 P({name:n,count:i}),a.mkdirSync(c,{recursive:!0}),a.writeFileSync(p,JSON.stringify(s),"utf8")),s}var ne=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.DBSKvJyG.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}},oe={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 ie(e,t){return e.filter(((e,n,o)=>o.map((e=>e[t])).indexOf(e[t])===n))}function se(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=ae({...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=ae({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=ae({...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=ae({...e,parent:t,bpmnType:"bpmn:StartEvent",type:"start"}),o=ae({...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=ae({...e,parent:t,bpmnType:"bpmn:EndEvent",type:"end",name:i.to});i.to=n.indexKey}}else{const o=ae({...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=ae({...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=ae({...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=[]}))}se({...e,targetNodes:t.childs})}))}function ae(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 re(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 O.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)})),O.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,re({...e,targetNode:t,targetFlowElementsContainer:n,targetPlaneElement:a})}))}(e)}async function ce(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=ie(i,"to"),e.bpmn.outside=ie(s,"to"),e.bpmn.starts=ie(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}),se({nodes:o,nodeIndex:n,root:t});const i=new A({atom:oe}),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;re({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 pe(e={}){return await ce(g(e))}async function le({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 R({data:e.definition,callback:(e,t,o)=>{const i=I({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 de({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 fe({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||g(e.definition),e.context.transform;for(const t of e.childs)t.context.transform=t.context.transform||g(t.definition),t.definition.hasOwnProperty("condition")&&(t.context.transform.condition=await o(t.definition.condition));await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var me={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 le({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=fe},resolve:fe};var ue={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,n=Object.keys(t.definition).map((e=>I({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 me.init(e)}};async function he({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){if(e.context.transform=e.context.transform||g(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||g(t.definition),t.context.transform.hasOwnProperty("as")||(t.context.transform.as="error")}await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var ye={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 le({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=he},resolve:he};async function we({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||g(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 de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var ge={hits:async function({node:e}){return e.definition.hasOwnProperty("assign")},init:async function({node:e,initNode:t}){e.type="assign",await le({node:e,initNode:t}),e.resolve=we},resolve:we};async function xe({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||g(e.definition);e.context.transform.for.in=await o(e.definition.for.in),await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var be={hits:async function({node:e}){return e.definition.hasOwnProperty("for")},init:async function({node:e,initNode:t}){if(e.type="for",await le({node:e,initNode:t}),e.blockAutoJumpToParent=!0,e.blockAutoJumpToSibling=!1,!e.definition.for.hasOwnProperty("steps")){const t=["value","in"],[n,o]=[M(e.definition.for,t),J(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=xe},resolve:xe};var ke={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 ve({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||g(e.definition);const o=e.context.transform;o.raise=await n(o.raise),await t({node:e})}var je={hits:async function({node:e}){return e.definition.hasOwnProperty("raise")},init:async function({node:e,initNode:t}){e.type="raise",e.resolve=ve},resolve:ve};async function _e({node:e,resolveTypeCommon:t,transformExpression:n}){e.context.transform=e.context.transform||g(e.definition);const o=e.context.transform;e.hasReturn=!0,o.return=await n(o.return),await t({node:e})}var De={hits:async function({node:e}){return e.definition.hasOwnProperty("return")},init:async function({node:e,initNode:t}){e.type="return",e.resolve=_e},resolve:_e};async function Ee({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||g(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 de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Se={hits:async function({node:e}){return e.definition.hasOwnProperty("call")},init:async function({node:e,initNode:t}){e.type="call",await le({node:e,initNode:t}),e.resolve=Ee},resolve:Ee};async function Pe({node:e,transformExpression:t}){e.context.next=e.childs[0],e.context.transform=e.context.transform||g(e.definition),await de({node:e,transformExpression:t})}var $e={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=Pe},resolve:Pe};async function Te({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||g(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 de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Ne={hits:async function({node:e}){return e.definition.hasOwnProperty("form")},init:async function({node:e,initNode:t}){e.type="form",await le({node:e,initNode:t}),e.resolve=Te},resolve:Te};async function Ce({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o,transformValue:i}){e.context.transform=e.context.transform||g(e.definition),await t({node:e})}var Fe={hits:async function({node:e}){return e.definition.hasOwnProperty("operation")},init:async function({node:e,initNode:t}){e.type="operation",e.resolve=Ce},resolve:Ce};async function Ae({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||g(e.definition);const i=e.context.transform;i.next=await o(i.next),await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Oe={hits:async function({node:e}){return e.definition.hasOwnProperty("next")},init:async function({node:e,initNode:t}){e.type="jump",e.resolve=Ae},resolve:Ae};async function Ie({node:e,resolveTypeCommon:t,resolveNextBlock:n,transformExpression:o}){e.context.transform=e.context.transform||g(e.definition),e.context.transform,await de({node:e,transformExpression:o}),await t({node:e}),n({node:e})}var Be={hits:async function({node:e}){return e.definition.hasOwnProperty("modules")},init:async function({node:e,initNode:t}){e.type="modules",await le({node:e,initNode:t}),e.resolve=Ie},resolve:Ie};function Ke({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 Re{#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 Se.init(e)}}function Me(e){return new Re(e)}class Je{#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 Y,this.#s=e,this.#p=[],this.#l=[],this.#d={},this._expire_ttl=3600,this._expire_ttl_short=300,this.#D.push(Me({key:"config",npm:"@fnet/config",master:"name"})),this.#D.push(Me({key:"yaml",npm:"@fnet/yaml",master:"file"})),this.#D.push(Me({key:"prompt",npm:"@fnet/prompt",master:"message"})),this.#D.push(Me({key:"html-link",npm:"@flownet/lib-load-browser-link-url",master:"src"})),this.#D.push(Me({key:"html-script",npm:"@flownet/lib-load-browser-script-url",master:"src"})),this.#D.push(Me({key:"http-server",npm:"@fnet/node-express",master:"server_port"})),this.#D.push(Me({key:"shell",npm:"@fnet/shell-flow",master:"commands"})),this.#D.push(Me({key:"list-files",npm:"@fnet/list-files",master:"pattern"})),this.#D.push(Me({key:"up-list-files",npm:"@fnet/up-list-files",master:"pattern"})),this.#D.push(Me({key:"auto-conda-env",npm:"@fnet/auto-conda-env",master:"envDir"})),this.#D.push(Me({key:"ollama-chat",npm:"@fnet/ollama-chat",master:"model"})),this.#D.push(Me({key:"ai",npm:"@fnet/ai",master:"prompt",extras:{subtype:"flow"}})),this.#D.push(Me({key:"invoke",npm:"@fnet/invoke",master:"method",extras:{}})),this.#D.push(Me({key:"fetch",npm:"@fnet/fetch",master:"url",extras:{}})),this.#D.push(Me({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:_,registerToPackageManager:this.registerToPackageManager.bind(this)},this.#_={initNode:this.initNode.bind(this),cloneDeep:g,resolveTypeCommon:this.resolveTypeCommon.bind(this),resolveNextBlock:Ke,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 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.#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 u({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 ee(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 S({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 _.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(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=K({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=w.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 ye.hits(t))await ye.init(t);else if(await be.hits(t))await be.init(t);else if(await me.hits(t))await me.init(t);else if(await ue.hits(t))await ue.init(t);else if(await ke.hits(t))await ke.init(t);else if(await ge.hits(t))await ge.init(t);else if(await je.hits(t))await je.init(t);else if(await Se.hits(t))await Se.init(t);else if(this.#D.find((e=>e.hits(t))))await this.#D.find((e=>e.hits(t))).init(t);else if(await Ne.hits(t))await Ne.init(t);else if(await Fe.hits(t))await Fe.init(t);else if(await $e.hits(t))await $e.init(t);else if(await Oe.hits(t))await Oe.init(t);else if(await Be.hits(t))await Be.init(t);else{if(!await De.hits(t))throw new Error("Undefined step type.");await De.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=v();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=F({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 _.first({where:{name:t,parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"workflow.lib"}});if(2===e.length){const t=await _.first({where:{name:e[0],parent_id:this.#w.env.ATOM_LIBRARIES_ID,type:"folder"}});return await _.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 E({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 te({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 te({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||g(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=w.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=w.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=w.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(x(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++){const o=t[n],i=I({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=I({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:p.stringify(i)},r=this.#s.templateDir,c=w.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,c,"utf8")}async createProjectMainYaml(){const t="flow.main.yaml",n=`Creating ${t}`;await this.setProgress({message:n});const o={content:p.stringify(this.#r)},i=this.#s.templateDir,s=w.compile(a.readFileSync(e.resolve(i,`${t}.njk`),"utf8"),this.#c).render(o),r=this.#s.projectDir,c=e.resolve(r,`${t}`);a.writeFileSync(c,s,"utf8")}async runPrettifier(){const t=this.#s.projectDir;if(z("bun")){const n=await f("prettier --write .",{cwd:e.resolve(t,"src")});if(0!==n.code)throw new Error(n.stderr)}else{const n=await f("prettier --write .",{cwd:e.resolve(t,"src")});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 _.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 _.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 ne({...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 _.first({name:t.params.name,parent_id:this.#w.env.ATOM_PACKAGES_ID});o?(o.doc.versions.splice(0,0,{v:n.version}),await _.update(o,{id:o.id})):o=await _.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 pe({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 m({file:r,tags:n.tags});o.input=e.content}const c=e.resolve(n.project.projectDir,"fnet/output.yaml");if(a.existsSync(c)){const e=await m({file:c,tags:n.tags});o.output=e.content}const p=n.templateDir,l=w.compile(a.readFileSync(e.resolve(p,`${s}.njk`),"utf8"),w.configure(p)).render(o),d=e.resolve(t,`${s}`);a.writeFileSync(d,l,"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.templateDir,d=w.compile(a.readFileSync(e.resolve(l,`${s}.njk`),"utf8"),w.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.templateDir,c=w.compile(a.readFileSync(e.resolve(r,"tsconfig.json.njk"),"utf8"),w.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.templateDir,c=w.compile(a.readFileSync(e.resolve(r,".gitignore.njk"),"utf8"),w.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=w.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 T({allErrors:!0,useDefaults:!0,formats:{},strict:!1,code:{esm:!0,lines:!0,optimize:!1,source:!0}});C(f);const m=f.compile(s),u=N(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 E({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.templateDir;let f=w.compile(a.readFileSync(e.resolve(d,"rollup.config.mjs.njk"),"utf8"),w.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 E({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 te({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.templateDir,f=w.compile(a.readFileSync(e.resolve(d,"package.json.njk"),"utf8"),w.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","**","*");if(z("bun")){const e=await f(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o});if(0!==e.code)throw new Error(e.stderr)}else{const e=await f(`prettier --write ${i} *.{js,cjs,mjs,json,yaml,html} --no-error-on-unmatched-pattern`,{cwd:o});if(0!==e.code)throw new Error(e.stderr)}}(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"}),0!==(await f("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."}),z("bun")){if(0!==(await f(`bun install ${t.doc.features.npm_install_flags}`,{cwd:o})).code)throw new Error("Couldnt install npm packages.")}else if(0!==(await f(`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 f("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 pe({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 Le=e.dirname(o(import.meta.url)),ze=process.cwd();process.on("uncaughtException",(e=>{q||(q=!0,setTimeout((()=>process.exit(1)),500))})),process.on("unhandledRejection",(e=>{q||(q=!0,setTimeout((()=>process.exit(1)),500))})),u({name:["redis"],dir:ze,optional:!0});const Ge=function({baseDir:t}){let n=t=t||L;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:Le}),qe="win32"===process.platform?";":":";Ge&&(process.env.PATH=`${e.join(Ge,"/.bin")}${qe}${process.env.PATH}`);let We=l(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=H("./template/fnet/project"),o=e.resolve(ze,t.name);a.existsSync(o)||a.mkdirSync(o),await h({dir:n,outDir:o,context:t,copyUnmatchedAlso:!0,platform:s.platform()});let i=await f("fnet build",{cwd:o});if(0!==i.code)throw new Error("Failed to build project.");if(z("git")&&(i=await f("git init --initial-branch=main",{cwd:o}),0!==i.code))throw new Error("Failed to initialize git.");if(z("code")&&t.vscode&&(i=await f(`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 e=>{try{const t=H("./template/fnet/project"),n=process.cwd(),o=await Ue(e);if(e.update){if(await h({dir:t,outDir:n,context:{name:o.project.projectFileParsed.name,runtime:"node"},copyUnmatchedAlso:!0,platform:s.platform()}),0!==(await f("fnet build",{cwd:n})).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 Ue(e),n=new Je(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 Ue({...e,mode:"all"}),n=new Je(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 Ue({...e,mode:"file"}),n=new Je(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 Xe(e,{name:t,bin:n,preArgs:o=[]}){return"function"==typeof n&&(n=n()),e.command(`${t||n} [commands..]`,`${n} ${o.join(" ")}`,(e=>e.help(!1).version(!1)),(async e=>{try{const t=await Ue(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);X(i(n,[...o,...r],{cwd:s,stdio:"inherit",shell:!0,detached:!0}))}catch(e){console.error(e.message),process.exit(1)}}))}async function Ue(t){if(t.id){return{id:t.id,buildId:t.buildId,mode:t.mode,protocol:t.protocol||"ac:",projectDir:e.resolve(ze,`./.output/${t.id}`),templateDir:H("./template/fnet/node"),coreDir:H("./template/fnet/core"),tags:t.ftag}}{const n=await async function({tags:t}){const n=e.resolve(ze,"fnet.yaml");if(!a.existsSync(n))throw new Error("fnet.yaml file not found in current directory.");const{raw:o,parsed:i}=await m({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 m({file:c,tags:t});r=e}else r={main:{steps:[]}}}const c={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 m({file:l,tags:t}),o=p.parseDocument(e);c.devops={filePath:l,fileContent:e,yamlDocument:o,doc:{...n},type:"workflow.deploy",save:async()=>{a.writeFileSync(c.devops.filePath,o.toString())}}}const d=e.resolve(s,"readme.md");if(a.existsSync(d)){const e=a.readFileSync(d,"utf8");c.readme={filePath:d,fileContent:e,doc:{content:e,"content-type":"markdown"},type:"wiki"}}return c}({tags:t.ftag});return{buildId:t.buildId,mode:t.mode,protocol:t.protocol||"local:",templateDir:H("./template/fnet/node"),coreDir:H("./template/fnet/core"),projectDir:e.resolve(n.projectDir,"./.workspace"),projectSrcDir:e.resolve(n.projectDir,"./src"),project:n,tags:t.ftag}}}We=We.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 Ue(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 d({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`),l=a.existsSync(p),f=(await import("@fnet/object-from-schema")).default,m=await f({schema:r,format:"yaml",ref:l?p:void 0});a.writeFileSync(p,m)}catch(e){console.error(e.message),process.exit(1)}})),We=Xe(We,{bin:"npm"}),We=Xe(We,{bin:"node"}),We=Xe(We,{bin:"bun"}),We=Xe(We,{name:"serve",bin:"bun",preArgs:["run","serve","--"]}),We=Xe(We,{name:"watch",bin:"bun",preArgs:["run","watch","--"]}),We=Xe(We,{name:"app",bin:"bun",preArgs:["run","app","--"]}),We=Xe(We,{name:"cli",bin:"bun",preArgs:["run","cli","--"]}),We=Xe(We,{bin:"npx"}),We=Xe(We,{bin:"cdk"}),We=Xe(We,{bin:"aws"}),We=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 Ue(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);X(i(p,[...n,...l],{cwd:a.existsSync(o)?o:ze,stdio:"inherit",shell:!0,detached:!0,env:{...process.env,...c}}))}catch(e){console.error(e.message),process.exit(1)}}))}(We,{name:"with"}),We=function(e,{name:t}){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{runCommandGroup:t}=await import("./index.DrwlOzAe.js");await t({projectType:"fnet",group:e.group,tags:e.ftag,args:e,argv:process.argv})}catch(e){console.error(e.message),process.exit(1)}}))}(We,{name:"run"}),We.demandCommand(1,"You need at least one command before moving on").help().argv;export{H as r,z as w};
@@ -0,0 +1 @@
1
+ import e from"node:fs";import r from"node:path";import t from"semver";import o from"@fnet/shelljs";import i from"@fnet/config";import n from"@fnet/object-from-schema";import s from"yaml";import{r as m,w as a}from"./index.js";import{fileURLToPath as p}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"node:util";import"tree-kill";async function c({atom:p,setProgress:c,context:l,deploymentProject:d,deploymentProjectTarget:f,yamlTarget:y}){await c({message:"Deploying it as npm package."});const g=l.projectDir,w=r.resolve(g,"package.json"),u=e.readFileSync(w),b=JSON.parse(u);b.name=f.params.name,b.version=t.inc(f.version,"patch");const h=f.params.bin?.name||f.params.bin;!1!==f.params.bin?.enabled&&h&&"string"==typeof h&&(b.bin={[h]:"dist/cli/esm/index.js"}),delete b.scripts,delete b.devDependencies,b.scripts={serve:"npx serve ."},e.writeFileSync(w,JSON.stringify(b,null,"\t"));const v=f.config||"npm";let j=(await i({name:v,dir:l.projectDir,tags:l.tags,optional:!0}))?.data;if(!j){const t=m("./template/schemas/to-npm.yaml"),o=await n({schema:t,tags:l.tags}),i=l.project.projectDir,a=r.resolve(i,".fnet");e.existsSync(a)||e.mkdirSync(a),e.writeFileSync(r.resolve(a,`${v}.fnet`),s.stringify(o)),j=o}if(e.writeFileSync(r.resolve(g,".npmrc"),`//registry.npmjs.org/:_authToken=${j.env.NPM_TOKEN}`),!0!==f.dryRun){if(a("bun")){if(0!==(await o("bun publish --access public",{cwd:g})).code)throw new Error("Couldnt publish to npm")}else{if(0!==(await o("npm publish --access public",{cwd:g})).code)throw new Error("Couldnt publish to npm")}e.writeFileSync(w,u),d.isDirty=!0,f.version=b.version,y.set("version",b.version)}}r.dirname(p(import.meta.url)),process.cwd();export{c as default};
@@ -0,0 +1 @@
1
+ import e from"lodash.merge";import t from"node:fs";import a from"node:path";import s from"@flownet/lib-parse-imports-js";import{h as r,j as n,k as i,l as o,m as l}from"./index.CLlKzCGk.js";import p from"@fnet/npm-list-versions";import c from"nunjucks";function d({dir:e,name:s="index"}){let r=a.resolve(e,`./${s}.tsx`);if(t.existsSync(r)||(r=a.resolve(e,`./${s}.ts`)),t.existsSync(r)||(r=a.resolve(e,`./${s}.jsx`)),t.existsSync(r)||(r=a.resolve(e,`./${s}.js`)),!t.existsSync(r))return{};const n=r,i=a.extname(r);return{file:n,ext:i,ts:".ts"===i||".tsx"===i,name:s}}async function f({atom:t,context:p,setProgress:c}){await c({message:"Initializing features..."}),t.doc.features=t.doc.features||{};const f=t.doc.features;f.project=f.project||{},f.project.format=f.project.format||f.project_format||"esm",f.project_format=f.project.format,f.dts_enabled=!0===f.dts||void 0!==f.dts&&!1!==f.dts;const u=a.resolve(p.project.projectDir),m=d({dir:a.resolve(u,"./app")});if(m.file){c("Parsing app entry imports...");let e=await s({file:m.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));f.app_uses_jsx=t,f.app_has_entry=!0,e=await s({file:m.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),f.app_entry_uses_jsx=t,f.app_entry_is_ts=m.ts,f.app_entry_ext=m.ext}const _=d({dir:a.resolve(u,"./cli")});if(_.file){c("Parsing cli entry imports...");let e=await s({file:_.file,recursive:!0}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type));f.cli_uses_jsx=t,f.cli_has_entry=!0,e=await s({file:_.file}),t=e.all.some((e=>!0===e.usesJSX&&"local"===e.type)),f.cli_entry_uses_jsx=t,f.cli_entry_is_ts=_.ts,f.cli_entry_ext=_.ext}if("workflow.lib"===t.type){const e=d({dir:a.resolve(u,"./src")});if(e.file){c("Parsing src entry imports...");let t=await s({file:e.file,recursive:!0}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type));f.src_uses_jsx=a,f.src_has_entry=!0,t=await s({file:e.file}),a=t.all.some((e=>!0===e.usesJSX&&"local"===e.type)),f.src_entry_uses_jsx=a,f.src_entry_is_ts=e.ts,f.src_entry_ext=e.ext}}const y=Reflect.has(f,"app_entry_uses_jsx")?!0===f.app_entry_uses_jsx:!0===f.src_entry_uses_jsx,b=Reflect.has(f,"cli_entry_uses_jsx")?!0===f.cli_entry_uses_jsx:!0===f.src_entry_uses_jsx;f.form_enabled=y||b||!0===f.form||!0===f.form?.enabled,f.multiple_enabled=f.multiple_enabled||!0===f.multiple||!0===f.multiple?.enabled,!1===f.app?f.app={enabled:!1}:!0===f.app?f.app={enabled:!0,extend:!0===f.app_has_entry,export:!0,react:y}:f.app={enabled:!0,extend:!0===f.app_has_entry,export:!0,react:y,...f.app||{}},f.app.enabled=!0===f.app.enabled&&(!0===t.doc.features.form_enabled||!0===f.app.extend||!0===f.app.enabled),f.app.format=f.app.format||"esm",f.app.folder=f.app.folder||f.app.format||"esm",f.app.dir=`./dist/app/${f.app.folder}`,f.app.html=!1!==f.app.html,!1===f.cli?f.cli={enabled:!1}:!0===f.cli?f.cli={enabled:!0,extend:!0===f.cli_has_entry,export:!0,react:b}:f.cli={enabled:!0,extend:!0===f.cli_has_entry,export:!0,react:b,...f.cli||{}},f.cli.enabled=!0===f.cli.enabled&&(!1===t.doc.features.form_enabled||!0===f.cli.extend||!0===f.cli.enabled),f.cli.format=f.cli.format||"esm",f.cli.folder=f.cli.folder||f.cli.folder||"esm",f.cli.dir=`./dist/cli/${f.cli.folder}`,f.cli.node_options=f.cli.node?.options||f.cli.node_options||"",f.json=f.cli.enabled||f.json,f.bun=f.bun||{},f.bun.build=f.bun.build||{};const x={default:{format:"esm",target:"browser",minify:!1,sourcemap:"external",entrypoints:["./src/default/index.js"],outdir:"./dist/default/esm"},defaultCjs:{format:"cjs",target:"node",minify:!1,sourcemap:"external",entrypoints:["./src/default/index.js"],outdir:"./dist/default/cjs"}};f.cli.enabled&&(x.cli={format:"esm",target:"node",minify:!1,sourcemap:"external",entrypoints:["./src/cli/index.js"],outdir:f.cli.dir}),f.app.enabled&&(x.app={format:"esm",target:"browser",minify:!1,sourcemap:"external",entrypoints:["./src/app/index.js"],outdir:f.app.dir}),f.bun.build=e(x,f.bun.build||{}),f.preact_enabled=!0===f.preact||f.preact&&!1!==f.preact?.enabled,f.dependency_auto_enabled=!1!==f.dependency_auto&&!1!==f.dependency_auto?.enabled,f.npm_install_flags=f.npm_install_flags||"",f.react_version=f.react_version||f.react?.version||18,f.runtime=f.runtime||{},f.runtime.type="bun",f.runtime.template="bun",r({atom:t}),n({atom:t}),i({atom:t}),o({atom:t}),l({atom:t})}async function u({atom:e,packageDependencies:t,packageDevDependencies:a,setProgress:s}){s("Initializing dependencies for Bun");const r=e.doc.dependencies||[];if(r.filter((e=>!e.dev)).forEach((e=>t.push(e))),r.filter((e=>e.dev)).forEach((e=>a.push(e))),"workflow"===e.type&&(t.push({package:"get-value",version:"^3"}),t.push({package:"set-value",version:"^4"})),e.doc.features.form_enabled&&e.doc.features.dependency_auto_enabled){let a="^18.2";s("Fetching React versions");a=`^${(await 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"})}async function m({atom:e,setProgress:s,context:r,packageDependencies:n}){await s({message:"Creating build.js file."});const i={atom:e,packageDependencies:n},o=r.templateDir,l=c.compile(t.readFileSync(a.resolve(o,"build.js.njk"),"utf8"),c.configure(o)).render(i),p=r.projectDir,d=a.resolve(p,"build.js");t.writeFileSync(d,l,"utf8"),t.chmodSync(d,"755")}export{u as a,m as c,f as i};
@@ -0,0 +1 @@
1
+ import t from"node:fs";import i from"node:path";import e from"node:os";import s from"@fnet/list-files";import{B as o}from"./index.Bqzc7Bx8.js";import{i as r,a,c as n,b as c}from"./index.BBrItYB9.js";import{c as l,a as m}from"./index.BwhWziH6.js";import"node:crypto";import"yaml";import"nunjucks";import"chalk";import"@flownet/lib-atom-api-js";import"@fnet/config";import"@flownet/lib-render-templates-dir";import"@fnet/auto-conda-env";import"redis";import"@flownet/lib-is-redis-online";import"@fnet/yaml";class d extends o{async initRuntime(){await r(this.apiContext),await a(this.apiContext),await this.initLibraryDirPython(),await this.initNunjucks(),await this.initLibsPython()}async initLibraryDirPython(){this.setProgress({message:"Initializing library directory."});const o=this.context.projectDir;this.setProgress({message:"Cleaning project directory."});const r=s({dir:o,ignore:[".cache","node_modules",".conda"],absolute:!0});for(const i of r)t.rmSync(i,{recursive:!0,force:!0});this.setProgress({message:"Creating project directory."});let a=o;t.existsSync(a)||t.mkdirSync(a,{recursive:!0}),a=i.join(o,"src"),t.existsSync(a)||t.mkdirSync(a,{recursive:!0}),a=i.join(o,"src","default");const n=this.context.projectSrcDir;if(!t.existsSync(a))try{"win32"===e.platform()?t.symlinkSync(n,a,"junction"):t.symlinkSync(n,a,"dir")}catch(t){throw new Error(`Couldn't create symlink. Error: ${t.message}`)}}async initLibsPython(){this.setProgress({message:"Initializing external libs."});const t=this.atom;t.protocol="local:",t.doc.dependencies=t.doc.dependencies||[],t.name=t.doc.name;const i=[{name:this.atom.doc.name,type:"atom",parent_id:this.atom.parent_id,atom:t}];this.libs=i}async createAtomLibFilesPython({libs:e}){await this.setProgress({message:"Creating external lib files."});const s=e.filter((t=>"atom"===t.type));for(let e=0;e<s.length;e++){const o=s[e].atom;if("local:"===o.protocol){const e=i.resolve(this.context.projectSrcDir,`${o.fileName||o.name}.py`);if(!t.existsSync(e)){t.mkdirSync(i.dirname(e),{recursive:!0});let s="def default():\n";s+=' print("Hello world!")\n',t.writeFileSync(e,s,"utf8")}}}}async build(){try{this.fileMode&&(await this.createAtomLibFilesPython({libs:this.libs}),await this.createProjectYaml(),await l(this.apiContext),await m(this.apiContext),await n(this.apiContext),this.buildMode&&(await c(this.apiContext),this.deployMode&&await this.deploy())),await this._cache_set(this.buildKey,{status:"COMPLETED"})}catch(t){throw await this._cache_set(this.buildKey,{status:"FAILED",message:t.message||t}),console.log(t),t}}}export{d as default};
@@ -0,0 +1 @@
1
+ import e from"node:fs";import a from"node:path";import n from"@flownet/lib-render-templates-dir";import t from"@fnet/auto-conda-env";async function r(e){const{atom:a,context:n,setProgress:t}=e;t("Initializing features..."),a.doc.features=a.doc.features||{};const r=a.doc.features;!1===r.cli?r.cli={enabled:!1}:(r.cli,r.cli={enabled:!0}),r.cli.enabled=!0===r.cli.enabled&&(!1===a.doc.features.form_enabled||!0===r.cli.extend||!0===r.cli.enabled)}async function i({atom:e,packageDependencies:a,packageDevDependencies:n,setProgress:t}){t("Initializing dependencies")}async function o({atom:t,setProgress:r,context:i,packageDependencies:o}){if(!0!==t.doc.features.cli.enabled)return;await r({message:"Creating cli."});const s={atom:t,packageDependencies:o},c=i.templateDir,p=a.join(i.projectDir,"src","cli");e.existsSync(p)||e.mkdirSync(p,{recursive:!0}),await n({pattern:["index.py.njk","__init__.py.njk"],dir:a.join(c,"src","cli"),outDir:p,context:s})}async function s(e){const{setProgress:r,atom:i,context:o}=e;r({message:"Installing Python packages"});const s=o.projectDir,c=await t({pythonVersion:"3.12",packages:[{package:"fnet-import-parser",version:"0.1.9"}]}),{errors:p,result:d}=await c.runBin("fnet_import_parser",["--entry_file",a.join(s,"src","default","index.py")],{captureName:"result"});if(p)throw new Error(p.format());const m=JSON.parse(d.items[0].stdout),l=m.required["third-party"]?.map((e=>({package:e.metadata?.package||e.path,version:e.metadata?.version||void 0,channel:e.metadata?.channel||void 0})))||[],f=i.doc.dependencies||[];for(const e of l)f.some((a=>a.package===e.package))||f.push(e);const u=a.join(s,".conda"),g=await t({envDir:u,pythonVersion:i.doc.features.runtime.version||"3.12",packages:f});o.pythonEnv=g,e.packageDependencies=f;const k=i.doc.features.render?.dirs||[];for(const e of k)e.dir=a.resolve(s,e.dir),e.outDir=a.resolve(s,e.outDir),await n(e);let y={params:{}};y.params.package_name=i.doc.name,y.params.version="0.1.0",y.params.bin_name=i.doc.name,y.params.python_requires=i.doc.features.runtime.version||">=3.12",y.params.dependencies=f,y.params.scripts=JSON.stringify({cli:`PYTHONPATH='${a.join("src")}' '${a.relative(o.projectDir,g.pythonBin)}' '${a.join("src","cli","index.py")}'`}),await n({pattern:["setup.py.njk","package.json.njk","pyproject.toml.njk"],dir:o.templateDir,outDir:o.projectDir,context:y})}export{i as a,s as b,o as c,r as i};