@peteanderson/ansi 2.1.0 → 2.1.1
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/cjs/patterns.d.ts.map +1 -1
- package/dist/cjs/patterns.js +1 -1
- package/dist/cjs/patterns.js.map +1 -1
- package/dist/cjs/simplify/simplify.d.ts.map +1 -1
- package/dist/cjs/simplify/simplify.js +4 -3
- package/dist/cjs/simplify/simplify.js.map +1 -1
- package/dist/cjs/simplify/state.d.ts +2 -1
- package/dist/cjs/simplify/state.d.ts.map +1 -1
- package/dist/cjs/simplify/state.js +32 -7
- package/dist/cjs/simplify/state.js.map +1 -1
- package/dist/esm/ansi.d.ts +18 -18
- package/dist/esm/features/build.d.ts +1 -1
- package/dist/esm/features/detect.d.ts +1 -1
- package/dist/esm/features/features.d.ts +1 -1
- package/dist/esm/features/index.d.ts +2 -2
- package/dist/esm/index.d.ts +3 -3
- package/dist/esm/patterns.d.ts.map +1 -1
- package/dist/esm/patterns.js +1 -1
- package/dist/esm/patterns.js.map +1 -1
- package/dist/esm/sgr/color/channel.d.ts +2 -2
- package/dist/esm/sgr/color/color.d.ts +2 -2
- package/dist/esm/sgr/color/context.d.ts +2 -2
- package/dist/esm/sgr/color/index.d.ts +1 -1
- package/dist/esm/sgr/color/rgb.d.ts +2 -2
- package/dist/esm/sgr/combine.d.ts +1 -1
- package/dist/esm/sgr/format-builder.d.ts +1 -1
- package/dist/esm/sgr/index.d.ts +2 -2
- package/dist/esm/sgr/sgr.d.ts +2 -2
- package/dist/esm/sgr/style.d.ts +1 -1
- package/dist/esm/simplify/atom.d.ts +1 -1
- package/dist/esm/simplify/index.d.ts +1 -1
- package/dist/esm/simplify/lookup.d.ts +1 -1
- package/dist/esm/simplify/simplify.d.ts.map +1 -1
- package/dist/esm/simplify/simplify.js +4 -3
- package/dist/esm/simplify/simplify.js.map +1 -1
- package/dist/esm/simplify/state.d.ts +3 -2
- package/dist/esm/simplify/state.d.ts.map +1 -1
- package/dist/esm/simplify/state.js +32 -7
- package/dist/esm/simplify/state.js.map +1 -1
- package/dist/esm/types.d.ts +10 -10
- package/package.json +1 -1
- package/src/patterns.ts +1 -1
- package/src/simplify/simplify.ts +4 -3
- package/src/simplify/state.ts +39 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/patterns.ts"],"names":[],"mappings":"AAuCA,eAAO,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/patterns.ts"],"names":[],"mappings":"AAuCA,eAAO,MAAM,KAAK,kBAAuC,CAAC;AAC1D,eAAO,MAAM,KAAK,kBAA+C,CAAC;AAClE,eAAO,MAAM,QAAQ,kBAA+C,CAAC"}
|
package/dist/cjs/patterns.js
CHANGED
|
@@ -39,7 +39,7 @@ timeit(() => long .replace(new RegExp(rxSGR.source, "g"), ""), {description: "lo
|
|
|
39
39
|
*/
|
|
40
40
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
41
|
exports.rxUnsafe = exports.rxCSI = exports.rxSGR = void 0;
|
|
42
|
-
exports.rxSGR = Object.freeze(/\x1b\[[\d;]*m/g);
|
|
42
|
+
exports.rxSGR = Object.freeze(/\x1b\[([\d;]*)m/g);
|
|
43
43
|
exports.rxCSI = Object.freeze(/\x1b\[[0-?]*[ -/]*[@-~]/g);
|
|
44
44
|
exports.rxUnsafe = Object.freeze(/\x1b\[[0-?]*[ -/]*[@-ln-~]/g); // Everything except SGR codes (m).
|
|
45
45
|
//# sourceMappingURL=patterns.js.map
|
package/dist/cjs/patterns.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/patterns.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCE;;;AAEW,QAAA,KAAK,GAAM,MAAM,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/patterns.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCE;;;AAEW,QAAA,KAAK,GAAM,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAC7C,QAAA,KAAK,GAAM,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;AACrD,QAAA,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,mCAAmC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simplify.d.ts","sourceRoot":"","sources":["../../../src/simplify/simplify.ts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"simplify.d.ts","sourceRoot":"","sources":["../../../src/simplify/simplify.ts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwB7C;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC"}
|
|
@@ -12,12 +12,13 @@ function simplify(text) {
|
|
|
12
12
|
let codes = parts[i++].split(";").map(Number);
|
|
13
13
|
let chunk = parts[i++];
|
|
14
14
|
while (!chunk && i < parts.length) {
|
|
15
|
+
// Merge consecutive SGR sequences with no text between them.
|
|
15
16
|
codes.push(...parts[i++].split(";").map(Number));
|
|
16
17
|
chunk = parts[i++];
|
|
17
18
|
}
|
|
18
|
-
|
|
19
|
-
if (
|
|
20
|
-
result += `\x1b[${
|
|
19
|
+
const newCodes = state.update(codes);
|
|
20
|
+
if (newCodes.length)
|
|
21
|
+
result += `\x1b[${newCodes.join(";")}m`;
|
|
21
22
|
result += chunk;
|
|
22
23
|
}
|
|
23
24
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simplify.js","sourceRoot":"","sources":["../../../src/simplify/simplify.ts"],"names":[],"mappings":";;AAGA,
|
|
1
|
+
{"version":3,"file":"simplify.js","sourceRoot":"","sources":["../../../src/simplify/simplify.ts"],"names":[],"mappings":";;AAGA,4BAwBC;AA3BD,0CAAkC;AAClC,mCAA8B;AAE9B,SAAgB,QAAQ,CAAC,IAAY;IACpC,sEAAsE;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAK,CAAC,CAAC;IAEhC,MAAM,KAAK,GAAI,IAAI,aAAK,EAAE,CAAC;IAC3B,IAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAI,CAAC;QACpC,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAEvB,OAAO,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACnC,6DAA6D;YAC7D,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YACjD,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,QAAQ,CAAC,MAAM;YAClB,MAAM,IAAI,QAAQ,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Attribute, AttributeMap } from "./types";
|
|
2
2
|
export declare class State extends Map<Attribute, number[]> implements AttributeMap {
|
|
3
|
-
|
|
3
|
+
#private;
|
|
4
|
+
update(codes: number[]): Array<number | string>;
|
|
4
5
|
}
|
|
5
6
|
//# sourceMappingURL=state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/simplify/state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,SAAS,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;AAerD,qBAAa,KAAM,SAAQ,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,CAAE,YAAW,YAAY
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/simplify/state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,SAAS,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;AAerD,qBAAa,KAAM,SAAQ,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,CAAE,YAAW,YAAY;;IAa1E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;CA8D/C"}
|
|
@@ -16,12 +16,24 @@ const defaultCodes = new Map([
|
|
|
16
16
|
["overline", [55]],
|
|
17
17
|
]);
|
|
18
18
|
class State extends Map {
|
|
19
|
+
#isDefaultState(except) {
|
|
20
|
+
for (const [attribute, defaultCode] of defaultCodes) {
|
|
21
|
+
if (attribute === except)
|
|
22
|
+
continue;
|
|
23
|
+
const current = this.get(attribute);
|
|
24
|
+
if (!(0, utils_1.arraysEqual)(current, defaultCode))
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
19
29
|
update(codes) {
|
|
20
30
|
let snapshot = new Map(this);
|
|
21
31
|
const attributes = new Set();
|
|
22
32
|
for (let i = 0; i < codes.length; i++) {
|
|
23
33
|
const { attribute, code, skip } = (0, lookup_1.lookUpAtom)(codes, i, this);
|
|
24
34
|
if (attribute === "reset") {
|
|
35
|
+
if (this.#isDefaultState())
|
|
36
|
+
continue;
|
|
25
37
|
attributes.clear();
|
|
26
38
|
this.clear();
|
|
27
39
|
attributes.add("reset");
|
|
@@ -35,18 +47,31 @@ class State extends Map {
|
|
|
35
47
|
if (skip)
|
|
36
48
|
i += skip;
|
|
37
49
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
50
|
+
const rtn = [];
|
|
51
|
+
for (const attribute of attributes) {
|
|
52
|
+
if (attribute === "reset") {
|
|
53
|
+
rtn.length = 0; // Any previous codes are irrelevant.
|
|
54
|
+
rtn.push(""); // The terminal will interpret missing values as `0`.
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
41
57
|
const code = this.get(attribute);
|
|
42
58
|
if ((0, utils_1.arraysEqual)(code, snapshot.get(attribute)))
|
|
43
|
-
|
|
59
|
+
continue;
|
|
60
|
+
// If this code would put us in a known overall default state, then we can just reset,
|
|
61
|
+
// which is shorter. (Compare `\x1b[m` vs. `\x1b[39m` or especially `\x1b[22;39;49m`.)
|
|
62
|
+
if ((0, utils_1.arraysEqual)(code, defaultCodes.get(attribute)) && this.#isDefaultState(attribute)) {
|
|
63
|
+
rtn.length = 0;
|
|
64
|
+
rtn.push("");
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
44
67
|
if (attribute === "intensity") {
|
|
45
68
|
const previous = snapshot.get(attribute);
|
|
46
|
-
|
|
69
|
+
rtn.push(...(0, utils_1.transitionIntensity)(previous, code));
|
|
70
|
+
continue;
|
|
47
71
|
}
|
|
48
|
-
|
|
49
|
-
}
|
|
72
|
+
rtn.push(...code);
|
|
73
|
+
}
|
|
74
|
+
return rtn;
|
|
50
75
|
}
|
|
51
76
|
}
|
|
52
77
|
exports.State = State;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/simplify/state.ts"],"names":[],"mappings":";;;AAAA,qCAA0D;AAC1D,mCAAyD;AAIzD,MAAM,YAAY,GAA6B,IAAI,GAAG,CAAC;IACtD,CAAC,WAAW,EAAM,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,QAAQ,EAAS,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,WAAW,EAAM,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,SAAS,EAAQ,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,QAAQ,EAAS,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,IAAI,EAAa,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,IAAI,EAAa,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,OAAO,EAAU,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,UAAU,EAAO,CAAC,EAAE,CAAC,CAAC;CACvB,CAAC,CAAC;AAEH,MAAa,KAAM,SAAQ,GAAwB;IAClD,MAAM,CAAC,KAAe;QACrB,IAAI,QAAQ,GAAiB,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAa,CAAC;QAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAC,GAAG,IAAA,mBAAU,EAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAE3D,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gBAC3B,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACxB,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,YAAY;oBAC7C,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAE7B,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;gBACzB,SAAS;YACV,CAAC;YAED,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAE1B,IAAI,IAAI;gBACP,CAAC,IAAI,IAAI,CAAC;QACZ,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/simplify/state.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/ansi.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { padEnd, padStart } from "./pad";
|
|
2
|
-
import { strip, visibleLength } from "./strip";
|
|
3
|
-
import type { Args } from "./features";
|
|
4
|
-
import type { Ansi } from "./types";
|
|
1
|
+
import { padEnd, padStart } from "./pad.js";
|
|
2
|
+
import { strip, visibleLength } from "./strip.js";
|
|
3
|
+
import type { Args } from "./features/index.js";
|
|
4
|
+
import type { Ansi } from "./types.js";
|
|
5
5
|
export declare function makeAnsi(...args: Args): Ansi;
|
|
6
6
|
export declare const ansi: Ansi;
|
|
7
|
-
export declare const fg: import("./sgr/types").Channel<"bg" | import("./sgr/types").StyleKey>, bg: import("./sgr/types").Channel<"fg" | import("./sgr/types").StyleKey>, style: import("./sgr/types").Style<import("./sgr/types").ChainKey>, reset: string, caret: {
|
|
7
|
+
export declare const fg: import("./sgr/types.js").Channel<"bg" | import("./sgr/types.js").StyleKey>, bg: import("./sgr/types.js").Channel<"fg" | import("./sgr/types.js").StyleKey>, style: import("./sgr/types.js").Style<import("./sgr/types.js").ChainKey>, reset: string, caret: {
|
|
8
8
|
up: (count?: number) => string;
|
|
9
9
|
down: (count?: number) => string;
|
|
10
10
|
forward: (count?: number) => string;
|
|
@@ -67,19 +67,19 @@ export declare const fg: import("./sgr/types").Channel<"bg" | import("./sgr/type
|
|
|
67
67
|
};
|
|
68
68
|
};
|
|
69
69
|
export { padEnd, padStart, strip, visibleLength };
|
|
70
|
-
declare const _default: typeof makeAnsi & import("./sgr").SGR & {
|
|
71
|
-
caret: import("./caret").Caret;
|
|
72
|
-
erase: import("./erase").Erase;
|
|
73
|
-
scroll: import("./scroll").Scroll;
|
|
74
|
-
terminal: import("./terminal").Terminal;
|
|
75
|
-
padEnd: import("./pad").PadEnd;
|
|
76
|
-
padStart: import("./pad").PadStart;
|
|
77
|
-
strip: import("./strip").Strip;
|
|
78
|
-
visibleLength: import("./strip").VisibleLength;
|
|
79
|
-
sanitize: import("./strip").Sanitize;
|
|
80
|
-
slice: import("./slice").Slice;
|
|
81
|
-
simplify: import("./simplify").Simplify;
|
|
82
|
-
features: import("./features").Features;
|
|
70
|
+
declare const _default: typeof makeAnsi & import("./sgr/index.js").SGR & {
|
|
71
|
+
caret: import("./caret.js").Caret;
|
|
72
|
+
erase: import("./erase.js").Erase;
|
|
73
|
+
scroll: import("./scroll.js").Scroll;
|
|
74
|
+
terminal: import("./terminal.js").Terminal;
|
|
75
|
+
padEnd: import("./pad.js").PadEnd;
|
|
76
|
+
padStart: import("./pad.js").PadStart;
|
|
77
|
+
strip: import("./strip.js").Strip;
|
|
78
|
+
visibleLength: import("./strip.js").VisibleLength;
|
|
79
|
+
sanitize: import("./strip.js").Sanitize;
|
|
80
|
+
slice: import("./slice.js").Slice;
|
|
81
|
+
simplify: import("./simplify/index.js").Simplify;
|
|
82
|
+
features: import("./features/index.js").Features;
|
|
83
83
|
};
|
|
84
84
|
export default _default;
|
|
85
85
|
//# sourceMappingURL=ansi.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ColorDepth, Features } from "./types";
|
|
1
|
+
import type { ColorDepth, Features } from "./types.js";
|
|
2
2
|
export declare function build(isTTY: boolean, colorDepth: ColorDepth, style?: boolean, caret?: boolean, erase?: boolean, scroll?: boolean, terminal?: boolean): Features;
|
|
3
3
|
export declare const boolean: (isTTY: boolean, enabled: boolean) => Features;
|
|
4
4
|
export declare const number: (isTTY: boolean, colorDepth: ColorDepth) => Features;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ColorDepth, Features } from "./types";
|
|
1
|
+
import type { ColorDepth, Features } from "./types.js";
|
|
2
2
|
export declare function getColorDepth(stream?: NodeJS.WriteStream): ColorDepth;
|
|
3
3
|
export declare function detectFeatureSupport(isTTY: boolean, colorDepth: ColorDepth): Omit<Features, "colorDepth">;
|
|
4
4
|
//# sourceMappingURL=detect.d.ts.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from "./features";
|
|
2
|
-
export type * from "./types";
|
|
1
|
+
export * from "./features.js";
|
|
2
|
+
export type * from "./types.js";
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { default } from "./ansi";
|
|
2
|
-
export * from "./ansi";
|
|
3
|
-
export type { Ansi } from "./types";
|
|
1
|
+
export { default } from "./ansi.js";
|
|
2
|
+
export * from "./ansi.js";
|
|
3
|
+
export type { Ansi } from "./types.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/patterns.ts"],"names":[],"mappings":"AAuCA,eAAO,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/patterns.ts"],"names":[],"mappings":"AAuCA,eAAO,MAAM,KAAK,kBAAuC,CAAC;AAC1D,eAAO,MAAM,KAAK,kBAA+C,CAAC;AAClE,eAAO,MAAM,QAAQ,kBAA+C,CAAC"}
|
package/dist/esm/patterns.js
CHANGED
|
@@ -36,7 +36,7 @@ timeit(() => long .replace(new RegExp(rxSGR.source, "g"), ""), {description: "lo
|
|
|
36
36
|
// long - clone source : 46.491 ųs (21,510 in 1.000026492 s)
|
|
37
37
|
```
|
|
38
38
|
*/
|
|
39
|
-
export const rxSGR = Object.freeze(/\x1b\[[\d;]*m/g);
|
|
39
|
+
export const rxSGR = Object.freeze(/\x1b\[([\d;]*)m/g);
|
|
40
40
|
export const rxCSI = Object.freeze(/\x1b\[[0-?]*[ -/]*[@-~]/g);
|
|
41
41
|
export const rxUnsafe = Object.freeze(/\x1b\[[0-?]*[ -/]*[@-ln-~]/g); // Everything except SGR codes (m).
|
|
42
42
|
//# sourceMappingURL=patterns.js.map
|
package/dist/esm/patterns.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCE;AAEF,MAAM,CAAC,MAAM,KAAK,GAAM,MAAM,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCE;AAEF,MAAM,CAAC,MAAM,KAAK,GAAM,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,KAAK,GAAM,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,mCAAmC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ColorDepth } from "../../features";
|
|
2
|
-
import type { ChainKey, Channel, ColorKey, FormatBuilder, Style } from "../types";
|
|
1
|
+
import type { ColorDepth } from "../../features/index.js";
|
|
2
|
+
import type { ChainKey, Channel, ColorKey, FormatBuilder, Style } from "../types.js";
|
|
3
3
|
export declare function makeChannel(keys: ReadonlySet<ChainKey>, makeFormatter: FormatBuilder, style: Style, colorDepth: ColorDepth, channel: ColorKey): Channel;
|
|
4
4
|
//# sourceMappingURL=channel.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ColorDepth } from "../../features";
|
|
2
|
-
import type { ChainKey, Color, FormatBuilder, Style } from "../types";
|
|
1
|
+
import type { ColorDepth } from "../../features/index.js";
|
|
2
|
+
import type { ChainKey, Color, FormatBuilder, Style } from "../types.js";
|
|
3
3
|
export declare function makeColor(keys: ReadonlySet<ChainKey>, makeFormatter: FormatBuilder, style: Style, colorDepth: ColorDepth): Color<any>;
|
|
4
4
|
//# sourceMappingURL=color.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ColorDepth } from "../../features";
|
|
2
|
-
import type { ChainKey, Code, ColorKey, Format, FormatBuilder, Style } from "../types";
|
|
1
|
+
import type { ColorDepth } from "../../features/index.js";
|
|
2
|
+
import type { ChainKey, Code, ColorKey, Format, FormatBuilder, Style } from "../types.js";
|
|
3
3
|
export declare function buildContext(keys: ReadonlySet<ChainKey>, makeFormatter: FormatBuilder, style: Style, colorDepth: ColorDepth, channel: ColorKey): {
|
|
4
4
|
colorDepth: ColorDepth;
|
|
5
5
|
channel: ColorKey;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./color";
|
|
1
|
+
export * from "./color.js";
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Channel, Format } from "../types";
|
|
2
|
-
import type { Context } from "./context";
|
|
1
|
+
import type { Channel, Format } from "../types.js";
|
|
2
|
+
import type { Context } from "./context.js";
|
|
3
3
|
export declare function makeRGB(ctx: Context): Channel["rgb"];
|
|
4
4
|
export declare function makeX256(ctx: Context): (...args: [number] | [number, number, number]) => Format;
|
|
5
5
|
//# sourceMappingURL=rgb.d.ts.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { ChainBuilder, FormatBuilder } from "./types";
|
|
1
|
+
import type { ChainBuilder, FormatBuilder } from "./types.js";
|
|
2
2
|
export declare function makeFormatBuilder(makeChain: ChainBuilder, enabled?: boolean): FormatBuilder;
|
|
3
3
|
//# sourceMappingURL=format-builder.d.ts.map
|
package/dist/esm/sgr/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from "./sgr";
|
|
2
|
-
export { SGR } from "./types";
|
|
1
|
+
export * from "./sgr.js";
|
|
2
|
+
export { SGR } from "./types.js";
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/sgr/sgr.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Features } from "../features";
|
|
2
|
-
import type { SGR } from "./types";
|
|
1
|
+
import type { Features } from "../features/index.js";
|
|
2
|
+
import type { SGR } from "./types.js";
|
|
3
3
|
export declare function makeSGR(features: Features): SGR;
|
|
4
4
|
//# sourceMappingURL=sgr.d.ts.map
|
package/dist/esm/sgr/style.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { ChainKey, FormatBuilder, Style } from "./types";
|
|
1
|
+
import type { ChainKey, FormatBuilder, Style } from "./types.js";
|
|
2
2
|
export declare function makeStyle(keys: ReadonlySet<ChainKey>, makeFormatter: FormatBuilder, enabled: boolean): Style<any>;
|
|
3
3
|
//# sourceMappingURL=style.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./simplify";
|
|
1
|
+
export * from "./simplify.js";
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simplify.d.ts","sourceRoot":"","sources":["../../../src/simplify/simplify.ts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"simplify.d.ts","sourceRoot":"","sources":["../../../src/simplify/simplify.ts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwB7C;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC"}
|
|
@@ -9,12 +9,13 @@ export function simplify(text) {
|
|
|
9
9
|
let codes = parts[i++].split(";").map(Number);
|
|
10
10
|
let chunk = parts[i++];
|
|
11
11
|
while (!chunk && i < parts.length) {
|
|
12
|
+
// Merge consecutive SGR sequences with no text between them.
|
|
12
13
|
codes.push(...parts[i++].split(";").map(Number));
|
|
13
14
|
chunk = parts[i++];
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
-
if (
|
|
17
|
-
result += `\x1b[${
|
|
16
|
+
const newCodes = state.update(codes);
|
|
17
|
+
if (newCodes.length)
|
|
18
|
+
result += `\x1b[${newCodes.join(";")}m`;
|
|
18
19
|
result += chunk;
|
|
19
20
|
}
|
|
20
21
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simplify.js","sourceRoot":"","sources":["../../../src/simplify/simplify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAClC,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAE9B,MAAM,UAAU,QAAQ,CAAC,IAAY;IACpC,sEAAsE;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEhC,MAAM,KAAK,GAAI,IAAI,KAAK,EAAE,CAAC;IAC3B,IAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAI,CAAC;QACpC,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAEvB,OAAO,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YACjD,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"simplify.js","sourceRoot":"","sources":["../../../src/simplify/simplify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAClC,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAE9B,MAAM,UAAU,QAAQ,CAAC,IAAY;IACpC,sEAAsE;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEhC,MAAM,KAAK,GAAI,IAAI,KAAK,EAAE,CAAC;IAC3B,IAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAI,CAAC;QACpC,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAEvB,OAAO,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACnC,6DAA6D;YAC7D,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YACjD,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,QAAQ,CAAC,MAAM;YAClB,MAAM,IAAI,QAAQ,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { Attribute, AttributeMap } from "./types";
|
|
1
|
+
import type { Attribute, AttributeMap } from "./types.js";
|
|
2
2
|
export declare class State extends Map<Attribute, number[]> implements AttributeMap {
|
|
3
|
-
|
|
3
|
+
#private;
|
|
4
|
+
update(codes: number[]): Array<number | string>;
|
|
4
5
|
}
|
|
5
6
|
//# sourceMappingURL=state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/simplify/state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,SAAS,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;AAerD,qBAAa,KAAM,SAAQ,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,CAAE,YAAW,YAAY
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/simplify/state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,SAAS,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;AAerD,qBAAa,KAAM,SAAQ,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,CAAE,YAAW,YAAY;;IAa1E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;CA8D/C"}
|
|
@@ -13,12 +13,24 @@ const defaultCodes = new Map([
|
|
|
13
13
|
["overline", [55]],
|
|
14
14
|
]);
|
|
15
15
|
export class State extends Map {
|
|
16
|
+
#isDefaultState(except) {
|
|
17
|
+
for (const [attribute, defaultCode] of defaultCodes) {
|
|
18
|
+
if (attribute === except)
|
|
19
|
+
continue;
|
|
20
|
+
const current = this.get(attribute);
|
|
21
|
+
if (!arraysEqual(current, defaultCode))
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
16
26
|
update(codes) {
|
|
17
27
|
let snapshot = new Map(this);
|
|
18
28
|
const attributes = new Set();
|
|
19
29
|
for (let i = 0; i < codes.length; i++) {
|
|
20
30
|
const { attribute, code, skip } = lookUpAtom(codes, i, this);
|
|
21
31
|
if (attribute === "reset") {
|
|
32
|
+
if (this.#isDefaultState())
|
|
33
|
+
continue;
|
|
22
34
|
attributes.clear();
|
|
23
35
|
this.clear();
|
|
24
36
|
attributes.add("reset");
|
|
@@ -32,18 +44,31 @@ export class State extends Map {
|
|
|
32
44
|
if (skip)
|
|
33
45
|
i += skip;
|
|
34
46
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
47
|
+
const rtn = [];
|
|
48
|
+
for (const attribute of attributes) {
|
|
49
|
+
if (attribute === "reset") {
|
|
50
|
+
rtn.length = 0; // Any previous codes are irrelevant.
|
|
51
|
+
rtn.push(""); // The terminal will interpret missing values as `0`.
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
38
54
|
const code = this.get(attribute);
|
|
39
55
|
if (arraysEqual(code, snapshot.get(attribute)))
|
|
40
|
-
|
|
56
|
+
continue;
|
|
57
|
+
// If this code would put us in a known overall default state, then we can just reset,
|
|
58
|
+
// which is shorter. (Compare `\x1b[m` vs. `\x1b[39m` or especially `\x1b[22;39;49m`.)
|
|
59
|
+
if (arraysEqual(code, defaultCodes.get(attribute)) && this.#isDefaultState(attribute)) {
|
|
60
|
+
rtn.length = 0;
|
|
61
|
+
rtn.push("");
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
41
64
|
if (attribute === "intensity") {
|
|
42
65
|
const previous = snapshot.get(attribute);
|
|
43
|
-
|
|
66
|
+
rtn.push(...transitionIntensity(previous, code));
|
|
67
|
+
continue;
|
|
44
68
|
}
|
|
45
|
-
|
|
46
|
-
}
|
|
69
|
+
rtn.push(...code);
|
|
70
|
+
}
|
|
71
|
+
return rtn;
|
|
47
72
|
}
|
|
48
73
|
}
|
|
49
74
|
//# sourceMappingURL=state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/simplify/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAA4B,UAAU,CAAC;AAC1D,OAAO,EAAC,WAAW,EAAE,mBAAmB,EAAC,MAAM,SAAS,CAAC;AAIzD,MAAM,YAAY,GAA6B,IAAI,GAAG,CAAC;IACtD,CAAC,WAAW,EAAM,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,QAAQ,EAAS,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,WAAW,EAAM,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,SAAS,EAAQ,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,QAAQ,EAAS,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,IAAI,EAAa,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,IAAI,EAAa,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,OAAO,EAAU,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,UAAU,EAAO,CAAC,EAAE,CAAC,CAAC;CACvB,CAAC,CAAC;AAEH,MAAM,OAAO,KAAM,SAAQ,GAAwB;IAClD,MAAM,CAAC,KAAe;QACrB,IAAI,QAAQ,GAAiB,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAa,CAAC;QAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAE3D,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gBAC3B,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACxB,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,YAAY;oBAC7C,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAE7B,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;gBACzB,SAAS;YACV,CAAC;YAED,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAE1B,IAAI,IAAI;gBACP,CAAC,IAAI,IAAI,CAAC;QACZ,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/simplify/state.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import type { Caret } from "./caret";
|
|
2
|
-
import type { Erase } from "./erase";
|
|
3
|
-
import type { Features } from "./features";
|
|
4
|
-
import type { PadEnd, PadStart } from "./pad";
|
|
5
|
-
import type { Scroll } from "./scroll";
|
|
6
|
-
import type { SGR } from "./sgr";
|
|
7
|
-
import type { Simplify } from "./simplify";
|
|
8
|
-
import type { Slice } from "./slice";
|
|
9
|
-
import type { Sanitize, Strip, VisibleLength } from "./strip";
|
|
10
|
-
import type { Terminal } from "./terminal";
|
|
1
|
+
import type { Caret } from "./caret.js";
|
|
2
|
+
import type { Erase } from "./erase.js";
|
|
3
|
+
import type { Features } from "./features/index.js";
|
|
4
|
+
import type { PadEnd, PadStart } from "./pad.js";
|
|
5
|
+
import type { Scroll } from "./scroll.js";
|
|
6
|
+
import type { SGR } from "./sgr/index.js";
|
|
7
|
+
import type { Simplify } from "./simplify/index.js";
|
|
8
|
+
import type { Slice } from "./slice.js";
|
|
9
|
+
import type { Sanitize, Strip, VisibleLength } from "./strip.js";
|
|
10
|
+
import type { Terminal } from "./terminal.js";
|
|
11
11
|
export type Ansi = SGR & {
|
|
12
12
|
caret: Caret;
|
|
13
13
|
erase: Erase;
|
package/package.json
CHANGED
package/src/patterns.ts
CHANGED
|
@@ -37,6 +37,6 @@ timeit(() => long .replace(new RegExp(rxSGR.source, "g"), ""), {description: "lo
|
|
|
37
37
|
```
|
|
38
38
|
*/
|
|
39
39
|
|
|
40
|
-
export const rxSGR = Object.freeze(/\x1b\[[\d;]*m/g);
|
|
40
|
+
export const rxSGR = Object.freeze(/\x1b\[([\d;]*)m/g);
|
|
41
41
|
export const rxCSI = Object.freeze(/\x1b\[[0-?]*[ -/]*[@-~]/g);
|
|
42
42
|
export const rxUnsafe = Object.freeze(/\x1b\[[0-?]*[ -/]*[@-ln-~]/g); // Everything except SGR codes (m).
|
package/src/simplify/simplify.ts
CHANGED
|
@@ -13,13 +13,14 @@ export function simplify(text: string): string {
|
|
|
13
13
|
let chunk = parts[i++];
|
|
14
14
|
|
|
15
15
|
while (!chunk && i < parts.length) {
|
|
16
|
+
// Merge consecutive SGR sequences with no text between them.
|
|
16
17
|
codes.push(...parts[i++].split(";").map(Number));
|
|
17
18
|
chunk = parts[i++];
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
if (
|
|
22
|
-
result += `\x1b[${
|
|
21
|
+
const newCodes = state.update(codes);
|
|
22
|
+
if (newCodes.length)
|
|
23
|
+
result += `\x1b[${newCodes.join(";")}m`;
|
|
23
24
|
result += chunk;
|
|
24
25
|
}
|
|
25
26
|
|
package/src/simplify/state.ts
CHANGED
|
@@ -17,7 +17,19 @@ const defaultCodes: Map<Attribute, number[]> = new Map([
|
|
|
17
17
|
]);
|
|
18
18
|
|
|
19
19
|
export class State extends Map<Attribute, number[]> implements AttributeMap {
|
|
20
|
-
|
|
20
|
+
#isDefaultState(except?: Attribute): boolean {
|
|
21
|
+
for (const [attribute, defaultCode] of defaultCodes) {
|
|
22
|
+
if (attribute === except)
|
|
23
|
+
continue;
|
|
24
|
+
|
|
25
|
+
const current = this.get(attribute);
|
|
26
|
+
if (!arraysEqual(current, defaultCode))
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
update(codes: number[]): Array<number | string> {
|
|
21
33
|
let snapshot: AttributeMap = new Map(this);
|
|
22
34
|
|
|
23
35
|
const attributes = new Set<Attribute>();
|
|
@@ -26,6 +38,9 @@ export class State extends Map<Attribute, number[]> implements AttributeMap {
|
|
|
26
38
|
const {attribute, code, skip} = lookUpAtom(codes, i, this);
|
|
27
39
|
|
|
28
40
|
if (attribute === "reset") {
|
|
41
|
+
if (this.#isDefaultState())
|
|
42
|
+
continue;
|
|
43
|
+
|
|
29
44
|
attributes.clear();
|
|
30
45
|
this.clear();
|
|
31
46
|
attributes.add("reset");
|
|
@@ -43,21 +58,37 @@ export class State extends Map<Attribute, number[]> implements AttributeMap {
|
|
|
43
58
|
i += skip;
|
|
44
59
|
}
|
|
45
60
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
61
|
+
const rtn: Array<number | string> = [];
|
|
62
|
+
|
|
63
|
+
for (const attribute of attributes) {
|
|
64
|
+
if (attribute === "reset") {
|
|
65
|
+
rtn.length = 0; // Any previous codes are irrelevant.
|
|
66
|
+
rtn.push(""); // The terminal will interpret missing values as `0`.
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
49
69
|
|
|
50
70
|
const code = this.get(attribute)!;
|
|
51
71
|
|
|
52
72
|
if (arraysEqual(code, snapshot.get(attribute)))
|
|
53
|
-
|
|
73
|
+
continue;
|
|
74
|
+
|
|
75
|
+
// If this code would put us in a known overall default state, then we can just reset,
|
|
76
|
+
// which is shorter. (Compare `\x1b[m` vs. `\x1b[39m` or especially `\x1b[22;39;49m`.)
|
|
77
|
+
if (arraysEqual(code, defaultCodes.get(attribute)) && this.#isDefaultState(attribute)) {
|
|
78
|
+
rtn.length = 0;
|
|
79
|
+
rtn.push("");
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
54
82
|
|
|
55
83
|
if (attribute === "intensity") {
|
|
56
84
|
const previous = snapshot.get(attribute);
|
|
57
|
-
|
|
85
|
+
rtn.push(...transitionIntensity(previous, code));
|
|
86
|
+
continue;
|
|
58
87
|
}
|
|
59
88
|
|
|
60
|
-
|
|
61
|
-
}
|
|
89
|
+
rtn.push(...code);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return rtn;
|
|
62
93
|
}
|
|
63
94
|
}
|