alex-c-line 2.4.1 → 2.5.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
@@ -29,13 +29,12 @@ let boxen = require("boxen");
29
29
  boxen = __toESM(boxen);
30
30
  let figlet = require("figlet");
31
31
  figlet = __toESM(figlet);
32
- let node_path = require("node:path");
33
- node_path = __toESM(node_path);
34
- let canvas = require("canvas");
35
- let node_fs_promises = require("node:fs/promises");
36
32
  let env_paths = require("env-paths");
37
33
  env_paths = __toESM(env_paths);
34
+ let node_path = require("node:path");
35
+ node_path = __toESM(node_path);
38
36
  let _inquirer_prompts = require("@inquirer/prompts");
37
+ let node_fs_promises = require("node:fs/promises");
39
38
  let dotenv = require("dotenv");
40
39
  let execa = require("execa");
41
40
  let node_url = require("node:url");
@@ -97,56 +96,6 @@ function artworkLog(program) {
97
96
  });
98
97
  }
99
98
  //#endregion
100
- //#region src/utility/miscellaneous/asciiToPng.ts
101
- async function asciiToPng(ascii, options) {
102
- const { filePath = "media/alex-c-line", width = 3e3, height = 3e3, backgroundColor = "#0b1020", titleColor = "#facc15", subtitleColor = {
103
- green: "#22c55e",
104
- white: "#ffffff"
105
- }[options?.subtitleColor ?? "green"], fontSize = 48, fontFamily = [
106
- "Menlo",
107
- "Monaco",
108
- "Consolas",
109
- "monospace"
110
- ], subtitleLineCount = options?.subtitleLineCount ?? 1 } = options ?? {};
111
- const canvas$1 = (0, canvas.createCanvas)(width, height);
112
- const context = canvas$1.getContext("2d");
113
- context.fillStyle = backgroundColor;
114
- context.fillRect(0, 0, width, height);
115
- context.font = `${fontSize}px ${fontFamily.join(", ")}`;
116
- context.textBaseline = "top";
117
- const lines = ascii.split("\n");
118
- const lineHeight = fontSize * 1.4;
119
- const startY = (height - lines.length * lineHeight) / 2;
120
- const subtitleStartIndex = Math.max(0, lines.length - subtitleLineCount);
121
- lines.forEach((line, index) => {
122
- context.fillStyle = index >= subtitleStartIndex ? subtitleColor : titleColor;
123
- const x = (width - context.measureText(line).width) / 2;
124
- const y = startY + index * lineHeight;
125
- context.fillText(line, x, y);
126
- });
127
- const outputPath = node_path.default.resolve(filePath.endsWith(".png") ? filePath : `${filePath}.png`);
128
- await (0, node_fs_promises.mkdir)(node_path.default.dirname(outputPath), { recursive: true });
129
- await (0, node_fs_promises.writeFile)(outputPath, canvas$1.toBuffer("image/png"));
130
- }
131
- //#endregion
132
- //#region src/cli/commands/artwork/save.ts
133
- function artworkSave(program) {
134
- program.command("save").description("Create the artwork for alex-c-line").option("--subtitle-text <subtitleText>", "Customise the subtitle text").option("--subtitle-color <subtitleColor>", "Customise the subtitle color").option("--file-path <filePath>", "Save the artwork as a PNG file, optionally specifying the path", "media/alex-c-line.png").action(async ({ filePath, subtitleText, subtitleColor = "green" }) => {
135
- if (subtitleColor !== "green" && subtitleColor !== "white") throw new _alextheman_utility.DataError({ subtitleColor }, "INVALID_SUBTITLE_COLOR", "Subtitle color must either be green or white.");
136
- await asciiToPng(await createAlexCLineArtwork({
137
- includeBox: false,
138
- includeColors: false,
139
- subtitleText
140
- }), {
141
- filePath,
142
- fontSize: 90,
143
- subtitleColor,
144
- subtitleLineCount: subtitleText?.split("\n").length
145
- });
146
- console.info(`Artwork saved successfully to ${node_path.default.resolve(filePath.endsWith(".png") ? filePath : `${filePath}.png`)}`);
147
- });
148
- }
149
- //#endregion
150
99
  //#region src/utility/miscellaneous/loadCommands.ts
151
100
  function loadCommands(program, commandMap) {
152
101
  for (const loader of Object.values(commandMap)) loader(program);
@@ -154,10 +103,7 @@ function loadCommands(program, commandMap) {
154
103
  //#endregion
155
104
  //#region src/cli/commands/artwork/index.ts
156
105
  function artwork(program) {
157
- loadCommands(program.command("artwork").description("Interact with the artwork for alex-c-line"), {
158
- artworkLog,
159
- artworkSave
160
- });
106
+ loadCommands(program.command("artwork").description("Interact with the artwork for alex-c-line"), { artworkLog });
161
107
  }
162
108
  const { cache: ALEX_C_LINE_GLOBAL_CACHE_DIRECTORY } = (0, env_paths.default)("alex-c-line");
163
109
  const ALEX_C_LINE_GLOBAL_CACHE_PATH = node_path.default.join(ALEX_C_LINE_GLOBAL_CACHE_DIRECTORY, "cache.json");
@@ -1235,7 +1181,7 @@ function template(program) {
1235
1181
  //#endregion
1236
1182
  //#region package.json
1237
1183
  var name = "alex-c-line";
1238
- var version$1 = "2.4.1";
1184
+ var version$1 = "2.5.0";
1239
1185
  var description = "Command-line tool with commands to streamline the developer workflow.";
1240
1186
  //#endregion
1241
1187
  //#region src/utility/updates/checkUpdate.ts
package/dist/index.js CHANGED
@@ -5,11 +5,10 @@ import { DataError, ONE_DAY_IN_MILLISECONDS, VersionNumber, fillArray, getString
5
5
  import chalk from "chalk";
6
6
  import boxen from "boxen";
7
7
  import figlet from "figlet";
8
- import path from "node:path";
9
- import { createCanvas } from "canvas";
10
- import { access, mkdir, readFile, readdir, rm, stat, writeFile } from "node:fs/promises";
11
8
  import envPaths from "env-paths";
9
+ import path from "node:path";
12
10
  import { confirm, input, password, select } from "@inquirer/prompts";
11
+ import { access, mkdir, readFile, readdir, rm, stat, writeFile } from "node:fs/promises";
13
12
  import { parse } from "dotenv";
14
13
  import { ExecaError, execa } from "execa";
15
14
  import { fileURLToPath, pathToFileURL } from "node:url";
@@ -66,56 +65,6 @@ function artworkLog(program) {
66
65
  });
67
66
  }
68
67
  //#endregion
69
- //#region src/utility/miscellaneous/asciiToPng.ts
70
- async function asciiToPng(ascii, options) {
71
- const { filePath = "media/alex-c-line", width = 3e3, height = 3e3, backgroundColor = "#0b1020", titleColor = "#facc15", subtitleColor = {
72
- green: "#22c55e",
73
- white: "#ffffff"
74
- }[options?.subtitleColor ?? "green"], fontSize = 48, fontFamily = [
75
- "Menlo",
76
- "Monaco",
77
- "Consolas",
78
- "monospace"
79
- ], subtitleLineCount = options?.subtitleLineCount ?? 1 } = options ?? {};
80
- const canvas = createCanvas(width, height);
81
- const context = canvas.getContext("2d");
82
- context.fillStyle = backgroundColor;
83
- context.fillRect(0, 0, width, height);
84
- context.font = `${fontSize}px ${fontFamily.join(", ")}`;
85
- context.textBaseline = "top";
86
- const lines = ascii.split("\n");
87
- const lineHeight = fontSize * 1.4;
88
- const startY = (height - lines.length * lineHeight) / 2;
89
- const subtitleStartIndex = Math.max(0, lines.length - subtitleLineCount);
90
- lines.forEach((line, index) => {
91
- context.fillStyle = index >= subtitleStartIndex ? subtitleColor : titleColor;
92
- const x = (width - context.measureText(line).width) / 2;
93
- const y = startY + index * lineHeight;
94
- context.fillText(line, x, y);
95
- });
96
- const outputPath = path.resolve(filePath.endsWith(".png") ? filePath : `${filePath}.png`);
97
- await mkdir(path.dirname(outputPath), { recursive: true });
98
- await writeFile(outputPath, canvas.toBuffer("image/png"));
99
- }
100
- //#endregion
101
- //#region src/cli/commands/artwork/save.ts
102
- function artworkSave(program) {
103
- program.command("save").description("Create the artwork for alex-c-line").option("--subtitle-text <subtitleText>", "Customise the subtitle text").option("--subtitle-color <subtitleColor>", "Customise the subtitle color").option("--file-path <filePath>", "Save the artwork as a PNG file, optionally specifying the path", "media/alex-c-line.png").action(async ({ filePath, subtitleText, subtitleColor = "green" }) => {
104
- if (subtitleColor !== "green" && subtitleColor !== "white") throw new DataError({ subtitleColor }, "INVALID_SUBTITLE_COLOR", "Subtitle color must either be green or white.");
105
- await asciiToPng(await createAlexCLineArtwork({
106
- includeBox: false,
107
- includeColors: false,
108
- subtitleText
109
- }), {
110
- filePath,
111
- fontSize: 90,
112
- subtitleColor,
113
- subtitleLineCount: subtitleText?.split("\n").length
114
- });
115
- console.info(`Artwork saved successfully to ${path.resolve(filePath.endsWith(".png") ? filePath : `${filePath}.png`)}`);
116
- });
117
- }
118
- //#endregion
119
68
  //#region src/utility/miscellaneous/loadCommands.ts
120
69
  function loadCommands(program, commandMap) {
121
70
  for (const loader of Object.values(commandMap)) loader(program);
@@ -123,10 +72,7 @@ function loadCommands(program, commandMap) {
123
72
  //#endregion
124
73
  //#region src/cli/commands/artwork/index.ts
125
74
  function artwork(program) {
126
- loadCommands(program.command("artwork").description("Interact with the artwork for alex-c-line"), {
127
- artworkLog,
128
- artworkSave
129
- });
75
+ loadCommands(program.command("artwork").description("Interact with the artwork for alex-c-line"), { artworkLog });
130
76
  }
131
77
  const { cache: ALEX_C_LINE_GLOBAL_CACHE_DIRECTORY } = envPaths("alex-c-line");
132
78
  const ALEX_C_LINE_GLOBAL_CACHE_PATH = path.join(ALEX_C_LINE_GLOBAL_CACHE_DIRECTORY, "cache.json");
@@ -1204,7 +1150,7 @@ function template(program) {
1204
1150
  //#endregion
1205
1151
  //#region package.json
1206
1152
  var name = "alex-c-line";
1207
- var version$1 = "2.4.1";
1153
+ var version$1 = "2.5.0";
1208
1154
  var description = "Command-line tool with commands to streamline the developer workflow.";
1209
1155
  //#endregion
1210
1156
  //#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.4.1",
3
+ "version": "2.5.0",
4
4
  "description": "Command-line tool with commands to streamline the developer workflow.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -34,43 +34,42 @@
34
34
  "templates"
35
35
  ],
36
36
  "dependencies": {
37
- "@alextheman/utility": "^5.9.0",
38
- "@inquirer/prompts": "^8.3.2",
39
- "axios": "^1.14.0",
40
- "boxen": "^8.0.1",
41
- "canvas": "^3.2.2",
42
- "chalk": "^5.6.2",
43
- "commander": "^14.0.3",
44
- "dotenv": "^17.3.1",
45
- "dotenv-stringify": "^3.0.1",
46
- "env-paths": "^4.0.0",
47
- "execa": "^9.6.1",
48
- "figlet": "^1.11.0",
49
- "gray-matter": "^4.0.3",
50
- "libsodium-wrappers": "^0.8.2",
51
- "semver": "^7.7.4",
52
- "supports-color": "^10.2.2",
53
- "zod": "^4.3.6"
37
+ "@alextheman/utility": "5.9.0",
38
+ "@inquirer/prompts": "8.3.2",
39
+ "axios": "1.14.0",
40
+ "boxen": "8.0.1",
41
+ "chalk": "5.6.2",
42
+ "commander": "14.0.3",
43
+ "dotenv": "17.4.0",
44
+ "dotenv-stringify": "3.0.1",
45
+ "env-paths": "4.0.0",
46
+ "execa": "9.6.1",
47
+ "figlet": "1.11.0",
48
+ "gray-matter": "4.0.3",
49
+ "libsodium-wrappers": "0.8.2",
50
+ "semver": "7.7.4",
51
+ "supports-color": "10.2.2",
52
+ "zod": "4.3.6"
54
53
  },
55
54
  "devDependencies": {
56
- "@alextheman/eslint-plugin": "^5.10.4",
57
- "@commander-js/extra-typings": "^14.0.0",
58
- "@types/eslint": "^9.6.1",
59
- "@types/node": "^25.5.0",
60
- "@types/semver": "^7.7.1",
61
- "@types/update-notifier": "^6.0.8",
62
- "cross-env": "^10.1.0",
63
- "dotenv-cli": "^11.0.0",
64
- "eslint": "^10.1.0",
65
- "husky": "^9.1.7",
66
- "prettier": "^3.8.1",
67
- "tempy": "^3.2.0",
68
- "ts-node": "^10.9.2",
69
- "tsdown": "^0.21.7",
70
- "typescript": "^6.0.2",
71
- "typescript-eslint": "^8.58.0",
72
- "vite-tsconfig-paths": "^6.1.1",
73
- "vitest": "^4.1.2"
55
+ "@alextheman/eslint-plugin": "5.11.0",
56
+ "@commander-js/extra-typings": "14.0.0",
57
+ "@types/eslint": "9.6.1",
58
+ "@types/node": "25.5.2",
59
+ "@types/semver": "7.7.1",
60
+ "@types/update-notifier": "6.0.8",
61
+ "cross-env": "10.1.0",
62
+ "dotenv-cli": "11.0.0",
63
+ "eslint": "10.2.0",
64
+ "husky": "9.1.7",
65
+ "prettier": "3.8.1",
66
+ "tempy": "3.2.0",
67
+ "ts-node": "10.9.2",
68
+ "tsdown": "0.21.7",
69
+ "typescript": "6.0.2",
70
+ "typescript-eslint": "8.58.0",
71
+ "vite-tsconfig-paths": "6.1.1",
72
+ "vitest": "4.1.2"
74
73
  },
75
74
  "engines": {
76
75
  "node": ">=22.0.0"