@reliverse/dler 2.2.5 → 2.2.10
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/README.md +14 -14
- package/dist/cli.js +1 -1
- package/dist/cmds/biome/cmd.js +58 -0
- package/dist/cmds/biome/impl.d.ts +26 -0
- package/dist/cmds/biome/impl.js +272 -0
- package/dist/cmds/build/cmd.js +18 -10
- package/dist/cmds/clean/cmd.js +6 -6
- package/dist/cmds/clean/impl.js +16 -12
- package/dist/cmds/clean/presets.js +2 -2
- package/dist/cmds/publish/cmd.js +7 -7
- package/dist/cmds/senv/cmd.js +13 -15
- package/dist/cmds/tsc/cache.js +1 -1
- package/dist/cmds/tsc/cmd.js +11 -8
- package/dist/cmds/tsc/impl.js +132 -17
- package/dist/cmds/update/cmd.js +11 -10
- package/dist/cmds/update/impl.d.ts +4 -4
- package/dist/cmds/update/impl.js +10 -11
- package/dist/cmds/update/utils.d.ts +23 -4
- package/dist/cmds/update/utils.js +22 -16
- package/package.json +16 -13
- package/dist/cmds/perf/analysis/bundle.d.ts +0 -20
- package/dist/cmds/perf/analysis/bundle.js +0 -225
- package/dist/cmds/perf/analysis/filesystem.d.ts +0 -27
- package/dist/cmds/perf/analysis/filesystem.js +0 -245
- package/dist/cmds/perf/analysis/monorepo.d.ts +0 -30
- package/dist/cmds/perf/analysis/monorepo.js +0 -345
- package/dist/cmds/perf/benchmarks/command.d.ts +0 -21
- package/dist/cmds/perf/benchmarks/command.js +0 -162
- package/dist/cmds/perf/benchmarks/memory.d.ts +0 -41
- package/dist/cmds/perf/benchmarks/memory.js +0 -169
- package/dist/cmds/perf/benchmarks/runner.d.ts +0 -22
- package/dist/cmds/perf/benchmarks/runner.js +0 -157
- package/dist/cmds/perf/cmd.js +0 -240
- package/dist/cmds/perf/impl.d.ts +0 -24
- package/dist/cmds/perf/impl.js +0 -297
- package/dist/cmds/perf/reporters/console.d.ts +0 -12
- package/dist/cmds/perf/reporters/console.js +0 -257
- package/dist/cmds/perf/reporters/html.d.ts +0 -27
- package/dist/cmds/perf/reporters/html.js +0 -881
- package/dist/cmds/perf/reporters/json.d.ts +0 -9
- package/dist/cmds/perf/reporters/json.js +0 -32
- package/dist/cmds/perf/types.d.ts +0 -184
- package/dist/cmds/perf/types.js +0 -0
- package/dist/cmds/perf/utils/cache.d.ts +0 -23
- package/dist/cmds/perf/utils/cache.js +0 -172
- package/dist/cmds/perf/utils/formatter.d.ts +0 -17
- package/dist/cmds/perf/utils/formatter.js +0 -134
- package/dist/cmds/perf/utils/stats.d.ts +0 -15
- package/dist/cmds/perf/utils/stats.js +0 -101
- package/dist/cmds/port/cmd.d.ts +0 -2
- package/dist/cmds/port/cmd.js +0 -58
- package/dist/cmds/port/impl.d.ts +0 -5
- package/dist/cmds/port/impl.js +0 -280
- package/dist/cmds/shell/cmd.d.ts +0 -2
- package/dist/cmds/shell/cmd.js +0 -46
- /package/dist/cmds/{perf → biome}/cmd.d.ts +0 -0
package/README.md
CHANGED
|
@@ -27,31 +27,31 @@ dler [command] [options]
|
|
|
27
27
|
Both CLI and framework packages work independently, you're not required to install both.
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
|
-
bun add @reliverse/
|
|
30
|
+
bun add @reliverse/relinka
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
## Framework Usage
|
|
34
34
|
|
|
35
35
|
```ts
|
|
36
|
-
import { logger } from "@reliverse/
|
|
36
|
+
import { logger } from "@reliverse/relinka";
|
|
37
37
|
logger.success("Hello, Reliverse!"); // > ✓ Hello, Reliverse!
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
## Available Packages
|
|
41
41
|
|
|
42
|
-
1. `@reliverse/
|
|
43
|
-
2. `@reliverse/
|
|
44
|
-
3. `@reliverse/
|
|
45
|
-
4. `@reliverse/
|
|
46
|
-
5. `@reliverse/
|
|
47
|
-
6. `@reliverse/
|
|
48
|
-
7. `@reliverse/
|
|
49
|
-
8. `@reliverse/
|
|
50
|
-
9. `@reliverse/
|
|
51
|
-
10. `@reliverse/
|
|
52
|
-
11. `@reliverse/
|
|
42
|
+
1. `@reliverse/bump`
|
|
43
|
+
2. `@reliverse/build`
|
|
44
|
+
3. `@reliverse/config`
|
|
45
|
+
4. `@reliverse/helpers`
|
|
46
|
+
5. `@reliverse/relico`
|
|
47
|
+
6. `@reliverse/mapkit`
|
|
48
|
+
7. `@reliverse/rempts`
|
|
49
|
+
8. `@reliverse/relinka`
|
|
50
|
+
9. `@reliverse/matcha`
|
|
51
|
+
10. `@reliverse/typerso`
|
|
52
|
+
11. `@reliverse/rempts`
|
|
53
53
|
12. `@reliverse/dler-spinner`
|
|
54
|
-
13. `@reliverse/
|
|
54
|
+
13. `@reliverse/publish`
|
|
55
55
|
|
|
56
56
|
## Available CLI Commands
|
|
57
57
|
|
package/dist/cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { runLauncher } from "@reliverse/
|
|
1
|
+
import { runLauncher } from "@reliverse/rempts";
|
|
2
2
|
await runLauncher(import.meta.url, { verbose: false });
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { logger } from "@reliverse/relinka";
|
|
2
|
+
import { defineArgs, defineCommand } from "@reliverse/rempts";
|
|
3
|
+
import { runBiomeCheck } from "./impl.js";
|
|
4
|
+
export default defineCommand({
|
|
5
|
+
meta: {
|
|
6
|
+
name: "biome",
|
|
7
|
+
description: "Run Biome linting and formatting check on workspace",
|
|
8
|
+
examples: [
|
|
9
|
+
"dler biome",
|
|
10
|
+
"dler biome --cwd /path/to/project",
|
|
11
|
+
"dler biome --verbose",
|
|
12
|
+
"dler biome --copy-logs",
|
|
13
|
+
"dler biome --verbose --copy-logs"
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
args: defineArgs({
|
|
17
|
+
cwd: {
|
|
18
|
+
type: "string",
|
|
19
|
+
description: "Working directory to run biome from (default: current directory)"
|
|
20
|
+
},
|
|
21
|
+
verbose: {
|
|
22
|
+
type: "boolean",
|
|
23
|
+
description: "Verbose mode (default: false)"
|
|
24
|
+
},
|
|
25
|
+
copyLogs: {
|
|
26
|
+
type: "boolean",
|
|
27
|
+
description: "Copy diagnostics to clipboard (default: true, skipped in CI)",
|
|
28
|
+
default: true
|
|
29
|
+
}
|
|
30
|
+
}),
|
|
31
|
+
run: async ({ args }) => {
|
|
32
|
+
try {
|
|
33
|
+
if (typeof process.versions.bun === "undefined") {
|
|
34
|
+
logger.error("\u274C This command requires Bun runtime. Sorry.");
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
const isCI = process.env.CI === "true" || !process.stdout.isTTY;
|
|
38
|
+
const shouldCopyLogs = args.copyLogs !== false && !isCI;
|
|
39
|
+
const result = await runBiomeCheck({
|
|
40
|
+
cwd: args.cwd,
|
|
41
|
+
verbose: args.verbose,
|
|
42
|
+
copyLogs: shouldCopyLogs
|
|
43
|
+
});
|
|
44
|
+
if (!result.success) {
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
logger.success("\n\u2705 Biome check passed!");
|
|
48
|
+
} catch (error) {
|
|
49
|
+
logger.error("\n\u274C Biome check failed:");
|
|
50
|
+
if (error instanceof Error) {
|
|
51
|
+
logger.error(error.message);
|
|
52
|
+
} else {
|
|
53
|
+
logger.error(String(error));
|
|
54
|
+
}
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
interface BiomeDiagnostic {
|
|
2
|
+
file: string;
|
|
3
|
+
line: number;
|
|
4
|
+
column: number;
|
|
5
|
+
rule: string;
|
|
6
|
+
severity: "error" | "warning" | "info";
|
|
7
|
+
message: string;
|
|
8
|
+
suggestion?: string;
|
|
9
|
+
}
|
|
10
|
+
interface BiomeResult {
|
|
11
|
+
success: boolean;
|
|
12
|
+
errors: number;
|
|
13
|
+
warnings: number;
|
|
14
|
+
infos: number;
|
|
15
|
+
diagnostics: BiomeDiagnostic[];
|
|
16
|
+
rawOutput: string;
|
|
17
|
+
filteredOutput: string;
|
|
18
|
+
executionTime: number;
|
|
19
|
+
}
|
|
20
|
+
interface BiomeOptions {
|
|
21
|
+
verbose?: boolean;
|
|
22
|
+
copyLogs?: boolean;
|
|
23
|
+
cwd?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare const runBiomeCheck: (options?: BiomeOptions) => Promise<BiomeResult>;
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { logger } from "@reliverse/relinka";
|
|
3
|
+
import clipboard from "clipboardy";
|
|
4
|
+
const runBiomeCommand = async (cwd) => {
|
|
5
|
+
try {
|
|
6
|
+
const proc = Bun.spawn(["bun", "biome", "check", "--write", "--unsafe"], {
|
|
7
|
+
cwd,
|
|
8
|
+
stdout: "pipe",
|
|
9
|
+
stderr: "pipe"
|
|
10
|
+
});
|
|
11
|
+
const [stdout, stderr] = await Promise.all([
|
|
12
|
+
new Response(proc.stdout).text(),
|
|
13
|
+
new Response(proc.stderr).text()
|
|
14
|
+
]);
|
|
15
|
+
const exitCode = await proc.exited;
|
|
16
|
+
return { stdout, stderr, exitCode };
|
|
17
|
+
} catch (error) {
|
|
18
|
+
throw new Error(
|
|
19
|
+
`Failed to spawn biome: ${error instanceof Error ? error.message : String(error)}`
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const parseBiomeOutput = (output, cwd) => {
|
|
24
|
+
const lines = output.split("\n");
|
|
25
|
+
const diagnostics = [];
|
|
26
|
+
let currentDiagnostic = null;
|
|
27
|
+
let inDiagnostic = false;
|
|
28
|
+
let errors = 0;
|
|
29
|
+
let warnings = 0;
|
|
30
|
+
let infos = 0;
|
|
31
|
+
const fileLinePattern = /^(.+?):(\d+):(\d+)\s+(.+?)\s+━+$/;
|
|
32
|
+
const errorPattern = /^\s+×\s+(.+)$/;
|
|
33
|
+
const infoPattern = /^\s+i\s+(.+)$/;
|
|
34
|
+
for (let i = 0; i < lines.length; i++) {
|
|
35
|
+
const line = lines[i];
|
|
36
|
+
if (!line) continue;
|
|
37
|
+
const fileMatch = line.match(fileLinePattern);
|
|
38
|
+
if (fileMatch) {
|
|
39
|
+
if (currentDiagnostic?.file) {
|
|
40
|
+
diagnostics.push(currentDiagnostic);
|
|
41
|
+
if (currentDiagnostic.severity === "error") errors++;
|
|
42
|
+
else if (currentDiagnostic.severity === "warning") warnings++;
|
|
43
|
+
else if (currentDiagnostic.severity === "info") infos++;
|
|
44
|
+
}
|
|
45
|
+
const file = fileMatch[1];
|
|
46
|
+
const lineNum = fileMatch[2];
|
|
47
|
+
const col = fileMatch[3];
|
|
48
|
+
const rule = fileMatch[4];
|
|
49
|
+
if (file && lineNum && col && rule) {
|
|
50
|
+
const normalizedFile = file.replace(/\\/g, "/");
|
|
51
|
+
currentDiagnostic = {
|
|
52
|
+
file: resolve(cwd, normalizedFile),
|
|
53
|
+
line: Number.parseInt(lineNum, 10),
|
|
54
|
+
column: Number.parseInt(col, 10),
|
|
55
|
+
rule: rule.trim(),
|
|
56
|
+
severity: "error",
|
|
57
|
+
// Default, will be updated if we see warning/info
|
|
58
|
+
message: ""
|
|
59
|
+
};
|
|
60
|
+
inDiagnostic = true;
|
|
61
|
+
}
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (!inDiagnostic || !currentDiagnostic) continue;
|
|
65
|
+
const errorMatch = line.match(errorPattern);
|
|
66
|
+
if (errorMatch) {
|
|
67
|
+
currentDiagnostic.message = errorMatch[1]?.trim();
|
|
68
|
+
currentDiagnostic.severity = "error";
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const infoMatch = line.match(infoPattern);
|
|
72
|
+
if (infoMatch) {
|
|
73
|
+
currentDiagnostic.suggestion = infoMatch[1]?.trim();
|
|
74
|
+
if (!currentDiagnostic.message) {
|
|
75
|
+
currentDiagnostic.severity = "info";
|
|
76
|
+
}
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (line.trim() === "" && currentDiagnostic.message) {
|
|
80
|
+
inDiagnostic = false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (currentDiagnostic?.file) {
|
|
84
|
+
diagnostics.push(currentDiagnostic);
|
|
85
|
+
if (currentDiagnostic.severity === "error") errors++;
|
|
86
|
+
else if (currentDiagnostic.severity === "warning") warnings++;
|
|
87
|
+
else if (currentDiagnostic.severity === "info") infos++;
|
|
88
|
+
}
|
|
89
|
+
const summaryMatch = output.match(/Found (\d+) errors?/i);
|
|
90
|
+
const errorCount = summaryMatch?.[1];
|
|
91
|
+
if (errorCount) {
|
|
92
|
+
const totalErrors = Number.parseInt(errorCount, 10);
|
|
93
|
+
if (totalErrors > errors) {
|
|
94
|
+
errors = totalErrors;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return { diagnostics, errors, warnings, infos };
|
|
98
|
+
};
|
|
99
|
+
const formatDiagnostic = (diag, cwd) => {
|
|
100
|
+
const normalizedCwd = cwd.replace(/\\/g, "/");
|
|
101
|
+
const normalizedFile = diag.file.replace(/\\/g, "/");
|
|
102
|
+
const relativePath = normalizedFile.replace(`${normalizedCwd}/`, "");
|
|
103
|
+
const rulePart = diag.rule ? ` [${diag.rule}]` : "";
|
|
104
|
+
const suggestionPart = diag.suggestion ? `
|
|
105
|
+
i ${diag.suggestion}` : "";
|
|
106
|
+
return `${relativePath}:${diag.line}:${diag.column}${rulePart}
|
|
107
|
+
\xD7 ${diag.message}${suggestionPart}`;
|
|
108
|
+
};
|
|
109
|
+
const formatFilteredOutput = (diagnostics, cwd) => {
|
|
110
|
+
const lines = [];
|
|
111
|
+
const byRule = /* @__PURE__ */ new Map();
|
|
112
|
+
for (const diag of diagnostics) {
|
|
113
|
+
const rule = diag.rule || "unknown";
|
|
114
|
+
const existing = byRule.get(rule) ?? [];
|
|
115
|
+
existing.push(diag);
|
|
116
|
+
byRule.set(rule, existing);
|
|
117
|
+
}
|
|
118
|
+
for (const ruleDiags of byRule.values()) {
|
|
119
|
+
for (const diag of ruleDiags) {
|
|
120
|
+
lines.push(formatDiagnostic(diag, cwd));
|
|
121
|
+
lines.push("");
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return lines.join("\n");
|
|
125
|
+
};
|
|
126
|
+
const collectBiomeLogs = (result, cwd) => {
|
|
127
|
+
if (result.diagnostics.length === 0) {
|
|
128
|
+
return "";
|
|
129
|
+
}
|
|
130
|
+
const logs = [];
|
|
131
|
+
logs.push(
|
|
132
|
+
"I received the following Biome errors/warnings (please analyse the related code for each and correct them):"
|
|
133
|
+
);
|
|
134
|
+
logs.push("```");
|
|
135
|
+
logs.push("Biome Check (bun dler biome)");
|
|
136
|
+
logs.push("");
|
|
137
|
+
const byRule = /* @__PURE__ */ new Map();
|
|
138
|
+
const normalizedCwd = cwd.replace(/\\/g, "/");
|
|
139
|
+
for (const diag of result.diagnostics) {
|
|
140
|
+
const rule = diag.rule || "unknown";
|
|
141
|
+
const existing = byRule.get(rule) ?? [];
|
|
142
|
+
existing.push(diag);
|
|
143
|
+
byRule.set(rule, existing);
|
|
144
|
+
}
|
|
145
|
+
for (const [rule, ruleDiags] of byRule) {
|
|
146
|
+
logs.push(
|
|
147
|
+
`\u{1F50D} ${rule} (${ruleDiags.length} occurrence${ruleDiags.length > 1 ? "s" : ""})`
|
|
148
|
+
);
|
|
149
|
+
logs.push(` ${"\u2500".repeat(30)}`);
|
|
150
|
+
const firstDiag = ruleDiags[0];
|
|
151
|
+
if (firstDiag) {
|
|
152
|
+
logs.push(` \xD7 ${firstDiag.message}`);
|
|
153
|
+
if (firstDiag.suggestion) {
|
|
154
|
+
logs.push(` i ${firstDiag.suggestion}`);
|
|
155
|
+
}
|
|
156
|
+
logs.push("");
|
|
157
|
+
}
|
|
158
|
+
for (const diag of ruleDiags) {
|
|
159
|
+
const normalizedFile = diag.file.replace(/\\/g, "/");
|
|
160
|
+
const relativePath = normalizedFile.replace(`${normalizedCwd}/`, "");
|
|
161
|
+
logs.push(` ${relativePath}:${diag.line}:${diag.column}`);
|
|
162
|
+
}
|
|
163
|
+
logs.push("");
|
|
164
|
+
}
|
|
165
|
+
logs.push("```");
|
|
166
|
+
return logs.join("\n");
|
|
167
|
+
};
|
|
168
|
+
const copyLogsToClipboard = async (result, cwd) => {
|
|
169
|
+
try {
|
|
170
|
+
const logs = collectBiomeLogs(result, cwd);
|
|
171
|
+
if (!logs) {
|
|
172
|
+
logger.info("\u2139\uFE0F No diagnostics to copy to clipboard");
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
await clipboard.write(logs);
|
|
176
|
+
logger.success("\u{1F4CB} Biome diagnostics copied to clipboard!");
|
|
177
|
+
} catch (error) {
|
|
178
|
+
logger.error("\u274C Failed to copy logs to clipboard:");
|
|
179
|
+
if (error instanceof Error) {
|
|
180
|
+
logger.error(error.message);
|
|
181
|
+
} else {
|
|
182
|
+
logger.error(String(error));
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
const formatOutput = (result, cwd) => {
|
|
187
|
+
logger.log("\u2501".repeat(60));
|
|
188
|
+
logger.log(`\u{1F4CA} Biome Check Summary:`);
|
|
189
|
+
logger.log(` \u{1F41B} Total errors: ${result.errors}`);
|
|
190
|
+
logger.log(` \u26A0\uFE0F Total warnings: ${result.warnings}`);
|
|
191
|
+
logger.log(` \u2139\uFE0F Total infos: ${result.infos}`);
|
|
192
|
+
logger.log(` \u23F1\uFE0F Execution time: ${result.executionTime}ms`);
|
|
193
|
+
logger.log("\u2501".repeat(60));
|
|
194
|
+
if (result.diagnostics.length > 0) {
|
|
195
|
+
logger.error("\n\u274C Diagnostics:\n");
|
|
196
|
+
const byRule = /* @__PURE__ */ new Map();
|
|
197
|
+
const normalizedCwd = cwd.replace(/\\/g, "/");
|
|
198
|
+
for (const diag of result.diagnostics) {
|
|
199
|
+
const rule = diag.rule || "unknown";
|
|
200
|
+
const existing = byRule.get(rule) ?? [];
|
|
201
|
+
existing.push(diag);
|
|
202
|
+
byRule.set(rule, existing);
|
|
203
|
+
}
|
|
204
|
+
for (const [rule, ruleDiags] of byRule) {
|
|
205
|
+
logger.error(
|
|
206
|
+
`\u{1F50D} ${rule} (${ruleDiags.length} occurrence${ruleDiags.length > 1 ? "s" : ""})`
|
|
207
|
+
);
|
|
208
|
+
logger.error(` ${"\u2500".repeat(30)}`);
|
|
209
|
+
const firstDiag = ruleDiags[0];
|
|
210
|
+
if (firstDiag) {
|
|
211
|
+
const severityIcon = firstDiag.severity === "error" ? "\xD7" : firstDiag.severity === "warning" ? "\u26A0" : "\u2139";
|
|
212
|
+
logger.error(` ${severityIcon} ${firstDiag.message}`);
|
|
213
|
+
if (firstDiag.suggestion) {
|
|
214
|
+
logger.info(` i ${firstDiag.suggestion}`);
|
|
215
|
+
}
|
|
216
|
+
logger.error("");
|
|
217
|
+
}
|
|
218
|
+
for (const diag of ruleDiags) {
|
|
219
|
+
const normalizedFile = diag.file.replace(/\\/g, "/");
|
|
220
|
+
const relativePath = normalizedFile.replace(`${normalizedCwd}/`, "");
|
|
221
|
+
logger.error(` ${relativePath}:${diag.line}:${diag.column}`);
|
|
222
|
+
}
|
|
223
|
+
logger.error("");
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
export const runBiomeCheck = async (options = {}) => {
|
|
228
|
+
const { verbose = false, copyLogs = false, cwd = process.cwd() } = options;
|
|
229
|
+
const startTime = Date.now();
|
|
230
|
+
const resolvedCwd = resolve(cwd);
|
|
231
|
+
if (verbose) {
|
|
232
|
+
logger.info(`\u{1F50D} Running biome check in: ${resolvedCwd}`);
|
|
233
|
+
}
|
|
234
|
+
try {
|
|
235
|
+
const { stdout, stderr } = await runBiomeCommand(resolvedCwd);
|
|
236
|
+
const output = stdout + stderr;
|
|
237
|
+
const { diagnostics, errors, warnings, infos } = parseBiomeOutput(
|
|
238
|
+
output,
|
|
239
|
+
resolvedCwd
|
|
240
|
+
);
|
|
241
|
+
const filteredOutput = formatFilteredOutput(diagnostics, resolvedCwd);
|
|
242
|
+
const result = {
|
|
243
|
+
success: errors === 0,
|
|
244
|
+
errors,
|
|
245
|
+
warnings,
|
|
246
|
+
infos,
|
|
247
|
+
diagnostics,
|
|
248
|
+
rawOutput: output,
|
|
249
|
+
filteredOutput,
|
|
250
|
+
executionTime: Date.now() - startTime
|
|
251
|
+
};
|
|
252
|
+
formatOutput(result, resolvedCwd);
|
|
253
|
+
if (copyLogs && result.diagnostics.length > 0) {
|
|
254
|
+
await copyLogsToClipboard(result, resolvedCwd);
|
|
255
|
+
}
|
|
256
|
+
return result;
|
|
257
|
+
} catch (error) {
|
|
258
|
+
logger.error(
|
|
259
|
+
`\u274C Failed to run biome: ${error instanceof Error ? error.message : String(error)}`
|
|
260
|
+
);
|
|
261
|
+
return {
|
|
262
|
+
success: false,
|
|
263
|
+
errors: 1,
|
|
264
|
+
warnings: 0,
|
|
265
|
+
infos: 0,
|
|
266
|
+
diagnostics: [],
|
|
267
|
+
rawOutput: error instanceof Error ? error.message : String(error),
|
|
268
|
+
filteredOutput: error instanceof Error ? error.message : String(error),
|
|
269
|
+
executionTime: Date.now() - startTime
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
};
|
package/dist/cmds/build/cmd.js
CHANGED
|
@@ -2,24 +2,24 @@ import {
|
|
|
2
2
|
applyPresets,
|
|
3
3
|
runBuildOnAllPackages,
|
|
4
4
|
validateAndExit
|
|
5
|
-
} from "@reliverse/
|
|
5
|
+
} from "@reliverse/build";
|
|
6
6
|
import {
|
|
7
7
|
clearLoggerInternalsInPackages,
|
|
8
8
|
replaceExportsInPackages
|
|
9
|
-
} from "@reliverse/
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
9
|
+
} from "@reliverse/helpers";
|
|
10
|
+
import { logger } from "@reliverse/relinka";
|
|
11
|
+
import { defineArgs, defineCommand } from "@reliverse/rempts";
|
|
12
12
|
export default defineCommand({
|
|
13
13
|
meta: {
|
|
14
14
|
name: "build",
|
|
15
15
|
description: "Build all workspace packages using configurable bundler (mkdist for libraries, bun for apps) with dler.ts configuration. Auto-detects frontend apps and libraries. Supports presets: --production, --dev, --library, --react, --node, --monorepo.",
|
|
16
16
|
examples: [
|
|
17
17
|
"dler build",
|
|
18
|
-
'dler build --filter "@reliverse/
|
|
18
|
+
'dler build --filter "@reliverse/rempts,@reliverse/build"',
|
|
19
19
|
'dler build --filter "@reliverse/dler-*"',
|
|
20
20
|
'dler build --ignore "@reliverse/*"',
|
|
21
|
-
'dler build --ignore "@reliverse/
|
|
22
|
-
'dler build --ignore "@reliverse/
|
|
21
|
+
'dler build --ignore "@reliverse/relico" --ignore "@reliverse/dler-v1"',
|
|
22
|
+
'dler build --ignore "@reliverse/relico @reliverse/dler-v1"',
|
|
23
23
|
"dler build --cwd /path/to/monorepo",
|
|
24
24
|
"dler build --cwd /path/to/monorepo --ignore @reliverse/*",
|
|
25
25
|
"dler build --concurrency 8",
|
|
@@ -181,7 +181,7 @@ export default defineCommand({
|
|
|
181
181
|
},
|
|
182
182
|
filter: {
|
|
183
183
|
type: "string",
|
|
184
|
-
description: "Package(s) to include (supports wildcards and comma-separated values like '@reliverse/
|
|
184
|
+
description: "Package(s) to include (supports wildcards and comma-separated values like '@reliverse/rempts,@reliverse/build'). Takes precedence over --ignore when both are provided."
|
|
185
185
|
},
|
|
186
186
|
cwd: {
|
|
187
187
|
type: "string",
|
|
@@ -572,13 +572,21 @@ export default defineCommand({
|
|
|
572
572
|
process.exit(1);
|
|
573
573
|
}
|
|
574
574
|
const goOptions = {};
|
|
575
|
-
if (args.goProvider)
|
|
575
|
+
if (args.goProvider) {
|
|
576
|
+
if (args.goProvider === "xgo" || args.goProvider === "native") {
|
|
577
|
+
goOptions.provider = args.goProvider;
|
|
578
|
+
}
|
|
579
|
+
}
|
|
576
580
|
if (args.goTargets) {
|
|
577
581
|
goOptions.targets = args.goTargets;
|
|
578
582
|
}
|
|
579
583
|
if (args.goOutputDir) goOptions.outputDir = args.goOutputDir;
|
|
580
584
|
if (args.goOutputName) goOptions.outputName = args.goOutputName;
|
|
581
|
-
if (args.goBuildMode)
|
|
585
|
+
if (args.goBuildMode) {
|
|
586
|
+
if (args.goBuildMode === "c-shared" || args.goBuildMode === "c-archive" || args.goBuildMode === "exe") {
|
|
587
|
+
goOptions.buildMode = args.goBuildMode;
|
|
588
|
+
}
|
|
589
|
+
}
|
|
582
590
|
if (args.goLdflags) goOptions.ldflags = args.goLdflags;
|
|
583
591
|
if (args.goMainFile) goOptions.mainFile = args.goMainFile;
|
|
584
592
|
if (args.goVersion) goOptions.goVersion = args.goVersion;
|
package/dist/cmds/clean/cmd.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { replaceExportsInPackages } from "@reliverse/
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { replaceExportsInPackages } from "@reliverse/helpers";
|
|
2
|
+
import { logger } from "@reliverse/relinka";
|
|
3
|
+
import { defineArgs, defineCommand } from "@reliverse/rempts";
|
|
4
4
|
import { runCleanOnAllPackages } from "./impl.js";
|
|
5
5
|
export default defineCommand({
|
|
6
6
|
meta: {
|
|
@@ -14,7 +14,7 @@ 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/
|
|
17
|
+
'dler clean --filter "@reliverse/rempts,@reliverse/build"',
|
|
18
18
|
'dler clean --filter "@reliverse/dler-*"',
|
|
19
19
|
"dler clean --filter cli,packages/build",
|
|
20
20
|
"dler clean --ignore '@reliverse/*'",
|
|
@@ -41,7 +41,7 @@ export default defineCommand({
|
|
|
41
41
|
"# Filter Examples:",
|
|
42
42
|
'dler clean --filter "@reliverse/dler-*" --presets build # Clean build artifacts in matching packages',
|
|
43
43
|
"dler clean --filter cli,packages/build --presets all # Clean all artifacts in specific packages",
|
|
44
|
-
'dler clean --filter "@reliverse/
|
|
44
|
+
'dler clean --filter "@reliverse/rempts" --custom "*.log" # Clean log files in specific package',
|
|
45
45
|
"",
|
|
46
46
|
"# Monorepo Examples:",
|
|
47
47
|
"dler clean # Clean dist/ in all packages",
|
|
@@ -67,7 +67,7 @@ export default defineCommand({
|
|
|
67
67
|
args: defineArgs({
|
|
68
68
|
filter: {
|
|
69
69
|
type: "string",
|
|
70
|
-
description: "Package(s) to include (supports wildcards and comma-separated values like '@reliverse/
|
|
70
|
+
description: "Package(s) to include (supports wildcards and comma-separated values like '@reliverse/rempts,@reliverse/build'). Takes precedence over --ignore when both are provided."
|
|
71
71
|
},
|
|
72
72
|
ignore: {
|
|
73
73
|
type: "string",
|
package/dist/cmds/clean/impl.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { existsSync, rmSync, statSync } from "node:fs";
|
|
2
2
|
import { join, resolve } from "node:path";
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
3
|
+
import pMap from "@reliverse/mapkit";
|
|
4
|
+
import { createIgnoreFilter, normalizePatterns } from "@reliverse/matcha";
|
|
5
|
+
import { logger } from "@reliverse/relinka";
|
|
6
6
|
import {
|
|
7
7
|
getWorkspacePatterns,
|
|
8
8
|
hasWorkspaces,
|
|
9
9
|
readPackageJSON
|
|
10
|
-
} from "@reliverse/
|
|
10
|
+
} from "@reliverse/typerso";
|
|
11
11
|
import {
|
|
12
12
|
LOCK_FILE_PATTERNS,
|
|
13
13
|
mergePatterns,
|
|
@@ -189,7 +189,7 @@ const findMatchingFiles = (targetDir, patterns, subdirs = false) => {
|
|
|
189
189
|
}
|
|
190
190
|
} catch (error) {
|
|
191
191
|
if (process.env.DEBUG) {
|
|
192
|
-
|
|
192
|
+
logger.warn(`Glob error for pattern ${pattern}:`, error);
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
195
|
}
|
|
@@ -309,7 +309,7 @@ const formatBytes = (bytes) => {
|
|
|
309
309
|
const k = 1024;
|
|
310
310
|
const sizes = ["B", "KB", "MB", "GB"];
|
|
311
311
|
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
312
|
-
return `${parseFloat((bytes /
|
|
312
|
+
return `${parseFloat((bytes / k ** i).toFixed(1))} ${sizes[i]}`;
|
|
313
313
|
};
|
|
314
314
|
const displayPreview = (results, lockFilesResult) => {
|
|
315
315
|
logger.log("\u2501".repeat(60));
|
|
@@ -326,7 +326,7 @@ const displayPreview = (results, lockFilesResult) => {
|
|
|
326
326
|
const byCategory = result.files.reduce(
|
|
327
327
|
(acc, file) => {
|
|
328
328
|
if (!acc[file.category]) acc[file.category] = [];
|
|
329
|
-
acc[file.category]
|
|
329
|
+
acc[file.category]?.push(file);
|
|
330
330
|
return acc;
|
|
331
331
|
},
|
|
332
332
|
{}
|
|
@@ -338,7 +338,7 @@ const displayPreview = (results, lockFilesResult) => {
|
|
|
338
338
|
);
|
|
339
339
|
if (files.length <= 5) {
|
|
340
340
|
for (const file of files) {
|
|
341
|
-
const relativePath = file.path.replace(result.package.path
|
|
341
|
+
const relativePath = file.path.replace(`${result.package.path}/`, "");
|
|
342
342
|
logger.log(` \u2022 ${relativePath}`);
|
|
343
343
|
}
|
|
344
344
|
} else {
|
|
@@ -441,7 +441,8 @@ export const runCleanOnAllPackages = async (ignore, cwd, options = {}) => {
|
|
|
441
441
|
}
|
|
442
442
|
]
|
|
443
443
|
};
|
|
444
|
-
logger.log(
|
|
444
|
+
logger.log(`
|
|
445
|
+
${"\u2501".repeat(60)}`);
|
|
445
446
|
logger.log("\u{1F4CA} Clean Summary:");
|
|
446
447
|
logger.log(
|
|
447
448
|
` Files ${dryRun ? "would be" : ""} deleted: ${summary2.deletedFiles}`
|
|
@@ -479,7 +480,8 @@ export const runCleanOnAllPackages = async (ignore, cwd, options = {}) => {
|
|
|
479
480
|
}
|
|
480
481
|
]
|
|
481
482
|
};
|
|
482
|
-
logger.log(
|
|
483
|
+
logger.log(`
|
|
484
|
+
${"\u2501".repeat(60)}`);
|
|
483
485
|
logger.log("\u{1F4CA} Clean Summary:");
|
|
484
486
|
logger.log(` Files would be deleted: ${summary2.deletedFiles}`);
|
|
485
487
|
logger.log(
|
|
@@ -563,7 +565,8 @@ export const runCleanOnAllPackages = async (ignore, cwd, options = {}) => {
|
|
|
563
565
|
hasErrors: allErrors2.length > 0,
|
|
564
566
|
results: cleanedResults
|
|
565
567
|
};
|
|
566
|
-
logger.log(
|
|
568
|
+
logger.log(`
|
|
569
|
+
${"\u2501".repeat(60)}`);
|
|
567
570
|
logger.log("\u{1F4CA} Clean Summary:");
|
|
568
571
|
logger.log(` Packages processed: ${summary2.processedPackages}`);
|
|
569
572
|
logger.log(
|
|
@@ -601,7 +604,8 @@ export const runCleanOnAllPackages = async (ignore, cwd, options = {}) => {
|
|
|
601
604
|
hasErrors: allErrors.length > 0,
|
|
602
605
|
results
|
|
603
606
|
};
|
|
604
|
-
logger.log(
|
|
607
|
+
logger.log(`
|
|
608
|
+
${"\u2501".repeat(60)}`);
|
|
605
609
|
logger.log("\u{1F4CA} Clean Summary:");
|
|
606
610
|
logger.log(` Packages processed: ${summary.processedPackages}`);
|
|
607
611
|
logger.log(` Files would be deleted: ${summary.deletedFiles}`);
|
|
@@ -94,9 +94,9 @@ export const getPresetDescription = (presets) => {
|
|
|
94
94
|
return "No valid presets selected";
|
|
95
95
|
}
|
|
96
96
|
if (categories.length === 1) {
|
|
97
|
-
return categories[0]
|
|
97
|
+
return categories[0]?.description ?? "No description available";
|
|
98
98
|
}
|
|
99
|
-
return categories.map((cat) => cat
|
|
99
|
+
return categories.map((cat) => cat?.name).join(", ");
|
|
100
100
|
};
|
|
101
101
|
export const mergePatterns = (presets, customPatterns) => {
|
|
102
102
|
const presetPatterns = getPresetPatterns(presets);
|
package/dist/cmds/publish/cmd.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { defineArgs, defineCommand } from "@reliverse/dler-launcher";
|
|
2
|
-
import { logger } from "@reliverse/dler-logger";
|
|
3
1
|
import {
|
|
4
2
|
publishAllPackages
|
|
5
|
-
} from "@reliverse/
|
|
3
|
+
} from "@reliverse/publish";
|
|
4
|
+
import { logger } from "@reliverse/relinka";
|
|
5
|
+
import { defineArgs, defineCommand } from "@reliverse/rempts";
|
|
6
6
|
export default defineCommand({
|
|
7
7
|
meta: {
|
|
8
8
|
name: "publish",
|
|
9
9
|
description: "Publish packages to npm, JSR, Vercel, or multiple registries. Supports version bumping, dist-tags, access control, and concurrent publishing. Works with dler.ts configuration for per-package settings.",
|
|
10
10
|
examples: [
|
|
11
11
|
"dler publish",
|
|
12
|
-
'dler publish --filter "@reliverse/
|
|
12
|
+
'dler publish --filter "@reliverse/rempts,@reliverse/build"',
|
|
13
13
|
'dler publish --filter "@reliverse/dler-*"',
|
|
14
14
|
'dler publish --ignore "@reliverse/*"',
|
|
15
|
-
'dler publish --ignore "@reliverse/
|
|
16
|
-
'dler publish --ignore "@reliverse/
|
|
15
|
+
'dler publish --ignore "@reliverse/relico" --ignore "@reliverse/dler-v1"',
|
|
16
|
+
'dler publish --ignore "@reliverse/relico @reliverse/dler-v1"',
|
|
17
17
|
"dler publish --cwd /path/to/monorepo",
|
|
18
18
|
"dler publish --cwd /path/to/monorepo --ignore @reliverse/*",
|
|
19
19
|
"dler publish --bump minor",
|
|
@@ -67,7 +67,7 @@ export default defineCommand({
|
|
|
67
67
|
},
|
|
68
68
|
filter: {
|
|
69
69
|
type: "string",
|
|
70
|
-
description: "Package(s) to include (supports wildcards and comma-separated values like '@reliverse/
|
|
70
|
+
description: "Package(s) to include (supports wildcards and comma-separated values like '@reliverse/rempts,@reliverse/build'). Takes precedence over --ignore when both are provided."
|
|
71
71
|
},
|
|
72
72
|
cwd: {
|
|
73
73
|
type: "string",
|