@ketrics/ketrics-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +326 -0
- package/dist/bin/ketrics.d.ts +8 -0
- package/dist/bin/ketrics.d.ts.map +1 -0
- package/dist/bin/ketrics.js +12 -0
- package/dist/bin/ketrics.js.map +1 -0
- package/dist/src/cli.d.ts +11 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +77 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/build.d.ts +10 -0
- package/dist/src/commands/build.d.ts.map +1 -0
- package/dist/src/commands/build.js +35 -0
- package/dist/src/commands/build.js.map +1 -0
- package/dist/src/commands/create.d.ts +11 -0
- package/dist/src/commands/create.d.ts.map +1 -0
- package/dist/src/commands/create.js +170 -0
- package/dist/src/commands/create.js.map +1 -0
- package/dist/src/commands/deploy.d.ts +11 -0
- package/dist/src/commands/deploy.d.ts.map +1 -0
- package/dist/src/commands/deploy.js +105 -0
- package/dist/src/commands/deploy.js.map +1 -0
- package/dist/src/commands/run.d.ts +11 -0
- package/dist/src/commands/run.d.ts.map +1 -0
- package/dist/src/commands/run.js +236 -0
- package/dist/src/commands/run.js.map +1 -0
- package/dist/src/commands/validate.d.ts +10 -0
- package/dist/src/commands/validate.d.ts.map +1 -0
- package/dist/src/commands/validate.js +46 -0
- package/dist/src/commands/validate.js.map +1 -0
- package/dist/src/index.d.ts +13 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +29 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/services/api-client.d.ts +14 -0
- package/dist/src/services/api-client.d.ts.map +1 -0
- package/dist/src/services/api-client.js +57 -0
- package/dist/src/services/api-client.js.map +1 -0
- package/dist/src/services/build-service.d.ts +40 -0
- package/dist/src/services/build-service.d.ts.map +1 -0
- package/dist/src/services/build-service.js +130 -0
- package/dist/src/services/build-service.js.map +1 -0
- package/dist/src/services/config-service.d.ts +35 -0
- package/dist/src/services/config-service.d.ts.map +1 -0
- package/dist/src/services/config-service.js +204 -0
- package/dist/src/services/config-service.js.map +1 -0
- package/dist/src/services/template-service.d.ts +51 -0
- package/dist/src/services/template-service.d.ts.map +1 -0
- package/dist/src/services/template-service.js +214 -0
- package/dist/src/services/template-service.js.map +1 -0
- package/dist/src/services/upload-service.d.ts +13 -0
- package/dist/src/services/upload-service.d.ts.map +1 -0
- package/dist/src/services/upload-service.js +54 -0
- package/dist/src/services/upload-service.js.map +1 -0
- package/dist/src/services/zip-service.d.ts +55 -0
- package/dist/src/services/zip-service.d.ts.map +1 -0
- package/dist/src/services/zip-service.js +219 -0
- package/dist/src/services/zip-service.js.map +1 -0
- package/dist/src/types/index.d.ts +188 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +50 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/utils/logger.d.ts +52 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +95 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/spinner.d.ts +15 -0
- package/dist/src/utils/spinner.d.ts.map +1 -0
- package/dist/src/utils/spinner.js +38 -0
- package/dist/src/utils/spinner.js.map +1 -0
- package/package.json +47 -0
- package/templates/ketrics-app-v1/.env.example +17 -0
- package/templates/ketrics-app-v1/README.md +134 -0
- package/templates/ketrics-app-v1/backend/package-lock.json +716 -0
- package/templates/ketrics-app-v1/backend/package.json +18 -0
- package/templates/ketrics-app-v1/backend/src/index.ts +41 -0
- package/templates/ketrics-app-v1/backend/src/volume.ts +48 -0
- package/templates/ketrics-app-v1/backend/tsconfig.json +16 -0
- package/templates/ketrics-app-v1/frontend/index.html +13 -0
- package/templates/ketrics-app-v1/frontend/package-lock.json +1981 -0
- package/templates/ketrics-app-v1/frontend/package.json +24 -0
- package/templates/ketrics-app-v1/frontend/src/App.css +121 -0
- package/templates/ketrics-app-v1/frontend/src/App.tsx +109 -0
- package/templates/ketrics-app-v1/frontend/src/main.tsx +10 -0
- package/templates/ketrics-app-v1/frontend/src/services/index.ts +55 -0
- package/templates/ketrics-app-v1/frontend/tsconfig.json +21 -0
- package/templates/ketrics-app-v1/frontend/tsconfig.node.json +11 -0
- package/templates/ketrics-app-v1/frontend/vite.config.ts +11 -0
- package/templates/ketrics-app-v1/ketrics.config.json +10 -0
- package/templates/ketrics-app-v1/tests/test.echo.json +13 -0
- package/templates/ketrics-app-v1/tests/test.greet.json +11 -0
- package/templates/ketrics-app-v1/tests/test.info.json +9 -0
package/README.md
ADDED
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
# Ketrics CLI
|
|
2
|
+
|
|
3
|
+
CLI tool for deploying applications to the Ketrics platform.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Install globally
|
|
9
|
+
npm install -g ketrics-cli
|
|
10
|
+
|
|
11
|
+
# Or use npx
|
|
12
|
+
npx ketrics-cli deploy
|
|
13
|
+
|
|
14
|
+
# Or link locally for development
|
|
15
|
+
cd ketrics-cli
|
|
16
|
+
npm install
|
|
17
|
+
npm run build
|
|
18
|
+
npm link
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
1. **Create a new application from template:**
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
ketrics create my-app
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
This will:
|
|
30
|
+
- Create a new folder `my-app/`
|
|
31
|
+
- Let you choose a template interactively
|
|
32
|
+
- Copy template files to the folder
|
|
33
|
+
- Update app name in configuration files
|
|
34
|
+
|
|
35
|
+
2. **Install dependencies:**
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
cd my-app
|
|
39
|
+
cd frontend && npm install
|
|
40
|
+
cd ../backend && npm install
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
3. **Configure credentials** (copy `.env.example` to `.env`):
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
KETRICS_TOKEN=ktd_your-token-id_your-secret-key
|
|
47
|
+
KETRICS_API_URL=https://api.ketrics.cl/api/v1
|
|
48
|
+
KETRICS_TENANT_ID=your-tenant-uuid
|
|
49
|
+
KETRICS_APPLICATION_ID=your-application-uuid
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
4. **Deploy:**
|
|
53
|
+
```bash
|
|
54
|
+
ketrics deploy
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The CLI will:
|
|
58
|
+
- Build frontend (npm run build)
|
|
59
|
+
- Build backend (npm run build)
|
|
60
|
+
- Create ZIP with both builds
|
|
61
|
+
- Upload to Ketrics platform
|
|
62
|
+
|
|
63
|
+
## Commands
|
|
64
|
+
|
|
65
|
+
### `ketrics create <app-name>`
|
|
66
|
+
|
|
67
|
+
Create a new Ketrics application from a template.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
ketrics create my-app # Interactive template selection
|
|
71
|
+
ketrics create my-app --template <name> # Use specific template
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**What it does:**
|
|
75
|
+
1. Creates a folder with the provided app name (fails if folder exists)
|
|
76
|
+
2. Prompts for template selection (or uses `--template` flag)
|
|
77
|
+
3. Copies template files to the new folder
|
|
78
|
+
4. Updates app name in:
|
|
79
|
+
- `ketrics.config.json`
|
|
80
|
+
- `frontend/package.json`
|
|
81
|
+
- `backend/package.json`
|
|
82
|
+
|
|
83
|
+
### `ketrics build`
|
|
84
|
+
|
|
85
|
+
Build frontend and backend without deploying.
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
ketrics build
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**What it does:**
|
|
92
|
+
1. Runs `npm run build` in `frontend/`
|
|
93
|
+
2. Runs `npm run build` in `backend/`
|
|
94
|
+
3. Outputs the location of built files
|
|
95
|
+
|
|
96
|
+
### `ketrics deploy`
|
|
97
|
+
|
|
98
|
+
Build and deploy frontend/backend to Ketrics.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
ketrics deploy # Build and deploy
|
|
102
|
+
ketrics deploy --env <path> # Use specific .env file
|
|
103
|
+
ketrics deploy --dry-run # Build and show what would be deployed
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**What it does:**
|
|
107
|
+
1. Validates `.env` configuration
|
|
108
|
+
2. Builds `frontend/` (runs `npm run build`)
|
|
109
|
+
3. Builds `backend/` (runs `npm run build`)
|
|
110
|
+
4. Creates ZIP with flat structure:
|
|
111
|
+
- `frontend/` - contents of `frontend/dist/`
|
|
112
|
+
- `backend/` - contents of `backend/dist/`
|
|
113
|
+
5. Uploads to S3 via presigned URL
|
|
114
|
+
|
|
115
|
+
### `ketrics validate`
|
|
116
|
+
|
|
117
|
+
Validate configuration and `.env` files.
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
ketrics validate # Validate default files
|
|
121
|
+
ketrics validate --env <path> # Validate specific .env
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### `ketrics --version`
|
|
125
|
+
|
|
126
|
+
Show CLI version.
|
|
127
|
+
|
|
128
|
+
### `ketrics --help`
|
|
129
|
+
|
|
130
|
+
Show help information.
|
|
131
|
+
|
|
132
|
+
## Project Structure
|
|
133
|
+
|
|
134
|
+
After running `ketrics create my-app`, your project will have:
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
my-app/
|
|
138
|
+
├── .env.example # Environment variables template
|
|
139
|
+
├── .gitignore # Git ignore file
|
|
140
|
+
├── ketrics.config.json # Application configuration
|
|
141
|
+
├── README.md # Documentation
|
|
142
|
+
├── frontend/ # React + TypeScript + Vite
|
|
143
|
+
│ ├── src/
|
|
144
|
+
│ ├── package.json
|
|
145
|
+
│ └── vite.config.ts
|
|
146
|
+
└── backend/ # TypeScript handlers
|
|
147
|
+
├── src/
|
|
148
|
+
├── package.json
|
|
149
|
+
└── tsconfig.json
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Configuration
|
|
153
|
+
|
|
154
|
+
### `ketrics.config.json`
|
|
155
|
+
|
|
156
|
+
| Field | Type | Required | Description |
|
|
157
|
+
| ------------- | -------- | -------- | ---------------------------------------- |
|
|
158
|
+
| `name` | string | Yes | Application name |
|
|
159
|
+
| `version` | string | Yes | Semver version (e.g., "1.0.0") |
|
|
160
|
+
| `description` | string | No | Application description |
|
|
161
|
+
| `runtime` | string | Yes | Runtime: "nodejs18", "nodejs20", "static"|
|
|
162
|
+
| `actions` | string[] | Yes | List of exported backend actions |
|
|
163
|
+
| `entry` | string | Yes | Backend entry point file |
|
|
164
|
+
| `include` | string[] | Yes | Glob patterns for files to include |
|
|
165
|
+
| `exclude` | string[] | No | Glob patterns for files to exclude |
|
|
166
|
+
|
|
167
|
+
### Environment Variables
|
|
168
|
+
|
|
169
|
+
| Variable | Required | Description |
|
|
170
|
+
| ------------------------ | -------- | -------------------------------- |
|
|
171
|
+
| `KETRICS_TOKEN` | Yes | Deployment token from dashboard |
|
|
172
|
+
| `KETRICS_API_URL` | Yes | Ketrics API URL |
|
|
173
|
+
| `KETRICS_TENANT_ID` | Yes | Your tenant UUID |
|
|
174
|
+
| `KETRICS_APPLICATION_ID` | Yes | Application UUID |
|
|
175
|
+
|
|
176
|
+
## Deployment Flow
|
|
177
|
+
|
|
178
|
+
1. Load `.env` file and validate Ketrics variables
|
|
179
|
+
2. Build frontend using `npm run build`
|
|
180
|
+
3. Build backend using `npm run build`
|
|
181
|
+
4. Create ZIP with `frontend/` and `backend/` folders
|
|
182
|
+
5. Request presigned URL from Ketrics API
|
|
183
|
+
6. Upload ZIP to S3 via presigned URL
|
|
184
|
+
7. Display deployment success with deployment ID
|
|
185
|
+
|
|
186
|
+
## Example Output
|
|
187
|
+
|
|
188
|
+
### Create Command
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
$ ketrics create my-app
|
|
192
|
+
|
|
193
|
+
Available Templates
|
|
194
|
+
|
|
195
|
+
1. ketrics-app-v1
|
|
196
|
+
My Ketrics application
|
|
197
|
+
|
|
198
|
+
Select a template (enter number): 1
|
|
199
|
+
|
|
200
|
+
Creating 'my-app' with template: ketrics-app-v1
|
|
201
|
+
|
|
202
|
+
Files to create:
|
|
203
|
+
my-app/.env.example
|
|
204
|
+
my-app/.gitignore
|
|
205
|
+
my-app/README.md
|
|
206
|
+
my-app/ketrics.config.json
|
|
207
|
+
my-app/backend/package.json
|
|
208
|
+
my-app/backend/src/index.ts
|
|
209
|
+
...
|
|
210
|
+
|
|
211
|
+
✔ Created 'my-app' successfully!
|
|
212
|
+
|
|
213
|
+
Next steps:
|
|
214
|
+
1. cd my-app
|
|
215
|
+
2. cd frontend && npm install
|
|
216
|
+
3. cd ../backend && npm install
|
|
217
|
+
4. Copy .env.example to .env and add your credentials
|
|
218
|
+
5. Run 'ketrics deploy' to deploy your application
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Build Command
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
$ ketrics build
|
|
225
|
+
|
|
226
|
+
Ketrics CLI v1.0.0 - Build
|
|
227
|
+
|
|
228
|
+
ℹ Building frontend and backend...
|
|
229
|
+
|
|
230
|
+
> frontend build output...
|
|
231
|
+
> backend build output...
|
|
232
|
+
|
|
233
|
+
✔ Build completed successfully!
|
|
234
|
+
|
|
235
|
+
Frontend dist: /path/to/frontend/dist
|
|
236
|
+
Backend dist: /path/to/backend/dist
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Deploy Command
|
|
240
|
+
|
|
241
|
+
```
|
|
242
|
+
$ ketrics deploy
|
|
243
|
+
|
|
244
|
+
Ketrics CLI v1.0.0
|
|
245
|
+
|
|
246
|
+
✔ Loaded environment configuration
|
|
247
|
+
✔ Validated deployment token
|
|
248
|
+
|
|
249
|
+
Building frontend and backend...
|
|
250
|
+
|
|
251
|
+
> frontend build output...
|
|
252
|
+
> backend build output...
|
|
253
|
+
|
|
254
|
+
✔ Frontend and backend built successfully
|
|
255
|
+
✔ Created deployment ZIP archive
|
|
256
|
+
✔ ZIP archive: 59.9 KB from 5 files
|
|
257
|
+
✔ Initiated deployment
|
|
258
|
+
✔ Uploaded to S3
|
|
259
|
+
|
|
260
|
+
Deployment successful!
|
|
261
|
+
|
|
262
|
+
Deployment ID: 550e8400-e29b-41d4-a716-446655440002
|
|
263
|
+
Files: 5
|
|
264
|
+
Size: 59.9 KB
|
|
265
|
+
Duration: 3.2s
|
|
266
|
+
|
|
267
|
+
Your deployment is being processed by Ketrics.
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Dry Run
|
|
271
|
+
|
|
272
|
+
```
|
|
273
|
+
$ ketrics deploy --dry-run
|
|
274
|
+
|
|
275
|
+
Ketrics CLI v1.0.0
|
|
276
|
+
|
|
277
|
+
✔ Loaded environment configuration
|
|
278
|
+
✔ Validated deployment token
|
|
279
|
+
|
|
280
|
+
Building frontend and backend...
|
|
281
|
+
✔ Frontend and backend built successfully
|
|
282
|
+
|
|
283
|
+
Dry run - no files were uploaded
|
|
284
|
+
|
|
285
|
+
Files to deploy:
|
|
286
|
+
frontend/
|
|
287
|
+
assets/index-xxx.js (192.8 KB)
|
|
288
|
+
assets/index-xxx.css (1.4 KB)
|
|
289
|
+
index.html (471 B)
|
|
290
|
+
|
|
291
|
+
backend/
|
|
292
|
+
index.d.ts (1.2 KB)
|
|
293
|
+
index.js (3.4 KB)
|
|
294
|
+
|
|
295
|
+
Total files: 5
|
|
296
|
+
Frontend files: 3
|
|
297
|
+
Backend files: 2
|
|
298
|
+
Source size: 199.3 KB
|
|
299
|
+
ZIP size: 59.9 KB
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
## Error Handling
|
|
303
|
+
|
|
304
|
+
### Missing node_modules
|
|
305
|
+
|
|
306
|
+
```
|
|
307
|
+
✖ Missing node_modules in frontend/. Run 'cd frontend && npm install' first.
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Folder already exists
|
|
311
|
+
|
|
312
|
+
```
|
|
313
|
+
$ ketrics create my-app
|
|
314
|
+
✖ Folder 'my-app' already exists.
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### Invalid app name
|
|
318
|
+
|
|
319
|
+
```
|
|
320
|
+
$ ketrics create 123-invalid
|
|
321
|
+
✖ App name must start with a letter and contain only letters, numbers, hyphens, and underscores
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## License
|
|
325
|
+
|
|
326
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ketrics.d.ts","sourceRoot":"","sources":["../../bin/ketrics.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Ketrics CLI Entry Point
|
|
5
|
+
*
|
|
6
|
+
* Main executable for the Ketrics CLI tool.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const cli_1 = require("../src/cli");
|
|
10
|
+
const program = (0, cli_1.createCLI)();
|
|
11
|
+
program.parse(process.argv);
|
|
12
|
+
//# sourceMappingURL=ketrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ketrics.js","sourceRoot":"","sources":["../../bin/ketrics.ts"],"names":[],"mappings":";;AACA;;;;GAIG;;AAEH,oCAAuC;AAEvC,MAAM,OAAO,GAAG,IAAA,eAAS,GAAE,CAAC;AAC5B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAgEnC"}
|
package/dist/src/cli.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ketrics CLI
|
|
4
|
+
*
|
|
5
|
+
* Command-line interface setup using Commander.js.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.createCLI = createCLI;
|
|
9
|
+
const commander_1 = require("commander");
|
|
10
|
+
const create_1 = require("./commands/create");
|
|
11
|
+
const build_1 = require("./commands/build");
|
|
12
|
+
const deploy_1 = require("./commands/deploy");
|
|
13
|
+
const validate_1 = require("./commands/validate");
|
|
14
|
+
const run_1 = require("./commands/run");
|
|
15
|
+
const VERSION = '1.0.0';
|
|
16
|
+
/**
|
|
17
|
+
* Create and configure CLI program
|
|
18
|
+
*/
|
|
19
|
+
function createCLI() {
|
|
20
|
+
const program = new commander_1.Command();
|
|
21
|
+
program
|
|
22
|
+
.name('ketrics')
|
|
23
|
+
.description('CLI tool for deploying applications to Ketrics platform')
|
|
24
|
+
.version(VERSION, '-v, --version', 'Show CLI version');
|
|
25
|
+
// Create command
|
|
26
|
+
program
|
|
27
|
+
.command('create <app-name>')
|
|
28
|
+
.description('Create a new Ketrics application from a template')
|
|
29
|
+
.option('-t, --template <name>', 'Use specific template (skip interactive selection)')
|
|
30
|
+
.action(async (appName, options) => {
|
|
31
|
+
await (0, create_1.createCommand)(appName, {
|
|
32
|
+
template: options.template,
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
// Build command
|
|
36
|
+
program
|
|
37
|
+
.command('build')
|
|
38
|
+
.description('Build frontend and backend without deploying')
|
|
39
|
+
.action(async () => {
|
|
40
|
+
await (0, build_1.buildCommand)();
|
|
41
|
+
});
|
|
42
|
+
// Deploy command
|
|
43
|
+
program
|
|
44
|
+
.command('deploy')
|
|
45
|
+
.description('Build and deploy frontend/backend to Ketrics')
|
|
46
|
+
.option('-e, --env <path>', 'Path to .env file')
|
|
47
|
+
.option('--dry-run', 'Build and show what would be deployed without uploading')
|
|
48
|
+
.action(async (options) => {
|
|
49
|
+
await (0, deploy_1.deployCommand)({
|
|
50
|
+
env: options.env,
|
|
51
|
+
dryRun: options.dryRun,
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
// Validate command
|
|
55
|
+
program
|
|
56
|
+
.command('validate')
|
|
57
|
+
.description('Validate configuration and .env files')
|
|
58
|
+
.option('-c, --config <path>', 'Path to ketrics.config.json')
|
|
59
|
+
.option('-e, --env <path>', 'Path to .env file')
|
|
60
|
+
.action(async (options) => {
|
|
61
|
+
await (0, validate_1.validateCommand)(options.config, options.env);
|
|
62
|
+
});
|
|
63
|
+
// Run command
|
|
64
|
+
program
|
|
65
|
+
.command('run <json-file>')
|
|
66
|
+
.description('Execute an API request from a JSON configuration file')
|
|
67
|
+
.option('-e, --env <path>', 'Path to .env file')
|
|
68
|
+
.option('-v, --verbose', 'Show detailed request/response information')
|
|
69
|
+
.action(async (jsonFile, options) => {
|
|
70
|
+
await (0, run_1.runCommand)(jsonFile, {
|
|
71
|
+
env: options.env,
|
|
72
|
+
verbose: options.verbose,
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
return program;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAcH,8BAgEC;AA5ED,yCAAoC;AACpC,8CAAkD;AAClD,4CAAgD;AAChD,8CAAkD;AAClD,kDAAsD;AACtD,wCAA4C;AAE5C,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB;;GAEG;AACH,SAAgB,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,yDAAyD,CAAC;SACtE,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAC;IAEzD,iBAAiB;IACjB,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,uBAAuB,EAAE,oDAAoD,CAAC;SACrF,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QACjC,MAAM,IAAA,sBAAa,EAAC,OAAO,EAAE;YAC3B,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,gBAAgB;IAChB,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,IAAA,oBAAY,GAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;SAC/C,MAAM,CAAC,WAAW,EAAE,yDAAyD,CAAC;SAC9E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,IAAA,sBAAa,EAAC;YAClB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,mBAAmB;IACnB,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;SAC5D,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,IAAA,0BAAe,EAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;SAC/C,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAClC,MAAM,IAAA,gBAAU,EAAC,QAAQ,EAAE;YACzB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/commands/build.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBlD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Build Command
|
|
4
|
+
*
|
|
5
|
+
* Builds frontend and backend without deploying.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.buildCommand = buildCommand;
|
|
9
|
+
const logger_1 = require("../utils/logger");
|
|
10
|
+
const build_service_1 = require("../services/build-service");
|
|
11
|
+
/**
|
|
12
|
+
* Execute build command
|
|
13
|
+
*/
|
|
14
|
+
async function buildCommand() {
|
|
15
|
+
const cwd = process.cwd();
|
|
16
|
+
logger_1.logger.header('Ketrics CLI v1.0.0 - Build');
|
|
17
|
+
try {
|
|
18
|
+
// Build frontend and backend
|
|
19
|
+
logger_1.logger.info('Building frontend and backend...');
|
|
20
|
+
logger_1.logger.newline();
|
|
21
|
+
const buildResult = (0, build_service_1.buildAll)(cwd);
|
|
22
|
+
logger_1.logger.newline();
|
|
23
|
+
logger_1.logger.success('Build completed successfully!');
|
|
24
|
+
logger_1.logger.newline();
|
|
25
|
+
logger_1.logger.keyValue('Frontend dist', buildResult.frontendDistPath);
|
|
26
|
+
logger_1.logger.keyValue('Backend dist', buildResult.backendDistPath);
|
|
27
|
+
logger_1.logger.newline();
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
logger_1.logger.newline();
|
|
31
|
+
logger_1.logger.error(error.message);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/build.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAQH,oCAuBC;AA7BD,4CAAyC;AACzC,6DAAqD;AAErD;;GAEG;AACI,KAAK,UAAU,YAAY;IAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,eAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,6BAA6B;QAC7B,eAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAChD,eAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,MAAM,WAAW,GAAG,IAAA,wBAAQ,EAAC,GAAG,CAAC,CAAC;QAElC,eAAM,CAAC,OAAO,EAAE,CAAC;QACjB,eAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;QAChD,eAAM,CAAC,OAAO,EAAE,CAAC;QACjB,eAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAC/D,eAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;QAC7D,eAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAM,CAAC,OAAO,EAAE,CAAC;QACjB,eAAM,CAAC,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create Command
|
|
3
|
+
*
|
|
4
|
+
* Creates a new Ketrics application from a template.
|
|
5
|
+
*/
|
|
6
|
+
import type { CreateOptions } from '../types';
|
|
7
|
+
/**
|
|
8
|
+
* Execute create command
|
|
9
|
+
*/
|
|
10
|
+
export declare function createCommand(appName: string, options: CreateOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,UAAU,CAAC;AAsC5D;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAiGf"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Create Command
|
|
4
|
+
*
|
|
5
|
+
* Creates a new Ketrics application from a template.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.createCommand = createCommand;
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const prompts_1 = require("@inquirer/prompts");
|
|
44
|
+
const logger_1 = require("../utils/logger");
|
|
45
|
+
const template_service_1 = require("../services/template-service");
|
|
46
|
+
/**
|
|
47
|
+
* Prompt user to select a template interactively using arrow keys
|
|
48
|
+
*/
|
|
49
|
+
async function promptTemplateSelection(templates) {
|
|
50
|
+
const choices = templates.map((template) => ({
|
|
51
|
+
name: `${template.name}: ${template.description}`,
|
|
52
|
+
value: template,
|
|
53
|
+
}));
|
|
54
|
+
const selected = await (0, prompts_1.select)({
|
|
55
|
+
message: 'Select a template:',
|
|
56
|
+
choices,
|
|
57
|
+
});
|
|
58
|
+
return selected;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Validate app name
|
|
62
|
+
*/
|
|
63
|
+
function validateAppName(name) {
|
|
64
|
+
if (!name || name.trim().length === 0) {
|
|
65
|
+
return { valid: false, error: 'App name is required' };
|
|
66
|
+
}
|
|
67
|
+
// Check for valid characters (alphanumeric, hyphens, underscores)
|
|
68
|
+
if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name)) {
|
|
69
|
+
return {
|
|
70
|
+
valid: false,
|
|
71
|
+
error: 'App name must start with a letter and contain only letters, numbers, hyphens, and underscores',
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return { valid: true };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Execute create command
|
|
78
|
+
*/
|
|
79
|
+
async function createCommand(appName, options) {
|
|
80
|
+
// Validate app name
|
|
81
|
+
const nameValidation = validateAppName(appName);
|
|
82
|
+
if (!nameValidation.valid) {
|
|
83
|
+
logger_1.logger.error(nameValidation.error);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
// Get available templates
|
|
87
|
+
const templates = (0, template_service_1.getAvailableTemplates)();
|
|
88
|
+
if (templates.length === 0) {
|
|
89
|
+
logger_1.logger.error('No templates available. Please check the templates directory.');
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
// Calculate destination path
|
|
93
|
+
const destDir = path.join(process.cwd(), appName);
|
|
94
|
+
// Check if folder already exists
|
|
95
|
+
if ((0, template_service_1.directoryExists)(destDir)) {
|
|
96
|
+
logger_1.logger.error(`Folder '${appName}' already exists.`);
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
// Select template
|
|
100
|
+
let selectedTemplate;
|
|
101
|
+
if (options.template) {
|
|
102
|
+
// Use specified template
|
|
103
|
+
const template = (0, template_service_1.getTemplate)(options.template);
|
|
104
|
+
if (!template) {
|
|
105
|
+
logger_1.logger.error(`Template not found: ${options.template}`);
|
|
106
|
+
logger_1.logger.newline();
|
|
107
|
+
logger_1.logger.info('Available templates:');
|
|
108
|
+
templates.forEach((t) => logger_1.logger.indent(`- ${t.name}`));
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
selectedTemplate = template;
|
|
112
|
+
}
|
|
113
|
+
else if (templates.length === 1) {
|
|
114
|
+
// Auto-select if only one template
|
|
115
|
+
selectedTemplate = templates[0];
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
// Interactive selection
|
|
119
|
+
try {
|
|
120
|
+
selectedTemplate = await promptTemplateSelection(templates);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
logger_1.logger.error(error.message);
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Show what will be created
|
|
128
|
+
logger_1.logger.newline();
|
|
129
|
+
logger_1.logger.info(`Creating '${appName}' with template: ${selectedTemplate.name}`);
|
|
130
|
+
logger_1.logger.newline();
|
|
131
|
+
const files = (0, template_service_1.getTemplateFiles)(selectedTemplate);
|
|
132
|
+
logger_1.logger.log('Files to create:');
|
|
133
|
+
files.forEach((file) => logger_1.logger.file(`${appName}/${file}`));
|
|
134
|
+
logger_1.logger.newline();
|
|
135
|
+
// Create directory
|
|
136
|
+
try {
|
|
137
|
+
(0, template_service_1.createDirectory)(destDir);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
logger_1.logger.error(`Failed to create directory: ${error.message}`);
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
// Copy template
|
|
144
|
+
try {
|
|
145
|
+
(0, template_service_1.copyTemplate)(selectedTemplate, destDir);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
logger_1.logger.error(`Failed to copy template: ${error.message}`);
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
// Update app name in files
|
|
152
|
+
try {
|
|
153
|
+
(0, template_service_1.updateAppName)(destDir, appName);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
logger_1.logger.error(`Failed to update app name: ${error.message}`);
|
|
157
|
+
process.exit(1);
|
|
158
|
+
}
|
|
159
|
+
logger_1.logger.success(`Created '${appName}' successfully!`);
|
|
160
|
+
// Show next steps
|
|
161
|
+
logger_1.logger.newline();
|
|
162
|
+
logger_1.logger.log('Next steps:');
|
|
163
|
+
logger_1.logger.indent(`1. cd ${appName}`);
|
|
164
|
+
logger_1.logger.indent('2. cd frontend && npm install');
|
|
165
|
+
logger_1.logger.indent('3. cd ../backend && npm install');
|
|
166
|
+
logger_1.logger.indent('4. Copy .env.example to .env and add your credentials');
|
|
167
|
+
logger_1.logger.indent("5. Run 'ketrics deploy' to deploy your application");
|
|
168
|
+
logger_1.logger.newline();
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=create.js.map
|