@reliverse/relico 1.3.1 → 1.3.3
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-npm/bin/mod.js +324 -0
- package/package.json +10 -3
- package/.config/dler.ts +0 -235
- package/.config/rse.ts +0 -167
- package/.config/types/dler.schema.ts +0 -1066
- package/.cursor/rules/general-rules.mdc +0 -276
- package/.vscode/extensions.json +0 -8
- package/.vscode/settings.json +0 -45
- package/biome.json +0 -78
- package/deprecated.zip +0 -0
- package/examples/benchmarks/bundle-size.ts +0 -143
- package/examples/benchmarks/config.example.ts +0 -55
- package/examples/benchmarks/config.ts +0 -93
- package/examples/benchmarks/performance.ts +0 -174
- package/examples/core.ts +0 -62
- package/knip.json +0 -13
- package/reset.d.ts +0 -1
- package/src/mod.ts +0 -492
- package/tsconfig.json +0 -33
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
// src/mod.ts
|
|
2
|
+
var ESC = "\x1B[";
|
|
3
|
+
var RESET = `${ESC}0m`;
|
|
4
|
+
var OP_SYMBOL = Symbol("re.ops");
|
|
5
|
+
var COLOR_LEVEL_OFF = 0;
|
|
6
|
+
var COLOR_LEVEL_BASIC = 1;
|
|
7
|
+
var COLOR_LEVEL_256 = 2;
|
|
8
|
+
var COLOR_LEVEL_TRUECOLOR = 3;
|
|
9
|
+
var MIN_BYTE = 0;
|
|
10
|
+
var MAX_BYTE = 255;
|
|
11
|
+
var WHITE_RGB = 255;
|
|
12
|
+
var ANSI_256_GRAYSCALE_MIN = 8;
|
|
13
|
+
var ANSI_256_GRAYSCALE_MAX = 248;
|
|
14
|
+
var ANSI_256_BASE_OFFSET = 16;
|
|
15
|
+
var ANSI_256_GRAYSCALE_BASE = 232;
|
|
16
|
+
var ANSI_256_GRAYSCALE_RANGE = 247;
|
|
17
|
+
var ANSI_256_GRAYSCALE_STEPS = 24;
|
|
18
|
+
var ANSI_256_BRIGHT_THRESHOLD = 231;
|
|
19
|
+
var ANSI_256_RGB_LEVELS = 5;
|
|
20
|
+
var ANSI_256_RGB_RED_MULTIPLIER = 36;
|
|
21
|
+
var ANSI_256_RGB_GREEN_MULTIPLIER = 6;
|
|
22
|
+
var SGR_FG_BASE = 30;
|
|
23
|
+
var SGR_BG_BASE = 40;
|
|
24
|
+
var SGR_FG_BRIGHT_BASE = 90;
|
|
25
|
+
var SGR_BG_BRIGHT_BASE = 100;
|
|
26
|
+
var SGR_RESET = 0;
|
|
27
|
+
var SGR_BOLD = 1;
|
|
28
|
+
var SGR_DIM = 2;
|
|
29
|
+
var SGR_ITALIC = 3;
|
|
30
|
+
var SGR_UNDERLINE = 4;
|
|
31
|
+
var SGR_INVERSE = 7;
|
|
32
|
+
var SGR_HIDDEN = 8;
|
|
33
|
+
var SGR_STRIKETHROUGH = 9;
|
|
34
|
+
var HEX_BYTE_LENGTH = 2;
|
|
35
|
+
var HEX_RED_START = 0;
|
|
36
|
+
var HEX_GREEN_START = 2;
|
|
37
|
+
var HEX_BLUE_START = 4;
|
|
38
|
+
var HEX_BLUE_END = 6;
|
|
39
|
+
var HEX_RADIX = 16;
|
|
40
|
+
var BRIGHT_SUFFIX_LENGTH = 6;
|
|
41
|
+
var BG_PREFIX_LENGTH = 2;
|
|
42
|
+
var BG_COLOR_START = 3;
|
|
43
|
+
var BRIGHT_MIX_FACTOR = 0.25;
|
|
44
|
+
var BRIGHT_SUFFIX_REGEX = /Bright$/u;
|
|
45
|
+
var CURRENT_LEVEL = COLOR_LEVEL_TRUECOLOR;
|
|
46
|
+
var setColorLevel = (level) => {
|
|
47
|
+
if (level !== COLOR_LEVEL_OFF && level !== COLOR_LEVEL_BASIC && level !== COLOR_LEVEL_256 && level !== COLOR_LEVEL_TRUECOLOR) {
|
|
48
|
+
throw new Error("Invalid color level");
|
|
49
|
+
}
|
|
50
|
+
CURRENT_LEVEL = level;
|
|
51
|
+
};
|
|
52
|
+
var clampByte = (n) => {
|
|
53
|
+
if (!Number.isFinite(n)) {
|
|
54
|
+
return MIN_BYTE;
|
|
55
|
+
}
|
|
56
|
+
if (n < MIN_BYTE) {
|
|
57
|
+
return MIN_BYTE;
|
|
58
|
+
}
|
|
59
|
+
if (n > MAX_BYTE) {
|
|
60
|
+
return MAX_BYTE;
|
|
61
|
+
}
|
|
62
|
+
return Math.round(n);
|
|
63
|
+
};
|
|
64
|
+
var BASIC8 = [
|
|
65
|
+
{ r: 0, g: 0, b: 0 },
|
|
66
|
+
{ r: 205, g: 0, b: 0 },
|
|
67
|
+
{ r: 0, g: 205, b: 0 },
|
|
68
|
+
{ r: 205, g: 205, b: 0 },
|
|
69
|
+
{ r: 0, g: 0, b: 238 },
|
|
70
|
+
{ r: 205, g: 0, b: 205 },
|
|
71
|
+
{ r: 0, g: 205, b: 205 },
|
|
72
|
+
{ r: 229, g: 229, b: 229 }
|
|
73
|
+
];
|
|
74
|
+
var sgr = (codes) => `${ESC}${codes.join(";")}m`;
|
|
75
|
+
var nearestBasicIndex = (rgb) => {
|
|
76
|
+
let best = 0;
|
|
77
|
+
let bestDist = Number.POSITIVE_INFINITY;
|
|
78
|
+
for (let i = 0;i < BASIC8.length; i++) {
|
|
79
|
+
const c = BASIC8[i];
|
|
80
|
+
const dr = c.r - rgb.r;
|
|
81
|
+
const dg = c.g - rgb.g;
|
|
82
|
+
const db = c.b - rgb.b;
|
|
83
|
+
const d = dr * dr + dg * dg + db * db;
|
|
84
|
+
if (d < bestDist) {
|
|
85
|
+
bestDist = d;
|
|
86
|
+
best = i;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return best;
|
|
90
|
+
};
|
|
91
|
+
var rgbToAnsi256 = (rgb) => {
|
|
92
|
+
if (rgb.r === rgb.g && rgb.g === rgb.b) {
|
|
93
|
+
if (rgb.r < ANSI_256_GRAYSCALE_MIN) {
|
|
94
|
+
return ANSI_256_BASE_OFFSET;
|
|
95
|
+
}
|
|
96
|
+
if (rgb.r > ANSI_256_GRAYSCALE_MAX) {
|
|
97
|
+
return ANSI_256_BRIGHT_THRESHOLD;
|
|
98
|
+
}
|
|
99
|
+
const step = Math.round((rgb.r - ANSI_256_GRAYSCALE_MIN) / ANSI_256_GRAYSCALE_RANGE * ANSI_256_GRAYSCALE_STEPS);
|
|
100
|
+
return ANSI_256_GRAYSCALE_BASE + step;
|
|
101
|
+
}
|
|
102
|
+
const r = Math.round(rgb.r / MAX_BYTE * ANSI_256_RGB_LEVELS);
|
|
103
|
+
const g = Math.round(rgb.g / MAX_BYTE * ANSI_256_RGB_LEVELS);
|
|
104
|
+
const b = Math.round(rgb.b / MAX_BYTE * ANSI_256_RGB_LEVELS);
|
|
105
|
+
return ANSI_256_BASE_OFFSET + ANSI_256_RGB_RED_MULTIPLIER * r + ANSI_256_RGB_GREEN_MULTIPLIER * g + b;
|
|
106
|
+
};
|
|
107
|
+
var NAMED_COLORS = {
|
|
108
|
+
black: "#000000",
|
|
109
|
+
red: "#ff0000",
|
|
110
|
+
green: "#00ff00",
|
|
111
|
+
yellow: "#ffff00",
|
|
112
|
+
blue: "#0000ff",
|
|
113
|
+
magenta: "#ff00ff",
|
|
114
|
+
cyan: "#00ffff",
|
|
115
|
+
white: "#ffffff",
|
|
116
|
+
gray: "#808080",
|
|
117
|
+
orange: "#ffa500",
|
|
118
|
+
pink: "#ffc0cb",
|
|
119
|
+
purple: "#800080",
|
|
120
|
+
teal: "#008080",
|
|
121
|
+
lime: "#00ff00",
|
|
122
|
+
brown: "#a52a2a",
|
|
123
|
+
navy: "#000080",
|
|
124
|
+
maroon: "#800000",
|
|
125
|
+
olive: "#808000",
|
|
126
|
+
silver: "#c0c0c0"
|
|
127
|
+
};
|
|
128
|
+
var mixWithWhite = (rgb, factor) => {
|
|
129
|
+
const t = factor;
|
|
130
|
+
return {
|
|
131
|
+
r: clampByte(rgb.r * (1 - t) + WHITE_RGB * t),
|
|
132
|
+
g: clampByte(rgb.g * (1 - t) + WHITE_RGB * t),
|
|
133
|
+
b: clampByte(rgb.b * (1 - t) + WHITE_RGB * t)
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
var fromNamed = (name) => {
|
|
137
|
+
const hex = NAMED_COLORS[name];
|
|
138
|
+
const clean = hex.startsWith("#") ? hex.slice(1) : hex;
|
|
139
|
+
const r = Number.parseInt(clean.slice(HEX_RED_START, HEX_BYTE_LENGTH), HEX_RADIX);
|
|
140
|
+
const g = Number.parseInt(clean.slice(HEX_GREEN_START, HEX_BLUE_START), HEX_RADIX);
|
|
141
|
+
const b = Number.parseInt(clean.slice(HEX_BLUE_START, HEX_BLUE_END), HEX_RADIX);
|
|
142
|
+
return { r, g, b };
|
|
143
|
+
};
|
|
144
|
+
var toBaseName = (compound) => {
|
|
145
|
+
const base = compound.replace(BRIGHT_SUFFIX_REGEX, "");
|
|
146
|
+
const key = base.charAt(0).toLowerCase() + base.slice(1);
|
|
147
|
+
return key;
|
|
148
|
+
};
|
|
149
|
+
var parseColorName = (name) => {
|
|
150
|
+
if (name.endsWith("Bright")) {
|
|
151
|
+
const base = toBaseName(name);
|
|
152
|
+
const rgb = fromNamed(base);
|
|
153
|
+
const rgbAdj = mixWithWhite(rgb, BRIGHT_MIX_FACTOR);
|
|
154
|
+
return { rgb: rgbAdj, wantBright: true };
|
|
155
|
+
}
|
|
156
|
+
return { rgb: fromNamed(name), wantBright: false };
|
|
157
|
+
};
|
|
158
|
+
var openForOp = (op) => {
|
|
159
|
+
if (CURRENT_LEVEL === COLOR_LEVEL_OFF) {
|
|
160
|
+
return "";
|
|
161
|
+
}
|
|
162
|
+
switch (op.kind) {
|
|
163
|
+
case "style":
|
|
164
|
+
return sgr(op.open);
|
|
165
|
+
case "fg-basic":
|
|
166
|
+
return sgr([(op.bright ? SGR_FG_BRIGHT_BASE : SGR_FG_BASE) + op.idx]);
|
|
167
|
+
case "bg-basic":
|
|
168
|
+
return sgr([(op.bright ? SGR_BG_BRIGHT_BASE : SGR_BG_BASE) + op.idx]);
|
|
169
|
+
case "fg-256":
|
|
170
|
+
return `${ESC}38;5;${op.code}m`;
|
|
171
|
+
case "bg-256":
|
|
172
|
+
return `${ESC}48;5;${op.code}m`;
|
|
173
|
+
case "fg-true":
|
|
174
|
+
return `${ESC}38;2;${op.rgb.r};${op.rgb.g};${op.rgb.b}m`;
|
|
175
|
+
case "bg-true":
|
|
176
|
+
return `${ESC}48;2;${op.rgb.r};${op.rgb.g};${op.rgb.b}m`;
|
|
177
|
+
default:
|
|
178
|
+
return "";
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
var opsToOpen = (ops) => {
|
|
182
|
+
if (CURRENT_LEVEL === COLOR_LEVEL_OFF) {
|
|
183
|
+
return "";
|
|
184
|
+
}
|
|
185
|
+
let out = "";
|
|
186
|
+
for (const op of ops) {
|
|
187
|
+
out += openForOp(op);
|
|
188
|
+
}
|
|
189
|
+
return out;
|
|
190
|
+
};
|
|
191
|
+
var applyOpsToText = (ops, input) => {
|
|
192
|
+
const text = String(input);
|
|
193
|
+
if (CURRENT_LEVEL === COLOR_LEVEL_OFF || ops.length === 0 || text.length === 0) {
|
|
194
|
+
return text;
|
|
195
|
+
}
|
|
196
|
+
const open = opsToOpen(ops);
|
|
197
|
+
if (!text.includes(`
|
|
198
|
+
`)) {
|
|
199
|
+
return `${open}${text}${RESET}`;
|
|
200
|
+
}
|
|
201
|
+
const lines = text.split(`
|
|
202
|
+
`);
|
|
203
|
+
const result = new Array(lines.length);
|
|
204
|
+
for (let i = 0;i < lines.length; i++) {
|
|
205
|
+
const line = lines[i];
|
|
206
|
+
if (line.endsWith("\r")) {
|
|
207
|
+
result[i] = `${open}${line.slice(0, -1)}\r${RESET}`;
|
|
208
|
+
} else {
|
|
209
|
+
result[i] = `${open}${line}${RESET}`;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return result.join(`
|
|
213
|
+
`);
|
|
214
|
+
};
|
|
215
|
+
var mkFgOpsFromRgb = (rgb, wantBright = false) => {
|
|
216
|
+
if (CURRENT_LEVEL === COLOR_LEVEL_BASIC) {
|
|
217
|
+
const idx = nearestBasicIndex(rgb);
|
|
218
|
+
return [{ kind: "fg-basic", idx, bright: wantBright }];
|
|
219
|
+
}
|
|
220
|
+
if (CURRENT_LEVEL === COLOR_LEVEL_256) {
|
|
221
|
+
return [{ kind: "fg-256", code: rgbToAnsi256(rgb) }];
|
|
222
|
+
}
|
|
223
|
+
return [{ kind: "fg-true", rgb }];
|
|
224
|
+
};
|
|
225
|
+
var mkBgOpsFromRgb = (rgb, wantBright = false) => {
|
|
226
|
+
if (CURRENT_LEVEL === COLOR_LEVEL_BASIC) {
|
|
227
|
+
const idx = nearestBasicIndex(rgb);
|
|
228
|
+
return [{ kind: "bg-basic", idx, bright: wantBright }];
|
|
229
|
+
}
|
|
230
|
+
if (CURRENT_LEVEL === COLOR_LEVEL_256) {
|
|
231
|
+
return [{ kind: "bg-256", code: rgbToAnsi256(rgb) }];
|
|
232
|
+
}
|
|
233
|
+
return [{ kind: "bg-true", rgb }];
|
|
234
|
+
};
|
|
235
|
+
var STYLE_TABLE = {
|
|
236
|
+
reset: { kind: "style", open: [SGR_RESET] },
|
|
237
|
+
bold: { kind: "style", open: [SGR_BOLD] },
|
|
238
|
+
dim: { kind: "style", open: [SGR_DIM] },
|
|
239
|
+
italic: { kind: "style", open: [SGR_ITALIC] },
|
|
240
|
+
underline: { kind: "style", open: [SGR_UNDERLINE] },
|
|
241
|
+
inverse: { kind: "style", open: [SGR_INVERSE] },
|
|
242
|
+
hidden: { kind: "style", open: [SGR_HIDDEN] },
|
|
243
|
+
strikethrough: { kind: "style", open: [SGR_STRIKETHROUGH] }
|
|
244
|
+
};
|
|
245
|
+
var STYLE_KEYS = new Set([
|
|
246
|
+
"reset",
|
|
247
|
+
"bold",
|
|
248
|
+
"dim",
|
|
249
|
+
"italic",
|
|
250
|
+
"underline",
|
|
251
|
+
"inverse",
|
|
252
|
+
"hidden",
|
|
253
|
+
"strikethrough"
|
|
254
|
+
]);
|
|
255
|
+
var isColorKey = (key) => {
|
|
256
|
+
if (key in NAMED_COLORS) {
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
if (key.endsWith("Bright") && isColorKey(key.slice(0, -BRIGHT_SUFFIX_LENGTH))) {
|
|
260
|
+
return true;
|
|
261
|
+
}
|
|
262
|
+
return false;
|
|
263
|
+
};
|
|
264
|
+
var isBgKey = (key) => {
|
|
265
|
+
if (!key.startsWith("bg") || key.length <= BG_PREFIX_LENGTH) {
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
const colorPart = key.charAt(BG_PREFIX_LENGTH).toLowerCase() + key.slice(BG_COLOR_START);
|
|
269
|
+
return isColorKey(colorPart);
|
|
270
|
+
};
|
|
271
|
+
var callableProxy = (ops) => {
|
|
272
|
+
const base = (input) => applyOpsToText(ops, input);
|
|
273
|
+
Object.defineProperty(base, OP_SYMBOL, {
|
|
274
|
+
value: ops,
|
|
275
|
+
enumerable: false,
|
|
276
|
+
configurable: false,
|
|
277
|
+
writable: false
|
|
278
|
+
});
|
|
279
|
+
return new Proxy(base, {
|
|
280
|
+
apply(_target, _thisArg, argArray) {
|
|
281
|
+
const [input] = argArray;
|
|
282
|
+
return applyOpsToText(ops, input);
|
|
283
|
+
},
|
|
284
|
+
get(_target, prop) {
|
|
285
|
+
const key = String(prop);
|
|
286
|
+
if (prop === OP_SYMBOL) {
|
|
287
|
+
return ops;
|
|
288
|
+
}
|
|
289
|
+
if (STYLE_KEYS.has(key)) {
|
|
290
|
+
const op = STYLE_TABLE[key];
|
|
291
|
+
return callableProxy([...ops, op]);
|
|
292
|
+
}
|
|
293
|
+
if (isBgKey(key)) {
|
|
294
|
+
const raw = key.slice(BG_PREFIX_LENGTH);
|
|
295
|
+
const colorName = raw.charAt(0).toLowerCase() + raw.slice(1);
|
|
296
|
+
const { rgb, wantBright } = parseColorName(colorName);
|
|
297
|
+
return callableProxy([...ops, ...mkBgOpsFromRgb(rgb, wantBright)]);
|
|
298
|
+
}
|
|
299
|
+
if (isColorKey(key)) {
|
|
300
|
+
const { rgb, wantBright } = parseColorName(key);
|
|
301
|
+
return callableProxy([...ops, ...mkFgOpsFromRgb(rgb, wantBright)]);
|
|
302
|
+
}
|
|
303
|
+
return callableProxy(ops);
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
};
|
|
307
|
+
var re = callableProxy([]);
|
|
308
|
+
var chain = (...parts) => {
|
|
309
|
+
const collected = [];
|
|
310
|
+
for (const p of parts) {
|
|
311
|
+
const ops = p[OP_SYMBOL];
|
|
312
|
+
if (ops && ops.length > 0) {
|
|
313
|
+
for (const op of ops) {
|
|
314
|
+
collected.push(op);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return callableProxy(collected);
|
|
319
|
+
};
|
|
320
|
+
export {
|
|
321
|
+
setColorLevel,
|
|
322
|
+
re,
|
|
323
|
+
chain
|
|
324
|
+
};
|
package/package.json
CHANGED
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reliverse/relico",
|
|
3
3
|
"author": "reliverse",
|
|
4
|
-
"version": "1.3.
|
|
4
|
+
"version": "1.3.3",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "@reliverse/relico is a themeable, chainable, typed, truecolor-powered, modern terminal styling toolkit. Designed to make your CLI output colorful, accessible, and human-friendly. It gives you a flexible way to apply colors and styles — with reliability and a smart developer experience baked in. Built for humans, not just terminals.",
|
|
7
7
|
"exports": {
|
|
8
|
-
".": "./
|
|
8
|
+
".": "./dist-npm/bin/mod.ts"
|
|
9
9
|
},
|
|
10
10
|
"publishConfig": {
|
|
11
11
|
"access": "public"
|
|
12
12
|
},
|
|
13
|
+
"files": [
|
|
14
|
+
"package.json",
|
|
15
|
+
"README.md",
|
|
16
|
+
"LICENSE",
|
|
17
|
+
"dist-npm/bin"
|
|
18
|
+
],
|
|
13
19
|
"scripts": {
|
|
14
|
-
"pub": "
|
|
20
|
+
"pub": "bun run build && bun publish",
|
|
21
|
+
"build": "bun build ./src/mod.ts --outdir ./dist-npm/bin",
|
|
15
22
|
"dev": "bun examples/core.ts",
|
|
16
23
|
"latest": "bun update --latest && bun check",
|
|
17
24
|
"check": "tsc --noEmit && biome check --fix --unsafe",
|
package/.config/dler.ts
DELETED
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from "./types/dler.schema";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Reliverse Bundler Configuration
|
|
5
|
-
* Hover over a field to see more details
|
|
6
|
-
* @see https://github.com/reliverse/dler
|
|
7
|
-
*/
|
|
8
|
-
export default defineConfig({
|
|
9
|
-
// Bump configuration
|
|
10
|
-
bumpDisable: false,
|
|
11
|
-
bumpFilter: ["package.json", ".config/rse.ts"],
|
|
12
|
-
bumpMode: "patch",
|
|
13
|
-
|
|
14
|
-
// Common configuration
|
|
15
|
-
commonPubPause: false,
|
|
16
|
-
commonPubRegistry: "npm",
|
|
17
|
-
commonVerbose: false,
|
|
18
|
-
|
|
19
|
-
// Core configuration
|
|
20
|
-
coreBuildOutDir: "bin",
|
|
21
|
-
coreDeclarations: true,
|
|
22
|
-
coreDescription:
|
|
23
|
-
"@reliverse/relico is a themeable, chainable, typed, truecolor-powered, modern terminal styling toolkit. Designed to make your CLI output colorful, accessible, and human-friendly. It gives you a flexible way to apply colors and styles — with reliability and a smart developer experience baked in. Built for humans, not just terminals.",
|
|
24
|
-
coreEntryFile: "mod.ts",
|
|
25
|
-
coreEntrySrcDir: "src",
|
|
26
|
-
coreIsCLI: { enabled: false, scripts: {} },
|
|
27
|
-
|
|
28
|
-
// Logs
|
|
29
|
-
displayBuildPubLogs: false,
|
|
30
|
-
|
|
31
|
-
// JSR-only config
|
|
32
|
-
distJsrAllowDirty: true,
|
|
33
|
-
distJsrBuilder: "jsr",
|
|
34
|
-
distJsrDirName: "dist-jsr",
|
|
35
|
-
distJsrDryRun: false,
|
|
36
|
-
distJsrFailOnWarn: false,
|
|
37
|
-
distJsrGenTsconfig: false,
|
|
38
|
-
distJsrOutFilesExt: "ts",
|
|
39
|
-
distJsrSlowTypes: true,
|
|
40
|
-
|
|
41
|
-
// NPM-only config
|
|
42
|
-
distNpmBuilder: "mkdist",
|
|
43
|
-
distNpmDirName: "dist-npm",
|
|
44
|
-
distNpmOutFilesExt: "js",
|
|
45
|
-
|
|
46
|
-
// Libraries Dler Plugin
|
|
47
|
-
// Publish specific dirs as separate packages
|
|
48
|
-
// This feature is experimental at the moment
|
|
49
|
-
// Please commit your changes before using it
|
|
50
|
-
libsActMode: "main-project-only",
|
|
51
|
-
libsDirDist: "dist-libs",
|
|
52
|
-
libsDirSrc: "src/libs",
|
|
53
|
-
libsList: {},
|
|
54
|
-
|
|
55
|
-
// Specifies what resources to send to npm and jsr registries.
|
|
56
|
-
// coreBuildOutDir (e.g. "bin") dir is automatically included.
|
|
57
|
-
// The following is also included if publishArtifacts is {}:
|
|
58
|
-
// - global: ["package.json", "README.md", "LICENSE"]
|
|
59
|
-
// - dist-jsr,dist-libs/jsr: ["jsr.json"]
|
|
60
|
-
publishArtifacts: {
|
|
61
|
-
global: ["package.json", "README.md", "LICENSE", "LICENSES"],
|
|
62
|
-
"dist-jsr": [],
|
|
63
|
-
"dist-npm": [],
|
|
64
|
-
"dist-libs": {},
|
|
65
|
-
},
|
|
66
|
-
|
|
67
|
-
// Files with these extensions will be built
|
|
68
|
-
// Any other files will be copied as-is to dist
|
|
69
|
-
buildPreExtensions: ["ts", "js"],
|
|
70
|
-
// If you need to exclude some ts/js files from being built,
|
|
71
|
-
// you can store them in the dirs with buildTemplatesDir name
|
|
72
|
-
buildTemplatesDir: "templates",
|
|
73
|
-
|
|
74
|
-
// Dependency filtering
|
|
75
|
-
// Global is always applied
|
|
76
|
-
filterDepsPatterns: {
|
|
77
|
-
global: [
|
|
78
|
-
"@types",
|
|
79
|
-
"biome",
|
|
80
|
-
"knip",
|
|
81
|
-
"eslint",
|
|
82
|
-
"prettier",
|
|
83
|
-
"typescript",
|
|
84
|
-
"@reliverse/rse",
|
|
85
|
-
"@reliverse/dler",
|
|
86
|
-
"!@reliverse/rse-sdk",
|
|
87
|
-
"!@reliverse/dler-sdk",
|
|
88
|
-
],
|
|
89
|
-
"dist-npm": [],
|
|
90
|
-
"dist-jsr": [],
|
|
91
|
-
"dist-libs": {},
|
|
92
|
-
},
|
|
93
|
-
|
|
94
|
-
// Code quality tools
|
|
95
|
-
// Available: tsc, eslint, biome, knip, dler-check
|
|
96
|
-
runBeforeBuild: [],
|
|
97
|
-
// Available: dler-check
|
|
98
|
-
runAfterBuild: [],
|
|
99
|
-
|
|
100
|
-
// Build hooks
|
|
101
|
-
hooksBeforeBuild: [
|
|
102
|
-
// example plugin:
|
|
103
|
-
// async () => {
|
|
104
|
-
// await myCoolPlugin({
|
|
105
|
-
// /* plugin's options */
|
|
106
|
-
// });
|
|
107
|
-
// },
|
|
108
|
-
],
|
|
109
|
-
hooksAfterBuild: [
|
|
110
|
-
// example func:
|
|
111
|
-
// async () => {
|
|
112
|
-
// await applyMagicSpells(["dist-jsr", "dist-npm", "dist-libs"]);
|
|
113
|
-
// }
|
|
114
|
-
],
|
|
115
|
-
|
|
116
|
-
postBuildSettings: {
|
|
117
|
-
deleteDistTmpAfterBuild: true,
|
|
118
|
-
},
|
|
119
|
-
|
|
120
|
-
// Build setup
|
|
121
|
-
// transpileAlias: {},
|
|
122
|
-
// transpileClean: true,
|
|
123
|
-
// transpileEntries: [],
|
|
124
|
-
transpileEsbuild: "es2023",
|
|
125
|
-
// transpileExternals: [],
|
|
126
|
-
transpileFailOnWarn: false,
|
|
127
|
-
transpileFormat: "esm",
|
|
128
|
-
transpileMinify: true,
|
|
129
|
-
// transpileParallel: false,
|
|
130
|
-
transpilePublicPath: "/",
|
|
131
|
-
// transpileReplace: {},
|
|
132
|
-
// transpileRollup: {
|
|
133
|
-
// alias: {},
|
|
134
|
-
// commonjs: {},
|
|
135
|
-
// dts: {},
|
|
136
|
-
// esbuild: {},
|
|
137
|
-
// json: {},
|
|
138
|
-
// replace: {},
|
|
139
|
-
// resolve: {},
|
|
140
|
-
// },
|
|
141
|
-
// transpileShowOutLog: false,
|
|
142
|
-
transpileSourcemap: "none",
|
|
143
|
-
transpileSplitting: false,
|
|
144
|
-
transpileStub: false,
|
|
145
|
-
// transpileStubOptions: { jiti: {} },
|
|
146
|
-
transpileTarget: "node",
|
|
147
|
-
transpileWatch: false,
|
|
148
|
-
// transpileWatchOptions: undefined,
|
|
149
|
-
|
|
150
|
-
// @reliverse/relinka logger setup
|
|
151
|
-
logsFileName: ".logs/relinka.log",
|
|
152
|
-
logsFreshFile: true,
|
|
153
|
-
|
|
154
|
-
// Integrated relinka configuration
|
|
155
|
-
// https://github.com/reliverse/relinka
|
|
156
|
-
relinka: {
|
|
157
|
-
verbose: false,
|
|
158
|
-
|
|
159
|
-
// Timestamp configuration
|
|
160
|
-
timestamp: {
|
|
161
|
-
enabled: false,
|
|
162
|
-
format: "HH:mm:ss",
|
|
163
|
-
},
|
|
164
|
-
|
|
165
|
-
// Control whether logs are saved to a file
|
|
166
|
-
saveLogsToFile: false,
|
|
167
|
-
|
|
168
|
-
// Disable colors in the console
|
|
169
|
-
disableColors: false,
|
|
170
|
-
|
|
171
|
-
// Log file configuration
|
|
172
|
-
logFile: {
|
|
173
|
-
outputPath: "logs.log",
|
|
174
|
-
nameWithDate: "disable",
|
|
175
|
-
freshLogFile: true,
|
|
176
|
-
},
|
|
177
|
-
|
|
178
|
-
// Dirs settings
|
|
179
|
-
dirs: {
|
|
180
|
-
maxLogFiles: 5,
|
|
181
|
-
},
|
|
182
|
-
|
|
183
|
-
levels: {
|
|
184
|
-
success: {
|
|
185
|
-
symbol: "✓",
|
|
186
|
-
fallbackSymbol: "[OK]",
|
|
187
|
-
color: "greenBright",
|
|
188
|
-
spacing: 3,
|
|
189
|
-
},
|
|
190
|
-
info: {
|
|
191
|
-
symbol: "i",
|
|
192
|
-
fallbackSymbol: "[i]",
|
|
193
|
-
color: "cyanBright",
|
|
194
|
-
spacing: 3,
|
|
195
|
-
},
|
|
196
|
-
error: {
|
|
197
|
-
symbol: "✖",
|
|
198
|
-
fallbackSymbol: "[ERR]",
|
|
199
|
-
color: "redBright",
|
|
200
|
-
spacing: 3,
|
|
201
|
-
},
|
|
202
|
-
warn: {
|
|
203
|
-
symbol: "⚠",
|
|
204
|
-
fallbackSymbol: "[WARN]",
|
|
205
|
-
color: "yellowBright",
|
|
206
|
-
spacing: 3,
|
|
207
|
-
},
|
|
208
|
-
fatal: {
|
|
209
|
-
symbol: "‼",
|
|
210
|
-
fallbackSymbol: "[FATAL]",
|
|
211
|
-
color: "redBright",
|
|
212
|
-
spacing: 3,
|
|
213
|
-
},
|
|
214
|
-
verbose: {
|
|
215
|
-
symbol: "✧",
|
|
216
|
-
fallbackSymbol: "[VERBOSE]",
|
|
217
|
-
color: "gray",
|
|
218
|
-
spacing: 3,
|
|
219
|
-
},
|
|
220
|
-
internal: {
|
|
221
|
-
symbol: "⚙",
|
|
222
|
-
fallbackSymbol: "[INTERNAL]",
|
|
223
|
-
color: "magentaBright",
|
|
224
|
-
spacing: 3,
|
|
225
|
-
},
|
|
226
|
-
log: { symbol: "│", fallbackSymbol: "|", color: "dim", spacing: 3 },
|
|
227
|
-
message: {
|
|
228
|
-
symbol: "🞠",
|
|
229
|
-
fallbackSymbol: "[MSG]",
|
|
230
|
-
color: "cyan",
|
|
231
|
-
spacing: 3,
|
|
232
|
-
},
|
|
233
|
-
},
|
|
234
|
-
},
|
|
235
|
-
});
|