contensis-cli 1.0.0-beta.82 → 1.0.0-beta.84
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/dist/commands/dev.js +68 -0
- package/dist/commands/dev.js.map +7 -0
- package/dist/commands/index.js +6 -0
- package/dist/commands/index.js.map +2 -2
- package/dist/localisation/en-GB.js +52 -0
- package/dist/localisation/en-GB.js.map +2 -2
- package/dist/providers/file-provider.js +4 -2
- package/dist/providers/file-provider.js.map +2 -2
- package/dist/services/ContensisCliService.js +10 -8
- package/dist/services/ContensisCliService.js.map +2 -2
- package/dist/services/ContensisDevService.js +203 -0
- package/dist/services/ContensisDevService.js.map +7 -0
- package/dist/shell.js +7 -5
- package/dist/shell.js.map +2 -2
- package/dist/util/git.js +119 -0
- package/dist/util/git.js.map +7 -0
- package/dist/util/os.js +39 -0
- package/dist/util/os.js.map +7 -0
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +8 -2
- package/src/commands/dev.ts +59 -0
- package/src/commands/index.ts +6 -0
- package/src/localisation/en-GB.ts +85 -0
- package/src/models/JsModules.d.ts +1 -0
- package/src/providers/file-provider.ts +5 -2
- package/src/services/ContensisCliService.ts +47 -22
- package/src/services/ContensisDevService.ts +243 -0
- package/src/shell.ts +8 -3
- package/src/util/git.ts +118 -0
- package/src/util/os.ts +7 -0
- package/src/version.ts +1 -1
|
@@ -0,0 +1,203 @@
|
|
|
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 ContensisDevService_exports = {};
|
|
26
|
+
__export(ContensisDevService_exports, {
|
|
27
|
+
default: () => ContensisDevService_default,
|
|
28
|
+
devCommand: () => devCommand
|
|
29
|
+
});
|
|
30
|
+
module.exports = __toCommonJS(ContensisDevService_exports);
|
|
31
|
+
var import_child_process = require("child_process");
|
|
32
|
+
var import_inquirer = __toESM(require("inquirer"));
|
|
33
|
+
var import_path = __toESM(require("path"));
|
|
34
|
+
var import_yaml = require("yaml");
|
|
35
|
+
var import_ContensisCliService = __toESM(require("./ContensisCliService"));
|
|
36
|
+
var import_ContensisCliService_to_RequestHanderSiteConfigYaml = require("~/mappers/ContensisCliService-to-RequestHanderSiteConfigYaml");
|
|
37
|
+
var import_file_provider = require("../providers/file-provider");
|
|
38
|
+
var import_json = require("../util/json.formatter");
|
|
39
|
+
var import_git = require("../util/git");
|
|
40
|
+
class ContensisDev extends import_ContensisCliService.default {
|
|
41
|
+
constructor(args, outputOpts, contensisOpts = {}) {
|
|
42
|
+
super(args, outputOpts, contensisOpts);
|
|
43
|
+
}
|
|
44
|
+
DevelopmentInit = async (projectHome, opts) => {
|
|
45
|
+
const { currentEnv, currentProject, log, messages } = this;
|
|
46
|
+
const contensis = await this.ConnectContensis();
|
|
47
|
+
if (contensis) {
|
|
48
|
+
const [keysErr, apiKeys] = await contensis.apiKeys.GetKeys();
|
|
49
|
+
if (keysErr) {
|
|
50
|
+
log.error(messages.keys.noList(currentEnv));
|
|
51
|
+
log.error((0, import_json.jsonFormatter)(keysErr));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const apiKeyExists = (findKey) => apiKeys == null ? void 0 : apiKeys.find(
|
|
55
|
+
(k) => k.name.trim().toLowerCase() === (findKey == null ? void 0 : findKey.trim().toLowerCase())
|
|
56
|
+
);
|
|
57
|
+
const git = new import_git.GitHelper(projectHome);
|
|
58
|
+
const workflowFiles = git.workflows;
|
|
59
|
+
let ciFileName = git.ciFileName;
|
|
60
|
+
const devKey = `${git.name} development`;
|
|
61
|
+
const deployKey = `${git.name} deployment`;
|
|
62
|
+
const blockId = git.name;
|
|
63
|
+
log.raw("");
|
|
64
|
+
log.success(messages.devinit.intro());
|
|
65
|
+
log.raw("");
|
|
66
|
+
log.raw(
|
|
67
|
+
log.infoText(
|
|
68
|
+
messages.devinit.projectDetails(
|
|
69
|
+
git.name,
|
|
70
|
+
currentEnv,
|
|
71
|
+
currentProject,
|
|
72
|
+
git
|
|
73
|
+
)
|
|
74
|
+
)
|
|
75
|
+
);
|
|
76
|
+
log.raw(
|
|
77
|
+
log.infoText(
|
|
78
|
+
messages.devinit.developmentKey(devKey, !!apiKeyExists(devKey))
|
|
79
|
+
)
|
|
80
|
+
);
|
|
81
|
+
log.raw(
|
|
82
|
+
log.infoText(
|
|
83
|
+
messages.devinit.deploymentKey(deployKey, !!apiKeyExists(deployKey))
|
|
84
|
+
)
|
|
85
|
+
);
|
|
86
|
+
log.raw("");
|
|
87
|
+
if (Array.isArray(workflowFiles) && workflowFiles.length > 1) {
|
|
88
|
+
({ ciFileName } = await import_inquirer.default.prompt([
|
|
89
|
+
{
|
|
90
|
+
type: "list",
|
|
91
|
+
message: `Multiple GitHub workflow files found
|
|
92
|
+
${log.infoText(
|
|
93
|
+
`Tell us which GitHub workflow builds the container image after each push:`
|
|
94
|
+
)}`,
|
|
95
|
+
name: "ciFileName",
|
|
96
|
+
choices: workflowFiles,
|
|
97
|
+
default: workflowFiles.find((f) => f.includes("docker"))
|
|
98
|
+
}
|
|
99
|
+
]));
|
|
100
|
+
log.raw("");
|
|
101
|
+
}
|
|
102
|
+
log.raw(log.infoText(messages.devinit.ciDetails(ciFileName)));
|
|
103
|
+
log.help(messages.devinit.ciIntro(git));
|
|
104
|
+
const { confirm } = await import_inquirer.default.prompt([
|
|
105
|
+
{
|
|
106
|
+
type: "confirm",
|
|
107
|
+
message: messages.devinit.confirm(),
|
|
108
|
+
name: "confirm",
|
|
109
|
+
default: false
|
|
110
|
+
}
|
|
111
|
+
]);
|
|
112
|
+
log.raw("");
|
|
113
|
+
if (!confirm)
|
|
114
|
+
return;
|
|
115
|
+
const { accessToken } = await import_inquirer.default.prompt([
|
|
116
|
+
{
|
|
117
|
+
type: "input",
|
|
118
|
+
message: messages.devinit.accessTokenPrompt(),
|
|
119
|
+
name: "accessToken"
|
|
120
|
+
}
|
|
121
|
+
]);
|
|
122
|
+
log.raw("");
|
|
123
|
+
log.success(messages.devinit.createDevKey(devKey, false));
|
|
124
|
+
log.success(messages.devinit.createDeployKey(deployKey, true));
|
|
125
|
+
log.success(messages.devinit.writeEnvFile());
|
|
126
|
+
log.success(messages.devinit.writeCiFile(`./${ciFileName}`));
|
|
127
|
+
log.info(
|
|
128
|
+
messages.devinit.ciBlockTip(blockId, currentEnv, currentProject)
|
|
129
|
+
);
|
|
130
|
+
log.warning(messages.devinit.addGitSecretsIntro());
|
|
131
|
+
log.help(
|
|
132
|
+
messages.devinit.addGitSecretsHelp(git, "123-456", "789-012-345")
|
|
133
|
+
);
|
|
134
|
+
log.success(messages.devinit.success());
|
|
135
|
+
log.help(messages.devinit.startProjectTip());
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
ExecRequestHandler = async (blockIds, overrideArgs) => {
|
|
139
|
+
var _a, _b;
|
|
140
|
+
const { log } = this;
|
|
141
|
+
const exeHome = import_path.default.join(import_file_provider.appRootDir, "reqhan");
|
|
142
|
+
const exe = "Zengenti.Contensis.RequestHandler.LocalDevelopment";
|
|
143
|
+
const exePath = import_path.default.join(exeHome, exe);
|
|
144
|
+
const siteConfigPath = import_path.default.join(import_file_provider.appRootDir, "site_config.yaml");
|
|
145
|
+
const siteConfig = await (0, import_ContensisCliService_to_RequestHanderSiteConfigYaml.mapSiteConfigYaml)(this);
|
|
146
|
+
(0, import_file_provider.writeFile)("site_config.yaml", (0, import_yaml.stringify)(siteConfig));
|
|
147
|
+
const args = overrideArgs ? typeof (overrideArgs == null ? void 0 : overrideArgs[0]) === "string" && overrideArgs[0].includes(" ", 2) ? overrideArgs[0].split(" ") : overrideArgs : [];
|
|
148
|
+
if (!args.find((a) => a === "-c"))
|
|
149
|
+
args.push("-c", siteConfigPath);
|
|
150
|
+
const child = (0, import_child_process.spawn)(exePath, args, { stdio: "inherit" });
|
|
151
|
+
log.info(`Launching request handler...`);
|
|
152
|
+
if (overrideArgs == null ? void 0 : overrideArgs.length)
|
|
153
|
+
this.log.warning(
|
|
154
|
+
`Spawning process with supplied args: ${JSON.stringify(
|
|
155
|
+
child.spawnargs,
|
|
156
|
+
null,
|
|
157
|
+
2
|
|
158
|
+
)}`
|
|
159
|
+
);
|
|
160
|
+
let isRunning = false;
|
|
161
|
+
(_a = child == null ? void 0 : child.stdout) == null ? void 0 : _a.on("data", (data) => {
|
|
162
|
+
isRunning = true;
|
|
163
|
+
log.raw(data);
|
|
164
|
+
});
|
|
165
|
+
(_b = child == null ? void 0 : child.stderr) == null ? void 0 : _b.on("data", (data) => {
|
|
166
|
+
log.error(data);
|
|
167
|
+
});
|
|
168
|
+
child.on("spawn", () => {
|
|
169
|
+
isRunning = true;
|
|
170
|
+
log.help(
|
|
171
|
+
`You may see a firewall popup requesting network access, it is safe to approve`
|
|
172
|
+
);
|
|
173
|
+
});
|
|
174
|
+
child.on("exit", (code) => {
|
|
175
|
+
isRunning = false;
|
|
176
|
+
log[code === 0 ? "success" : "warning"](
|
|
177
|
+
`Request handler exited with code ${code}
|
|
178
|
+
`
|
|
179
|
+
);
|
|
180
|
+
});
|
|
181
|
+
child.on("error", (error) => {
|
|
182
|
+
isRunning = false;
|
|
183
|
+
log.error(`Could not launch request handler due to error
|
|
184
|
+
${error}`);
|
|
185
|
+
});
|
|
186
|
+
await new Promise((resolve) => setTimeout(resolve, 2e3));
|
|
187
|
+
while (true) {
|
|
188
|
+
if (!isRunning) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
const devCommand = (commandArgs, outputOpts, contensisOpts = {}) => {
|
|
196
|
+
return new ContensisDev(["", "", ...commandArgs], outputOpts, contensisOpts);
|
|
197
|
+
};
|
|
198
|
+
var ContensisDevService_default = ContensisDev;
|
|
199
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
200
|
+
0 && (module.exports = {
|
|
201
|
+
devCommand
|
|
202
|
+
});
|
|
203
|
+
//# sourceMappingURL=ContensisDevService.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/services/ContensisDevService.ts"],
|
|
4
|
+
"sourcesContent": ["import { execFile, spawn } from 'child_process';\nimport inquirer from 'inquirer';\nimport path from 'path';\n\nimport { MigrateRequest } from 'migratortron';\nimport { stringify } from 'yaml';\n\nimport ContensisCli, {\n OutputOptionsConstructorArg,\n} from './ContensisCliService';\nimport { mapSiteConfigYaml } from '~/mappers/ContensisCliService-to-RequestHanderSiteConfigYaml';\nimport { appRootDir, writeFile } from '~/providers/file-provider';\nimport { jsonFormatter } from '~/util/json.formatter';\nimport { GitHelper } from '~/util/git';\n\nclass ContensisDev extends ContensisCli {\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 { 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 logging etc.\n let ciFileName = git.ciFileName;\n\n const devKey = `${git.name} development`;\n const deployKey = `${git.name} deployment`;\n const blockId = git.name;\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(devKey, !!apiKeyExists(devKey))\n )\n );\n log.raw(\n log.infoText(\n messages.devinit.deploymentKey(deployKey, !!apiKeyExists(deployKey))\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: `Multiple GitHub workflow files found\\n${log.infoText(\n `Tell us which GitHub workflow builds the container image after each push:`\n )}`,\n name: 'ciFileName',\n choices: workflowFiles,\n default: workflowFiles.find(f => f.includes('docker')),\n },\n ]));\n log.raw('');\n }\n\n log.raw(log.infoText(messages.devinit.ciDetails(ciFileName)));\n log.help(messages.devinit.ciIntro(git));\n\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 // Access token prompt\n const { accessToken } = 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\n // Arrange API keys for development and deployment\n log.success(messages.devinit.createDevKey(devKey, false));\n log.success(messages.devinit.createDeployKey(deployKey, true));\n\n // Update or create a file called .env in project home\n log.success(messages.devinit.writeEnvFile());\n // log.help(messages.devinit.useEnvFileTip());\n\n // Update CI file -- different for GH/GL -- create a sample one with build?\n log.success(messages.devinit.writeCiFile(`./${ciFileName}`));\n log.info(\n messages.devinit.ciBlockTip(blockId, currentEnv, currentProject)\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(git, '123-456', '789-012-345')\n );\n\n log.success(messages.devinit.success());\n log.help(messages.devinit.startProjectTip());\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": ["ContensisCli", "inquirer", "path"]
|
|
7
|
+
}
|
package/dist/shell.js
CHANGED
|
@@ -263,9 +263,11 @@ let globalShell;
|
|
|
263
263
|
const shell = () => {
|
|
264
264
|
var _a;
|
|
265
265
|
if (typeof ((_a = process.argv) == null ? void 0 : _a[2]) !== "undefined")
|
|
266
|
-
return {
|
|
267
|
-
|
|
268
|
-
|
|
266
|
+
return {
|
|
267
|
+
quit: import_ContensisCliService.default.quit,
|
|
268
|
+
restart() {
|
|
269
|
+
}
|
|
270
|
+
};
|
|
269
271
|
if (!globalShell)
|
|
270
272
|
globalShell = new ContensisShell();
|
|
271
273
|
return globalShell;
|
|
@@ -274,11 +276,11 @@ process.on("uncaughtException", function(err) {
|
|
|
274
276
|
console.log(err);
|
|
275
277
|
});
|
|
276
278
|
process.on("SIGINT", () => {
|
|
277
|
-
|
|
279
|
+
import_logger.Logger.warning("received SIGINT");
|
|
278
280
|
shell().quit();
|
|
279
281
|
});
|
|
280
282
|
process.on("SIGTERM", () => {
|
|
281
|
-
|
|
283
|
+
import_logger.Logger.warning("received SIGTERM");
|
|
282
284
|
shell().quit();
|
|
283
285
|
});
|
|
284
286
|
process.stdin.on("data", (key) => {
|
package/dist/shell.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/shell.ts"],
|
|
4
|
-
"sourcesContent": ["import figlet from 'figlet';\nimport inquirer from 'inquirer';\nimport inquirerPrompt from 'inquirer-command-prompt';\nimport commands from './commands';\nimport { LogMessages } from './localisation/en-GB';\nimport CredentialProvider from './providers/CredentialProvider';\nimport { appRootDir } from './providers/file-provider';\nimport ContensisCli, { cliCommand } from './services/ContensisCliService';\nimport { Logging } from './util';\nimport { logError, Logger } from './util/logger';\nimport { LIB_VERSION } from './version';\n\nclass ContensisShell {\n private currentEnvironment!: string;\n private emptyInputCounter: number = 0;\n private env!: EnvironmentCache;\n private firstStart = true;\n private userId: string = '';\n private log = Logger;\n private messages = LogMessages;\n\n private refreshEnvironment = () => {\n // Reload any persisted changes from the disk cache\n const {\n cache: { currentEnvironment = '', environments = {} },\n } = new ContensisCli([]);\n // console.log(`refreshing env w/${currentEnvironment}`);\n this.currentEnvironment = currentEnvironment;\n this.env = environments[currentEnvironment];\n\n // Reload logging here to support changing language\n Logging('en-GB').then(({ messages, Log }) => {\n this.log = Log;\n this.messages = messages;\n });\n };\n\n constructor() {\n this.refreshEnvironment();\n inquirerPrompt.setConfig({\n history: {\n save: true,\n folder: appRootDir,\n limit: 100,\n blacklist: ['quit'],\n },\n });\n\n const { log, messages } = this;\n\n figlet.text(\n messages.app.contensis(),\n {\n font: 'Block',\n horizontalLayout: 'default',\n verticalLayout: 'default',\n width: process.stdout.columns,\n whitespaceBreak: true,\n },\n (err, data) => {\n if (err) {\n log.error(messages.app.unknownError());\n console.dir(err);\n return;\n }\n console.log(log.successText(data));\n console.log(log.infoText(messages.app.startup(LIB_VERSION)));\n console.log(log.helpText(messages.app.help()));\n\n this.start().catch(ex => log.error(ex));\n }\n );\n }\n\n restart = async () => {\n this.firstStart = false;\n this.log.line(); // add a line so we can see where the shell has been restarted\n await this.start();\n };\n\n start = async () => {\n this.refreshEnvironment();\n this.userId = '';\n const { currentEnvironment, env, log, messages } = this;\n\n if (env?.lastUserId) {\n const [credsErr, credentials] = await new CredentialProvider(\n {\n userId: env.lastUserId,\n alias: currentEnvironment,\n },\n env.passwordFallback\n ).Init();\n if (credsErr && !credentials.current) {\n log.error(credsErr.message);\n }\n if (credentials.current) {\n if (this.firstStart) {\n const token = await cliCommand(['login', env.lastUserId]).Login(\n env.lastUserId,\n {\n promptPassword: false,\n silent: true,\n }\n );\n if (token) {\n this.userId = env.lastUserId;\n if (!env.currentProject) log.warning(messages.projects.tip());\n }\n this.firstStart = false;\n this.refreshEnvironment();\n } else {\n this.userId = env.lastUserId;\n }\n }\n }\n await this.contensisPrompt();\n };\n\n contensisPrompt = async (): Promise<any> => {\n const { currentEnvironment, env, log, messages, userId } = this;\n\n const availableCommands = [\n {\n filter: (str: string) => {\n return str.replace(/ \\[.*$/, '');\n },\n },\n 'connect',\n 'list envs',\n 'quit',\n ];\n\n if (currentEnvironment)\n availableCommands.push('login', 'list projects', 'set project');\n if (userId)\n availableCommands.push(\n 'create key',\n 'create project',\n 'create role',\n 'diff models',\n 'execute block action release',\n 'execute block action makelive',\n 'execute block action rollback',\n 'execute block action markasbroken',\n 'get block',\n 'get block logs',\n 'get contenttype',\n 'get component',\n 'get entries',\n 'get model',\n 'get project',\n 'get role',\n 'get token',\n 'get version',\n 'get webhook',\n 'import contenttypes',\n 'import components',\n 'import entries',\n 'import models',\n 'list blocks',\n 'list contenttypes',\n 'list components',\n 'list keys',\n 'list models',\n 'list proxies',\n 'list renderers',\n 'list roles',\n 'list webhooks',\n 'push block',\n 'remove components',\n 'remove contenttypes',\n 'remove key',\n 'remove entries',\n 'remove role',\n 'set project name',\n 'set project description',\n 'set role name',\n 'set role description',\n 'set role assignments',\n 'set role enabled',\n 'set role permissions'\n );\n\n const prompt = inquirer.createPromptModule();\n prompt.registerPrompt('command', inquirerPrompt);\n return prompt([\n {\n type: 'command',\n name: 'cmd',\n autoCompletion: availableCommands.sort(),\n autocompletePrompt: log.infoText(messages.app.autocomplete()),\n message: `${userId ? `${userId}@` : ''}${currentEnvironment || ''}>`,\n context: 0,\n validate: (val: string) => {\n if (!val) this.emptyInputCounter++;\n if (this.emptyInputCounter > 1)\n console.log(this.log.infoText(this.messages.app.suggestions()));\n if (val) {\n this.emptyInputCounter = 0;\n return true;\n }\n },\n prefix: `${env?.currentProject || log.infoText('contensis')}`,\n short: true,\n },\n ])\n .then(async (answers: { cmd: string }) => {\n if (answers.cmd === 'quit') {\n this.quit();\n } else {\n try {\n if (answers.cmd) {\n const program = commands();\n await program.parseAsync(\n answers.cmd\n .match(/\"[^\"]+\"|[^\\s]+/g)\n ?.map(e => e.replace(/\"(.+)\"/, '$1')),\n {\n from: 'user',\n }\n );\n }\n } catch (ex: any) {\n const str = ex.toString();\n if (!str.includes('CommanderError'))\n logError(ex, `Shell ${ex.toString()}`);\n } finally {\n return this.contensisPrompt();\n }\n }\n })\n .catch((err: Error) => {\n log.error(err.message);\n this.quit();\n });\n };\n\n quit = (error?: Error) => {\n const { log, messages } = this;\n process.removeAllListeners('exit');\n\n if (error) {\n log.error(error.message);\n process.exit(1);\n } else {\n log.success(messages.app.quit());\n process.exitCode = 0;\n process.exit(0);\n }\n };\n}\n\nlet globalShell: ContensisShell;\n\nexport const shell = () => {\n // Return a benign function for shell().restart() when used in cli context\n // as some commands need to restart the shell to show an updated prompt\n // after successful connect / login / set project\n if (typeof process.argv?.[2] !== 'undefined')\n return { quit
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import figlet from 'figlet';\nimport inquirer from 'inquirer';\nimport inquirerPrompt from 'inquirer-command-prompt';\nimport commands from './commands';\nimport { LogMessages } from './localisation/en-GB';\nimport CredentialProvider from './providers/CredentialProvider';\nimport { appRootDir } from './providers/file-provider';\nimport ContensisCli, { cliCommand } from './services/ContensisCliService';\nimport { Logging } from './util';\nimport { logError, Logger } from './util/logger';\nimport { LIB_VERSION } from './version';\n\nclass ContensisShell {\n private currentEnvironment!: string;\n private emptyInputCounter: number = 0;\n private env!: EnvironmentCache;\n private firstStart = true;\n private userId: string = '';\n private log = Logger;\n private messages = LogMessages;\n\n private refreshEnvironment = () => {\n // Reload any persisted changes from the disk cache\n const {\n cache: { currentEnvironment = '', environments = {} },\n } = new ContensisCli([]);\n // console.log(`refreshing env w/${currentEnvironment}`);\n this.currentEnvironment = currentEnvironment;\n this.env = environments[currentEnvironment];\n\n // Reload logging here to support changing language\n Logging('en-GB').then(({ messages, Log }) => {\n this.log = Log;\n this.messages = messages;\n });\n };\n\n constructor() {\n this.refreshEnvironment();\n inquirerPrompt.setConfig({\n history: {\n save: true,\n folder: appRootDir,\n limit: 100,\n blacklist: ['quit'],\n },\n });\n\n const { log, messages } = this;\n\n figlet.text(\n messages.app.contensis(),\n {\n font: 'Block',\n horizontalLayout: 'default',\n verticalLayout: 'default',\n width: process.stdout.columns,\n whitespaceBreak: true,\n },\n (err, data) => {\n if (err) {\n log.error(messages.app.unknownError());\n console.dir(err);\n return;\n }\n console.log(log.successText(data));\n console.log(log.infoText(messages.app.startup(LIB_VERSION)));\n console.log(log.helpText(messages.app.help()));\n\n this.start().catch(ex => log.error(ex));\n }\n );\n }\n\n restart = async () => {\n this.firstStart = false;\n this.log.line(); // add a line so we can see where the shell has been restarted\n await this.start();\n };\n\n start = async () => {\n this.refreshEnvironment();\n this.userId = '';\n const { currentEnvironment, env, log, messages } = this;\n\n if (env?.lastUserId) {\n const [credsErr, credentials] = await new CredentialProvider(\n {\n userId: env.lastUserId,\n alias: currentEnvironment,\n },\n env.passwordFallback\n ).Init();\n if (credsErr && !credentials.current) {\n log.error(credsErr.message);\n }\n if (credentials.current) {\n if (this.firstStart) {\n const token = await cliCommand(['login', env.lastUserId]).Login(\n env.lastUserId,\n {\n promptPassword: false,\n silent: true,\n }\n );\n if (token) {\n this.userId = env.lastUserId;\n if (!env.currentProject) log.warning(messages.projects.tip());\n }\n this.firstStart = false;\n this.refreshEnvironment();\n } else {\n this.userId = env.lastUserId;\n }\n }\n }\n await this.contensisPrompt();\n };\n\n contensisPrompt = async (): Promise<any> => {\n const { currentEnvironment, env, log, messages, userId } = this;\n\n const availableCommands = [\n {\n filter: (str: string) => {\n return str.replace(/ \\[.*$/, '');\n },\n },\n 'connect',\n 'list envs',\n 'quit',\n ];\n\n if (currentEnvironment)\n availableCommands.push('login', 'list projects', 'set project');\n if (userId)\n availableCommands.push(\n 'create key',\n 'create project',\n 'create role',\n 'diff models',\n 'execute block action release',\n 'execute block action makelive',\n 'execute block action rollback',\n 'execute block action markasbroken',\n 'get block',\n 'get block logs',\n 'get contenttype',\n 'get component',\n 'get entries',\n 'get model',\n 'get project',\n 'get role',\n 'get token',\n 'get version',\n 'get webhook',\n 'import contenttypes',\n 'import components',\n 'import entries',\n 'import models',\n 'list blocks',\n 'list contenttypes',\n 'list components',\n 'list keys',\n 'list models',\n 'list proxies',\n 'list renderers',\n 'list roles',\n 'list webhooks',\n 'push block',\n 'remove components',\n 'remove contenttypes',\n 'remove key',\n 'remove entries',\n 'remove role',\n 'set project name',\n 'set project description',\n 'set role name',\n 'set role description',\n 'set role assignments',\n 'set role enabled',\n 'set role permissions'\n );\n\n const prompt = inquirer.createPromptModule();\n prompt.registerPrompt('command', inquirerPrompt);\n return prompt([\n {\n type: 'command',\n name: 'cmd',\n autoCompletion: availableCommands.sort(),\n autocompletePrompt: log.infoText(messages.app.autocomplete()),\n message: `${userId ? `${userId}@` : ''}${currentEnvironment || ''}>`,\n context: 0,\n validate: (val: string) => {\n if (!val) this.emptyInputCounter++;\n if (this.emptyInputCounter > 1)\n console.log(this.log.infoText(this.messages.app.suggestions()));\n if (val) {\n this.emptyInputCounter = 0;\n return true;\n }\n },\n prefix: `${env?.currentProject || log.infoText('contensis')}`,\n short: true,\n },\n ])\n .then(async (answers: { cmd: string }) => {\n if (answers.cmd === 'quit') {\n this.quit();\n } else {\n try {\n if (answers.cmd) {\n const program = commands();\n await program.parseAsync(\n answers.cmd\n .match(/\"[^\"]+\"|[^\\s]+/g)\n ?.map(e => e.replace(/\"(.+)\"/, '$1')),\n {\n from: 'user',\n }\n );\n }\n } catch (ex: any) {\n const str = ex.toString();\n if (!str.includes('CommanderError'))\n logError(ex, `Shell ${ex.toString()}`);\n } finally {\n return this.contensisPrompt();\n }\n }\n })\n .catch((err: Error) => {\n log.error(err.message);\n this.quit();\n });\n };\n\n quit = (error?: Error) => {\n const { log, messages } = this;\n process.removeAllListeners('exit');\n\n if (error) {\n log.error(error.message);\n process.exit(1);\n } else {\n log.success(messages.app.quit());\n process.exitCode = 0;\n process.exit(0);\n }\n };\n}\n\nlet globalShell: ContensisShell;\n\nexport const shell = () => {\n // Return a benign function for shell().restart() when used in cli context\n // as some commands need to restart the shell to show an updated prompt\n // after successful connect / login / set project\n if (typeof process.argv?.[2] !== 'undefined')\n return {\n quit: ContensisCli.quit,\n restart() {},\n } as any;\n if (!globalShell) globalShell = new ContensisShell();\n return globalShell;\n};\n\nprocess.on('uncaughtException', function (err) {\n // Handle the error safely\n console.log(err);\n});\n\nprocess.on('SIGINT', () => {\n Logger.warning('received SIGINT');\n shell().quit();\n // setTimeout(() => {\n // }, 2000);\n});\n\nprocess.on('SIGTERM', () => {\n Logger.warning('received SIGTERM');\n shell().quit();\n});\n\nprocess.stdin.on('data', key => {\n if ((key as any) == '\\u0003') {\n console.log('');\n Logger.info(`[CTRL]+[C] detected, exiting shell...`);\n shell().quit();\n }\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["ContensisCli", "inquirerPrompt", "figlet", "CredentialProvider", "inquirer", "commands"]
|
|
7
7
|
}
|
package/dist/util/git.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
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 git_exports = {};
|
|
26
|
+
__export(git_exports, {
|
|
27
|
+
GitHelper: () => GitHelper
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(git_exports);
|
|
30
|
+
var import_giturl = __toESM(require("giturl"));
|
|
31
|
+
var import_hosted_git_info = __toESM(require("hosted-git-info"));
|
|
32
|
+
var import_parse_git_config = __toESM(require("parse-git-config"));
|
|
33
|
+
var import_path = __toESM(require("path"));
|
|
34
|
+
var import_os = require("./os");
|
|
35
|
+
var import_file_provider = require("../providers/file-provider");
|
|
36
|
+
const GITLAB_CI_FILENAME = ".gitlab-ci.yml";
|
|
37
|
+
class GitHelper {
|
|
38
|
+
gitRepoPath;
|
|
39
|
+
config = {};
|
|
40
|
+
info;
|
|
41
|
+
home;
|
|
42
|
+
get ciFileName() {
|
|
43
|
+
var _a;
|
|
44
|
+
return this.workflows ? this.type === "github" ? this.workflows.length > 1 ? "[multiple workflows]" : (_a = this.workflows) == null ? void 0 : _a[0] : GITLAB_CI_FILENAME : "[unknown]";
|
|
45
|
+
}
|
|
46
|
+
get name() {
|
|
47
|
+
var _a, _b;
|
|
48
|
+
return ((_a = this.info) == null ? void 0 : _a.project) || ((_b = this.home) == null ? void 0 : _b.split("/").pop()) || "[set arg --name]";
|
|
49
|
+
}
|
|
50
|
+
get originUrl() {
|
|
51
|
+
return this.config.remote.origin.url;
|
|
52
|
+
}
|
|
53
|
+
get secretsUri() {
|
|
54
|
+
return `${this.type === "github" ? `${this.home}/settings/secrets/actions` : `${this.home}/-/settings/ci_cd`}`;
|
|
55
|
+
}
|
|
56
|
+
get type() {
|
|
57
|
+
var _a;
|
|
58
|
+
return ((_a = this.info) == null ? void 0 : _a.type) || this.hostType();
|
|
59
|
+
}
|
|
60
|
+
get workflows() {
|
|
61
|
+
return this.type === "github" ? this.githubWorkflows() : this.gitlabWorkflow();
|
|
62
|
+
}
|
|
63
|
+
constructor(gitRepoPath = process.cwd()) {
|
|
64
|
+
this.gitRepoPath = gitRepoPath;
|
|
65
|
+
this.config = this.gitConfig();
|
|
66
|
+
this.home = import_giturl.default.parse(this.originUrl);
|
|
67
|
+
this.info = this.gitInfo();
|
|
68
|
+
}
|
|
69
|
+
gitcwd = () => import_path.default.join(this.gitRepoPath);
|
|
70
|
+
gitInfo = (url = this.originUrl) => import_hosted_git_info.default.fromUrl(url);
|
|
71
|
+
hostType = (url = this.originUrl) => {
|
|
72
|
+
if (url.includes("github.com"))
|
|
73
|
+
return "github";
|
|
74
|
+
return "gitlab";
|
|
75
|
+
};
|
|
76
|
+
gitConfig = (cwd = this.gitRepoPath) => {
|
|
77
|
+
const config = import_parse_git_config.default.sync({
|
|
78
|
+
path: ".git/config",
|
|
79
|
+
expandKeys: true
|
|
80
|
+
});
|
|
81
|
+
if (Object.keys(config || {}).length)
|
|
82
|
+
return config;
|
|
83
|
+
const pathParts = (0, import_os.linuxSlash)(cwd).split("/");
|
|
84
|
+
for (let i = 1; i <= pathParts.length; i++) {
|
|
85
|
+
const relPath = `${Array(i).fill("..").join("/")}/.git/config`;
|
|
86
|
+
const config2 = import_parse_git_config.default.sync({
|
|
87
|
+
path: relPath,
|
|
88
|
+
expandKeys: true
|
|
89
|
+
});
|
|
90
|
+
if (Object.keys(config2 || {}).length) {
|
|
91
|
+
this.gitRepoPath = import_path.default.join(
|
|
92
|
+
this.gitRepoPath,
|
|
93
|
+
Array(i).fill("..").join("/")
|
|
94
|
+
);
|
|
95
|
+
return config2;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return config;
|
|
99
|
+
};
|
|
100
|
+
githubWorkflows = () => {
|
|
101
|
+
const workflowPath = import_path.default.join(this.gitcwd(), ".github/workflows");
|
|
102
|
+
const workflowFiles = (0, import_file_provider.readFiles)(workflowPath, false);
|
|
103
|
+
const addFolderSuffix = (files) => files.map((f) => `.github/workflows/${f}`);
|
|
104
|
+
if (workflowFiles.some((f) => f.includes("build")))
|
|
105
|
+
return addFolderSuffix(workflowFiles.filter((f) => f.includes("build")));
|
|
106
|
+
return addFolderSuffix(workflowFiles);
|
|
107
|
+
};
|
|
108
|
+
gitlabWorkflow = (ciFileName = GITLAB_CI_FILENAME) => {
|
|
109
|
+
const workflowPath = this.gitcwd();
|
|
110
|
+
const workflowFilePath = import_path.default.join(workflowPath, ciFileName);
|
|
111
|
+
const workflowFile = (0, import_file_provider.readFile)(workflowFilePath);
|
|
112
|
+
return workflowFile;
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
116
|
+
0 && (module.exports = {
|
|
117
|
+
GitHelper
|
|
118
|
+
});
|
|
119
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/util/git.ts"],
|
|
4
|
+
"sourcesContent": ["import giturl from 'giturl';\nimport hostedGitInfo from 'hosted-git-info';\nimport parseGitConfig from 'parse-git-config';\nimport path from 'path';\n\nimport { linuxSlash } from './os';\nimport { readFile, readFiles } from '~/providers/file-provider';\n\nconst GITLAB_CI_FILENAME = '.gitlab-ci.yml';\n\ntype GitConfig = parseGitConfig.Config;\n\nexport type GitTypes = hostedGitInfo.Hosts;\n\nexport class GitHelper {\n private gitRepoPath: string;\n config = {} as GitConfig;\n info: hostedGitInfo | undefined;\n home: string | undefined;\n\n get ciFileName() {\n return this.workflows\n ? this.type === 'github'\n ? this.workflows.length > 1\n ? '[multiple workflows]'\n : this.workflows?.[0]\n : GITLAB_CI_FILENAME\n : '[unknown]';\n }\n get name() {\n return (\n this.info?.project || this.home?.split('/').pop() || '[set arg --name]'\n );\n }\n get originUrl() {\n return this.config.remote.origin.url;\n }\n get secretsUri() {\n return `${\n this.type === 'github'\n ? `${this.home}/settings/secrets/actions`\n : `${this.home}/-/settings/ci_cd`\n }`;\n }\n get type() {\n return this.info?.type || this.hostType();\n }\n get workflows() {\n return this.type === 'github'\n ? this.githubWorkflows()\n : this.gitlabWorkflow();\n }\n constructor(gitRepoPath: string = process.cwd()) {\n this.gitRepoPath = gitRepoPath;\n this.config = this.gitConfig();\n this.home = giturl.parse(this.originUrl);\n this.info = this.gitInfo();\n // console.log(this.config);\n // console.log(this.home);\n // console.log(this.info);\n }\n gitcwd = () => path.join(this.gitRepoPath);\n gitInfo = (url: string = this.originUrl) => hostedGitInfo.fromUrl(url);\n hostType = (url: string = this.originUrl): GitTypes => {\n if (url.includes('github.com')) return 'github';\n return 'gitlab';\n // if (url.includes('gitlab.com')) return 'gl';\n // if (url.includes('gitlab.zengenti.com')) return 'gl';\n };\n gitConfig = (cwd = this.gitRepoPath) => {\n // Find .git/config in project cwd\n const config = parseGitConfig.sync({\n path: '.git/config',\n expandKeys: true,\n });\n // console.log(cwd, config);\n if (Object.keys(config || {}).length) return config;\n\n // Recursively check the directory heirarchy for existance of a .git/config\n const pathParts = linuxSlash(cwd).split('/');\n for (let i = 1; i <= pathParts.length; i++) {\n const relPath = `${Array(i).fill('..').join('/')}/.git/config`;\n // Does not appear to work when using a shortened cwd, using relative path instead\n const config = parseGitConfig.sync({\n path: relPath,\n expandKeys: true,\n });\n // console.log(relPath, config);\n if (Object.keys(config || {}).length) {\n this.gitRepoPath = path.join(\n this.gitRepoPath,\n Array(i).fill('..').join('/')\n );\n return config;\n }\n }\n return config;\n };\n githubWorkflows = () => {\n const workflowPath = path.join(this.gitcwd(), '.github/workflows');\n const workflowFiles = readFiles(workflowPath, false);\n // console.log('gh workflows: ', workflowFiles);\n const addFolderSuffix = (files: string[]) =>\n files.map(f => `.github/workflows/${f}`);\n\n if (workflowFiles.some(f => f.includes('build')))\n return addFolderSuffix(workflowFiles.filter(f => f.includes('build')));\n return addFolderSuffix(workflowFiles);\n };\n gitlabWorkflow = (ciFileName = GITLAB_CI_FILENAME) => {\n const workflowPath = this.gitcwd();\n const workflowFilePath = path.join(workflowPath, ciFileName);\n const workflowFile = readFile(workflowFilePath);\n // console.log(ciFileName, workflowFile);\n\n return workflowFile;\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["giturl", "path", "hostedGitInfo", "parseGitConfig", "config"]
|
|
7
|
+
}
|
package/dist/util/os.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
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 os_exports = {};
|
|
26
|
+
__export(os_exports, {
|
|
27
|
+
linuxSlash: () => linuxSlash,
|
|
28
|
+
winSlash: () => winSlash
|
|
29
|
+
});
|
|
30
|
+
module.exports = __toCommonJS(os_exports);
|
|
31
|
+
var import_os = __toESM(require("os"));
|
|
32
|
+
const winSlash = (str) => import_os.default.platform() === "win32" ? str.replaceAll("/", "\\") : str;
|
|
33
|
+
const linuxSlash = (str) => import_os.default.platform() === "win32" ? str.replaceAll("\\", "/") : str;
|
|
34
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
35
|
+
0 && (module.exports = {
|
|
36
|
+
linuxSlash,
|
|
37
|
+
winSlash
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=os.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/util/os.ts"],
|
|
4
|
+
"sourcesContent": ["import os from 'os';\n\nexport const winSlash = (str: string) =>\n os.platform() === 'win32' ? str.replaceAll('/', '\\\\') : str;\n\nexport const linuxSlash = (str: string) =>\n os.platform() === 'win32' ? str.replaceAll('\\\\', '/') : str;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAe;AAER,MAAM,WAAW,CAAC,QACvB,UAAAA,QAAG,SAAS,MAAM,UAAU,IAAI,WAAW,KAAK,IAAI,IAAI;AAEnD,MAAM,aAAa,CAAC,QACzB,UAAAA,QAAG,SAAS,MAAM,UAAU,IAAI,WAAW,MAAM,GAAG,IAAI;",
|
|
6
|
+
"names": ["os"]
|
|
7
|
+
}
|
package/dist/version.js
CHANGED
|
@@ -21,7 +21,7 @@ __export(version_exports, {
|
|
|
21
21
|
LIB_VERSION: () => LIB_VERSION
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(version_exports);
|
|
24
|
-
const LIB_VERSION = "1.0.0-beta.
|
|
24
|
+
const LIB_VERSION = "1.0.0-beta.84";
|
|
25
25
|
// Annotate the CommonJS export names for ESM import in node:
|
|
26
26
|
0 && (module.exports = {
|
|
27
27
|
LIB_VERSION
|
package/dist/version.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/version.ts"],
|
|
4
|
-
"sourcesContent": ["export const LIB_VERSION = \"1.0.0-beta.
|
|
4
|
+
"sourcesContent": ["export const LIB_VERSION = \"1.0.0-beta.84\";\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,cAAc;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "contensis-cli",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.84",
|
|
4
4
|
"description": "A fully featured Contensis command line interface with a shell UI provides simple and intuitive ways to manage or profile your content in any NodeJS terminal.",
|
|
5
5
|
"repository": "https://github.com/contensis/node-cli",
|
|
6
6
|
"homepage": "https://github.com/contensis/node-cli/tree/main/packages/contensis-cli#readme",
|
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
"dayjs": "^1.11.6",
|
|
31
31
|
"figlet": "^1.5.2",
|
|
32
32
|
"flat": "^5.0.2",
|
|
33
|
+
"giturl": "^2.0.0",
|
|
34
|
+
"hosted-git-info": "^6.1.1",
|
|
33
35
|
"inquirer-command-prompt": "^0.1.0",
|
|
34
36
|
"json2csv": "^5.0.7",
|
|
35
37
|
"jsonpath-mapper": "^1.1.0",
|
|
@@ -37,16 +39,20 @@
|
|
|
37
39
|
"lodash": "^4.17.21",
|
|
38
40
|
"migratortron": "^1.0.0-beta.30",
|
|
39
41
|
"node-fetch": "^2.6.7",
|
|
42
|
+
"parse-git-config": "^3.0.0",
|
|
40
43
|
"patch-package": "^6.4.7",
|
|
41
|
-
"xml2js": "^0.4.23"
|
|
44
|
+
"xml2js": "^0.4.23",
|
|
45
|
+
"yaml": "^2.3.1"
|
|
42
46
|
},
|
|
43
47
|
"devDependencies": {
|
|
44
48
|
"@types/figlet": "^1.5.4",
|
|
45
49
|
"@types/flat": "^5.0.2",
|
|
50
|
+
"@types/hosted-git-info": "^3.0.2",
|
|
46
51
|
"@types/inquirer": "^8.2.1",
|
|
47
52
|
"@types/json2csv": "^5.0.3",
|
|
48
53
|
"@types/lodash": "^4.14.182",
|
|
49
54
|
"@types/node-fetch": "^2.6.1",
|
|
55
|
+
"@types/parse-git-config": "^3.0.1",
|
|
50
56
|
"@types/xml2js": "^0.4.11",
|
|
51
57
|
"esbuild": "^0.14.43",
|
|
52
58
|
"esbuild-node-externals": "^1.4.1",
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { devCommand } from '~/services/ContensisDevService';
|
|
3
|
+
|
|
4
|
+
export const makeDevCommand = () => {
|
|
5
|
+
const dev = new Command()
|
|
6
|
+
.command('dev')
|
|
7
|
+
.description('dev command')
|
|
8
|
+
.addHelpText('after', `\n`)
|
|
9
|
+
.showHelpAfterError(true)
|
|
10
|
+
.exitOverride();
|
|
11
|
+
|
|
12
|
+
dev
|
|
13
|
+
.command('init')
|
|
14
|
+
.description(
|
|
15
|
+
'initialise a git clone directory to connect and deploy to Contensis'
|
|
16
|
+
)
|
|
17
|
+
.argument(
|
|
18
|
+
'[projectHome]',
|
|
19
|
+
'the path of the folder to initialise',
|
|
20
|
+
process.cwd()
|
|
21
|
+
)
|
|
22
|
+
.option(
|
|
23
|
+
'--url <url>',
|
|
24
|
+
'override the git url or add one to initialise a non-git folder'
|
|
25
|
+
)
|
|
26
|
+
.addHelpText(
|
|
27
|
+
'after',
|
|
28
|
+
`
|
|
29
|
+
Example call:
|
|
30
|
+
> dev init\n`
|
|
31
|
+
)
|
|
32
|
+
.action(async (projectHome: string, opts) => {
|
|
33
|
+
await devCommand(['dev', 'init', projectHome], opts).DevelopmentInit(
|
|
34
|
+
projectHome,
|
|
35
|
+
opts
|
|
36
|
+
);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
dev
|
|
40
|
+
.command('requests')
|
|
41
|
+
.description('launch request handler for local development')
|
|
42
|
+
.argument('[block-ids...]', 'ids of any blocks to develop locally')
|
|
43
|
+
.option('--args <args...>', 'override or add additional args')
|
|
44
|
+
.usage('[block-ids...]')
|
|
45
|
+
.addHelpText(
|
|
46
|
+
'after',
|
|
47
|
+
`
|
|
48
|
+
Example call:
|
|
49
|
+
> dev requests test-block-one\n`
|
|
50
|
+
)
|
|
51
|
+
.action(async (blockIds: string[] = [], opts) => {
|
|
52
|
+
await devCommand(
|
|
53
|
+
['dev', 'requests', blockIds.join(' ')],
|
|
54
|
+
opts
|
|
55
|
+
).ExecRequestHandler(blockIds, opts?.args);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
return dev;
|
|
59
|
+
};
|