@peteanderson/ansi 2.2.0 → 2.3.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.
Files changed (92) hide show
  1. package/README.md +12 -0
  2. package/dist/cjs/sgr/color/context.d.ts.map +1 -1
  3. package/dist/cjs/sgr/color/context.js +4 -2
  4. package/dist/cjs/sgr/color/context.js.map +1 -1
  5. package/dist/cjs/sgr/color/rgb.js +2 -2
  6. package/dist/cjs/sgr/color/rgb.js.map +1 -1
  7. package/dist/cjs/sgr/combine.d.ts +1 -1
  8. package/dist/cjs/sgr/combine.d.ts.map +1 -1
  9. package/dist/cjs/sgr/combine.js +3 -12
  10. package/dist/cjs/sgr/combine.js.map +1 -1
  11. package/dist/cjs/sgr/format-builder.d.ts +1 -1
  12. package/dist/cjs/sgr/format-builder.d.ts.map +1 -1
  13. package/dist/cjs/sgr/format-builder.js +22 -28
  14. package/dist/cjs/sgr/format-builder.js.map +1 -1
  15. package/dist/cjs/sgr/reset.d.ts.map +1 -1
  16. package/dist/cjs/sgr/reset.js +1 -1
  17. package/dist/cjs/sgr/reset.js.map +1 -1
  18. package/dist/cjs/sgr/sgr.d.ts.map +1 -1
  19. package/dist/cjs/sgr/sgr.js +9 -10
  20. package/dist/cjs/sgr/sgr.js.map +1 -1
  21. package/dist/cjs/sgr/style.d.ts.map +1 -1
  22. package/dist/cjs/sgr/style.js +1 -1
  23. package/dist/cjs/sgr/style.js.map +1 -1
  24. package/dist/cjs/sgr/types.d.ts +2 -1
  25. package/dist/cjs/sgr/types.d.ts.map +1 -1
  26. package/dist/cjs/simplify/lookup.d.ts +2 -2
  27. package/dist/cjs/simplify/lookup.d.ts.map +1 -1
  28. package/dist/cjs/simplify/lookup.js +1 -0
  29. package/dist/cjs/simplify/lookup.js.map +1 -1
  30. package/dist/cjs/simplify/simplify.js +2 -2
  31. package/dist/cjs/simplify/simplify.js.map +1 -1
  32. package/dist/cjs/simplify/state.d.ts +3 -3
  33. package/dist/cjs/simplify/state.d.ts.map +1 -1
  34. package/dist/cjs/simplify/state.js.map +1 -1
  35. package/dist/cjs/simplify/types.d.ts +5 -4
  36. package/dist/cjs/simplify/types.d.ts.map +1 -1
  37. package/dist/cjs/simplify/utils.d.ts +3 -2
  38. package/dist/cjs/simplify/utils.d.ts.map +1 -1
  39. package/dist/cjs/simplify/utils.js.map +1 -1
  40. package/dist/esm/sgr/color/context.d.ts.map +1 -1
  41. package/dist/esm/sgr/color/context.js +4 -2
  42. package/dist/esm/sgr/color/context.js.map +1 -1
  43. package/dist/esm/sgr/color/rgb.js +2 -2
  44. package/dist/esm/sgr/color/rgb.js.map +1 -1
  45. package/dist/esm/sgr/combine.d.ts +1 -1
  46. package/dist/esm/sgr/combine.d.ts.map +1 -1
  47. package/dist/esm/sgr/combine.js +2 -12
  48. package/dist/esm/sgr/combine.js.map +1 -1
  49. package/dist/esm/sgr/format-builder.d.ts +1 -1
  50. package/dist/esm/sgr/format-builder.d.ts.map +1 -1
  51. package/dist/esm/sgr/format-builder.js +20 -27
  52. package/dist/esm/sgr/format-builder.js.map +1 -1
  53. package/dist/esm/sgr/reset.d.ts.map +1 -1
  54. package/dist/esm/sgr/reset.js +1 -1
  55. package/dist/esm/sgr/reset.js.map +1 -1
  56. package/dist/esm/sgr/sgr.d.ts.map +1 -1
  57. package/dist/esm/sgr/sgr.js +9 -10
  58. package/dist/esm/sgr/sgr.js.map +1 -1
  59. package/dist/esm/sgr/style.d.ts.map +1 -1
  60. package/dist/esm/sgr/style.js +1 -1
  61. package/dist/esm/sgr/style.js.map +1 -1
  62. package/dist/esm/sgr/types.d.ts +2 -1
  63. package/dist/esm/sgr/types.d.ts.map +1 -1
  64. package/dist/esm/simplify/lookup.d.ts +2 -2
  65. package/dist/esm/simplify/lookup.d.ts.map +1 -1
  66. package/dist/esm/simplify/lookup.js +1 -0
  67. package/dist/esm/simplify/lookup.js.map +1 -1
  68. package/dist/esm/simplify/simplify.js +2 -2
  69. package/dist/esm/simplify/simplify.js.map +1 -1
  70. package/dist/esm/simplify/state.d.ts +3 -3
  71. package/dist/esm/simplify/state.d.ts.map +1 -1
  72. package/dist/esm/simplify/state.js.map +1 -1
  73. package/dist/esm/simplify/types.d.ts +5 -4
  74. package/dist/esm/simplify/types.d.ts.map +1 -1
  75. package/dist/esm/simplify/utils.d.ts +3 -2
  76. package/dist/esm/simplify/utils.d.ts.map +1 -1
  77. package/dist/esm/simplify/utils.js.map +1 -1
  78. package/package.json +1 -1
  79. package/src/sgr/color/context.ts +4 -2
  80. package/src/sgr/color/rgb.ts +2 -2
  81. package/src/sgr/combine.ts +4 -13
  82. package/src/sgr/format-builder.ts +32 -39
  83. package/src/sgr/reset.ts +1 -1
  84. package/src/sgr/sgr.ts +10 -16
  85. package/src/sgr/style.ts +3 -3
  86. package/src/sgr/types.ts +2 -1
  87. package/src/simplify/lookup.ts +4 -3
  88. package/src/simplify/simplify.ts +3 -3
  89. package/src/simplify/state.ts +5 -5
  90. package/src/simplify/types.ts +7 -4
  91. package/src/simplify/utils.ts +7 -2
  92. package/src/utility-types.d.ts +5 -1
package/src/sgr/types.ts CHANGED
@@ -22,7 +22,7 @@ export type ChainBuilder = <Keys extends ChainKey>(
22
22
  baseFormat : FormatBase,
23
23
  ) => Chain<Keys>;
24
24
 
25
- export type Code = number | number[];
25
+ export type Code = number | "" | ReadonlyArray<number | "">;
26
26
 
27
27
  export interface FormatBase {
28
28
  (text: string): string;
@@ -88,5 +88,6 @@ export interface SGR {
88
88
  fg : Channel<Exclude<ChainKey, "fg">>;
89
89
  bg : Channel<Exclude<ChainKey, "bg">>;
90
90
  style : Style;
91
+ plain : Format<ChainKey>;
91
92
  reset : string;
92
93
  }
@@ -1,8 +1,9 @@
1
1
  import {buildExtendedColorAtom, buildIntensityAtom} from "./atom";
2
2
 
3
- import type {Atom, Attribute, AttributeMap, BuildAtom} from "./types";
3
+ import type {Atom, Attribute, AttributeMap, BuildAtom, CodeArray} from "./types";
4
4
 
5
- const codeMap: Record<number, [attribute: Attribute, buildAtom?: BuildAtom]> = {
5
+ const codeMap: Record<number | "", [attribute: Attribute, buildAtom?: BuildAtom]> = {
6
+ "" : ["reset"],
6
7
  0 : ["reset"],
7
8
  1 : ["intensity", buildIntensityAtom],
8
9
  2 : ["intensity", buildIntensityAtom],
@@ -61,7 +62,7 @@ const codeMap: Record<number, [attribute: Attribute, buildAtom?: BuildAtom]> = {
61
62
  107 : ["bg"],
62
63
  };
63
64
 
64
- export function lookUpAtom(codes: number[], index: number, state: AttributeMap): Atom {
65
+ export function lookUpAtom(codes: CodeArray, index: number, state: AttributeMap): Atom {
65
66
  const code = codes[index];
66
67
  const entry = codeMap[code];
67
68
 
@@ -9,12 +9,12 @@ export function simplify(text: string): string {
9
9
  let result = parts[0];
10
10
 
11
11
  for (let i = 1; i < parts.length; ) {
12
- let codes = parts[i++].split(";").map(Number);
13
- let chunk = parts[i++];
12
+ const codes = parts[i++].split(";").map(s => s ? Number(s) : "");
13
+ let chunk = parts[i++];
14
14
 
15
15
  while (!chunk && i < parts.length) {
16
16
  // Merge consecutive SGR sequences with no text between them.
17
- codes.push(...parts[i++].split(";").map(Number));
17
+ codes.push(...parts[i++].split(";").map(s => s ? Number(s) : ""));
18
18
  chunk = parts[i++];
19
19
  }
20
20
 
@@ -1,9 +1,9 @@
1
1
  import {lookUpAtom} from "./lookup";
2
2
  import {arraysEqual, transitionIntensity} from "./utils";
3
3
 
4
- import type {Attribute, AttributeMap} from "./types";
4
+ import type {Attribute, AttributeMap, CodeArray} from "./types";
5
5
 
6
- const defaultCodes: Map<Attribute, number[]> = new Map([
6
+ const defaultCodes: Map<Attribute, CodeArray> = new Map([
7
7
  ["intensity", [22]],
8
8
  ["italic", [23]],
9
9
  ["underline", [24]],
@@ -16,7 +16,7 @@ const defaultCodes: Map<Attribute, number[]> = new Map([
16
16
  ["overline", [55]],
17
17
  ]);
18
18
 
19
- export class State extends Map<Attribute, number[]> implements AttributeMap {
19
+ export class State extends Map<Attribute, CodeArray> implements AttributeMap {
20
20
  #isDefaultState(except?: Attribute): boolean {
21
21
  for (const [attribute, defaultCode] of defaultCodes) {
22
22
  if (attribute === except)
@@ -29,7 +29,7 @@ export class State extends Map<Attribute, number[]> implements AttributeMap {
29
29
  return true;
30
30
  }
31
31
 
32
- update(codes: number[]): Array<number | string> {
32
+ update(codes: CodeArray): CodeArray {
33
33
  let snapshot: AttributeMap = new Map(this);
34
34
 
35
35
  const attributes = new Set<Attribute>();
@@ -58,7 +58,7 @@ export class State extends Map<Attribute, number[]> implements AttributeMap {
58
58
  i += skip;
59
59
  }
60
60
 
61
- const rtn: Array<number | string> = [];
61
+ const rtn: Array<number | ""> = [];
62
62
 
63
63
  for (const attribute of attributes) {
64
64
  if (attribute === "reset") {
@@ -1,3 +1,5 @@
1
+ export type CodeArray = ReadonlyArray<number | "">;
2
+
1
3
  export type Attribute =
2
4
  | "intensity"
3
5
  | "italic"
@@ -10,19 +12,20 @@ export type Attribute =
10
12
  | "frame"
11
13
  | "overline"
12
14
  | "reset"
13
- | number;
15
+ | number
16
+ | "";
14
17
 
15
- export type AttributeMap = Map<Attribute, number[]>;
18
+ export type AttributeMap = Map<Attribute, CodeArray>;
16
19
 
17
20
  export interface Atom {
18
21
  attribute : Attribute;
19
- code : number[];
22
+ code : CodeArray;
20
23
  skip? : number;
21
24
  }
22
25
 
23
26
  export type BuildAtom = (
24
27
  attribute : Attribute,
25
- codes : number[],
28
+ codes : CodeArray,
26
29
  index : number,
27
30
  state : AttributeMap,
28
31
  ) => Atom;
@@ -1,4 +1,6 @@
1
- export function arraysEqual<T>(a: T[] | undefined, b: T[] | undefined): boolean {
1
+ import type {CodeArray} from "./types";
2
+
3
+ export function arraysEqual<T>(a: readonly T[] | undefined, b: readonly T[] | undefined): boolean {
2
4
  if (a === b)
3
5
  return true;
4
6
 
@@ -13,7 +15,10 @@ export function arraysEqual<T>(a: T[] | undefined, b: T[] | undefined): boolean
13
15
  return true;
14
16
  }
15
17
 
16
- export function transitionIntensity(previous: number[] | undefined, current: number[]): number[] {
18
+ export function transitionIntensity(
19
+ previous : CodeArray | undefined,
20
+ current : CodeArray,
21
+ ): CodeArray {
17
22
  if (!previous || previous[0] === 22 || current[0] === 22)
18
23
  return current;
19
24
 
@@ -15,4 +15,8 @@ type EntriesOf<T, K extends [...(keyof T)[]] = (keyof T)[]> = {
15
15
  [P in keyof K]: K[P] extends keyof T ? EntryOf<T, K[P]> : never;
16
16
  };
17
17
 
18
- type SkipFirst<T> = T extends [infer First, ...infer Rest] ? Rest : [];
18
+ type SkipFirst<T> = T extends [infer First, ...infer Rest] ? Rest : [];
19
+
20
+ interface ArrayConstructor {
21
+ isArray(value: unknown): value is readonly unknown[];
22
+ }