@reliverse/dler 2.1.4 → 2.1.5

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.
@@ -1,111 +1,108 @@
1
- import {
2
- defineCmd,
3
- defineCmdArgs,
4
- defineCmdCfg
5
- } from "@reliverse/dler-launcher";
1
+ import { defineArgs, defineCommand } from "@reliverse/dler-launcher";
6
2
  import { logger } from "@reliverse/dler-logger";
7
3
  import { runTscOnAllPackages } from "./impl.js";
8
- const tscCmd = async (args) => {
9
- try {
10
- if (typeof process.versions.bun === "undefined") {
11
- logger.error("\u274C This command requires Bun runtime. Sorry.");
12
- process.exit(1);
4
+ export default defineCommand({
5
+ meta: {
6
+ name: "tsc",
7
+ description: "Run TypeScript type checking on all workspace packages",
8
+ examples: [
9
+ "dler tsc",
10
+ 'dler tsc --ignore "@reliverse/*"',
11
+ 'dler tsc --ignore "@reliverse/dler-colors" --ignore "@reliverse/dler-v1"',
12
+ 'dler tsc --ignore "@reliverse/dler-colors @reliverse/dler-v1"',
13
+ "dler tsc --cwd /path/to/monorepo",
14
+ "dler tsc --cwd /path/to/monorepo --ignore @reliverse/*",
15
+ "dler tsc --concurrency 8",
16
+ "dler tsc --concurrency 2 --stopOnError",
17
+ "dler tsc --ignore @reliverse/* --concurrency 6 --stopOnError",
18
+ "dler tsc --verbose",
19
+ "dler tsc --verbose --ignore @reliverse/*",
20
+ "dler tsc --verbose --concurrency 2 --stopOnError",
21
+ "dler tsc --copy-logs",
22
+ "dler tsc --copy-logs --verbose",
23
+ "dler tsc --auto-concurrency",
24
+ "dler tsc --no-cache",
25
+ "dler tsc --no-incremental",
26
+ "dler tsc --build-mode",
27
+ "dler tsc --skip-unchanged",
28
+ "dler tsc --auto-concurrency --build-mode --verbose"
29
+ ]
30
+ },
31
+ args: defineArgs({
32
+ ignore: {
33
+ type: "string",
34
+ description: "Package(s) to ignore (supports wildcards like @reliverse/*)"
35
+ },
36
+ cwd: {
37
+ type: "string",
38
+ description: "Working directory (monorepo root)"
39
+ },
40
+ concurrency: {
41
+ type: "number",
42
+ description: "Number of packages to check concurrently (default: CPU cores)"
43
+ },
44
+ stopOnError: {
45
+ type: "boolean",
46
+ description: "Stop on first error instead of collecting all errors (default: false)"
47
+ },
48
+ verbose: {
49
+ type: "boolean",
50
+ description: "Verbose mode (default: false)"
51
+ },
52
+ copyLogs: {
53
+ type: "boolean",
54
+ description: "Copy failed package logs to clipboard (default: false)"
55
+ },
56
+ cache: {
57
+ type: "boolean",
58
+ description: "Enable caching for faster subsequent runs (default: true)"
59
+ },
60
+ incremental: {
61
+ type: "boolean",
62
+ description: "Use TypeScript incremental compilation (default: true)"
63
+ },
64
+ autoConcurrency: {
65
+ type: "boolean",
66
+ description: "Auto-detect optimal concurrency based on CPU cores (default: false)"
67
+ },
68
+ skipUnchanged: {
69
+ type: "boolean",
70
+ description: "Skip packages with no changes since last check (default: true)"
71
+ },
72
+ buildMode: {
73
+ type: "boolean",
74
+ description: "Use tsc --build for project references (default: false)"
13
75
  }
14
- const results = await runTscOnAllPackages(args.ignore, args.cwd, {
15
- concurrency: args.concurrency,
16
- stopOnError: args.stopOnError,
17
- verbose: args.verbose,
18
- copyLogs: args.copyLogs,
19
- cache: args.cache,
20
- incremental: args.incremental,
21
- autoConcurrency: args.autoConcurrency,
22
- skipUnchanged: args.skipUnchanged,
23
- buildMode: args.buildMode
24
- });
25
- if (results.hasErrors) {
76
+ }),
77
+ run: async ({ args }) => {
78
+ try {
79
+ if (typeof process.versions.bun === "undefined") {
80
+ logger.error("\u274C This command requires Bun runtime. Sorry.");
81
+ process.exit(1);
82
+ }
83
+ const results = await runTscOnAllPackages(args.ignore, args.cwd, {
84
+ concurrency: args.concurrency,
85
+ stopOnError: args.stopOnError,
86
+ verbose: args.verbose,
87
+ copyLogs: args.copyLogs,
88
+ cache: args.cache,
89
+ incremental: args.incremental,
90
+ autoConcurrency: args.autoConcurrency,
91
+ skipUnchanged: args.skipUnchanged,
92
+ buildMode: args.buildMode
93
+ });
94
+ if (results.hasErrors) {
95
+ process.exit(1);
96
+ }
97
+ logger.success("\n\u2705 All packages passed type checking!");
98
+ } catch (error) {
99
+ logger.error("\n\u274C TypeScript check failed:");
100
+ if (error instanceof Error) {
101
+ logger.error(error.message);
102
+ } else {
103
+ logger.error(String(error));
104
+ }
26
105
  process.exit(1);
27
106
  }
28
- logger.success("\n\u2705 All packages passed type checking!");
29
- } catch (error) {
30
- logger.error("\n\u274C TypeScript check failed:");
31
- if (error instanceof Error) {
32
- logger.error(error.message);
33
- } else {
34
- logger.error(String(error));
35
- }
36
- process.exit(1);
37
107
  }
38
- };
39
- const tscCmdArgs = defineCmdArgs({
40
- ignore: {
41
- type: "string",
42
- description: "Package(s) to ignore (supports wildcards like @reliverse/*)"
43
- },
44
- cwd: {
45
- type: "string",
46
- description: "Working directory (monorepo root)"
47
- },
48
- concurrency: {
49
- type: "number",
50
- description: "Number of packages to check concurrently (default: CPU cores)"
51
- },
52
- stopOnError: {
53
- type: "boolean",
54
- description: "Stop on first error instead of collecting all errors (default: false)"
55
- },
56
- verbose: {
57
- type: "boolean",
58
- description: "Verbose mode (default: false)"
59
- },
60
- copyLogs: {
61
- type: "boolean",
62
- description: "Copy failed package logs to clipboard (default: false)"
63
- },
64
- cache: {
65
- type: "boolean",
66
- description: "Enable caching for faster subsequent runs (default: true)"
67
- },
68
- incremental: {
69
- type: "boolean",
70
- description: "Use TypeScript incremental compilation (default: true)"
71
- },
72
- autoConcurrency: {
73
- type: "boolean",
74
- description: "Auto-detect optimal concurrency based on CPU cores (default: false)"
75
- },
76
- skipUnchanged: {
77
- type: "boolean",
78
- description: "Skip packages with no changes since last check (default: true)"
79
- },
80
- buildMode: {
81
- type: "boolean",
82
- description: "Use tsc --build for project references (default: false)"
83
- }
84
- });
85
- const tscCmdCfg = defineCmdCfg({
86
- name: "tsc",
87
- description: "Run TypeScript type checking on all workspace packages",
88
- examples: [
89
- "dler tsc",
90
- 'dler tsc --ignore "@reliverse/*"',
91
- 'dler tsc --ignore "@reliverse/dler-colors" --ignore "@reliverse/dler-v1"',
92
- 'dler tsc --ignore "@reliverse/dler-colors @reliverse/dler-v1"',
93
- "dler tsc --cwd /path/to/monorepo",
94
- "dler tsc --cwd /path/to/monorepo --ignore @reliverse/*",
95
- "dler tsc --concurrency 8",
96
- "dler tsc --concurrency 2 --stopOnError",
97
- "dler tsc --ignore @reliverse/* --concurrency 6 --stopOnError",
98
- "dler tsc --verbose",
99
- "dler tsc --verbose --ignore @reliverse/*",
100
- "dler tsc --verbose --concurrency 2 --stopOnError",
101
- "dler tsc --copy-logs",
102
- "dler tsc --copy-logs --verbose",
103
- "dler tsc --auto-concurrency",
104
- "dler tsc --no-cache",
105
- "dler tsc --no-incremental",
106
- "dler tsc --build-mode",
107
- "dler tsc --skip-unchanged",
108
- "dler tsc --auto-concurrency --build-mode --verbose"
109
- ]
110
108
  });
111
- export default defineCmd(tscCmd, tscCmdArgs, tscCmdCfg);
@@ -1,9 +1,5 @@
1
1
  import { getCurrentWorkingDirectory } from "@reliverse/dler-helpers";
2
- import {
3
- defineCmd,
4
- defineCmdArgs,
5
- defineCmdCfg
6
- } from "@reliverse/dler-launcher";
2
+ import { defineArgs, defineCommand } from "@reliverse/dler-launcher";
7
3
  import { logger } from "@reliverse/dler-logger";
8
4
  import path from "path";
9
5
  import { msgs } from "../const.js";
@@ -15,147 +11,154 @@ import {
15
11
  validatePackageJson
16
12
  } from "./impl.js";
17
13
  import { displayStructuredUpdateResults } from "./utils.js";
18
- const updateCmd = async (args) => {
19
- try {
20
- if (typeof process.versions.bun === "undefined") {
21
- logger.error("This command requires Bun runtime. Sorry.");
22
- process.exit(1);
23
- }
24
- const { dryRun, install, details, ignoreFields } = args;
25
- const isDryRun = Boolean(dryRun);
26
- const showDetails = Boolean(details);
27
- const fieldsToIgnore = Array.isArray(ignoreFields) ? ignoreFields : [];
28
- await validatePackageJson();
29
- const { packageJsonFiles, fileDepsMap } = await prepareAllUpdateCandidates();
30
- if (packageJsonFiles.length === 0) {
31
- logger.log("No package.json files found");
32
- return;
14
+ export default defineCommand({
15
+ meta: {
16
+ name: "update",
17
+ description: "Update all dependencies to their latest versions across all package.json files. Supports selective updates with glob patterns and comprehensive filtering options.",
18
+ examples: [
19
+ "dler update",
20
+ "dler update --install",
21
+ "dler update --dryRun",
22
+ "dler update --name @types/* --name react*",
23
+ 'dler update --ignore "eslint-*" --ignore "@babel/*"',
24
+ "dler update --no-allowMajor",
25
+ "dler update --details",
26
+ "dler update --ignoreFields peerDependencies",
27
+ "dler update --dryRun --install",
28
+ "dler update --name react --name react-dom --install",
29
+ "dler update --ignore @types/* --allowMajor"
30
+ ]
31
+ },
32
+ args: defineArgs({
33
+ ci: {
34
+ type: "boolean",
35
+ description: msgs.args.ci,
36
+ default: !process.stdout.isTTY || !!process.env["CI"]
37
+ },
38
+ cwd: {
39
+ type: "string",
40
+ description: msgs.args.cwd,
41
+ default: getCurrentWorkingDirectory()
42
+ },
43
+ name: {
44
+ type: "string",
45
+ description: "Specific dependencies to update, supports glob patterns (e.g. '@types/*', 'react*'). Can be specified multiple times or comma-separated."
46
+ },
47
+ ignore: {
48
+ type: "string",
49
+ description: "Dependencies to exclude from updates, supports glob patterns (e.g. 'eslint-*', '@types/*')"
50
+ },
51
+ dryRun: {
52
+ type: "boolean",
53
+ description: "Preview updates without making changes"
54
+ },
55
+ install: {
56
+ type: "boolean",
57
+ description: "Run install after updating",
58
+ aliases: ["i"]
59
+ },
60
+ allowMajor: {
61
+ type: "boolean",
62
+ description: "Allow major version updates (default: true)",
63
+ default: true
64
+ },
65
+ details: {
66
+ type: "boolean",
67
+ description: "Show detailed dependency information (default: false)",
68
+ aliases: ["d"]
69
+ },
70
+ ignoreFields: {
71
+ type: "string",
72
+ description: "Dependency fields to ignore (e.g., 'peerDependencies,catalog')"
33
73
  }
34
- let totalUpdated = 0;
35
- const allResults = [];
36
- for (const packageJsonPath of packageJsonFiles) {
37
- const fileDeps = fileDepsMap.get(packageJsonPath);
38
- if (!fileDeps) continue;
39
- const results = await checkPackageUpdatesForFile(fileDeps, args);
40
- allResults.push(...results);
41
- const toUpdate = results.filter(
42
- (r) => r.updated && !r.error
74
+ }),
75
+ run: async ({ args }) => {
76
+ try {
77
+ if (typeof process.versions.bun === "undefined") {
78
+ logger.error("This command requires Bun runtime. Sorry.");
79
+ process.exit(1);
80
+ }
81
+ const { dryRun, install, details, ignoreFields } = args;
82
+ const isDryRun = Boolean(dryRun);
83
+ const showDetails = Boolean(details);
84
+ const fieldsToIgnore = Array.isArray(ignoreFields) ? ignoreFields : [];
85
+ await validatePackageJson();
86
+ const { packageJsonFiles, fileDepsMap } = await prepareAllUpdateCandidates();
87
+ if (packageJsonFiles.length === 0) {
88
+ logger.log("No package.json files found");
89
+ return;
90
+ }
91
+ let totalUpdated = 0;
92
+ const allResults = [];
93
+ for (const packageJsonPath of packageJsonFiles) {
94
+ const fileDeps = fileDepsMap.get(packageJsonPath);
95
+ if (!fileDeps) continue;
96
+ const updateArgs = {
97
+ ...args,
98
+ name: args.name ? Array.isArray(args.name) ? args.name : [args.name] : void 0,
99
+ ignore: args.ignore ? Array.isArray(args.ignore) ? args.ignore : [args.ignore] : void 0,
100
+ ignoreFields: args.ignoreFields ? Array.isArray(args.ignoreFields) ? args.ignoreFields : args.ignoreFields.split(",").map((s) => s.trim()) : void 0
101
+ };
102
+ const results = await checkPackageUpdatesForFile(fileDeps, updateArgs);
103
+ allResults.push(...results);
104
+ const toUpdate = results.filter(
105
+ (r) => r.updated && !r.error
106
+ );
107
+ if (toUpdate.length > 0) {
108
+ if (isDryRun) {
109
+ const relativePath = path.relative(process.cwd(), packageJsonPath);
110
+ logger.debug(
111
+ `Would update ${toUpdate.length} dependencies in ${relativePath}`
112
+ );
113
+ continue;
114
+ }
115
+ const updated = await updatePackageJsonFileDirectly(
116
+ packageJsonPath,
117
+ fileDeps,
118
+ toUpdate,
119
+ "^",
120
+ fieldsToIgnore
121
+ );
122
+ totalUpdated += updated;
123
+ if (updated > 0) {
124
+ const relativePath = path.relative(process.cwd(), packageJsonPath);
125
+ logger.debug(`Updated ${updated} dependencies in ${relativePath}`);
126
+ }
127
+ }
128
+ }
129
+ displayStructuredUpdateResults(
130
+ allResults,
131
+ packageJsonFiles,
132
+ fileDepsMap,
133
+ showDetails
43
134
  );
44
- if (toUpdate.length > 0) {
135
+ if (totalUpdated === 0) {
45
136
  if (isDryRun) {
46
- const relativePath = path.relative(process.cwd(), packageJsonPath);
47
- logger.debug(
48
- `Would update ${toUpdate.length} dependencies in ${relativePath}`
49
- );
50
- continue;
137
+ logger.log("Dry run mode - no changes would be made");
138
+ } else {
139
+ logger.log("No dependencies to update");
51
140
  }
52
- const updated = await updatePackageJsonFileDirectly(
53
- packageJsonPath,
54
- fileDeps,
55
- toUpdate,
56
- "^",
57
- fieldsToIgnore
141
+ return;
142
+ }
143
+ if (packageJsonFiles.length > 1) {
144
+ logger.log(
145
+ `Updated ${totalUpdated} dependencies across ${packageJsonFiles.length} package.json files`
58
146
  );
59
- totalUpdated += updated;
60
- if (updated > 0) {
61
- const relativePath = path.relative(process.cwd(), packageJsonPath);
62
- logger.debug(`Updated ${updated} dependencies in ${relativePath}`);
63
- }
147
+ } else {
148
+ logger.log(`Updated ${totalUpdated} dependencies`);
64
149
  }
65
- }
66
- displayStructuredUpdateResults(
67
- allResults,
68
- packageJsonFiles,
69
- fileDepsMap,
70
- showDetails
71
- );
72
- if (totalUpdated === 0) {
73
- if (isDryRun) {
74
- logger.log("Dry run mode - no changes would be made");
150
+ if (install) {
151
+ await handleInstallation();
75
152
  } else {
76
- logger.log("No dependencies to update");
153
+ logger.log(
154
+ "Run 'bun install' to apply the changes (use --install to do this automatically)"
155
+ );
77
156
  }
78
- return;
79
- }
80
- if (packageJsonFiles.length > 1) {
81
- logger.log(
82
- `Updated ${totalUpdated} dependencies across ${packageJsonFiles.length} package.json files`
83
- );
84
- } else {
85
- logger.log(`Updated ${totalUpdated} dependencies`);
86
- }
87
- if (install) {
88
- await handleInstallation();
89
- } else {
90
- logger.log(
91
- "Run 'bun install' to apply the changes (use --install to do this automatically)"
157
+ } catch (error) {
158
+ logger.error(
159
+ `Failed to update dependencies: ${error instanceof Error ? error.message : String(error)}`
92
160
  );
161
+ process.exit(1);
93
162
  }
94
- } catch (error) {
95
- logger.error(
96
- `Failed to update dependencies: ${error instanceof Error ? error.message : String(error)}`
97
- );
98
- process.exit(1);
99
163
  }
100
- };
101
- const updateCmdArgs = defineCmdArgs({
102
- ci: {
103
- type: "boolean",
104
- description: msgs.args.ci,
105
- default: !process.stdout.isTTY || !!process.env["CI"]
106
- },
107
- cwd: {
108
- type: "string",
109
- description: msgs.args.cwd,
110
- default: getCurrentWorkingDirectory()
111
- },
112
- name: {
113
- type: "string",
114
- description: "Specific dependencies to update, supports glob patterns (e.g. '@types/*', 'react*')"
115
- },
116
- ignore: {
117
- type: "string",
118
- description: "Dependencies to exclude from updates, supports glob patterns (e.g. 'eslint-*', '@types/*')"
119
- },
120
- dryRun: {
121
- type: "boolean",
122
- description: "Preview updates without making changes"
123
- },
124
- install: {
125
- type: "boolean",
126
- description: "Run install after updating",
127
- aliases: ["i"]
128
- },
129
- allowMajor: {
130
- type: "boolean",
131
- description: "Allow major version updates (default: true)",
132
- default: true
133
- },
134
- details: {
135
- type: "boolean",
136
- description: "Show detailed dependency information (default: false)",
137
- aliases: ["d"]
138
- },
139
- ignoreFields: {
140
- type: "string",
141
- description: "Dependency fields to ignore (e.g., 'peerDependencies,catalog')"
142
- }
143
- });
144
- const updateCmdCfg = defineCmdCfg({
145
- name: "update",
146
- description: "Update all dependencies to their latest versions across all package.json files. Supports selective updates with glob patterns and comprehensive filtering options.",
147
- examples: [
148
- "dler update",
149
- "dler update --install",
150
- "dler update --dryRun",
151
- "dler update --name @types/* --name react*",
152
- 'dler update --ignore "eslint-*" --ignore "@babel/*"',
153
- "dler update --no-allowMajor",
154
- "dler update --details",
155
- "dler update --ignoreFields peerDependencies",
156
- "dler update --dryRun --install",
157
- "dler update --name react --name react-dom --install",
158
- "dler update --ignore @types/* --allowMajor"
159
- ]
160
164
  });
161
- export default defineCmd(updateCmd, updateCmdArgs, updateCmdCfg);
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@reliverse/dler",
3
3
  "description": "@reliverse/dler is a framework which helps TypeScript and JavaScript developers create their libraries and CLI tools. It provides ready-to-use primitives, so you don't have to write them from scratch.",
4
4
  "author": "reliverse",
5
- "version": "2.1.4",
5
+ "version": "2.1.5",
6
6
  "private": false,
7
7
  "type": "module",
8
8
  "bin": {
@@ -13,16 +13,16 @@
13
13
  "semver": "^7.7.3",
14
14
  "lookpath": "^1.2.3",
15
15
  "clipboardy": "^5.0.0",
16
- "@reliverse/dler-publish": "2.1.4",
17
- "@reliverse/dler-bump": "2.1.4",
18
- "@reliverse/dler-build": "2.1.4",
19
- "@reliverse/dler-logger": "2.1.4",
20
- "@reliverse/dler-matcher": "2.1.4",
21
- "@reliverse/dler-launcher": "2.1.4",
22
- "@reliverse/dler-prompt": "2.1.4",
23
- "@reliverse/dler-helpers": "2.1.4",
24
- "@reliverse/dler-pkg-tsc": "2.1.4",
25
- "@reliverse/dler-mapper": "2.1.4"
16
+ "@reliverse/dler-publish": "2.1.5",
17
+ "@reliverse/dler-bump": "2.1.5",
18
+ "@reliverse/dler-build": "2.1.5",
19
+ "@reliverse/dler-logger": "2.1.5",
20
+ "@reliverse/dler-matcher": "2.1.5",
21
+ "@reliverse/dler-launcher": "2.1.5",
22
+ "@reliverse/dler-prompt": "2.1.5",
23
+ "@reliverse/dler-helpers": "2.1.5",
24
+ "@reliverse/dler-pkg-tsc": "2.1.5",
25
+ "@reliverse/dler-mapper": "2.1.5"
26
26
  },
27
27
  "keywords": [
28
28
  "dler",