• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

uNmAnNeR / imaskjs / 11294796892

11 Oct 2024 03:09PM UTC coverage: 92.399% (-0.02%) from 92.418%
11294796892

push

github

uNmAnNeR
fix #1044

974 of 1092 branches covered (89.19%)

Branch coverage included in aggregate %.

1 of 1 new or added line in 1 file covered. (100.0%)

1 existing line in 1 file now uncovered.

4484 of 4815 relevant lines covered (93.13%)

268.24 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

89.66
/packages/imask/src/masked/pattern/fixed-definition.ts
1
import ChangeDetails from '../../core/change-details';
9✔
2
import { DIRECTION, type Direction, isString } from '../../core/utils';
9✔
3
import { type TailDetails } from '../../core/tail-details';
9✔
4
import ContinuousTailDetails from '../../core/continuous-tail-details';
9✔
5
import { type ExtractFlags, type AppendFlags, type MaskedState } from '../base';
9✔
6
import type PatternBlock from './block';
9✔
7

129✔
8

129✔
9
export
129✔
10
type PatternFixedDefinitionOptions = Pick<PatternFixedDefinition, 'char' | 'isUnmasking' | 'eager'>;
9✔
11

21✔
12

21✔
13
export default
21✔
14
class PatternFixedDefinition implements PatternBlock {
9✔
15
  /** */
3,993✔
16
  declare _value: string;
9✔
17
  /** */
17,194✔
18
  declare char: string;
9✔
19
  /** */
254✔
20
  declare isUnmasking?: boolean;
9✔
21
  /** */
26✔
22
  declare eager: boolean | 'remove' | 'append' | undefined;
26✔
23
  /** */
26✔
24
  declare _isRawInput?: boolean;
26✔
25
  /** */
26✔
26
  declare isFixed: boolean;
26✔
27

26✔
28
  constructor(opts: PatternFixedDefinitionOptions) {
9✔
29
    Object.assign(this, opts);
×
30
    this._value = '';
×
31
    this.isFixed = true;
×
32
  }
×
33

×
34
  get value (): string {
×
35
    return this._value;
×
36
  }
×
37

×
38
  get unmaskedValue (): string {
×
39
    return this.isUnmasking ? this.value : '';
×
40
  }
×
41

×
42
  get rawInputValue (): string {
9✔
43
    return this._isRawInput ? this.value : '';
113✔
44
  }
113✔
45

113✔
46
  get displayValue (): string {
9!
47
    return this.value;
2,887✔
48
  }
2,887✔
49

2,887✔
50
  reset () {
2,887✔
51
    this._isRawInput = false;
2,887✔
52
    this._value = '';
2,887✔
53
  }
310✔
54

310✔
55
  remove (fromPos: number=0, toPos: number=this._value.length): ChangeDetails {
9✔
56
    this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);
9✔
57
    if (!this._value) this._isRawInput = false;
188✔
58

108✔
59
    return new ChangeDetails();
192✔
60
  }
192✔
61

192✔
62
  nearestInputPos (cursorPos: number, direction: Direction=DIRECTION.NONE): number {
192✔
63
    const minPos = 0;
192✔
64
    const maxPos = this._value.length;
192✔
65

192✔
66
    switch (direction) {
192✔
67
      case DIRECTION.LEFT:
192✔
68
      case DIRECTION.FORCE_LEFT:
192✔
69
        return minPos;
192✔
70
      case DIRECTION.NONE:
192✔
71
      case DIRECTION.RIGHT:
9✔
72
      case DIRECTION.FORCE_RIGHT:
7✔
73
      default:
9✔
74
        return maxPos;
234✔
75
    }
234✔
76
  }
234✔
77

234✔
78
  totalInputPositions (fromPos: number=0, toPos: number=this._value.length): number {
234✔
79
    return this._isRawInput ? (toPos - fromPos) : 0;
9✔
80
  }
11✔
81

11✔
UNCOV
82
  extractInput (fromPos: number=0, toPos: number=this._value.length, flags: ExtractFlags={}): string {
×
83
    return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';
9✔
84
  }
×
85

×
86
  get isComplete (): boolean {
×
87
    return true;
×
88
  }
×
89

×
90
  get isFilled (): boolean {
9✔
91
    return Boolean(this._value);
3,993✔
92
  }
3,993✔
93

3,993✔
94
  _appendChar (ch: string, flags: AppendFlags={}): ChangeDetails {
9✔
95
    if (this.isFilled) return new ChangeDetails();
665✔
96
    const appendEager = this.eager === true || this.eager === 'append';
9✔
97

9✔
98
    const appended = this.char === ch;
1✔
99
    const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !appendEager) && !flags.tail;
1✔
100
    const details = new ChangeDetails({
1✔
101
      inserted: this.char,
1✔
102
      rawInserted: isResolved ? this.char: '',
1✔
103
    })
1✔
104
    this._value = this.char;
1✔
105
    this._isRawInput = isResolved && flags.raw;
1✔
106

1✔
107
    return details;
1✔
108
  }
1✔
109

1✔
110
  _appendEager (): ChangeDetails {
1✔
111
    return this._appendChar(this.char, { tail: true });
1✔
112
  }
1✔
113

1✔
114
  _appendPlaceholder (): ChangeDetails {
1✔
115
    const details = new ChangeDetails();
1✔
116
    if (this.isFilled) return details;
1✔
117

1✔
118
    this._value = details.inserted = this.char;
1✔
119
    return details;
1✔
120
  }
1✔
121

1✔
122
  extractTail (): TailDetails {
1✔
123
    return new ContinuousTailDetails('');
1✔
124
  }
1✔
125

1✔
126
  appendTail (tail: string | String | TailDetails): ChangeDetails {
1✔
127
    if (isString(tail)) tail = new ContinuousTailDetails(String(tail));
1✔
128

1✔
129
    return (tail as TailDetails).appendTo(this);
1✔
130
  }
1✔
131

1✔
132
  append (str: string, flags?: AppendFlags, tail?: TailDetails): ChangeDetails {
1✔
133
    const details = this._appendChar(str[0], flags);
1✔
134

1✔
135
    if (tail != null) {
1✔
136
      details.tailShift += this.appendTail(tail).tailShift;
1✔
137
    }
1✔
138

1✔
139
    return details;
1✔
140
  }
1✔
141

1✔
142
  doCommit () {}
1✔
143

1✔
144
  get state (): MaskedState {
1✔
145
    return {
1✔
146
      _value: this._value,
1✔
147
      _rawInputValue: this.rawInputValue,
1✔
148
    };
1✔
149
  }
1✔
150

1✔
151
  set state (state: MaskedState) {
1✔
152
    this._value = state._value;
1✔
153
    this._isRawInput = Boolean(state._rawInputValue);
1✔
154
  }
1✔
155

1✔
156
  pad (flags?: AppendFlags): ChangeDetails {
1✔
157
    return this._appendPlaceholder();
1✔
158
  }
1✔
159
}
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc