alex-c-line 2.10.0 → 2.10.1

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/index.cjs CHANGED
@@ -325,14 +325,17 @@ async function getLicenseCheck(program) {
325
325
  code: "LICENSE_CHECK_ERROR"
326
326
  });
327
327
  const licenseCheck = parseLicenseCheck(JSON.parse(stdout.trim()));
328
- if (Object.keys(licenseCheck).length === 0) return "No licenses found.";
328
+ const licenseEntries = Object.entries(licenseCheck);
329
+ if (licenseEntries.length === 0) return "No licenses found.";
329
330
  const licenseCheckSummaryPath = node_path.default.join(await ALEX_C_LINE_PACKAGE_ROOT, "templates", "dependencyAudit", "licenseCheck", "summary");
330
331
  const summaryTableTemplate = await (0, node_fs_promises.readFile)(node_path.default.join(licenseCheckSummaryPath, "table.html"), "utf-8");
331
332
  const summaryTableRowTemplate = await (0, node_fs_promises.readFile)(node_path.default.join(licenseCheckSummaryPath, "tableRow.html"), "utf-8");
332
- const summary = summaryTableTemplate.replace("{{tableRows}}", Object.entries(licenseCheck).map(([license, data]) => {
333
- return summaryTableRowTemplate.replace("{{license}}", license).replace("{{count}}", data.length.toString());
333
+ const summary = summaryTableTemplate.replace("{{tableRows}}", licenseEntries.toSorted((0, _alextheman_utility.sortBy)(([_, data]) => {
334
+ return data.length;
335
+ }, "desc")).map(([license, data]) => {
336
+ return summaryTableRowTemplate.replace("{{license}}", (0, _alextheman_utility.escapeHTML)(license)).replace("{{count}}", (0, _alextheman_utility.escapeHTML)(data.length.toString()));
334
337
  }).join("\n"));
335
- const invalidLicenses = Object.keys(licenseCheck).filter((license) => {
338
+ const invalidLicenses = licenseEntries.filter(([license, _]) => {
336
339
  return !ALLOWED_LICENSES.includes(license);
337
340
  });
338
341
  let invalidSummary;
@@ -343,12 +346,10 @@ async function getLicenseCheck(program) {
343
346
  const invalidLicensesTableRowTemplate = await (0, node_fs_promises.readFile)(node_path.default.join(invalidLicensesInvalidPath, "tableRow.html"), "utf-8");
344
347
  const invalidLicensesListTemplate = await (0, node_fs_promises.readFile)(node_path.default.join(invalidLicensesInvalidPath, "list.html"), "utf-8");
345
348
  const invalidLicensesListItemTemplate = await (0, node_fs_promises.readFile)(node_path.default.join(invalidLicensesInvalidPath, "listItem.html"), "utf-8");
346
- invalidSummary = invalidLicensesTableTemplate.replace("{{tableRows}}", Object.entries(licenseCheck).filter(([license]) => {
347
- return !ALLOWED_LICENSES.includes(license);
348
- }).map(([license, data]) => {
349
- return invalidLicensesTableRowTemplate.replaceAll("{{license}}", license).replace("{{count}}", data.length.toString()).replace("{{dependencies}}", invalidLicensesListTemplate.replace("{{listItems}}", data.flatMap((item) => {
349
+ invalidSummary = invalidLicensesTableTemplate.replace("{{tableRows}}", invalidLicenses.map(([license, data]) => {
350
+ return invalidLicensesTableRowTemplate.replaceAll("{{license}}", (0, _alextheman_utility.escapeHTML)(license)).replace("{{count}}", (0, _alextheman_utility.escapeHTML)(data.length.toString())).replace("{{dependencies}}", invalidLicensesListTemplate.replace("{{listItems}}", data.flatMap((item) => {
350
351
  return item.versions.map((version) => {
351
- return invalidLicensesListItemTemplate.replace("{{name}}", item.name).replace("{{version}}", version);
352
+ return invalidLicensesListItemTemplate.replace("{{name}}", (0, _alextheman_utility.escapeHTML)(item.name)).replace("{{version}}", (0, _alextheman_utility.escapeHTML)(version));
352
353
  });
353
354
  }).join("")));
354
355
  }).join("\n"));
@@ -393,7 +394,7 @@ async function getOutdatedDependencies(program) {
393
394
  const tableTemplate = await (0, node_fs_promises.readFile)(node_path.default.join(outdatedTemplatesPath, "table.html"), "utf-8");
394
395
  const tableRowTemplate = await (0, node_fs_promises.readFile)(node_path.default.join(outdatedTemplatesPath, "tableRow.html"), "utf-8");
395
396
  return tableTemplate.replace("{{tableRows}}", Object.entries(outdatedDependencies).map(([packageName, data]) => {
396
- return tableRowTemplate.replace("{{packageName}}", packageName).replace("{{currentVersion}}", data.current.toString()).replace("{{latestVersion}}", data.latest.toString()).replace("{{isDeprecated}}", data.isDeprecated ? "Yes" : "No").replace("{{dependencyGroup}}", data.dependencyType);
397
+ return tableRowTemplate.replace("{{packageName}}", (0, _alextheman_utility.escapeHTML)(packageName)).replace("{{currentVersion}}", (0, _alextheman_utility.escapeHTML)(data.current.toString())).replace("{{latestVersion}}", (0, _alextheman_utility.escapeHTML)(data.latest.toString())).replace("{{isDeprecated}}", data.isDeprecated ? "Yes" : "No").replace("{{dependencyGroup}}", (0, _alextheman_utility.escapeHTML)(data.dependencyType));
397
398
  }).join("\n"));
398
399
  }
399
400
  //#endregion
@@ -423,8 +424,8 @@ async function getPeerCheck(program) {
423
424
  if (Object.keys(peerCheck["."].bad).length === 0) return "No peer dependency issues found";
424
425
  return peerCheckTableTemplate.replace("{{tableRows}}", Object.entries(peerCheck["."].bad).flatMap(([packageName, data]) => {
425
426
  return data.map((item) => {
426
- return peerCheckTableRowTemplate.replace("{{packageName}}", packageName).replace("{{currentVersion}}", item.foundVersion.toString()).replace("{{wantedRange}}", item.wantedRange).replace("{{parentDependencies}}", item.parents.map((parent) => {
427
- return `${parent.name}@${parent.version}`;
427
+ return peerCheckTableRowTemplate.replace("{{packageName}}", (0, _alextheman_utility.escapeHTML)(packageName)).replace("{{currentVersion}}", (0, _alextheman_utility.escapeHTML)(item.foundVersion.toString())).replace("{{wantedRange}}", (0, _alextheman_utility.escapeHTML)(item.wantedRange)).replace("{{parentDependencies}}", item.parents.map((parent) => {
428
+ return `${(0, _alextheman_utility.escapeHTML)(parent.name)}@${parent.version}`;
428
429
  }).join(", "));
429
430
  });
430
431
  }).join("\n"));
@@ -478,12 +479,12 @@ async function getSecurityAudit(program) {
478
479
  const auditTable = tableTemplate.replace("{{tableRows}}", Object.entries(securityAudit.advisories).toSorted((0, _alextheman_utility.sortBy)(([_, advisory]) => {
479
480
  return severityOrder[advisory.severity];
480
481
  }, "desc")).map(([id, data]) => {
481
- return tableRowTemplate.replace("{{advisoryId}}", id).replace("{{severity}}", data.severity).replace("{{packageName}}", data.module_name).replace("{{title}}", data.title).replace("{{affected}}", data.vulnerable_versions).replace("{{patched}}", data.patched_versions).replace("{{url}}", data.url);
482
+ return tableRowTemplate.replace("{{advisoryId}}", (0, _alextheman_utility.escapeHTML)(id)).replace("{{severity}}", (0, _alextheman_utility.escapeHTML)(data.severity)).replace("{{packageName}}", (0, _alextheman_utility.escapeHTML)(data.module_name)).replace("{{title}}", (0, _alextheman_utility.escapeHTML)(data.title)).replace("{{affected}}", (0, _alextheman_utility.escapeHTML)(data.vulnerable_versions)).replace("{{patched}}", (0, _alextheman_utility.escapeHTML)(data.patched_versions)).replace("{{url}}", (0, _alextheman_utility.escapeHTML)(data.url));
482
483
  }).join("\n"));
483
484
  return _alextheman_utility.normaliseIndents`
484
485
  ### Summary
485
486
 
486
- ${(await (0, node_fs_promises.readFile)(node_path.default.join(auditTemplatesPath, "summary.html"), "utf-8")).replace("{{info}}", securityAudit.metadata.vulnerabilities.info.toString()).replace("{{low}}", securityAudit.metadata.vulnerabilities.low.toString()).replace("{{moderate}}", securityAudit.metadata.vulnerabilities.moderate.toString()).replace("{{high}}", securityAudit.metadata.vulnerabilities.high.toString()).replace("{{critical}}", securityAudit.metadata.vulnerabilities.critical.toString())}
487
+ ${(await (0, node_fs_promises.readFile)(node_path.default.join(auditTemplatesPath, "summary.html"), "utf-8")).replace("{{info}}", (0, _alextheman_utility.escapeHTML)(securityAudit.metadata.vulnerabilities.info.toString())).replace("{{low}}", (0, _alextheman_utility.escapeHTML)(securityAudit.metadata.vulnerabilities.low.toString())).replace("{{moderate}}", (0, _alextheman_utility.escapeHTML)(securityAudit.metadata.vulnerabilities.moderate.toString())).replace("{{high}}", (0, _alextheman_utility.escapeHTML)(securityAudit.metadata.vulnerabilities.high.toString())).replace("{{critical}}", (0, _alextheman_utility.escapeHTML)(securityAudit.metadata.vulnerabilities.critical.toString()))}
487
488
 
488
489
  ### Audit Results
489
490
 
@@ -1422,7 +1423,7 @@ function template(program) {
1422
1423
  //#endregion
1423
1424
  //#region package.json
1424
1425
  var name = "alex-c-line";
1425
- var version$1 = "2.10.0";
1426
+ var version$1 = "2.10.1";
1426
1427
  var description = "Command-line tool with commands to streamline the developer workflow.";
1427
1428
  //#endregion
1428
1429
  //#region src/utility/updates/checkUpdate.ts
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@ import boxen from "boxen";
7
7
  import figlet from "figlet";
8
8
  import envPaths from "env-paths";
9
9
  import path from "node:path";
10
- import { ONE_DAY_IN_MILLISECONDS, VersionNumber, az, fillArray, getStringsAndInterpolations, interpolate, isTemplateStringsArray, kebabToCamel, normaliseIndents, omitProperties, parseBoolean, parseVersionType, removeDuplicates, removeUndefinedFromObject, sortBy, stringifyDotenv } from "@alextheman/utility";
10
+ import { ONE_DAY_IN_MILLISECONDS, VersionNumber, az, escapeHTML, fillArray, getStringsAndInterpolations, interpolate, isTemplateStringsArray, kebabToCamel, normaliseIndents, omitProperties, parseBoolean, parseVersionType, removeDuplicates, removeUndefinedFromObject, sortBy, stringifyDotenv } from "@alextheman/utility";
11
11
  import { confirm, input, password, select } from "@inquirer/prompts";
12
12
  import { access, mkdir, readFile, readdir, rm, stat, writeFile } from "node:fs/promises";
13
13
  import { parse } from "dotenv";
@@ -294,14 +294,17 @@ async function getLicenseCheck(program) {
294
294
  code: "LICENSE_CHECK_ERROR"
295
295
  });
296
296
  const licenseCheck = parseLicenseCheck(JSON.parse(stdout.trim()));
297
- if (Object.keys(licenseCheck).length === 0) return "No licenses found.";
297
+ const licenseEntries = Object.entries(licenseCheck);
298
+ if (licenseEntries.length === 0) return "No licenses found.";
298
299
  const licenseCheckSummaryPath = path.join(await ALEX_C_LINE_PACKAGE_ROOT, "templates", "dependencyAudit", "licenseCheck", "summary");
299
300
  const summaryTableTemplate = await readFile(path.join(licenseCheckSummaryPath, "table.html"), "utf-8");
300
301
  const summaryTableRowTemplate = await readFile(path.join(licenseCheckSummaryPath, "tableRow.html"), "utf-8");
301
- const summary = summaryTableTemplate.replace("{{tableRows}}", Object.entries(licenseCheck).map(([license, data]) => {
302
- return summaryTableRowTemplate.replace("{{license}}", license).replace("{{count}}", data.length.toString());
302
+ const summary = summaryTableTemplate.replace("{{tableRows}}", licenseEntries.toSorted(sortBy(([_, data]) => {
303
+ return data.length;
304
+ }, "desc")).map(([license, data]) => {
305
+ return summaryTableRowTemplate.replace("{{license}}", escapeHTML(license)).replace("{{count}}", escapeHTML(data.length.toString()));
303
306
  }).join("\n"));
304
- const invalidLicenses = Object.keys(licenseCheck).filter((license) => {
307
+ const invalidLicenses = licenseEntries.filter(([license, _]) => {
305
308
  return !ALLOWED_LICENSES.includes(license);
306
309
  });
307
310
  let invalidSummary;
@@ -312,12 +315,10 @@ async function getLicenseCheck(program) {
312
315
  const invalidLicensesTableRowTemplate = await readFile(path.join(invalidLicensesInvalidPath, "tableRow.html"), "utf-8");
313
316
  const invalidLicensesListTemplate = await readFile(path.join(invalidLicensesInvalidPath, "list.html"), "utf-8");
314
317
  const invalidLicensesListItemTemplate = await readFile(path.join(invalidLicensesInvalidPath, "listItem.html"), "utf-8");
315
- invalidSummary = invalidLicensesTableTemplate.replace("{{tableRows}}", Object.entries(licenseCheck).filter(([license]) => {
316
- return !ALLOWED_LICENSES.includes(license);
317
- }).map(([license, data]) => {
318
- return invalidLicensesTableRowTemplate.replaceAll("{{license}}", license).replace("{{count}}", data.length.toString()).replace("{{dependencies}}", invalidLicensesListTemplate.replace("{{listItems}}", data.flatMap((item) => {
318
+ invalidSummary = invalidLicensesTableTemplate.replace("{{tableRows}}", invalidLicenses.map(([license, data]) => {
319
+ return invalidLicensesTableRowTemplate.replaceAll("{{license}}", escapeHTML(license)).replace("{{count}}", escapeHTML(data.length.toString())).replace("{{dependencies}}", invalidLicensesListTemplate.replace("{{listItems}}", data.flatMap((item) => {
319
320
  return item.versions.map((version) => {
320
- return invalidLicensesListItemTemplate.replace("{{name}}", item.name).replace("{{version}}", version);
321
+ return invalidLicensesListItemTemplate.replace("{{name}}", escapeHTML(item.name)).replace("{{version}}", escapeHTML(version));
321
322
  });
322
323
  }).join("")));
323
324
  }).join("\n"));
@@ -362,7 +363,7 @@ async function getOutdatedDependencies(program) {
362
363
  const tableTemplate = await readFile(path.join(outdatedTemplatesPath, "table.html"), "utf-8");
363
364
  const tableRowTemplate = await readFile(path.join(outdatedTemplatesPath, "tableRow.html"), "utf-8");
364
365
  return tableTemplate.replace("{{tableRows}}", Object.entries(outdatedDependencies).map(([packageName, data]) => {
365
- return tableRowTemplate.replace("{{packageName}}", packageName).replace("{{currentVersion}}", data.current.toString()).replace("{{latestVersion}}", data.latest.toString()).replace("{{isDeprecated}}", data.isDeprecated ? "Yes" : "No").replace("{{dependencyGroup}}", data.dependencyType);
366
+ return tableRowTemplate.replace("{{packageName}}", escapeHTML(packageName)).replace("{{currentVersion}}", escapeHTML(data.current.toString())).replace("{{latestVersion}}", escapeHTML(data.latest.toString())).replace("{{isDeprecated}}", data.isDeprecated ? "Yes" : "No").replace("{{dependencyGroup}}", escapeHTML(data.dependencyType));
366
367
  }).join("\n"));
367
368
  }
368
369
  //#endregion
@@ -392,8 +393,8 @@ async function getPeerCheck(program) {
392
393
  if (Object.keys(peerCheck["."].bad).length === 0) return "No peer dependency issues found";
393
394
  return peerCheckTableTemplate.replace("{{tableRows}}", Object.entries(peerCheck["."].bad).flatMap(([packageName, data]) => {
394
395
  return data.map((item) => {
395
- return peerCheckTableRowTemplate.replace("{{packageName}}", packageName).replace("{{currentVersion}}", item.foundVersion.toString()).replace("{{wantedRange}}", item.wantedRange).replace("{{parentDependencies}}", item.parents.map((parent) => {
396
- return `${parent.name}@${parent.version}`;
396
+ return peerCheckTableRowTemplate.replace("{{packageName}}", escapeHTML(packageName)).replace("{{currentVersion}}", escapeHTML(item.foundVersion.toString())).replace("{{wantedRange}}", escapeHTML(item.wantedRange)).replace("{{parentDependencies}}", item.parents.map((parent) => {
397
+ return `${escapeHTML(parent.name)}@${parent.version}`;
397
398
  }).join(", "));
398
399
  });
399
400
  }).join("\n"));
@@ -447,12 +448,12 @@ async function getSecurityAudit(program) {
447
448
  const auditTable = tableTemplate.replace("{{tableRows}}", Object.entries(securityAudit.advisories).toSorted(sortBy(([_, advisory]) => {
448
449
  return severityOrder[advisory.severity];
449
450
  }, "desc")).map(([id, data]) => {
450
- return tableRowTemplate.replace("{{advisoryId}}", id).replace("{{severity}}", data.severity).replace("{{packageName}}", data.module_name).replace("{{title}}", data.title).replace("{{affected}}", data.vulnerable_versions).replace("{{patched}}", data.patched_versions).replace("{{url}}", data.url);
451
+ return tableRowTemplate.replace("{{advisoryId}}", escapeHTML(id)).replace("{{severity}}", escapeHTML(data.severity)).replace("{{packageName}}", escapeHTML(data.module_name)).replace("{{title}}", escapeHTML(data.title)).replace("{{affected}}", escapeHTML(data.vulnerable_versions)).replace("{{patched}}", escapeHTML(data.patched_versions)).replace("{{url}}", escapeHTML(data.url));
451
452
  }).join("\n"));
452
453
  return normaliseIndents`
453
454
  ### Summary
454
455
 
455
- ${(await readFile(path.join(auditTemplatesPath, "summary.html"), "utf-8")).replace("{{info}}", securityAudit.metadata.vulnerabilities.info.toString()).replace("{{low}}", securityAudit.metadata.vulnerabilities.low.toString()).replace("{{moderate}}", securityAudit.metadata.vulnerabilities.moderate.toString()).replace("{{high}}", securityAudit.metadata.vulnerabilities.high.toString()).replace("{{critical}}", securityAudit.metadata.vulnerabilities.critical.toString())}
456
+ ${(await readFile(path.join(auditTemplatesPath, "summary.html"), "utf-8")).replace("{{info}}", escapeHTML(securityAudit.metadata.vulnerabilities.info.toString())).replace("{{low}}", escapeHTML(securityAudit.metadata.vulnerabilities.low.toString())).replace("{{moderate}}", escapeHTML(securityAudit.metadata.vulnerabilities.moderate.toString())).replace("{{high}}", escapeHTML(securityAudit.metadata.vulnerabilities.high.toString())).replace("{{critical}}", escapeHTML(securityAudit.metadata.vulnerabilities.critical.toString()))}
456
457
 
457
458
  ### Audit Results
458
459
 
@@ -1391,7 +1392,7 @@ function template(program) {
1391
1392
  //#endregion
1392
1393
  //#region package.json
1393
1394
  var name = "alex-c-line";
1394
- var version$1 = "2.10.0";
1395
+ var version$1 = "2.10.1";
1395
1396
  var description = "Command-line tool with commands to streamline the developer workflow.";
1396
1397
  //#endregion
1397
1398
  //#region src/utility/updates/checkUpdate.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alex-c-line",
3
- "version": "2.10.0",
3
+ "version": "2.10.1",
4
4
  "description": "Command-line tool with commands to streamline the developer workflow.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -34,7 +34,7 @@
34
34
  "templates"
35
35
  ],
36
36
  "dependencies": {
37
- "@alextheman/utility": "5.21.0",
37
+ "@alextheman/utility": "5.22.0",
38
38
  "@inquirer/prompts": "8.5.2",
39
39
  "axios": "1.17.0",
40
40
  "boxen": "8.0.1",