@vectorx/xhs-cloud-cli 0.6.1 → 1.0.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.
Files changed (52) hide show
  1. package/bin/rcb.js +47 -157
  2. package/lib/commands/agent/dev.js +3 -0
  3. package/lib/commands/auth/login.js +13 -0
  4. package/lib/commands/env/create.js +156 -0
  5. package/lib/commands/env/index.js +20 -0
  6. package/lib/commands/env/info.js +106 -0
  7. package/lib/commands/env/list.js +93 -0
  8. package/lib/commands/env/set.js +129 -0
  9. package/lib/commands/fun/deploy.js +182 -0
  10. package/lib/commands/fun/dev.js +183 -0
  11. package/lib/commands/fun/index.js +20 -0
  12. package/lib/commands/fun/list.js +77 -0
  13. package/lib/commands/fun/new.js +125 -0
  14. package/lib/commands/index.js +2 -0
  15. package/lib/constants/cmd.js +9 -9
  16. package/lib/core/base.js +75 -1
  17. package/lib/decorators/auth.js +6 -0
  18. package/lib/decorators/captureError.js +1 -0
  19. package/lib/main.js +6 -0
  20. package/package.json +7 -6
  21. package/templates/ai-cloud-functions-example/.env.template +1 -0
  22. package/templates/ai-cloud-functions-example/README.md +277 -0
  23. package/templates/ai-cloud-functions-example/agent-cloudbase-functions.json +83 -0
  24. package/templates/ai-cloud-functions-example/package.json +10 -0
  25. package/templates/ai-cloud-functions-example/src/binary/index.js +207 -0
  26. package/templates/ai-cloud-functions-example/src/context/context-service.js +94 -0
  27. package/templates/ai-cloud-functions-example/src/context/index.js +57 -0
  28. package/templates/ai-cloud-functions-example/src/env/index.js +264 -0
  29. package/templates/ai-cloud-functions-example/src/form/index.js +138 -0
  30. package/templates/ai-cloud-functions-example/src/index.js +0 -0
  31. package/templates/ai-cloud-functions-example/src/json/index.js +194 -0
  32. package/templates/ai-cloud-functions-example/src/multipart/index.js +189 -0
  33. package/templates/ai-cloud-functions-example/src/text/index.js +319 -0
  34. package/templates/ai-cloud-functions-example/src/user/index.js +82 -0
  35. package/templates/chatbox-agent/project.config.json +2 -2
  36. package/templates/cloudfunction-template/.env.template +2 -0
  37. package/templates/cloudfunction-template/agent-cloudbase-functions.json +17 -0
  38. package/templates/cloudfunction-template/package.json +11 -0
  39. package/templates/cloudfunction-template/project.config.json +5 -0
  40. package/templates/cloudfunction-template/src/echo.js +27 -0
  41. package/templates/cloudfunction-template/src/index.js +34 -0
  42. package/types/commands/env/create.d.ts +19 -0
  43. package/types/commands/env/index.d.ts +4 -0
  44. package/types/commands/env/info.d.ts +14 -0
  45. package/types/commands/env/list.d.ts +11 -0
  46. package/types/commands/env/set.d.ts +14 -0
  47. package/types/commands/fun/deploy.d.ts +14 -0
  48. package/types/commands/fun/dev.d.ts +14 -0
  49. package/types/commands/fun/index.d.ts +4 -0
  50. package/types/commands/fun/list.d.ts +14 -0
  51. package/types/commands/fun/new.d.ts +16 -0
  52. package/types/commands/index.d.ts +2 -0
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ var __importDefault = (this && this.__importDefault) || function (mod) {
24
+ return (mod && mod.__esModule) ? mod : { "default": mod };
25
+ };
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.EnvSetCommand = void 0;
28
+ const cloud_toolkit_1 = require("@vectorx/cloud-toolkit");
29
+ const chalk_1 = __importDefault(require("chalk"));
30
+ const base_1 = require("../../core/base");
31
+ const decorators_1 = require("../../decorators");
32
+ const auth_1 = require("../../decorators/auth");
33
+ const prefix = chalk_1.default.bgBlueBright(" 🌐 [rcb-env] ");
34
+ let EnvSetCommand = class EnvSetCommand extends base_1.Command {
35
+ execute(options, log) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ var _a, _b, _c;
38
+ const envId = options.envId;
39
+ if (!envId) {
40
+ log.error(`${prefix} 请通过 -e, --envId 指定要设置的云环境 Id`);
41
+ log.breakLine();
42
+ console.log(chalk_1.default.gray("示例: "));
43
+ console.log(chalk_1.default.cyan(" rcb env set -e test-fn-cloud-8gtlmtu7e819f76b"));
44
+ log.breakLine();
45
+ process.exit(1);
46
+ }
47
+ const spinner = log.spinner(`${prefix} 正在校验并设置云环境(envId=${envId})...`);
48
+ try {
49
+ const envs = yield (0, cloud_toolkit_1.getCloudEnvironments)();
50
+ if (!envs || envs.length === 0) {
51
+ spinner.fail(`${prefix} 当前账号下暂无可用云环境`);
52
+ log.breakLine();
53
+ log.warn(`${prefix} 请先前往小红书小程序开发平台创建云环境后再重试`);
54
+ log.breakLine();
55
+ process.exit(1);
56
+ }
57
+ const targetEnv = envs.find((env) => env.cloud_env_id === envId);
58
+ if (!targetEnv) {
59
+ spinner.fail(`${prefix} 未找到 Id 为 ${envId} 的云环境`);
60
+ log.breakLine();
61
+ log.info(`${prefix} 请使用 ${chalk_1.default.cyan("rcb env list")} 查看可用云环境列表`);
62
+ log.breakLine();
63
+ process.exit(1);
64
+ }
65
+ const authService = cloud_toolkit_1.container.get(cloud_toolkit_1.SERVICE_IDENTIFIERS.AuthService);
66
+ const loginInfo = yield authService.getLoginInfo();
67
+ if (!loginInfo) {
68
+ spinner.fail(`${prefix} 未检测到登录信息,请先执行 rcb login`);
69
+ log.breakLine();
70
+ process.exit(1);
71
+ }
72
+ const hasPreviousEnv = Boolean((_a = loginInfo.cloudEnvInfo) === null || _a === void 0 ? void 0 : _a.cloud_env_id);
73
+ yield authService.saveLoginInfo(Object.assign(Object.assign({}, loginInfo), { cloudEnvInfo: targetEnv }));
74
+ spinner.succeed(`${prefix} 已将当前 CLI 默认云环境设置为: ${targetEnv.cloud_env_name} (${targetEnv.cloud_env_id})`);
75
+ log.breakLine();
76
+ if (hasPreviousEnv && ((_b = loginInfo.cloudEnvInfo) === null || _b === void 0 ? void 0 : _b.cloud_env_id) !== targetEnv.cloud_env_id) {
77
+ log.warn(`${prefix} 检测到已存在的云环境配置,本次操作已覆盖之前的默认云环境设置(仅保留最新一次设置)。`);
78
+ log.breakLine();
79
+ }
80
+ log.info(`${prefix} 当前默认云环境详情如下:`);
81
+ log.breakLine();
82
+ (0, cloud_toolkit_1.printHorizontalTable)([chalk_1.default.gray("字段"), chalk_1.default.gray("值")], [
83
+ [chalk_1.default.gray("名称"), chalk_1.default.bold(targetEnv.cloud_env_name)],
84
+ [chalk_1.default.gray("ID"), chalk_1.default.cyan(targetEnv.cloud_env_id)],
85
+ [
86
+ chalk_1.default.gray("状态"),
87
+ targetEnv.status === 1 ? chalk_1.default.green("启用") : chalk_1.default.yellow(`停用/未知 (${(_c = targetEnv.status) !== null && _c !== void 0 ? _c : "N/A"})`),
88
+ ],
89
+ [chalk_1.default.gray("描述"), targetEnv.description || "-"],
90
+ [chalk_1.default.gray("创建时间"), targetEnv.create_time || "-"],
91
+ [chalk_1.default.gray("更新时间"), targetEnv.update_time || "-"],
92
+ ]);
93
+ log.breakLine();
94
+ }
95
+ catch (error) {
96
+ spinner.fail(`${prefix} 设置云环境失败`);
97
+ log.error(`${prefix} 错误信息: ${(error === null || error === void 0 ? void 0 : error.message) || error}`);
98
+ log.breakLine();
99
+ process.exit(1);
100
+ }
101
+ });
102
+ }
103
+ get options() {
104
+ return {
105
+ cmd: "env",
106
+ childCmd: "set",
107
+ desc: "设置当前 CLI 默认云环境(会覆盖之前的设置)",
108
+ options: [
109
+ {
110
+ flags: "-e, --envId <envId>",
111
+ desc: "云环境 Id(cloud_env_id)",
112
+ },
113
+ ],
114
+ };
115
+ }
116
+ };
117
+ exports.EnvSetCommand = EnvSetCommand;
118
+ __decorate([
119
+ (0, decorators_1.InjectParams)(),
120
+ __param(0, (0, decorators_1.ArgsOptions)()),
121
+ __param(1, (0, decorators_1.Log)()),
122
+ __metadata("design:type", Function),
123
+ __metadata("design:paramtypes", [Object, Function]),
124
+ __metadata("design:returntype", Promise)
125
+ ], EnvSetCommand.prototype, "execute", null);
126
+ exports.EnvSetCommand = EnvSetCommand = __decorate([
127
+ (0, auth_1.AuthGuard)(),
128
+ (0, base_1.ICommand)()
129
+ ], EnvSetCommand);
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ var __importDefault = (this && this.__importDefault) || function (mod) {
24
+ return (mod && mod.__esModule) ? mod : { "default": mod };
25
+ };
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.FunDeployCommand = void 0;
28
+ const fs_1 = __importDefault(require("fs"));
29
+ const path_1 = __importDefault(require("path"));
30
+ const cloud_toolkit_1 = require("@vectorx/cloud-toolkit");
31
+ const chalk_1 = __importDefault(require("chalk"));
32
+ const base_1 = require("../../core/base");
33
+ const decorators_1 = require("../../decorators");
34
+ const auth_1 = require("../../decorators/auth");
35
+ const prefix = chalk_1.default.bgBlueBright(" 🚀 [rcb-fun] ");
36
+ let FunDeployCommand = class FunDeployCommand extends base_1.Command {
37
+ execute(options, log) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ const envId = options.envId;
40
+ const includeNodeModules = options.excludeNodeModules
41
+ ? false
42
+ : options.includeNodeModules !== undefined
43
+ ? Boolean(options.includeNodeModules)
44
+ : true;
45
+ const inputWorkDir = options.dir || process.cwd();
46
+ const workDir = path_1.default.isAbsolute(inputWorkDir) ? inputWorkDir : path_1.default.resolve(process.cwd(), inputWorkDir);
47
+ const desc = options.desc;
48
+ if (!fs_1.default.existsSync(workDir)) {
49
+ log.error(`${prefix} 目录不存在: ${workDir}`);
50
+ process.exit(1);
51
+ }
52
+ log.breakLine();
53
+ const validatorSpinner = log.spinner(`${prefix} 正在校验项目配置...`);
54
+ try {
55
+ const validator = new cloud_toolkit_1.FunProjectValidator(workDir);
56
+ const validationResult = yield validator.validate();
57
+ if (!validationResult.valid) {
58
+ validatorSpinner.fail(`${prefix} 项目校验失败`);
59
+ log.breakLine();
60
+ log.error(`${prefix} 发现以下错误:`);
61
+ validationResult.errors.forEach((error) => {
62
+ log.error(`${prefix} ❌ ${error}`);
63
+ });
64
+ if (validationResult.warnings && validationResult.warnings.length > 0) {
65
+ log.breakLine();
66
+ log.warn(`${prefix} 警告:`);
67
+ validationResult.warnings.forEach((warning) => {
68
+ log.warn(`${prefix} ⚠️ ${warning}`);
69
+ });
70
+ }
71
+ log.breakLine();
72
+ process.exit(1);
73
+ }
74
+ if (validationResult.warnings && validationResult.warnings.length > 0) {
75
+ validatorSpinner.warn(`${prefix} 项目校验通过,但有警告`);
76
+ log.breakLine();
77
+ validationResult.warnings.forEach((warning) => {
78
+ log.warn(`${prefix} ⚠️ ${warning}`);
79
+ });
80
+ log.breakLine();
81
+ }
82
+ else {
83
+ validatorSpinner.succeed(`${prefix} 项目校验通过`);
84
+ }
85
+ }
86
+ catch (error) {
87
+ validatorSpinner.fail(`${prefix} 项目校验异常`);
88
+ log.error(`${prefix} 校验过程出错: ${(error === null || error === void 0 ? void 0 : error.message) || error}`);
89
+ log.breakLine();
90
+ process.exit(1);
91
+ }
92
+ if (!envId) {
93
+ log.error(`${prefix} 缺少目标云环境 Id,请通过 -e/--envId 指定 cloud_env_id。`);
94
+ log.breakLine();
95
+ console.log(chalk_1.default.gray("💡 例如:rcb fun deploy -e your-cloud-env-id -d ./functions"));
96
+ log.breakLine();
97
+ process.exit(1);
98
+ }
99
+ log.breakLine();
100
+ log.info(`${prefix} 当前命令: rcb fun deploy`);
101
+ log.info(`${prefix} 工作目录: ${workDir}`);
102
+ log.info(`${prefix} 目标环境 Id: ${envId}`);
103
+ log.info(`${prefix} 是否包含 node_modules: ${includeNodeModules ? "是" : "否"}`);
104
+ if (desc) {
105
+ log.info(`${prefix} 部署描述: ${desc}`);
106
+ }
107
+ const spinner = log.spinner(`${prefix} 正在打包并部署函数代码...`);
108
+ try {
109
+ const result = yield (0, cloud_toolkit_1.deployFun)({
110
+ envId,
111
+ workDir,
112
+ includeNodeModules,
113
+ desc,
114
+ });
115
+ if (result.success && result.code === 0) {
116
+ spinner.succeed(chalk_1.default.green(`${prefix} 函数部署成功 ✅`));
117
+ if (result.msg) {
118
+ log.info(`${prefix} 服务返回信息: ${result.msg}`);
119
+ }
120
+ }
121
+ else {
122
+ spinner.fail(`${prefix} 函数部署失败`);
123
+ log.error(`${prefix} 服务返回错误: ${result.msg || "未知错误"}`);
124
+ process.exit(1);
125
+ }
126
+ }
127
+ catch (error) {
128
+ spinner.fail(`${prefix} 函数部署失败`);
129
+ log.error(`${prefix} 错误信息: ${(error === null || error === void 0 ? void 0 : error.message) || error}`);
130
+ log.breakLine();
131
+ console.log(chalk_1.default.gray("💡 可能的解决方案:"));
132
+ console.log(chalk_1.default.gray(" • 请检查 envId 是否正确,并确认云环境已创建"));
133
+ console.log(chalk_1.default.gray(" • 请检查函数目录是否正确,并确保包含有效的云函数代码"));
134
+ console.log(chalk_1.default.gray(" • 请检查是否已登录(rcb login)且登录信息未过期"));
135
+ log.breakLine();
136
+ process.exit(1);
137
+ }
138
+ });
139
+ }
140
+ get options() {
141
+ return {
142
+ cmd: "fun",
143
+ childCmd: "deploy",
144
+ desc: "部署函数到指定云环境",
145
+ options: [
146
+ {
147
+ flags: "-e, --envId <envId>",
148
+ desc: "环境 Id(云环境 Id,必填)",
149
+ },
150
+ {
151
+ flags: "-d, --dir <dir>",
152
+ desc: "指定函数代码所在的目录,默认为当前目录",
153
+ },
154
+ {
155
+ flags: "--includeNodeModules",
156
+ desc: "包含本地 node_modules 目录(默认包含)",
157
+ },
158
+ {
159
+ flags: "--excludeNodeModules",
160
+ desc: "排除本地 node_modules 目录",
161
+ },
162
+ {
163
+ flags: "--desc <desc>",
164
+ desc: "部署描述信息,将透传到云端的 desc 字段(可选)",
165
+ },
166
+ ],
167
+ };
168
+ }
169
+ };
170
+ exports.FunDeployCommand = FunDeployCommand;
171
+ __decorate([
172
+ (0, decorators_1.InjectParams)(),
173
+ __param(0, (0, decorators_1.ArgsOptions)()),
174
+ __param(1, (0, decorators_1.Log)()),
175
+ __metadata("design:type", Function),
176
+ __metadata("design:paramtypes", [Object, Function]),
177
+ __metadata("design:returntype", Promise)
178
+ ], FunDeployCommand.prototype, "execute", null);
179
+ exports.FunDeployCommand = FunDeployCommand = __decorate([
180
+ (0, auth_1.AuthGuard)(),
181
+ (0, base_1.ICommand)()
182
+ ], FunDeployCommand);
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ var __importDefault = (this && this.__importDefault) || function (mod) {
24
+ return (mod && mod.__esModule) ? mod : { "default": mod };
25
+ };
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.FunDevCommand = void 0;
28
+ const fs_1 = __importDefault(require("fs"));
29
+ const path_1 = __importDefault(require("path"));
30
+ const cloud_toolkit_1 = require("@vectorx/cloud-toolkit");
31
+ const App_1 = require("@vectorx/function-debugger/lib/App");
32
+ const chalk_1 = __importDefault(require("chalk"));
33
+ const base_1 = require("../../core/base");
34
+ const decorators_1 = require("../../decorators");
35
+ const auth_1 = require("../../decorators/auth");
36
+ const prefix = chalk_1.default.bgBlueBright(" 🧪 [rcb-fun] ");
37
+ let FunDevCommand = class FunDevCommand extends base_1.Command {
38
+ execute(options, log) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ const inputWorkDir = options.dir || process.cwd();
41
+ const workDir = path_1.default.isAbsolute(inputWorkDir) ? inputWorkDir : path_1.default.resolve(process.cwd(), inputWorkDir);
42
+ if (!fs_1.default.existsSync(workDir)) {
43
+ throw new Error(`目录不存在: ${workDir}`);
44
+ }
45
+ log.breakLine();
46
+ const validatorSpinner = log.spinner(`${prefix} 正在校验项目配置...`);
47
+ try {
48
+ const validator = new cloud_toolkit_1.FunProjectValidator(workDir);
49
+ const validationResult = yield validator.validate();
50
+ if (!validationResult.valid) {
51
+ validatorSpinner.fail(`${prefix} 项目校验失败`);
52
+ log.breakLine();
53
+ log.error(`${prefix} 发现以下错误:`);
54
+ validationResult.errors.forEach((error) => {
55
+ log.error(`${prefix} ❌ ${error}`);
56
+ });
57
+ if (validationResult.warnings && validationResult.warnings.length > 0) {
58
+ log.breakLine();
59
+ log.warn(`${prefix} 警告:`);
60
+ validationResult.warnings.forEach((warning) => {
61
+ log.warn(`${prefix} ⚠️ ${warning}`);
62
+ });
63
+ }
64
+ log.breakLine();
65
+ process.exit(1);
66
+ }
67
+ if (validationResult.warnings && validationResult.warnings.length > 0) {
68
+ validatorSpinner.warn(`${prefix} 项目校验通过,但有警告`);
69
+ log.breakLine();
70
+ validationResult.warnings.forEach((warning) => {
71
+ log.warn(`${prefix} ⚠️ ${warning}`);
72
+ });
73
+ log.breakLine();
74
+ }
75
+ else {
76
+ validatorSpinner.succeed(`${prefix} 项目校验通过`);
77
+ }
78
+ }
79
+ catch (error) {
80
+ validatorSpinner.fail(`${prefix} 项目校验异常`);
81
+ log.error(`${prefix} 校验过程出错: ${(error === null || error === void 0 ? void 0 : error.message) || error}`);
82
+ log.breakLine();
83
+ process.exit(1);
84
+ }
85
+ const envId = options.envId;
86
+ if (envId) {
87
+ const spinner = log.spinner(`${prefix} 正在校验云环境(envId=${envId})...`);
88
+ try {
89
+ const envs = yield (0, cloud_toolkit_1.getCloudEnvironments)();
90
+ if (!envs || envs.length === 0) {
91
+ spinner.fail(`${prefix} 当前账号下暂无可用云环境`);
92
+ log.breakLine();
93
+ log.warn(`${prefix} 请先前往小红书小程序开发平台创建云环境后再重试`);
94
+ log.breakLine();
95
+ process.exit(1);
96
+ }
97
+ const targetEnv = envs.find((env) => env.cloud_env_id === envId);
98
+ if (!targetEnv) {
99
+ spinner.fail(`${prefix} 未找到 Id 为 ${envId} 的云环境`);
100
+ log.breakLine();
101
+ log.info(`${prefix} 请使用 ${chalk_1.default.cyan("rcb env list")} 查看可用云环境列表`);
102
+ log.breakLine();
103
+ process.exit(1);
104
+ }
105
+ spinner.succeed(`${prefix} 已选择云环境: ${targetEnv.cloud_env_name} (${targetEnv.cloud_env_id})`);
106
+ log.breakLine();
107
+ const authService = cloud_toolkit_1.container.get(cloud_toolkit_1.SERVICE_IDENTIFIERS.AuthService);
108
+ const loginInfo = yield authService.getLoginInfo();
109
+ if (!loginInfo) {
110
+ log.error(`${prefix} 未检测到登录信息,请先执行 rcb login`);
111
+ log.breakLine();
112
+ process.exit(1);
113
+ }
114
+ yield authService.saveLoginInfo(Object.assign(Object.assign({}, loginInfo), { cloudEnvInfo: targetEnv }));
115
+ log.info(`${prefix} 已将当前云环境绑定到登录信息,后续命令可复用该环境配置`);
116
+ log.breakLine();
117
+ }
118
+ catch (error) {
119
+ spinner.fail(`${prefix} 云环境校验失败`);
120
+ log.error(`${prefix} 错误信息: ${(error === null || error === void 0 ? void 0 : error.message) || error}`);
121
+ log.breakLine();
122
+ process.exit(1);
123
+ }
124
+ }
125
+ log.info(`${prefix} 函数调试目录: ${workDir}`);
126
+ try {
127
+ const runtime = yield (0, cloud_toolkit_1.startFunDev)({
128
+ workDir,
129
+ envId,
130
+ watch: Boolean(options.watch),
131
+ open: Boolean(options.open),
132
+ mode: "fun",
133
+ deps: { startFunctionDebugger: App_1.startFunctionDebugger },
134
+ });
135
+ log.info(`${prefix} 函数调试服务已启动`);
136
+ log.info(`${prefix} 函数框架服务地址: ${runtime.ffUrl}`);
137
+ log.info(`${prefix} 调试器地址: ${runtime.uiUrl}`);
138
+ }
139
+ catch (error) {
140
+ log.error(`${prefix} 启动函数调试环境失败: ${error.message}`);
141
+ throw error;
142
+ }
143
+ });
144
+ }
145
+ get options() {
146
+ return {
147
+ cmd: "fun",
148
+ childCmd: "dev",
149
+ desc: "启动函数本地调试服务",
150
+ options: [
151
+ {
152
+ flags: "-d, --dir <dir>",
153
+ desc: "指定函数调试的目录,默认为当前目录",
154
+ },
155
+ {
156
+ flags: "-o, --open",
157
+ desc: "启动后自动打开浏览器访问调试 UI",
158
+ },
159
+ {
160
+ flags: "-e, --envId <envId>",
161
+ desc: "指定当前账号生效的云环境 Id(注:会校验当前账号和云环境的绑定关系!)",
162
+ },
163
+ {
164
+ flags: "-w, --watch",
165
+ desc: "启用文件监听模式,文件变化时自动刷新",
166
+ },
167
+ ],
168
+ };
169
+ }
170
+ };
171
+ exports.FunDevCommand = FunDevCommand;
172
+ __decorate([
173
+ (0, decorators_1.InjectParams)(),
174
+ __param(0, (0, decorators_1.ArgsOptions)()),
175
+ __param(1, (0, decorators_1.Log)()),
176
+ __metadata("design:type", Function),
177
+ __metadata("design:paramtypes", [Object, Function]),
178
+ __metadata("design:returntype", Promise)
179
+ ], FunDevCommand.prototype, "execute", null);
180
+ exports.FunDevCommand = FunDevCommand = __decorate([
181
+ (0, auth_1.AuthGuard)(),
182
+ (0, base_1.ICommand)()
183
+ ], FunDevCommand);
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./dev"), exports);
18
+ __exportStar(require("./list"), exports);
19
+ __exportStar(require("./deploy"), exports);
20
+ __exportStar(require("./new"), exports);
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ var __importDefault = (this && this.__importDefault) || function (mod) {
24
+ return (mod && mod.__esModule) ? mod : { "default": mod };
25
+ };
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.FunListCommand = void 0;
28
+ const chalk_1 = __importDefault(require("chalk"));
29
+ const base_1 = require("../../core/base");
30
+ const decorators_1 = require("../../decorators");
31
+ const auth_1 = require("../../decorators/auth");
32
+ const prefix = chalk_1.default.bgBlueBright(" 🌐 [rcb-fun] ");
33
+ let FunListCommand = class FunListCommand extends base_1.Command {
34
+ execute(options, log) {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ const envId = options.envId;
37
+ log.breakLine();
38
+ log.warn(`${prefix} 当前命令: rcb fun list`);
39
+ log.warn(`${prefix} 该命令当前暂不支持(暂未开放“云函数列表查询”能力)`);
40
+ if (envId) {
41
+ log.warn(`${prefix} 你传入了 envId=${chalk_1.default.cyan(envId)},但当前不会生效`);
42
+ }
43
+ log.breakLine();
44
+ log.info(`${prefix} 你可以先尝试:`);
45
+ log.info(` - ${chalk_1.default.cyan("rcb fun --help")} 查看 fun 下可用子命令`);
46
+ log.info(` - ${chalk_1.default.cyan("rcb env list")} 查看当前账号下的云环境列表`);
47
+ log.breakLine();
48
+ process.exit(1);
49
+ });
50
+ }
51
+ get options() {
52
+ return {
53
+ cmd: "fun",
54
+ childCmd: "list",
55
+ desc: "查看云函数列表",
56
+ options: [
57
+ {
58
+ flags: "-e, --envId <envId>",
59
+ desc: "环境 Id",
60
+ },
61
+ ],
62
+ };
63
+ }
64
+ };
65
+ exports.FunListCommand = FunListCommand;
66
+ __decorate([
67
+ (0, decorators_1.InjectParams)(),
68
+ __param(0, (0, decorators_1.ArgsOptions)()),
69
+ __param(1, (0, decorators_1.Log)()),
70
+ __metadata("design:type", Function),
71
+ __metadata("design:paramtypes", [Object, Function]),
72
+ __metadata("design:returntype", Promise)
73
+ ], FunListCommand.prototype, "execute", null);
74
+ exports.FunListCommand = FunListCommand = __decorate([
75
+ (0, auth_1.AuthGuard)(),
76
+ (0, base_1.ICommand)()
77
+ ], FunListCommand);