├── .github
└── workflows
│ └── node.js.yml
├── .gitignore
├── .npmignore
├── History.txt
├── README.md
├── index.js
├── package-lock.json
├── package.json
├── samples
└── sample.js
└── tests
└── test.js
/.github/workflows/node.js.yml:
--------------------------------------------------------------------------------
1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
3 |
4 | name: Node.js CI
5 |
6 | on:
7 | push:
8 | branches: [ master ]
9 | pull_request:
10 | branches: [ master ]
11 |
12 | jobs:
13 | build:
14 |
15 | runs-on: ubuntu-latest
16 |
17 | strategy:
18 | matrix:
19 | node-version: [10.x, 12.x, 14.x, 16.x]
20 | # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
21 |
22 | steps:
23 | - uses: actions/checkout@v2
24 | - name: Use Node.js ${{ matrix.node-version }}
25 | uses: actions/setup-node@v2
26 | with:
27 | node-version: ${{ matrix.node-version }}
28 | - run: npm ci
29 | - run: npm test
30 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *~
2 | *#*
3 | *.log
4 | .DS_Store
5 | node_modules
6 | tmp
7 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | tmp/
2 | tests/
3 | samples/
4 | node_modules/
5 | package-lock.json
6 |
--------------------------------------------------------------------------------
/History.txt:
--------------------------------------------------------------------------------
1 | === 1.0.1 2021-05-23
2 |
3 | * fix samples
4 |
5 | === 1.0.0 2021-05-23
6 |
7 | * support unicode
8 | * remove coffeescript, rewrite with ES
9 | * remove web browser support
10 |
11 | === 0.0.7 2013-02-01
12 |
13 | * support web browser #1
14 |
15 | === 0.0.6 2013-12-13
16 |
17 | * little fix
18 |
19 | === 0.0.5 2013-12-13
20 |
21 | * fix README and sample
22 |
23 | === 0.0.4 2013-12-13
24 |
25 | * bugfix match()
26 |
27 | === 0.0.3 2013-12-12
28 |
29 | * remove jspack load (bugfix)
30 |
31 | === 0.0.2 2013-12-11
32 |
33 | * update README
34 |
35 | === 0.0.1 2013-12-11
36 |
37 | * first release
38 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Node Asearch
2 | Approximate pattern matching on JavaScript
3 |
4 | - https://github.com/shokai/node-asearch
5 | - https://npmjs.org/package/asearch
6 |
7 |
8 | ## Install
9 |
10 | $ npm install asearch
11 |
12 | ## Usage
13 |
14 | ```js
15 | const Asearch = require('asearch')
16 |
17 | const match = Asearch('abcde')
18 |
19 | console.log(match('abcde')) // => true
20 | console.log(match('AbCdE')) // => true
21 | console.log(match('abcd')) // => false
22 | console.log(match('abcd', 1)) // => true
23 | console.log(match('ab de', 1)) // => true
24 | console.log(match('abe', 1)) // => false
25 | console.log(a.match('abe', 2)) // => true
26 | ```
27 |
28 | ### Typo
29 |
30 | ```js
31 | const match = Asearch('cheese burger')
32 |
33 | console.log(match('cheese burger')) // => true
34 | console.log(match('chess burger')) // => false
35 | console.log(match('chess burger', 2)) // => true
36 | console.log(match('chess', 2)) // => false
37 | ```
38 |
39 |
40 |
41 |
42 | ### 2 byte chars
43 |
44 | ```js
45 | const match = Asearch('漢字文字列')
46 |
47 | console.log(match('漢字文字列')) // => true
48 | console.log(match('漢字の文字列')) // => false
49 | console.log(match('漢字の文字列', 1)) // => true
50 | ```
51 |
52 |
53 | ## Test
54 |
55 | $ git clone https://github.com/shokai/node-asearch.git
56 | $ cd node-asearch
57 | $ npm i
58 | $ npm test
59 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | const INITPAT = 0x80000000
2 | const MAXCHAR = 0x10000
3 | const INITSTATE = [INITPAT, 0, 0, 0]
4 | const isupper = c => (c >= 0x41) && (c <= 0x5a)
5 | const islower = c => (c >= 0x61) && (c <= 0x7a)
6 | const tolower = c => isupper(c) ? (c + 0x20) : c
7 | const toupper = c => islower(c) ? (c - 0x20) : c
8 |
9 | module.exports = function Asearch (source) {
10 | const shiftpat = []
11 | let epsilon = 0
12 | let acceptpat = 0
13 | let mask = INITPAT
14 | for (let i = 0; i < MAXCHAR; i++) {
15 | shiftpat[i] = 0
16 | }
17 | for (let i of unpack(source)) {
18 | if (i === 0x20) {
19 | epsilon |= mask
20 | } else {
21 | shiftpat[i] |= mask
22 | shiftpat[toupper(i)] |= mask
23 | shiftpat[tolower(i)] |= mask
24 | mask = mask >>> 1
25 | }
26 | }
27 | acceptpat = mask
28 |
29 | function getState (state=INITSTATE, str = '') {
30 | let i0 = state[0]
31 | let i1 = state[1]
32 | let i2 = state[2]
33 | let i3 = state[3]
34 | for (let c of unpack(str)) {
35 | mask = shiftpat[c]
36 | i3 = (i3 & epsilon) | ((i3 & mask) >>> 1) | (i2 >>> 1) | i2
37 | i2 = (i2 & epsilon) | ((i2 & mask) >>> 1) | (i1 >>> 1) | i1
38 | i1 = (i1 & epsilon) | ((i1 & mask) >>> 1) | (i0 >>> 1) | i0
39 | i0 = (i0 & epsilon) | ((i0 & mask) >>> 1)
40 | i1 |= (i0 >>> 1)
41 | i2 |= (i1 >>> 1)
42 | i3 |= (i2 >>> 1)
43 | }
44 | return [i0, i1, i2, i3]
45 | }
46 |
47 | function unpack (str) {
48 | const bytes = []
49 | for (let c of str.split('')) {
50 | const code = c.charCodeAt(0)
51 | bytes.push(code)
52 | }
53 | return bytes
54 | }
55 |
56 | function match (str, ambig = 0) {
57 | const state = getState(INITSTATE, str)
58 | if (ambig >= INITSTATE.length) {
59 | ambig = INITSTATE.length-1
60 | }
61 | return (state[ambig] & acceptpat) !== 0
62 | }
63 |
64 | match.source = source
65 |
66 | return match
67 | }
68 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "asearch",
3 | "version": "1.0.1",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "version": "1.0.1",
9 | "license": "BSD-2-Clause",
10 | "devDependencies": {
11 | "mocha": "^8.4.0"
12 | }
13 | },
14 | "node_modules/@types/color-name": {
15 | "version": "1.1.1",
16 | "dev": true,
17 | "license": "MIT"
18 | },
19 | "node_modules/@ungap/promise-all-settled": {
20 | "version": "1.1.2",
21 | "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
22 | "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
23 | "dev": true
24 | },
25 | "node_modules/ansi-colors": {
26 | "version": "4.1.1",
27 | "dev": true,
28 | "license": "MIT",
29 | "engines": {
30 | "node": ">=6"
31 | }
32 | },
33 | "node_modules/ansi-styles": {
34 | "version": "4.2.1",
35 | "dev": true,
36 | "license": "MIT",
37 | "dependencies": {
38 | "@types/color-name": "^1.1.1",
39 | "color-convert": "^2.0.1"
40 | },
41 | "engines": {
42 | "node": ">=8"
43 | },
44 | "funding": {
45 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
46 | }
47 | },
48 | "node_modules/anymatch": {
49 | "version": "3.1.2",
50 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
51 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
52 | "dev": true,
53 | "dependencies": {
54 | "normalize-path": "^3.0.0",
55 | "picomatch": "^2.0.4"
56 | },
57 | "engines": {
58 | "node": ">= 8"
59 | }
60 | },
61 | "node_modules/balanced-match": {
62 | "version": "1.0.0",
63 | "dev": true,
64 | "license": "MIT"
65 | },
66 | "node_modules/binary-extensions": {
67 | "version": "2.2.0",
68 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
69 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
70 | "dev": true,
71 | "engines": {
72 | "node": ">=8"
73 | }
74 | },
75 | "node_modules/brace-expansion": {
76 | "version": "1.1.11",
77 | "dev": true,
78 | "license": "MIT",
79 | "dependencies": {
80 | "balanced-match": "^1.0.0",
81 | "concat-map": "0.0.1"
82 | }
83 | },
84 | "node_modules/browser-stdout": {
85 | "version": "1.3.1",
86 | "dev": true,
87 | "license": "ISC"
88 | },
89 | "node_modules/camelcase": {
90 | "version": "6.2.0",
91 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
92 | "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
93 | "dev": true,
94 | "engines": {
95 | "node": ">=10"
96 | },
97 | "funding": {
98 | "url": "https://github.com/sponsors/sindresorhus"
99 | }
100 | },
101 | "node_modules/chalk": {
102 | "version": "4.1.0",
103 | "dev": true,
104 | "license": "MIT",
105 | "dependencies": {
106 | "ansi-styles": "^4.1.0",
107 | "supports-color": "^7.1.0"
108 | },
109 | "engines": {
110 | "node": ">=10"
111 | },
112 | "funding": {
113 | "url": "https://github.com/chalk/chalk?sponsor=1"
114 | }
115 | },
116 | "node_modules/chokidar": {
117 | "version": "3.5.1",
118 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
119 | "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
120 | "dev": true,
121 | "dependencies": {
122 | "anymatch": "~3.1.1",
123 | "braces": "~3.0.2",
124 | "glob-parent": "~5.1.0",
125 | "is-binary-path": "~2.1.0",
126 | "is-glob": "~4.0.1",
127 | "normalize-path": "~3.0.0",
128 | "readdirp": "~3.5.0"
129 | },
130 | "engines": {
131 | "node": ">= 8.10.0"
132 | },
133 | "optionalDependencies": {
134 | "fsevents": "~2.3.1"
135 | }
136 | },
137 | "node_modules/chokidar/node_modules/braces": {
138 | "version": "3.0.2",
139 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
140 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
141 | "dev": true,
142 | "dependencies": {
143 | "fill-range": "^7.0.1"
144 | },
145 | "engines": {
146 | "node": ">=8"
147 | }
148 | },
149 | "node_modules/chokidar/node_modules/fill-range": {
150 | "version": "7.0.1",
151 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
152 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
153 | "dev": true,
154 | "dependencies": {
155 | "to-regex-range": "^5.0.1"
156 | },
157 | "engines": {
158 | "node": ">=8"
159 | }
160 | },
161 | "node_modules/chokidar/node_modules/is-glob": {
162 | "version": "4.0.1",
163 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
164 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
165 | "dev": true,
166 | "dependencies": {
167 | "is-extglob": "^2.1.1"
168 | },
169 | "engines": {
170 | "node": ">=0.10.0"
171 | }
172 | },
173 | "node_modules/chokidar/node_modules/is-number": {
174 | "version": "7.0.0",
175 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
176 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
177 | "dev": true,
178 | "engines": {
179 | "node": ">=0.12.0"
180 | }
181 | },
182 | "node_modules/chokidar/node_modules/to-regex-range": {
183 | "version": "5.0.1",
184 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
185 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
186 | "dev": true,
187 | "dependencies": {
188 | "is-number": "^7.0.0"
189 | },
190 | "engines": {
191 | "node": ">=8.0"
192 | }
193 | },
194 | "node_modules/cliui": {
195 | "version": "7.0.4",
196 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
197 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
198 | "dev": true,
199 | "dependencies": {
200 | "string-width": "^4.2.0",
201 | "strip-ansi": "^6.0.0",
202 | "wrap-ansi": "^7.0.0"
203 | }
204 | },
205 | "node_modules/cliui/node_modules/ansi-regex": {
206 | "version": "5.0.0",
207 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
208 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
209 | "dev": true,
210 | "engines": {
211 | "node": ">=8"
212 | }
213 | },
214 | "node_modules/cliui/node_modules/is-fullwidth-code-point": {
215 | "version": "3.0.0",
216 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
217 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
218 | "dev": true,
219 | "engines": {
220 | "node": ">=8"
221 | }
222 | },
223 | "node_modules/cliui/node_modules/string-width": {
224 | "version": "4.2.2",
225 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
226 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
227 | "dev": true,
228 | "dependencies": {
229 | "emoji-regex": "^8.0.0",
230 | "is-fullwidth-code-point": "^3.0.0",
231 | "strip-ansi": "^6.0.0"
232 | },
233 | "engines": {
234 | "node": ">=8"
235 | }
236 | },
237 | "node_modules/cliui/node_modules/strip-ansi": {
238 | "version": "6.0.0",
239 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
240 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
241 | "dev": true,
242 | "dependencies": {
243 | "ansi-regex": "^5.0.0"
244 | },
245 | "engines": {
246 | "node": ">=8"
247 | }
248 | },
249 | "node_modules/color-convert": {
250 | "version": "2.0.1",
251 | "dev": true,
252 | "license": "MIT",
253 | "dependencies": {
254 | "color-name": "~1.1.4"
255 | },
256 | "engines": {
257 | "node": ">=7.0.0"
258 | }
259 | },
260 | "node_modules/color-name": {
261 | "version": "1.1.4",
262 | "dev": true,
263 | "license": "MIT"
264 | },
265 | "node_modules/concat-map": {
266 | "version": "0.0.1",
267 | "dev": true,
268 | "license": "MIT"
269 | },
270 | "node_modules/decamelize": {
271 | "version": "4.0.0",
272 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
273 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
274 | "dev": true,
275 | "engines": {
276 | "node": ">=10"
277 | },
278 | "funding": {
279 | "url": "https://github.com/sponsors/sindresorhus"
280 | }
281 | },
282 | "node_modules/diff": {
283 | "version": "5.0.0",
284 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
285 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
286 | "dev": true,
287 | "engines": {
288 | "node": ">=0.3.1"
289 | }
290 | },
291 | "node_modules/emoji-regex": {
292 | "version": "8.0.0",
293 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
294 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
295 | "dev": true
296 | },
297 | "node_modules/escalade": {
298 | "version": "3.1.1",
299 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
300 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
301 | "dev": true,
302 | "engines": {
303 | "node": ">=6"
304 | }
305 | },
306 | "node_modules/find-up": {
307 | "version": "5.0.0",
308 | "dev": true,
309 | "license": "MIT",
310 | "dependencies": {
311 | "locate-path": "^6.0.0",
312 | "path-exists": "^4.0.0"
313 | },
314 | "engines": {
315 | "node": ">=10"
316 | },
317 | "funding": {
318 | "url": "https://github.com/sponsors/sindresorhus"
319 | }
320 | },
321 | "node_modules/flat": {
322 | "version": "5.0.2",
323 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
324 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
325 | "dev": true,
326 | "bin": {
327 | "flat": "cli.js"
328 | }
329 | },
330 | "node_modules/fs.realpath": {
331 | "version": "1.0.0",
332 | "dev": true,
333 | "license": "ISC"
334 | },
335 | "node_modules/fsevents": {
336 | "version": "2.3.2",
337 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
338 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
339 | "dev": true,
340 | "hasInstallScript": true,
341 | "optional": true,
342 | "os": [
343 | "darwin"
344 | ],
345 | "engines": {
346 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
347 | }
348 | },
349 | "node_modules/get-caller-file": {
350 | "version": "2.0.5",
351 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
352 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
353 | "dev": true,
354 | "engines": {
355 | "node": "6.* || 8.* || >= 10.*"
356 | }
357 | },
358 | "node_modules/glob": {
359 | "version": "7.1.6",
360 | "dev": true,
361 | "license": "ISC",
362 | "dependencies": {
363 | "fs.realpath": "^1.0.0",
364 | "inflight": "^1.0.4",
365 | "inherits": "2",
366 | "minimatch": "^3.0.4",
367 | "once": "^1.3.0",
368 | "path-is-absolute": "^1.0.0"
369 | },
370 | "engines": {
371 | "node": "*"
372 | },
373 | "funding": {
374 | "url": "https://github.com/sponsors/isaacs"
375 | }
376 | },
377 | "node_modules/glob-parent": {
378 | "version": "5.1.2",
379 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
380 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
381 | "dev": true,
382 | "dependencies": {
383 | "is-glob": "^4.0.1"
384 | },
385 | "engines": {
386 | "node": ">= 6"
387 | }
388 | },
389 | "node_modules/glob-parent/node_modules/is-glob": {
390 | "version": "4.0.1",
391 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
392 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
393 | "dev": true,
394 | "dependencies": {
395 | "is-extglob": "^2.1.1"
396 | },
397 | "engines": {
398 | "node": ">=0.10.0"
399 | }
400 | },
401 | "node_modules/growl": {
402 | "version": "1.10.5",
403 | "dev": true,
404 | "license": "MIT",
405 | "engines": {
406 | "node": ">=4.x"
407 | }
408 | },
409 | "node_modules/has-flag": {
410 | "version": "4.0.0",
411 | "dev": true,
412 | "license": "MIT",
413 | "engines": {
414 | "node": ">=8"
415 | }
416 | },
417 | "node_modules/he": {
418 | "version": "1.2.0",
419 | "dev": true,
420 | "license": "MIT",
421 | "bin": {
422 | "he": "bin/he"
423 | }
424 | },
425 | "node_modules/inflight": {
426 | "version": "1.0.6",
427 | "dev": true,
428 | "license": "ISC",
429 | "dependencies": {
430 | "once": "^1.3.0",
431 | "wrappy": "1"
432 | }
433 | },
434 | "node_modules/inherits": {
435 | "version": "2.0.4",
436 | "dev": true,
437 | "license": "ISC"
438 | },
439 | "node_modules/is-binary-path": {
440 | "version": "2.1.0",
441 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
442 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
443 | "dev": true,
444 | "dependencies": {
445 | "binary-extensions": "^2.0.0"
446 | },
447 | "engines": {
448 | "node": ">=8"
449 | }
450 | },
451 | "node_modules/is-extglob": {
452 | "version": "2.1.1",
453 | "dev": true,
454 | "license": "MIT",
455 | "engines": {
456 | "node": ">=0.10.0"
457 | }
458 | },
459 | "node_modules/is-fullwidth-code-point": {
460 | "version": "2.0.0",
461 | "dev": true,
462 | "license": "MIT",
463 | "engines": {
464 | "node": ">=4"
465 | }
466 | },
467 | "node_modules/is-plain-obj": {
468 | "version": "2.1.0",
469 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
470 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
471 | "dev": true,
472 | "engines": {
473 | "node": ">=8"
474 | }
475 | },
476 | "node_modules/isexe": {
477 | "version": "2.0.0",
478 | "dev": true,
479 | "license": "ISC"
480 | },
481 | "node_modules/locate-path": {
482 | "version": "6.0.0",
483 | "dev": true,
484 | "license": "MIT",
485 | "dependencies": {
486 | "p-locate": "^5.0.0"
487 | },
488 | "engines": {
489 | "node": ">=10"
490 | },
491 | "funding": {
492 | "url": "https://github.com/sponsors/sindresorhus"
493 | }
494 | },
495 | "node_modules/log-symbols": {
496 | "version": "4.0.0",
497 | "dev": true,
498 | "license": "MIT",
499 | "dependencies": {
500 | "chalk": "^4.0.0"
501 | },
502 | "engines": {
503 | "node": ">=10"
504 | }
505 | },
506 | "node_modules/minimatch": {
507 | "version": "3.0.4",
508 | "dev": true,
509 | "license": "ISC",
510 | "dependencies": {
511 | "brace-expansion": "^1.1.7"
512 | },
513 | "engines": {
514 | "node": "*"
515 | }
516 | },
517 | "node_modules/mocha": {
518 | "version": "8.4.0",
519 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz",
520 | "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==",
521 | "dev": true,
522 | "dependencies": {
523 | "@ungap/promise-all-settled": "1.1.2",
524 | "ansi-colors": "4.1.1",
525 | "browser-stdout": "1.3.1",
526 | "chokidar": "3.5.1",
527 | "debug": "4.3.1",
528 | "diff": "5.0.0",
529 | "escape-string-regexp": "4.0.0",
530 | "find-up": "5.0.0",
531 | "glob": "7.1.6",
532 | "growl": "1.10.5",
533 | "he": "1.2.0",
534 | "js-yaml": "4.0.0",
535 | "log-symbols": "4.0.0",
536 | "minimatch": "3.0.4",
537 | "ms": "2.1.3",
538 | "nanoid": "3.1.20",
539 | "serialize-javascript": "5.0.1",
540 | "strip-json-comments": "3.1.1",
541 | "supports-color": "8.1.1",
542 | "which": "2.0.2",
543 | "wide-align": "1.1.3",
544 | "workerpool": "6.1.0",
545 | "yargs": "16.2.0",
546 | "yargs-parser": "20.2.4",
547 | "yargs-unparser": "2.0.0"
548 | },
549 | "bin": {
550 | "_mocha": "bin/_mocha",
551 | "mocha": "bin/mocha"
552 | },
553 | "engines": {
554 | "node": ">= 10.12.0"
555 | },
556 | "funding": {
557 | "type": "opencollective",
558 | "url": "https://opencollective.com/mochajs"
559 | }
560 | },
561 | "node_modules/mocha/node_modules/argparse": {
562 | "version": "2.0.1",
563 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
564 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
565 | "dev": true
566 | },
567 | "node_modules/mocha/node_modules/debug": {
568 | "version": "4.3.1",
569 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
570 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
571 | "dev": true,
572 | "dependencies": {
573 | "ms": "2.1.2"
574 | },
575 | "engines": {
576 | "node": ">=6.0"
577 | },
578 | "peerDependenciesMeta": {
579 | "supports-color": {
580 | "optional": true
581 | }
582 | }
583 | },
584 | "node_modules/mocha/node_modules/debug/node_modules/ms": {
585 | "version": "2.1.2",
586 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
587 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
588 | "dev": true
589 | },
590 | "node_modules/mocha/node_modules/escape-string-regexp": {
591 | "version": "4.0.0",
592 | "dev": true,
593 | "license": "MIT",
594 | "engines": {
595 | "node": ">=10"
596 | },
597 | "funding": {
598 | "url": "https://github.com/sponsors/sindresorhus"
599 | }
600 | },
601 | "node_modules/mocha/node_modules/js-yaml": {
602 | "version": "4.0.0",
603 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz",
604 | "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==",
605 | "dev": true,
606 | "dependencies": {
607 | "argparse": "^2.0.1"
608 | },
609 | "bin": {
610 | "js-yaml": "bin/js-yaml.js"
611 | }
612 | },
613 | "node_modules/mocha/node_modules/ms": {
614 | "version": "2.1.3",
615 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
616 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
617 | "dev": true
618 | },
619 | "node_modules/mocha/node_modules/strip-json-comments": {
620 | "version": "3.1.1",
621 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
622 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
623 | "dev": true,
624 | "engines": {
625 | "node": ">=8"
626 | },
627 | "funding": {
628 | "url": "https://github.com/sponsors/sindresorhus"
629 | }
630 | },
631 | "node_modules/mocha/node_modules/supports-color": {
632 | "version": "8.1.1",
633 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
634 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
635 | "dev": true,
636 | "dependencies": {
637 | "has-flag": "^4.0.0"
638 | },
639 | "engines": {
640 | "node": ">=10"
641 | },
642 | "funding": {
643 | "url": "https://github.com/chalk/supports-color?sponsor=1"
644 | }
645 | },
646 | "node_modules/mocha/node_modules/which": {
647 | "version": "2.0.2",
648 | "dev": true,
649 | "license": "ISC",
650 | "dependencies": {
651 | "isexe": "^2.0.0"
652 | },
653 | "bin": {
654 | "node-which": "bin/node-which"
655 | },
656 | "engines": {
657 | "node": ">= 8"
658 | }
659 | },
660 | "node_modules/nanoid": {
661 | "version": "3.1.20",
662 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
663 | "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==",
664 | "dev": true,
665 | "bin": {
666 | "nanoid": "bin/nanoid.cjs"
667 | },
668 | "engines": {
669 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
670 | }
671 | },
672 | "node_modules/normalize-path": {
673 | "version": "3.0.0",
674 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
675 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
676 | "dev": true,
677 | "engines": {
678 | "node": ">=0.10.0"
679 | }
680 | },
681 | "node_modules/once": {
682 | "version": "1.4.0",
683 | "dev": true,
684 | "license": "ISC",
685 | "dependencies": {
686 | "wrappy": "1"
687 | }
688 | },
689 | "node_modules/p-limit": {
690 | "version": "3.0.2",
691 | "dev": true,
692 | "license": "MIT",
693 | "dependencies": {
694 | "p-try": "^2.0.0"
695 | },
696 | "engines": {
697 | "node": ">=10"
698 | },
699 | "funding": {
700 | "url": "https://github.com/sponsors/sindresorhus"
701 | }
702 | },
703 | "node_modules/p-locate": {
704 | "version": "5.0.0",
705 | "dev": true,
706 | "license": "MIT",
707 | "dependencies": {
708 | "p-limit": "^3.0.2"
709 | },
710 | "engines": {
711 | "node": ">=10"
712 | },
713 | "funding": {
714 | "url": "https://github.com/sponsors/sindresorhus"
715 | }
716 | },
717 | "node_modules/p-try": {
718 | "version": "2.2.0",
719 | "dev": true,
720 | "license": "MIT",
721 | "engines": {
722 | "node": ">=6"
723 | }
724 | },
725 | "node_modules/path-exists": {
726 | "version": "4.0.0",
727 | "dev": true,
728 | "license": "MIT",
729 | "engines": {
730 | "node": ">=8"
731 | }
732 | },
733 | "node_modules/path-is-absolute": {
734 | "version": "1.0.1",
735 | "dev": true,
736 | "license": "MIT",
737 | "engines": {
738 | "node": ">=0.10.0"
739 | }
740 | },
741 | "node_modules/picomatch": {
742 | "version": "2.3.0",
743 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
744 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
745 | "dev": true,
746 | "engines": {
747 | "node": ">=8.6"
748 | },
749 | "funding": {
750 | "url": "https://github.com/sponsors/jonschlinkert"
751 | }
752 | },
753 | "node_modules/randombytes": {
754 | "version": "2.1.0",
755 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
756 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
757 | "dev": true,
758 | "dependencies": {
759 | "safe-buffer": "^5.1.0"
760 | }
761 | },
762 | "node_modules/readdirp": {
763 | "version": "3.5.0",
764 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
765 | "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
766 | "dev": true,
767 | "dependencies": {
768 | "picomatch": "^2.2.1"
769 | },
770 | "engines": {
771 | "node": ">=8.10.0"
772 | }
773 | },
774 | "node_modules/require-directory": {
775 | "version": "2.1.1",
776 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
777 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
778 | "dev": true,
779 | "engines": {
780 | "node": ">=0.10.0"
781 | }
782 | },
783 | "node_modules/safe-buffer": {
784 | "version": "5.2.1",
785 | "dev": true,
786 | "funding": [
787 | {
788 | "type": "github",
789 | "url": "https://github.com/sponsors/feross"
790 | },
791 | {
792 | "type": "patreon",
793 | "url": "https://www.patreon.com/feross"
794 | },
795 | {
796 | "type": "consulting",
797 | "url": "https://feross.org/support"
798 | }
799 | ],
800 | "license": "MIT"
801 | },
802 | "node_modules/serialize-javascript": {
803 | "version": "5.0.1",
804 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
805 | "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
806 | "dev": true,
807 | "dependencies": {
808 | "randombytes": "^2.1.0"
809 | }
810 | },
811 | "node_modules/string-width": {
812 | "version": "2.1.1",
813 | "dev": true,
814 | "license": "MIT",
815 | "dependencies": {
816 | "is-fullwidth-code-point": "^2.0.0",
817 | "strip-ansi": "^4.0.0"
818 | },
819 | "engines": {
820 | "node": ">=4"
821 | }
822 | },
823 | "node_modules/string-width/node_modules/ansi-regex": {
824 | "version": "3.0.0",
825 | "dev": true,
826 | "license": "MIT",
827 | "engines": {
828 | "node": ">=4"
829 | }
830 | },
831 | "node_modules/string-width/node_modules/strip-ansi": {
832 | "version": "4.0.0",
833 | "dev": true,
834 | "license": "MIT",
835 | "dependencies": {
836 | "ansi-regex": "^3.0.0"
837 | },
838 | "engines": {
839 | "node": ">=4"
840 | }
841 | },
842 | "node_modules/supports-color": {
843 | "version": "7.2.0",
844 | "dev": true,
845 | "license": "MIT",
846 | "dependencies": {
847 | "has-flag": "^4.0.0"
848 | },
849 | "engines": {
850 | "node": ">=8"
851 | }
852 | },
853 | "node_modules/wide-align": {
854 | "version": "1.1.3",
855 | "dev": true,
856 | "license": "ISC",
857 | "dependencies": {
858 | "string-width": "^1.0.2 || 2"
859 | }
860 | },
861 | "node_modules/workerpool": {
862 | "version": "6.1.0",
863 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz",
864 | "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==",
865 | "dev": true
866 | },
867 | "node_modules/wrap-ansi": {
868 | "version": "7.0.0",
869 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
870 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
871 | "dev": true,
872 | "dependencies": {
873 | "ansi-styles": "^4.0.0",
874 | "string-width": "^4.1.0",
875 | "strip-ansi": "^6.0.0"
876 | },
877 | "engines": {
878 | "node": ">=10"
879 | },
880 | "funding": {
881 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
882 | }
883 | },
884 | "node_modules/wrap-ansi/node_modules/ansi-regex": {
885 | "version": "5.0.0",
886 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
887 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
888 | "dev": true,
889 | "engines": {
890 | "node": ">=8"
891 | }
892 | },
893 | "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
894 | "version": "3.0.0",
895 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
896 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
897 | "dev": true,
898 | "engines": {
899 | "node": ">=8"
900 | }
901 | },
902 | "node_modules/wrap-ansi/node_modules/string-width": {
903 | "version": "4.2.2",
904 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
905 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
906 | "dev": true,
907 | "dependencies": {
908 | "emoji-regex": "^8.0.0",
909 | "is-fullwidth-code-point": "^3.0.0",
910 | "strip-ansi": "^6.0.0"
911 | },
912 | "engines": {
913 | "node": ">=8"
914 | }
915 | },
916 | "node_modules/wrap-ansi/node_modules/strip-ansi": {
917 | "version": "6.0.0",
918 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
919 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
920 | "dev": true,
921 | "dependencies": {
922 | "ansi-regex": "^5.0.0"
923 | },
924 | "engines": {
925 | "node": ">=8"
926 | }
927 | },
928 | "node_modules/wrappy": {
929 | "version": "1.0.2",
930 | "dev": true,
931 | "license": "ISC"
932 | },
933 | "node_modules/y18n": {
934 | "version": "5.0.8",
935 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
936 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
937 | "dev": true,
938 | "engines": {
939 | "node": ">=10"
940 | }
941 | },
942 | "node_modules/yargs": {
943 | "version": "16.2.0",
944 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
945 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
946 | "dev": true,
947 | "dependencies": {
948 | "cliui": "^7.0.2",
949 | "escalade": "^3.1.1",
950 | "get-caller-file": "^2.0.5",
951 | "require-directory": "^2.1.1",
952 | "string-width": "^4.2.0",
953 | "y18n": "^5.0.5",
954 | "yargs-parser": "^20.2.2"
955 | },
956 | "engines": {
957 | "node": ">=10"
958 | }
959 | },
960 | "node_modules/yargs-parser": {
961 | "version": "20.2.4",
962 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
963 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
964 | "dev": true,
965 | "engines": {
966 | "node": ">=10"
967 | }
968 | },
969 | "node_modules/yargs-unparser": {
970 | "version": "2.0.0",
971 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
972 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
973 | "dev": true,
974 | "dependencies": {
975 | "camelcase": "^6.0.0",
976 | "decamelize": "^4.0.0",
977 | "flat": "^5.0.2",
978 | "is-plain-obj": "^2.1.0"
979 | },
980 | "engines": {
981 | "node": ">=10"
982 | }
983 | },
984 | "node_modules/yargs/node_modules/ansi-regex": {
985 | "version": "5.0.0",
986 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
987 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
988 | "dev": true,
989 | "engines": {
990 | "node": ">=8"
991 | }
992 | },
993 | "node_modules/yargs/node_modules/is-fullwidth-code-point": {
994 | "version": "3.0.0",
995 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
996 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
997 | "dev": true,
998 | "engines": {
999 | "node": ">=8"
1000 | }
1001 | },
1002 | "node_modules/yargs/node_modules/string-width": {
1003 | "version": "4.2.2",
1004 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
1005 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
1006 | "dev": true,
1007 | "dependencies": {
1008 | "emoji-regex": "^8.0.0",
1009 | "is-fullwidth-code-point": "^3.0.0",
1010 | "strip-ansi": "^6.0.0"
1011 | },
1012 | "engines": {
1013 | "node": ">=8"
1014 | }
1015 | },
1016 | "node_modules/yargs/node_modules/strip-ansi": {
1017 | "version": "6.0.0",
1018 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
1019 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
1020 | "dev": true,
1021 | "dependencies": {
1022 | "ansi-regex": "^5.0.0"
1023 | },
1024 | "engines": {
1025 | "node": ">=8"
1026 | }
1027 | }
1028 | },
1029 | "dependencies": {
1030 | "@types/color-name": {
1031 | "version": "1.1.1",
1032 | "dev": true
1033 | },
1034 | "@ungap/promise-all-settled": {
1035 | "version": "1.1.2",
1036 | "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
1037 | "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
1038 | "dev": true
1039 | },
1040 | "ansi-colors": {
1041 | "version": "4.1.1",
1042 | "dev": true
1043 | },
1044 | "ansi-styles": {
1045 | "version": "4.2.1",
1046 | "dev": true,
1047 | "requires": {
1048 | "@types/color-name": "^1.1.1",
1049 | "color-convert": "^2.0.1"
1050 | }
1051 | },
1052 | "anymatch": {
1053 | "version": "3.1.2",
1054 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
1055 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
1056 | "dev": true,
1057 | "requires": {
1058 | "normalize-path": "^3.0.0",
1059 | "picomatch": "^2.0.4"
1060 | }
1061 | },
1062 | "balanced-match": {
1063 | "version": "1.0.0",
1064 | "dev": true
1065 | },
1066 | "binary-extensions": {
1067 | "version": "2.2.0",
1068 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
1069 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
1070 | "dev": true
1071 | },
1072 | "brace-expansion": {
1073 | "version": "1.1.11",
1074 | "dev": true,
1075 | "requires": {
1076 | "balanced-match": "^1.0.0",
1077 | "concat-map": "0.0.1"
1078 | }
1079 | },
1080 | "browser-stdout": {
1081 | "version": "1.3.1",
1082 | "dev": true
1083 | },
1084 | "camelcase": {
1085 | "version": "6.2.0",
1086 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
1087 | "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
1088 | "dev": true
1089 | },
1090 | "chalk": {
1091 | "version": "4.1.0",
1092 | "dev": true,
1093 | "requires": {
1094 | "ansi-styles": "^4.1.0",
1095 | "supports-color": "^7.1.0"
1096 | }
1097 | },
1098 | "chokidar": {
1099 | "version": "3.5.1",
1100 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
1101 | "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
1102 | "dev": true,
1103 | "requires": {
1104 | "anymatch": "~3.1.1",
1105 | "braces": "~3.0.2",
1106 | "fsevents": "~2.3.1",
1107 | "glob-parent": "~5.1.0",
1108 | "is-binary-path": "~2.1.0",
1109 | "is-glob": "~4.0.1",
1110 | "normalize-path": "~3.0.0",
1111 | "readdirp": "~3.5.0"
1112 | },
1113 | "dependencies": {
1114 | "braces": {
1115 | "version": "3.0.2",
1116 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
1117 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
1118 | "dev": true,
1119 | "requires": {
1120 | "fill-range": "^7.0.1"
1121 | }
1122 | },
1123 | "fill-range": {
1124 | "version": "7.0.1",
1125 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
1126 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
1127 | "dev": true,
1128 | "requires": {
1129 | "to-regex-range": "^5.0.1"
1130 | }
1131 | },
1132 | "is-glob": {
1133 | "version": "4.0.1",
1134 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
1135 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
1136 | "dev": true,
1137 | "requires": {
1138 | "is-extglob": "^2.1.1"
1139 | }
1140 | },
1141 | "is-number": {
1142 | "version": "7.0.0",
1143 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1144 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1145 | "dev": true
1146 | },
1147 | "to-regex-range": {
1148 | "version": "5.0.1",
1149 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1150 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1151 | "dev": true,
1152 | "requires": {
1153 | "is-number": "^7.0.0"
1154 | }
1155 | }
1156 | }
1157 | },
1158 | "cliui": {
1159 | "version": "7.0.4",
1160 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
1161 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
1162 | "dev": true,
1163 | "requires": {
1164 | "string-width": "^4.2.0",
1165 | "strip-ansi": "^6.0.0",
1166 | "wrap-ansi": "^7.0.0"
1167 | },
1168 | "dependencies": {
1169 | "ansi-regex": {
1170 | "version": "5.0.0",
1171 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
1172 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
1173 | "dev": true
1174 | },
1175 | "is-fullwidth-code-point": {
1176 | "version": "3.0.0",
1177 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1178 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1179 | "dev": true
1180 | },
1181 | "string-width": {
1182 | "version": "4.2.2",
1183 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
1184 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
1185 | "dev": true,
1186 | "requires": {
1187 | "emoji-regex": "^8.0.0",
1188 | "is-fullwidth-code-point": "^3.0.0",
1189 | "strip-ansi": "^6.0.0"
1190 | }
1191 | },
1192 | "strip-ansi": {
1193 | "version": "6.0.0",
1194 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
1195 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
1196 | "dev": true,
1197 | "requires": {
1198 | "ansi-regex": "^5.0.0"
1199 | }
1200 | }
1201 | }
1202 | },
1203 | "color-convert": {
1204 | "version": "2.0.1",
1205 | "dev": true,
1206 | "requires": {
1207 | "color-name": "~1.1.4"
1208 | }
1209 | },
1210 | "color-name": {
1211 | "version": "1.1.4",
1212 | "dev": true
1213 | },
1214 | "concat-map": {
1215 | "version": "0.0.1",
1216 | "dev": true
1217 | },
1218 | "decamelize": {
1219 | "version": "4.0.0",
1220 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
1221 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
1222 | "dev": true
1223 | },
1224 | "diff": {
1225 | "version": "5.0.0",
1226 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
1227 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
1228 | "dev": true
1229 | },
1230 | "emoji-regex": {
1231 | "version": "8.0.0",
1232 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
1233 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
1234 | "dev": true
1235 | },
1236 | "escalade": {
1237 | "version": "3.1.1",
1238 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
1239 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
1240 | "dev": true
1241 | },
1242 | "find-up": {
1243 | "version": "5.0.0",
1244 | "dev": true,
1245 | "requires": {
1246 | "locate-path": "^6.0.0",
1247 | "path-exists": "^4.0.0"
1248 | }
1249 | },
1250 | "flat": {
1251 | "version": "5.0.2",
1252 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
1253 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
1254 | "dev": true
1255 | },
1256 | "fs.realpath": {
1257 | "version": "1.0.0",
1258 | "dev": true
1259 | },
1260 | "fsevents": {
1261 | "version": "2.3.2",
1262 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1263 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
1264 | "dev": true,
1265 | "optional": true
1266 | },
1267 | "get-caller-file": {
1268 | "version": "2.0.5",
1269 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
1270 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
1271 | "dev": true
1272 | },
1273 | "glob": {
1274 | "version": "7.1.6",
1275 | "dev": true,
1276 | "requires": {
1277 | "fs.realpath": "^1.0.0",
1278 | "inflight": "^1.0.4",
1279 | "inherits": "2",
1280 | "minimatch": "^3.0.4",
1281 | "once": "^1.3.0",
1282 | "path-is-absolute": "^1.0.0"
1283 | }
1284 | },
1285 | "glob-parent": {
1286 | "version": "5.1.2",
1287 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1288 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1289 | "dev": true,
1290 | "requires": {
1291 | "is-glob": "^4.0.1"
1292 | },
1293 | "dependencies": {
1294 | "is-glob": {
1295 | "version": "4.0.1",
1296 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
1297 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
1298 | "dev": true,
1299 | "requires": {
1300 | "is-extglob": "^2.1.1"
1301 | }
1302 | }
1303 | }
1304 | },
1305 | "growl": {
1306 | "version": "1.10.5",
1307 | "dev": true
1308 | },
1309 | "has-flag": {
1310 | "version": "4.0.0",
1311 | "dev": true
1312 | },
1313 | "he": {
1314 | "version": "1.2.0",
1315 | "dev": true
1316 | },
1317 | "inflight": {
1318 | "version": "1.0.6",
1319 | "dev": true,
1320 | "requires": {
1321 | "once": "^1.3.0",
1322 | "wrappy": "1"
1323 | }
1324 | },
1325 | "inherits": {
1326 | "version": "2.0.4",
1327 | "dev": true
1328 | },
1329 | "is-binary-path": {
1330 | "version": "2.1.0",
1331 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1332 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1333 | "dev": true,
1334 | "requires": {
1335 | "binary-extensions": "^2.0.0"
1336 | }
1337 | },
1338 | "is-extglob": {
1339 | "version": "2.1.1",
1340 | "dev": true
1341 | },
1342 | "is-fullwidth-code-point": {
1343 | "version": "2.0.0",
1344 | "dev": true
1345 | },
1346 | "is-plain-obj": {
1347 | "version": "2.1.0",
1348 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
1349 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
1350 | "dev": true
1351 | },
1352 | "isexe": {
1353 | "version": "2.0.0",
1354 | "dev": true
1355 | },
1356 | "locate-path": {
1357 | "version": "6.0.0",
1358 | "dev": true,
1359 | "requires": {
1360 | "p-locate": "^5.0.0"
1361 | }
1362 | },
1363 | "log-symbols": {
1364 | "version": "4.0.0",
1365 | "dev": true,
1366 | "requires": {
1367 | "chalk": "^4.0.0"
1368 | }
1369 | },
1370 | "minimatch": {
1371 | "version": "3.0.4",
1372 | "dev": true,
1373 | "requires": {
1374 | "brace-expansion": "^1.1.7"
1375 | }
1376 | },
1377 | "mocha": {
1378 | "version": "8.4.0",
1379 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz",
1380 | "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==",
1381 | "dev": true,
1382 | "requires": {
1383 | "@ungap/promise-all-settled": "1.1.2",
1384 | "ansi-colors": "4.1.1",
1385 | "browser-stdout": "1.3.1",
1386 | "chokidar": "3.5.1",
1387 | "debug": "4.3.1",
1388 | "diff": "5.0.0",
1389 | "escape-string-regexp": "4.0.0",
1390 | "find-up": "5.0.0",
1391 | "glob": "7.1.6",
1392 | "growl": "1.10.5",
1393 | "he": "1.2.0",
1394 | "js-yaml": "4.0.0",
1395 | "log-symbols": "4.0.0",
1396 | "minimatch": "3.0.4",
1397 | "ms": "2.1.3",
1398 | "nanoid": "3.1.20",
1399 | "serialize-javascript": "5.0.1",
1400 | "strip-json-comments": "3.1.1",
1401 | "supports-color": "8.1.1",
1402 | "which": "2.0.2",
1403 | "wide-align": "1.1.3",
1404 | "workerpool": "6.1.0",
1405 | "yargs": "16.2.0",
1406 | "yargs-parser": "20.2.4",
1407 | "yargs-unparser": "2.0.0"
1408 | },
1409 | "dependencies": {
1410 | "argparse": {
1411 | "version": "2.0.1",
1412 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
1413 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
1414 | "dev": true
1415 | },
1416 | "debug": {
1417 | "version": "4.3.1",
1418 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
1419 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
1420 | "dev": true,
1421 | "requires": {
1422 | "ms": "2.1.2"
1423 | },
1424 | "dependencies": {
1425 | "ms": {
1426 | "version": "2.1.2",
1427 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1428 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1429 | "dev": true
1430 | }
1431 | }
1432 | },
1433 | "escape-string-regexp": {
1434 | "version": "4.0.0",
1435 | "dev": true
1436 | },
1437 | "js-yaml": {
1438 | "version": "4.0.0",
1439 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz",
1440 | "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==",
1441 | "dev": true,
1442 | "requires": {
1443 | "argparse": "^2.0.1"
1444 | }
1445 | },
1446 | "ms": {
1447 | "version": "2.1.3",
1448 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1449 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1450 | "dev": true
1451 | },
1452 | "strip-json-comments": {
1453 | "version": "3.1.1",
1454 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
1455 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
1456 | "dev": true
1457 | },
1458 | "supports-color": {
1459 | "version": "8.1.1",
1460 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
1461 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
1462 | "dev": true,
1463 | "requires": {
1464 | "has-flag": "^4.0.0"
1465 | }
1466 | },
1467 | "which": {
1468 | "version": "2.0.2",
1469 | "dev": true,
1470 | "requires": {
1471 | "isexe": "^2.0.0"
1472 | }
1473 | }
1474 | }
1475 | },
1476 | "nanoid": {
1477 | "version": "3.1.20",
1478 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
1479 | "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==",
1480 | "dev": true
1481 | },
1482 | "normalize-path": {
1483 | "version": "3.0.0",
1484 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1485 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1486 | "dev": true
1487 | },
1488 | "once": {
1489 | "version": "1.4.0",
1490 | "dev": true,
1491 | "requires": {
1492 | "wrappy": "1"
1493 | }
1494 | },
1495 | "p-limit": {
1496 | "version": "3.0.2",
1497 | "dev": true,
1498 | "requires": {
1499 | "p-try": "^2.0.0"
1500 | }
1501 | },
1502 | "p-locate": {
1503 | "version": "5.0.0",
1504 | "dev": true,
1505 | "requires": {
1506 | "p-limit": "^3.0.2"
1507 | }
1508 | },
1509 | "p-try": {
1510 | "version": "2.2.0",
1511 | "dev": true
1512 | },
1513 | "path-exists": {
1514 | "version": "4.0.0",
1515 | "dev": true
1516 | },
1517 | "path-is-absolute": {
1518 | "version": "1.0.1",
1519 | "dev": true
1520 | },
1521 | "picomatch": {
1522 | "version": "2.3.0",
1523 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
1524 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
1525 | "dev": true
1526 | },
1527 | "randombytes": {
1528 | "version": "2.1.0",
1529 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
1530 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
1531 | "dev": true,
1532 | "requires": {
1533 | "safe-buffer": "^5.1.0"
1534 | }
1535 | },
1536 | "readdirp": {
1537 | "version": "3.5.0",
1538 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
1539 | "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
1540 | "dev": true,
1541 | "requires": {
1542 | "picomatch": "^2.2.1"
1543 | }
1544 | },
1545 | "require-directory": {
1546 | "version": "2.1.1",
1547 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
1548 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
1549 | "dev": true
1550 | },
1551 | "safe-buffer": {
1552 | "version": "5.2.1",
1553 | "dev": true
1554 | },
1555 | "serialize-javascript": {
1556 | "version": "5.0.1",
1557 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
1558 | "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
1559 | "dev": true,
1560 | "requires": {
1561 | "randombytes": "^2.1.0"
1562 | }
1563 | },
1564 | "string-width": {
1565 | "version": "2.1.1",
1566 | "dev": true,
1567 | "requires": {
1568 | "is-fullwidth-code-point": "^2.0.0",
1569 | "strip-ansi": "^4.0.0"
1570 | },
1571 | "dependencies": {
1572 | "ansi-regex": {
1573 | "version": "3.0.0",
1574 | "dev": true
1575 | },
1576 | "strip-ansi": {
1577 | "version": "4.0.0",
1578 | "dev": true,
1579 | "requires": {
1580 | "ansi-regex": "^3.0.0"
1581 | }
1582 | }
1583 | }
1584 | },
1585 | "supports-color": {
1586 | "version": "7.2.0",
1587 | "dev": true,
1588 | "requires": {
1589 | "has-flag": "^4.0.0"
1590 | }
1591 | },
1592 | "wide-align": {
1593 | "version": "1.1.3",
1594 | "dev": true,
1595 | "requires": {
1596 | "string-width": "^1.0.2 || 2"
1597 | }
1598 | },
1599 | "workerpool": {
1600 | "version": "6.1.0",
1601 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz",
1602 | "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==",
1603 | "dev": true
1604 | },
1605 | "wrap-ansi": {
1606 | "version": "7.0.0",
1607 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
1608 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
1609 | "dev": true,
1610 | "requires": {
1611 | "ansi-styles": "^4.0.0",
1612 | "string-width": "^4.1.0",
1613 | "strip-ansi": "^6.0.0"
1614 | },
1615 | "dependencies": {
1616 | "ansi-regex": {
1617 | "version": "5.0.0",
1618 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
1619 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
1620 | "dev": true
1621 | },
1622 | "is-fullwidth-code-point": {
1623 | "version": "3.0.0",
1624 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1625 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1626 | "dev": true
1627 | },
1628 | "string-width": {
1629 | "version": "4.2.2",
1630 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
1631 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
1632 | "dev": true,
1633 | "requires": {
1634 | "emoji-regex": "^8.0.0",
1635 | "is-fullwidth-code-point": "^3.0.0",
1636 | "strip-ansi": "^6.0.0"
1637 | }
1638 | },
1639 | "strip-ansi": {
1640 | "version": "6.0.0",
1641 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
1642 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
1643 | "dev": true,
1644 | "requires": {
1645 | "ansi-regex": "^5.0.0"
1646 | }
1647 | }
1648 | }
1649 | },
1650 | "wrappy": {
1651 | "version": "1.0.2",
1652 | "dev": true
1653 | },
1654 | "y18n": {
1655 | "version": "5.0.8",
1656 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
1657 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
1658 | "dev": true
1659 | },
1660 | "yargs": {
1661 | "version": "16.2.0",
1662 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
1663 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
1664 | "dev": true,
1665 | "requires": {
1666 | "cliui": "^7.0.2",
1667 | "escalade": "^3.1.1",
1668 | "get-caller-file": "^2.0.5",
1669 | "require-directory": "^2.1.1",
1670 | "string-width": "^4.2.0",
1671 | "y18n": "^5.0.5",
1672 | "yargs-parser": "^20.2.2"
1673 | },
1674 | "dependencies": {
1675 | "ansi-regex": {
1676 | "version": "5.0.0",
1677 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
1678 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
1679 | "dev": true
1680 | },
1681 | "is-fullwidth-code-point": {
1682 | "version": "3.0.0",
1683 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1684 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1685 | "dev": true
1686 | },
1687 | "string-width": {
1688 | "version": "4.2.2",
1689 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
1690 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
1691 | "dev": true,
1692 | "requires": {
1693 | "emoji-regex": "^8.0.0",
1694 | "is-fullwidth-code-point": "^3.0.0",
1695 | "strip-ansi": "^6.0.0"
1696 | }
1697 | },
1698 | "strip-ansi": {
1699 | "version": "6.0.0",
1700 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
1701 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
1702 | "dev": true,
1703 | "requires": {
1704 | "ansi-regex": "^5.0.0"
1705 | }
1706 | }
1707 | }
1708 | },
1709 | "yargs-parser": {
1710 | "version": "20.2.4",
1711 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
1712 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
1713 | "dev": true
1714 | },
1715 | "yargs-unparser": {
1716 | "version": "2.0.0",
1717 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
1718 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
1719 | "dev": true,
1720 | "requires": {
1721 | "camelcase": "^6.0.0",
1722 | "decamelize": "^4.0.0",
1723 | "flat": "^5.0.2",
1724 | "is-plain-obj": "^2.1.0"
1725 | }
1726 | }
1727 | }
1728 | }
1729 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "asearch",
3 | "version": "1.0.1",
4 | "private": false,
5 | "description": "Approximate pattern matching",
6 | "main": "index.js",
7 | "scripts": {
8 | "test": "mocha tests/test.js"
9 | },
10 | "author": "Sho Hashimoto ",
11 | "license": "BSD-2-Clause",
12 | "devDependencies": {
13 | "mocha": "^8.4.0"
14 | },
15 | "directories": {
16 | "test": "tests"
17 | },
18 | "repository": {
19 | "type": "git",
20 | "url": "https://github.com/shokai/node-asearch.git"
21 | },
22 | "keywords": [
23 | "ambiguity",
24 | "text",
25 | "search"
26 | ],
27 | "bugs": {
28 | "url": "https://github.com/shokai/node-asearch/issues"
29 | },
30 | "homepage": "https://github.com/shokai/node-asearch"
31 | }
32 |
--------------------------------------------------------------------------------
/samples/sample.js:
--------------------------------------------------------------------------------
1 | // const Asearch = require('asearch')
2 | const Asearch = require('../')
3 |
4 | console.log("== example 1")
5 | const match = Asearch('abcde')
6 | console.log(match('abcde')) // => true
7 | console.log(match('AbCdE')) // => true
8 | console.log(match('abcd')) // => false
9 | console.log(match('abcd', 1)) // => true
10 | console.log(match('ab de', 1)) // => true
11 | console.log(match('abe', 1)) // => false
12 | console.log(match('abe', 2)) // => true
13 |
14 | console.log("== example 2")
15 | const match2 = Asearch('cheese burger')
16 | console.log(match2('cheese burger')) // => true
17 | console.log(match2('chess burger', 2)) // => true
18 | console.log(match2('chess', 2)) // => false
19 |
20 | console.log("== example 3")
21 | const match3 = Asearch('漢字文字列')
22 | console.log(match3('漢字文字列')) // => true
23 | console.log(match3('漢字の文字列')) // => false
24 | console.log(match3('漢字の文字列', 1)) // => true
25 |
--------------------------------------------------------------------------------
/tests/test.js:
--------------------------------------------------------------------------------
1 | const assert = require('assert')
2 | const Asearch = require('../')
3 |
4 | describe('pattern "abcde"', function () {
5 |
6 | const match = Asearch('abcde')
7 |
8 | it('should have property "source"', function () {
9 | assert.equal(match.source, 'abcde')
10 | })
11 |
12 | it('should match "abcde"', function () {
13 | assert.equal(match('abcde'), true)
14 | })
15 |
16 | it('should match "aBCDe"', function () {
17 | assert.equal(match('aBCDe'), true)
18 | })
19 |
20 | it('should match ("abXcde",1)', function () {
21 | assert.equal(match('abXcde',1), true)
22 | })
23 |
24 | it('should match ("ab?de",1)', function () {
25 | assert.equal(match('ab?de',1), true)
26 | })
27 |
28 | it('should match ("abde",1)', function () {
29 | assert.equal(match('abde',1), true)
30 | })
31 |
32 | it('should match (abXXde,2)', function () {
33 | assert.equal(match('abXXde',2), true)
34 | })
35 |
36 | it('should not match "abXcde"', function () {
37 | assert.equal(match('abXcde'), false)
38 | })
39 |
40 | it('should not match "ab?de"', function () {
41 | assert.equal(match('ab?de'), false)
42 | })
43 |
44 | it('should not match "abde"', function () {
45 | assert.equal(match('abde'), false)
46 | })
47 |
48 | it('should not match ("abXXde",1)', function () {
49 | assert.equal(match('abXXde',1), false)
50 | })
51 | })
52 |
53 | describe('pattern "ab de"', function () {
54 |
55 | const match = Asearch('ab de')
56 |
57 | it('should match ("abcde")', function (){
58 | assert.equal(match('abcde'), true)
59 | })
60 |
61 | it('should match ("abccde")', function () {
62 | assert.equal(match('abccde'), true)
63 | })
64 |
65 | it('should match ("abXXXXXXXde")', function () {
66 | assert.equal(match('abXXXXXXXde'), true)
67 | })
68 |
69 | it('should match ("abcccccxe",1)', function () {
70 | assert.equal(match('abcccccxe',1), true)
71 | })
72 |
73 | it('should not match "abcccccxe"', function () {
74 | assert.equal(match('abcccccxe'), false)
75 | })
76 | })
77 |
78 |
79 | describe('pattern "abcde"', function () {
80 |
81 | const match = Asearch('abcde')
82 |
83 | it('should match "abcde"', function () {
84 | assert.equal(match('abcde'), true)
85 | })
86 |
87 | it('should match ("abcde",1)', function () {
88 | assert.equal(match('abcde',1), true)
89 | })
90 |
91 | it('should not match "abcd"', function () {
92 | assert.equal(match('abcd'), false)
93 | })
94 |
95 | it('should match ("abcd",1)', function () {
96 | assert.equal(match('abcd',1), true)
97 | })
98 | })
99 |
100 | describe('pattern "漢字文字列"', function () {
101 |
102 | const match = Asearch('漢字文字列')
103 |
104 | it('should match "漢字文字列"', function () {
105 | assert.equal(match('漢字文字列'), true)
106 | })
107 |
108 | it('should not match "漢字の文字列"', function () {
109 | assert.equal(match('漢字の文字列'), false)
110 | })
111 |
112 | it('should match "漢字の文字列"', function () {
113 | assert.equal(match('漢字の文字列', 1), true)
114 | })
115 |
116 | it('should not match "漢字文字"', function () {
117 | assert.equal(match('漢字文字'), false)
118 | })
119 |
120 | it('should match ("漢字文字", 1)', function () {
121 | assert.equal(match('漢字文字', 1), true)
122 | })
123 |
124 | it('should not match "漢字文字烈"', function () {
125 | assert.equal(match("漢字文字烈"), false)
126 | })
127 |
128 | it('should match ("漢字文字烈", 1)', function () {
129 | assert.equal(match("漢字文字烈", 1), true)
130 | })
131 |
132 | it('should not match ("漢和辞典", 2)', function () {
133 | assert.equal(match("漢和辞典", 2), false)
134 | })
135 | })
136 |
--------------------------------------------------------------------------------