@pmate/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 +48 -0
- package/dist/alioss.d.ts +19 -0
- package/dist/alioss.js +240 -0
- package/dist/alioss.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.js +43 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/AddDnsCommandHandler.d.ts +4 -0
- package/dist/commands/AddDnsCommandHandler.js +31 -0
- package/dist/commands/AddDnsCommandHandler.js.map +1 -0
- package/dist/commands/BucketCommandHandler.d.ts +4 -0
- package/dist/commands/BucketCommandHandler.js +25 -0
- package/dist/commands/BucketCommandHandler.js.map +1 -0
- package/dist/commands/DeployCommandHandler.d.ts +8 -0
- package/dist/commands/DeployCommandHandler.js +90 -0
- package/dist/commands/DeployCommandHandler.js.map +1 -0
- package/dist/commands/InitCommandHandler.d.ts +6 -0
- package/dist/commands/InitCommandHandler.js +107 -0
- package/dist/commands/InitCommandHandler.js.map +1 -0
- package/dist/commands/ListCommandHandler.d.ts +6 -0
- package/dist/commands/ListCommandHandler.js +44 -0
- package/dist/commands/ListCommandHandler.js.map +1 -0
- package/dist/commands/LoginCommandHandler.d.ts +9 -0
- package/dist/commands/LoginCommandHandler.js +95 -0
- package/dist/commands/LoginCommandHandler.js.map +1 -0
- package/dist/commands/StsCommandHandler.d.ts +5 -0
- package/dist/commands/StsCommandHandler.js +49 -0
- package/dist/commands/StsCommandHandler.js.map +1 -0
- package/dist/config.d.ts +1 -0
- package/dist/config.js +28 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +284 -0
- package/dist/index.js.map +1 -0
- package/dist/services/AliyunService.d.ts +30 -0
- package/dist/services/AliyunService.js +323 -0
- package/dist/services/AliyunService.js.map +1 -0
- package/dist/types.d.ts +35 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/package.json +52 -0
package/README.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# pMate CLI
|
|
2
|
+
|
|
3
|
+
A TypeScript-powered command-line tool scaffold for future pMate automation.
|
|
4
|
+
|
|
5
|
+
## Development
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install
|
|
9
|
+
npm run dev -- --help
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
- `npm run dev` executes the TypeScript entry point with `ts-node`.
|
|
13
|
+
- `npm run build` emits compiled JavaScript into `dist/`.
|
|
14
|
+
- `npm start` runs the compiled CLI (`dist/index.js`).
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
After running `npm run build`, you can invoke the CLI locally via:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
node dist/index.js --name Alice
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
When published or linked (e.g., `npm link`), the binary will be available as `pmate`:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
pmate --help
|
|
28
|
+
pmate --name Bob
|
|
29
|
+
pmate add-dns --type A --value 1.2.3.4 --rr api
|
|
30
|
+
pmate login
|
|
31
|
+
pmate sts
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Aliyun credentials config
|
|
35
|
+
|
|
36
|
+
You can set Aliyun credentials in `~/.pmate/config` using dotenv format:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
ALIYUN_AK=your_ak
|
|
40
|
+
ALIYUN_SK=your_sk
|
|
41
|
+
ALIYUN_REGION=cn-hangzhou
|
|
42
|
+
ALIYUN_DOMAIN=example.com
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Auth session
|
|
46
|
+
|
|
47
|
+
`pmate login` stores a session token in `~/.pmate/session.json`. Commands like
|
|
48
|
+
`pmate sts` require this session; if it is missing, log in first.
|
package/dist/alioss.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import OSS from "ali-oss";
|
|
2
|
+
export declare class POSS {
|
|
3
|
+
private client;
|
|
4
|
+
constructor(options: OSS.Options);
|
|
5
|
+
static publicOSS: POSS;
|
|
6
|
+
static privateOSS: POSS;
|
|
7
|
+
uploadJsonToOSS(key: string, jsonData: any): Promise<OSS.PutObjectResult>;
|
|
8
|
+
removeOSS(key: string): Promise<OSS.DeleteResult>;
|
|
9
|
+
copyOSS(sourceKey: string, targetKey: string): Promise<OSS.CopyAndPutMetaResult>;
|
|
10
|
+
existsOSS(key: string): Promise<boolean>;
|
|
11
|
+
appendJSONOSS<T>(key: string, content: T[], position: string): Promise<string>;
|
|
12
|
+
getHeadPosition(key: string): Promise<any>;
|
|
13
|
+
uploadFileToOSS(key: string, file: Buffer): Promise<string>;
|
|
14
|
+
getResourceOSS<T>(key: string): Promise<T | null>;
|
|
15
|
+
getResourceBufferOSS<T>(key: string): Promise<string | null>;
|
|
16
|
+
getResourceLogOSS<T>(key: string): Promise<T[]>;
|
|
17
|
+
uploadImageToOSS(key: string, base64data: string): Promise<OSS.PutObjectResult>;
|
|
18
|
+
listFilesInOSSPath(s3Path: string, limit?: number): Promise<string[]>;
|
|
19
|
+
}
|
package/dist/alioss.js
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POSS = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const ali_oss_1 = tslib_1.__importDefault(require("ali-oss"));
|
|
6
|
+
const cli_1 = require("./cli");
|
|
7
|
+
class POSS {
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this.client = new ali_oss_1.default(options);
|
|
10
|
+
}
|
|
11
|
+
async uploadJsonToOSS(key, jsonData) {
|
|
12
|
+
try {
|
|
13
|
+
const result = await this.client.put(key, Buffer.from(JSON.stringify(jsonData)), {
|
|
14
|
+
headers: {
|
|
15
|
+
"Content-Type": "application/json",
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
cli_1.ui.error("Upload error:", error);
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async removeOSS(key) {
|
|
26
|
+
try {
|
|
27
|
+
const result = await this.client.delete(key);
|
|
28
|
+
cli_1.ui.success("Remove success:", result);
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
cli_1.ui.error("Remove error:", error);
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async copyOSS(sourceKey, targetKey) {
|
|
37
|
+
try {
|
|
38
|
+
const result = await this.client.copy(targetKey, sourceKey);
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
cli_1.ui.error("Copy error:", error);
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async existsOSS(key) {
|
|
47
|
+
try {
|
|
48
|
+
await this.client.head(key);
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async appendJSONOSS(key, content, position) {
|
|
56
|
+
try {
|
|
57
|
+
const arg = {
|
|
58
|
+
headers: {
|
|
59
|
+
"Content-Type": "text/plain",
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
arg.position = position;
|
|
63
|
+
const logs = content.map((x) => JSON.stringify(x)).join("\n") + "\n";
|
|
64
|
+
const result = await this.client.append(key, Buffer.from(logs), arg);
|
|
65
|
+
return result.nextAppendPosition;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async getHeadPosition(key) {
|
|
72
|
+
try {
|
|
73
|
+
const head = await this.client.head(key);
|
|
74
|
+
if (!head) {
|
|
75
|
+
return "0";
|
|
76
|
+
}
|
|
77
|
+
// @ts-ignore
|
|
78
|
+
return head.res.headers["content-length"];
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return "0";
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async uploadFileToOSS(key, file) {
|
|
85
|
+
let fileType = "text/plain";
|
|
86
|
+
if (key.endsWith(".json")) {
|
|
87
|
+
fileType = "application/json";
|
|
88
|
+
}
|
|
89
|
+
else if (key.endsWith(".jpg") || key.endsWith(".jpeg")) {
|
|
90
|
+
fileType = "image/jpeg";
|
|
91
|
+
}
|
|
92
|
+
else if (key.endsWith(".webp")) {
|
|
93
|
+
fileType = "image/webp";
|
|
94
|
+
}
|
|
95
|
+
else if (key.endsWith(".webm")) {
|
|
96
|
+
fileType = "video/webm";
|
|
97
|
+
}
|
|
98
|
+
else if (key.endsWith(".mp3")) {
|
|
99
|
+
fileType = "audio/mpeg";
|
|
100
|
+
}
|
|
101
|
+
else if (key.endsWith(".html")) {
|
|
102
|
+
fileType = "text/html";
|
|
103
|
+
}
|
|
104
|
+
else if (key.endsWith(".pjson")) {
|
|
105
|
+
fileType = "application/json";
|
|
106
|
+
}
|
|
107
|
+
else if (key.endsWith(".log")) {
|
|
108
|
+
fileType = "text/plain";
|
|
109
|
+
}
|
|
110
|
+
else if (key.endsWith(".ico")) {
|
|
111
|
+
fileType = "image/x-icon";
|
|
112
|
+
}
|
|
113
|
+
else if (key.endsWith(".apk")) {
|
|
114
|
+
fileType = "application/vnd.android.package-archive";
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
throw new Error("Unsupported file type");
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
await this.client.put(key, file, {
|
|
121
|
+
headers: {
|
|
122
|
+
"Content-Type": fileType,
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
const url = `https://book.skedo.cn/${key}`;
|
|
126
|
+
cli_1.ui.success("Upload success:", url);
|
|
127
|
+
return url;
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
cli_1.ui.error("Upload error:", error);
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async getResourceOSS(key) {
|
|
135
|
+
try {
|
|
136
|
+
const result = await this.client.get(key);
|
|
137
|
+
if (result.res.status === 200) {
|
|
138
|
+
return JSON.parse(result.content.toString());
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch (e) {
|
|
145
|
+
// console.error("Get resource error:", e)
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async getResourceBufferOSS(key) {
|
|
150
|
+
try {
|
|
151
|
+
const result = await this.client.get(key);
|
|
152
|
+
if (result.res.status === 200 && result.content) {
|
|
153
|
+
const buffer = result.content;
|
|
154
|
+
return buffer.toString("base64");
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (e) {
|
|
161
|
+
// console.error("Get resource error:", e)
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
async getResourceLogOSS(key) {
|
|
166
|
+
try {
|
|
167
|
+
const result = await this.client.get(key);
|
|
168
|
+
if (result.res.status === 200) {
|
|
169
|
+
const content = result.content.toString();
|
|
170
|
+
const lines = content.split("\n").filter((x) => x);
|
|
171
|
+
return lines.map((x) => {
|
|
172
|
+
return JSON.parse(x);
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
return [];
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
catch (e) {
|
|
180
|
+
// console.log(e)
|
|
181
|
+
// console.error("Get resource error:", e)
|
|
182
|
+
return [];
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
async uploadImageToOSS(key, base64data) {
|
|
186
|
+
const buffer = Buffer.from(base64data.split(",")[1], "base64");
|
|
187
|
+
try {
|
|
188
|
+
const result = await this.client.put(key, buffer, {
|
|
189
|
+
headers: {
|
|
190
|
+
"Content-Type": "image/jpeg",
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
cli_1.ui.success("Upload image success:", result.url);
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
cli_1.ui.error("Upload image error:", error);
|
|
198
|
+
throw error;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async listFilesInOSSPath(s3Path, limit = -1) {
|
|
202
|
+
var _a, _b;
|
|
203
|
+
let fileList = [];
|
|
204
|
+
let marker;
|
|
205
|
+
try {
|
|
206
|
+
do {
|
|
207
|
+
const result = await this.client.list({
|
|
208
|
+
prefix: s3Path,
|
|
209
|
+
marker: marker,
|
|
210
|
+
"max-keys": 1000,
|
|
211
|
+
}, {});
|
|
212
|
+
const files = (_b = (_a = result.objects) === null || _a === void 0 ? void 0 : _a.map((obj) => obj.name)) !== null && _b !== void 0 ? _b : [];
|
|
213
|
+
fileList = fileList.concat(files);
|
|
214
|
+
if (limit > 0 && fileList.length >= limit) {
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
// Update marker if there are more files to fetch
|
|
218
|
+
marker = result.nextMarker;
|
|
219
|
+
} while (marker);
|
|
220
|
+
return fileList;
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
throw error;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
exports.POSS = POSS;
|
|
228
|
+
POSS.publicOSS = new POSS({
|
|
229
|
+
region: process.env.OSS_REGION,
|
|
230
|
+
accessKeyId: process.env.ALIYUN_AK,
|
|
231
|
+
accessKeySecret: process.env.ALIYUN_SK,
|
|
232
|
+
bucket: process.env.OSS_BUCKET,
|
|
233
|
+
});
|
|
234
|
+
POSS.privateOSS = new POSS({
|
|
235
|
+
region: process.env.PRV_OSS_REGION,
|
|
236
|
+
accessKeyId: process.env.ALIYUN_AK,
|
|
237
|
+
accessKeySecret: process.env.ALIYUN_SK,
|
|
238
|
+
bucket: process.env.PRV_BUCKET,
|
|
239
|
+
});
|
|
240
|
+
//# sourceMappingURL=alioss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alioss.js","sourceRoot":"","sources":["../src/alioss.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const ui: {
|
|
2
|
+
info(message: string, data?: unknown): void;
|
|
3
|
+
success(message: string, data?: unknown): void;
|
|
4
|
+
warn(message: string, data?: unknown): void;
|
|
5
|
+
error(message: string, data?: unknown): void;
|
|
6
|
+
plain(message: string): void;
|
|
7
|
+
title(message: string): void;
|
|
8
|
+
};
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ui = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
|
+
function formatValue(value) {
|
|
7
|
+
if (typeof value === "string") {
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
return JSON.stringify(value, null, 2);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return String(value);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function withData(base, data, dataStyle = chalk_1.default.dim) {
|
|
18
|
+
if (data === undefined) {
|
|
19
|
+
return base;
|
|
20
|
+
}
|
|
21
|
+
return `${base} ${dataStyle(formatValue(data))}`;
|
|
22
|
+
}
|
|
23
|
+
exports.ui = {
|
|
24
|
+
info(message, data) {
|
|
25
|
+
console.log(withData(chalk_1.default.cyan(message), data));
|
|
26
|
+
},
|
|
27
|
+
success(message, data) {
|
|
28
|
+
console.log(withData(chalk_1.default.green(message), data));
|
|
29
|
+
},
|
|
30
|
+
warn(message, data) {
|
|
31
|
+
console.log(withData(chalk_1.default.yellow(message), data));
|
|
32
|
+
},
|
|
33
|
+
error(message, data) {
|
|
34
|
+
console.error(withData(chalk_1.default.red(message), data));
|
|
35
|
+
},
|
|
36
|
+
plain(message) {
|
|
37
|
+
console.log(message);
|
|
38
|
+
},
|
|
39
|
+
title(message) {
|
|
40
|
+
console.log(chalk_1.default.bold(message));
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;AAAA,0DAAyB;AAEzB,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CACf,IAAY,EACZ,IAAc,EACd,YAAuC,eAAK,CAAC,GAAG;IAEhD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,GAAG,IAAI,IAAI,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAA;AAClD,CAAC;AAEY,QAAA,EAAE,GAAG;IAChB,IAAI,CAAC,OAAe,EAAE,IAAc;QAClC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IAClD,CAAC;IACD,OAAO,CAAC,OAAe,EAAE,IAAc;QACrC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IACnD,CAAC;IACD,IAAI,CAAC,OAAe,EAAE,IAAc;QAClC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IACpD,CAAC;IACD,KAAK,CAAC,OAAe,EAAE,IAAc;QACnC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IACnD,CAAC;IACD,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACtB,CAAC;IACD,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IAClC,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddDnsCommandHandler = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
const AliyunService_1 = require("../services/AliyunService");
|
|
6
|
+
const cli_1 = require("../cli");
|
|
7
|
+
class AddDnsCommandHandler {
|
|
8
|
+
async handle(args) {
|
|
9
|
+
var _a, _b;
|
|
10
|
+
if (args.type !== types_1.Command.AddDns) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const domainName = (_a = args.dnsDomain) !== null && _a !== void 0 ? _a : process.env.ALIYUN_DOMAIN;
|
|
14
|
+
if (!domainName) {
|
|
15
|
+
throw new Error('Missing domain name. Use --domain or set ALIYUN_DOMAIN.');
|
|
16
|
+
}
|
|
17
|
+
if (!args.dnsType || !args.dnsValue || !args.dnsRr) {
|
|
18
|
+
throw new Error('Missing required options: --type, --value, --rr');
|
|
19
|
+
}
|
|
20
|
+
await AliyunService_1.AliyunService.addRecord({
|
|
21
|
+
domainName,
|
|
22
|
+
rr: args.dnsRr,
|
|
23
|
+
type: args.dnsType,
|
|
24
|
+
value: args.dnsValue,
|
|
25
|
+
ttl: (_b = args.dnsTtl) !== null && _b !== void 0 ? _b : 600,
|
|
26
|
+
});
|
|
27
|
+
cli_1.ui.success(`Added DNS record ${args.dnsRr}.${domainName} ${args.dnsType} ${args.dnsValue}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.AddDnsCommandHandler = AddDnsCommandHandler;
|
|
31
|
+
//# sourceMappingURL=AddDnsCommandHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddDnsCommandHandler.js","sourceRoot":"","sources":["../../src/commands/AddDnsCommandHandler.ts"],"names":[],"mappings":";;;AAAA,oCAAgD;AAChD,6DAA0D;AAC1D,gCAA4B;AAE5B,MAAa,oBAAoB;IAC/B,KAAK,CAAC,MAAM,CAAC,IAAiB;;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,eAAO,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,MAAA,IAAI,CAAC,SAAS,mCAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC/D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,6BAAa,CAAC,SAAS,CAAC;YAC5B,UAAU;YACV,EAAE,EAAE,IAAI,CAAC,KAAK;YACd,IAAI,EAAE,IAAI,CAAC,OAAO;YAClB,KAAK,EAAE,IAAI,CAAC,QAAQ;YACpB,GAAG,EAAE,MAAA,IAAI,CAAC,MAAM,mCAAI,GAAG;SACxB,CAAC,CAAC;QAEH,QAAE,CAAC,OAAO,CACR,oBAAoB,IAAI,CAAC,KAAK,IAAI,UAAU,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAChF,CAAC;IACJ,CAAC;CACF;AA7BD,oDA6BC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BucketCommandHandler = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
const AliyunService_1 = require("../services/AliyunService");
|
|
6
|
+
const cli_1 = require("../cli");
|
|
7
|
+
class BucketCommandHandler {
|
|
8
|
+
async handle(args) {
|
|
9
|
+
var _a;
|
|
10
|
+
if (args.type !== types_1.Command.Bucket) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (!args.bucketCreate) {
|
|
14
|
+
throw new Error("Missing bucket action. Use --create.");
|
|
15
|
+
}
|
|
16
|
+
const bucketName = (_a = args.bucketName) === null || _a === void 0 ? void 0 : _a.trim();
|
|
17
|
+
if (!bucketName) {
|
|
18
|
+
throw new Error("Missing bucket name. Use --name <bucket>.");
|
|
19
|
+
}
|
|
20
|
+
await AliyunService_1.AliyunService.createBucket(bucketName);
|
|
21
|
+
cli_1.ui.success(`Bucket created: ${bucketName}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.BucketCommandHandler = BucketCommandHandler;
|
|
25
|
+
//# sourceMappingURL=BucketCommandHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BucketCommandHandler.js","sourceRoot":"","sources":["../../src/commands/BucketCommandHandler.ts"],"names":[],"mappings":";;;AAAA,oCAA+C;AAC/C,6DAAyD;AACzD,gCAA2B;AAE3B,MAAa,oBAAoB;IAC/B,KAAK,CAAC,MAAM,CAAC,IAAiB;;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,eAAO,CAAC,MAAM,EAAE,CAAC;YACjC,OAAM;QACR,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACzD,CAAC;QAED,MAAM,UAAU,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,IAAI,EAAE,CAAA;QAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;QAC9D,CAAC;QAED,MAAM,6BAAa,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;QAC5C,QAAE,CAAC,OAAO,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;IAC7C,CAAC;CACF;AAlBD,oDAkBC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeployCommandHandler = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_path_1 = tslib_1.__importDefault(require("node:path"));
|
|
7
|
+
const node_child_process_1 = require("node:child_process");
|
|
8
|
+
const yaml_1 = tslib_1.__importDefault(require("yaml"));
|
|
9
|
+
const types_1 = require("../types");
|
|
10
|
+
const AliyunService_1 = require("../services/AliyunService");
|
|
11
|
+
class DeployCommandHandler {
|
|
12
|
+
async handle(args) {
|
|
13
|
+
var _a, _b, _c;
|
|
14
|
+
if (args.type !== types_1.Command.Deploy) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const appName = (_a = args.deployApp) === null || _a === void 0 ? void 0 : _a.trim();
|
|
18
|
+
if (!appName) {
|
|
19
|
+
throw new Error("Missing app name. Usage: deploy <app-name> [--cwd <dir>].");
|
|
20
|
+
}
|
|
21
|
+
const cwd = this.resolveCwd(args.deployCwd);
|
|
22
|
+
const packageJsonPath = node_path_1.default.join(cwd, "apps", appName, "package.json");
|
|
23
|
+
if (!(0, node_fs_1.existsSync)(packageJsonPath)) {
|
|
24
|
+
throw new Error(`No package.json found at ${packageJsonPath}`);
|
|
25
|
+
}
|
|
26
|
+
const pkg = this.loadPackageJson(packageJsonPath);
|
|
27
|
+
const pkgName = (_b = pkg.name) === null || _b === void 0 ? void 0 : _b.trim();
|
|
28
|
+
if (!pkgName) {
|
|
29
|
+
throw new Error(`Missing package name in ${packageJsonPath}`);
|
|
30
|
+
}
|
|
31
|
+
await this.runCommand("pnpm", ["--filter", pkgName, "build"], cwd);
|
|
32
|
+
const distDir = node_path_1.default.join(cwd, "apps", appName, "dist");
|
|
33
|
+
if (!(0, node_fs_1.existsSync)(distDir)) {
|
|
34
|
+
throw new Error(`No dist directory found at ${distDir}`);
|
|
35
|
+
}
|
|
36
|
+
const config = this.loadConfig(cwd);
|
|
37
|
+
const appConfig = config.apps.find((entry) => (entry === null || entry === void 0 ? void 0 : entry.app) === appName);
|
|
38
|
+
if (!appConfig) {
|
|
39
|
+
throw new Error(`No app named ${appName} found in ${node_path_1.default.join(cwd, ".pmate.yaml")}`);
|
|
40
|
+
}
|
|
41
|
+
const bucketName = (_c = appConfig.bucket) === null || _c === void 0 ? void 0 : _c.trim();
|
|
42
|
+
if (!bucketName) {
|
|
43
|
+
throw new Error(`Missing bucket for ${appName} in ${node_path_1.default.join(cwd, ".pmate.yaml")}`);
|
|
44
|
+
}
|
|
45
|
+
await AliyunService_1.AliyunService.uploadDirectory(distDir, bucketName);
|
|
46
|
+
}
|
|
47
|
+
resolveCwd(target) {
|
|
48
|
+
return target ? node_path_1.default.resolve(process.cwd(), target) : process.cwd();
|
|
49
|
+
}
|
|
50
|
+
loadPackageJson(packageJsonPath) {
|
|
51
|
+
const raw = (0, node_fs_1.readFileSync)(packageJsonPath, "utf8");
|
|
52
|
+
const parsed = JSON.parse(raw);
|
|
53
|
+
if (!parsed || typeof parsed !== "object") {
|
|
54
|
+
throw new Error(`Invalid package.json at ${packageJsonPath}`);
|
|
55
|
+
}
|
|
56
|
+
return parsed;
|
|
57
|
+
}
|
|
58
|
+
loadConfig(cwd) {
|
|
59
|
+
const configPath = node_path_1.default.join(cwd, ".pmate.yaml");
|
|
60
|
+
if (!(0, node_fs_1.existsSync)(configPath)) {
|
|
61
|
+
throw new Error(`No .pmate.yaml found in ${cwd}`);
|
|
62
|
+
}
|
|
63
|
+
const raw = (0, node_fs_1.readFileSync)(configPath, "utf8");
|
|
64
|
+
const parsed = yaml_1.default.parse(raw);
|
|
65
|
+
if (!parsed || typeof parsed !== "object" || !Array.isArray(parsed.apps)) {
|
|
66
|
+
throw new Error("Invalid .pmate.yaml: missing apps array");
|
|
67
|
+
}
|
|
68
|
+
return parsed;
|
|
69
|
+
}
|
|
70
|
+
runCommand(command, args, cwd) {
|
|
71
|
+
return new Promise((resolve, reject) => {
|
|
72
|
+
const child = (0, node_child_process_1.spawn)(command, args, {
|
|
73
|
+
cwd,
|
|
74
|
+
stdio: "inherit",
|
|
75
|
+
});
|
|
76
|
+
child.on("error", (error) => {
|
|
77
|
+
reject(error);
|
|
78
|
+
});
|
|
79
|
+
child.on("close", (code) => {
|
|
80
|
+
if (code === 0) {
|
|
81
|
+
resolve();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
reject(new Error(`${command} exited with code ${code}`));
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.DeployCommandHandler = DeployCommandHandler;
|
|
90
|
+
//# sourceMappingURL=DeployCommandHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeployCommandHandler.js","sourceRoot":"","sources":["../../src/commands/DeployCommandHandler.ts"],"names":[],"mappings":";;;;AAAA,qCAAkD;AAClD,kEAA4B;AAC5B,2DAA0C;AAC1C,wDAAuB;AACvB,oCAA4D;AAC5D,6DAAyD;AAMzD,MAAa,oBAAoB;IAC/B,KAAK,CAAC,MAAM,CAAC,IAAiB;;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,eAAO,CAAC,MAAM,EAAE,CAAC;YACjC,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,MAAA,IAAI,CAAC,SAAS,0CAAE,IAAI,EAAE,CAAA;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAA;QACH,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC3C,MAAM,eAAe,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAAA;QACvE,IAAI,CAAC,IAAA,oBAAU,EAAC,eAAe,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,4BAA4B,eAAe,EAAE,CAAC,CAAA;QAChE,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,MAAA,GAAG,CAAC,IAAI,0CAAE,IAAI,EAAE,CAAA;QAChC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,2BAA2B,eAAe,EAAE,CAAC,CAAA;QAC/D,CAAC;QAED,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAA;QAElE,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QACvD,IAAI,CAAC,IAAA,oBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAA;QAC1D,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACnC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,GAAG,MAAK,OAAO,CAAC,CAAA;QACrE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,gBAAgB,OAAO,aAAa,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,CACpE,CAAA;QACH,CAAC;QAED,MAAM,UAAU,GAAG,MAAA,SAAS,CAAC,MAAM,0CAAE,IAAI,EAAE,CAAA;QAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,sBAAsB,OAAO,OAAO,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,CACpE,CAAA;QACH,CAAC;QAED,MAAM,6BAAa,CAAC,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IAC1D,CAAC;IAEO,UAAU,CAAC,MAAe;QAChC,OAAO,MAAM,CAAC,CAAC,CAAC,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;IACrE,CAAC;IAEO,eAAe,CAAC,eAAuB;QAC7C,MAAM,GAAG,GAAG,IAAA,sBAAY,EAAC,eAAe,EAAE,MAAM,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,2BAA2B,eAAe,EAAE,CAAC,CAAA;QAC/D,CAAC;QACD,OAAO,MAAqB,CAAA;IAC9B,CAAC;IAEO,UAAU,CAAC,GAAW;QAC5B,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;QAChD,IAAI,CAAC,IAAA,oBAAU,EAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAA;QACnD,CAAC;QAED,MAAM,GAAG,GAAG,IAAA,sBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,cAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAC5D,CAAC;QAED,OAAO,MAAqB,CAAA;IAC9B,CAAC;IAEO,UAAU,CAChB,OAAe,EACf,IAAc,EACd,GAAW;QAEX,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,IAAA,0BAAK,EAAC,OAAO,EAAE,IAAI,EAAE;gBACjC,GAAG;gBACH,KAAK,EAAE,SAAS;aACjB,CAAC,CAAA;YAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC1B,MAAM,CAAC,KAAK,CAAC,CAAA;YACf,CAAC,CAAC,CAAA;YAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,EAAE,CAAA;oBACT,OAAM;gBACR,CAAC;gBACD,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,OAAO,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAA;YAC1D,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AAtGD,oDAsGC"}
|