flash-builder 1.0.13 → 1.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +272 -6
- package/dist/index.cjs +44 -46
- package/dist/index.js +46 -46
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,15 +1,281 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ⚡ Flash Builder
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<div align="center">
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
________ __ ____ _ __ __
|
|
7
|
+
/ ____/ /___ ______/ /_ / __ )__ __(_) /___/ /__ _____
|
|
8
|
+
/ /_ / / __ `/ ___/ __ \ / __ / / / / / / __ / _ \/ ___/
|
|
9
|
+
/ __/ / / /_/ (__ ) / / / / /_/ / /_/ / / / /_/ / __/ /
|
|
10
|
+
/_/ /_/\__,_/____/_/ /_/ /_____/\__,_/_/_/\__,_/\___/_/
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**A blazingly fast CLI tool for scaffolding modern backend projects**
|
|
14
|
+
|
|
15
|
+
[](https://www.npmjs.com/package/flash-builder)
|
|
16
|
+
[](https://opensource.org/licenses/MIT)
|
|
17
|
+
|
|
18
|
+
[Installation](#-installation) • [Usage](#-usage) • [Commands](#-commands) • [Examples](#-examples)
|
|
19
|
+
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## ✨ Features
|
|
25
|
+
|
|
26
|
+
- 🚀 **Lightning Fast** - Built with Bun for maximum performance
|
|
27
|
+
- 📦 **Zero Configuration** - Get started immediately with sensible defaults
|
|
28
|
+
- 🎯 **Multiple Templates** - Backend (Express) and MCP Server scaffolding
|
|
29
|
+
- 🔄 **Auto Install** - Automatically installs dependencies after project creation
|
|
30
|
+
- 🎨 **Modern Stack** - TypeScript, Express, and latest best practices
|
|
31
|
+
- 🛠️ **Flexible** - Generate in current directory or create new folders
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 📦 Installation
|
|
36
|
+
|
|
37
|
+
### Global Installation
|
|
4
38
|
|
|
5
39
|
```bash
|
|
6
|
-
bun install
|
|
40
|
+
bun install -g flash-builder@latest
|
|
7
41
|
```
|
|
8
42
|
|
|
9
|
-
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 🚀 Usage
|
|
10
46
|
|
|
11
47
|
```bash
|
|
12
|
-
|
|
48
|
+
fbi <command> [options]
|
|
13
49
|
```
|
|
14
50
|
|
|
15
|
-
|
|
51
|
+
### Quick Start
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Create a new backend project
|
|
55
|
+
fbi be my-project-name
|
|
56
|
+
|
|
57
|
+
# Create in a specific subdirectory
|
|
58
|
+
fbi be my-project-name ./backend
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# Create MCP server project
|
|
62
|
+
fbi mcp my-mcp-server
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
# Sync interface from Flash Builder
|
|
66
|
+
fbi sync
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 📚 Commands
|
|
72
|
+
|
|
73
|
+
### `be <project-name> [target-path]`
|
|
74
|
+
|
|
75
|
+
Initialize a new backend project with Express and TypeScript.
|
|
76
|
+
|
|
77
|
+
**Arguments:**
|
|
78
|
+
- `project-name` - Name of your project (used in package.json)
|
|
79
|
+
- `target-path` - (Optional) Target directory (`.` for current dir, `./path` for subdirectory)
|
|
80
|
+
|
|
81
|
+
**Generated Structure:**
|
|
82
|
+
```
|
|
83
|
+
my-backend/
|
|
84
|
+
├── src/
|
|
85
|
+
│ ├── routes/
|
|
86
|
+
│ ├── controllers/
|
|
87
|
+
│ ├── models/
|
|
88
|
+
│ ├── middlewares/
|
|
89
|
+
│ └── index.ts
|
|
90
|
+
├── .env
|
|
91
|
+
├── .gitignore
|
|
92
|
+
├── package.json
|
|
93
|
+
└── README.md
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Includes:**
|
|
97
|
+
- Express.js server setup
|
|
98
|
+
- TypeScript configuration
|
|
99
|
+
- Environment variables support
|
|
100
|
+
- Auto-installed dependencies
|
|
101
|
+
- Development scripts
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
### `mcp <project-name>`
|
|
106
|
+
|
|
107
|
+
Initialize a new MCP (Model Context Protocol) server project.
|
|
108
|
+
|
|
109
|
+
**Arguments:**
|
|
110
|
+
- `project-name` - Name of your MCP server project
|
|
111
|
+
|
|
112
|
+
**Generated Structure:**
|
|
113
|
+
```
|
|
114
|
+
my-mcp-server/
|
|
115
|
+
├── src/
|
|
116
|
+
│ ├── tools/
|
|
117
|
+
│ ├── resources/
|
|
118
|
+
│ └── index.ts
|
|
119
|
+
├── .env
|
|
120
|
+
├── .gitignore
|
|
121
|
+
├── package.json
|
|
122
|
+
└── README.md
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Includes:**
|
|
126
|
+
- MCP SDK setup
|
|
127
|
+
- TypeScript configuration
|
|
128
|
+
- Tools and resources directories
|
|
129
|
+
- Auto-installed dependencies
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
### `sync`
|
|
134
|
+
|
|
135
|
+
Sync the current backend interface with the application target.
|
|
136
|
+
|
|
137
|
+
**Usage:**
|
|
138
|
+
```bash
|
|
139
|
+
fbi sync
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 🎯 Examples
|
|
145
|
+
|
|
146
|
+
### Create Backend Project
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# Standard - creates new folder
|
|
150
|
+
fbi be my-api
|
|
151
|
+
|
|
152
|
+
# In current directory
|
|
153
|
+
fbi be my-api .
|
|
154
|
+
|
|
155
|
+
# In subdirectory
|
|
156
|
+
fbi be my-api ./backend
|
|
157
|
+
|
|
158
|
+
# With verbose logging
|
|
159
|
+
fbi be my-api --verbose
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Create MCP Server
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
# Standard MCP server
|
|
166
|
+
fbi mcp my-mcp-server
|
|
167
|
+
|
|
168
|
+
# With verbose logging
|
|
169
|
+
fbi mcp my-mcp-server -v
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### After Project Creation
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
cd my-api
|
|
176
|
+
bun run dev
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## ⚙️ Options
|
|
182
|
+
|
|
183
|
+
| Option | Alias | Description |
|
|
184
|
+
|--------|-------|-------------|
|
|
185
|
+
| `--verbose` | `-v` | Enable verbose logging |
|
|
186
|
+
| `--help` | `-h` | Show help message |
|
|
187
|
+
| `--version` | | Show version number |
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## 🔧 Development
|
|
192
|
+
|
|
193
|
+
### Prerequisites
|
|
194
|
+
|
|
195
|
+
- [Bun](https://bun.sh) v1.3.6 or higher
|
|
196
|
+
|
|
197
|
+
### Setup
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# Clone the repository
|
|
201
|
+
git clone https://github.com/jefripunza/flash-builder-cli.git
|
|
202
|
+
cd flash-builder-cli
|
|
203
|
+
|
|
204
|
+
# Install dependencies
|
|
205
|
+
bun install
|
|
206
|
+
|
|
207
|
+
# Run in development
|
|
208
|
+
bun run start
|
|
209
|
+
|
|
210
|
+
# Build for production
|
|
211
|
+
bun run build
|
|
212
|
+
|
|
213
|
+
# Compile binary
|
|
214
|
+
bun run compile
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## 📝 Project Templates
|
|
220
|
+
|
|
221
|
+
### Backend (Express) Template
|
|
222
|
+
|
|
223
|
+
- **Framework:** Express.js
|
|
224
|
+
- **Language:** TypeScript
|
|
225
|
+
- **Runtime:** Bun
|
|
226
|
+
- **Features:**
|
|
227
|
+
- REST API structure
|
|
228
|
+
- Environment variables
|
|
229
|
+
- Hot reload in development
|
|
230
|
+
- Production build script
|
|
231
|
+
|
|
232
|
+
### MCP Server Template
|
|
233
|
+
|
|
234
|
+
- **Driver:** [jefriherditriyanto/langchain-mcp-api](https://hub.docker.com/r/jefriherditriyanto/langchain-mcp-api)
|
|
235
|
+
- **Runtime:** Docker
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## 🤝 Contributing
|
|
240
|
+
|
|
241
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
242
|
+
|
|
243
|
+
1. Fork the repository
|
|
244
|
+
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
|
|
245
|
+
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
|
|
246
|
+
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
247
|
+
5. Open a Pull Request
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## 📄 License
|
|
252
|
+
|
|
253
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## 👤 Author
|
|
258
|
+
|
|
259
|
+
<a href="https://github.com/jefripunza">
|
|
260
|
+
<img src="https://github.com/jefripunza.png" width="50" height="50" alt="Jefri Herdi Triyanto" style="border-radius: 50%;">
|
|
261
|
+
</a>
|
|
262
|
+
|
|
263
|
+
**Jefri Herdi Triyanto** ([@jefripunza](https://github.com/jefripunza))
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## 🙏 Acknowledgments
|
|
268
|
+
|
|
269
|
+
- Built with [Bun](https://bun.sh) - A fast all-in-one JavaScript runtime
|
|
270
|
+
- Powered by [meow](https://github.com/sindresorhus/meow) - CLI helper
|
|
271
|
+
- Inspired by modern development workflows
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
<div align="center">
|
|
276
|
+
|
|
277
|
+
**⚡ Flash Builder - Build faster, ship sooner**
|
|
278
|
+
|
|
279
|
+
Made with ❤️ by [Jefri Herdi Triyanto](https://github.com/jefripunza)
|
|
280
|
+
|
|
281
|
+
</div>
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
#!/usr/bin/env
|
|
2
|
-
|
|
3
|
-
(function(exports, require, module, __filename, __dirname) {var __create = Object.create;
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var __create = Object.create;
|
|
4
3
|
var __getProtoOf = Object.getPrototypeOf;
|
|
5
4
|
var __defProp = Object.defineProperty;
|
|
6
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -98,17 +97,17 @@ var require_main = __commonJS((exports2, module2) => {
|
|
|
98
97
|
"\uD83D\uDD10 prevent building .env in docker: https://dotenvx.com/prebuild",
|
|
99
98
|
"\uD83D\uDCE1 add observability to secrets: https://dotenvx.com/ops",
|
|
100
99
|
"\uD83D\uDC65 sync secrets across teammates & machines: https://dotenvx.com/ops",
|
|
101
|
-
"\uD83D\uDDC2
|
|
102
|
-
"
|
|
100
|
+
"\uD83D\uDDC2️ backup and recover secrets: https://dotenvx.com/ops",
|
|
101
|
+
"✅ audit secrets and track compliance: https://dotenvx.com/ops",
|
|
103
102
|
"\uD83D\uDD04 add secrets lifecycle management: https://dotenvx.com/ops",
|
|
104
103
|
"\uD83D\uDD11 add access controls to secrets: https://dotenvx.com/ops",
|
|
105
|
-
"\uD83D\uDEE0
|
|
106
|
-
"
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"
|
|
104
|
+
"\uD83D\uDEE0️ run anywhere with `dotenvx run -- yourcommand`",
|
|
105
|
+
"⚙️ specify custom .env file path with { path: '/custom/path/.env' }",
|
|
106
|
+
"⚙️ enable debug logging with { debug: true }",
|
|
107
|
+
"⚙️ override existing env vars with { override: true }",
|
|
108
|
+
"⚙️ suppress all logs with { quiet: true }",
|
|
109
|
+
"⚙️ write to custom object with { processEnv: myObject }",
|
|
110
|
+
"⚙️ load multiple .env files with { path: ['.env.local', '.env'] }"
|
|
112
111
|
];
|
|
113
112
|
function _getRandomTip() {
|
|
114
113
|
return TIPS[Math.floor(Math.random() * TIPS.length)];
|
|
@@ -414,17 +413,17 @@ var require_main = __commonJS((exports2, module2) => {
|
|
|
414
413
|
});
|
|
415
414
|
|
|
416
415
|
// node_modules/meow/build/index.js
|
|
417
|
-
var import_node_process4 = __toESM(require("process"));
|
|
416
|
+
var import_node_process4 = __toESM(require("node:process"));
|
|
418
417
|
|
|
419
418
|
// node_modules/meow/build/dependencies.js
|
|
420
419
|
var import_util = __toESM(require("util"));
|
|
421
420
|
var import_path = require("path");
|
|
422
421
|
var import_fs = require("fs");
|
|
423
|
-
var import_node_module = __toESM(require("module"));
|
|
424
|
-
var import_node_path = __toESM(require("path"));
|
|
425
|
-
var import_node_process = __toESM(require("process"));
|
|
426
|
-
var import_node_url = __toESM(require("url"));
|
|
427
|
-
var import_node_fs = __toESM(require("fs"));
|
|
422
|
+
var import_node_module = __toESM(require("node:module"));
|
|
423
|
+
var import_node_path = __toESM(require("node:path"));
|
|
424
|
+
var import_node_process = __toESM(require("node:process"));
|
|
425
|
+
var import_node_url = __toESM(require("node:url"));
|
|
426
|
+
var import_node_fs = __toESM(require("node:fs"));
|
|
428
427
|
var import_url = __toESM(require("url"));
|
|
429
428
|
function camelCase$1(str) {
|
|
430
429
|
const isCamelCase = str !== str.toLowerCase() && str !== str.toUpperCase();
|
|
@@ -2036,8 +2035,8 @@ function requireIdentifier() {
|
|
|
2036
2035
|
identifier.isIdentifierChar = isIdentifierChar;
|
|
2037
2036
|
identifier.isIdentifierName = isIdentifierName;
|
|
2038
2037
|
identifier.isIdentifierStart = isIdentifierStart;
|
|
2039
|
-
let nonASCIIidentifierStartChars = "
|
|
2040
|
-
let nonASCIIidentifierChars = "
|
|
2038
|
+
let nonASCIIidentifierStartChars = "ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࡰ-ࢇࢉ-ࢎࢠ-ࣉऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౝౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೝೞೠೡೱೲഄ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜑᜟ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭌᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-Ა-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ゛-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ㐀-䶿一-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-Ꟑꟑꟓꟕ-ꟲ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭩꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ";
|
|
2039
|
+
let nonASCIIidentifierChars = "·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-٩ٰۖ-ۜ۟-۪ۤۧۨ-ۭ۰-۹ܑܰ-݊ަ-ް߀-߉߫-߽߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛-࢟࣊-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣ०-९ঁ-ঃ়া-ৄেৈো-্ৗৢৣ০-৯৾ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣ૦-૯ૺ-૿ଁ-ଃ଼ା-ୄେୈୋ-୍୕-ୗୢୣ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఀ-ఄ఼ా-ౄె-ైొ-్ౕౖౢౣ౦-౯ಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣ೦-೯ೳഀ-ഃ഻഼ാ-ൄെ-ൈൊ-്ൗൢൣ൦-൯ඁ-ඃ්ා-ුූෘ-ෟ෦-෯ෲෳัิ-ฺ็-๎๐-๙ັິ-ຼ່-໎໐-໙༘༙༠-༩༹༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှ၀-၉ၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟፩-፱ᜒ-᜕ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝០-៩᠋-᠍᠏-᠙ᢩᤠ-ᤫᤰ-᤻᥆-᥏᧐-᧚ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪰-᪽ᪿ-ᫎᬀ-ᬄ᬴-᭄᭐-᭙᭫-᭳ᮀ-ᮂᮡ-ᮭ᮰-᮹᯦-᯳ᰤ-᰷᱀-᱉᱐-᱙᳐-᳔᳒-᳨᳭᳴᳷-᳹᷀-᷿‿⁀⁔⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯・꘠-꘩꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧ꠬ꢀꢁꢴ-ꣅ꣐-꣙꣠-꣱ꣿ-꤉ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀꧐-꧙ꧥ꧰-꧹ꨩ-ꨶꩃꩌꩍ꩐-꩙ꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭꯰-꯹ﬞ︀-️︠-︯︳︴﹍-﹏0-9_・";
|
|
2041
2040
|
const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
|
|
2042
2041
|
const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
|
|
2043
2042
|
nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
|
|
@@ -9498,9 +9497,9 @@ function decamelizeKeys(input, options) {
|
|
|
9498
9497
|
}
|
|
9499
9498
|
|
|
9500
9499
|
// node_modules/meow/build/options.js
|
|
9501
|
-
var import_node_process2 = __toESM(require("process"));
|
|
9502
|
-
var import_node_path2 = __toESM(require("path"));
|
|
9503
|
-
var import_node_url2 = require("url");
|
|
9500
|
+
var import_node_process2 = __toESM(require("node:process"));
|
|
9501
|
+
var import_node_path2 = __toESM(require("node:path"));
|
|
9502
|
+
var import_node_url2 = require("node:url");
|
|
9504
9503
|
|
|
9505
9504
|
// node_modules/meow/build/utils.js
|
|
9506
9505
|
var decamelizeFlagKey = (flagKey) => `--${decamelize(flagKey, { separator: "-" })}`;
|
|
@@ -9645,7 +9644,7 @@ var buildParserOptions = (options) => {
|
|
|
9645
9644
|
};
|
|
9646
9645
|
|
|
9647
9646
|
// node_modules/meow/build/validate.js
|
|
9648
|
-
var import_node_process3 = __toESM(require("process"));
|
|
9647
|
+
var import_node_process3 = __toESM(require("node:process"));
|
|
9649
9648
|
var validateFlags = (flags, options) => {
|
|
9650
9649
|
for (const [flagKey, flagValue] of Object.entries(options.flags)) {
|
|
9651
9650
|
if (flagKey !== "--" && !flagValue.isMultiple && Array.isArray(flags[flagKey])) {
|
|
@@ -9819,7 +9818,7 @@ var meow = (helpText, options = {}) => {
|
|
|
9819
9818
|
};
|
|
9820
9819
|
|
|
9821
9820
|
// version.ts
|
|
9822
|
-
var version = "1.0.
|
|
9821
|
+
var version = "1.0.15";
|
|
9823
9822
|
var version_default = version;
|
|
9824
9823
|
|
|
9825
9824
|
// src/banner.ts
|
|
@@ -9847,8 +9846,8 @@ var LLM_BASE_URL = ENV.LLM_BASE_URL;
|
|
|
9847
9846
|
var LLM_API_KEY = ENV.LLM_API_KEY || "";
|
|
9848
9847
|
|
|
9849
9848
|
// src/commands/be/index.ts
|
|
9850
|
-
var import_node_fs2 = require("fs");
|
|
9851
|
-
var import_node_path3 = require("path");
|
|
9849
|
+
var import_node_fs2 = require("node:fs");
|
|
9850
|
+
var import_node_path3 = require("node:path");
|
|
9852
9851
|
|
|
9853
9852
|
// src/utils/logger.ts
|
|
9854
9853
|
function log(message, isVerbose = false, verbose = false) {
|
|
@@ -9919,7 +9918,7 @@ var envFile = `PORT=3000
|
|
|
9919
9918
|
// src/commands/be/index.ts
|
|
9920
9919
|
function beCommand(projectName, verbose, targetPath) {
|
|
9921
9920
|
if (!projectName) {
|
|
9922
|
-
console.error("
|
|
9921
|
+
console.error("❌ Error: Project name is required");
|
|
9923
9922
|
console.log("Usage: fbi be <project-name>");
|
|
9924
9923
|
process.exit(1);
|
|
9925
9924
|
}
|
|
@@ -9933,13 +9932,13 @@ function beCommand(projectName, verbose, targetPath) {
|
|
|
9933
9932
|
const dirContent = import_node_fs2.readdirSync(projectPath);
|
|
9934
9933
|
const hasContent = dirContent.length > 0;
|
|
9935
9934
|
if (IS_NPMJS && hasContent) {
|
|
9936
|
-
console.warn(
|
|
9935
|
+
console.warn(`⚠️ Warning: Directory '${projectName}' already exists and is not empty`);
|
|
9937
9936
|
const answer = prompt("Do you want to continue and overwrite? (y/n): ");
|
|
9938
9937
|
if (answer?.toLowerCase() !== "y") {
|
|
9939
|
-
console.log("
|
|
9938
|
+
console.log("❌ Operation cancelled");
|
|
9940
9939
|
process.exit(1);
|
|
9941
9940
|
}
|
|
9942
|
-
console.log("
|
|
9941
|
+
console.log("✅ Continuing...");
|
|
9943
9942
|
}
|
|
9944
9943
|
}
|
|
9945
9944
|
if (!IS_NPMJS) {
|
|
@@ -9958,7 +9957,7 @@ function beCommand(projectName, verbose, targetPath) {
|
|
|
9958
9957
|
import_node_fs2.writeFileSync(import_node_path3.join(projectPath, ".env"), envFile);
|
|
9959
9958
|
import_node_fs2.writeFileSync(import_node_path3.join(projectPath, ".gitignore"), gitignore);
|
|
9960
9959
|
import_node_fs2.writeFileSync(import_node_path3.join(projectPath, "README.md"), readme(projectName));
|
|
9961
|
-
log(
|
|
9960
|
+
log(`✅ Backend project '${projectName}' created successfully!`, false, verbose);
|
|
9962
9961
|
log(`
|
|
9963
9962
|
\uD83D\uDCE6 Installing dependencies...`, false, verbose);
|
|
9964
9963
|
const installProcess = Bun.spawnSync(["bun", "install"], {
|
|
@@ -9967,9 +9966,9 @@ function beCommand(projectName, verbose, targetPath) {
|
|
|
9967
9966
|
stderr: "inherit"
|
|
9968
9967
|
});
|
|
9969
9968
|
if (installProcess.exitCode === 0) {
|
|
9970
|
-
log(
|
|
9969
|
+
log(`✅ Dependencies installed successfully!`, false, verbose);
|
|
9971
9970
|
} else {
|
|
9972
|
-
log(
|
|
9971
|
+
log(`❌ Failed to install dependencies`, false, verbose);
|
|
9973
9972
|
}
|
|
9974
9973
|
log(`
|
|
9975
9974
|
Next steps:`, true, verbose);
|
|
@@ -9980,17 +9979,17 @@ Next steps:`, true, verbose);
|
|
|
9980
9979
|
}
|
|
9981
9980
|
|
|
9982
9981
|
// src/commands/mcp/index.ts
|
|
9983
|
-
var import_node_fs3 = require("fs");
|
|
9984
|
-
var import_node_path4 = require("path");
|
|
9982
|
+
var import_node_fs3 = require("node:fs");
|
|
9983
|
+
var import_node_path4 = require("node:path");
|
|
9985
9984
|
function mcpCommand(projectName, verbose) {
|
|
9986
9985
|
if (!projectName) {
|
|
9987
|
-
console.error("
|
|
9986
|
+
console.error("❌ Error: Project name is required");
|
|
9988
9987
|
console.log("Usage: fbi mcp <project-name>");
|
|
9989
9988
|
process.exit(1);
|
|
9990
9989
|
}
|
|
9991
9990
|
const projectPath = import_node_path4.join(PWD, projectName);
|
|
9992
9991
|
if (import_node_fs3.existsSync(projectPath)) {
|
|
9993
|
-
console.error(
|
|
9992
|
+
console.error(`❌ Error: Directory '${projectName}' already exists`);
|
|
9994
9993
|
process.exit(1);
|
|
9995
9994
|
}
|
|
9996
9995
|
log(`\uD83D\uDE80 Creating new MCP server project: ${projectName}`, false, verbose);
|
|
@@ -10060,7 +10059,7 @@ bun install
|
|
|
10060
10059
|
bun run dev
|
|
10061
10060
|
\`\`\`
|
|
10062
10061
|
`);
|
|
10063
|
-
log(
|
|
10062
|
+
log(`✅ MCP server project '${projectName}' created successfully!`, false, verbose);
|
|
10064
10063
|
log(`
|
|
10065
10064
|
Next steps:`, true, verbose);
|
|
10066
10065
|
log(` cd ${projectName}`, true, verbose);
|
|
@@ -10069,13 +10068,13 @@ Next steps:`, true, verbose);
|
|
|
10069
10068
|
}
|
|
10070
10069
|
|
|
10071
10070
|
// src/commands/sync/index.ts
|
|
10072
|
-
var import_node_fs4 = require("fs");
|
|
10073
|
-
var import_node_path5 = require("path");
|
|
10071
|
+
var import_node_fs4 = require("node:fs");
|
|
10072
|
+
var import_node_path5 = require("node:path");
|
|
10074
10073
|
function syncCommand(verbose) {
|
|
10075
10074
|
log(`\uD83D\uDD04 Syncing backend interface with application target...`, false, verbose);
|
|
10076
10075
|
const packageJsonPath = import_node_path5.join(PWD, "package.json");
|
|
10077
10076
|
if (!import_node_fs4.existsSync(packageJsonPath)) {
|
|
10078
|
-
console.error("
|
|
10077
|
+
console.error("❌ Error: package.json not found in current directory");
|
|
10079
10078
|
console.log("Make sure you're in a project directory");
|
|
10080
10079
|
process.exit(1);
|
|
10081
10080
|
}
|
|
@@ -10083,9 +10082,9 @@ function syncCommand(verbose) {
|
|
|
10083
10082
|
const packageJson2 = JSON.parse(import_node_fs4.readFileSync(packageJsonPath, "utf-8"));
|
|
10084
10083
|
log(`Project: ${packageJson2.name}`, true, verbose);
|
|
10085
10084
|
log(`Version: ${packageJson2.version}`, true, verbose);
|
|
10086
|
-
log(
|
|
10085
|
+
log(`✅ Sync completed successfully!`, false, verbose);
|
|
10087
10086
|
} catch (error) {
|
|
10088
|
-
console.error("
|
|
10087
|
+
console.error("❌ Error reading package.json:", error);
|
|
10089
10088
|
process.exit(1);
|
|
10090
10089
|
}
|
|
10091
10090
|
}
|
|
@@ -10133,9 +10132,8 @@ switch (command) {
|
|
|
10133
10132
|
break;
|
|
10134
10133
|
default:
|
|
10135
10134
|
if (command) {
|
|
10136
|
-
console.error(
|
|
10135
|
+
console.error(`❌ Unknown command: ${command}`);
|
|
10137
10136
|
}
|
|
10138
10137
|
cli.showHelp();
|
|
10139
10138
|
process.exit(command ? 1 : 0);
|
|
10140
10139
|
}
|
|
10141
|
-
})
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
#!/usr/bin/env
|
|
2
|
-
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
3
|
var __create = Object.create;
|
|
4
4
|
var __getProtoOf = Object.getPrototypeOf;
|
|
5
5
|
var __defProp = Object.defineProperty;
|
|
@@ -17,7 +17,7 @@ var __toESM = (mod, isNodeMode, target) => {
|
|
|
17
17
|
return to;
|
|
18
18
|
};
|
|
19
19
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
20
|
-
var __require = import.meta.
|
|
20
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
21
21
|
|
|
22
22
|
// node_modules/dotenv/package.json
|
|
23
23
|
var require_package = __commonJS((exports, module) => {
|
|
@@ -99,17 +99,17 @@ var require_main = __commonJS((exports, module) => {
|
|
|
99
99
|
"\uD83D\uDD10 prevent building .env in docker: https://dotenvx.com/prebuild",
|
|
100
100
|
"\uD83D\uDCE1 add observability to secrets: https://dotenvx.com/ops",
|
|
101
101
|
"\uD83D\uDC65 sync secrets across teammates & machines: https://dotenvx.com/ops",
|
|
102
|
-
"\uD83D\uDDC2
|
|
103
|
-
"
|
|
102
|
+
"\uD83D\uDDC2️ backup and recover secrets: https://dotenvx.com/ops",
|
|
103
|
+
"✅ audit secrets and track compliance: https://dotenvx.com/ops",
|
|
104
104
|
"\uD83D\uDD04 add secrets lifecycle management: https://dotenvx.com/ops",
|
|
105
105
|
"\uD83D\uDD11 add access controls to secrets: https://dotenvx.com/ops",
|
|
106
|
-
"\uD83D\uDEE0
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"
|
|
112
|
-
"
|
|
106
|
+
"\uD83D\uDEE0️ run anywhere with `dotenvx run -- yourcommand`",
|
|
107
|
+
"⚙️ specify custom .env file path with { path: '/custom/path/.env' }",
|
|
108
|
+
"⚙️ enable debug logging with { debug: true }",
|
|
109
|
+
"⚙️ override existing env vars with { override: true }",
|
|
110
|
+
"⚙️ suppress all logs with { quiet: true }",
|
|
111
|
+
"⚙️ write to custom object with { processEnv: myObject }",
|
|
112
|
+
"⚙️ load multiple .env files with { path: ['.env.local', '.env'] }"
|
|
113
113
|
];
|
|
114
114
|
function _getRandomTip() {
|
|
115
115
|
return TIPS[Math.floor(Math.random() * TIPS.length)];
|
|
@@ -415,17 +415,17 @@ var require_main = __commonJS((exports, module) => {
|
|
|
415
415
|
});
|
|
416
416
|
|
|
417
417
|
// node_modules/meow/build/index.js
|
|
418
|
-
import process4 from "process";
|
|
418
|
+
import process4 from "node:process";
|
|
419
419
|
|
|
420
420
|
// node_modules/meow/build/dependencies.js
|
|
421
421
|
import require$$0$1, { format } from "util";
|
|
422
422
|
import { resolve, normalize } from "path";
|
|
423
423
|
import { readFileSync } from "fs";
|
|
424
|
-
import require$$4, { createRequire } from "module";
|
|
425
|
-
import path from "path";
|
|
426
|
-
import process$1 from "process";
|
|
427
|
-
import require$$0$2, { fileURLToPath } from "url";
|
|
428
|
-
import fs from "fs";
|
|
424
|
+
import require$$4, { createRequire as createRequire2 } from "node:module";
|
|
425
|
+
import path from "node:path";
|
|
426
|
+
import process$1 from "node:process";
|
|
427
|
+
import require$$0$2, { fileURLToPath } from "node:url";
|
|
428
|
+
import fs from "node:fs";
|
|
429
429
|
import require$$0 from "url";
|
|
430
430
|
function camelCase$1(str) {
|
|
431
431
|
const isCamelCase = str !== str.toLowerCase() && str !== str.toUpperCase();
|
|
@@ -1364,7 +1364,7 @@ if (nodeVersion) {
|
|
|
1364
1364
|
}
|
|
1365
1365
|
}
|
|
1366
1366
|
var env = process ? process.env : {};
|
|
1367
|
-
var require2 =
|
|
1367
|
+
var require2 = createRequire2 ? createRequire2(import.meta.url) : undefined;
|
|
1368
1368
|
var parser = new YargsParser({
|
|
1369
1369
|
cwd: process.cwd,
|
|
1370
1370
|
env: () => {
|
|
@@ -2037,8 +2037,8 @@ function requireIdentifier() {
|
|
|
2037
2037
|
identifier.isIdentifierChar = isIdentifierChar;
|
|
2038
2038
|
identifier.isIdentifierName = isIdentifierName;
|
|
2039
2039
|
identifier.isIdentifierStart = isIdentifierStart;
|
|
2040
|
-
let nonASCIIidentifierStartChars = "
|
|
2041
|
-
let nonASCIIidentifierChars = "
|
|
2040
|
+
let nonASCIIidentifierStartChars = "ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࡰ-ࢇࢉ-ࢎࢠ-ࣉऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౝౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೝೞೠೡೱೲഄ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜑᜟ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭌᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-Ა-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ゛-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ㐀-䶿一-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-Ꟑꟑꟓꟕ-ꟲ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭩꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ";
|
|
2041
|
+
let nonASCIIidentifierChars = "·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-٩ٰۖ-ۜ۟-۪ۤۧۨ-ۭ۰-۹ܑܰ-݊ަ-ް߀-߉߫-߽߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛-࢟࣊-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣ०-९ঁ-ঃ়া-ৄেৈো-্ৗৢৣ০-৯৾ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣ૦-૯ૺ-૿ଁ-ଃ଼ା-ୄେୈୋ-୍୕-ୗୢୣ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఀ-ఄ఼ా-ౄె-ైొ-్ౕౖౢౣ౦-౯ಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣ೦-೯ೳഀ-ഃ഻഼ാ-ൄെ-ൈൊ-്ൗൢൣ൦-൯ඁ-ඃ්ා-ුූෘ-ෟ෦-෯ෲෳัิ-ฺ็-๎๐-๙ັິ-ຼ່-໎໐-໙༘༙༠-༩༹༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှ၀-၉ၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟፩-፱ᜒ-᜕ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝០-៩᠋-᠍᠏-᠙ᢩᤠ-ᤫᤰ-᤻᥆-᥏᧐-᧚ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪰-᪽ᪿ-ᫎᬀ-ᬄ᬴-᭄᭐-᭙᭫-᭳ᮀ-ᮂᮡ-ᮭ᮰-᮹᯦-᯳ᰤ-᰷᱀-᱉᱐-᱙᳐-᳔᳒-᳨᳭᳴᳷-᳹᷀-᷿‿⁀⁔⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯・꘠-꘩꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧ꠬ꢀꢁꢴ-ꣅ꣐-꣙꣠-꣱ꣿ-꤉ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀꧐-꧙ꧥ꧰-꧹ꨩ-ꨶꩃꩌꩍ꩐-꩙ꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭꯰-꯹ﬞ︀-️︠-︯︳︴﹍-﹏0-9_・";
|
|
2042
2042
|
const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
|
|
2043
2043
|
const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
|
|
2044
2044
|
nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
|
|
@@ -9499,9 +9499,9 @@ function decamelizeKeys(input, options) {
|
|
|
9499
9499
|
}
|
|
9500
9500
|
|
|
9501
9501
|
// node_modules/meow/build/options.js
|
|
9502
|
-
import process2 from "process";
|
|
9503
|
-
import path2 from "path";
|
|
9504
|
-
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
9502
|
+
import process2 from "node:process";
|
|
9503
|
+
import path2 from "node:path";
|
|
9504
|
+
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
9505
9505
|
|
|
9506
9506
|
// node_modules/meow/build/utils.js
|
|
9507
9507
|
var decamelizeFlagKey = (flagKey) => `--${decamelize(flagKey, { separator: "-" })}`;
|
|
@@ -9646,7 +9646,7 @@ var buildParserOptions = (options) => {
|
|
|
9646
9646
|
};
|
|
9647
9647
|
|
|
9648
9648
|
// node_modules/meow/build/validate.js
|
|
9649
|
-
import process3 from "process";
|
|
9649
|
+
import process3 from "node:process";
|
|
9650
9650
|
var validateFlags = (flags, options) => {
|
|
9651
9651
|
for (const [flagKey, flagValue] of Object.entries(options.flags)) {
|
|
9652
9652
|
if (flagKey !== "--" && !flagValue.isMultiple && Array.isArray(flags[flagKey])) {
|
|
@@ -9820,7 +9820,7 @@ var meow = (helpText, options = {}) => {
|
|
|
9820
9820
|
};
|
|
9821
9821
|
|
|
9822
9822
|
// version.ts
|
|
9823
|
-
var version = "1.0.
|
|
9823
|
+
var version = "1.0.15";
|
|
9824
9824
|
var version_default = version;
|
|
9825
9825
|
|
|
9826
9826
|
// src/banner.ts
|
|
@@ -9854,8 +9854,8 @@ import {
|
|
|
9854
9854
|
writeFileSync,
|
|
9855
9855
|
rmSync,
|
|
9856
9856
|
readdirSync
|
|
9857
|
-
} from "fs";
|
|
9858
|
-
import { join } from "path";
|
|
9857
|
+
} from "node:fs";
|
|
9858
|
+
import { join } from "node:path";
|
|
9859
9859
|
|
|
9860
9860
|
// src/utils/logger.ts
|
|
9861
9861
|
function log(message, isVerbose = false, verbose = false) {
|
|
@@ -9926,7 +9926,7 @@ var envFile = `PORT=3000
|
|
|
9926
9926
|
// src/commands/be/index.ts
|
|
9927
9927
|
function beCommand(projectName, verbose, targetPath) {
|
|
9928
9928
|
if (!projectName) {
|
|
9929
|
-
console.error("
|
|
9929
|
+
console.error("❌ Error: Project name is required");
|
|
9930
9930
|
console.log("Usage: fbi be <project-name>");
|
|
9931
9931
|
process.exit(1);
|
|
9932
9932
|
}
|
|
@@ -9940,13 +9940,13 @@ function beCommand(projectName, verbose, targetPath) {
|
|
|
9940
9940
|
const dirContent = readdirSync(projectPath);
|
|
9941
9941
|
const hasContent = dirContent.length > 0;
|
|
9942
9942
|
if (IS_NPMJS && hasContent) {
|
|
9943
|
-
console.warn(
|
|
9943
|
+
console.warn(`⚠️ Warning: Directory '${projectName}' already exists and is not empty`);
|
|
9944
9944
|
const answer = prompt("Do you want to continue and overwrite? (y/n): ");
|
|
9945
9945
|
if (answer?.toLowerCase() !== "y") {
|
|
9946
|
-
console.log("
|
|
9946
|
+
console.log("❌ Operation cancelled");
|
|
9947
9947
|
process.exit(1);
|
|
9948
9948
|
}
|
|
9949
|
-
console.log("
|
|
9949
|
+
console.log("✅ Continuing...");
|
|
9950
9950
|
}
|
|
9951
9951
|
}
|
|
9952
9952
|
if (!IS_NPMJS) {
|
|
@@ -9965,7 +9965,7 @@ function beCommand(projectName, verbose, targetPath) {
|
|
|
9965
9965
|
writeFileSync(join(projectPath, ".env"), envFile);
|
|
9966
9966
|
writeFileSync(join(projectPath, ".gitignore"), gitignore);
|
|
9967
9967
|
writeFileSync(join(projectPath, "README.md"), readme(projectName));
|
|
9968
|
-
log(
|
|
9968
|
+
log(`✅ Backend project '${projectName}' created successfully!`, false, verbose);
|
|
9969
9969
|
log(`
|
|
9970
9970
|
\uD83D\uDCE6 Installing dependencies...`, false, verbose);
|
|
9971
9971
|
const installProcess = Bun.spawnSync(["bun", "install"], {
|
|
@@ -9974,9 +9974,9 @@ function beCommand(projectName, verbose, targetPath) {
|
|
|
9974
9974
|
stderr: "inherit"
|
|
9975
9975
|
});
|
|
9976
9976
|
if (installProcess.exitCode === 0) {
|
|
9977
|
-
log(
|
|
9977
|
+
log(`✅ Dependencies installed successfully!`, false, verbose);
|
|
9978
9978
|
} else {
|
|
9979
|
-
log(
|
|
9979
|
+
log(`❌ Failed to install dependencies`, false, verbose);
|
|
9980
9980
|
}
|
|
9981
9981
|
log(`
|
|
9982
9982
|
Next steps:`, true, verbose);
|
|
@@ -9987,17 +9987,17 @@ Next steps:`, true, verbose);
|
|
|
9987
9987
|
}
|
|
9988
9988
|
|
|
9989
9989
|
// src/commands/mcp/index.ts
|
|
9990
|
-
import { existsSync as existsSync2, mkdirSync as mkdirSync2, writeFileSync as writeFileSync2 } from "fs";
|
|
9991
|
-
import { join as join2 } from "path";
|
|
9990
|
+
import { existsSync as existsSync2, mkdirSync as mkdirSync2, writeFileSync as writeFileSync2 } from "node:fs";
|
|
9991
|
+
import { join as join2 } from "node:path";
|
|
9992
9992
|
function mcpCommand(projectName, verbose) {
|
|
9993
9993
|
if (!projectName) {
|
|
9994
|
-
console.error("
|
|
9994
|
+
console.error("❌ Error: Project name is required");
|
|
9995
9995
|
console.log("Usage: fbi mcp <project-name>");
|
|
9996
9996
|
process.exit(1);
|
|
9997
9997
|
}
|
|
9998
9998
|
const projectPath = join2(PWD, projectName);
|
|
9999
9999
|
if (existsSync2(projectPath)) {
|
|
10000
|
-
console.error(
|
|
10000
|
+
console.error(`❌ Error: Directory '${projectName}' already exists`);
|
|
10001
10001
|
process.exit(1);
|
|
10002
10002
|
}
|
|
10003
10003
|
log(`\uD83D\uDE80 Creating new MCP server project: ${projectName}`, false, verbose);
|
|
@@ -10067,7 +10067,7 @@ bun install
|
|
|
10067
10067
|
bun run dev
|
|
10068
10068
|
\`\`\`
|
|
10069
10069
|
`);
|
|
10070
|
-
log(
|
|
10070
|
+
log(`✅ MCP server project '${projectName}' created successfully!`, false, verbose);
|
|
10071
10071
|
log(`
|
|
10072
10072
|
Next steps:`, true, verbose);
|
|
10073
10073
|
log(` cd ${projectName}`, true, verbose);
|
|
@@ -10076,13 +10076,13 @@ Next steps:`, true, verbose);
|
|
|
10076
10076
|
}
|
|
10077
10077
|
|
|
10078
10078
|
// src/commands/sync/index.ts
|
|
10079
|
-
import { existsSync as existsSync3, readFileSync as readFileSync2 } from "fs";
|
|
10080
|
-
import { join as join3 } from "path";
|
|
10079
|
+
import { existsSync as existsSync3, readFileSync as readFileSync2 } from "node:fs";
|
|
10080
|
+
import { join as join3 } from "node:path";
|
|
10081
10081
|
function syncCommand(verbose) {
|
|
10082
10082
|
log(`\uD83D\uDD04 Syncing backend interface with application target...`, false, verbose);
|
|
10083
10083
|
const packageJsonPath = join3(PWD, "package.json");
|
|
10084
10084
|
if (!existsSync3(packageJsonPath)) {
|
|
10085
|
-
console.error("
|
|
10085
|
+
console.error("❌ Error: package.json not found in current directory");
|
|
10086
10086
|
console.log("Make sure you're in a project directory");
|
|
10087
10087
|
process.exit(1);
|
|
10088
10088
|
}
|
|
@@ -10090,9 +10090,9 @@ function syncCommand(verbose) {
|
|
|
10090
10090
|
const packageJson2 = JSON.parse(readFileSync2(packageJsonPath, "utf-8"));
|
|
10091
10091
|
log(`Project: ${packageJson2.name}`, true, verbose);
|
|
10092
10092
|
log(`Version: ${packageJson2.version}`, true, verbose);
|
|
10093
|
-
log(
|
|
10093
|
+
log(`✅ Sync completed successfully!`, false, verbose);
|
|
10094
10094
|
} catch (error) {
|
|
10095
|
-
console.error("
|
|
10095
|
+
console.error("❌ Error reading package.json:", error);
|
|
10096
10096
|
process.exit(1);
|
|
10097
10097
|
}
|
|
10098
10098
|
}
|
|
@@ -10140,7 +10140,7 @@ switch (command) {
|
|
|
10140
10140
|
break;
|
|
10141
10141
|
default:
|
|
10142
10142
|
if (command) {
|
|
10143
|
-
console.error(
|
|
10143
|
+
console.error(`❌ Unknown command: ${command}`);
|
|
10144
10144
|
}
|
|
10145
10145
|
cli.showHelp();
|
|
10146
10146
|
process.exit(command ? 1 : 0);
|