jest-watch-typeahead 0.2.0 → 0.2.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.
@@ -50,7 +50,7 @@ class FileNamePatternPrompt extends _jestWatcher.PatternPrompt {
50
50
 
51
51
  const prefix = ` ${_chalk2.default.dim('\u203A')} `;
52
52
  const padding = (0, _stringLength2.default)(prefix) + 2;
53
- const width = (0, _utils.getTerminalWidth)(pipe);
53
+ const width = (0, _utils.getTerminalWidth)();
54
54
 
55
55
  var _scroll = (0, _scroll3.default)(total, options);
56
56
 
@@ -1,15 +1,12 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
- var _jestWatcher = require('jest-watcher');
3
+ var _jestWatcher = require("jest-watcher");
4
4
 
5
- var _prompt = require('./prompt');
6
-
7
- var _prompt2 = _interopRequireDefault(_prompt);
5
+ var _prompt = _interopRequireDefault(require("./prompt"));
8
6
 
9
7
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
8
 
11
9
  class FileNamePlugin {
12
-
13
10
  constructor({
14
11
  stdin,
15
12
  stdout,
@@ -26,7 +23,9 @@ class FileNamePlugin {
26
23
  }
27
24
 
28
25
  apply(jestHooks) {
29
- jestHooks.onFileChange(({ projects }) => {
26
+ jestHooks.onFileChange(({
27
+ projects
28
+ }) => {
30
29
  this._projects = projects;
31
30
  });
32
31
  }
@@ -36,11 +35,14 @@ class FileNamePlugin {
36
35
  }
37
36
 
38
37
  run(globalConfig, updateConfigAndRun) {
39
- const p = new _prompt2.default(this._stdout, this._prompt);
38
+ const p = new _prompt.default(this._stdout, this._prompt);
40
39
  p.updateSearchSources(this._projects);
41
40
  return new Promise((res, rej) => {
42
41
  p.run(value => {
43
- updateConfigAndRun({ mode: 'watch', testPathPattern: value });
42
+ updateConfigAndRun({
43
+ mode: 'watch',
44
+ testPathPattern: value
45
+ });
44
46
  res();
45
47
  }, rej);
46
48
  });
@@ -49,6 +51,7 @@ class FileNamePlugin {
49
51
  getUsageInfo() {
50
52
  return this._usageInfo;
51
53
  }
54
+
52
55
  }
53
56
 
54
57
  module.exports = FileNamePlugin;
@@ -1,31 +1,27 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.default = void 0;
6
7
 
7
- var _chalk = require('chalk');
8
+ var _chalk = _interopRequireDefault(require("chalk"));
8
9
 
9
- var _chalk2 = _interopRequireDefault(_chalk);
10
+ var _ansiEscapes = _interopRequireDefault(require("ansi-escapes"));
10
11
 
11
- var _stringLength = require('string-length');
12
+ var _stringLength = _interopRequireDefault(require("string-length"));
12
13
 
13
- var _stringLength2 = _interopRequireDefault(_stringLength);
14
+ var _jestWatcher = require("jest-watcher");
14
15
 
15
- var _jestWatcher = require('jest-watcher');
16
+ var _utils = require("../lib/utils");
16
17
 
17
- var _utils = require('../lib/utils');
18
+ var _pattern_mode_helpers = require("../lib/pattern_mode_helpers");
18
19
 
19
- var _pattern_mode_helpers = require('../lib/pattern_mode_helpers');
20
-
21
- var _scroll2 = require('../lib/scroll');
22
-
23
- var _scroll3 = _interopRequireDefault(_scroll2);
20
+ var _scroll2 = _interopRequireDefault(require("../lib/scroll"));
24
21
 
25
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
23
 
27
24
  class FileNamePatternPrompt extends _jestWatcher.PatternPrompt {
28
-
29
25
  constructor(pipe, prompt) {
30
26
  super(pipe, prompt);
31
27
  this._entityName = 'filenames';
@@ -34,34 +30,35 @@ class FileNamePatternPrompt extends _jestWatcher.PatternPrompt {
34
30
 
35
31
  _onChange(pattern, options) {
36
32
  super._onChange(pattern, options);
33
+
37
34
  this._printTypeahead(pattern, options);
38
35
  }
39
36
 
40
37
  _printTypeahead(pattern, options) {
41
38
  const matchedTests = this._getMatchedTests(pattern);
39
+
42
40
  const total = matchedTests.length;
43
41
  const pipe = this._pipe;
44
42
  const prompt = this._prompt;
45
-
46
43
  (0, _jestWatcher.printPatternCaret)(pattern, pipe);
44
+ pipe.write(_ansiEscapes.default.cursorLeft);
47
45
 
48
46
  if (pattern) {
49
47
  (0, _pattern_mode_helpers.printPatternMatches)(total, 'file', pipe);
50
-
51
- const prefix = ` ${_chalk2.default.dim('\u203A')} `;
52
- const padding = (0, _stringLength2.default)(prefix) + 2;
48
+ const prefix = ` ${_chalk.default.dim('\u203A')} `;
49
+ const padding = (0, _stringLength.default)(prefix) + 2;
53
50
  const width = (0, _utils.getTerminalWidth)(pipe);
54
51
 
55
- var _scroll = (0, _scroll3.default)(total, options);
56
-
57
- const start = _scroll.start,
52
+ const _scroll = (0, _scroll2.default)(total, options),
53
+ start = _scroll.start,
58
54
  end = _scroll.end,
59
55
  index = _scroll.index;
60
56
 
61
-
62
57
  prompt.setPromptLength(total);
63
-
64
- matchedTests.slice(start, end).map(({ path, context }) => {
58
+ matchedTests.slice(start, end).map(({
59
+ path,
60
+ context
61
+ }) => {
65
62
  const filePath = (0, _utils.trimAndFormatPath)(padding, context.config, path, width);
66
63
  return (0, _utils.highlight)(path, filePath, pattern, context.config.rootDir);
67
64
  }).map((item, i) => (0, _pattern_mode_helpers.formatTypeaheadSelection)(item, i, index, prompt)).forEach(item => (0, _pattern_mode_helpers.printTypeaheadItem)(item, pipe));
@@ -85,10 +82,15 @@ class FileNamePatternPrompt extends _jestWatcher.PatternPrompt {
85
82
  return [];
86
83
  }
87
84
 
88
- return this._searchSources.reduce((tests, { testPaths, config }) => {
85
+ return this._searchSources.reduce((tests, {
86
+ testPaths,
87
+ config
88
+ }) => {
89
89
  return tests.concat(testPaths.filter(testPath => regex.test(testPath)).map(path => ({
90
90
  path,
91
- context: { config }
91
+ context: {
92
+ config
93
+ }
92
94
  })));
93
95
  }, []);
94
96
  }
@@ -96,5 +98,7 @@ class FileNamePatternPrompt extends _jestWatcher.PatternPrompt {
96
98
  updateSearchSources(searchSources) {
97
99
  this._searchSources = searchSources;
98
100
  }
101
+
99
102
  }
103
+
100
104
  exports.default = FileNamePatternPrompt;
@@ -12,17 +12,12 @@ class FileNamePlugin {
12
12
 
13
13
  constructor({
14
14
  stdin,
15
- stdout,
16
- config = {}
15
+ stdout
17
16
  }) {
18
17
  this._stdin = stdin;
19
18
  this._stdout = stdout;
20
19
  this._prompt = new _jestWatcher.Prompt();
21
20
  this._projects = [];
22
- this._usageInfo = {
23
- key: config.key || 'p',
24
- prompt: config.prompt || 'filter by a filename regex pattern'
25
- };
26
21
  }
27
22
 
28
23
  apply(jestHooks) {
@@ -46,8 +41,12 @@ class FileNamePlugin {
46
41
  });
47
42
  }
48
43
 
44
+ // eslint-disable-next-line class-methods-use-this
49
45
  getUsageInfo() {
50
- return this._usageInfo;
46
+ return {
47
+ key: 'p',
48
+ prompt: 'filter by a filename regex pattern'
49
+ };
51
50
  }
52
51
  }
53
52
 
@@ -1,45 +1,51 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.formatTypeaheadSelection = exports.printTypeaheadItem = exports.printMore = exports.printStartTyping = exports.printPatternMatches = undefined;
6
+ exports.formatTypeaheadSelection = exports.printTypeaheadItem = exports.printMore = exports.printStartTyping = exports.printPatternMatches = void 0;
7
7
 
8
- var _chalk = require('chalk');
8
+ var _chalk = _interopRequireDefault(require("chalk"));
9
9
 
10
- var _chalk2 = _interopRequireDefault(_chalk);
10
+ var _stripAnsi = _interopRequireDefault(require("strip-ansi"));
11
11
 
12
- var _stripAnsi = require('strip-ansi');
13
-
14
- var _stripAnsi2 = _interopRequireDefault(_stripAnsi);
15
-
16
- var _jestWatcher = require('jest-watcher');
12
+ var _jestWatcher = require("jest-watcher");
17
13
 
18
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
15
 
20
16
  const pluralize = (count, text) => count === 1 ? text : `${text}s`;
21
17
 
22
- const printPatternMatches = exports.printPatternMatches = (count, entity, pipe, extraText = '') => {
18
+ const printPatternMatches = (count, entity, pipe, extraText = '') => {
23
19
  const pluralized = pluralize(count, entity);
24
20
  const result = count ? `\n\n Pattern matches ${count} ${pluralized}` : `\n\n Pattern matches no ${pluralized}`;
25
-
26
21
  pipe.write(result + extraText);
27
22
  };
28
23
 
29
- const printStartTyping = exports.printStartTyping = (entity, pipe) => {
30
- pipe.write(`\n\n ${_chalk2.default.italic.yellow(`Start typing to filter by a ${entity} regex pattern.`)}`);
24
+ exports.printPatternMatches = printPatternMatches;
25
+
26
+ const printStartTyping = (entity, pipe) => {
27
+ pipe.write(`\n\n ${_chalk.default.italic.yellow(`Start typing to filter by a ${entity} regex pattern.`)}`);
31
28
  };
32
29
 
33
- const printMore = exports.printMore = (entity, pipe, more) => {
34
- pipe.write(`\n ${_chalk2.default.dim(`...and ${more} more ${pluralize(more, entity)}`)}`);
30
+ exports.printStartTyping = printStartTyping;
31
+
32
+ const printMore = (entity, pipe, more) => {
33
+ pipe.write(`\n ${_chalk.default.dim(`...and ${more} more ${pluralize(more, entity)}`)}`);
35
34
  };
36
35
 
37
- const printTypeaheadItem = exports.printTypeaheadItem = (item, pipe) => pipe.write(`\n ${_chalk2.default.dim('\u203A')} ${item}`);
36
+ exports.printMore = printMore;
38
37
 
39
- const formatTypeaheadSelection = exports.formatTypeaheadSelection = (item, index, activeIndex, prompt) => {
38
+ const printTypeaheadItem = (item, pipe) => pipe.write(`\n ${_chalk.default.dim('\u203A')} ${item}`);
39
+
40
+ exports.printTypeaheadItem = printTypeaheadItem;
41
+
42
+ const formatTypeaheadSelection = (item, index, activeIndex, prompt) => {
40
43
  if (index === activeIndex) {
41
- prompt.setPromptSelection((0, _stripAnsi2.default)(item));
42
- return _chalk2.default.black.bgYellow((0, _stripAnsi2.default)(item));
44
+ prompt.setPromptSelection((0, _stripAnsi.default)(item));
45
+ return _chalk.default.black.bgYellow((0, _stripAnsi.default)(item));
43
46
  }
47
+
44
48
  return item;
45
- };
49
+ };
50
+
51
+ exports.formatTypeaheadSelection = formatTypeaheadSelection;
@@ -3,12 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.default = void 0;
6
7
 
7
-
8
- const scroll = (size, { offset, max }) => {
8
+ const scroll = (size, {
9
+ offset,
10
+ max
11
+ }) => {
9
12
  let start = 0;
10
13
  let index = Math.min(offset, size);
11
-
12
14
  const halfScreen = max / 2;
13
15
 
14
16
  if (index <= halfScreen) {
@@ -17,6 +19,7 @@ const scroll = (size, { offset, max }) => {
17
19
  if (size >= max) {
18
20
  start = Math.min(index - halfScreen - 1, size - max);
19
21
  }
22
+
20
23
  index = Math.min(index - start, size);
21
24
  }
22
25
 
@@ -27,4 +30,5 @@ const scroll = (size, { offset, max }) => {
27
30
  };
28
31
  };
29
32
 
30
- exports.default = scroll;
33
+ var _default = scroll;
34
+ exports.default = _default;
@@ -1,86 +1,86 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.formatTestNameByPattern = exports.highlight = exports.getTerminalWidth = exports.trimAndFormatPath = undefined;
6
+ exports.formatTestNameByPattern = exports.highlight = exports.getTerminalWidth = exports.trimAndFormatPath = void 0;
7
7
 
8
- var _path = require('path');
8
+ var _path = _interopRequireDefault(require("path"));
9
9
 
10
- var _path2 = _interopRequireDefault(_path);
10
+ var _chalk = _interopRequireDefault(require("chalk"));
11
11
 
12
- var _chalk = require('chalk');
12
+ var _slash = _interopRequireDefault(require("slash"));
13
13
 
14
- var _chalk2 = _interopRequireDefault(_chalk);
15
-
16
- var _slash = require('slash');
17
-
18
- var _slash2 = _interopRequireDefault(_slash);
19
-
20
- var _stripAnsi = require('strip-ansi');
21
-
22
- var _stripAnsi2 = _interopRequireDefault(_stripAnsi);
14
+ var _stripAnsi = _interopRequireDefault(require("strip-ansi"));
23
15
 
24
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
17
 
26
18
  /* eslint-disable no-param-reassign */
27
19
  const relativePath = (config, testPath) => {
28
- testPath = _path2.default.relative(config.cwd || config.rootDir, testPath);
29
- const dirname = _path2.default.dirname(testPath);
30
- const basename = _path2.default.basename(testPath);
31
- return { basename, dirname };
20
+ testPath = _path.default.relative(config.cwd || config.rootDir, testPath);
21
+
22
+ const dirname = _path.default.dirname(testPath);
23
+
24
+ const basename = _path.default.basename(testPath);
25
+
26
+ return {
27
+ basename,
28
+ dirname
29
+ };
32
30
  };
33
31
 
34
- const colorize = (str, start, end) => _chalk2.default.dim(str.slice(0, start)) + _chalk2.default.reset(str.slice(start, end)) + _chalk2.default.dim(str.slice(end));
32
+ const colorize = (str, start, end) => _chalk.default.dim(str.slice(0, start)) + _chalk.default.reset(str.slice(start, end)) + _chalk.default.dim(str.slice(end));
35
33
 
36
- const trimAndFormatPath = exports.trimAndFormatPath = (pad, config, testPath, columns) => {
34
+ const trimAndFormatPath = (pad, config, testPath, columns) => {
37
35
  const maxLength = columns - pad;
38
36
  const relative = relativePath(config, testPath);
39
37
  const basename = relative.basename;
40
- let dirname = relative.dirname;
38
+ let dirname = relative.dirname; // length is ok
41
39
 
42
- // length is ok
40
+ if ((dirname + _path.default.sep + basename).length <= maxLength) {
41
+ return (0, _slash.default)(_chalk.default.dim(dirname + _path.default.sep) + _chalk.default.bold(basename));
42
+ } // we can fit trimmed dirname and full basename
43
43
 
44
- if ((dirname + _path2.default.sep + basename).length <= maxLength) {
45
- return (0, _slash2.default)(_chalk2.default.dim(dirname + _path2.default.sep) + _chalk2.default.bold(basename));
46
- }
47
44
 
48
- // we can fit trimmed dirname and full basename
49
45
  const basenameLength = basename.length;
46
+
50
47
  if (basenameLength + 4 < maxLength) {
51
48
  const dirnameLength = maxLength - 4 - basenameLength;
52
49
  dirname = `...${dirname.slice(dirname.length - dirnameLength, dirname.length)}`;
53
- return (0, _slash2.default)(_chalk2.default.dim(dirname + _path2.default.sep) + _chalk2.default.bold(basename));
50
+ return (0, _slash.default)(_chalk.default.dim(dirname + _path.default.sep) + _chalk.default.bold(basename));
54
51
  }
55
52
 
56
53
  if (basenameLength + 4 === maxLength) {
57
- return (0, _slash2.default)(_chalk2.default.dim(`...${_path2.default.sep}`) + _chalk2.default.bold(basename));
58
- }
54
+ return (0, _slash.default)(_chalk.default.dim(`...${_path.default.sep}`) + _chalk.default.bold(basename));
55
+ } // can't fit dirname, but can fit trimmed basename
59
56
 
60
- // can't fit dirname, but can fit trimmed basename
61
- return (0, _slash2.default)(_chalk2.default.bold(`...${basename.slice(basename.length - maxLength - 4, basename.length)}`));
57
+
58
+ return (0, _slash.default)(_chalk.default.bold(`...${basename.slice(basename.length - maxLength - 4, basename.length)}`));
62
59
  };
63
60
 
64
- const getTerminalWidth = exports.getTerminalWidth = (pipe = process.stdout) => pipe.columns;
61
+ exports.trimAndFormatPath = trimAndFormatPath;
62
+
63
+ const getTerminalWidth = (pipe = process.stdout) => pipe.columns;
64
+
65
+ exports.getTerminalWidth = getTerminalWidth;
65
66
 
66
- const highlight = exports.highlight = (rawPath, filePath, pattern, rootDir) => {
67
+ const highlight = (rawPath, filePath, pattern, rootDir) => {
67
68
  const trim = '...';
68
69
  const relativePathHead = './';
69
-
70
70
  let regexp;
71
71
 
72
72
  try {
73
73
  regexp = new RegExp(pattern, 'i');
74
74
  } catch (e) {
75
- return _chalk2.default.dim(filePath);
75
+ return _chalk.default.dim(filePath);
76
76
  }
77
77
 
78
- rawPath = (0, _stripAnsi2.default)(rawPath);
79
- filePath = (0, _stripAnsi2.default)(filePath);
78
+ rawPath = (0, _stripAnsi.default)(rawPath);
79
+ filePath = (0, _stripAnsi.default)(filePath);
80
80
  const match = rawPath.match(regexp);
81
81
 
82
82
  if (!match) {
83
- return _chalk2.default.dim(filePath);
83
+ return _chalk.default.dim(filePath);
84
84
  }
85
85
 
86
86
  let offset;
@@ -93,7 +93,7 @@ const highlight = exports.highlight = (rawPath, filePath, pattern, rootDir) => {
93
93
  offset = rawPath.length - filePath.length;
94
94
  trimLength = relativePathHead.length;
95
95
  } else {
96
- offset = rootDir.length + _path2.default.sep.length;
96
+ offset = rootDir.length + _path.default.sep.length;
97
97
  trimLength = 0;
98
98
  }
99
99
 
@@ -102,27 +102,27 @@ const highlight = exports.highlight = (rawPath, filePath, pattern, rootDir) => {
102
102
  return colorize(filePath, Math.max(start, 0), Math.max(end, trimLength));
103
103
  };
104
104
 
105
+ exports.highlight = highlight;
105
106
  const DOTS = '...';
106
107
  const ENTER = '⏎';
107
108
 
108
- const formatTestNameByPattern = exports.formatTestNameByPattern = (testName, pattern, width) => {
109
+ const formatTestNameByPattern = (testName, pattern, width) => {
109
110
  const inlineTestName = testName.replace(/(\r\n|\n|\r)/gm, ENTER);
110
-
111
111
  let regexp;
112
112
 
113
113
  try {
114
114
  regexp = new RegExp(pattern, 'i');
115
115
  } catch (e) {
116
- return _chalk2.default.dim(inlineTestName);
116
+ return _chalk.default.dim(inlineTestName);
117
117
  }
118
118
 
119
119
  const match = inlineTestName.match(regexp);
120
120
 
121
121
  if (!match) {
122
- return _chalk2.default.dim(inlineTestName);
123
- }
122
+ return _chalk.default.dim(inlineTestName);
123
+ } // $FlowFixMe
124
+
124
125
 
125
- // $FlowFixMe
126
126
  const startPatternIndex = Math.max(match.index, 0);
127
127
  const endPatternIndex = startPatternIndex + match[0].length;
128
128
 
@@ -136,8 +136,11 @@ const formatTestNameByPattern = exports.formatTestNameByPattern = (testName, pat
136
136
  if (endPatternIndex > slicedTestName.length) {
137
137
  return colorize(slicedTestName + DOTS, startPatternIndex, slicedTestName.length + DOTS.length);
138
138
  }
139
+
139
140
  return colorize(slicedTestName + DOTS, Math.min(startPatternIndex, slicedTestName.length), endPatternIndex);
140
141
  }
141
142
 
142
- return `${_chalk2.default.dim(slicedTestName)}${_chalk2.default.reset(DOTS)}`;
143
- };
143
+ return `${_chalk.default.dim(slicedTestName)}${_chalk.default.reset(DOTS)}`;
144
+ };
145
+
146
+ exports.formatTestNameByPattern = formatTestNameByPattern;
@@ -40,7 +40,7 @@ class TestNamePatternPrompt extends _jestWatcher.PatternPrompt {
40
40
  if (pattern) {
41
41
  (0, _pattern_mode_helpers.printPatternMatches)(total, 'test', pipe, ` from ${_chalk2.default.yellow('cached')} test suites`);
42
42
 
43
- const width = (0, _utils.getTerminalWidth)(pipe);
43
+ const width = (0, _utils.getTerminalWidth)();
44
44
 
45
45
  var _scroll = (0, _scroll3.default)(total, options);
46
46
 
@@ -1,15 +1,12 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
- var _jestWatcher = require('jest-watcher');
3
+ var _jestWatcher = require("jest-watcher");
4
4
 
5
- var _prompt = require('./prompt');
6
-
7
- var _prompt2 = _interopRequireDefault(_prompt);
5
+ var _prompt = _interopRequireDefault(require("./prompt"));
8
6
 
9
7
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
8
 
11
9
  class TestNamePlugin {
12
-
13
10
  constructor({
14
11
  stdin,
15
12
  stdout,
@@ -26,7 +23,9 @@ class TestNamePlugin {
26
23
  }
27
24
 
28
25
  apply(jestHooks) {
29
- jestHooks.onTestRunComplete(({ testResults }) => {
26
+ jestHooks.onTestRunComplete(({
27
+ testResults
28
+ }) => {
30
29
  this._testResults = testResults;
31
30
  });
32
31
  }
@@ -36,11 +35,14 @@ class TestNamePlugin {
36
35
  }
37
36
 
38
37
  run(globalConfig, updateConfigAndRun) {
39
- const p = new _prompt2.default(this._stdout, this._prompt);
38
+ const p = new _prompt.default(this._stdout, this._prompt);
40
39
  p.updateCachedTestResults(this._testResults);
41
40
  return new Promise((res, rej) => {
42
41
  p.run(value => {
43
- updateConfigAndRun({ mode: 'watch', testNamePattern: value });
42
+ updateConfigAndRun({
43
+ mode: 'watch',
44
+ testNamePattern: value
45
+ });
44
46
  res();
45
47
  }, rej);
46
48
  });
@@ -49,6 +51,7 @@ class TestNamePlugin {
49
51
  getUsageInfo() {
50
52
  return this._usageInfo;
51
53
  }
54
+
52
55
  }
53
56
 
54
57
  module.exports = TestNamePlugin;
@@ -1,23 +1,20 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
- var _chalk = require('chalk');
3
+ var _chalk = _interopRequireDefault(require("chalk"));
4
4
 
5
- var _chalk2 = _interopRequireDefault(_chalk);
5
+ var _ansiEscapes = _interopRequireDefault(require("ansi-escapes"));
6
6
 
7
- var _jestWatcher = require('jest-watcher');
7
+ var _jestWatcher = require("jest-watcher");
8
8
 
9
- var _scroll2 = require('../lib/scroll');
9
+ var _scroll2 = _interopRequireDefault(require("../lib/scroll"));
10
10
 
11
- var _scroll3 = _interopRequireDefault(_scroll2);
11
+ var _utils = require("../lib/utils");
12
12
 
13
- var _utils = require('../lib/utils');
14
-
15
- var _pattern_mode_helpers = require('../lib/pattern_mode_helpers');
13
+ var _pattern_mode_helpers = require("../lib/pattern_mode_helpers");
16
14
 
17
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
16
 
19
17
  class TestNamePatternPrompt extends _jestWatcher.PatternPrompt {
20
-
21
18
  constructor(pipe, prompt) {
22
19
  super(pipe, prompt);
23
20
  this._entityName = 'tests';
@@ -26,31 +23,29 @@ class TestNamePatternPrompt extends _jestWatcher.PatternPrompt {
26
23
 
27
24
  _onChange(pattern, options) {
28
25
  super._onChange(pattern, options);
26
+
29
27
  this._printTypeahead(pattern, options);
30
28
  }
31
29
 
32
30
  _printTypeahead(pattern, options) {
33
31
  const matchedTests = this._getMatchedTests(pattern);
32
+
34
33
  const total = matchedTests.length;
35
34
  const pipe = this._pipe;
36
35
  const prompt = this._prompt;
37
-
38
36
  (0, _jestWatcher.printPatternCaret)(pattern, pipe);
37
+ pipe.write(_ansiEscapes.default.cursorLeft);
39
38
 
40
39
  if (pattern) {
41
- (0, _pattern_mode_helpers.printPatternMatches)(total, 'test', pipe, ` from ${_chalk2.default.yellow('cached')} test suites`);
42
-
40
+ (0, _pattern_mode_helpers.printPatternMatches)(total, 'test', pipe, ` from ${_chalk.default.yellow('cached')} test suites`);
43
41
  const width = (0, _utils.getTerminalWidth)(pipe);
44
42
 
45
- var _scroll = (0, _scroll3.default)(total, options);
46
-
47
- const start = _scroll.start,
43
+ const _scroll = (0, _scroll2.default)(total, options),
44
+ start = _scroll.start,
48
45
  end = _scroll.end,
49
46
  index = _scroll.index;
50
47
 
51
-
52
48
  prompt.setPromptLength(total);
53
-
54
49
  matchedTests.slice(start, end).map(name => (0, _utils.formatTestNameByPattern)(name, pattern, width - 4)).map((item, i) => (0, _pattern_mode_helpers.formatTypeaheadSelection)(item, i, index, prompt)).forEach(item => (0, _pattern_mode_helpers.printTypeaheadItem)(item, pipe));
55
50
 
56
51
  if (total > end) {
@@ -72,14 +67,21 @@ class TestNamePatternPrompt extends _jestWatcher.PatternPrompt {
72
67
  return [];
73
68
  }
74
69
 
75
- return this._cachedTestResults.reduce((matchedTests, { testResults }) => {
76
- return matchedTests.concat(testResults.filter(({ title }) => regex.test(title)).map(({ title }) => title));
70
+ return this._cachedTestResults.reduce((matchedTests, {
71
+ testResults
72
+ }) => {
73
+ return matchedTests.concat(testResults.filter(({
74
+ title
75
+ }) => regex.test(title)).map(({
76
+ title
77
+ }) => title));
77
78
  }, []);
78
79
  }
79
80
 
80
81
  updateCachedTestResults(testResults = []) {
81
82
  this._cachedTestResults = testResults;
82
83
  }
84
+
83
85
  }
84
86
 
85
87
  module.exports = TestNamePatternPrompt;
@@ -12,17 +12,12 @@ class TestNamePlugin {
12
12
 
13
13
  constructor({
14
14
  stdin,
15
- stdout,
16
- config = {}
15
+ stdout
17
16
  }) {
18
17
  this._stdin = stdin;
19
18
  this._stdout = stdout;
20
19
  this._prompt = new _jestWatcher.Prompt();
21
20
  this._testResults = [];
22
- this._usageInfo = {
23
- key: config.key || 't',
24
- prompt: config.prompt || 'filter by a test name regex pattern'
25
- };
26
21
  }
27
22
 
28
23
  apply(jestHooks) {
@@ -46,8 +41,12 @@ class TestNamePlugin {
46
41
  });
47
42
  }
48
43
 
44
+ // eslint-disable-next-line class-methods-use-this
49
45
  getUsageInfo() {
50
- return this._usageInfo;
46
+ return {
47
+ key: 't',
48
+ prompt: 'filter by a test name regex pattern'
49
+ };
51
50
  }
52
51
  }
53
52
 
@@ -1,25 +1,24 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.default = void 0;
6
7
 
7
- var _jestWatcher = require('jest-watcher');
8
+ var _jestWatcher = require("jest-watcher");
8
9
 
9
- var _stripAnsi = require('strip-ansi');
10
-
11
- var _stripAnsi2 = _interopRequireDefault(_stripAnsi);
10
+ var _stripAnsi = _interopRequireDefault(require("strip-ansi"));
12
11
 
13
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
13
 
15
14
  expect.addSnapshotSerializer({
16
15
  test: val => typeof val === 'string',
17
- print: val => (0, _stripAnsi2.default)(val)
16
+ print: val => (0, _stripAnsi.default)(val)
18
17
  });
19
-
20
18
  jest.mock('ansi-escapes', () => ({
21
19
  clearScreen: '[MOCK - clearScreen]',
22
20
  cursorDown: (count = 1) => `[MOCK - cursorDown(${count})]`,
21
+ cursorLeft: '[MOCK - cursorLeft]',
23
22
  cursorHide: '[MOCK - cursorHide]',
24
23
  cursorRestorePosition: '[MOCK - cursorRestorePosition]',
25
24
  cursorSavePosition: '[MOCK - cursorSavePosition]',
@@ -28,9 +27,15 @@ jest.mock('ansi-escapes', () => ({
28
27
  }));
29
28
 
30
29
  const pluginTester = (Plugin, config = {}) => {
31
- const stdout = { columns: 80, write: jest.fn() };
30
+ const stdout = {
31
+ columns: 80,
32
+ write: jest.fn()
33
+ };
32
34
  const jestHooks = new _jestWatcher.JestHook();
33
- const plugin = new Plugin({ stdout, config });
35
+ const plugin = new Plugin({
36
+ stdout,
37
+ config
38
+ });
34
39
  plugin.apply(jestHooks.getSubscriber());
35
40
 
36
41
  const type = (...keys) => keys.forEach(key => plugin.onKey(key));
@@ -44,4 +49,5 @@ const pluginTester = (Plugin, config = {}) => {
44
49
  };
45
50
  };
46
51
 
47
- exports.default = pluginTester;
52
+ var _default = pluginTester;
53
+ exports.default = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jest-watch-typeahead",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "main": "build/index.js",
5
5
  "author": "Rogelio Guzman <rogelioguzmanh@gmail.com>",
6
6
  "description": "Jest plugin for filtering by filename or test name",
@@ -24,27 +24,31 @@
24
24
  "format": "prettier --single-quote --trailing-comma all --write \"!(build)/**/*.js\""
25
25
  },
26
26
  "dependencies": {
27
+ "ansi-escapes": "^3.0.0",
27
28
  "chalk": "^2.4.1",
28
29
  "jest-watcher": "^23.1.0",
29
- "slash": "^1.0.0",
30
+ "slash": "^2.0.0",
30
31
  "string-length": "^2.0.0",
31
- "strip-ansi": "^4.0.0"
32
+ "strip-ansi": "^5.0.0"
32
33
  },
33
34
  "devDependencies": {
34
- "babel-cli": "6.26.0",
35
- "babel-eslint": "^8.2.2",
36
- "babel-preset-env": "1.6.1",
37
- "babel-preset-flow": "^6.23.0",
38
- "eslint": "4.18.1",
39
- "eslint-config-airbnb-base": "12.1.0",
40
- "eslint-config-prettier": "2.9.0",
41
- "eslint-plugin-flowtype": "^2.46.1",
42
- "eslint-plugin-import": "2.9.0",
43
- "eslint-plugin-jest": "21.12.2",
44
- "eslint-plugin-prettier": "2.6.0",
45
- "flow-bin": "^0.66.0",
46
- "jest": "23.2.0",
47
- "prettier": "1.13.7"
35
+ "@babel/cli": "^7.0.0",
36
+ "@babel/core": "^7.0.0",
37
+ "@babel/preset-env": "^7.0.0",
38
+ "@babel/preset-flow": "^7.0.0",
39
+ "babel-core": "^7.0.0-bridge.0",
40
+ "babel-eslint": "^10.0.1",
41
+ "babel-jest": "^23.4.2",
42
+ "eslint": "^5.12.1",
43
+ "eslint-config-airbnb-base": "^13.1.0",
44
+ "eslint-config-prettier": "^3.6.0",
45
+ "eslint-plugin-flowtype": "^3.2.1",
46
+ "eslint-plugin-import": "^2.9.0",
47
+ "eslint-plugin-jest": "^22.1.3",
48
+ "eslint-plugin-prettier": "^3.0.1",
49
+ "flow-bin": "^0.91.0",
50
+ "jest": "^23.2.0",
51
+ "prettier": "^1.13.7"
48
52
  },
49
53
  "jest": {
50
54
  "watchPlugins": [
@@ -1,47 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
-
7
- var _jestWatcher = require('jest-watcher');
8
-
9
- var _stripAnsi = require('strip-ansi');
10
-
11
- var _stripAnsi2 = _interopRequireDefault(_stripAnsi);
12
-
13
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
-
15
- expect.addSnapshotSerializer({
16
- test: val => typeof val === 'string',
17
- print: val => (0, _stripAnsi2.default)(val)
18
- });
19
-
20
- jest.mock('ansi-escapes', () => ({
21
- clearScreen: '[MOCK - clearScreen]',
22
- cursorDown: (count = 1) => `[MOCK - cursorDown(${count})]`,
23
- cursorHide: '[MOCK - cursorHide]',
24
- cursorRestorePosition: '[MOCK - cursorRestorePosition]',
25
- cursorSavePosition: '[MOCK - cursorSavePosition]',
26
- cursorShow: '[MOCK - cursorShow]',
27
- cursorTo: (x, y) => `[MOCK - cursorTo(${x}, ${y})]`
28
- }));
29
-
30
- const pluginTester = (Plugin, config = {}) => {
31
- const stdout = { columns: 80, write: jest.fn() };
32
- const jestHooks = new _jestWatcher.JestHook();
33
- const plugin = new Plugin({ stdout, config });
34
- plugin.apply(jestHooks.getSubscriber());
35
-
36
- const type = (...keys) => keys.forEach(key => plugin.onKey(key));
37
-
38
- return {
39
- stdout,
40
- hookEmitter: jestHooks.getEmitter(),
41
- updateConfigAndRun: jest.fn(),
42
- plugin,
43
- type
44
- };
45
- };
46
-
47
- exports.default = pluginTester;