contensis-cli 1.0.0-beta.9 → 1.0.0-beta.91
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 +1146 -78
- package/cli.js +3 -0
- package/dist/commands/connect.js +3 -3
- package/dist/commands/connect.js.map +2 -2
- package/dist/commands/create.js +45 -10
- package/dist/commands/create.js.map +2 -2
- package/dist/commands/dev.js +75 -0
- package/dist/commands/dev.js.map +7 -0
- package/dist/commands/diff.js +57 -0
- package/dist/commands/diff.js.map +7 -0
- package/dist/commands/execute.js +103 -0
- package/dist/commands/execute.js.map +7 -0
- package/dist/commands/get.js +169 -32
- package/dist/commands/get.js.map +3 -3
- package/dist/commands/globalOptions.js +37 -12
- package/dist/commands/globalOptions.js.map +2 -2
- package/dist/commands/import.js +47 -12
- package/dist/commands/import.js.map +2 -2
- package/dist/commands/index.js +22 -2
- package/dist/commands/index.js.map +2 -2
- package/dist/commands/list.js +53 -10
- package/dist/commands/list.js.map +2 -2
- package/dist/commands/login.js +2 -2
- package/dist/commands/login.js.map +2 -2
- package/dist/commands/push.js +17 -13
- package/dist/commands/push.js.map +2 -2
- package/dist/commands/remove.js +51 -8
- package/dist/commands/remove.js.map +2 -2
- package/dist/commands/set.js +139 -12
- package/dist/commands/set.js.map +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +2 -2
- package/dist/localisation/en-GB.js +259 -49
- package/dist/localisation/en-GB.js.map +2 -2
- package/dist/mappers/ContensisCliService-to-RequestHanderSiteConfigYaml.js +56 -0
- package/dist/mappers/ContensisCliService-to-RequestHanderSiteConfigYaml.js.map +7 -0
- package/dist/mappers/DevInit-to-CIWorkflow.js +127 -0
- package/dist/mappers/DevInit-to-CIWorkflow.js.map +7 -0
- package/dist/mappers/DevInit-to-RolePermissions.js +54 -0
- package/dist/mappers/DevInit-to-RolePermissions.js.map +7 -0
- package/dist/mappers/DevRequests-to-RequestHanderSiteConfigYaml.js +56 -0
- package/dist/mappers/DevRequests-to-RequestHanderSiteConfigYaml.js.map +7 -0
- package/dist/models/CliService.d.js +17 -0
- package/dist/models/CliService.d.js.map +7 -0
- package/dist/models/DevService.d.js +17 -0
- package/dist/models/DevService.d.js.map +7 -0
- package/dist/providers/CredentialProvider.js +46 -14
- package/dist/providers/CredentialProvider.js.map +3 -3
- package/dist/providers/SessionCacheProvider.js +21 -1
- package/dist/providers/SessionCacheProvider.js.map +2 -2
- package/dist/providers/file-provider.js +12 -6
- package/dist/providers/file-provider.js.map +3 -3
- package/dist/services/ContensisCliService.js +1148 -421
- package/dist/services/ContensisCliService.js.map +3 -3
- package/dist/services/ContensisDevService.js +309 -0
- package/dist/services/ContensisDevService.js.map +7 -0
- package/dist/services/ContensisRoleService.js +87 -0
- package/dist/services/ContensisRoleService.js.map +7 -0
- package/dist/shell.js +58 -18
- package/dist/shell.js.map +3 -3
- package/dist/util/console.printer.js +171 -55
- package/dist/util/console.printer.js.map +2 -2
- package/dist/util/diff.js +102 -0
- package/dist/util/diff.js.map +7 -0
- package/dist/util/dotenv.js +57 -0
- package/dist/util/dotenv.js.map +7 -0
- package/dist/util/find.js +31 -0
- package/dist/util/find.js.map +7 -0
- package/dist/util/git.js +126 -0
- package/dist/util/git.js.map +7 -0
- package/dist/util/index.js +8 -2
- package/dist/util/index.js.map +3 -3
- package/dist/util/logger.js +90 -29
- package/dist/util/logger.js.map +3 -3
- package/dist/util/os.js +39 -0
- package/dist/util/os.js.map +7 -0
- package/dist/util/timers.js +49 -0
- package/dist/util/timers.js.map +7 -0
- package/dist/util/yaml.js +45 -0
- package/dist/util/yaml.js.map +7 -0
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/esbuild.config.js +3 -1
- package/package.json +12 -3
- package/src/commands/connect.ts +3 -2
- package/src/commands/create.ts +61 -8
- package/src/commands/dev.ts +69 -0
- package/src/commands/diff.ts +41 -0
- package/src/commands/execute.ts +117 -0
- package/src/commands/get.ts +242 -28
- package/src/commands/globalOptions.ts +42 -12
- package/src/commands/import.ts +58 -8
- package/src/commands/index.ts +22 -1
- package/src/commands/list.ts +85 -11
- package/src/commands/login.ts +2 -1
- package/src/commands/push.ts +18 -11
- package/src/commands/remove.ts +66 -4
- package/src/commands/set.ts +189 -9
- package/src/index.ts +1 -4
- package/src/localisation/en-GB.ts +374 -66
- package/src/mappers/ContensisCliService-to-RequestHanderSiteConfigYaml.ts +44 -0
- package/src/mappers/DevInit-to-CIWorkflow.ts +150 -0
- package/src/mappers/DevInit-to-RolePermissions.ts +33 -0
- package/src/mappers/DevRequests-to-RequestHanderSiteConfigYaml.ts +44 -0
- package/src/models/CliService.d.ts +36 -0
- package/src/models/DevService.d.ts +5 -0
- package/src/models/JsModules.d.ts +1 -0
- package/src/providers/CredentialProvider.ts +51 -18
- package/src/providers/SessionCacheProvider.ts +29 -2
- package/src/providers/file-provider.ts +17 -6
- package/src/services/ContensisCliService.ts +1458 -518
- package/src/services/ContensisDevService.ts +365 -0
- package/src/services/ContensisRoleService.ts +76 -0
- package/src/shell.ts +68 -18
- package/src/util/console.printer.ts +240 -78
- package/src/util/diff.ts +113 -0
- package/src/util/dotenv.ts +37 -0
- package/src/util/find.ts +8 -0
- package/src/util/git.ts +130 -0
- package/src/util/index.ts +16 -7
- package/src/util/logger.ts +145 -31
- package/src/util/os.ts +7 -0
- package/src/util/timers.ts +24 -0
- package/src/util/yaml.ts +13 -0
- package/src/version.ts +1 -1
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to2, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to2, key) && key !== except)
|
|
16
|
+
__defProp(to2, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to2;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
+
mod
|
|
23
|
+
));
|
|
24
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
25
|
+
var ContensisDevService_exports = {};
|
|
26
|
+
__export(ContensisDevService_exports, {
|
|
27
|
+
default: () => ContensisDevService_default,
|
|
28
|
+
devCommand: () => devCommand
|
|
29
|
+
});
|
|
30
|
+
module.exports = __toCommonJS(ContensisDevService_exports);
|
|
31
|
+
var import_await_to_js = __toESM(require("await-to-js"));
|
|
32
|
+
var import_child_process = require("child_process");
|
|
33
|
+
var import_inquirer = __toESM(require("inquirer"));
|
|
34
|
+
var import_path = __toESM(require("path"));
|
|
35
|
+
var import_yaml = require("yaml");
|
|
36
|
+
var import_ContensisRoleService = __toESM(require("./ContensisRoleService"));
|
|
37
|
+
var import_DevRequests_to_RequestHanderSiteConfigYaml = require("../mappers/DevRequests-to-RequestHanderSiteConfigYaml");
|
|
38
|
+
var import_DevInit_to_RolePermissions = require("../mappers/DevInit-to-RolePermissions");
|
|
39
|
+
var import_file_provider = require("../providers/file-provider");
|
|
40
|
+
var import_json = require("../util/json.formatter");
|
|
41
|
+
var import_git = require("../util/git");
|
|
42
|
+
var import_find = require("../util/find");
|
|
43
|
+
var import_dotenv = require("../util/dotenv");
|
|
44
|
+
var import_DevInit_to_CIWorkflow = require("../mappers/DevInit-to-CIWorkflow");
|
|
45
|
+
var import_diff = require("../util/diff");
|
|
46
|
+
class ContensisDev extends import_ContensisRoleService.default {
|
|
47
|
+
constructor(args, outputOpts, contensisOpts = {}) {
|
|
48
|
+
super(args, outputOpts, contensisOpts);
|
|
49
|
+
}
|
|
50
|
+
DevelopmentInit = async (projectHome, opts) => {
|
|
51
|
+
const { dryRun = false } = opts || {};
|
|
52
|
+
const { currentEnv, currentProject, log, messages } = this;
|
|
53
|
+
const contensis = await this.ConnectContensis();
|
|
54
|
+
if (contensis) {
|
|
55
|
+
const [keysErr, apiKeys] = await contensis.apiKeys.GetKeys();
|
|
56
|
+
if (keysErr) {
|
|
57
|
+
log.error(messages.keys.noList(currentEnv));
|
|
58
|
+
log.error((0, import_json.jsonFormatter)(keysErr));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const apiKeyExists = (findKey) => apiKeys == null ? void 0 : apiKeys.find(
|
|
62
|
+
(k) => k.name.trim().toLowerCase() === (findKey == null ? void 0 : findKey.trim().toLowerCase())
|
|
63
|
+
);
|
|
64
|
+
const git = new import_git.GitHelper(projectHome);
|
|
65
|
+
const workflowFiles = git.workflows;
|
|
66
|
+
let ciFileName = git.ciFileName;
|
|
67
|
+
const devKeyName = `${git.name} development`;
|
|
68
|
+
const devKeyDescription = `${git.name} [contensis-cli]`;
|
|
69
|
+
let existingDevKey = apiKeyExists(devKeyName);
|
|
70
|
+
const deployKeyName = `${git.name} deployment`;
|
|
71
|
+
const deployKeyDescription = `${git.name} deploy [contensis-cli]`;
|
|
72
|
+
let existingDeployKey = apiKeyExists(deployKeyName);
|
|
73
|
+
const blockId = git.name;
|
|
74
|
+
const errors = [];
|
|
75
|
+
log.raw("");
|
|
76
|
+
log.success(messages.devinit.intro());
|
|
77
|
+
log.raw("");
|
|
78
|
+
log.raw(
|
|
79
|
+
log.infoText(
|
|
80
|
+
messages.devinit.projectDetails(
|
|
81
|
+
git.name,
|
|
82
|
+
currentEnv,
|
|
83
|
+
currentProject,
|
|
84
|
+
git
|
|
85
|
+
)
|
|
86
|
+
)
|
|
87
|
+
);
|
|
88
|
+
log.raw(
|
|
89
|
+
log.infoText(
|
|
90
|
+
messages.devinit.developmentKey(devKeyName, !!existingDevKey)
|
|
91
|
+
)
|
|
92
|
+
);
|
|
93
|
+
log.raw(
|
|
94
|
+
log.infoText(
|
|
95
|
+
messages.devinit.deploymentKey(deployKeyName, !!existingDeployKey)
|
|
96
|
+
)
|
|
97
|
+
);
|
|
98
|
+
log.raw("");
|
|
99
|
+
if (Array.isArray(workflowFiles) && workflowFiles.length > 1) {
|
|
100
|
+
({ ciFileName } = await import_inquirer.default.prompt([
|
|
101
|
+
{
|
|
102
|
+
type: "list",
|
|
103
|
+
message: messages.devinit.ciMultipleChoices(),
|
|
104
|
+
name: "ciFileName",
|
|
105
|
+
choices: workflowFiles,
|
|
106
|
+
default: workflowFiles.find((f) => f.includes("docker"))
|
|
107
|
+
}
|
|
108
|
+
]));
|
|
109
|
+
log.raw("");
|
|
110
|
+
git.ciFileName = ciFileName;
|
|
111
|
+
}
|
|
112
|
+
log.raw(log.infoText(messages.devinit.ciDetails(ciFileName)));
|
|
113
|
+
const mappedWorkflow = (0, import_DevInit_to_CIWorkflow.mapCIWorkflowContent)(this, git);
|
|
114
|
+
log.help(messages.devinit.ciIntro(git));
|
|
115
|
+
if (!dryRun) {
|
|
116
|
+
const { confirm } = await import_inquirer.default.prompt([
|
|
117
|
+
{
|
|
118
|
+
type: "confirm",
|
|
119
|
+
message: messages.devinit.confirm(),
|
|
120
|
+
name: "confirm",
|
|
121
|
+
default: false
|
|
122
|
+
}
|
|
123
|
+
]);
|
|
124
|
+
log.raw("");
|
|
125
|
+
if (!confirm)
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const { accessToken } = await import_inquirer.default.prompt([
|
|
129
|
+
{
|
|
130
|
+
type: "input",
|
|
131
|
+
message: messages.devinit.accessTokenPrompt(),
|
|
132
|
+
name: "accessToken"
|
|
133
|
+
}
|
|
134
|
+
]);
|
|
135
|
+
log.raw("");
|
|
136
|
+
const checkpoint = (op) => {
|
|
137
|
+
if (errors.length)
|
|
138
|
+
throw errors[0];
|
|
139
|
+
else
|
|
140
|
+
log.debug(`${op} completed ok`);
|
|
141
|
+
return true;
|
|
142
|
+
};
|
|
143
|
+
const [getRolesErr, roles] = await (0, import_await_to_js.default)(contensis.roles.GetRoles());
|
|
144
|
+
if (!roles && getRolesErr)
|
|
145
|
+
errors.push(getRolesErr);
|
|
146
|
+
checkpoint(`fetched ${roles == null ? void 0 : roles.length} roles`);
|
|
147
|
+
if (dryRun) {
|
|
148
|
+
checkpoint(`skip api key creation (dry-run)`);
|
|
149
|
+
} else {
|
|
150
|
+
existingDevKey = await this.CreateOrUpdateApiKey(
|
|
151
|
+
existingDevKey,
|
|
152
|
+
devKeyName,
|
|
153
|
+
devKeyDescription
|
|
154
|
+
);
|
|
155
|
+
checkpoint("dev key created");
|
|
156
|
+
existingDeployKey = await this.CreateOrUpdateApiKey(
|
|
157
|
+
existingDeployKey,
|
|
158
|
+
deployKeyName,
|
|
159
|
+
deployKeyDescription
|
|
160
|
+
);
|
|
161
|
+
checkpoint("deploy key created");
|
|
162
|
+
let existingDevRole = (0, import_find.findByIdOrName)(roles || [], devKeyName, true);
|
|
163
|
+
existingDevRole = await this.CreateOrUpdateRole(
|
|
164
|
+
existingDevRole,
|
|
165
|
+
(0, import_DevInit_to_RolePermissions.devKeyRole)(devKeyName, devKeyDescription)
|
|
166
|
+
);
|
|
167
|
+
checkpoint("dev key role assigned");
|
|
168
|
+
log.success(messages.devinit.createDevKey(devKeyName, true));
|
|
169
|
+
let existingDeployRole = (0, import_find.findByIdOrName)(
|
|
170
|
+
roles || [],
|
|
171
|
+
deployKeyName,
|
|
172
|
+
true
|
|
173
|
+
);
|
|
174
|
+
existingDeployRole = await this.CreateOrUpdateRole(
|
|
175
|
+
existingDeployRole,
|
|
176
|
+
(0, import_DevInit_to_RolePermissions.deployKeyRole)(deployKeyName, deployKeyDescription)
|
|
177
|
+
);
|
|
178
|
+
checkpoint("deploy key role assigned");
|
|
179
|
+
log.success(messages.devinit.createDeployKey(deployKeyName, true));
|
|
180
|
+
checkpoint("api keys done");
|
|
181
|
+
}
|
|
182
|
+
const envContentsToAdd = {
|
|
183
|
+
ALIAS: currentEnv,
|
|
184
|
+
PROJECT: currentProject
|
|
185
|
+
};
|
|
186
|
+
if (accessToken)
|
|
187
|
+
envContentsToAdd["ACCESS_TOKEN"] = accessToken;
|
|
188
|
+
const envFilePath = `${projectHome}/.env`;
|
|
189
|
+
const existingEnvFile = (0, import_file_provider.readFile)(envFilePath);
|
|
190
|
+
const envFileLines = (0, import_dotenv.mergeDotEnvFileContents)(
|
|
191
|
+
(existingEnvFile || "").split("\n").filter((l) => !!l),
|
|
192
|
+
envContentsToAdd
|
|
193
|
+
);
|
|
194
|
+
const envDiff = (0, import_diff.diffFileContent)(
|
|
195
|
+
existingEnvFile || "",
|
|
196
|
+
envFileLines.join("\n")
|
|
197
|
+
);
|
|
198
|
+
if (dryRun) {
|
|
199
|
+
if (envDiff) {
|
|
200
|
+
log.info(`updating .env file ${envFilePath}: ${envDiff}`);
|
|
201
|
+
log.raw("");
|
|
202
|
+
}
|
|
203
|
+
checkpoint("skip .env file update (dry-run)");
|
|
204
|
+
} else {
|
|
205
|
+
if (envDiff)
|
|
206
|
+
log.info(`updating .env file ${envFilePath}`);
|
|
207
|
+
(0, import_file_provider.writeFile)(envFilePath, envFileLines.join("\n"));
|
|
208
|
+
checkpoint(".env file updated");
|
|
209
|
+
log.success(messages.devinit.writeEnvFile());
|
|
210
|
+
}
|
|
211
|
+
if (dryRun) {
|
|
212
|
+
if (mappedWorkflow == null ? void 0 : mappedWorkflow.diff) {
|
|
213
|
+
log.info(`updating${ciFileName} file: ${mappedWorkflow.diff}`);
|
|
214
|
+
log.raw("");
|
|
215
|
+
}
|
|
216
|
+
checkpoint("skip CI file update (dry-run)");
|
|
217
|
+
} else {
|
|
218
|
+
if (mappedWorkflow == null ? void 0 : mappedWorkflow.diff)
|
|
219
|
+
log.info(`updating${ciFileName} file`);
|
|
220
|
+
(0, import_file_provider.writeFile)(git.ciFilePath, [].join("\n"));
|
|
221
|
+
log.success(messages.devinit.writeCiFile(`./${ciFileName}`));
|
|
222
|
+
log.info(
|
|
223
|
+
messages.devinit.ciBlockTip(blockId, currentEnv, currentProject)
|
|
224
|
+
);
|
|
225
|
+
checkpoint("CI file updated");
|
|
226
|
+
}
|
|
227
|
+
log.warning(messages.devinit.addGitSecretsIntro());
|
|
228
|
+
log.help(
|
|
229
|
+
messages.devinit.addGitSecretsHelp(
|
|
230
|
+
git,
|
|
231
|
+
existingDeployKey == null ? void 0 : existingDeployKey.id,
|
|
232
|
+
existingDeployKey == null ? void 0 : existingDeployKey.sharedSecret
|
|
233
|
+
)
|
|
234
|
+
);
|
|
235
|
+
if (dryRun) {
|
|
236
|
+
log.success(messages.devinit.dryRun());
|
|
237
|
+
log.help(messages.devinit.noChanges());
|
|
238
|
+
} else {
|
|
239
|
+
log.success(messages.devinit.success());
|
|
240
|
+
log.help(messages.devinit.startProjectTip());
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
ExecRequestHandler = async (blockIds, overrideArgs) => {
|
|
245
|
+
var _a, _b;
|
|
246
|
+
const { log } = this;
|
|
247
|
+
const exeHome = import_path.default.join(import_file_provider.appRootDir, "reqhan");
|
|
248
|
+
const exe = "Zengenti.Contensis.RequestHandler.LocalDevelopment";
|
|
249
|
+
const exePath = import_path.default.join(exeHome, exe);
|
|
250
|
+
const siteConfigPath = import_path.default.join(import_file_provider.appRootDir, "site_config.yaml");
|
|
251
|
+
const siteConfig = await (0, import_DevRequests_to_RequestHanderSiteConfigYaml.mapSiteConfigYaml)(this);
|
|
252
|
+
(0, import_file_provider.writeFile)("site_config.yaml", (0, import_yaml.stringify)(siteConfig));
|
|
253
|
+
const args = overrideArgs ? typeof (overrideArgs == null ? void 0 : overrideArgs[0]) === "string" && overrideArgs[0].includes(" ", 2) ? overrideArgs[0].split(" ") : overrideArgs : [];
|
|
254
|
+
if (!args.find((a) => a === "-c"))
|
|
255
|
+
args.push("-c", siteConfigPath);
|
|
256
|
+
const child = (0, import_child_process.spawn)(exePath, args, { stdio: "inherit" });
|
|
257
|
+
log.info(`Launching request handler...`);
|
|
258
|
+
if (overrideArgs == null ? void 0 : overrideArgs.length)
|
|
259
|
+
this.log.warning(
|
|
260
|
+
`Spawning process with supplied args: ${JSON.stringify(
|
|
261
|
+
child.spawnargs,
|
|
262
|
+
null,
|
|
263
|
+
2
|
|
264
|
+
)}`
|
|
265
|
+
);
|
|
266
|
+
let isRunning = false;
|
|
267
|
+
(_a = child == null ? void 0 : child.stdout) == null ? void 0 : _a.on("data", (data) => {
|
|
268
|
+
isRunning = true;
|
|
269
|
+
log.raw(data);
|
|
270
|
+
});
|
|
271
|
+
(_b = child == null ? void 0 : child.stderr) == null ? void 0 : _b.on("data", (data) => {
|
|
272
|
+
log.error(data);
|
|
273
|
+
});
|
|
274
|
+
child.on("spawn", () => {
|
|
275
|
+
isRunning = true;
|
|
276
|
+
log.help(
|
|
277
|
+
`You may see a firewall popup requesting network access, it is safe to approve`
|
|
278
|
+
);
|
|
279
|
+
});
|
|
280
|
+
child.on("exit", (code) => {
|
|
281
|
+
isRunning = false;
|
|
282
|
+
log[code === 0 ? "success" : "warning"](
|
|
283
|
+
`Request handler exited with code ${code}
|
|
284
|
+
`
|
|
285
|
+
);
|
|
286
|
+
});
|
|
287
|
+
child.on("error", (error) => {
|
|
288
|
+
isRunning = false;
|
|
289
|
+
log.error(`Could not launch request handler due to error
|
|
290
|
+
${error}`);
|
|
291
|
+
});
|
|
292
|
+
await new Promise((resolve) => setTimeout(resolve, 2e3));
|
|
293
|
+
while (true) {
|
|
294
|
+
if (!isRunning) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
298
|
+
}
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
const devCommand = (commandArgs, outputOpts, contensisOpts = {}) => {
|
|
302
|
+
return new ContensisDev(["", "", ...commandArgs], outputOpts, contensisOpts);
|
|
303
|
+
};
|
|
304
|
+
var ContensisDevService_default = ContensisDev;
|
|
305
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
306
|
+
0 && (module.exports = {
|
|
307
|
+
devCommand
|
|
308
|
+
});
|
|
309
|
+
//# sourceMappingURL=ContensisDevService.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/services/ContensisDevService.ts"],
|
|
4
|
+
"sourcesContent": ["import to from 'await-to-js';\nimport { execFile, spawn } from 'child_process';\nimport inquirer from 'inquirer';\nimport path from 'path';\nimport { parse, stringify } from 'yaml';\n\nimport { Role } from 'contensis-management-api/lib/models';\nimport { MigrateRequest } from 'migratortron';\n\nimport ContensisRole from './ContensisRoleService';\nimport { OutputOptionsConstructorArg } from '~/models/CliService';\nimport { EnvContentsToAdd } from '~/models/DevService';\nimport { mapSiteConfigYaml } from '~/mappers/DevRequests-to-RequestHanderSiteConfigYaml';\nimport {\n deployKeyRole,\n devKeyRole,\n} from '~/mappers/DevInit-to-RolePermissions';\nimport { appRootDir, readFile, writeFile } from '~/providers/file-provider';\nimport { jsonFormatter } from '~/util/json.formatter';\nimport { GitHelper } from '~/util/git';\nimport { findByIdOrName } from '~/util/find';\nimport { mergeDotEnvFileContents } from '~/util/dotenv';\nimport { mapCIWorkflowContent } from '~/mappers/DevInit-to-CIWorkflow';\nimport { diffFileContent } from '~/util/diff';\n\nclass ContensisDev extends ContensisRole {\n constructor(\n args: string[],\n outputOpts?: OutputOptionsConstructorArg,\n contensisOpts: Partial<MigrateRequest> = {}\n ) {\n super(args, outputOpts, contensisOpts);\n }\n\n DevelopmentInit = async (projectHome: string, opts: any) => {\n const { dryRun = false } = opts || {};\n const { currentEnv, currentProject, log, messages } = this;\n const contensis = await this.ConnectContensis();\n\n if (contensis) {\n // Retrieve keys list for env\n const [keysErr, apiKeys] = await contensis.apiKeys.GetKeys();\n if (keysErr) {\n log.error(messages.keys.noList(currentEnv));\n log.error(jsonFormatter(keysErr));\n return;\n }\n const apiKeyExists = (findKey: string) =>\n apiKeys?.find(\n k => k.name.trim().toLowerCase() === findKey?.trim().toLowerCase()\n );\n\n // Retrieve git info\n const git = new GitHelper(projectHome);\n\n // Retrieve ci workflow info\n const workflowFiles = git.workflows;\n\n // Set variables for performing operations and logging etc.\n let ciFileName = git.ciFileName;\n\n const devKeyName = `${git.name} development`;\n const devKeyDescription = `${git.name} [contensis-cli]`;\n let existingDevKey = apiKeyExists(devKeyName);\n\n const deployKeyName = `${git.name} deployment`;\n const deployKeyDescription = `${git.name} deploy [contensis-cli]`;\n\n let existingDeployKey = apiKeyExists(deployKeyName);\n\n const blockId = git.name;\n const errors = [] as AppError[];\n\n // Start render console output\n log.raw('');\n log.success(messages.devinit.intro());\n log.raw('');\n log.raw(\n log.infoText(\n messages.devinit.projectDetails(\n git.name,\n currentEnv,\n currentProject,\n git\n )\n )\n );\n log.raw(\n log.infoText(\n messages.devinit.developmentKey(devKeyName, !!existingDevKey)\n )\n );\n log.raw(\n log.infoText(\n messages.devinit.deploymentKey(deployKeyName, !!existingDeployKey)\n )\n );\n log.raw('');\n\n if (Array.isArray(workflowFiles) && workflowFiles.length > 1) {\n // Choose GitHub workflow file (if multiple)\n ({ ciFileName } = await inquirer.prompt([\n {\n type: 'list',\n message: messages.devinit.ciMultipleChoices(),\n name: 'ciFileName',\n choices: workflowFiles,\n default: workflowFiles.find(f => f.includes('docker')),\n },\n ]));\n log.raw('');\n git.ciFileName = ciFileName;\n }\n\n log.raw(log.infoText(messages.devinit.ciDetails(ciFileName)));\n\n // Look at the workflow file content and make updates\n const mappedWorkflow = mapCIWorkflowContent(this, git);\n\n log.help(messages.devinit.ciIntro(git));\n\n if (!dryRun) {\n // Confirm prompt\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n message: messages.devinit.confirm(),\n name: 'confirm',\n default: false,\n },\n ]);\n log.raw('');\n if (!confirm) return;\n }\n\n // Access token prompt\n const { accessToken }: { accessToken: string } = await inquirer.prompt([\n {\n type: 'input',\n message: messages.devinit.accessTokenPrompt(),\n name: 'accessToken',\n },\n ]);\n log.raw('');\n\n // Magic happens...\n const checkpoint = (op: string) => {\n if (errors.length) throw errors[0];\n else log.debug(`${op} completed ok`);\n return true;\n };\n\n // Arrange API keys for development and deployment\n const [getRolesErr, roles] = await to(contensis.roles.GetRoles());\n if (!roles && getRolesErr) errors.push(getRolesErr);\n checkpoint(`fetched ${roles?.length} roles`);\n if (dryRun) {\n checkpoint(`skip api key creation (dry-run)`);\n } else {\n existingDevKey = await this.CreateOrUpdateApiKey(\n existingDevKey,\n devKeyName,\n devKeyDescription\n );\n checkpoint('dev key created');\n\n existingDeployKey = await this.CreateOrUpdateApiKey(\n existingDeployKey,\n deployKeyName,\n deployKeyDescription\n );\n checkpoint('deploy key created');\n\n // Ensure dev API key is assigned to a role\n let existingDevRole = findByIdOrName(roles || [], devKeyName, true) as\n | Role\n | undefined;\n existingDevRole = await this.CreateOrUpdateRole(\n existingDevRole,\n devKeyRole(devKeyName, devKeyDescription)\n );\n checkpoint('dev key role assigned');\n log.success(messages.devinit.createDevKey(devKeyName, true));\n\n // Ensure deploy API key is assigned to a role with the right permissions\n let existingDeployRole = findByIdOrName(\n roles || [],\n deployKeyName,\n true\n ) as Role | undefined;\n existingDeployRole = await this.CreateOrUpdateRole(\n existingDeployRole,\n deployKeyRole(deployKeyName, deployKeyDescription)\n );\n\n checkpoint('deploy key role assigned');\n log.success(messages.devinit.createDeployKey(deployKeyName, true));\n checkpoint('api keys done');\n }\n\n // Update or create a file called .env in project home\n const envContentsToAdd: EnvContentsToAdd = {\n ALIAS: currentEnv,\n PROJECT: currentProject,\n };\n if (accessToken) envContentsToAdd['ACCESS_TOKEN'] = accessToken;\n\n const envFilePath = `${projectHome}/.env`;\n const existingEnvFile = readFile(envFilePath);\n const envFileLines = mergeDotEnvFileContents(\n (existingEnvFile || '').split('\\n').filter(l => !!l),\n envContentsToAdd\n );\n const envDiff = diffFileContent(\n existingEnvFile || '',\n envFileLines.join('\\n')\n );\n\n if (dryRun) {\n if (envDiff) {\n log.info(`updating .env file ${envFilePath}: ${envDiff}`);\n log.raw('');\n }\n checkpoint('skip .env file update (dry-run)');\n } else {\n if (envDiff) log.info(`updating .env file ${envFilePath}`);\n writeFile(envFilePath, envFileLines.join('\\n'));\n checkpoint('.env file updated');\n log.success(messages.devinit.writeEnvFile());\n // log.help(messages.devinit.useEnvFileTip());\n }\n\n // Update CI file -- different for GH/GL -- create a sample one with build?\n if (dryRun) {\n if (mappedWorkflow?.diff) {\n log.info(`updating${ciFileName} file: ${mappedWorkflow.diff}`);\n log.raw('');\n }\n checkpoint('skip CI file update (dry-run)');\n //log.object(ciFileLines);\n } else {\n if (mappedWorkflow?.diff) log.info(`updating${ciFileName} file`);\n writeFile(git.ciFilePath, [].join('\\n'));\n log.success(messages.devinit.writeCiFile(`./${ciFileName}`));\n log.info(\n messages.devinit.ciBlockTip(blockId, currentEnv, currentProject)\n );\n checkpoint('CI file updated');\n }\n\n // Echo Deployment API key to console, ask user to add secrets to repo\n log.warning(messages.devinit.addGitSecretsIntro());\n log.help(\n messages.devinit.addGitSecretsHelp(\n git,\n existingDeployKey?.id,\n existingDeployKey?.sharedSecret\n )\n );\n\n if (dryRun) {\n log.success(messages.devinit.dryRun());\n log.help(messages.devinit.noChanges());\n } else {\n log.success(messages.devinit.success());\n log.help(messages.devinit.startProjectTip());\n }\n }\n };\n\n ExecRequestHandler = async (blockIds: string[], overrideArgs?: string[]) => {\n // if no request handler exe\n // download it.\n\n // if update arg, redownload it\n\n const { log } = this;\n // const getPrefixOld = log.getPrefix;\n const exeHome = path.join(appRootDir, 'reqhan');\n const exe = 'Zengenti.Contensis.RequestHandler.LocalDevelopment';\n const exePath = path.join(exeHome, exe);\n const siteConfigPath = path.join(appRootDir, 'site_config.yaml');\n\n const siteConfig = await mapSiteConfigYaml(this);\n writeFile('site_config.yaml', stringify(siteConfig));\n\n const args = overrideArgs\n ? typeof overrideArgs?.[0] === 'string' &&\n overrideArgs[0].includes(' ', 2)\n ? overrideArgs[0].split(' ')\n : overrideArgs\n : []; // args could be [ '-c .\\\\site_config.yaml' ] or [ '-c', '.\\\\site_config.yaml' ]\n\n // Add required args\n if (!args.find(a => a === '-c')) args.push('-c', siteConfigPath);\n\n // const child = execFile(exePath, args);\n\n const child = spawn(exePath, args, { stdio: 'inherit' });\n\n // log.raw('');\n log.info(`Launching request handler...`);\n if (overrideArgs?.length)\n this.log.warning(\n `Spawning process with supplied args: ${JSON.stringify(\n child.spawnargs,\n null,\n 2\n )}`\n );\n\n let isRunning = false;\n\n // Log child output through event listeners\n child?.stdout?.on('data', data => {\n isRunning = true;\n log.raw(data);\n });\n\n child?.stderr?.on('data', data => {\n log.error(data);\n });\n\n child.on('spawn', () => {\n isRunning = true;\n log.help(\n `You may see a firewall popup requesting network access, it is safe to approve`\n );\n // log.getPrefix = () => Logger.infoText(`[rqh]`);\n });\n\n child.on('exit', code => {\n isRunning = false;\n\n log[code === 0 ? 'success' : 'warning'](\n `Request handler exited with code ${code}\\n`\n );\n });\n\n child.on('error', error => {\n isRunning = false;\n log.error(`Could not launch request handler due to error \\n${error}`);\n });\n\n await new Promise(resolve => setTimeout(resolve, 2000));\n\n // keep the method running until we can return\n while (true === true) {\n if (!isRunning) {\n // log.getPrefix = getPrefixOld; // restore logger state\n return;\n }\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n };\n}\nexport const devCommand = (\n commandArgs: string[],\n outputOpts: OutputOptionsConstructorArg,\n contensisOpts: Partial<MigrateRequest> = {}\n) => {\n return new ContensisDev(['', '', ...commandArgs], outputOpts, contensisOpts);\n};\n\nexport default ContensisDev;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ContensisRole", "inquirer", "to", "path"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
+
mod
|
|
23
|
+
));
|
|
24
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
25
|
+
var ContensisRoleService_exports = {};
|
|
26
|
+
__export(ContensisRoleService_exports, {
|
|
27
|
+
default: () => ContensisRoleService_default
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(ContensisRoleService_exports);
|
|
30
|
+
var import_ContensisCliService = __toESM(require("./ContensisCliService"));
|
|
31
|
+
class ContensisRole extends import_ContensisCliService.default {
|
|
32
|
+
constructor(args, outputOpts, contensisOpts = {}) {
|
|
33
|
+
super(args, outputOpts, contensisOpts);
|
|
34
|
+
}
|
|
35
|
+
CreateOrUpdateApiKey = async (existingKey, name, description) => {
|
|
36
|
+
const { contensis, currentEnv, messages } = this;
|
|
37
|
+
if (!contensis)
|
|
38
|
+
throw new Error("shouldnt be here");
|
|
39
|
+
if (existingKey) {
|
|
40
|
+
const [err, key] = await contensis.apiKeys.UpdateKey(existingKey.id, {
|
|
41
|
+
name,
|
|
42
|
+
description
|
|
43
|
+
});
|
|
44
|
+
if (err)
|
|
45
|
+
throw new Error(messages.keys.failedUpdate(currentEnv, name), {
|
|
46
|
+
cause: err
|
|
47
|
+
});
|
|
48
|
+
return key;
|
|
49
|
+
} else {
|
|
50
|
+
const [err, key] = await contensis.apiKeys.CreateKey(name, description);
|
|
51
|
+
if (err)
|
|
52
|
+
throw new Error(messages.keys.failedCreate(currentEnv, name), {
|
|
53
|
+
cause: err
|
|
54
|
+
});
|
|
55
|
+
return key;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
CreateOrUpdateRole = async (existingRole, role) => {
|
|
59
|
+
const { contensis, currentEnv, messages } = this;
|
|
60
|
+
if (!contensis)
|
|
61
|
+
throw new Error("shouldnt be here");
|
|
62
|
+
if (existingRole) {
|
|
63
|
+
const [err, updated] = await contensis.roles.UpdateRole(existingRole.id, {
|
|
64
|
+
...existingRole,
|
|
65
|
+
...role
|
|
66
|
+
});
|
|
67
|
+
if (err)
|
|
68
|
+
throw new Error(messages.roles.failedSet(currentEnv, role.name), {
|
|
69
|
+
cause: err
|
|
70
|
+
});
|
|
71
|
+
return updated;
|
|
72
|
+
} else {
|
|
73
|
+
const [err, created] = await contensis.roles.CreateRole(
|
|
74
|
+
role
|
|
75
|
+
);
|
|
76
|
+
if (err)
|
|
77
|
+
throw new Error(messages.roles.failedCreate(currentEnv, role.name), {
|
|
78
|
+
cause: err
|
|
79
|
+
});
|
|
80
|
+
return created;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
var ContensisRoleService_default = ContensisRole;
|
|
85
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
86
|
+
0 && (module.exports = {});
|
|
87
|
+
//# sourceMappingURL=ContensisRoleService.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/services/ContensisRoleService.ts"],
|
|
4
|
+
"sourcesContent": ["import { Role } from 'contensis-management-api/lib/models';\nimport { ApiKey, MigrateRequest } from 'migratortron';\n\nimport ContensisCli from './ContensisCliService';\nimport { OutputOptionsConstructorArg } from '~/models/CliService';\n\nclass ContensisRole extends ContensisCli {\n constructor(\n args: string[],\n outputOpts?: OutputOptionsConstructorArg,\n contensisOpts: Partial<MigrateRequest> = {}\n ) {\n super(args, outputOpts, contensisOpts);\n }\n\n CreateOrUpdateApiKey = async (\n existingKey: ApiKey | undefined,\n name: string,\n description: string\n ) => {\n const { contensis, currentEnv, messages } = this;\n if (!contensis) throw new Error('shouldnt be here');\n if (existingKey) {\n const [err, key] = await contensis.apiKeys.UpdateKey(existingKey.id, {\n name,\n description,\n });\n\n if (err)\n throw new Error(messages.keys.failedUpdate(currentEnv, name), {\n cause: err,\n });\n return key;\n } else {\n const [err, key] = await contensis.apiKeys.CreateKey(name, description);\n if (err)\n throw new Error(messages.keys.failedCreate(currentEnv, name), {\n cause: err,\n });\n\n return key;\n }\n };\n\n CreateOrUpdateRole = async (\n existingRole: Role | undefined,\n role: Partial<Role>\n ) => {\n const { contensis, currentEnv, messages } = this;\n if (!contensis) throw new Error('shouldnt be here');\n\n if (existingRole) {\n // TODO: check is update needed?\n const [err, updated] = await contensis.roles.UpdateRole(existingRole.id, {\n ...existingRole,\n ...role,\n });\n if (err)\n throw new Error(messages.roles.failedSet(currentEnv, role.name), {\n cause: err,\n });\n return updated;\n } else {\n const [err, created] = await contensis.roles.CreateRole(\n role as Omit<Role, 'id'>\n );\n if (err)\n throw new Error(messages.roles.failedCreate(currentEnv, role.name), {\n cause: err,\n });\n\n return created;\n }\n };\n}\nexport default ContensisRole;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,iCAAyB;AAGzB,MAAM,sBAAsB,2BAAAA,QAAa;AAAA,EACvC,YACE,MACA,YACA,gBAAyC,CAAC,GAC1C;AACA,UAAM,MAAM,YAAY,aAAa;AAAA,EACvC;AAAA,EAEA,uBAAuB,OACrB,aACA,MACA,gBACG;AACH,UAAM,EAAE,WAAW,YAAY,SAAS,IAAI;AAC5C,QAAI,CAAC;AAAW,YAAM,IAAI,MAAM,kBAAkB;AAClD,QAAI,aAAa;AACf,YAAM,CAAC,KAAK,GAAG,IAAI,MAAM,UAAU,QAAQ,UAAU,YAAY,IAAI;AAAA,QACnE;AAAA,QACA;AAAA,MACF,CAAC;AAED,UAAI;AACF,cAAM,IAAI,MAAM,SAAS,KAAK,aAAa,YAAY,IAAI,GAAG;AAAA,UAC5D,OAAO;AAAA,QACT,CAAC;AACH,aAAO;AAAA,IACT,OAAO;AACL,YAAM,CAAC,KAAK,GAAG,IAAI,MAAM,UAAU,QAAQ,UAAU,MAAM,WAAW;AACtE,UAAI;AACF,cAAM,IAAI,MAAM,SAAS,KAAK,aAAa,YAAY,IAAI,GAAG;AAAA,UAC5D,OAAO;AAAA,QACT,CAAC;AAEH,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,qBAAqB,OACnB,cACA,SACG;AACH,UAAM,EAAE,WAAW,YAAY,SAAS,IAAI;AAC5C,QAAI,CAAC;AAAW,YAAM,IAAI,MAAM,kBAAkB;AAElD,QAAI,cAAc;AAEhB,YAAM,CAAC,KAAK,OAAO,IAAI,MAAM,UAAU,MAAM,WAAW,aAAa,IAAI;AAAA,QACvE,GAAG;AAAA,QACH,GAAG;AAAA,MACL,CAAC;AACD,UAAI;AACF,cAAM,IAAI,MAAM,SAAS,MAAM,UAAU,YAAY,KAAK,IAAI,GAAG;AAAA,UAC/D,OAAO;AAAA,QACT,CAAC;AACH,aAAO;AAAA,IACT,OAAO;AACL,YAAM,CAAC,KAAK,OAAO,IAAI,MAAM,UAAU,MAAM;AAAA,QAC3C;AAAA,MACF;AACA,UAAI;AACF,cAAM,IAAI,MAAM,SAAS,MAAM,aAAa,YAAY,KAAK,IAAI,GAAG;AAAA,UAClE,OAAO;AAAA,QACT,CAAC;AAEH,aAAO;AAAA,IACT;AAAA,EACF;AACF;AACA,IAAO,+BAAQ;",
|
|
6
|
+
"names": ["ContensisCli"]
|
|
7
|
+
}
|
package/dist/shell.js
CHANGED
|
@@ -27,16 +27,17 @@ __export(shell_exports, {
|
|
|
27
27
|
shell: () => shell
|
|
28
28
|
});
|
|
29
29
|
module.exports = __toCommonJS(shell_exports);
|
|
30
|
-
var import_path = __toESM(require("path"));
|
|
31
30
|
var import_figlet = __toESM(require("figlet"));
|
|
32
31
|
var import_inquirer = __toESM(require("inquirer"));
|
|
33
32
|
var import_inquirer_command_prompt = __toESM(require("inquirer-command-prompt"));
|
|
34
33
|
var import_commands = __toESM(require("./commands"));
|
|
35
34
|
var import_en_GB = require("./localisation/en-GB");
|
|
36
|
-
var import_logger = require("./util/logger");
|
|
37
35
|
var import_CredentialProvider = __toESM(require("./providers/CredentialProvider"));
|
|
36
|
+
var import_file_provider = require("./providers/file-provider");
|
|
38
37
|
var import_ContensisCliService = __toESM(require("./services/ContensisCliService"));
|
|
39
38
|
var import_util = require("./util");
|
|
39
|
+
var import_logger = require("./util/logger");
|
|
40
|
+
var import_version = require("./version");
|
|
40
41
|
class ContensisShell {
|
|
41
42
|
currentEnvironment;
|
|
42
43
|
emptyInputCounter = 0;
|
|
@@ -61,7 +62,7 @@ class ContensisShell {
|
|
|
61
62
|
import_inquirer_command_prompt.default.setConfig({
|
|
62
63
|
history: {
|
|
63
64
|
save: true,
|
|
64
|
-
folder:
|
|
65
|
+
folder: import_file_provider.appRootDir,
|
|
65
66
|
limit: 100,
|
|
66
67
|
blacklist: ["quit"]
|
|
67
68
|
}
|
|
@@ -83,14 +84,18 @@ class ContensisShell {
|
|
|
83
84
|
return;
|
|
84
85
|
}
|
|
85
86
|
console.log(log.successText(data));
|
|
86
|
-
console.log(log.infoText(messages.app.startup()));
|
|
87
|
+
console.log(log.infoText(messages.app.startup(import_version.LIB_VERSION)));
|
|
87
88
|
console.log(log.helpText(messages.app.help()));
|
|
88
89
|
this.start().catch((ex) => log.error(ex));
|
|
89
90
|
}
|
|
90
91
|
);
|
|
91
92
|
}
|
|
92
|
-
|
|
93
|
+
restart = async () => {
|
|
94
|
+
this.firstStart = false;
|
|
93
95
|
this.log.line();
|
|
96
|
+
await this.start();
|
|
97
|
+
};
|
|
98
|
+
start = async () => {
|
|
94
99
|
this.refreshEnvironment();
|
|
95
100
|
this.userId = "";
|
|
96
101
|
const { currentEnvironment, env, log, messages } = this;
|
|
@@ -114,8 +119,11 @@ class ContensisShell {
|
|
|
114
119
|
silent: true
|
|
115
120
|
}
|
|
116
121
|
);
|
|
117
|
-
if (token)
|
|
122
|
+
if (token) {
|
|
118
123
|
this.userId = env.lastUserId;
|
|
124
|
+
if (!env.currentProject)
|
|
125
|
+
log.warning(messages.projects.tip());
|
|
126
|
+
}
|
|
119
127
|
this.firstStart = false;
|
|
120
128
|
this.refreshEnvironment();
|
|
121
129
|
} else {
|
|
@@ -141,26 +149,52 @@ class ContensisShell {
|
|
|
141
149
|
availableCommands.push("login", "list projects", "set project");
|
|
142
150
|
if (userId)
|
|
143
151
|
availableCommands.push(
|
|
152
|
+
"create key",
|
|
153
|
+
"create project",
|
|
154
|
+
"create role",
|
|
155
|
+
"diff models",
|
|
156
|
+
"execute block action release",
|
|
157
|
+
"execute block action makelive",
|
|
158
|
+
"execute block action rollback",
|
|
159
|
+
"execute block action markasbroken",
|
|
144
160
|
"get block",
|
|
145
161
|
"get block logs",
|
|
146
162
|
"get contenttype",
|
|
147
163
|
"get component",
|
|
148
164
|
"get entries",
|
|
165
|
+
"get nodes",
|
|
166
|
+
"get model",
|
|
167
|
+
"get project",
|
|
168
|
+
"get role",
|
|
169
|
+
"get token",
|
|
170
|
+
"get version",
|
|
171
|
+
"get webhook",
|
|
149
172
|
"import contenttypes",
|
|
150
173
|
"import components",
|
|
151
174
|
"import entries",
|
|
175
|
+
"import models",
|
|
152
176
|
"list blocks",
|
|
153
177
|
"list contenttypes",
|
|
154
178
|
"list components",
|
|
155
|
-
"list models",
|
|
156
179
|
"list keys",
|
|
180
|
+
"list models",
|
|
181
|
+
"list proxies",
|
|
182
|
+
"list renderers",
|
|
183
|
+
"list roles",
|
|
157
184
|
"list webhooks",
|
|
158
|
-
"create key",
|
|
159
185
|
"push block",
|
|
160
|
-
"remove
|
|
161
|
-
"remove entry",
|
|
186
|
+
"remove components",
|
|
162
187
|
"remove contenttypes",
|
|
163
|
-
"remove
|
|
188
|
+
"remove key",
|
|
189
|
+
"remove entries",
|
|
190
|
+
"remove role",
|
|
191
|
+
"set project name",
|
|
192
|
+
"set project description",
|
|
193
|
+
"set role name",
|
|
194
|
+
"set role description",
|
|
195
|
+
"set role assignments",
|
|
196
|
+
"set role enabled",
|
|
197
|
+
"set role permissions"
|
|
164
198
|
);
|
|
165
199
|
const prompt = import_inquirer.default.createPromptModule();
|
|
166
200
|
prompt.registerPrompt("command", import_inquirer_command_prompt.default);
|
|
@@ -168,7 +202,7 @@ class ContensisShell {
|
|
|
168
202
|
{
|
|
169
203
|
type: "command",
|
|
170
204
|
name: "cmd",
|
|
171
|
-
autoCompletion: availableCommands,
|
|
205
|
+
autoCompletion: availableCommands.sort(),
|
|
172
206
|
autocompletePrompt: log.infoText(messages.app.autocomplete()),
|
|
173
207
|
message: `${userId ? `${userId}@` : ""}${currentEnvironment || ""}>`,
|
|
174
208
|
context: 0,
|
|
@@ -182,7 +216,7 @@ class ContensisShell {
|
|
|
182
216
|
return true;
|
|
183
217
|
}
|
|
184
218
|
},
|
|
185
|
-
prefix: `${(env == null ? void 0 : env.currentProject) || "contensis"}`,
|
|
219
|
+
prefix: `${(env == null ? void 0 : env.currentProject) || log.infoText("contensis")}`,
|
|
186
220
|
short: true
|
|
187
221
|
}
|
|
188
222
|
]).then(async (answers) => {
|
|
@@ -203,7 +237,10 @@ class ContensisShell {
|
|
|
203
237
|
} catch (ex) {
|
|
204
238
|
const str = ex.toString();
|
|
205
239
|
if (!str.includes("CommanderError"))
|
|
206
|
-
(0, import_logger.logError)(
|
|
240
|
+
(0, import_logger.logError)(
|
|
241
|
+
ex,
|
|
242
|
+
`Shell ${ex instanceof Error ? ex.toString() : JSON.stringify(ex, null, 2)}`
|
|
243
|
+
);
|
|
207
244
|
} finally {
|
|
208
245
|
return this.contensisPrompt();
|
|
209
246
|
}
|
|
@@ -230,8 +267,11 @@ let globalShell;
|
|
|
230
267
|
const shell = () => {
|
|
231
268
|
var _a;
|
|
232
269
|
if (typeof ((_a = process.argv) == null ? void 0 : _a[2]) !== "undefined")
|
|
233
|
-
return {
|
|
234
|
-
|
|
270
|
+
return {
|
|
271
|
+
quit: import_ContensisCliService.default.quit,
|
|
272
|
+
restart() {
|
|
273
|
+
}
|
|
274
|
+
};
|
|
235
275
|
if (!globalShell)
|
|
236
276
|
globalShell = new ContensisShell();
|
|
237
277
|
return globalShell;
|
|
@@ -240,11 +280,11 @@ process.on("uncaughtException", function(err) {
|
|
|
240
280
|
console.log(err);
|
|
241
281
|
});
|
|
242
282
|
process.on("SIGINT", () => {
|
|
243
|
-
|
|
283
|
+
import_logger.Logger.warning("received SIGINT");
|
|
244
284
|
shell().quit();
|
|
245
285
|
});
|
|
246
286
|
process.on("SIGTERM", () => {
|
|
247
|
-
|
|
287
|
+
import_logger.Logger.warning("received SIGTERM");
|
|
248
288
|
shell().quit();
|
|
249
289
|
});
|
|
250
290
|
process.stdin.on("data", (key) => {
|