alex-c-line 1.31.0 → 1.32.0

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
@@ -59,6 +59,7 @@ let _alextheman_utility_node = require("@alextheman/utility/node");
59
59
  let supports_color = require("supports-color");
60
60
  supports_color = __toESM(supports_color);
61
61
  let node_crypto = require("node:crypto");
62
+ let semver = require("semver");
62
63
 
63
64
  //#region src/utility/miscellaneous/asciiToPng.ts
64
65
  async function asciiToPng(ascii, options) {
@@ -1316,7 +1317,7 @@ function parseZodSchemaForProgram(programError, schema, data) {
1316
1317
  //#endregion
1317
1318
  //#region package.json
1318
1319
  var name = "alex-c-line";
1319
- var version = "1.31.0";
1320
+ var version = "1.32.0";
1320
1321
  var description = "Command-line tool with commands to streamline the developer workflow.";
1321
1322
 
1322
1323
  //#endregion
@@ -1619,6 +1620,50 @@ function incrementVersion(program) {
1619
1620
  });
1620
1621
  }
1621
1622
 
1623
+ //#endregion
1624
+ //#region src/utility/constants/successPrefix.ts
1625
+ const successPrefix = chalk.default.green("✓");
1626
+
1627
+ //#endregion
1628
+ //#region src/cli/commands/package-json/noPreReleaseDependencies.ts
1629
+ function isPreRelease(dependencyVersionRange) {
1630
+ const minimumFromRange = (0, semver.minVersion)(dependencyVersionRange);
1631
+ return minimumFromRange !== null && (0, semver.prerelease)(minimumFromRange) !== null;
1632
+ }
1633
+ async function noPreReleaseDependencies(program) {
1634
+ const packageJson = await (0, _alextheman_utility_internal.getPackageJsonContents)(process.cwd());
1635
+ if (packageJson === null) throw (0, _alextheman_utility_internal.packageJsonNotFoundError)(process.cwd());
1636
+ const dependencies = (0, _alextheman_utility_internal.getDependenciesFromGroup)(packageJson, "dependencies");
1637
+ const devDependencies = (0, _alextheman_utility_internal.getDependenciesFromGroup)(packageJson, "devDependencies");
1638
+ const preReleaseDependencies = {};
1639
+ const preReleaseDevDependencies = {};
1640
+ for (const [dependencyName, dependencyVersionRange] of Object.entries(dependencies)) if (isPreRelease(dependencyVersionRange)) preReleaseDependencies[dependencyName] = dependencyVersionRange;
1641
+ for (const [dependencyName, dependencyVersionRange] of Object.entries(devDependencies)) if (isPreRelease(dependencyVersionRange)) preReleaseDevDependencies[dependencyName] = dependencyVersionRange;
1642
+ if (Object.keys(preReleaseDependencies).length !== 0 || Object.keys(preReleaseDevDependencies).length !== 0) program.error(_alextheman_utility.normaliseIndents`
1643
+ ${errorPrefix}: Pre-release version pinning is not allowed. Found the following violations:
1644
+
1645
+ ${JSON.stringify({
1646
+ dependencies: preReleaseDependencies,
1647
+ devDependencies: preReleaseDevDependencies
1648
+ }, null, 2)}
1649
+ `, {
1650
+ exitCode: 2,
1651
+ code: "UNEXPECTED_PRE_RELEASE_VERSION"
1652
+ });
1653
+ console.info(`${successPrefix} No pre-release versions found!`);
1654
+ }
1655
+
1656
+ //#endregion
1657
+ //#region src/cli/commands/package-json/index.ts
1658
+ const RuleName = { NO_PRE_RELEASE_DEPENDENCIES: "no-pre-release-dependencies" };
1659
+ function packageJson(program) {
1660
+ program.command("package-json").description("Run checks on your package.json file").argument("[ruleName]", "The name of the rule to check", (rawRuleName) => {
1661
+ return (0, _alextheman_utility.parseZodSchema)(zod.default.enum(RuleName), rawRuleName);
1662
+ }).action(async (ruleName) => {
1663
+ if (ruleName === "no-pre-release-dependencies") return await noPreReleaseDependencies(program);
1664
+ });
1665
+ }
1666
+
1622
1667
  //#endregion
1623
1668
  //#region src/cli/commands/index.ts
1624
1669
  function createCommands(program) {
@@ -1649,7 +1694,8 @@ function createCommands(program) {
1649
1694
  setReleaseStatus2,
1650
1695
  update,
1651
1696
  useLocalPackage,
1652
- uuid
1697
+ uuid,
1698
+ packageJson
1653
1699
  });
1654
1700
  }
1655
1701
 
package/dist/index.js CHANGED
@@ -15,12 +15,13 @@ import dotenvStringify from "dotenv-stringify";
15
15
  import z from "zod";
16
16
  import { confirm, input, password, select } from "@inquirer/prompts";
17
17
  import os from "node:os";
18
- import { PackageManager, getDependenciesFromGroup, getExpectedTgzName, getPackageJsonContents } from "@alextheman/utility/internal";
18
+ import { PackageManager, getDependenciesFromGroup, getExpectedTgzName, getPackageJsonContents, packageJsonNotFoundError } from "@alextheman/utility/internal";
19
19
  import { fileURLToPath, pathToFileURL } from "node:url";
20
20
  import matter from "gray-matter";
21
21
  import { parseFilePath } from "@alextheman/utility/node";
22
22
  import supportsColor from "supports-color";
23
23
  import { randomUUID } from "node:crypto";
24
+ import { minVersion, prerelease } from "semver";
24
25
 
25
26
  //#region src/utility/miscellaneous/asciiToPng.ts
26
27
  async function asciiToPng(ascii, options) {
@@ -1278,7 +1279,7 @@ function parseZodSchemaForProgram(programError, schema, data) {
1278
1279
  //#endregion
1279
1280
  //#region package.json
1280
1281
  var name = "alex-c-line";
1281
- var version = "1.31.0";
1282
+ var version = "1.32.0";
1282
1283
  var description = "Command-line tool with commands to streamline the developer workflow.";
1283
1284
 
1284
1285
  //#endregion
@@ -1581,6 +1582,50 @@ function incrementVersion(program) {
1581
1582
  });
1582
1583
  }
1583
1584
 
1585
+ //#endregion
1586
+ //#region src/utility/constants/successPrefix.ts
1587
+ const successPrefix = chalk.green("✓");
1588
+
1589
+ //#endregion
1590
+ //#region src/cli/commands/package-json/noPreReleaseDependencies.ts
1591
+ function isPreRelease(dependencyVersionRange) {
1592
+ const minimumFromRange = minVersion(dependencyVersionRange);
1593
+ return minimumFromRange !== null && prerelease(minimumFromRange) !== null;
1594
+ }
1595
+ async function noPreReleaseDependencies(program) {
1596
+ const packageJson = await getPackageJsonContents(process.cwd());
1597
+ if (packageJson === null) throw packageJsonNotFoundError(process.cwd());
1598
+ const dependencies = getDependenciesFromGroup(packageJson, "dependencies");
1599
+ const devDependencies = getDependenciesFromGroup(packageJson, "devDependencies");
1600
+ const preReleaseDependencies = {};
1601
+ const preReleaseDevDependencies = {};
1602
+ for (const [dependencyName, dependencyVersionRange] of Object.entries(dependencies)) if (isPreRelease(dependencyVersionRange)) preReleaseDependencies[dependencyName] = dependencyVersionRange;
1603
+ for (const [dependencyName, dependencyVersionRange] of Object.entries(devDependencies)) if (isPreRelease(dependencyVersionRange)) preReleaseDevDependencies[dependencyName] = dependencyVersionRange;
1604
+ if (Object.keys(preReleaseDependencies).length !== 0 || Object.keys(preReleaseDevDependencies).length !== 0) program.error(normaliseIndents`
1605
+ ${errorPrefix}: Pre-release version pinning is not allowed. Found the following violations:
1606
+
1607
+ ${JSON.stringify({
1608
+ dependencies: preReleaseDependencies,
1609
+ devDependencies: preReleaseDevDependencies
1610
+ }, null, 2)}
1611
+ `, {
1612
+ exitCode: 2,
1613
+ code: "UNEXPECTED_PRE_RELEASE_VERSION"
1614
+ });
1615
+ console.info(`${successPrefix} No pre-release versions found!`);
1616
+ }
1617
+
1618
+ //#endregion
1619
+ //#region src/cli/commands/package-json/index.ts
1620
+ const RuleName = { NO_PRE_RELEASE_DEPENDENCIES: "no-pre-release-dependencies" };
1621
+ function packageJson(program) {
1622
+ program.command("package-json").description("Run checks on your package.json file").argument("[ruleName]", "The name of the rule to check", (rawRuleName) => {
1623
+ return parseZodSchema(z.enum(RuleName), rawRuleName);
1624
+ }).action(async (ruleName) => {
1625
+ if (ruleName === "no-pre-release-dependencies") return await noPreReleaseDependencies(program);
1626
+ });
1627
+ }
1628
+
1584
1629
  //#endregion
1585
1630
  //#region src/cli/commands/index.ts
1586
1631
  function createCommands(program) {
@@ -1611,7 +1656,8 @@ function createCommands(program) {
1611
1656
  setReleaseStatus2,
1612
1657
  update,
1613
1658
  useLocalPackage,
1614
- uuid
1659
+ uuid,
1660
+ packageJson
1615
1661
  });
1616
1662
  }
1617
1663
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alex-c-line",
3
- "version": "1.31.0",
3
+ "version": "1.32.0",
4
4
  "description": "Command-line tool with commands to streamline the developer workflow.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -34,8 +34,8 @@
34
34
  "templates"
35
35
  ],
36
36
  "dependencies": {
37
- "@alextheman/utility": "^5.4.1",
38
- "@inquirer/prompts": "^8.2.1",
37
+ "@alextheman/utility": "^5.5.0",
38
+ "@inquirer/prompts": "^8.3.0",
39
39
  "boxen": "^8.0.1",
40
40
  "canvas": "^3.2.1",
41
41
  "chalk": "^5.6.2",
@@ -47,24 +47,27 @@
47
47
  "figlet": "^1.10.0",
48
48
  "gray-matter": "^4.0.3",
49
49
  "libsodium-wrappers": "^0.8.2",
50
+ "semver": "^7.7.4",
50
51
  "supports-color": "^10.2.2",
51
52
  "zod": "^4.3.6"
52
53
  },
53
54
  "devDependencies": {
54
- "@alextheman/eslint-plugin": "^5.8.1",
55
+ "@alextheman/eslint-plugin": "^5.9.0",
55
56
  "@commander-js/extra-typings": "^14.0.0",
56
57
  "@types/eslint": "^9.6.1",
57
- "@types/node": "^25.3.0",
58
+ "@types/node": "^25.3.2",
59
+ "@types/semver": "^7.7.1",
58
60
  "@types/update-notifier": "^6.0.8",
61
+ "cross-env": "^10.1.0",
59
62
  "dotenv-cli": "^11.0.0",
60
- "eslint": "^10.0.1",
63
+ "eslint": "^10.0.2",
61
64
  "husky": "^9.1.7",
62
65
  "prettier": "^3.8.1",
63
66
  "tempy": "^3.2.0",
64
67
  "ts-node": "^10.9.2",
65
68
  "tsdown": "^0.20.3",
66
69
  "typescript": "^5.9.3",
67
- "typescript-eslint": "^8.56.0",
70
+ "typescript-eslint": "^8.56.1",
68
71
  "vite-tsconfig-paths": "^6.1.1",
69
72
  "vitest": "^4.0.18"
70
73
  },
@@ -95,7 +98,7 @@
95
98
  "prepare-local-eslint-plugin": "dotenv -e .env -- sh -c 'ESLINT_PLUGIN_PATH=${LOCAL_ESLINT_PLUGIN_PATH:-../eslint-plugin}; pnpm --prefix \"$ESLINT_PLUGIN_PATH\" run build && pnpm uninstall @alextheman/eslint-plugin && pnpm install --save-dev file:\"$ESLINT_PLUGIN_PATH\"'",
96
99
  "prepare-local-utility": "dotenv -e .env -- sh -c 'UTILITY_PATH=${LOCAL_UTILITY_PATH:-../utility}; pnpm --prefix \"$UTILITY_PATH\" run build && pnpm uninstall @alextheman/utility && pnpm install file:\"$UTILITY_PATH\"'",
97
100
  "test": "vitest run",
98
- "test-end-to-end": "RUN_END_TO_END=true vitest run tests/end-to-end --reporter verbose",
101
+ "test-end-to-end": "cross-env RUN_END_TO_END=true vitest run tests/end-to-end --reporter verbose",
99
102
  "test-watch": "vitest",
100
103
  "update-dependencies": "pnpm update --latest && pnpm update",
101
104
  "use-live-eslint-plugin": "pnpm run prepare-live-eslint-plugin && pnpm run lint",