@reliverse/dler 2.1.16 → 2.1.18
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/cmds/clean/cmd.js +16 -4
- package/dist/cmds/clean/types.d.ts +1 -0
- package/dist/cmds/perf/benchmarks/runner.d.ts +1 -1
- package/dist/cmds/perf/utils/cache.d.ts +1 -1
- package/dist/cmds/perf/utils/cache.js +3 -2
- package/dist/cmds/tsc/cmd.js +7 -0
- package/dist/cmds/tsc/impl.d.ts +1 -0
- package/dist/cmds/tsc/impl.js +19 -6
- package/dist/cmds/update/cmd.js +14 -5
- package/dist/cmds/update/impl.d.ts +3 -2
- package/dist/cmds/update/impl.js +131 -11
- package/package.json +1 -1
package/dist/cmds/clean/cmd.js
CHANGED
|
@@ -14,6 +14,9 @@ export default defineCommand({
|
|
|
14
14
|
"dler clean --presets db,frontend --dry-run",
|
|
15
15
|
"dler clean --presets deps --deleteLockFiles",
|
|
16
16
|
"dler clean --subdirs --presets build-tools",
|
|
17
|
+
'dler clean --filter "@reliverse/dler-prompt,@reliverse/dler-build"',
|
|
18
|
+
'dler clean --filter "@reliverse/dler-*"',
|
|
19
|
+
"dler clean --filter cli,packages/build",
|
|
17
20
|
"dler clean --ignore '@reliverse/*'",
|
|
18
21
|
"dler clean --presets frontend --verbose",
|
|
19
22
|
"dler clean --presets all --dry-run --verbose",
|
|
@@ -35,6 +38,11 @@ export default defineCommand({
|
|
|
35
38
|
"dler clean --custom 'build/,coverage/' # Clean build and coverage directories",
|
|
36
39
|
"dler clean --presets build --custom '*.log' # Combine presets and custom patterns",
|
|
37
40
|
"",
|
|
41
|
+
"# Filter Examples:",
|
|
42
|
+
'dler clean --filter "@reliverse/dler-*" --presets build # Clean build artifacts in matching packages',
|
|
43
|
+
"dler clean --filter cli,packages/build --presets all # Clean all artifacts in specific packages",
|
|
44
|
+
'dler clean --filter "@reliverse/dler-prompt" --custom "*.log" # Clean log files in specific package',
|
|
45
|
+
"",
|
|
38
46
|
"# Monorepo Examples:",
|
|
39
47
|
"dler clean # Clean dist/ in all packages",
|
|
40
48
|
"dler clean --presets frontend # Clean frontend artifacts in all packages",
|
|
@@ -57,6 +65,14 @@ export default defineCommand({
|
|
|
57
65
|
]
|
|
58
66
|
},
|
|
59
67
|
args: defineArgs({
|
|
68
|
+
filter: {
|
|
69
|
+
type: "string",
|
|
70
|
+
description: "Package(s) to include (supports wildcards and comma-separated values like '@reliverse/dler-prompt,@reliverse/dler-build'). Takes precedence over --ignore when both are provided."
|
|
71
|
+
},
|
|
72
|
+
ignore: {
|
|
73
|
+
type: "string",
|
|
74
|
+
description: "Package(s) to ignore (supports wildcards like @reliverse/*)"
|
|
75
|
+
},
|
|
60
76
|
presets: {
|
|
61
77
|
type: "string",
|
|
62
78
|
description: "Comma-separated presets to clean: build,db,cms,frontend,docs,email,build-tools,deps,all"
|
|
@@ -65,10 +81,6 @@ export default defineCommand({
|
|
|
65
81
|
type: "string",
|
|
66
82
|
description: "Comma-separated custom patterns to clean (e.g., 'dist/,*.log,node_modules/')"
|
|
67
83
|
},
|
|
68
|
-
ignore: {
|
|
69
|
-
type: "string",
|
|
70
|
-
description: "Package(s) to ignore (supports wildcards like @reliverse/*)"
|
|
71
|
-
},
|
|
72
84
|
cwd: {
|
|
73
85
|
type: "string",
|
|
74
86
|
description: "Working directory (monorepo root)"
|
|
@@ -10,7 +10,7 @@ export interface BenchmarkRunnerOptions {
|
|
|
10
10
|
verbose?: boolean;
|
|
11
11
|
}
|
|
12
12
|
export declare class BenchmarkRunner {
|
|
13
|
-
|
|
13
|
+
readonly options: BenchmarkRunnerOptions;
|
|
14
14
|
constructor(options: BenchmarkRunnerOptions);
|
|
15
15
|
run(): Promise<BenchmarkResult>;
|
|
16
16
|
private runWarmup;
|
|
@@ -10,9 +10,10 @@ export class PerfCache {
|
|
|
10
10
|
this.ensureCacheDir();
|
|
11
11
|
}
|
|
12
12
|
ensureCacheDir() {
|
|
13
|
-
if (
|
|
14
|
-
|
|
13
|
+
if (existsSync(this.cacheDir)) {
|
|
14
|
+
return;
|
|
15
15
|
}
|
|
16
|
+
mkdirSync(this.cacheDir, { recursive: true });
|
|
16
17
|
}
|
|
17
18
|
generateHash(report) {
|
|
18
19
|
const content = JSON.stringify({
|
package/dist/cmds/tsc/cmd.js
CHANGED
|
@@ -7,6 +7,7 @@ export default defineCommand({
|
|
|
7
7
|
description: "Run TypeScript type checking on all workspace packages",
|
|
8
8
|
examples: [
|
|
9
9
|
"dler tsc",
|
|
10
|
+
'dler tsc --filter "@reliverse/dler-prompt,@reliverse/dler-build"',
|
|
10
11
|
'dler tsc --ignore "@reliverse/*"',
|
|
11
12
|
'dler tsc --ignore "@reliverse/dler-colors" --ignore "@reliverse/dler-v1"',
|
|
12
13
|
'dler tsc --ignore "@reliverse/dler-colors @reliverse/dler-v1"',
|
|
@@ -29,6 +30,11 @@ export default defineCommand({
|
|
|
29
30
|
]
|
|
30
31
|
},
|
|
31
32
|
args: defineArgs({
|
|
33
|
+
filter: {
|
|
34
|
+
type: "string",
|
|
35
|
+
description: "Package(s) to include (supports wildcards and comma-separated values like '@reliverse/dler-prompt,@reliverse/dler-build'). Takes precedence over --ignore when both are provided.",
|
|
36
|
+
positional: true
|
|
37
|
+
},
|
|
32
38
|
ignore: {
|
|
33
39
|
type: "string",
|
|
34
40
|
description: "Package(s) to ignore (supports wildcards like @reliverse/*)"
|
|
@@ -81,6 +87,7 @@ export default defineCommand({
|
|
|
81
87
|
process.exit(1);
|
|
82
88
|
}
|
|
83
89
|
const results = await runTscOnAllPackages(args.ignore, args.cwd, {
|
|
90
|
+
filter: args.filter,
|
|
84
91
|
concurrency: args.concurrency,
|
|
85
92
|
stopOnError: args.stopOnError,
|
|
86
93
|
verbose: args.verbose,
|
package/dist/cmds/tsc/impl.d.ts
CHANGED
|
@@ -36,6 +36,7 @@ interface TscOptions {
|
|
|
36
36
|
autoConcurrency?: boolean;
|
|
37
37
|
skipUnchanged?: boolean;
|
|
38
38
|
buildMode?: boolean;
|
|
39
|
+
filter?: string | string[];
|
|
39
40
|
}
|
|
40
41
|
export declare const runTscOnAllPackages: (ignore?: string | string[], cwd?: string, options?: TscOptions) => Promise<TscSummary>;
|
|
41
42
|
export {};
|
package/dist/cmds/tsc/impl.js
CHANGED
|
@@ -4,7 +4,11 @@ import { join, relative, resolve } from "node:path";
|
|
|
4
4
|
import { writeErrorLines } from "@reliverse/dler-helpers";
|
|
5
5
|
import { logger } from "@reliverse/dler-logger";
|
|
6
6
|
import pMap from "@reliverse/dler-mapper";
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
createIgnoreFilter,
|
|
9
|
+
createIncludeFilter,
|
|
10
|
+
normalizePatterns
|
|
11
|
+
} from "@reliverse/dler-matcher";
|
|
8
12
|
import {
|
|
9
13
|
getWorkspacePatterns,
|
|
10
14
|
hasWorkspaces,
|
|
@@ -125,7 +129,11 @@ const getWorkspacePackages = async (cwd) => {
|
|
|
125
129
|
cacheMisses: filteredPackages.length
|
|
126
130
|
};
|
|
127
131
|
};
|
|
128
|
-
const filterPackages = (packages, ignore) => {
|
|
132
|
+
const filterPackages = (packages, ignore, filter) => {
|
|
133
|
+
if (filter) {
|
|
134
|
+
const includeFilter = createIncludeFilter(filter);
|
|
135
|
+
return includeFilter(packages);
|
|
136
|
+
}
|
|
129
137
|
const alwaysIgnored = ["@reliverse/dler-v1"];
|
|
130
138
|
const combinedIgnore = ignore ? Array.isArray(ignore) ? [...alwaysIgnored, ...ignore] : [...alwaysIgnored, ignore] : alwaysIgnored;
|
|
131
139
|
const ignoreFilter = createIgnoreFilter(combinedIgnore);
|
|
@@ -556,14 +564,19 @@ export const runTscOnAllPackages = async (ignore, cwd, options = {}) => {
|
|
|
556
564
|
}
|
|
557
565
|
logger.info("");
|
|
558
566
|
}
|
|
559
|
-
const packages = filterPackages(allPackages, ignore);
|
|
560
|
-
const
|
|
561
|
-
if (
|
|
567
|
+
const packages = filterPackages(allPackages, ignore, options.filter);
|
|
568
|
+
const filteredCount = allPackages.length - packages.length;
|
|
569
|
+
if (options.filter) {
|
|
570
|
+
const patterns = normalizePatterns(options.filter);
|
|
571
|
+
logger.info(
|
|
572
|
+
` Filtering to ${packages.length} packages matching: ${patterns.join(", ")}`
|
|
573
|
+
);
|
|
574
|
+
} else if (filteredCount > 0) {
|
|
562
575
|
const alwaysIgnored = ["@reliverse/dler-v1"];
|
|
563
576
|
const combinedIgnore = ignore ? Array.isArray(ignore) ? [...alwaysIgnored, ...ignore] : [...alwaysIgnored, ignore] : alwaysIgnored;
|
|
564
577
|
const patterns = normalizePatterns(combinedIgnore);
|
|
565
578
|
logger.info(
|
|
566
|
-
` Ignoring ${
|
|
579
|
+
` Ignoring ${filteredCount} packages matching: ${patterns.join(", ")}`
|
|
567
580
|
);
|
|
568
581
|
}
|
|
569
582
|
let concurrency = options.concurrency ?? DEFAULT_CONCURRENCY;
|
package/dist/cmds/update/cmd.js
CHANGED
|
@@ -19,6 +19,10 @@ export default defineCommand({
|
|
|
19
19
|
"dler update",
|
|
20
20
|
"dler update --install",
|
|
21
21
|
"dler update --dryRun",
|
|
22
|
+
'dler update --filter "@reliverse/dler-prompt,@reliverse/dler-build"',
|
|
23
|
+
'dler update --filter "@reliverse/dler-*"',
|
|
24
|
+
"dler update --filter cli,packages/build",
|
|
25
|
+
'dler update --ignore "@reliverse/*"',
|
|
22
26
|
"dler update --name @types/* --name react*",
|
|
23
27
|
'dler update --ignore "eslint-*" --ignore "@babel/*"',
|
|
24
28
|
"dler update --no-allowMajor",
|
|
@@ -26,7 +30,8 @@ export default defineCommand({
|
|
|
26
30
|
"dler update --ignoreFields peerDependencies",
|
|
27
31
|
"dler update --dryRun --install",
|
|
28
32
|
"dler update --name react --name react-dom --install",
|
|
29
|
-
"dler update --ignore @types/* --allowMajor"
|
|
33
|
+
"dler update --ignore @types/* --allowMajor",
|
|
34
|
+
'dler update --filter "@reliverse/dler-*" --name react --install'
|
|
30
35
|
]
|
|
31
36
|
},
|
|
32
37
|
args: defineArgs({
|
|
@@ -40,13 +45,17 @@ export default defineCommand({
|
|
|
40
45
|
description: msgs.args.cwd,
|
|
41
46
|
default: getCurrentWorkingDirectory()
|
|
42
47
|
},
|
|
43
|
-
|
|
48
|
+
filter: {
|
|
44
49
|
type: "string",
|
|
45
|
-
description: "
|
|
50
|
+
description: "Package(s) to include (supports wildcards and comma-separated values like '@reliverse/dler-prompt,@reliverse/dler-build'). Takes precedence over --ignore when both are provided."
|
|
46
51
|
},
|
|
47
52
|
ignore: {
|
|
48
53
|
type: "string",
|
|
49
|
-
description: "
|
|
54
|
+
description: "Package(s) to ignore (supports wildcards like @reliverse/*)"
|
|
55
|
+
},
|
|
56
|
+
name: {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: "Specific dependencies to update, supports glob patterns (e.g. '@types/*', 'react*'). Can be specified multiple times or comma-separated."
|
|
50
59
|
},
|
|
51
60
|
dryRun: {
|
|
52
61
|
type: "boolean",
|
|
@@ -83,7 +92,7 @@ export default defineCommand({
|
|
|
83
92
|
const showDetails = Boolean(details);
|
|
84
93
|
const fieldsToIgnore = Array.isArray(ignoreFields) ? ignoreFields : [];
|
|
85
94
|
await validatePackageJson();
|
|
86
|
-
const { packageJsonFiles, fileDepsMap } = await prepareAllUpdateCandidates();
|
|
95
|
+
const { packageJsonFiles, fileDepsMap } = await prepareAllUpdateCandidates(args.filter, args.ignore, args.cwd);
|
|
87
96
|
if (packageJsonFiles.length === 0) {
|
|
88
97
|
logger.log("No package.json files found");
|
|
89
98
|
return;
|
|
@@ -2,8 +2,9 @@ import { type UpdateResult } from "./utils.js";
|
|
|
2
2
|
interface UpdateArgs {
|
|
3
3
|
ci?: boolean;
|
|
4
4
|
cwd?: string;
|
|
5
|
+
filter?: string | string[];
|
|
5
6
|
name?: string[];
|
|
6
|
-
ignore?: string[];
|
|
7
|
+
ignore?: string | string[];
|
|
7
8
|
dryRun?: boolean;
|
|
8
9
|
install?: boolean;
|
|
9
10
|
allowMajor?: boolean;
|
|
@@ -11,7 +12,7 @@ interface UpdateArgs {
|
|
|
11
12
|
ignoreFields?: string[];
|
|
12
13
|
}
|
|
13
14
|
export declare function validatePackageJson(): Promise<string>;
|
|
14
|
-
export declare function prepareAllUpdateCandidates(): Promise<{
|
|
15
|
+
export declare function prepareAllUpdateCandidates(filter?: string | string[], ignore?: string | string[], cwd?: string): Promise<{
|
|
15
16
|
packageJsonFiles: string[];
|
|
16
17
|
fileDepsMap: Map<string, Record<string, any>>;
|
|
17
18
|
}>;
|
package/dist/cmds/update/impl.js
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { logger } from "@reliverse/dler-logger";
|
|
2
2
|
import pMap from "@reliverse/dler-mapper";
|
|
3
|
+
import {
|
|
4
|
+
createIncludeFilter,
|
|
5
|
+
normalizePatterns
|
|
6
|
+
} from "@reliverse/dler-matcher";
|
|
7
|
+
import {
|
|
8
|
+
getWorkspacePatterns,
|
|
9
|
+
hasWorkspaces,
|
|
10
|
+
readPackageJSON
|
|
11
|
+
} from "@reliverse/dler-pkg-tsc";
|
|
3
12
|
import { Glob } from "bun";
|
|
4
13
|
import fs from "fs/promises";
|
|
5
|
-
import path from "path";
|
|
14
|
+
import path, { relative, resolve } from "path";
|
|
6
15
|
import {
|
|
7
16
|
applyVersionUpdate,
|
|
8
17
|
checkPackageUpdate,
|
|
@@ -20,17 +29,128 @@ export async function validatePackageJson() {
|
|
|
20
29
|
}
|
|
21
30
|
return packageJsonPath;
|
|
22
31
|
}
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
const matchesPattern = (pkg, pattern, monorepoRoot) => {
|
|
33
|
+
const normalizedPattern = pattern.trim();
|
|
34
|
+
const nameFilter = createIncludeFilter(normalizedPattern);
|
|
35
|
+
if (nameFilter([pkg]).length > 0) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
let relativePath;
|
|
39
|
+
if (monorepoRoot) {
|
|
40
|
+
relativePath = relative(monorepoRoot, pkg.path).replace(/\\/g, "/");
|
|
41
|
+
} else {
|
|
42
|
+
relativePath = relative(resolve(pkg.path, ".."), pkg.path).replace(
|
|
43
|
+
/\\/g,
|
|
44
|
+
"/"
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
if (relativePath === normalizedPattern || relativePath.endsWith(normalizedPattern)) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
const pathFilter = createIncludeFilter(normalizedPattern);
|
|
51
|
+
if (pathFilter([{ name: relativePath, path: pkg.path }]).length > 0) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
};
|
|
56
|
+
const filterPackagesByPatterns = (packages, patterns, monorepoRoot) => {
|
|
57
|
+
const patternArray = Array.isArray(patterns) ? patterns : [patterns];
|
|
58
|
+
const normalizedPatterns = patternArray.flatMap(
|
|
59
|
+
(p) => typeof p === "string" ? p.split(",").map((s) => s.trim()) : [p]
|
|
60
|
+
);
|
|
61
|
+
return packages.filter(
|
|
62
|
+
(pkg) => normalizedPatterns.some(
|
|
63
|
+
(pattern) => matchesPattern(pkg, pattern, monorepoRoot)
|
|
64
|
+
)
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
export async function prepareAllUpdateCandidates(filter, ignore, cwd) {
|
|
68
|
+
const workingDir = cwd ? path.resolve(cwd) : process.cwd();
|
|
69
|
+
let packageJsonFiles = [];
|
|
70
|
+
let isMonorepo = false;
|
|
71
|
+
let monorepoRoot = null;
|
|
72
|
+
try {
|
|
73
|
+
const rootPkg = await readPackageJSON(workingDir);
|
|
74
|
+
if (rootPkg && hasWorkspaces(rootPkg)) {
|
|
75
|
+
isMonorepo = true;
|
|
76
|
+
monorepoRoot = workingDir;
|
|
77
|
+
const patterns = getWorkspacePatterns(rootPkg);
|
|
78
|
+
for (const pattern of patterns) {
|
|
79
|
+
const glob = new Glob(path.join(pattern, "package.json"));
|
|
80
|
+
for await (const file of glob.scan({
|
|
81
|
+
cwd: workingDir,
|
|
82
|
+
onlyFiles: true
|
|
83
|
+
})) {
|
|
84
|
+
packageJsonFiles.push(path.resolve(workingDir, file));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (filter || ignore) {
|
|
88
|
+
const packageInfos = [];
|
|
89
|
+
for (const pkgPath of packageJsonFiles) {
|
|
90
|
+
try {
|
|
91
|
+
const pkg = await readPackageJSON(path.dirname(pkgPath));
|
|
92
|
+
if (pkg?.name) {
|
|
93
|
+
packageInfos.push({
|
|
94
|
+
name: pkg.name,
|
|
95
|
+
path: path.dirname(pkgPath)
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
} catch {
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (filter) {
|
|
102
|
+
const filtered = filterPackagesByPatterns(
|
|
103
|
+
packageInfos,
|
|
104
|
+
filter,
|
|
105
|
+
monorepoRoot || void 0
|
|
106
|
+
);
|
|
107
|
+
packageJsonFiles = filtered.map(
|
|
108
|
+
(info) => path.join(info.path, "package.json")
|
|
109
|
+
);
|
|
110
|
+
if (filtered.length > 0) {
|
|
111
|
+
const patterns2 = normalizePatterns(filter);
|
|
112
|
+
logger.debug(
|
|
113
|
+
` Filtering to ${filtered.length} packages matching: ${patterns2.join(", ")}`
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
} else if (ignore) {
|
|
117
|
+
const filtered = packageInfos.filter((pkg) => {
|
|
118
|
+
const ignorePatterns = Array.isArray(ignore) ? ignore : [ignore];
|
|
119
|
+
const normalizedIgnorePatterns = ignorePatterns.flatMap(
|
|
120
|
+
(p) => typeof p === "string" ? p.split(",").map((s) => s.trim()) : [p]
|
|
121
|
+
);
|
|
122
|
+
return !normalizedIgnorePatterns.some(
|
|
123
|
+
(pattern) => matchesPattern(pkg, pattern, monorepoRoot || void 0)
|
|
124
|
+
);
|
|
125
|
+
});
|
|
126
|
+
packageJsonFiles = filtered.map(
|
|
127
|
+
(info) => path.join(info.path, "package.json")
|
|
128
|
+
);
|
|
129
|
+
const ignoredCount = packageInfos.length - filtered.length;
|
|
130
|
+
if (ignoredCount > 0) {
|
|
131
|
+
const patterns2 = normalizePatterns(ignore);
|
|
132
|
+
logger.debug(
|
|
133
|
+
` Ignoring ${ignoredCount} packages matching: ${patterns2.join(", ")}`
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
} catch {
|
|
140
|
+
}
|
|
141
|
+
if (!isMonorepo) {
|
|
142
|
+
const glob = new Glob("**/package.json");
|
|
143
|
+
const allFiles = [];
|
|
144
|
+
for await (const file of glob.scan({
|
|
145
|
+
cwd: workingDir,
|
|
146
|
+
onlyFiles: true
|
|
147
|
+
})) {
|
|
148
|
+
const fullPath = path.resolve(workingDir, file);
|
|
149
|
+
if (!file.includes("node_modules") && !file.includes("dist") && !file.includes("build") && !file.includes(".git") && !file.includes("coverage") && !file.includes(".next") && !file.includes("out") && !file.includes("target") && !file.includes(".turbo")) {
|
|
150
|
+
allFiles.push(fullPath);
|
|
151
|
+
}
|
|
33
152
|
}
|
|
153
|
+
packageJsonFiles = allFiles;
|
|
34
154
|
}
|
|
35
155
|
if (packageJsonFiles.length === 0) {
|
|
36
156
|
logger.warn("No package.json files found");
|
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.
|
|
5
|
+
"version": "2.1.18",
|
|
6
6
|
"private": false,
|
|
7
7
|
"type": "module",
|
|
8
8
|
"bin": {
|