8000 Export condense() and condenseIgnoreCase() · wimpyprogrammer/strings-to-regex@5a676e1 · GitHub
[go: up one dir, main page]

Skip to content

Commit 5a676e1

Browse files
Export condense() and condenseIgnoreCase()
Combine the logic for converting a word list into a trie and a trie into a pattern.
1 parent 5add47c commit 5a676e1

File tree

5 files changed

+155
-5
lines changed

5 files changed

+155
-5
lines changed

.eslintrc.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@
1212
"ecmaVersion": 2018
1313
},
1414
"rules": {
15+
"import/no-extraneous-dependencies": [
16+
"error",
17+
{
18+
"devDependencies": ["**/*.spec.{js,ts}"]
19+
}
20+
],
1521
"import/prefer-default-export": "off"
1622
},
1723
"settings": {

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"!**/src/**/?*.d.ts",
3232
"!**/src/demo.ts"
3333
],
34+
"restoreMocks": true,
3435
"transform": {
3536
"^.+\\.ts$": "ts-jest"
3637
},
@@ -49,6 +50,7 @@
4950
"@babel/preset-env": "^7.5.5",
5051
"@babel/preset-typescript": "^7.5.5",
5152
"@types/jest": "^24.0.18",
53+
"@types/jest-when": "^2.7.0",
5254
"@typescript-eslint/eslint-plugin": "^2.2.0",
5355
"@typescript-eslint/parser": "^2.2.0",
5456
"eslint": "6.1.0",
@@ -59,6 +61,7 @@
5961
"eslint-plugin-jest": "^22.17.0",
6062
"husky": "^0.14.3",
6163
"jest": "^24.9.0",
64+
"jest-when": "^2.7.0",
6265
"prettier": "^1.13.7",
6366
"pretty-quick": "^1.6.0",
6467
"rimraf": "^2.6.2",

src/index.spec.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { when } from 'jest-when';
2+
import { CharTrie } from './types/charTrie';
3+
import * as patternUtils from './utils/pattern';
4+
import * as trieUtils from './utils/trie';
5+
import { condense, condenseIgnoreCase } from './index';
6+
7+
describe('condense', () => {
8+
it('builds pattern from trie of words', () => {
9+
const mockTrie = CharTrie.create({ bar: {} });
10+
when(jest.spyOn(trieUtils, 'build'))
11+
.calledWith(['foo'])
12+
.mockReturnValue(mockTrie);
13+
14+
const mockPattern = 'baz';
15+
when(jest.spyOn(patternUtils, 'build'))
16+
.calledWith(mockTrie)
17+
.mockReturnValue(mockPattern);
18+
19+
const result = condense(['foo']);
20+
21+
expect(result).toHaveProperty('source', mockPattern);
22+
});
23+
24+
it('returns case-sensitive RegExp', () => {
25+
const result = condense(['a', 'B', 'c']);
26+
27+
expect(result).toHaveProperty('flags', '');
28+
});
29+
});
30+
31+
describe('condenseIgnoreCase', () => {
32+
it('builds pattern from trie of lowercased words', () => {
33+
const mockTrie = CharTrie.create({ bar: {} });
34+
when(jest.spyOn(trieUtils, 'build'))
35+
.calledWith(['f', 'o', 'o'])
36+
.mockReturnValue(mockTrie);
37+
38+
const mockPattern = 'baz';
39+
when(jest.spyOn(patternUtils, 'build'))
40+
.calledWith(mockTrie)
41+
.mockReturnValue(mockPattern);
42+
43+
const result = condenseIgnoreCase(['F', 'o', 'O']);
44+
45+
expect(result).toHaveProperty('source', mockPattern);
46+
});
47+
48+
it('returns case-insensitive RegExp', () => {
49+
const result = condenseIgnoreCase(['a', 'B', 'c']);
50+
51+
expect(result).toHaveProperty('flags', 'i');
52+
});
53+
});

src/index.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { build as buildTrie } from './utils/trie';
2+
import { build as buildPattern } from './utils/pattern';
3+
4+
export function condense(wordList: string[]): RegExp {
5+
const wordTrie = buildTrie(wordList);
6+
const pattern = buildPattern(wordTrie);
7+
return new RegExp(pattern);
8+
}
9+
10+
export function condenseIgnoreCase(wordList: string[]): RegExp {
11+
const wordListLowercase = wordList.map(word => word.toLowerCase());
12+
const caseSensitiveRegex = condense(wordListLowercase);
13+
return new RegExp(caseSensitiveRegex, 'i');
14+
}

yarn.lock

Lines changed: 79 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -910,7 +910,14 @@
910910
resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89"
911911
integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==
912912

913-
"@types/jest@^24.0.18":
913+
"@types/jest-when@^2.7.0":
914+
version "2.7.0"
915+
resolved "https://registry.yarnpkg.com/@types/jest-when/-/jest-when-2.7.0.tgz#538d5a3d069aedb496ce42aed76404fc8673bf27"
916+
integrity sha512-oahwfICJSaEmmtyN7JeOg6P7ey+GKigzk26zdKLxYLewmr2F3WeDPo/U+kVpIxPuZG3EiVFdRy97q9N9DoEkSg==
917+
dependencies:
918+
"@types/jest" "*"
919+
920+
"@types/jest@*", "@types/jest@^24.0.18":
914921
version "24.0.18"
915922
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.18.tgz#9c7858d450c59e2164a8a9df0905fc5091944498"
916923
integrity sha512-jcDDXdjTcrQzdN06+TSVsPPqxvsZA/5QkYfIZlq1JMw7FdP5AZylbOc+6B/cuDurctRe+MziUMtQ3xQdrbjqyQ==
@@ -1700,6 +1707,16 @@ builtin-status-codes@^3.0.0:
17001707
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
17011708
integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
17021709

1710+
bunyan@^1.8.12:
1711+
version "1.8.12"
1712+
resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.12.tgz#f150f0f6748abdd72aeae84f04403be2ef113797"
1713+
integrity sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=
1714+
optionalDependencies:
1715+
dtrace-provider "~0.8"
1716+
moment "^2.10.6"
1717+
mv "~2"
1718+
safe-json-stringify "~1"
1719+
17031720
cacache@^12.0.2:
17041721
version "12.0.3"
17051722
resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390"
@@ -2364,6 +2381,13 @@ dot-prop@^4.1.0:
23642381
dependencies:
23652382
is-obj "^1.0.0"
23662383

2384+
dtrace-provider@~0.8:
2385+
version "0.8.8"
2386+
resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.8.tgz#2996d5490c37e1347be263b423ed7b297fb0d97e"
2387+
integrity sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==
2388+
dependencies:
2389+
nan "^2.14.0"
2390+
23672391
duplexer3@^0.1.4:
23682392
version "0.1.4"
23692393
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
@@ -2767,7 +2791,7 @@ expand-brackets@^2.1.4:
27672791
snapdragon "^0.8.1"
27682792
to-regex "^3.0.1"
27692793

2770-
expect@^24.9.0:
2794+
expect@^24.8.0, expect@^24.9.0:
27712795
version "24.9.0"
27722796
resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca"
27732797
integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==
@@ -3077,6 +3101,17 @@ glob-parent@^5.0.0:
30773101
dependencies:
30783102
is-glob "^4.0.1"
30793103

3104+
glob@^6.0.1:
3105+
version "6.0.4"
3106+
resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
3107+
integrity sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=
3108+
dependencies:
3109+
inflight "^1.0.4"
3110+
inherits "2"
3111+
minimatch "2 || 3"
3112+
once "^1.3.0"
3113+
path-is-absolute "^1.0.0"
3114+
30803115
glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
30813116
version "7.1.4"
30823117
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
@@ -4058,6 +4093,14 @@ jest-watcher@^24.9.0:
40584093
jest-util "^24.9.0"
40594094
string-length "^2.0.0"
40604095

4096+
jest-when@^2.7.0:
4097+
version "2.7.0"
4098+
resolved "https://registry.yarnpkg.com/jest-when/-/jest-when-2.7.0.tgz#9549185ae8847b47d5d40262f1c59a5143e89a0c"
4099+
integrity sha512-psU0pXdomBORY9TGuSut/k8vViVki9l92WggL0m5/Lk8zTrDYtcCpPIFdZQDKqXvmW5Jzoh7SCsLKITvBJ0jyQ==
4100+
dependencies:
4101+
bunyan "^1.8.12"
4102+
expect "^24.8.0"
4103+
40614104
jest-worker@^24.6.0, jest-worker@^24.9.0:
40624105
version "24.9.0"
40634106
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5"
@@ -4527,7 +4570,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
45274570
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
45284571
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
45294572

4530-
minimatch@^3.0.4:
4573+
"minimatch@2 || 3", minimatch@^3.0.4:
45314574
version "3.0.4"
45324575
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
45334576
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
@@ -4596,13 +4639,18 @@ mixin-deep@^1.2.0:
45964639
for-in "^1.0.2"
45974640
is-extendable "^1.0.1"
45984641

4599-
mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1:
4642+
mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
46004643
version "0.5.1"
46014644
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
46024645
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
46034646
dependencies:
46044647
minimist "0.0.8"
46054648

4649+
moment@^2.10.6:
4650+
version "2.24.0"
4651+
resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
4652+
integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
4653+
46064654
move-concurrently@^1.0.1:
46074655
version "1.0.1"
46084656
resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
@@ -4645,7 +4693,16 @@ mute-stream@0.0.7:
46454693
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
46464694
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
46474695

4648-
nan@^2.12.1:
4696+
mv@~2:
4697+
version "2.1.1"
4698+
resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2"
4699+
integrity sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=
4700+
dependencies:
4701+
mkdirp "~0.5.1"
4702+
ncp "~2.0.0"
4703+
rimraf "~2.4.0"
4704+
4705+
nan@^2.12.1, nan@^2.14.0:
46494706
version "2.14.0"
46504707
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
46514708
integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
@@ -4672,6 +4729,11 @@ natural-compare@^1.4.0:
46724729
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
46734730
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
46744731

4732+
ncp@~2.0.0:
4733+
version "2.0.0"
4734+
resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3"
4735+
integrity sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=
4736+
46754737
needle@^2.2.1:
46764738
version "2.4.0"
46774739
resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c"
@@ -5731,6 +5793,13 @@ rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3:
57315793
dependencies:
57325794
glob "^7.1.3"
57335795

5796+
rimraf@~2.4.0:
5797+
version "2.4.5"
5798+
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da"
5799+
integrity sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=
5800+
dependencies:
5801+
glob "^6.0.1"
5802+
57345803
ripemd160@^2.0.0, ripemd160@^2.0.1:
57355804
version "2.0.2"
57365805
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
@@ -5775,6 +5844,11 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
57755844
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
57765845
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
57775846

5847+
safe-json-stringify@~1:
5848+
version "1.2.0"
5849+
resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd"
5850+
integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==
5851+
57785852
safe-regex@^1.1.0:
57795853
version "1.1.0"
57805854
resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"

0 commit comments

Comments
 (0)
0