@peteanderson/ansi 0.3.2 → 1.0.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/ansi.d.ts +28 -37
- package/dist/ansi.d.ts.map +1 -0
- package/dist/ansi.js +29 -52
- package/dist/ansi.js.map +1 -0
- package/dist/caret.d.ts +5 -3
- package/dist/caret.d.ts.map +1 -0
- package/dist/caret.js +6 -8
- package/dist/caret.js.map +1 -0
- package/dist/erase.d.ts +5 -1
- package/dist/erase.d.ts.map +1 -0
- package/dist/erase.js +4 -2
- package/dist/erase.js.map +1 -0
- package/dist/features/build.d.ts +7 -11
- package/dist/features/build.d.ts.map +1 -0
- package/dist/features/build.js +12 -25
- package/dist/features/build.js.map +1 -0
- package/dist/features/detect.d.ts +4 -4
- package/dist/features/detect.d.ts.map +1 -0
- package/dist/features/detect.js +5 -6
- package/dist/features/detect.js.map +1 -0
- package/dist/features/features.d.ts +4 -4
- package/dist/features/features.d.ts.map +1 -0
- package/dist/features/features.js +24 -34
- package/dist/features/features.js.map +1 -0
- package/dist/features/index.d.ts +2 -2
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/index.js +17 -1
- package/dist/features/index.js.map +1 -0
- package/dist/features/types.d.ts +10 -0
- package/dist/features/types.d.ts.map +1 -0
- package/dist/features/types.js +3 -0
- package/dist/features/types.js.map +1 -0
- package/dist/index.d.ts +3 -81
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -1
- package/dist/index.js.map +1 -0
- package/dist/pad.d.ts +3 -12
- package/dist/pad.d.ts.map +1 -0
- package/dist/pad.js +8 -14
- package/dist/pad.js.map +1 -0
- package/dist/patterns.d.ts +4 -3
- package/dist/patterns.d.ts.map +1 -0
- package/dist/patterns.js +6 -4
- package/dist/patterns.js.map +1 -0
- package/dist/scroll.d.ts +5 -3
- package/dist/scroll.d.ts.map +1 -0
- package/dist/scroll.js +6 -6
- package/dist/scroll.js.map +1 -0
- package/dist/sgr/color/color.d.ts +5 -9
- package/dist/sgr/color/color.d.ts.map +1 -0
- package/dist/sgr/color/color.js +22 -29
- package/dist/sgr/color/color.js.map +1 -0
- package/dist/sgr/color/index.d.ts +2 -2
- package/dist/sgr/color/index.d.ts.map +1 -0
- package/dist/sgr/color/index.js +17 -1
- package/dist/sgr/color/index.js.map +1 -0
- package/dist/sgr/color/test-rgb.d.ts +3 -0
- package/dist/sgr/color/test-rgb.d.ts.map +1 -0
- package/dist/sgr/color/test-rgb.js +149 -0
- package/dist/sgr/color/test-rgb.js.map +1 -0
- package/dist/sgr/color/types.d.ts +30 -0
- package/dist/sgr/color/types.d.ts.map +1 -0
- package/dist/sgr/color/types.js +3 -0
- package/dist/sgr/color/types.js.map +1 -0
- package/dist/sgr/color/utils.d.ts +7 -27
- package/dist/sgr/color/utils.d.ts.map +1 -0
- package/dist/sgr/color/utils.js +17 -32
- package/dist/sgr/color/utils.js.map +1 -0
- package/dist/sgr/index.d.ts +4 -9
- package/dist/sgr/index.d.ts.map +1 -0
- package/dist/sgr/index.js +18 -4
- package/dist/sgr/index.js.map +1 -0
- package/dist/sgr/reset.d.ts +2 -1
- package/dist/sgr/reset.d.ts.map +1 -0
- package/dist/sgr/reset.js +4 -1
- package/dist/sgr/reset.js.map +1 -0
- package/dist/sgr/sgr.d.ts +4 -3
- package/dist/sgr/sgr.d.ts.map +1 -0
- package/dist/sgr/sgr.js +8 -22
- package/dist/sgr/sgr.js.map +1 -0
- package/dist/sgr/style.d.ts +3 -1
- package/dist/sgr/style.d.ts.map +1 -0
- package/dist/sgr/style.js +5 -3
- package/dist/sgr/style.js.map +1 -0
- package/dist/sgr/utils.d.ts +3 -2
- package/dist/sgr/utils.d.ts.map +1 -0
- package/dist/sgr/utils.js +3 -3
- package/dist/sgr/utils.js.map +1 -0
- package/dist/simplify/atom.d.ts +4 -3
- package/dist/simplify/atom.d.ts.map +1 -0
- package/dist/simplify/atom.js +12 -9
- package/dist/simplify/atom.js.map +1 -0
- package/dist/simplify/index.d.ts +2 -2
- package/dist/simplify/index.d.ts.map +1 -0
- package/dist/simplify/index.js +17 -1
- package/dist/simplify/index.js.map +1 -0
- package/dist/simplify/lookup.d.ts +3 -5
- package/dist/simplify/lookup.d.ts.map +1 -0
- package/dist/simplify/lookup.js +9 -13
- package/dist/simplify/lookup.js.map +1 -0
- package/dist/simplify/simplify.d.ts +2 -1
- package/dist/simplify/simplify.d.ts.map +1 -0
- package/dist/simplify/simplify.js +7 -7
- package/dist/simplify/simplify.js.map +1 -0
- package/dist/simplify/state.d.ts +3 -8
- package/dist/simplify/state.d.ts.map +1 -0
- package/dist/simplify/state.js +9 -13
- package/dist/simplify/state.js.map +1 -0
- package/dist/simplify/test.d.ts +2 -0
- package/dist/simplify/test.d.ts.map +1 -0
- package/dist/simplify/test.js +64 -0
- package/dist/simplify/test.js.map +1 -0
- package/dist/simplify/types.d.ts +9 -0
- package/dist/simplify/types.d.ts.map +1 -0
- package/dist/simplify/types.js +3 -0
- package/dist/simplify/types.js.map +1 -0
- package/dist/simplify/utils.d.ts +3 -2
- package/dist/simplify/utils.d.ts.map +1 -0
- package/dist/simplify/utils.js +4 -3
- package/dist/simplify/utils.js.map +1 -0
- package/dist/slice.d.ts +21 -1
- package/dist/slice.d.ts.map +1 -0
- package/dist/slice.js +10 -22
- package/dist/slice.js.map +1 -0
- package/dist/strip.d.ts +4 -15
- package/dist/strip.d.ts.map +1 -0
- package/dist/strip.js +10 -17
- package/dist/strip.js.map +1 -0
- package/dist/terminal.d.ts +5 -1
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +4 -2
- package/dist/terminal.js.map +1 -0
- package/package.json +9 -22
- package/src/ansi.ts +71 -0
- package/src/{caret.js → caret.ts} +9 -15
- package/src/{erase.js → erase.ts} +7 -10
- package/src/features/build.ts +52 -0
- package/src/features/detect.ts +33 -0
- package/src/features/features.ts +48 -0
- package/src/features/index.ts +1 -0
- package/src/features/{types.d.ts → types.ts} +1 -1
- package/src/index.ts +2 -0
- package/src/pad.ts +7 -0
- package/src/{patterns.js → patterns.ts} +3 -5
- package/src/scroll.ts +13 -0
- package/src/sgr/color/{color.js → color.ts} +26 -35
- package/src/sgr/color/index.ts +1 -0
- package/src/sgr/color/{types.d.ts → types.ts} +6 -2
- package/src/sgr/color/utils.ts +58 -0
- package/src/sgr/index.ts +3 -0
- package/src/sgr/reset.ts +1 -0
- package/src/sgr/sgr.ts +68 -0
- package/src/sgr/{style.js → style.ts} +3 -5
- package/src/sgr/{utils.js → utils.ts} +3 -6
- package/src/simplify/{atom.js → atom.ts} +11 -13
- package/src/simplify/index.ts +1 -0
- package/src/simplify/{lookup.js → lookup.ts} +5 -14
- package/src/simplify/{simplify.js → simplify.ts} +4 -10
- package/src/simplify/state.ts +63 -0
- package/src/simplify/{types.d.ts → types.ts} +5 -5
- package/src/simplify/{utils.js → utils.ts} +4 -10
- package/src/{slice.js → slice.ts} +12 -26
- package/src/strip.ts +5 -0
- package/src/{terminal.js → terminal.ts} +4 -7
- package/LICENSE +0 -7
- package/README.md +0 -174
- package/src/ansi.js +0 -70
- package/src/features/build.js +0 -68
- package/src/features/detect.js +0 -40
- package/src/features/features.js +0 -53
- package/src/features/index.js +0 -1
- package/src/index.js +0 -1
- package/src/pad.js +0 -21
- package/src/scroll.js +0 -18
- package/src/sgr/color/index.js +0 -1
- package/src/sgr/color/utils.js +0 -81
- package/src/sgr/index.js +0 -5
- package/src/sgr/reset.js +0 -3
- package/src/sgr/sgr.js +0 -77
- package/src/simplify/index.js +0 -1
- package/src/simplify/state.js +0 -73
- package/src/strip.js +0 -23
package/src/sgr/color/utils.js
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/** @typedef {import("../sgr").Code} Code */
|
|
2
|
-
|
|
3
|
-
/** @type {(r: number, g: number, b: number) => number} */
|
|
4
|
-
function rgbToX256(r, g, b) {
|
|
5
|
-
if (r === g && g === b) {
|
|
6
|
-
// grayscale
|
|
7
|
-
return 232 + Math.floor(r * 24 / 256);
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
// 6x6x6 color cube
|
|
11
|
-
return (
|
|
12
|
-
16 +
|
|
13
|
-
Math.floor(r * 6 / 256) * 36 +
|
|
14
|
-
Math.floor(g * 6 / 256) * 6 +
|
|
15
|
-
Math.floor(b * 6 / 256)
|
|
16
|
-
);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/** @type {(code: number) => [number, number, number]} */
|
|
20
|
-
function x256ToRgb(code) {
|
|
21
|
-
if (code >= 232) {
|
|
22
|
-
// grayscale
|
|
23
|
-
const gray = Math.round((code - 232) * 255 / 24);
|
|
24
|
-
return [gray, gray, gray];
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
code -= 16;
|
|
28
|
-
const r = Math.floor(code / 36) * 51;
|
|
29
|
-
const g = Math.floor((code % 36) / 6) * 51;
|
|
30
|
-
const b = (code % 6) * 51;
|
|
31
|
-
return [r, g, b];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/** @type {(r: number, g: number, b: number) => number} */
|
|
35
|
-
function rgbToX16(r, g, b) {
|
|
36
|
-
// First calculate it as a 4x4x4 cube.
|
|
37
|
-
|
|
38
|
-
r = Math.min(2, Math.floor(r / 85));
|
|
39
|
-
g = Math.min(2, Math.floor(g / 85));
|
|
40
|
-
b = Math.min(2, Math.floor(b / 85));
|
|
41
|
-
|
|
42
|
-
// Which channels are "on" determines the hue (ANSI color index 0–7).
|
|
43
|
-
const index = (r ? 1 : 0) | (g ? 2 : 0) | (b ? 4 : 0);
|
|
44
|
-
|
|
45
|
-
// The bright bit is derived from the max channel level across all three.
|
|
46
|
-
const twos = (r === 2 ? 1 : 0) + (g === 2 ? 1 : 0) + (b === 2 ? 1 : 0);
|
|
47
|
-
const ones = (r === 1 ? 1 : 0) + (g === 1 ? 1 : 0) + (b === 1 ? 1 : 0);
|
|
48
|
-
const bright = twos > 0 && twos >= ones;
|
|
49
|
-
|
|
50
|
-
// Return value uses the SGR offset scheme: 0–7 for normal, 60–67 for bright.
|
|
51
|
-
return index + (bright ? 60 : 0);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/** @type {(r: number, g: number, b: number) => number} */
|
|
55
|
-
function rgbToX8(r, g, b) {
|
|
56
|
-
r = r >= 128 ? 1 : 0;
|
|
57
|
-
g = g >= 128 ? 1 : 0;
|
|
58
|
-
b = b >= 128 ? 1 : 0;
|
|
59
|
-
|
|
60
|
-
return (r ? 1 : 0) | (g ? 2 : 0) | (b ? 4 : 0);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* @overload
|
|
65
|
-
* @param {number} x
|
|
66
|
-
* @returns {number}
|
|
67
|
-
* @overload
|
|
68
|
-
* @param {number} r
|
|
69
|
-
* @param {number} g
|
|
70
|
-
* @param {number} b
|
|
71
|
-
* @returns {[number, number, number]}
|
|
72
|
-
*//** @param {[number] | [number, number, number]} args */
|
|
73
|
-
const clip = (...args) => args.length === 1 ?
|
|
74
|
-
Math.max(0, Math.min(255, Math.floor(args[0]))) :
|
|
75
|
-
[
|
|
76
|
-
Math.max(0, Math.min(255, Math.floor(args[0]))),
|
|
77
|
-
Math.max(0, Math.min(255, Math.floor(args[1]))),
|
|
78
|
-
Math.max(0, Math.min(255, Math.floor(args[2]))),
|
|
79
|
-
];
|
|
80
|
-
|
|
81
|
-
module.exports = {rgbToX256, x256ToRgb, rgbToX16, rgbToX8, clip};
|
package/src/sgr/index.js
DELETED
package/src/sgr/reset.js
DELETED
package/src/sgr/sgr.js
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
@typedef {number | number[]} Code
|
|
5
|
-
@typedef {{
|
|
6
|
-
(text: string): string;
|
|
7
|
-
open : string;
|
|
8
|
-
close : string;
|
|
9
|
-
codes : {open: Code, close: Code};
|
|
10
|
-
combine : (...styles: SGR[]) => SGR;
|
|
11
|
-
}} SGR
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
/** @type {(code: Code, codes: Code[]) => Code} */
|
|
15
|
-
function combine(code, codes, ) {
|
|
16
|
-
if (!codes.length)
|
|
17
|
-
return code;
|
|
18
|
-
|
|
19
|
-
const rtn = Array.isArray(code) ? [...code] : [code];
|
|
20
|
-
|
|
21
|
-
for (const c of codes) {
|
|
22
|
-
if (Array.isArray(c))
|
|
23
|
-
rtn.push(...c);
|
|
24
|
-
else
|
|
25
|
-
rtn.push(c);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return rtn;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/** @type {(code: Code) => string | number} */
|
|
32
|
-
const codeSequence = code => Array.isArray(code) ? code.join(';') : code;
|
|
33
|
-
|
|
34
|
-
/** @type {(open: Code, close: Code, reset?: boolean) => SGR} */
|
|
35
|
-
function sgr(open, close, reset = false) {
|
|
36
|
-
const openCode = codeSequence(open);
|
|
37
|
-
const closeCode = codeSequence(close);
|
|
38
|
-
const openSequence = `\x1b[${openCode}m`;
|
|
39
|
-
const closeSequence = `\x1b[${closeCode}m`;
|
|
40
|
-
const reopenCode = reset ? `${closeCode};${openCode}` : openCode;
|
|
41
|
-
|
|
42
|
-
const rxClose = new RegExp(
|
|
43
|
-
`(?<start>\\x1b\\[(?:\\d+;)*)${closeCode}(?<end>(?:;\\d+)*m)`,
|
|
44
|
-
"g"
|
|
45
|
-
);
|
|
46
|
-
const replace = `$<start>${reopenCode}$<end>`;
|
|
47
|
-
|
|
48
|
-
/** @type {(text: string) => string} */
|
|
49
|
-
const func = s => openSequence + s.replace(rxClose, replace) + closeSequence;
|
|
50
|
-
|
|
51
|
-
return Object.assign(func, {
|
|
52
|
-
codes : {open, close},
|
|
53
|
-
open : openSequence,
|
|
54
|
-
close : closeSequence,
|
|
55
|
-
|
|
56
|
-
/** @type {(...styles: SGR[]) => SGR} */
|
|
57
|
-
combine: (...styles) => sgr(
|
|
58
|
-
combine(open, styles.map(s => s.codes.open)),
|
|
59
|
-
combine(close, styles.map(s => s.codes.close)),
|
|
60
|
-
),
|
|
61
|
-
});
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
/** @type {SGR} */
|
|
65
|
-
const disabledSGR = Object.assign(/** @type {(text: string) => string} */ s => s, {
|
|
66
|
-
codes : {open: 0, close: 0},
|
|
67
|
-
open : "",
|
|
68
|
-
close : "",
|
|
69
|
-
combine : () => disabledSGR,
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
/** @type {typeof sgr} */
|
|
73
|
-
const disabled = () => disabledSGR;
|
|
74
|
-
|
|
75
|
-
const makeSGR = (enabled = true) => enabled ? sgr : disabled;
|
|
76
|
-
|
|
77
|
-
module.exports = {makeSGR};
|
package/src/simplify/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
module.exports = require("./simplify");
|
package/src/simplify/state.js
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const {lookUpAtom} = require("./lookup");
|
|
4
|
-
const {arraysEqual, transitionIntensity} = require("./utils");
|
|
5
|
-
|
|
6
|
-
/** @typedef {import("./types").Attribute} Attribute */
|
|
7
|
-
/** @typedef {import("./types").AttributeMap} AttributeMap */
|
|
8
|
-
|
|
9
|
-
/** @type {Map<Attribute, number[]>} */
|
|
10
|
-
const defaultCodes = new Map([
|
|
11
|
-
["intensity", [22]],
|
|
12
|
-
["italic", [23]],
|
|
13
|
-
["underline", [24]],
|
|
14
|
-
["inverse", [27]],
|
|
15
|
-
["hidden", [28]],
|
|
16
|
-
["strikethrough",[29]],
|
|
17
|
-
["fg", [39]],
|
|
18
|
-
["bg", [49]],
|
|
19
|
-
["frame", [54]],
|
|
20
|
-
["overline", [55]],
|
|
21
|
-
]);
|
|
22
|
-
|
|
23
|
-
/** @type {AttributeMap} */
|
|
24
|
-
class State extends Map {
|
|
25
|
-
/** @type {(codes: number[]) => number[]} */
|
|
26
|
-
update(codes) {
|
|
27
|
-
/** @type {AttributeMap} */
|
|
28
|
-
let snapshot = new Map(this);
|
|
29
|
-
|
|
30
|
-
/** @type {Set<Attribute>} */
|
|
31
|
-
const attributes = new Set();
|
|
32
|
-
|
|
33
|
-
for (let i = 0; i < codes.length; i++) {
|
|
34
|
-
const {attribute, code, skip} = lookUpAtom(codes, i, this);
|
|
35
|
-
|
|
36
|
-
if (attribute === "reset") {
|
|
37
|
-
attributes.clear();
|
|
38
|
-
this.clear();
|
|
39
|
-
attributes.add("reset");
|
|
40
|
-
for (const [attr, defaultCode] of defaultCodes)
|
|
41
|
-
this.set(attr, defaultCode);
|
|
42
|
-
|
|
43
|
-
snapshot = new Map(this);
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
attributes.add(attribute);
|
|
48
|
-
this.set(attribute, code);
|
|
49
|
-
|
|
50
|
-
if (skip)
|
|
51
|
-
i += skip;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return Array.from(attributes).flatMap(attribute => {
|
|
55
|
-
if (attribute === "reset")
|
|
56
|
-
return [0];
|
|
57
|
-
|
|
58
|
-
const code = this.get(attribute);
|
|
59
|
-
|
|
60
|
-
if (arraysEqual(code, snapshot.get(attribute)))
|
|
61
|
-
return [];
|
|
62
|
-
|
|
63
|
-
if (attribute === "intensity") {
|
|
64
|
-
const previous = snapshot.get(attribute);
|
|
65
|
-
return transitionIntensity(previous, code);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
return code;
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
module.exports = {State};
|
package/src/strip.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const {rxCSI, rxUnsafe} = require("./patterns");
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Remove all ANSI escape codes from the given text.
|
|
7
|
-
* @type {(text: string) => string}
|
|
8
|
-
*/
|
|
9
|
-
const strip = text => text.replace(new RegExp(rxCSI), "");
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Calculate the visible length of a string with ANSI escape codes stripped.
|
|
13
|
-
* @type {(text: string) => number}
|
|
14
|
-
*/
|
|
15
|
-
const visibleLength = text => strip(text).length;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Remove all ANSI escape codes except SGR codes (m), which are used for color and styling.
|
|
19
|
-
* @type {(text: string) => string}
|
|
20
|
-
*/
|
|
21
|
-
const sanitize = text => text.replace(new RegExp(rxUnsafe), "");
|
|
22
|
-
|
|
23
|
-
module.exports = {strip, visibleLength, sanitize};
|