@serverless-devs/s 2.0.100-beta.9 → 2.0.100

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.
@@ -41,23 +41,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
42
  var commander_1 = require("@serverless-devs/commander");
43
43
  var core_1 = __importDefault(require("../utils/core"));
44
+ var path_1 = __importDefault(require("path"));
45
+ var utils_1 = require("../utils");
44
46
  var lodash_1 = require("lodash");
45
- var constant_1 = require("../constant");
46
- var getGlobalArgs = core_1.default.getGlobalArgs, execCommand = core_1.default.execCommand, getTemplatePath = core_1.default.getTemplatePath, getYamlContent = core_1.default.getYamlContent;
47
+ var getGlobalArgs = core_1.default.getGlobalArgs, execCommand = core_1.default.execCommand, getYamlContent = core_1.default.getYamlContent, publishHelp = core_1.default.publishHelp;
47
48
  var SpecialCommad = /** @class */ (function () {
48
49
  function SpecialCommad(command) {
49
50
  this.command = command;
50
51
  }
51
52
  SpecialCommad.prototype.init = function () {
52
53
  return __awaiter(this, void 0, void 0, function () {
53
- var argv, rawData, template, access, skipActions, debug, sub, _a, serverName, method;
54
+ var argv, rawData, template, access, skipActions, debug, env, help, sub, _a, serverName, method, spath;
54
55
  return __generator(this, function (_b) {
55
56
  switch (_b.label) {
56
57
  case 0:
57
- if ((0, lodash_1.includes)(constant_1.COMMAND_LIST, process.argv[2]))
58
- return [2 /*return*/];
59
58
  argv = getGlobalArgs(process.argv.slice(2));
60
- rawData = argv._, template = argv.template, access = argv.access, skipActions = argv["skip-actions"], debug = argv.debug;
59
+ rawData = argv._, template = argv.template, access = argv.access, skipActions = argv["skip-actions"], debug = argv.debug, env = argv.env, help = argv.help;
61
60
  if ((0, lodash_1.isEmpty)(rawData))
62
61
  return [2 /*return*/];
63
62
  sub = new commander_1.Command(rawData[0]);
@@ -65,55 +64,93 @@ var SpecialCommad = /** @class */ (function () {
65
64
  this.command.addCommand(sub);
66
65
  return [4 /*yield*/, this.getParams(argv)];
67
66
  case 1:
68
- _a = _b.sent(), serverName = _a.serverName, method = _a.method;
69
- return [4 /*yield*/, execCommand({
70
- syaml: template,
71
- serverName: serverName,
72
- method: method,
73
- args: process.argv.slice(2),
74
- globalArgs: {
75
- access: access,
76
- skipActions: skipActions,
77
- debug: debug,
78
- },
79
- })];
67
+ _a = _b.sent(), serverName = _a.serverName, method = _a.method, spath = _a.spath;
68
+ if (!(serverName && (0, lodash_1.isEmpty)(method) && help)) return [3 /*break*/, 3];
69
+ return [4 /*yield*/, this.help({ spath: spath, serverName: serverName })];
80
70
  case 2: return [2 /*return*/, _b.sent()];
71
+ case 3: return [4 /*yield*/, execCommand({
72
+ syaml: template,
73
+ serverName: serverName,
74
+ method: method,
75
+ args: process.argv.slice(2),
76
+ globalArgs: {
77
+ access: access,
78
+ skipActions: skipActions,
79
+ debug: debug,
80
+ env: env,
81
+ },
82
+ })];
83
+ case 4: return [2 /*return*/, _b.sent()];
84
+ }
85
+ });
86
+ });
87
+ };
88
+ SpecialCommad.prototype.help = function (_a) {
89
+ var spath = _a.spath, serverName = _a.serverName;
90
+ return __awaiter(this, void 0, void 0, function () {
91
+ var yamlData, component, instance, publishPath, publishContent, commands, customCmds, key, helperLength, output;
92
+ var _b;
93
+ return __generator(this, function (_c) {
94
+ switch (_c.label) {
95
+ case 0: return [4 /*yield*/, getYamlContent(spath)];
96
+ case 1:
97
+ yamlData = _c.sent();
98
+ component = (0, lodash_1.get)(yamlData, ['services', serverName, 'component']);
99
+ return [4 /*yield*/, core_1.default.loadComponent(component)];
100
+ case 2:
101
+ instance = _c.sent();
102
+ publishPath = path_1.default.join(instance.__path, 'publish.yaml');
103
+ return [4 /*yield*/, getYamlContent(publishPath)];
104
+ case 3:
105
+ publishContent = _c.sent();
106
+ commands = publishContent.Commands;
107
+ customCmds = [];
108
+ if (commands) {
109
+ for (key in commands) {
110
+ customCmds.push((_b = {}, _b[key] = commands[key], _b));
111
+ }
112
+ }
113
+ helperLength = publishHelp.maxLen(customCmds);
114
+ output = [
115
+ "".concat((0, utils_1.emoji)('🚀'), " ").concat(publishContent.Name, "@").concat(publishContent.Version, ": ").concat(publishContent.Description, "\n"),
116
+ publishHelp.helpInfo(customCmds, 'Commands', helperLength),
117
+ "".concat((0, utils_1.emoji)('🧭'), " ").concat(core_1.default.makeUnderLine("More information: ".concat(publishContent.HomePage)), "\n"),
118
+ ].join('\n');
119
+ console.log(output);
120
+ return [2 /*return*/];
81
121
  }
82
122
  });
83
123
  });
84
124
  };
85
125
  SpecialCommad.prototype.getParams = function (argv) {
86
126
  return __awaiter(this, void 0, void 0, function () {
87
- var rawData, template, spath, yamlData, servicesName;
127
+ var rawData, template, originSpath, spath, yamlData, servicesName;
88
128
  return __generator(this, function (_a) {
89
129
  switch (_a.label) {
90
130
  case 0:
91
131
  rawData = argv._, template = argv.template;
92
- return [4 /*yield*/, getTemplatePath(template)];
132
+ return [4 /*yield*/, core_1.default.getTemplatePath(template)];
93
133
  case 1:
134
+ originSpath = _a.sent();
135
+ return [4 /*yield*/, core_1.default.transforYamlPath(originSpath, { warn: false })];
136
+ case 2:
94
137
  spath = _a.sent();
95
138
  if (spath) {
96
- process.env['templateFile'] = spath;
139
+ process.env['templateFile'] = originSpath;
97
140
  }
98
- if (rawData.length === 1) {
99
- return [2 /*return*/, {
100
- method: rawData[0],
101
- }];
102
- }
103
- if (!(rawData.length === 2)) return [3 /*break*/, 3];
104
141
  return [4 /*yield*/, getYamlContent(spath)];
105
- case 2:
142
+ case 3:
106
143
  yamlData = _a.sent();
107
144
  servicesName = (0, lodash_1.keys)((0, lodash_1.get)(yamlData, 'services'));
108
145
  return [2 /*return*/, (0, lodash_1.includes)(servicesName, rawData[0])
109
146
  ? {
110
147
  serverName: rawData[0],
111
148
  method: rawData[1],
149
+ spath: spath,
112
150
  }
113
151
  : {
114
152
  method: rawData[0],
115
153
  }];
116
- case 3: return [2 /*return*/];
117
154
  }
118
155
  });
119
156
  });
@@ -121,4 +158,4 @@ var SpecialCommad = /** @class */ (function () {
121
158
  return SpecialCommad;
122
159
  }());
123
160
  exports.default = SpecialCommad;
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BlY2lhbC1jb21tYWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBc0U7QUFDdEUsdURBQWlDO0FBQ2pDLGlDQUFzRDtBQUN0RCx3Q0FBMkM7QUFFbkMsSUFBQSxhQUFhLEdBQW1ELGNBQUksY0FBdkQsRUFBRSxXQUFXLEdBQXNDLGNBQUksWUFBMUMsRUFBRSxlQUFlLEdBQXFCLGNBQUksZ0JBQXpCLEVBQUUsY0FBYyxHQUFLLGNBQUksZUFBVCxDQUFVO0FBRTdFO0lBQ0UsdUJBQW9CLE9BQXdCO1FBQXhCLFlBQU8sR0FBUCxPQUFPLENBQWlCO0lBQUcsQ0FBQztJQUMxQyw0QkFBSSxHQUFWOzs7Ozs7d0JBQ0UsSUFBSSxJQUFBLGlCQUFRLEVBQUMsdUJBQVksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUFFLHNCQUFPO3dCQUM5QyxJQUFJLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLE9BQU8sR0FBMkQsSUFBSSxFQUEvRCxFQUFFLFFBQVEsR0FBaUQsSUFBSSxTQUFyRCxFQUFFLE1BQU0sR0FBeUMsSUFBSSxPQUE3QyxFQUFrQixXQUFXLEdBQVksSUFBSSxnQkFBaEIsRUFBRSxLQUFLLEdBQUssSUFBSSxNQUFULENBQVU7d0JBQ2xGLElBQUksSUFBQSxnQkFBTyxFQUFDLE9BQU8sQ0FBQzs0QkFBRSxzQkFBTzt3QkFDdkIsR0FBRyxHQUFHLElBQUksbUJBQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDcEMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNFLHFCQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUE7O3dCQUFuRCxLQUF5QixTQUEwQixFQUFqRCxVQUFVLGdCQUFBLEVBQUUsTUFBTSxZQUFBO3dCQUNuQixxQkFBTSxXQUFXLENBQUM7Z0NBQ3ZCLEtBQUssRUFBRSxRQUFRO2dDQUNmLFVBQVUsWUFBQTtnQ0FDVixNQUFNLFFBQUE7Z0NBQ04sSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQ0FDM0IsVUFBVSxFQUFFO29DQUNWLE1BQU0sUUFBQTtvQ0FDTixXQUFXLGFBQUE7b0NBQ1gsS0FBSyxPQUFBO2lDQUNOOzZCQUNGLENBQUMsRUFBQTs0QkFWRixzQkFBTyxTQVVMLEVBQUM7Ozs7S0FDSjtJQUVLLGlDQUFTLEdBQWYsVUFBZ0IsSUFBSTs7Ozs7O3dCQUNQLE9BQU8sR0FBZSxJQUFJLEVBQW5CLEVBQUUsUUFBUSxHQUFLLElBQUksU0FBVCxDQUFVO3dCQUN4QixxQkFBTSxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUE7O3dCQUF2QyxLQUFLLEdBQUcsU0FBK0I7d0JBQzdDLElBQUksS0FBSyxFQUFFOzRCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsS0FBSyxDQUFDO3lCQUNyQzt3QkFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFOzRCQUN4QixzQkFBTztvQ0FDTCxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztpQ0FDbkIsRUFBQzt5QkFDSDs2QkFDRyxDQUFBLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFBLEVBQXBCLHdCQUFvQjt3QkFDTCxxQkFBTSxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUE7O3dCQUF0QyxRQUFRLEdBQUcsU0FBMkI7d0JBQ3RDLFlBQVksR0FBRyxJQUFBLGFBQUksRUFBQyxJQUFBLFlBQUcsRUFBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQzt3QkFDckQsc0JBQU8sSUFBQSxpQkFBUSxFQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ3ZDLENBQUMsQ0FBQztvQ0FDRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztvQ0FDdEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUNBQ25CO2dDQUNILENBQUMsQ0FBQztvQ0FDRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztpQ0FDbkIsRUFBQzs7Ozs7S0FFVDtJQUNILG9CQUFDO0FBQUQsQ0FBQyxBQWhERCxJQWdEQztBQUVELGtCQUFlLGFBQWEsQ0FBQyJ9
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BlY2lhbC1jb21tYWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBc0U7QUFDdEUsdURBQWlDO0FBQ2pDLDhDQUF3QjtBQUN4QixrQ0FBaUM7QUFDakMsaUNBQXNEO0FBRTlDLElBQUEsYUFBYSxHQUErQyxjQUFJLGNBQW5ELEVBQUUsV0FBVyxHQUFrQyxjQUFJLFlBQXRDLEVBQUUsY0FBYyxHQUFrQixjQUFJLGVBQXRCLEVBQUUsV0FBVyxHQUFLLGNBQUksWUFBVCxDQUFVO0FBRXpFO0lBQ0UsdUJBQW9CLE9BQXdCO1FBQXhCLFlBQU8sR0FBUCxPQUFPLENBQWlCO0lBQUcsQ0FBQztJQUMxQyw0QkFBSSxHQUFWOzs7Ozs7d0JBQ1EsSUFBSSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxPQUFPLEdBQXNFLElBQUksRUFBMUUsRUFBRSxRQUFRLEdBQTRELElBQUksU0FBaEUsRUFBRSxNQUFNLEdBQW9ELElBQUksT0FBeEQsRUFBa0IsV0FBVyxHQUF1QixJQUFJLGdCQUEzQixFQUFFLEtBQUssR0FBZ0IsSUFBSSxNQUFwQixFQUFFLEdBQUcsR0FBVyxJQUFJLElBQWYsRUFBRSxJQUFJLEdBQUssSUFBSSxLQUFULENBQVU7d0JBQzdGLElBQUksSUFBQSxnQkFBTyxFQUFDLE9BQU8sQ0FBQzs0QkFBRSxzQkFBTzt3QkFDdkIsR0FBRyxHQUFHLElBQUksbUJBQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDcEMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNTLHFC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