contensis-cli 1.0.0-beta.10 → 1.0.0-beta.100

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +1146 -78
  2. package/cli.js +3 -0
  3. package/dist/commands/connect.js +3 -3
  4. package/dist/commands/connect.js.map +2 -2
  5. package/dist/commands/create.js +45 -10
  6. package/dist/commands/create.js.map +2 -2
  7. package/dist/commands/dev.js +71 -0
  8. package/dist/commands/dev.js.map +7 -0
  9. package/dist/commands/diff.js +57 -0
  10. package/dist/commands/diff.js.map +7 -0
  11. package/dist/commands/execute.js +103 -0
  12. package/dist/commands/execute.js.map +7 -0
  13. package/dist/commands/get.js +169 -32
  14. package/dist/commands/get.js.map +3 -3
  15. package/dist/commands/globalOptions.js +37 -12
  16. package/dist/commands/globalOptions.js.map +2 -2
  17. package/dist/commands/import.js +65 -12
  18. package/dist/commands/import.js.map +2 -2
  19. package/dist/commands/index.js +22 -2
  20. package/dist/commands/index.js.map +2 -2
  21. package/dist/commands/list.js +53 -10
  22. package/dist/commands/list.js.map +2 -2
  23. package/dist/commands/login.js +2 -2
  24. package/dist/commands/login.js.map +2 -2
  25. package/dist/commands/push.js +17 -13
  26. package/dist/commands/push.js.map +2 -2
  27. package/dist/commands/remove.js +51 -8
  28. package/dist/commands/remove.js.map +2 -2
  29. package/dist/commands/set.js +139 -12
  30. package/dist/commands/set.js.map +2 -2
  31. package/dist/index.js +1 -1
  32. package/dist/index.js.map +2 -2
  33. package/dist/localisation/en-GB.js +297 -49
  34. package/dist/localisation/en-GB.js.map +2 -2
  35. package/dist/mappers/ContensisCliService-to-RequestHanderSiteConfigYaml.js +56 -0
  36. package/dist/mappers/ContensisCliService-to-RequestHanderSiteConfigYaml.js.map +7 -0
  37. package/dist/mappers/DevInit-to-CIWorkflow.js +374 -0
  38. package/dist/mappers/DevInit-to-CIWorkflow.js.map +7 -0
  39. package/dist/mappers/DevInit-to-RolePermissions.js +56 -0
  40. package/dist/mappers/DevInit-to-RolePermissions.js.map +7 -0
  41. package/dist/mappers/DevRequests-to-RequestHanderSiteConfigYaml.js +56 -0
  42. package/dist/mappers/DevRequests-to-RequestHanderSiteConfigYaml.js.map +7 -0
  43. package/dist/models/CliService.d.js +17 -0
  44. package/dist/models/CliService.d.js.map +7 -0
  45. package/dist/models/DevService.d.js +17 -0
  46. package/dist/models/DevService.d.js.map +7 -0
  47. package/dist/providers/CredentialProvider.js +46 -14
  48. package/dist/providers/CredentialProvider.js.map +3 -3
  49. package/dist/providers/SessionCacheProvider.js +21 -1
  50. package/dist/providers/SessionCacheProvider.js.map +2 -2
  51. package/dist/providers/file-provider.js +12 -6
  52. package/dist/providers/file-provider.js.map +3 -3
  53. package/dist/services/ContensisCliService.js +1211 -420
  54. package/dist/services/ContensisCliService.js.map +3 -3
  55. package/dist/services/ContensisDevService.js +368 -0
  56. package/dist/services/ContensisDevService.js.map +7 -0
  57. package/dist/services/ContensisRoleService.js +114 -0
  58. package/dist/services/ContensisRoleService.js.map +7 -0
  59. package/dist/shell.js +58 -18
  60. package/dist/shell.js.map +3 -3
  61. package/dist/util/console.printer.js +171 -55
  62. package/dist/util/console.printer.js.map +2 -2
  63. package/dist/util/diff.js +116 -0
  64. package/dist/util/diff.js.map +7 -0
  65. package/dist/util/dotenv.js +57 -0
  66. package/dist/util/dotenv.js.map +7 -0
  67. package/dist/util/find.js +31 -0
  68. package/dist/util/find.js.map +7 -0
  69. package/dist/util/git.js +128 -0
  70. package/dist/util/git.js.map +7 -0
  71. package/dist/util/index.js +8 -2
  72. package/dist/util/index.js.map +3 -3
  73. package/dist/util/logger.js +90 -29
  74. package/dist/util/logger.js.map +3 -3
  75. package/dist/util/os.js +42 -0
  76. package/dist/util/os.js.map +7 -0
  77. package/dist/util/timers.js +49 -0
  78. package/dist/util/timers.js.map +7 -0
  79. package/dist/util/yaml.js +45 -0
  80. package/dist/util/yaml.js.map +7 -0
  81. package/dist/version.js +1 -1
  82. package/dist/version.js.map +1 -1
  83. package/esbuild.config.js +3 -1
  84. package/package.json +14 -3
  85. package/src/commands/connect.ts +3 -2
  86. package/src/commands/create.ts +61 -8
  87. package/src/commands/dev.ts +69 -0
  88. package/src/commands/diff.ts +41 -0
  89. package/src/commands/execute.ts +117 -0
  90. package/src/commands/get.ts +242 -28
  91. package/src/commands/globalOptions.ts +42 -12
  92. package/src/commands/import.ts +83 -8
  93. package/src/commands/index.ts +22 -1
  94. package/src/commands/list.ts +85 -11
  95. package/src/commands/login.ts +2 -1
  96. package/src/commands/push.ts +18 -11
  97. package/src/commands/remove.ts +66 -4
  98. package/src/commands/set.ts +189 -9
  99. package/src/index.ts +1 -4
  100. package/src/localisation/en-GB.ts +428 -66
  101. package/src/mappers/ContensisCliService-to-RequestHanderSiteConfigYaml.ts +44 -0
  102. package/src/mappers/DevInit-to-CIWorkflow.ts +526 -0
  103. package/src/mappers/DevInit-to-RolePermissions.ts +32 -0
  104. package/src/mappers/DevRequests-to-RequestHanderSiteConfigYaml.ts +44 -0
  105. package/src/models/CliService.d.ts +36 -0
  106. package/src/models/DevService.d.ts +40 -0
  107. package/src/models/JsModules.d.ts +2 -0
  108. package/src/providers/CredentialProvider.ts +51 -18
  109. package/src/providers/SessionCacheProvider.ts +29 -2
  110. package/src/providers/file-provider.ts +17 -6
  111. package/src/services/ContensisCliService.ts +1532 -508
  112. package/src/services/ContensisDevService.ts +434 -0
  113. package/src/services/ContensisRoleService.ts +108 -0
  114. package/src/shell.ts +68 -18
  115. package/src/util/console.printer.ts +240 -78
  116. package/src/util/diff.ts +124 -0
  117. package/src/util/dotenv.ts +37 -0
  118. package/src/util/find.ts +8 -0
  119. package/src/util/git.ts +131 -0
  120. package/src/util/index.ts +16 -7
  121. package/src/util/logger.ts +145 -31
  122. package/src/util/os.ts +12 -0
  123. package/src/util/timers.ts +24 -0
  124. package/src/util/yaml.ts +13 -0
  125. package/src/version.ts +1 -1
@@ -0,0 +1,116 @@
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 diff_exports = {};
26
+ __export(diff_exports, {
27
+ diffFileContent: () => diffFileContent,
28
+ diffLogStrings: () => diffLogStrings
29
+ });
30
+ module.exports = __toCommonJS(diff_exports);
31
+ var import_chalk = __toESM(require("chalk"));
32
+ var import_diff = require("diff");
33
+ var import_os = require("./os");
34
+ const diffLogStrings = (updates, previous) => {
35
+ const lastFewLines = previous.split("\n").slice(-10);
36
+ const incomingLines = updates.split("\n");
37
+ const incomingLineIndices = [];
38
+ for (const lastRenderedLine of lastFewLines) {
39
+ if (lastRenderedLine.length > 10)
40
+ incomingLineIndices.push(incomingLines.lastIndexOf(lastRenderedLine));
41
+ }
42
+ const differentFromPos = Math.max(...incomingLineIndices, 0) + 1;
43
+ return incomingLines.slice(differentFromPos).join("\n");
44
+ };
45
+ const diffFileContent = (existingContent, newContent) => {
46
+ const existingContentNormalised = (0, import_os.normaliseLineEndings)(existingContent, "\n");
47
+ const newContentNormalised = (0, import_os.normaliseLineEndings)(newContent, "\n");
48
+ const diff = (0, import_diff.diffLines)(existingContentNormalised, newContentNormalised, {
49
+ newlineIsToken: true
50
+ });
51
+ const diffRanges = addDiffPositionInfo(diff);
52
+ const output = [];
53
+ const lnSpaceLength = Math.max(
54
+ ...diffRanges.map((d) => d.startLineNumber.toString().length),
55
+ 0
56
+ );
57
+ const lnSpaces = Array(lnSpaceLength).join(" ");
58
+ let needsNewLine = false;
59
+ for (let i = 0; i < diffRanges.length; i++) {
60
+ const part = diffRanges[i];
61
+ if (part.added || part.removed) {
62
+ const colour = part.added ? "green" : part.removed ? "red" : "grey";
63
+ if (part.value !== "\n") {
64
+ if (needsNewLine) {
65
+ output.push("\n### --");
66
+ needsNewLine = false;
67
+ }
68
+ output.push(
69
+ `
70
+ ${part.value.split("\n").map(
71
+ (ln, idx) => ln.trim() !== "" ? `${part.startLineNumber ? part.startLineNumber + idx : lnSpaces}${part.added ? "+" : part.removed ? "-" : " "} ${import_chalk.default[colour](`${ln}`)}` : ln
72
+ ).join("\n")}`
73
+ );
74
+ } else
75
+ needsNewLine = true;
76
+ } else
77
+ needsNewLine = true;
78
+ }
79
+ return output.join("");
80
+ };
81
+ const addDiffPositionInfo = (diff) => {
82
+ const diffRanges = [];
83
+ let lineNumber = 0;
84
+ let column = 0;
85
+ for (let partIndex = 0; partIndex < diff.length; partIndex++) {
86
+ const part = diff[partIndex];
87
+ const startLineNumber = lineNumber;
88
+ const startColumn = column;
89
+ const substring = part.value;
90
+ const lines = substring.split("\n");
91
+ lines.forEach((line, lineIndex) => {
92
+ if (lineIndex === 0) {
93
+ column += line.length;
94
+ } else if (lineIndex > 0) {
95
+ lineNumber += 1;
96
+ column = line.length;
97
+ }
98
+ });
99
+ if (part.added === true || part.removed === true) {
100
+ diffRanges.push({
101
+ startLineNumber: startLineNumber + 1,
102
+ startColumn,
103
+ endLineNumber: lineNumber,
104
+ endColumn: column,
105
+ ...part
106
+ });
107
+ }
108
+ }
109
+ return diffRanges;
110
+ };
111
+ // Annotate the CommonJS export names for ESM import in node:
112
+ 0 && (module.exports = {
113
+ diffFileContent,
114
+ diffLogStrings
115
+ });
116
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/util/diff.ts"],
4
+ "sourcesContent": ["import chalk from 'chalk';\nimport { Change, diffLines } from 'diff';\nimport { normaliseLineEndings } from './os';\n\nexport const diffLogStrings = (updates: string, previous: string) => {\n const lastFewLines = previous.split('\\n').slice(-10);\n const incomingLines = updates.split('\\n');\n\n // Find the line indices in the incoming lines\n // of the last few lines previously rendered\n const incomingLineIndices = [];\n for (const lastRenderedLine of lastFewLines) {\n if (lastRenderedLine.length > 10)\n incomingLineIndices.push(incomingLines.lastIndexOf(lastRenderedLine));\n }\n\n // Get the new lines from the next position on from the last of the already shown lines\n const differentFromPos = Math.max(...incomingLineIndices, 0) + 1;\n // Return just the incoming lines from the position we matched\n return incomingLines.slice(differentFromPos).join('\\n');\n};\n\nexport const diffFileContent = (\n existingContent: string,\n newContent: string\n) => {\n const existingContentNormalised = normaliseLineEndings(existingContent, '\\n');\n const newContentNormalised = normaliseLineEndings(newContent, '\\n');\n\n const diff = diffLines(existingContentNormalised, newContentNormalised, {\n newlineIsToken: true,\n });\n const diffRanges = addDiffPositionInfo(diff);\n\n // Create formatted output for console\n const output: string[] = [];\n const lnSpaceLength = Math.max(\n ...diffRanges.map(d => d.startLineNumber.toString().length),\n 0\n );\n\n const lnSpaces = Array(lnSpaceLength).join(' ');\n\n let needsNewLine = false;\n for (let i = 0; i < diffRanges.length; i++) {\n const part = diffRanges[i];\n if (part.added || part.removed) {\n const colour = part.added ? 'green' : part.removed ? 'red' : 'grey';\n\n if (part.value !== '\\n') {\n if (needsNewLine) {\n output.push('\\n### --');\n needsNewLine = false;\n }\n output.push(\n `\\n${part.value\n .split('\\n')\n .map((ln, idx) =>\n ln.trim() !== ''\n ? `${\n part.startLineNumber ? part.startLineNumber + idx : lnSpaces\n }${part.added ? '+' : part.removed ? '-' : ' '} ${chalk[\n colour\n ](`${ln}`)}`\n : ln\n )\n .join('\\n')}`\n );\n } else needsNewLine = true;\n } else needsNewLine = true;\n }\n\n return output.join('');\n};\n\nconst addDiffPositionInfo = (diff: Change[]) => {\n const diffRanges: (Change & {\n startLineNumber: number;\n startColumn: number;\n endLineNumber: number;\n endColumn: number;\n })[] = [];\n\n let lineNumber = 0;\n let column = 0;\n for (let partIndex = 0; partIndex < diff.length; partIndex++) {\n const part = diff[partIndex];\n\n // // Skip any parts that aren't in `after`\n // if (part.removed === true) {\n // continue;\n // }\n\n const startLineNumber = lineNumber;\n const startColumn = column;\n\n // Split the part into lines. Loop throug these lines to find\n // the line no. and column at the end of this part.\n const substring = part.value;\n const lines = substring.split('\\n');\n lines.forEach((line, lineIndex) => {\n // The first `line` is actually just a continuation of the last line\n if (lineIndex === 0) {\n column += line.length;\n // All other lines come after a line break.\n } else if (lineIndex > 0) {\n lineNumber += 1;\n column = line.length;\n }\n });\n\n // Save a range for all of the parts with position info added\n if (part.added === true || part.removed === true) {\n diffRanges.push({\n startLineNumber: startLineNumber + 1,\n startColumn: startColumn,\n endLineNumber: lineNumber,\n endColumn: column,\n ...part,\n });\n }\n }\n return diffRanges;\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAkC;AAClC,gBAAqC;AAE9B,MAAM,iBAAiB,CAAC,SAAiB,aAAqB;AACnE,QAAM,eAAe,SAAS,MAAM,IAAI,EAAE,MAAM,GAAG;AACnD,QAAM,gBAAgB,QAAQ,MAAM,IAAI;AAIxC,QAAM,sBAAsB,CAAC;AAC7B,aAAW,oBAAoB,cAAc;AAC3C,QAAI,iBAAiB,SAAS;AAC5B,0BAAoB,KAAK,cAAc,YAAY,gBAAgB,CAAC;AAAA,EACxE;AAGA,QAAM,mBAAmB,KAAK,IAAI,GAAG,qBAAqB,CAAC,IAAI;AAE/D,SAAO,cAAc,MAAM,gBAAgB,EAAE,KAAK,IAAI;AACxD;AAEO,MAAM,kBAAkB,CAC7B,iBACA,eACG;AACH,QAAM,gCAA4B,gCAAqB,iBAAiB,IAAI;AAC5E,QAAM,2BAAuB,gCAAqB,YAAY,IAAI;AAElE,QAAM,WAAO,uBAAU,2BAA2B,sBAAsB;AAAA,IACtE,gBAAgB;AAAA,EAClB,CAAC;AACD,QAAM,aAAa,oBAAoB,IAAI;AAG3C,QAAM,SAAmB,CAAC;AAC1B,QAAM,gBAAgB,KAAK;AAAA,IACzB,GAAG,WAAW,IAAI,OAAK,EAAE,gBAAgB,SAAS,EAAE,MAAM;AAAA,IAC1D;AAAA,EACF;AAEA,QAAM,WAAW,MAAM,aAAa,EAAE,KAAK,GAAG;AAE9C,MAAI,eAAe;AACnB,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,UAAM,OAAO,WAAW;AACxB,QAAI,KAAK,SAAS,KAAK,SAAS;AAC9B,YAAM,SAAS,KAAK,QAAQ,UAAU,KAAK,UAAU,QAAQ;AAE7D,UAAI,KAAK,UAAU,MAAM;AACvB,YAAI,cAAc;AAChB,iBAAO,KAAK,UAAU;AACtB,yBAAe;AAAA,QACjB;AACA,eAAO;AAAA,UACL;AAAA,EAAK,KAAK,MACP,MAAM,IAAI,EACV;AAAA,YAAI,CAAC,IAAI,QACR,GAAG,KAAK,MAAM,KACV,GACE,KAAK,kBAAkB,KAAK,kBAAkB,MAAM,WACnD,KAAK,QAAQ,MAAM,KAAK,UAAU,MAAM,OAAO,aAAAA,QAChD,QACA,GAAG,IAAI,MACT;AAAA,UACN,EACC,KAAK,IAAI;AAAA,QACd;AAAA,MACF;AAAO,uBAAe;AAAA,IACxB;AAAO,qBAAe;AAAA,EACxB;AAEA,SAAO,OAAO,KAAK,EAAE;AACvB;AAEA,MAAM,sBAAsB,CAAC,SAAmB;AAC9C,QAAM,aAKC,CAAC;AAER,MAAI,aAAa;AACjB,MAAI,SAAS;AACb,WAAS,YAAY,GAAG,YAAY,KAAK,QAAQ,aAAa;AAC5D,UAAM,OAAO,KAAK;AAOlB,UAAM,kBAAkB;AACxB,UAAM,cAAc;AAIpB,UAAM,YAAY,KAAK;AACvB,UAAM,QAAQ,UAAU,MAAM,IAAI;AAClC,UAAM,QAAQ,CAAC,MAAM,cAAc;AAEjC,UAAI,cAAc,GAAG;AACnB,kBAAU,KAAK;AAAA,MAEjB,WAAW,YAAY,GAAG;AACxB,sBAAc;AACd,iBAAS,KAAK;AAAA,MAChB;AAAA,IACF,CAAC;AAGD,QAAI,KAAK,UAAU,QAAQ,KAAK,YAAY,MAAM;AAChD,iBAAW,KAAK;AAAA,QACd,iBAAiB,kBAAkB;AAAA,QACnC;AAAA,QACA,eAAe;AAAA,QACf,WAAW;AAAA,QACX,GAAG;AAAA,MACL,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;",
6
+ "names": ["chalk"]
7
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var dotenv_exports = {};
20
+ __export(dotenv_exports, {
21
+ mergeDotEnvFileContents: () => mergeDotEnvFileContents
22
+ });
23
+ module.exports = __toCommonJS(dotenv_exports);
24
+ const mergeDotEnvFileContents = (existingFileLines, envContentsToAdd) => {
25
+ const envFileLines = [];
26
+ if (existingFileLines.length === 0) {
27
+ envFileLines.push(
28
+ ...Object.entries(envContentsToAdd).map(([k, v]) => `${k}=${v}`)
29
+ );
30
+ } else {
31
+ const updatedEnvKeys = [];
32
+ for (const ln of existingFileLines) {
33
+ let newline = "";
34
+ for (const [k, v] of Object.entries(envContentsToAdd))
35
+ if (ln.startsWith(`${k}=`)) {
36
+ newline = `${k}=${v}`;
37
+ updatedEnvKeys.push(k);
38
+ }
39
+ if (newline || ln)
40
+ envFileLines.push(newline || ln);
41
+ }
42
+ for (const addKey of Object.keys(envContentsToAdd).filter(
43
+ (efl) => !updatedEnvKeys.find((uek) => {
44
+ var _a;
45
+ return uek.startsWith(`${(_a = efl.split("=")) == null ? void 0 : _a[0]}`);
46
+ })
47
+ )) {
48
+ envFileLines.push(`${addKey}=${envContentsToAdd[addKey]}`);
49
+ }
50
+ }
51
+ return envFileLines;
52
+ };
53
+ // Annotate the CommonJS export names for ESM import in node:
54
+ 0 && (module.exports = {
55
+ mergeDotEnvFileContents
56
+ });
57
+ //# sourceMappingURL=dotenv.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/util/dotenv.ts"],
4
+ "sourcesContent": ["import { EnvContentsToAdd } from \"~/models/DevService\";\n\nexport const mergeDotEnvFileContents = (\n existingFileLines: string[],\n envContentsToAdd: EnvContentsToAdd\n): string[] => {\n const envFileLines: string[] = []; // the new .env file\n if (existingFileLines.length === 0) {\n // There is no env file, just create one from envContentsToAdd\n envFileLines.push(\n ...Object.entries(envContentsToAdd).map(([k, v]) => `${k}=${v}`)\n );\n } else {\n const updatedEnvKeys: string[] = [];\n // Find lines in env that already exist for the keys in envContentsToAdd\n // update them if they exist and add them to envFileLines\n for (const ln of existingFileLines) {\n let newline = '';\n for (const [k, v] of Object.entries(envContentsToAdd))\n if (ln.startsWith(`${k}=`)) {\n newline = `${k}=${v}`;\n updatedEnvKeys.push(k);\n }\n // Ensure an updated line or other lines from the existing env file are re-added\n if (newline || ln) envFileLines.push(newline || ln);\n }\n\n // Add the envContentsToAdd lines to the file that did not previously exist or had an update\n for (const addKey of Object.keys(envContentsToAdd).filter(\n efl =>\n !updatedEnvKeys.find(uek => uek.startsWith(`${efl.split('=')?.[0]}`))\n ) as (keyof typeof envContentsToAdd)[]) {\n envFileLines.push(`${addKey}=${envContentsToAdd[addKey]}`);\n }\n }\n return envFileLines;\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,0BAA0B,CACrC,mBACA,qBACa;AACb,QAAM,eAAyB,CAAC;AAChC,MAAI,kBAAkB,WAAW,GAAG;AAElC,iBAAa;AAAA,MACX,GAAG,OAAO,QAAQ,gBAAgB,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,GAAG;AAAA,IACjE;AAAA,EACF,OAAO;AACL,UAAM,iBAA2B,CAAC;AAGlC,eAAW,MAAM,mBAAmB;AAClC,UAAI,UAAU;AACd,iBAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,gBAAgB;AAClD,YAAI,GAAG,WAAW,GAAG,IAAI,GAAG;AAC1B,oBAAU,GAAG,KAAK;AAClB,yBAAe,KAAK,CAAC;AAAA,QACvB;AAEF,UAAI,WAAW;AAAI,qBAAa,KAAK,WAAW,EAAE;AAAA,IACpD;AAGA,eAAW,UAAU,OAAO,KAAK,gBAAgB,EAAE;AAAA,MACjD,SACE,CAAC,eAAe,KAAK,SAAI;AA9BjC;AA8BoC,mBAAI,WAAW,IAAG,SAAI,MAAM,GAAG,MAAb,mBAAiB,IAAI;AAAA,OAAC;AAAA,IACxE,GAAwC;AACtC,mBAAa,KAAK,GAAG,UAAU,iBAAiB,SAAS;AAAA,IAC3D;AAAA,EACF;AACA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var find_exports = {};
20
+ __export(find_exports, {
21
+ findByIdOrName: () => findByIdOrName
22
+ });
23
+ module.exports = __toCommonJS(find_exports);
24
+ const findByIdOrName = (arr, idOrName, exact = false) => arr.find(
25
+ (r) => r.id === idOrName || r.name.toLowerCase() === idOrName.toLowerCase()
26
+ ) || !exact && arr.find((r) => r.name.toLowerCase().includes(idOrName.toLowerCase()));
27
+ // Annotate the CommonJS export names for ESM import in node:
28
+ 0 && (module.exports = {
29
+ findByIdOrName
30
+ });
31
+ //# sourceMappingURL=find.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/util/find.ts"],
4
+ "sourcesContent": ["export const findByIdOrName = (arr: any[], idOrName: string, exact = false) =>\n arr.find(\n r =>\n r.id === idOrName ||\n r.name.toLowerCase() === idOrName.toLowerCase()\n ) ||\n (!exact &&\n arr.find(r => r.name.toLowerCase().includes(idOrName.toLowerCase())));\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,iBAAiB,CAAC,KAAY,UAAkB,QAAQ,UACnE,IAAI;AAAA,EACF,OACE,EAAE,OAAO,YACT,EAAE,KAAK,YAAY,MAAM,SAAS,YAAY;AAClD,KACC,CAAC,SACA,IAAI,KAAK,OAAK,EAAE,KAAK,YAAY,EAAE,SAAS,SAAS,YAAY,CAAC,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,128 @@
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
+ ciFile;
40
+ config = {};
41
+ info;
42
+ home;
43
+ set ciFileName(fileName) {
44
+ this.ciFile = fileName;
45
+ }
46
+ get ciFileName() {
47
+ var _a;
48
+ return this.ciFile || (this.workflows ? this.type === "github" ? this.workflows.length > 1 ? "[multiple workflows]" : (_a = this.workflows) == null ? void 0 : _a[0] : GITLAB_CI_FILENAME : "[unknown]");
49
+ }
50
+ get ciFilePath() {
51
+ return `${this.gitRepoPath}/${this.ciFileName}`;
52
+ }
53
+ get name() {
54
+ var _a, _b;
55
+ return ((_a = this.info) == null ? void 0 : _a.project) || ((_b = this.home) == null ? void 0 : _b.split("/").pop()) || "[set arg --name]";
56
+ }
57
+ get originUrl() {
58
+ return this.config.remote.origin.url;
59
+ }
60
+ get secretsUri() {
61
+ return `${this.type === "github" ? `${this.home}/settings/secrets/actions` : `${this.home}/-/settings/ci_cd`}`;
62
+ }
63
+ get type() {
64
+ var _a;
65
+ return ((_a = this.info) == null ? void 0 : _a.type) || this.hostType();
66
+ }
67
+ get workflows() {
68
+ return this.type === "github" ? this.githubWorkflows() : this.gitlabWorkflow();
69
+ }
70
+ constructor(gitRepoPath = process.cwd()) {
71
+ this.gitRepoPath = gitRepoPath;
72
+ this.config = this.gitConfig();
73
+ this.home = import_giturl.default.parse(this.originUrl);
74
+ this.info = this.gitInfo();
75
+ }
76
+ gitcwd = () => import_path.default.join(this.gitRepoPath);
77
+ gitInfo = (url = this.originUrl) => import_hosted_git_info.default.fromUrl(url);
78
+ hostType = (url = this.originUrl) => {
79
+ if (url.includes("github.com"))
80
+ return "github";
81
+ return "gitlab";
82
+ };
83
+ gitConfig = (cwd = this.gitRepoPath) => {
84
+ const config = import_parse_git_config.default.sync({
85
+ path: ".git/config",
86
+ expandKeys: true
87
+ });
88
+ if (Object.keys(config || {}).length)
89
+ return config;
90
+ const pathParts = (0, import_os.linuxSlash)(cwd).split("/");
91
+ for (let i = 1; i <= pathParts.length; i++) {
92
+ const relPath = `${Array(i).fill("..").join("/")}/.git/config`;
93
+ const config2 = import_parse_git_config.default.sync({
94
+ path: relPath,
95
+ expandKeys: true
96
+ });
97
+ if (Object.keys(config2 || {}).length) {
98
+ this.gitRepoPath = import_path.default.join(
99
+ this.gitRepoPath,
100
+ Array(i).fill("..").join("/")
101
+ );
102
+ return config2;
103
+ }
104
+ }
105
+ return config;
106
+ };
107
+ githubWorkflows = () => {
108
+ const workflowPath = import_path.default.join(this.gitcwd(), ".github/workflows");
109
+ const workflowFiles = (0, import_file_provider.readFiles)(workflowPath, false);
110
+ const addFolderSuffix = (files) => files.map((f) => `.github/workflows/${f}`);
111
+ if (workflowFiles.some((f) => f.includes("build"))) {
112
+ return addFolderSuffix(workflowFiles.filter((f) => f.includes("build")));
113
+ } else {
114
+ return addFolderSuffix(workflowFiles);
115
+ }
116
+ };
117
+ gitlabWorkflow = (ciFileName = GITLAB_CI_FILENAME) => {
118
+ const workflowPath = this.gitcwd();
119
+ const workflowFilePath = import_path.default.join(workflowPath, ciFileName);
120
+ const workflowFile = (0, import_file_provider.readFile)(workflowFilePath);
121
+ return workflowFile;
122
+ };
123
+ }
124
+ // Annotate the CommonJS export names for ESM import in node:
125
+ 0 && (module.exports = {
126
+ GitHelper
127
+ });
128
+ //# 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 private ciFile?: string;\n\n config = {} as GitConfig;\n info: hostedGitInfo | undefined;\n home: string | undefined;\n\n set ciFileName(fileName: string) {\n this.ciFile = fileName;\n }\n\n get ciFileName() {\n return (\n this.ciFile ||\n (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 }\n get ciFilePath() {\n return `${this.gitRepoPath}/${this.ciFileName}`;\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 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 } else {\n return addFolderSuffix(workflowFiles);\n }\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
+ }
@@ -28,6 +28,7 @@ __export(util_exports, {
28
28
  isJson: () => isJson,
29
29
  isPassword: () => isPassword,
30
30
  isSharedSecret: () => isSharedSecret,
31
+ isSysError: () => isSysError,
31
32
  isUuid: () => isUuid,
32
33
  tryParse: () => tryParse,
33
34
  tryStringify: () => tryStringify,
@@ -36,6 +37,7 @@ __export(util_exports, {
36
37
  module.exports = __toCommonJS(util_exports);
37
38
  var import_mergeWith = __toESM(require("lodash/mergeWith"));
38
39
  var import_logger = require("./logger");
40
+ var import_en_GB = require("../localisation/en-GB.js");
39
41
  const isSharedSecret = (str = "") => str.length > 80 && str.split("-").length === 3 ? str : void 0;
40
42
  const isPassword = (str = "") => !isSharedSecret(str) ? str : void 0;
41
43
  const tryParse = (str) => {
@@ -53,6 +55,7 @@ const tryStringify = (obj) => {
53
55
  return obj;
54
56
  }
55
57
  };
58
+ const isSysError = (error) => (error == null ? void 0 : error.message) !== void 0 && error.stack;
56
59
  const isUuid = (str) => {
57
60
  const regexExp = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/gi;
58
61
  return regexExp.test(str);
@@ -69,8 +72,10 @@ const url = (alias, project) => {
69
72
  };
70
73
  };
71
74
  const Logging = async (language = "en-GB") => {
72
- const { LogMessages: defaultMessages } = await import("../localisation/en-GB.js");
73
- const { LogMessages: localisedMessages } = await import(`../localisation/${language}.js`);
75
+ const defaultMessages = import_en_GB.LogMessages;
76
+ let localisedMessages = defaultMessages;
77
+ if (language === "en-GB") {
78
+ }
74
79
  return {
75
80
  messages: (0, import_mergeWith.default)(
76
81
  localisedMessages,
@@ -86,6 +91,7 @@ const Logging = async (language = "en-GB") => {
86
91
  isJson,
87
92
  isPassword,
88
93
  isSharedSecret,
94
+ isSysError,
89
95
  isUuid,
90
96
  tryParse,
91
97
  tryStringify,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/util/index.ts"],
4
- "sourcesContent": ["import mergeWith from 'lodash/mergeWith';\nimport { Logger } from './logger';\n\nexport const isSharedSecret = (str = '') =>\n str.length > 80 && str.split('-').length === 3 ? str : undefined;\n\nexport const isPassword = (str = '') =>\n !isSharedSecret(str) ? str : undefined;\n\nexport const tryParse = (str: string) => {\n try {\n return typeof str === 'object' ? str : JSON.parse(str);\n } catch (e) {\n return false;\n }\n};\n\nexport const isJson = (str: string) =>\n typeof str === 'object' || !!tryParse(str);\n\nexport const tryStringify = (obj: any) => {\n try {\n return typeof obj === 'object' ? JSON.stringify(obj) : obj;\n } catch (e) {\n return obj;\n }\n};\n\nexport const isUuid = (str: string) => {\n // Regular expression to check if string is a valid UUID\n const regexExp =\n /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/gi;\n\n return regexExp.test(str);\n};\n\nexport const url = (alias: string, project: string) => {\n const projectAndAlias =\n project && project.toLowerCase() !== 'website'\n ? `${project.toLowerCase()}-${alias}`\n : alias;\n return {\n api: `https://api-${alias}.cloud.contensis.com`,\n cms: `https://cms-${alias}.cloud.contensis.com`,\n liveWeb: `https://live-${projectAndAlias}.cloud.contensis.com`,\n previewWeb: `https://preview-${projectAndAlias}.cloud.contensis.com`,\n iisWeb: `https://iis-live-${projectAndAlias}.cloud.contensis.com`,\n iisPreviewWeb: `https://iis-preview-${projectAndAlias}.cloud.contensis.com`,\n };\n};\n\nexport const Logging = async (language = 'en-GB') => {\n const { LogMessages: defaultMessages } = await import(\n `../localisation/en-GB.js`\n );\n const { LogMessages: localisedMessages } = await import(\n `../localisation/${language}.js`\n );\n return {\n messages: mergeWith(\n localisedMessages,\n defaultMessages,\n (v, s) => v || s\n ) as typeof defaultMessages,\n Log: Logger,\n };\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAsB;AACtB,oBAAuB;AAEhB,MAAM,iBAAiB,CAAC,MAAM,OACnC,IAAI,SAAS,MAAM,IAAI,MAAM,GAAG,EAAE,WAAW,IAAI,MAAM;AAElD,MAAM,aAAa,CAAC,MAAM,OAC/B,CAAC,eAAe,GAAG,IAAI,MAAM;AAExB,MAAM,WAAW,CAAC,QAAgB;AACvC,MAAI;AACF,WAAO,OAAO,QAAQ,WAAW,MAAM,KAAK,MAAM,GAAG;AAAA,EACvD,SAAS,GAAP;AACA,WAAO;AAAA,EACT;AACF;AAEO,MAAM,SAAS,CAAC,QACrB,OAAO,QAAQ,YAAY,CAAC,CAAC,SAAS,GAAG;AAEpC,MAAM,eAAe,CAAC,QAAa;AACxC,MAAI;AACF,WAAO,OAAO,QAAQ,WAAW,KAAK,UAAU,GAAG,IAAI;AAAA,EACzD,SAAS,GAAP;AACA,WAAO;AAAA,EACT;AACF;AAEO,MAAM,SAAS,CAAC,QAAgB;AAErC,QAAM,WACJ;AAEF,SAAO,SAAS,KAAK,GAAG;AAC1B;AAEO,MAAM,MAAM,CAAC,OAAe,YAAoB;AACrD,QAAM,kBACJ,WAAW,QAAQ,YAAY,MAAM,YACjC,GAAG,QAAQ,YAAY,KAAK,UAC5B;AACN,SAAO;AAAA,IACL,KAAK,eAAe;AAAA,IACpB,KAAK,eAAe;AAAA,IACpB,SAAS,gBAAgB;AAAA,IACzB,YAAY,mBAAmB;AAAA,IAC/B,QAAQ,oBAAoB;AAAA,IAC5B,eAAe,uBAAuB;AAAA,EACxC;AACF;AAEO,MAAM,UAAU,OAAO,WAAW,YAAY;AACnD,QAAM,EAAE,aAAa,gBAAgB,IAAI,MAAM,OAC7C;AAEF,QAAM,EAAE,aAAa,kBAAkB,IAAI,MAAM,OAC/C,mBAAmB;AAErB,SAAO;AAAA,IACL,cAAU,iBAAAA;AAAA,MACR;AAAA,MACA;AAAA,MACA,CAAC,GAAG,MAAM,KAAK;AAAA,IACjB;AAAA,IACA,KAAK;AAAA,EACP;AACF;",
6
- "names": ["mergeWith"]
4
+ "sourcesContent": ["import mergeWith from 'lodash/mergeWith';\nimport { Logger } from './logger';\nimport { LogMessages as enGB } from '../localisation/en-GB.js';\n\nexport const isSharedSecret = (str = '') =>\n str.length > 80 && str.split('-').length === 3 ? str : undefined;\n\nexport const isPassword = (str = '') =>\n !isSharedSecret(str) ? str : undefined;\n\nexport const tryParse = (str: any) => {\n try {\n return typeof str === 'object' ? str : JSON.parse(str);\n } catch (e) {\n return false;\n }\n};\n\nexport const isJson = (str: string) =>\n typeof str === 'object' || !!tryParse(str);\n\nexport const tryStringify = (obj: any) => {\n try {\n return typeof obj === 'object' ? JSON.stringify(obj) : obj;\n } catch (e) {\n return obj;\n }\n};\n\nexport const isSysError = (error: any): error is Error =>\n error?.message !== undefined && error.stack;\n\nexport const isUuid = (str: string) => {\n // Regular expression to check if string is a valid UUID\n const regexExp =\n /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/gi;\n\n return regexExp.test(str);\n};\n\nexport const url = (alias: string, project: string) => {\n const projectAndAlias =\n project && project.toLowerCase() !== 'website'\n ? `${project.toLowerCase()}-${alias}`\n : alias;\n return {\n api: `https://api-${alias}.cloud.contensis.com`,\n cms: `https://cms-${alias}.cloud.contensis.com`,\n liveWeb: `https://live-${projectAndAlias}.cloud.contensis.com`,\n previewWeb: `https://preview-${projectAndAlias}.cloud.contensis.com`,\n iisWeb: `https://iis-live-${projectAndAlias}.cloud.contensis.com`,\n iisPreviewWeb: `https://iis-preview-${projectAndAlias}.cloud.contensis.com`,\n };\n};\n\nexport const Logging = async (language = 'en-GB') => {\n const defaultMessages = enGB;\n // const { LogMessages: defaultMessages } = await import(\n // `../localisation/en-GB.js`\n // );\n let localisedMessages = defaultMessages;\n\n if (language === 'en-GB') {\n // Using a variable import e.g. `import(`../localisation/${language}.js`);`\n // does not play well with packaged executables\n // So we have to hard code the import for each language individually\n }\n return {\n messages: mergeWith(\n localisedMessages,\n defaultMessages,\n (v, s) => v || s\n ) as typeof defaultMessages,\n Log: Logger,\n };\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAsB;AACtB,oBAAuB;AACvB,mBAAoC;AAE7B,MAAM,iBAAiB,CAAC,MAAM,OACnC,IAAI,SAAS,MAAM,IAAI,MAAM,GAAG,EAAE,WAAW,IAAI,MAAM;AAElD,MAAM,aAAa,CAAC,MAAM,OAC/B,CAAC,eAAe,GAAG,IAAI,MAAM;AAExB,MAAM,WAAW,CAAC,QAAa;AACpC,MAAI;AACF,WAAO,OAAO,QAAQ,WAAW,MAAM,KAAK,MAAM,GAAG;AAAA,EACvD,SAAS,GAAP;AACA,WAAO;AAAA,EACT;AACF;AAEO,MAAM,SAAS,CAAC,QACrB,OAAO,QAAQ,YAAY,CAAC,CAAC,SAAS,GAAG;AAEpC,MAAM,eAAe,CAAC,QAAa;AACxC,MAAI;AACF,WAAO,OAAO,QAAQ,WAAW,KAAK,UAAU,GAAG,IAAI;AAAA,EACzD,SAAS,GAAP;AACA,WAAO;AAAA,EACT;AACF;AAEO,MAAM,aAAa,CAAC,WACzB,+BAAO,aAAY,UAAa,MAAM;AAEjC,MAAM,SAAS,CAAC,QAAgB;AAErC,QAAM,WACJ;AAEF,SAAO,SAAS,KAAK,GAAG;AAC1B;AAEO,MAAM,MAAM,CAAC,OAAe,YAAoB;AACrD,QAAM,kBACJ,WAAW,QAAQ,YAAY,MAAM,YACjC,GAAG,QAAQ,YAAY,KAAK,UAC5B;AACN,SAAO;AAAA,IACL,KAAK,eAAe;AAAA,IACpB,KAAK,eAAe;AAAA,IACpB,SAAS,gBAAgB;AAAA,IACzB,YAAY,mBAAmB;AAAA,IAC/B,QAAQ,oBAAoB;AAAA,IAC5B,eAAe,uBAAuB;AAAA,EACxC;AACF;AAEO,MAAM,UAAU,OAAO,WAAW,YAAY;AACnD,QAAM,kBAAkB,aAAAA;AAIxB,MAAI,oBAAoB;AAExB,MAAI,aAAa,SAAS;AAAA,EAI1B;AACA,SAAO;AAAA,IACL,cAAU,iBAAAC;AAAA,MACR;AAAA,MACA;AAAA,MACA,CAAC,GAAG,MAAM,KAAK;AAAA,IACjB;AAAA,IACA,KAAK;AAAA,EACP;AACF;",
6
+ "names": ["enGB", "mergeWith"]
7
7
  }
@@ -32,7 +32,7 @@ module.exports = __toCommonJS(logger_exports);
32
32
  var import_chalk = __toESM(require("chalk"));
33
33
  var import_dateformat = __toESM(require("dateformat"));
34
34
  var import_deep_cleaner = __toESM(require("deep-cleaner"));
35
- var import_progress = __toESM(require("progress"));
35
+ var import_printable_characters = require("printable-characters");
36
36
  var import__ = require(".");
37
37
  class Logger {
38
38
  static isUserTerminal = !!process.stdout.columns;
@@ -53,13 +53,14 @@ class Logger {
53
53
  )} ${content}`;
54
54
  console.log(message);
55
55
  };
56
- static error = (content, err) => {
56
+ static error = (content, err, newline = "\n") => {
57
57
  const message = `${Logger.getPrefix()} ${Logger.errorText(
58
58
  `${Logger.isUserTerminal ? "\u274C" : "[ERROR]"} ${content}${err ? `
59
59
 
60
- ${JSON.stringify(err, null, 2)}` : ""}`
61
- )}
62
- `;
60
+ ${Logger.infoText(
61
+ (0, import__.isSysError)(err) ? err.toString() : JSON.stringify(err, null, 2)
62
+ )}` : ""}`
63
+ )}${newline}`;
63
64
  if (progress.active)
64
65
  progress.current.interrupt(message);
65
66
  else
@@ -110,39 +111,86 @@ ${Logger.standardText(content)}`;
110
111
  console.log(message);
111
112
  progress.current.interrupt(message);
112
113
  };
114
+ static debug = (content) => {
115
+ if (["true", "1"].includes(process.env.debug || "")) {
116
+ const message = `${Logger.getPrefix()} ${Logger.isUserTerminal ? import_chalk.default.bgGrey(" \u2699 ") : "[DEBUG]"} ${Logger.infoText(content)}`;
117
+ if (progress.active)
118
+ progress.current.interrupt(message);
119
+ else
120
+ console.log(message);
121
+ }
122
+ };
113
123
  static json = (content, depth = 9) => console.dir((0, import_deep_cleaner.default)(content), { colors: true, depth });
114
124
  static mixed = (contentArray) => console.log(`${Logger.getPrefix()} ${contentArray.join(" ")}`);
115
125
  static line = () => Logger.raw(` ${Logger.infoText(`-------------------------------------`)}`);
116
126
  static object = (content) => {
117
- var _a, _b;
118
- for (const [key, value] of Object.entries(content)) {
127
+ var _a, _b, _c, _d, _e, _f;
128
+ for (const [key, value] of Object.entries(content || {})) {
119
129
  if (value && typeof value === "object") {
120
130
  Logger.raw(` ${import_chalk.default.bold.grey(key)}:`);
121
131
  if (key === "fields" && Array.isArray(value)) {
122
132
  for (const field of value || []) {
123
133
  Logger.raw(
124
- ` ${import_chalk.default.bold(field.id)}: ${import_chalk.default.grey(field.dataType)}`
134
+ ` ${import_chalk.default.bold(field.id)}${field.id === content.entryTitleField ? "**" : ((_a = field.validations.minCount) == null ? void 0 : _a.value) || typeof ((_b = field.validations.required) == null ? void 0 : _b.message) !== "undefined" ? "*" : ""}: ${import_chalk.default.grey(
135
+ `${field.dataType}${field.dataFormat ? `<${Array.isArray(
136
+ (_c = field.validations.allowedFieldTypes) == null ? void 0 : _c.fields
137
+ ) ? `composer[${field.validations.allowedFieldTypes.fields.map((f) => f.id).join(" | ")}]` : field.dataFormat}${field.dataFormat === "entry" ? `, ${field.validations.allowedContentTypes.contentTypes.join(
138
+ " | "
139
+ )}` : ""}>` : ""}${((_d = field.validations.maxLength) == null ? void 0 : _d.value) ? `(${field.validations.maxLength.value})` : ""}`
140
+ )}`
125
141
  );
126
142
  }
127
143
  } else if (key === "groups" && Array.isArray(value)) {
128
144
  for (const group of value || []) {
129
- const description = Object.keys(group.description).length && ((_a = Object.values(group.description)) == null ? void 0 : _a[0]);
145
+ const description = Object.keys(group.description).length && ((_e = Object.values(group.description)) == null ? void 0 : _e[0]);
130
146
  Logger.raw(
131
- ` ${import_chalk.default.bold(group.id)}${description ? `: ${import_chalk.default.grey((_b = Object.values(group.description)) == null ? void 0 : _b[0])}` : ""}`
147
+ ` ${import_chalk.default.bold(group.id)}${description ? `: ${import_chalk.default.grey((_f = Object.values(group.description)) == null ? void 0 : _f[0])}` : ""}`
132
148
  );
133
149
  }
134
150
  } else {
135
- for (const [innerkey, innervalue] of Object.entries(value)) {
136
- if (innervalue && typeof innervalue === "object") {
137
- Logger.raw(` ${import_chalk.default.bold.grey(innerkey)}:`);
138
- console.table(innervalue);
139
- } else if (typeof innervalue !== "undefined" || innervalue !== null) {
140
- Logger.raw(` ${import_chalk.default.bold.grey(innerkey)}: ${innervalue}`);
151
+ Logger.objectRecurse(value, 3, " ");
152
+ }
153
+ } else if (typeof value !== "undefined" && value !== null) {
154
+ const valueText = key === "id" && typeof value === "string" ? Logger.highlightText(value) : value;
155
+ Logger.raw(` ${import_chalk.default.bold.grey(key)}: ${valueText}`);
156
+ }
157
+ }
158
+ };
159
+ static objectRecurse = (content, depth = 3, indent = "") => {
160
+ if (Array.isArray(content)) {
161
+ for (const item of content) {
162
+ if (item && typeof item === "object") {
163
+ if (Array.isArray(item) && depth > 3)
164
+ Logger.raw(import_chalk.default.grey(`${indent} [${item.join(", ")}]`));
165
+ else
166
+ Logger.objectRecurse(item, depth + 1, `${indent} `);
167
+ } else
168
+ Logger.raw(`${indent}${item}`);
169
+ }
170
+ } else {
171
+ let pos = 0;
172
+ for (const [key, value] of Object.entries(content)) {
173
+ const thisIndent = pos === 0 ? `${indent.substring(0, indent.length - 2)}- ` : indent;
174
+ if (Array.isArray(value)) {
175
+ if (value.length)
176
+ Logger.raw(`${thisIndent}${import_chalk.default.bold.grey(key)}:`);
177
+ for (const item of value) {
178
+ if (item && typeof item === "object") {
179
+ if (Array.isArray(item) && depth > 3)
180
+ Logger.raw(import_chalk.default.grey(`${indent} [${item.join(", ")}]`));
181
+ else
182
+ Logger.objectRecurse(item, depth + 1, `${indent} `);
183
+ } else {
184
+ Logger.raw(`${indent} ${item}`);
141
185
  }
142
186
  }
187
+ } else if (value && typeof value === "object") {
188
+ Logger.raw(`${indent}${import_chalk.default.bold.grey(key)}:`);
189
+ Logger.objectRecurse(value, depth + 1, `${indent} `);
190
+ } else if (typeof value !== "undefined" && value !== null) {
191
+ Logger.raw(`${thisIndent}${import_chalk.default.bold.grey(key)}: ${value}`);
143
192
  }
144
- } else if (typeof value !== "undefined" || value !== null) {
145
- Logger.raw(` ${import_chalk.default.bold.grey(key)}: ${value}`);
193
+ pos++;
146
194
  }
147
195
  }
148
196
  };
@@ -152,28 +200,41 @@ ${Logger.standardText(content)}`;
152
200
  else
153
201
  console.log(content);
154
202
  };
203
+ static limits = (content, displayLength = 30) => {
204
+ const consoleWidth = process.stdout.columns;
205
+ console.info(
206
+ consoleWidth ? content.split("\n").slice(0, consoleWidth ? displayLength : void 0).map(
207
+ (line) => consoleWidth && (0, import_printable_characters.strlen)(line) > consoleWidth ? (0, import_printable_characters.first)(line, consoleWidth) : line
208
+ ).join("\n") : content.replace(import_printable_characters.ansiEscapeCodes, "")
209
+ );
210
+ const tableArray = content.split("\n");
211
+ if (consoleWidth && tableArray.length > displayLength)
212
+ console.info(`
213
+ `, `- and ${tableArray.length - displayLength} more...`);
214
+ };
155
215
  }
156
216
  const logError = (err = new Error("Undefined error"), msg, level = "error") => {
157
217
  var _a;
158
218
  Logger[level](msg || err.message || ((_a = err == null ? void 0 : err.data) == null ? void 0 : _a.message) || err.Message);
159
219
  (Array.isArray(err) ? err : [err]).map((error) => {
220
+ if (typeof error === "string") {
221
+ Logger.raw(`${Logger.infoText(error)}
222
+ `);
223
+ return;
224
+ }
160
225
  if ("stack" in error)
161
- Logger.raw(` ${Logger.infoText(error.stack)}`);
226
+ Logger.raw(` ${Logger.infoText(error.stack)}
227
+ `);
162
228
  if ("data" in error)
163
- Logger.raw(` ${Logger.infoText((0, import__.tryStringify)(error.data))}`);
229
+ Logger.raw(` ${Logger.infoText((0, import__.tryStringify)(error.data))}
230
+ `);
164
231
  });
165
232
  return null;
166
233
  };
167
234
  const progress = {
168
- active: false,
169
- done: () => new import_progress.default("", 0),
170
- colours: { green: "\x1B[42m \x1B[0m", red: "\x1B[41m \x1B[0m" },
171
- current: new import_progress.default(`:bar`, {
172
- complete: "=",
173
- incomplete: " ",
174
- width: 20,
175
- total: 100
176
- })
235
+ current: { interrupt: (x) => {
236
+ } },
237
+ active: false
177
238
  };
178
239
  // Annotate the CommonJS export names for ESM import in node:
179
240
  0 && (module.exports = {