├── .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 | --------------------------------------------------------------------------------