@onexapis/cli 1.0.1 → 1.0.2
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 +33 -13
- package/dist/cli.js +45 -38
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +40 -34
- package/dist/cli.mjs.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -35,10 +35,10 @@ onex validate --theme simple
|
|
|
35
35
|
onex build --theme simple
|
|
36
36
|
|
|
37
37
|
# Upload to S3
|
|
38
|
-
onex upload --theme simple
|
|
38
|
+
onex upload --theme simple
|
|
39
39
|
|
|
40
40
|
# Clone a theme from S3
|
|
41
|
-
onex clone simple
|
|
41
|
+
onex clone simple
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
## Commands
|
|
@@ -170,13 +170,16 @@ Upload compiled theme to S3 as `bundle.zip` + `source.zip`.
|
|
|
170
170
|
|
|
171
171
|
```bash
|
|
172
172
|
# Dry run first
|
|
173
|
-
onex upload --theme simple --
|
|
173
|
+
onex upload --theme simple --dry-run
|
|
174
174
|
|
|
175
175
|
# Upload to staging
|
|
176
|
-
onex upload --theme simple
|
|
176
|
+
onex upload --theme simple
|
|
177
177
|
|
|
178
178
|
# Upload to production
|
|
179
|
-
onex upload --theme simple
|
|
179
|
+
onex upload --theme simple -e production
|
|
180
|
+
|
|
181
|
+
# Override bucket
|
|
182
|
+
onex upload --theme simple --bucket custom-bucket
|
|
180
183
|
```
|
|
181
184
|
|
|
182
185
|
### `onex download`
|
|
@@ -204,20 +207,33 @@ Clone theme source code from S3.
|
|
|
204
207
|
| `--no-install` | Skip running `pnpm install` after clone |
|
|
205
208
|
|
|
206
209
|
```bash
|
|
207
|
-
onex clone simple
|
|
210
|
+
onex clone simple
|
|
208
211
|
onex clone simple -v 1.0.0 -o ./my-clone --no-install
|
|
209
212
|
```
|
|
210
213
|
|
|
211
214
|
## S3 Configuration
|
|
212
215
|
|
|
213
|
-
The `upload`, `download`, and `clone` commands use S3 for storage.
|
|
216
|
+
The `upload`, `download`, and `clone` commands use S3 for storage. The CLI **automatically loads `.env.local` and `.env`** from the project root, so you only need to configure once:
|
|
214
217
|
|
|
215
218
|
```bash
|
|
216
|
-
#
|
|
219
|
+
# .env.local (at project root)
|
|
220
|
+
BUCKET_NAME=my-bucket
|
|
217
221
|
AWS_REGION=ap-southeast-1
|
|
218
|
-
AWS_ACCESS_KEY_ID
|
|
219
|
-
AWS_SECRET_ACCESS_KEY
|
|
222
|
+
AWS_ACCESS_KEY_ID=your-access-key
|
|
223
|
+
AWS_SECRET_ACCESS_KEY=your-secret-key
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Then all S3 commands just work without extra flags:
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
onex upload --theme simple # picks up bucket + credentials from .env.local
|
|
230
|
+
onex clone simple # same
|
|
231
|
+
onex download -t simple # same
|
|
232
|
+
```
|
|
220
233
|
|
|
234
|
+
### Adapter Modes
|
|
235
|
+
|
|
236
|
+
```bash
|
|
221
237
|
# MinIO (set ADAPTER_MODE=vps)
|
|
222
238
|
ADAPTER_MODE=vps
|
|
223
239
|
MINIO_ENDPOINT=localhost:9000
|
|
@@ -226,11 +242,15 @@ MINIO_SECRET_KEY=minioadmin
|
|
|
226
242
|
|
|
227
243
|
# LocalStack (set ADAPTER_MODE=local)
|
|
228
244
|
ADAPTER_MODE=local
|
|
229
|
-
|
|
230
|
-
# Override bucket name directly
|
|
231
|
-
BUCKET_NAME=my-bucket
|
|
232
245
|
```
|
|
233
246
|
|
|
247
|
+
### Bucket Name Resolution
|
|
248
|
+
|
|
249
|
+
Priority order:
|
|
250
|
+
1. `--bucket` CLI flag
|
|
251
|
+
2. `BUCKET_NAME` environment variable
|
|
252
|
+
3. Default: `onex-themes-staging` or `onex-themes-prod` (based on `--environment`)
|
|
253
|
+
|
|
234
254
|
## Theme Structure
|
|
235
255
|
|
|
236
256
|
Themes live in the `themes/` directory at the project root:
|
package/dist/cli.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var commander = require('commander');
|
|
5
|
-
var chalk4 = require('chalk');
|
|
6
4
|
var path = require('path');
|
|
7
|
-
var
|
|
8
|
-
var child_process = require('child_process');
|
|
9
|
-
var inquirer = require('inquirer');
|
|
10
|
-
var ora = require('ora');
|
|
5
|
+
var dotenv = require('dotenv');
|
|
11
6
|
var fs = require('fs-extra');
|
|
12
7
|
var ejs = require('ejs');
|
|
8
|
+
var child_process = require('child_process');
|
|
9
|
+
var chalk4 = require('chalk');
|
|
10
|
+
var ora = require('ora');
|
|
11
|
+
var commander = require('commander');
|
|
12
|
+
var fs2 = require('fs');
|
|
13
|
+
var inquirer = require('inquirer');
|
|
13
14
|
var archiver = require('archiver');
|
|
14
15
|
var FormData = require('form-data');
|
|
15
16
|
var fetch = require('node-fetch');
|
|
@@ -19,13 +20,14 @@ var AdmZip = require('adm-zip');
|
|
|
19
20
|
|
|
20
21
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
21
22
|
|
|
22
|
-
var chalk4__default = /*#__PURE__*/_interopDefault(chalk4);
|
|
23
23
|
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
24
|
-
var
|
|
25
|
-
var inquirer__default = /*#__PURE__*/_interopDefault(inquirer);
|
|
26
|
-
var ora__default = /*#__PURE__*/_interopDefault(ora);
|
|
24
|
+
var dotenv__default = /*#__PURE__*/_interopDefault(dotenv);
|
|
27
25
|
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
28
26
|
var ejs__default = /*#__PURE__*/_interopDefault(ejs);
|
|
27
|
+
var chalk4__default = /*#__PURE__*/_interopDefault(chalk4);
|
|
28
|
+
var ora__default = /*#__PURE__*/_interopDefault(ora);
|
|
29
|
+
var fs2__default = /*#__PURE__*/_interopDefault(fs2);
|
|
30
|
+
var inquirer__default = /*#__PURE__*/_interopDefault(inquirer);
|
|
29
31
|
var archiver__default = /*#__PURE__*/_interopDefault(archiver);
|
|
30
32
|
var FormData__default = /*#__PURE__*/_interopDefault(FormData);
|
|
31
33
|
var fetch__default = /*#__PURE__*/_interopDefault(fetch);
|
|
@@ -86,34 +88,7 @@ var Logger = class {
|
|
|
86
88
|
};
|
|
87
89
|
var logger = new Logger();
|
|
88
90
|
|
|
89
|
-
// src/utils/
|
|
90
|
-
function validateName(name) {
|
|
91
|
-
return /^[a-z0-9]+(-[a-z0-9]+)*$/.test(name);
|
|
92
|
-
}
|
|
93
|
-
function toKebabCase(str) {
|
|
94
|
-
return str.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
|
|
95
|
-
}
|
|
96
|
-
function toPascalCase(str) {
|
|
97
|
-
return str.split(/[-_\s]+/).map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join("");
|
|
98
|
-
}
|
|
99
|
-
function validateThemeName(name) {
|
|
100
|
-
return /^[a-z][a-z0-9-]*$/.test(name);
|
|
101
|
-
}
|
|
102
|
-
function getValidCategories() {
|
|
103
|
-
return [
|
|
104
|
-
"headers",
|
|
105
|
-
"heroes",
|
|
106
|
-
"content",
|
|
107
|
-
"features",
|
|
108
|
-
"testimonials",
|
|
109
|
-
"galleries",
|
|
110
|
-
"cta",
|
|
111
|
-
"footers",
|
|
112
|
-
"ecommerce",
|
|
113
|
-
"blog",
|
|
114
|
-
"contact"
|
|
115
|
-
];
|
|
116
|
-
}
|
|
91
|
+
// src/utils/file-helpers.ts
|
|
117
92
|
async function renderTemplate(templatePath, data) {
|
|
118
93
|
const template = await fs__default.default.readFile(templatePath, "utf-8");
|
|
119
94
|
return ejs__default.default.render(template, data);
|
|
@@ -260,6 +235,35 @@ async function installDependencies(projectPath, packageManager = "npm") {
|
|
|
260
235
|
});
|
|
261
236
|
}
|
|
262
237
|
|
|
238
|
+
// src/utils/validators.ts
|
|
239
|
+
function validateName(name) {
|
|
240
|
+
return /^[a-z0-9]+(-[a-z0-9]+)*$/.test(name);
|
|
241
|
+
}
|
|
242
|
+
function toKebabCase(str) {
|
|
243
|
+
return str.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
|
|
244
|
+
}
|
|
245
|
+
function toPascalCase(str) {
|
|
246
|
+
return str.split(/[-_\s]+/).map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join("");
|
|
247
|
+
}
|
|
248
|
+
function validateThemeName(name) {
|
|
249
|
+
return /^[a-z][a-z0-9-]*$/.test(name);
|
|
250
|
+
}
|
|
251
|
+
function getValidCategories() {
|
|
252
|
+
return [
|
|
253
|
+
"headers",
|
|
254
|
+
"heroes",
|
|
255
|
+
"content",
|
|
256
|
+
"features",
|
|
257
|
+
"testimonials",
|
|
258
|
+
"galleries",
|
|
259
|
+
"cta",
|
|
260
|
+
"footers",
|
|
261
|
+
"ecommerce",
|
|
262
|
+
"blog",
|
|
263
|
+
"contact"
|
|
264
|
+
];
|
|
265
|
+
}
|
|
266
|
+
|
|
263
267
|
// src/commands/init.ts
|
|
264
268
|
async function initCommand(projectName, options = {}) {
|
|
265
269
|
logger.header("Create New OneX Theme Project");
|
|
@@ -2689,6 +2693,9 @@ async function cloneCommand(themeName, options) {
|
|
|
2689
2693
|
}
|
|
2690
2694
|
|
|
2691
2695
|
// src/cli.ts
|
|
2696
|
+
var projectRoot = getProjectRoot();
|
|
2697
|
+
dotenv__default.default.config({ path: path__default.default.join(projectRoot, ".env.local"), quiet: true });
|
|
2698
|
+
dotenv__default.default.config({ path: path__default.default.join(projectRoot, ".env"), quiet: true });
|
|
2692
2699
|
var program = new commander.Command();
|
|
2693
2700
|
program.name("onex").description("CLI tool for OneX theme development").version("0.1.0");
|
|
2694
2701
|
program.command("init").description("Create a new OneX theme project").argument("[project-name]", "Name of the project").option(
|