├── .gitignore ├── .mocharc.yml ├── .npmignore ├── README.md ├── jsdoc.conf.json ├── lib └── registry.js ├── package-lock.json ├── package.json └── test └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | lib-cov 2 | *.seed 3 | *.log 4 | *.csv 5 | *.dat 6 | *.out 7 | *.pid 8 | *.gz 9 | 10 | pids 11 | logs 12 | results 13 | 14 | npm-debug.log 15 | /docs 16 | /node_modules 17 | -------------------------------------------------------------------------------- /.mocharc.yml: -------------------------------------------------------------------------------- 1 | reporter: spec 2 | recursive: true 3 | timeout: 3000 4 | slow: 500 5 | growl: true -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | lib-cov 2 | *.seed 3 | *.log 4 | *.csv 5 | *.dat 6 | *.out 7 | *.pid 8 | *.gz 9 | 10 | pids 11 | logs 12 | results 13 | 14 | npm-debug.log 15 | /docs 16 | /node_modules 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | [![NPM](https://nodei.co/npm/winreg.png?downloads=true&stars=true)](https://nodei.co/npm/winreg/) 3 | 4 | [![Join the chat at https://gitter.im/fresc81/node-winreg](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/fresc81/node-winreg?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 5 | 6 | 7 | # node-winreg # 8 | 9 | node module that provides access to the Windows Registry through the REG commandline tool 10 | 11 | 12 | ## Installation ## 13 | 14 | The following command installs node-winreg. 15 | 16 | ```shell 17 | npm install winreg 18 | ``` 19 | 20 | If you prefer to install _without the development tools used to generate the HTML documentation_ (into a production environment for example) you should use the following command. 21 | 22 | ```shell 23 | npm install winreg --production 24 | ``` 25 | 26 | Note that the development dependencies will not be installed if this package was installed as a dependency of another package. 27 | 28 | 29 | ## Documentation ## 30 | 31 | The documentation is generated using [jsdoc](http://github.com/jsdoc3/jsdoc "jsdoc Website") with the [docstrap template](http://docstrap.github.io/docstrap "docstrap website"). You can view the API documentation [online](http://fresc81.github.io/node-winreg "online documentation"), download the latest documentation or generate it from the sourcecode. 32 | 33 | 34 | ### Online Documentation ### 35 | 36 | View the latest docs [online](http://fresc81.github.io/node-winreg "online documentation"). 37 | 38 | 39 | ### Download Documentation ### 40 | 41 | To download the latest docs from GIT the following command is used. 42 | 43 | ```shell 44 | npm run-script download-docs 45 | ``` 46 | 47 | 48 | ### Generate Documentation ### 49 | 50 | To generate the docs from the sources you can use the following command. 51 | 52 | ```shell 53 | npm run-script generate-docs 54 | ``` 55 | 56 | Note that generating the docs requires the development dependencies to be installed. 57 | 58 | 59 | ## Example Usage ## 60 | 61 | Let's start with an example. The code below lists the autostart programs of the current user. 62 | 63 | ```javascript 64 | var Registry = require('winreg') 65 | , regKey = new Registry({ // new operator is optional 66 | hive: Registry.HKCU, // open registry hive HKEY_CURRENT_USER 67 | key: '\\Software\\Microsoft\\Windows\\CurrentVersion\\Run' // key containing autostart programs 68 | }) 69 | 70 | // list autostart programs 71 | regKey.values(function (err, items /* array of RegistryItem */) { 72 | if (err) 73 | console.log('ERROR: '+err); 74 | else 75 | for (var i=0; ichcp (w/o parameters). To set a new codepage (UTF-8 for this example) you pass the codepage number as the only argument to chcp. The codepage value for UTF-8 is 65001. 99 | 100 | You can easily do this from within your nodejs script by using the child_process.execSync(...) function like the following example shows. 101 | 102 | ```javascript 103 | var execSync = require('child_process').execSync; 104 | console.log(execSync('chcp').toString()); 105 | console.log(execSync('chcp 65001').toString()); 106 | ``` 107 | 108 | An even better approach would be to extract and store the value returned by a call to chcp prior setting the console to UTF-8 and resetting the codepage after your script is done. 109 | 110 | 111 | ## License ## 112 | 113 | This project is released under [BSD 2-Clause License](http://opensource.org/licenses/BSD-2-Clause). 114 | 115 | Copyright (c) 2016, Paul Bottin All rights reserved. 116 | 117 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 118 | 119 | * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 120 | * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 121 | 122 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 123 | -------------------------------------------------------------------------------- /jsdoc.conf.json: -------------------------------------------------------------------------------- 1 | { 2 | "tags": { 3 | "allowUnknownTags": false 4 | }, 5 | "opts": { 6 | "template": "./node_modules/ink-docstrap/template", 7 | "encoding": "utf8", 8 | "destination": "./docs/", 9 | "recurse": true, 10 | "private": true, 11 | "lenient": true, 12 | "verbose": true, 13 | "nocolor": true 14 | }, 15 | "source": { 16 | "include": [ 17 | "./lib", 18 | "./README.md" 19 | ], 20 | "includePattern": ".+\\.js(doc)?$" 21 | }, 22 | "plugins": [ 23 | "plugins/markdown" 24 | ], 25 | "templates": { 26 | "syntaxTheme": "dark", 27 | "cleverLinks": true, 28 | "monospaceLinks": true, 29 | "default": { 30 | "outputSourceFiles": true 31 | }, 32 | "systemName": "node-winreg", 33 | "footer": "Fork me on GitHub", 34 | "copyright": "Copyright © 2023 Paul Bottin.", 35 | "navType": "vertical", 36 | "linenums": true, 37 | "theme": "cyborg" 38 | } , 39 | "markdown": { 40 | "parser": "gfm", 41 | "hardwrap": true, 42 | "githubRepoName": "node-winreg", 43 | "githubRepoOwner": "fresc81" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /lib/registry.js: -------------------------------------------------------------------------------- 1 | /************************************************************************************************************ 2 | * registry.js - contains a wrapper for the REG command under Windows, which provides access to the registry 3 | * 4 | * @author Paul Bottin a/k/a FrEsC 5 | * 6 | */ 7 | 8 | /* imports */ 9 | var util = require('util') 10 | , path = require('path') 11 | , spawn = require('child_process').spawn 12 | 13 | /* set to console.log for debugging */ 14 | , log = function () {} 15 | 16 | /* registry hive ids */ 17 | , HKLM = 'HKLM' 18 | , HKCU = 'HKCU' 19 | , HKCR = 'HKCR' 20 | , HKU = 'HKU' 21 | , HKCC = 'HKCC' 22 | , HIVES = [ HKLM, HKCU, HKCR, HKU, HKCC ] 23 | 24 | /* registry value type ids */ 25 | , REG_SZ = 'REG_SZ' 26 | , REG_MULTI_SZ = 'REG_MULTI_SZ' 27 | , REG_EXPAND_SZ = 'REG_EXPAND_SZ' 28 | , REG_DWORD = 'REG_DWORD' 29 | , REG_QWORD = 'REG_QWORD' 30 | , REG_BINARY = 'REG_BINARY' 31 | , REG_NONE = 'REG_NONE' 32 | , REG_TYPES = [ REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ, REG_DWORD, REG_QWORD, REG_BINARY, REG_NONE ] 33 | 34 | /* default registry value name */ 35 | , DEFAULT_VALUE = '' 36 | 37 | /* general key pattern */ 38 | , KEY_PATTERN = /(\\[a-zA-Z0-9_\s]+)*/ 39 | 40 | /* key path pattern (as returned by REG-cli) */ 41 | , PATH_PATTERN = /^(HKEY_LOCAL_MACHINE|HKEY_CURRENT_USER|HKEY_CLASSES_ROOT|HKEY_USERS|HKEY_CURRENT_CONFIG)(.*)$/ 42 | 43 | /* registry item pattern */ 44 | , ITEM_PATTERN = /^(.*)\s(REG_SZ|REG_MULTI_SZ|REG_EXPAND_SZ|REG_DWORD|REG_QWORD|REG_BINARY|REG_NONE)\s+([^\s].*)$/ 45 | 46 | /** 47 | * Creates an Error object that contains the exit code of the REG.EXE process. 48 | * This contructor is private. Objects of this type are created internally and returned in the err parameters in case the REG.EXE process doesn't exit cleanly. 49 | * 50 | * @private 51 | * @class 52 | * 53 | * @param {string} message - the error message 54 | * @param {number} code - the process exit code 55 | * 56 | */ 57 | function ProcessUncleanExitError(message, code) { 58 | if (!(this instanceof ProcessUncleanExitError)) 59 | return new ProcessUncleanExitError(message, code); 60 | 61 | Error.captureStackTrace(this, ProcessUncleanExitError); 62 | 63 | /** 64 | * The error name. 65 | * @readonly 66 | * @member {string} ProcessUncleanExitError#name 67 | */ 68 | this.__defineGetter__('name', function () { return ProcessUncleanExitError.name; }); 69 | 70 | /** 71 | * The error message. 72 | * @readonly 73 | * @member {string} ProcessUncleanExitError#message 74 | */ 75 | this.__defineGetter__('message', function () { return message; }); 76 | 77 | /** 78 | * The process exit code. 79 | * @readonly 80 | * @member {number} ProcessUncleanExitError#code 81 | */ 82 | this.__defineGetter__('code', function () { return code; }); 83 | 84 | } 85 | 86 | util.inherits(ProcessUncleanExitError, Error); 87 | 88 | /* 89 | * Captures stdout/stderr for a child process 90 | */ 91 | function captureOutput(child) { 92 | // Use a mutable data structure so we can append as we get new data and have 93 | // the calling context see the new data 94 | var output = {'stdout': '', 'stderr': ''}; 95 | 96 | child.stdout.on('data', function(data) { output["stdout"] += data.toString(); }); 97 | child.stderr.on('data', function(data) { output["stderr"] += data.toString(); }); 98 | 99 | return output; 100 | } 101 | 102 | 103 | /* 104 | * Returns an error message containing the stdout/stderr of the child process 105 | */ 106 | function mkErrorMsg(registryCommand, code, output) { 107 | var stdout = output['stdout'].trim(); 108 | var stderr = output['stderr'].trim(); 109 | 110 | var msg = util.format("%s command exited with code %d:\n%s\n%s", registryCommand, code, stdout, stderr); 111 | return new ProcessUncleanExitError(msg, code); 112 | } 113 | 114 | 115 | /* 116 | * Converts x86/x64 to 32/64 117 | */ 118 | function convertArchString(archString) { 119 | if (archString == 'x64') { 120 | return '64'; 121 | } else if (archString == 'x86') { 122 | return '32'; 123 | } else { 124 | throw new Error('illegal architecture: ' + archString + ' (use x86 or x64)'); 125 | } 126 | } 127 | 128 | 129 | /* 130 | * Adds correct architecture to reg args 131 | */ 132 | function pushArch(args, arch) { 133 | if (arch) { 134 | args.push('/reg:' + convertArchString(arch)); 135 | } 136 | } 137 | 138 | /* 139 | * Get the path to system's reg.exe. Useful when another reg.exe is added to the PATH 140 | * Implemented only for Windows 141 | */ 142 | function getRegExePath() { 143 | if (process.platform === 'win32') { 144 | return path.join(process.env.windir, 'system32', 'reg.exe'); 145 | } else { 146 | return "REG"; 147 | } 148 | } 149 | 150 | 151 | /** 152 | * Creates a single registry value record. 153 | * This contructor is private. Objects of this type are created internally and returned by methods of {@link Registry} objects. 154 | * 155 | * @private 156 | * @class 157 | * 158 | * @param {string} host - the hostname 159 | * @param {string} hive - the hive id 160 | * @param {string} key - the registry key 161 | * @param {string} name - the value name 162 | * @param {string} type - the value type 163 | * @param {string} value - the value 164 | * @param {string} arch - the hive architecture ('x86' or 'x64') 165 | * 166 | */ 167 | function RegistryItem (host, hive, key, name, type, value, arch) { 168 | 169 | if (!(this instanceof RegistryItem)) 170 | return new RegistryItem(host, hive, key, name, type, value, arch); 171 | 172 | /* private members */ 173 | var _host = host // hostname 174 | , _hive = hive // registry hive 175 | , _key = key // registry key 176 | , _name = name // property name 177 | , _type = type // property type 178 | , _value = value // property value 179 | , _arch = arch // hive architecture 180 | 181 | /* getters/setters */ 182 | 183 | /** 184 | * The hostname. 185 | * @readonly 186 | * @member {string} RegistryItem#host 187 | */ 188 | this.__defineGetter__('host', function () { return _host; }); 189 | 190 | /** 191 | * The hive id. 192 | * @readonly 193 | * @member {string} RegistryItem#hive 194 | */ 195 | this.__defineGetter__('hive', function () { return _hive; }); 196 | 197 | /** 198 | * The registry key. 199 | * @readonly 200 | * @member {string} RegistryItem#key 201 | */ 202 | this.__defineGetter__('key', function () { return _key; }); 203 | 204 | /** 205 | * The value name. 206 | * @readonly 207 | * @member {string} RegistryItem#name 208 | */ 209 | this.__defineGetter__('name', function () { return _name; }); 210 | 211 | /** 212 | * The value type. 213 | * @readonly 214 | * @member {string} RegistryItem#type 215 | */ 216 | this.__defineGetter__('type', function () { return _type; }); 217 | 218 | /** 219 | * The value. 220 | * @readonly 221 | * @member {string} RegistryItem#value 222 | */ 223 | this.__defineGetter__('value', function () { return _value; }); 224 | 225 | /** 226 | * The hive architecture. 227 | * @readonly 228 | * @member {string} RegistryItem#arch 229 | */ 230 | this.__defineGetter__('arch', function () { return _arch; }); 231 | 232 | } 233 | 234 | util.inherits(RegistryItem, Object); 235 | 236 | /** 237 | * Creates a registry object, which provides access to a single registry key. 238 | * Note: This class is returned by a call to ```require('winreg')```. 239 | * 240 | * @public 241 | * @class 242 | * 243 | * @param {object} options - the options 244 | * @param {string=} options.host - the hostname 245 | * @param {string=} options.hive - the hive id 246 | * @param {string=} options.key - the registry key 247 | * @param {string=} options.arch - the optional registry hive architecture ('x86' or 'x64'; only valid on Windows 64 Bit Operating Systems) 248 | * 249 | * @example 250 | * var Registry = require('winreg') 251 | * , autoStartCurrentUser = new Registry({ 252 | * hive: Registry.HKCU, 253 | * key: '\\Software\\Microsoft\\Windows\\CurrentVersion\\Run' 254 | * }); 255 | * 256 | */ 257 | function Registry (options) { 258 | 259 | if (!(this instanceof Registry)) 260 | return new Registry(options); 261 | 262 | /* private members */ 263 | var _options = options || {} 264 | , _host = '' + (_options.host || '') // hostname 265 | , _hive = '' + (_options.hive || HKLM) // registry hive 266 | , _key = '' + (_options.key || '') // registry key 267 | , _arch = _options.arch || null // hive architecture 268 | 269 | /* getters/setters */ 270 | 271 | /** 272 | * The hostname. 273 | * @readonly 274 | * @member {string} Registry#host 275 | */ 276 | this.__defineGetter__('host', function () { return _host; }); 277 | 278 | /** 279 | * The hive id. 280 | * @readonly 281 | * @member {string} Registry#hive 282 | */ 283 | this.__defineGetter__('hive', function () { return _hive; }); 284 | 285 | /** 286 | * The registry key name. 287 | * @readonly 288 | * @member {string} Registry#key 289 | */ 290 | this.__defineGetter__('key', function () { return _key; }); 291 | 292 | /** 293 | * The full path to the registry key. 294 | * @readonly 295 | * @member {string} Registry#path 296 | */ 297 | this.__defineGetter__('path', function () { return '"' + (_host.length == 0 ? '' : '\\\\' + _host + '\\') + _hive + _key + '"'; }); 298 | 299 | /** 300 | * The registry hive architecture ('x86' or 'x64'). 301 | * @readonly 302 | * @member {string} Registry#arch 303 | */ 304 | this.__defineGetter__('arch', function () { return _arch; }); 305 | 306 | /** 307 | * Creates a new {@link Registry} instance that points to the parent registry key. 308 | * @readonly 309 | * @member {Registry} Registry#parent 310 | */ 311 | this.__defineGetter__('parent', function () { 312 | var i = _key.lastIndexOf('\\') 313 | return new Registry({ 314 | host: this.host, 315 | hive: this.hive, 316 | key: (i == -1)?'':_key.substring(0, i), 317 | arch: this.arch 318 | }); 319 | }); 320 | 321 | // validate options... 322 | if (HIVES.indexOf(_hive) == -1) 323 | throw new Error('illegal hive specified.'); 324 | 325 | if (!KEY_PATTERN.test(_key)) 326 | throw new Error('illegal key specified.'); 327 | 328 | if (_arch && _arch != 'x64' && _arch != 'x86') 329 | throw new Error('illegal architecture specified (use x86 or x64)'); 330 | 331 | } 332 | 333 | /** 334 | * Registry hive key HKEY_LOCAL_MACHINE. 335 | * Note: For writing to this hive your program has to run with admin privileges. 336 | * @type {string} 337 | */ 338 | Registry.HKLM = HKLM; 339 | 340 | /** 341 | * Registry hive key HKEY_CURRENT_USER. 342 | * @type {string} 343 | */ 344 | Registry.HKCU = HKCU; 345 | 346 | /** 347 | * Registry hive key HKEY_CLASSES_ROOT. 348 | * Note: For writing to this hive your program has to run with admin privileges. 349 | * @type {string} 350 | */ 351 | Registry.HKCR = HKCR; 352 | 353 | /** 354 | * Registry hive key HKEY_USERS. 355 | * Note: For writing to this hive your program has to run with admin privileges. 356 | * @type {string} 357 | */ 358 | Registry.HKU = HKU; 359 | 360 | /** 361 | * Registry hive key HKEY_CURRENT_CONFIG. 362 | * Note: For writing to this hive your program has to run with admin privileges. 363 | * @type {string} 364 | */ 365 | Registry.HKCC = HKCC; 366 | 367 | /** 368 | * Collection of available registry hive keys. 369 | * @type {array} 370 | */ 371 | Registry.HIVES = HIVES; 372 | 373 | /** 374 | * Registry value type STRING. 375 | * @type {string} 376 | */ 377 | Registry.REG_SZ = REG_SZ; 378 | 379 | /** 380 | * Registry value type MULTILINE_STRING. 381 | * @type {string} 382 | */ 383 | Registry.REG_MULTI_SZ = REG_MULTI_SZ; 384 | 385 | /** 386 | * Registry value type EXPANDABLE_STRING. 387 | * @type {string} 388 | */ 389 | Registry.REG_EXPAND_SZ = REG_EXPAND_SZ; 390 | 391 | /** 392 | * Registry value type DOUBLE_WORD. 393 | * @type {string} 394 | */ 395 | Registry.REG_DWORD = REG_DWORD; 396 | 397 | /** 398 | * Registry value type QUAD_WORD. 399 | * @type {string} 400 | */ 401 | Registry.REG_QWORD = REG_QWORD; 402 | 403 | /** 404 | * Registry value type BINARY. 405 | * @type {string} 406 | */ 407 | Registry.REG_BINARY = REG_BINARY; 408 | 409 | /** 410 | * Registry value type UNKNOWN. 411 | * @type {string} 412 | */ 413 | Registry.REG_NONE = REG_NONE; 414 | 415 | /** 416 | * Collection of available registry value types. 417 | * @type {array} 418 | */ 419 | Registry.REG_TYPES = REG_TYPES; 420 | 421 | /** 422 | * The name of the default value. May be used instead of the empty string literal for better readability. 423 | * @type {string} 424 | */ 425 | Registry.DEFAULT_VALUE = DEFAULT_VALUE; 426 | 427 | /** 428 | * Retrieve all values from this registry key. 429 | * @param {valuesCallback} cb - callback function 430 | * @param {ProcessUncleanExitError=} cb.err - error object or null if successful 431 | * @param {array=} cb.items - an array of {@link RegistryItem} objects 432 | * @returns {Registry} this registry key object 433 | */ 434 | Registry.prototype.values = function values (cb) { 435 | 436 | if (typeof cb !== 'function') 437 | throw new TypeError('must specify a callback'); 438 | 439 | var args = [ 'QUERY', this.path ]; 440 | 441 | pushArch(args, this.arch); 442 | 443 | var proc = spawn(getRegExePath(), args, { 444 | cwd: undefined, 445 | env: process.env, 446 | shell: true, 447 | windowsHide: true, 448 | stdio: [ 'ignore', 'pipe', 'pipe' ] 449 | }) 450 | , buffer = '' 451 | , self = this 452 | , error = null // null means no error previously reported. 453 | 454 | var output = captureOutput(proc); 455 | 456 | proc.on('close', function (code) { 457 | if (error) { 458 | return; 459 | } else if (code !== 0) { 460 | log('process exited with code ' + code); 461 | cb(mkErrorMsg('QUERY', code, output), null); 462 | } else { 463 | var items = [] 464 | , result = [] 465 | , lines = buffer.split('\n') 466 | , lineNumber = 0 467 | 468 | for (var i = 0, l = lines.length; i < l; i++) { 469 | var line = lines[i].trim(); 470 | if (line.length > 0) { 471 | log(line); 472 | if (lineNumber != 0) { 473 | items.push(line); 474 | } 475 | ++lineNumber; 476 | } 477 | } 478 | 479 | for (var i = 0, l = items.length; i < l; i++) { 480 | 481 | var match = ITEM_PATTERN.exec(items[i]) 482 | , name 483 | , type 484 | , value 485 | 486 | if (match) { 487 | name = match[1].trim(); 488 | type = match[2].trim(); 489 | value = match[3]; 490 | result.push(new RegistryItem(self.host, self.hive, self.key, name, type, value, self.arch)); 491 | } 492 | } 493 | 494 | cb(null, result); 495 | 496 | } 497 | }); 498 | 499 | proc.stdout.on('data', function (data) { 500 | buffer += data.toString(); 501 | }); 502 | 503 | proc.on('error', function(err) { 504 | error = err; 505 | cb(err); 506 | }); 507 | 508 | return this; 509 | }; 510 | 511 | /** 512 | * Retrieve all subkeys from this registry key. 513 | * @param {function (err, items)} cb - callback function 514 | * @param {ProcessUncleanExitError=} cb.err - error object or null if successful 515 | * @param {array=} cb.items - an array of {@link Registry} objects 516 | * @returns {Registry} this registry key object 517 | */ 518 | Registry.prototype.keys = function keys (cb) { 519 | 520 | if (typeof cb !== 'function') 521 | throw new TypeError('must specify a callback'); 522 | 523 | var args = [ 'QUERY', this.path ]; 524 | 525 | pushArch(args, this.arch); 526 | 527 | var proc = spawn(getRegExePath(), args, { 528 | cwd: undefined, 529 | env: process.env, 530 | shell: true, 531 | windowsHide: true, 532 | stdio: [ 'ignore', 'pipe', 'pipe' ] 533 | }) 534 | , buffer = '' 535 | , self = this 536 | , error = null // null means no error previously reported. 537 | 538 | var output = captureOutput(proc); 539 | 540 | proc.on('close', function (code) { 541 | if (error) { 542 | return; 543 | } else if (code !== 0) { 544 | log('process exited with code ' + code); 545 | cb(mkErrorMsg('QUERY', code, output), null); 546 | } 547 | }); 548 | 549 | proc.stdout.on('data', function (data) { 550 | buffer += data.toString(); 551 | }); 552 | 553 | proc.stdout.on('end', function () { 554 | 555 | var items = [] 556 | , result = [] 557 | , lines = buffer.split('\n') 558 | 559 | for (var i = 0, l = lines.length; i < l; i++) { 560 | var line = lines[i].trim(); 561 | if (line.length > 0) { 562 | log(line); 563 | items.push(line); 564 | } 565 | } 566 | 567 | for (var i = 0, l = items.length; i < l; i++) { 568 | 569 | var match = PATH_PATTERN.exec(items[i]) 570 | , hive 571 | , key 572 | 573 | if (match) { 574 | hive = match[1]; 575 | key = match[2]; 576 | if (key && (key !== self.key)) { 577 | result.push(new Registry({ 578 | host: self.host, 579 | hive: self.hive, 580 | key: key, 581 | arch: self.arch 582 | })); 583 | } 584 | } 585 | } 586 | 587 | cb(null, result); 588 | 589 | }); 590 | 591 | proc.on('error', function(err) { 592 | error = err; 593 | cb(err); 594 | }); 595 | 596 | return this; 597 | }; 598 | 599 | /** 600 | * Gets a named value from this registry key. 601 | * @param {string} name - the value name, use {@link Registry.DEFAULT_VALUE} or an empty string for the default value 602 | * @param {function (err, item)} cb - callback function 603 | * @param {ProcessUncleanExitError=} cb.err - error object or null if successful 604 | * @param {RegistryItem=} cb.item - the retrieved registry item 605 | * @returns {Registry} this registry key object 606 | */ 607 | Registry.prototype.get = function get (name, cb) { 608 | 609 | if (typeof cb !== 'function') 610 | throw new TypeError('must specify a callback'); 611 | 612 | var args = ['QUERY', this.path]; 613 | if (name == '') 614 | args.push('/ve'); 615 | else 616 | args = args.concat(['/v', name]); 617 | 618 | pushArch(args, this.arch); 619 | 620 | var proc = spawn(getRegExePath(), args, { 621 | cwd: undefined, 622 | env: process.env, 623 | shell: true, 624 | windowsHide: true, 625 | stdio: [ 'ignore', 'pipe', 'pipe' ] 626 | }) 627 | , buffer = '' 628 | , self = this 629 | , error = null // null means no error previously reported. 630 | 631 | var output = captureOutput(proc); 632 | 633 | proc.on('close', function (code) { 634 | if (error) { 635 | return; 636 | } else if (code !== 0) { 637 | log('process exited with code ' + code); 638 | cb(mkErrorMsg('QUERY', code, output), null); 639 | } else { 640 | var items = [] 641 | , result = null 642 | , lines = buffer.split('\n') 643 | , lineNumber = 0 644 | 645 | for (var i = 0, l = lines.length; i < l; i++) { 646 | var line = lines[i].trim(); 647 | if (line.length > 0) { 648 | log(line); 649 | if (lineNumber != 0) { 650 | items.push(line); 651 | } 652 | ++lineNumber; 653 | } 654 | } 655 | 656 | //Get last item - so it works in XP where REG QUERY returns with a header 657 | var item = items[items.length-1] || '' 658 | , match = ITEM_PATTERN.exec(item) 659 | , name 660 | , type 661 | , value 662 | 663 | if (match) { 664 | name = match[1].trim(); 665 | type = match[2].trim(); 666 | value = match[3]; 667 | result = new RegistryItem(self.host, self.hive, self.key, name, type, value, self.arch); 668 | } 669 | 670 | cb(null, result); 671 | } 672 | }); 673 | 674 | proc.stdout.on('data', function (data) { 675 | buffer += data.toString(); 676 | }); 677 | 678 | proc.on('error', function(err) { 679 | error = err; 680 | cb(err); 681 | }); 682 | 683 | return this; 684 | }; 685 | 686 | /** 687 | * Sets a named value in this registry key, overwriting an already existing value. 688 | * @param {string} name - the value name, use {@link Registry.DEFAULT_VALUE} or an empty string for the default value 689 | * @param {string} type - the value type 690 | * @param {string} value - the value 691 | * @param {function (err)} cb - callback function 692 | * @param {ProcessUncleanExitError=} cb.err - error object or null if successful 693 | * @returns {Registry} this registry key object 694 | */ 695 | Registry.prototype.set = function set (name, type, value, cb) { 696 | 697 | if (typeof cb !== 'function') 698 | throw new TypeError('must specify a callback'); 699 | 700 | if (REG_TYPES.indexOf(type) == -1) 701 | throw Error('illegal type specified.'); 702 | 703 | var args = ['ADD', this.path]; 704 | if (name == '') 705 | args.push('/ve'); 706 | else 707 | args = args.concat(['/v', name]); 708 | 709 | args = args.concat(['/t', type, '/d', value, '/f']); 710 | 711 | pushArch(args, this.arch); 712 | 713 | var proc = spawn(getRegExePath(), args, { 714 | cwd: undefined, 715 | env: process.env, 716 | shell: true, 717 | windowsHide: true, 718 | stdio: [ 'ignore', 'pipe', 'pipe' ] 719 | }) 720 | , error = null // null means no error previously reported. 721 | 722 | var output = captureOutput(proc); 723 | 724 | proc.on('close', function (code) { 725 | if(error) { 726 | return; 727 | } else if (code !== 0) { 728 | log('process exited with code ' + code); 729 | cb(mkErrorMsg('ADD', code, output, null)); 730 | } else { 731 | cb(null); 732 | } 733 | }); 734 | 735 | proc.stdout.on('data', function (data) { 736 | // simply discard output 737 | log(''+data); 738 | }); 739 | 740 | proc.on('error', function(err) { 741 | error = err; 742 | cb(err); 743 | }); 744 | 745 | return this; 746 | }; 747 | 748 | /** 749 | * Remove a named value from this registry key. If name is empty, sets the default value of this key. 750 | * Note: This key must be already existing. 751 | * @param {string} name - the value name, use {@link Registry.DEFAULT_VALUE} or an empty string for the default value 752 | * @param {function (err)} cb - callback function 753 | * @param {ProcessUncleanExitError=} cb.err - error object or null if successful 754 | * @returns {Registry} this registry key object 755 | */ 756 | Registry.prototype.remove = function remove (name, cb) { 757 | 758 | if (typeof cb !== 'function') 759 | throw new TypeError('must specify a callback'); 760 | 761 | var args = name ? ['DELETE', this.path, '/f', '/v', name] : ['DELETE', this.path, '/f', '/ve']; 762 | 763 | pushArch(args, this.arch); 764 | 765 | var proc = spawn(getRegExePath(), args, { 766 | cwd: undefined, 767 | env: process.env, 768 | shell: true, 769 | windowsHide: true, 770 | stdio: [ 'ignore', 'pipe', 'pipe' ] 771 | }) 772 | , error = null // null means no error previously reported. 773 | 774 | var output = captureOutput(proc); 775 | 776 | proc.on('close', function (code) { 777 | if(error) { 778 | return; 779 | } else if (code !== 0) { 780 | log('process exited with code ' + code); 781 | cb(mkErrorMsg('DELETE', code, output), null); 782 | } else { 783 | cb(null); 784 | } 785 | }); 786 | 787 | proc.stdout.on('data', function (data) { 788 | // simply discard output 789 | log(''+data); 790 | }); 791 | 792 | proc.on('error', function(err) { 793 | error = err; 794 | cb(err); 795 | }); 796 | 797 | return this; 798 | }; 799 | 800 | /** 801 | * Remove all subkeys and values (including the default value) from this registry key. 802 | * @param {function (err)} cb - callback function 803 | * @param {ProcessUncleanExitError=} cb.err - error object or null if successful 804 | * @returns {Registry} this registry key object 805 | */ 806 | Registry.prototype.clear = function clear (cb) { 807 | 808 | if (typeof cb !== 'function') 809 | throw new TypeError('must specify a callback'); 810 | 811 | var args = ['DELETE', this.path, '/f', '/va']; 812 | 813 | pushArch(args, this.arch); 814 | 815 | var proc = spawn(getRegExePath(), args, { 816 | cwd: undefined, 817 | env: process.env, 818 | shell: true, 819 | windowsHide: true, 820 | stdio: [ 'ignore', 'pipe', 'pipe' ] 821 | }) 822 | , error = null // null means no error previously reported. 823 | 824 | var output = captureOutput(proc); 825 | 826 | proc.on('close', function (code) { 827 | if(error) { 828 | return; 829 | } else if (code !== 0) { 830 | log('process exited with code ' + code); 831 | cb(mkErrorMsg("DELETE", code, output), null); 832 | } else { 833 | cb(null); 834 | } 835 | }); 836 | 837 | proc.stdout.on('data', function (data) { 838 | // simply discard output 839 | log(''+data); 840 | }); 841 | 842 | proc.on('error', function(err) { 843 | error = err; 844 | cb(err); 845 | }); 846 | 847 | return this; 848 | }; 849 | 850 | /** 851 | * Alias for the clear method to keep it backward compatible. 852 | * @method 853 | * @deprecated Use {@link Registry#clear} or {@link Registry#destroy} in favour of this method. 854 | * @param {function (err)} cb - callback function 855 | * @param {ProcessUncleanExitError=} cb.err - error object or null if successful 856 | * @returns {Registry} this registry key object 857 | */ 858 | Registry.prototype.erase = Registry.prototype.clear; 859 | 860 | /** 861 | * Delete this key and all subkeys from the registry. 862 | * @param {function (err)} cb - callback function 863 | * @param {ProcessUncleanExitError=} cb.err - error object or null if successful 864 | * @returns {Registry} this registry key object 865 | */ 866 | Registry.prototype.destroy = function destroy (cb) { 867 | 868 | if (typeof cb !== 'function') 869 | throw new TypeError('must specify a callback'); 870 | 871 | var args = ['DELETE', this.path, '/f']; 872 | 873 | pushArch(args, this.arch); 874 | 875 | var proc = spawn(getRegExePath(), args, { 876 | cwd: undefined, 877 | env: process.env, 878 | shell: true, 879 | windowsHide: true, 880 | stdio: [ 'ignore', 'pipe', 'pipe' ] 881 | }) 882 | , error = null // null means no error previously reported. 883 | 884 | var output = captureOutput(proc); 885 | 886 | proc.on('close', function (code) { 887 | if (error) { 888 | return; 889 | } else if (code !== 0) { 890 | log('process exited with code ' + code); 891 | cb(mkErrorMsg('DELETE', code, output), null); 892 | } else { 893 | cb(null); 894 | } 895 | }); 896 | 897 | proc.stdout.on('data', function (data) { 898 | // simply discard output 899 | log(''+data); 900 | }); 901 | 902 | proc.on('error', function(err) { 903 | error = err; 904 | cb(err); 905 | }); 906 | 907 | return this; 908 | }; 909 | 910 | /** 911 | * Create this registry key. Note that this is a no-op if the key already exists. 912 | * @param {function (err)} cb - callback function 913 | * @param {ProcessUncleanExitError=} cb.err - error object or null if successful 914 | * @returns {Registry} this registry key object 915 | */ 916 | Registry.prototype.create = function create (cb) { 917 | 918 | if (typeof cb !== 'function') 919 | throw new TypeError('must specify a callback'); 920 | 921 | var args = ['ADD', this.path, '/f']; 922 | 923 | pushArch(args, this.arch); 924 | 925 | var proc = spawn(getRegExePath(), args, { 926 | cwd: undefined, 927 | env: process.env, 928 | shell: true, 929 | windowsHide: true, 930 | stdio: [ 'ignore', 'pipe', 'pipe' ] 931 | }) 932 | , error = null // null means no error previously reported. 933 | 934 | var output = captureOutput(proc); 935 | 936 | proc.on('close', function (code) { 937 | if (error) { 938 | return; 939 | } else if (code !== 0) { 940 | log('process exited with code ' + code); 941 | cb(mkErrorMsg('ADD', code, output), null); 942 | } else { 943 | cb(null); 944 | } 945 | }); 946 | 947 | proc.stdout.on('data', function (data) { 948 | // simply discard output 949 | log(''+data); 950 | }); 951 | 952 | proc.on('error', function(err) { 953 | error = err; 954 | cb(err); 955 | }); 956 | 957 | return this; 958 | }; 959 | 960 | /** 961 | * Checks if this key already exists. 962 | * @param {function (err, exists)} cb - callback function 963 | * @param {ProcessUncleanExitError=} cb.err - error object or null if successful 964 | * @param {boolean=} cb.exists - true if a registry key with this name already exists 965 | * @returns {Registry} this registry key object 966 | */ 967 | Registry.prototype.keyExists = function keyExists (cb) { 968 | 969 | this.values(function (err, items) { 970 | if (err) { 971 | // process should return with code 1 if key not found 972 | if (err.code == 1) { 973 | return cb(null, false); 974 | } 975 | // other error 976 | return cb(err); 977 | } 978 | cb(null, true); 979 | }); 980 | 981 | return this; 982 | }; 983 | 984 | /** 985 | * Checks if a value with the given name already exists within this key. 986 | * @param {string} name - the value name, use {@link Registry.DEFAULT_VALUE} or an empty string for the default value 987 | * @param {function (err, exists)} cb - callback function 988 | * @param {ProcessUncleanExitError=} cb.err - error object or null if successful 989 | * @param {boolean=} cb.exists - true if a value with the given name was found in this key 990 | * @returns {Registry} this registry key object 991 | */ 992 | Registry.prototype.valueExists = function valueExists (name, cb) { 993 | 994 | this.get(name, function (err, item) { 995 | if (err) { 996 | // process should return with code 1 if value not found 997 | if (err.code == 1) { 998 | return cb(null, false); 999 | } 1000 | // other error 1001 | return cb(err); 1002 | } 1003 | cb(null, true); 1004 | }); 1005 | 1006 | return this; 1007 | }; 1008 | 1009 | module.exports = Registry; 1010 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "winreg", 3 | "version": "1.2.5", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "winreg", 9 | "version": "1.2.5", 10 | "license": "BSD-2-Clause", 11 | "devDependencies": { 12 | "ink-docstrap": "^1.3.2", 13 | "jsdoc": "^4.0.2", 14 | "mocha": "^10.2.0", 15 | "moment": "^2.11.2", 16 | "taffydb": "^2.7.3", 17 | "unit.js": "^2.0.0" 18 | } 19 | }, 20 | "node_modules/@babel/parser": { 21 | "version": "7.23.0", 22 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", 23 | "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", 24 | "dev": true, 25 | "bin": { 26 | "parser": "bin/babel-parser.js" 27 | }, 28 | "engines": { 29 | "node": ">=6.0.0" 30 | } 31 | }, 32 | "node_modules/@jsdoc/salty": { 33 | "version": "0.2.5", 34 | "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", 35 | "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", 36 | "dev": true, 37 | "dependencies": { 38 | "lodash": "^4.17.21" 39 | }, 40 | "engines": { 41 | "node": ">=v12.0.0" 42 | } 43 | }, 44 | "node_modules/@sinonjs/commons": { 45 | "version": "1.8.6", 46 | "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", 47 | "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", 48 | "dev": true, 49 | "dependencies": { 50 | "type-detect": "4.0.8" 51 | } 52 | }, 53 | "node_modules/@sinonjs/formatio": { 54 | "version": "3.2.2", 55 | "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", 56 | "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", 57 | "dev": true, 58 | "dependencies": { 59 | "@sinonjs/commons": "^1", 60 | "@sinonjs/samsam": "^3.1.0" 61 | } 62 | }, 63 | "node_modules/@sinonjs/samsam": { 64 | "version": "3.3.3", 65 | "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", 66 | "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", 67 | "dev": true, 68 | "dependencies": { 69 | "@sinonjs/commons": "^1.3.0", 70 | "array-from": "^2.1.1", 71 | "lodash": "^4.17.15" 72 | } 73 | }, 74 | "node_modules/@sinonjs/text-encoding": { 75 | "version": "0.7.2", 76 | "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", 77 | "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", 78 | "dev": true 79 | }, 80 | "node_modules/@types/linkify-it": { 81 | "version": "3.0.4", 82 | "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.4.tgz", 83 | "integrity": "sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==", 84 | "dev": true 85 | }, 86 | "node_modules/@types/markdown-it": { 87 | "version": "12.2.3", 88 | "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", 89 | "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", 90 | "dev": true, 91 | "dependencies": { 92 | "@types/linkify-it": "*", 93 | "@types/mdurl": "*" 94 | } 95 | }, 96 | "node_modules/@types/mdurl": { 97 | "version": "1.0.4", 98 | "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.4.tgz", 99 | "integrity": "sha512-ARVxjAEX5TARFRzpDRVC6cEk0hUIXCCwaMhz8y7S1/PxU6zZS1UMjyobz7q4w/D/R552r4++EhwmXK1N2rAy0A==", 100 | "dev": true 101 | }, 102 | "node_modules/ansi-colors": { 103 | "version": "4.1.1", 104 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 105 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 106 | "dev": true, 107 | "engines": { 108 | "node": ">=6" 109 | } 110 | }, 111 | "node_modules/ansi-regex": { 112 | "version": "5.0.1", 113 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 114 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 115 | "dev": true, 116 | "engines": { 117 | "node": ">=8" 118 | } 119 | }, 120 | "node_modules/ansi-styles": { 121 | "version": "4.3.0", 122 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 123 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 124 | "dev": true, 125 | "dependencies": { 126 | "color-convert": "^2.0.1" 127 | }, 128 | "engines": { 129 | "node": ">=8" 130 | }, 131 | "funding": { 132 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 133 | } 134 | }, 135 | "node_modules/anymatch": { 136 | "version": "3.1.3", 137 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 138 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 139 | "dev": true, 140 | "dependencies": { 141 | "normalize-path": "^3.0.0", 142 | "picomatch": "^2.0.4" 143 | }, 144 | "engines": { 145 | "node": ">= 8" 146 | } 147 | }, 148 | "node_modules/argparse": { 149 | "version": "2.0.1", 150 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 151 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 152 | "dev": true 153 | }, 154 | "node_modules/array-from": { 155 | "version": "2.1.1", 156 | "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", 157 | "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==", 158 | "dev": true 159 | }, 160 | "node_modules/asynckit": { 161 | "version": "0.4.0", 162 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 163 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 164 | "dev": true 165 | }, 166 | "node_modules/balanced-match": { 167 | "version": "1.0.2", 168 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 169 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 170 | "dev": true 171 | }, 172 | "node_modules/binary-extensions": { 173 | "version": "2.2.0", 174 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 175 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 176 | "dev": true, 177 | "engines": { 178 | "node": ">=8" 179 | } 180 | }, 181 | "node_modules/bluebird": { 182 | "version": "3.7.2", 183 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 184 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", 185 | "dev": true 186 | }, 187 | "node_modules/brace-expansion": { 188 | "version": "2.0.1", 189 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 190 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 191 | "dev": true, 192 | "dependencies": { 193 | "balanced-match": "^1.0.0" 194 | } 195 | }, 196 | "node_modules/braces": { 197 | "version": "3.0.2", 198 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 199 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 200 | "dev": true, 201 | "dependencies": { 202 | "fill-range": "^7.0.1" 203 | }, 204 | "engines": { 205 | "node": ">=8" 206 | } 207 | }, 208 | "node_modules/browser-stdout": { 209 | "version": "1.3.1", 210 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 211 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 212 | "dev": true 213 | }, 214 | "node_modules/call-bind": { 215 | "version": "1.0.2", 216 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 217 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 218 | "dev": true, 219 | "dependencies": { 220 | "function-bind": "^1.1.1", 221 | "get-intrinsic": "^1.0.2" 222 | }, 223 | "funding": { 224 | "url": "https://github.com/sponsors/ljharb" 225 | } 226 | }, 227 | "node_modules/camelcase": { 228 | "version": "6.3.0", 229 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 230 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 231 | "dev": true, 232 | "engines": { 233 | "node": ">=10" 234 | }, 235 | "funding": { 236 | "url": "https://github.com/sponsors/sindresorhus" 237 | } 238 | }, 239 | "node_modules/catharsis": { 240 | "version": "0.9.0", 241 | "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", 242 | "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", 243 | "dev": true, 244 | "dependencies": { 245 | "lodash": "^4.17.15" 246 | }, 247 | "engines": { 248 | "node": ">= 10" 249 | } 250 | }, 251 | "node_modules/chalk": { 252 | "version": "4.1.2", 253 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 254 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 255 | "dev": true, 256 | "dependencies": { 257 | "ansi-styles": "^4.1.0", 258 | "supports-color": "^7.1.0" 259 | }, 260 | "engines": { 261 | "node": ">=10" 262 | }, 263 | "funding": { 264 | "url": "https://github.com/chalk/chalk?sponsor=1" 265 | } 266 | }, 267 | "node_modules/chalk/node_modules/supports-color": { 268 | "version": "7.2.0", 269 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 270 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 271 | "dev": true, 272 | "dependencies": { 273 | "has-flag": "^4.0.0" 274 | }, 275 | "engines": { 276 | "node": ">=8" 277 | } 278 | }, 279 | "node_modules/chokidar": { 280 | "version": "3.5.3", 281 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 282 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 283 | "dev": true, 284 | "funding": [ 285 | { 286 | "type": "individual", 287 | "url": "https://paulmillr.com/funding/" 288 | } 289 | ], 290 | "dependencies": { 291 | "anymatch": "~3.1.2", 292 | "braces": "~3.0.2", 293 | "glob-parent": "~5.1.2", 294 | "is-binary-path": "~2.1.0", 295 | "is-glob": "~4.0.1", 296 | "normalize-path": "~3.0.0", 297 | "readdirp": "~3.6.0" 298 | }, 299 | "engines": { 300 | "node": ">= 8.10.0" 301 | }, 302 | "optionalDependencies": { 303 | "fsevents": "~2.3.2" 304 | } 305 | }, 306 | "node_modules/cliui": { 307 | "version": "7.0.4", 308 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 309 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 310 | "dev": true, 311 | "dependencies": { 312 | "string-width": "^4.2.0", 313 | "strip-ansi": "^6.0.0", 314 | "wrap-ansi": "^7.0.0" 315 | } 316 | }, 317 | "node_modules/color-convert": { 318 | "version": "2.0.1", 319 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 320 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 321 | "dev": true, 322 | "dependencies": { 323 | "color-name": "~1.1.4" 324 | }, 325 | "engines": { 326 | "node": ">=7.0.0" 327 | } 328 | }, 329 | "node_modules/color-name": { 330 | "version": "1.1.4", 331 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 332 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 333 | "dev": true 334 | }, 335 | "node_modules/combined-stream": { 336 | "version": "1.0.8", 337 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 338 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 339 | "dev": true, 340 | "dependencies": { 341 | "delayed-stream": "~1.0.0" 342 | }, 343 | "engines": { 344 | "node": ">= 0.8" 345 | } 346 | }, 347 | "node_modules/component-emitter": { 348 | "version": "1.3.0", 349 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", 350 | "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", 351 | "dev": true 352 | }, 353 | "node_modules/concat-map": { 354 | "version": "0.0.1", 355 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 356 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 357 | "dev": true 358 | }, 359 | "node_modules/cookiejar": { 360 | "version": "2.1.4", 361 | "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", 362 | "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", 363 | "dev": true 364 | }, 365 | "node_modules/core-util-is": { 366 | "version": "1.0.3", 367 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 368 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 369 | "dev": true 370 | }, 371 | "node_modules/debug": { 372 | "version": "4.3.4", 373 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 374 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 375 | "dev": true, 376 | "dependencies": { 377 | "ms": "2.1.2" 378 | }, 379 | "engines": { 380 | "node": ">=6.0" 381 | }, 382 | "peerDependenciesMeta": { 383 | "supports-color": { 384 | "optional": true 385 | } 386 | } 387 | }, 388 | "node_modules/debug/node_modules/ms": { 389 | "version": "2.1.2", 390 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 391 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 392 | "dev": true 393 | }, 394 | "node_modules/decamelize": { 395 | "version": "4.0.0", 396 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 397 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 398 | "dev": true, 399 | "engines": { 400 | "node": ">=10" 401 | }, 402 | "funding": { 403 | "url": "https://github.com/sponsors/sindresorhus" 404 | } 405 | }, 406 | "node_modules/delayed-stream": { 407 | "version": "1.0.0", 408 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 409 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 410 | "dev": true, 411 | "engines": { 412 | "node": ">=0.4.0" 413 | } 414 | }, 415 | "node_modules/diff": { 416 | "version": "5.0.0", 417 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 418 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 419 | "dev": true, 420 | "engines": { 421 | "node": ">=0.3.1" 422 | } 423 | }, 424 | "node_modules/dom-serializer": { 425 | "version": "1.4.1", 426 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", 427 | "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", 428 | "dev": true, 429 | "dependencies": { 430 | "domelementtype": "^2.0.1", 431 | "domhandler": "^4.2.0", 432 | "entities": "^2.0.0" 433 | }, 434 | "funding": { 435 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" 436 | } 437 | }, 438 | "node_modules/dom-serializer/node_modules/domhandler": { 439 | "version": "4.3.1", 440 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", 441 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", 442 | "dev": true, 443 | "dependencies": { 444 | "domelementtype": "^2.2.0" 445 | }, 446 | "engines": { 447 | "node": ">= 4" 448 | }, 449 | "funding": { 450 | "url": "https://github.com/fb55/domhandler?sponsor=1" 451 | } 452 | }, 453 | "node_modules/domelementtype": { 454 | "version": "2.3.0", 455 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 456 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", 457 | "dev": true, 458 | "funding": [ 459 | { 460 | "type": "github", 461 | "url": "https://github.com/sponsors/fb55" 462 | } 463 | ] 464 | }, 465 | "node_modules/domhandler": { 466 | "version": "3.3.0", 467 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", 468 | "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", 469 | "dev": true, 470 | "dependencies": { 471 | "domelementtype": "^2.0.1" 472 | }, 473 | "engines": { 474 | "node": ">= 4" 475 | }, 476 | "funding": { 477 | "url": "https://github.com/fb55/domhandler?sponsor=1" 478 | } 479 | }, 480 | "node_modules/domutils": { 481 | "version": "2.8.0", 482 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 483 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 484 | "dev": true, 485 | "dependencies": { 486 | "dom-serializer": "^1.0.1", 487 | "domelementtype": "^2.2.0", 488 | "domhandler": "^4.2.0" 489 | }, 490 | "funding": { 491 | "url": "https://github.com/fb55/domutils?sponsor=1" 492 | } 493 | }, 494 | "node_modules/domutils/node_modules/domhandler": { 495 | "version": "4.3.1", 496 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", 497 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", 498 | "dev": true, 499 | "dependencies": { 500 | "domelementtype": "^2.2.0" 501 | }, 502 | "engines": { 503 | "node": ">= 4" 504 | }, 505 | "funding": { 506 | "url": "https://github.com/fb55/domhandler?sponsor=1" 507 | } 508 | }, 509 | "node_modules/egal": { 510 | "version": "1.3.0", 511 | "resolved": "https://registry.npmjs.org/egal/-/egal-1.3.0.tgz", 512 | "integrity": "sha512-K3oJQTVoCyBA1xpmHcTUPxsOuiJXDfAO9Ts2ScP2z96dxPR8g680A0BG8owH5Pwh+5FQm4M2iWv0CTwPUtLrJA==", 513 | "dev": true, 514 | "dependencies": { 515 | "kindof": ">= 2.0.0 < 3" 516 | } 517 | }, 518 | "node_modules/emoji-regex": { 519 | "version": "8.0.0", 520 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 521 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 522 | "dev": true 523 | }, 524 | "node_modules/entities": { 525 | "version": "2.1.0", 526 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", 527 | "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", 528 | "dev": true, 529 | "funding": { 530 | "url": "https://github.com/fb55/entities?sponsor=1" 531 | } 532 | }, 533 | "node_modules/escalade": { 534 | "version": "3.1.1", 535 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 536 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 537 | "dev": true, 538 | "engines": { 539 | "node": ">=6" 540 | } 541 | }, 542 | "node_modules/escape-string-regexp": { 543 | "version": "2.0.0", 544 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", 545 | "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", 546 | "dev": true, 547 | "engines": { 548 | "node": ">=8" 549 | } 550 | }, 551 | "node_modules/extend": { 552 | "version": "3.0.2", 553 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 554 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 555 | "dev": true 556 | }, 557 | "node_modules/fill-range": { 558 | "version": "7.0.1", 559 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 560 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 561 | "dev": true, 562 | "dependencies": { 563 | "to-regex-range": "^5.0.1" 564 | }, 565 | "engines": { 566 | "node": ">=8" 567 | } 568 | }, 569 | "node_modules/find-up": { 570 | "version": "5.0.0", 571 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 572 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 573 | "dev": true, 574 | "dependencies": { 575 | "locate-path": "^6.0.0", 576 | "path-exists": "^4.0.0" 577 | }, 578 | "engines": { 579 | "node": ">=10" 580 | }, 581 | "funding": { 582 | "url": "https://github.com/sponsors/sindresorhus" 583 | } 584 | }, 585 | "node_modules/flat": { 586 | "version": "5.0.2", 587 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 588 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 589 | "dev": true, 590 | "bin": { 591 | "flat": "cli.js" 592 | } 593 | }, 594 | "node_modules/form-data": { 595 | "version": "2.5.1", 596 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", 597 | "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", 598 | "dev": true, 599 | "dependencies": { 600 | "asynckit": "^0.4.0", 601 | "combined-stream": "^1.0.6", 602 | "mime-types": "^2.1.12" 603 | }, 604 | "engines": { 605 | "node": ">= 0.12" 606 | } 607 | }, 608 | "node_modules/formidable": { 609 | "version": "1.2.6", 610 | "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", 611 | "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", 612 | "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", 613 | "dev": true, 614 | "funding": { 615 | "url": "https://ko-fi.com/tunnckoCore/commissions" 616 | } 617 | }, 618 | "node_modules/fs.realpath": { 619 | "version": "1.0.0", 620 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 621 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 622 | "dev": true 623 | }, 624 | "node_modules/fsevents": { 625 | "version": "2.3.3", 626 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 627 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 628 | "dev": true, 629 | "hasInstallScript": true, 630 | "optional": true, 631 | "os": [ 632 | "darwin" 633 | ], 634 | "engines": { 635 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 636 | } 637 | }, 638 | "node_modules/function-bind": { 639 | "version": "1.1.2", 640 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 641 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 642 | "dev": true, 643 | "funding": { 644 | "url": "https://github.com/sponsors/ljharb" 645 | } 646 | }, 647 | "node_modules/get-caller-file": { 648 | "version": "2.0.5", 649 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 650 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 651 | "dev": true, 652 | "engines": { 653 | "node": "6.* || 8.* || >= 10.*" 654 | } 655 | }, 656 | "node_modules/get-intrinsic": { 657 | "version": "1.2.1", 658 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", 659 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", 660 | "dev": true, 661 | "dependencies": { 662 | "function-bind": "^1.1.1", 663 | "has": "^1.0.3", 664 | "has-proto": "^1.0.1", 665 | "has-symbols": "^1.0.3" 666 | }, 667 | "funding": { 668 | "url": "https://github.com/sponsors/ljharb" 669 | } 670 | }, 671 | "node_modules/glob": { 672 | "version": "7.2.0", 673 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 674 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 675 | "dev": true, 676 | "dependencies": { 677 | "fs.realpath": "^1.0.0", 678 | "inflight": "^1.0.4", 679 | "inherits": "2", 680 | "minimatch": "^3.0.4", 681 | "once": "^1.3.0", 682 | "path-is-absolute": "^1.0.0" 683 | }, 684 | "engines": { 685 | "node": "*" 686 | }, 687 | "funding": { 688 | "url": "https://github.com/sponsors/isaacs" 689 | } 690 | }, 691 | "node_modules/glob-parent": { 692 | "version": "5.1.2", 693 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 694 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 695 | "dev": true, 696 | "dependencies": { 697 | "is-glob": "^4.0.1" 698 | }, 699 | "engines": { 700 | "node": ">= 6" 701 | } 702 | }, 703 | "node_modules/glob/node_modules/brace-expansion": { 704 | "version": "1.1.11", 705 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 706 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 707 | "dev": true, 708 | "dependencies": { 709 | "balanced-match": "^1.0.0", 710 | "concat-map": "0.0.1" 711 | } 712 | }, 713 | "node_modules/glob/node_modules/minimatch": { 714 | "version": "3.1.2", 715 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 716 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 717 | "dev": true, 718 | "dependencies": { 719 | "brace-expansion": "^1.1.7" 720 | }, 721 | "engines": { 722 | "node": "*" 723 | } 724 | }, 725 | "node_modules/graceful-fs": { 726 | "version": "4.2.11", 727 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 728 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 729 | "dev": true 730 | }, 731 | "node_modules/has": { 732 | "version": "1.0.4", 733 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", 734 | "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", 735 | "dev": true, 736 | "engines": { 737 | "node": ">= 0.4.0" 738 | } 739 | }, 740 | "node_modules/has-flag": { 741 | "version": "4.0.0", 742 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 743 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 744 | "dev": true, 745 | "engines": { 746 | "node": ">=8" 747 | } 748 | }, 749 | "node_modules/has-proto": { 750 | "version": "1.0.1", 751 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 752 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 753 | "dev": true, 754 | "engines": { 755 | "node": ">= 0.4" 756 | }, 757 | "funding": { 758 | "url": "https://github.com/sponsors/ljharb" 759 | } 760 | }, 761 | "node_modules/has-symbols": { 762 | "version": "1.0.3", 763 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 764 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 765 | "dev": true, 766 | "engines": { 767 | "node": ">= 0.4" 768 | }, 769 | "funding": { 770 | "url": "https://github.com/sponsors/ljharb" 771 | } 772 | }, 773 | "node_modules/he": { 774 | "version": "1.2.0", 775 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 776 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 777 | "dev": true, 778 | "bin": { 779 | "he": "bin/he" 780 | } 781 | }, 782 | "node_modules/htmlparser2": { 783 | "version": "4.1.0", 784 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", 785 | "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", 786 | "dev": true, 787 | "dependencies": { 788 | "domelementtype": "^2.0.1", 789 | "domhandler": "^3.0.0", 790 | "domutils": "^2.0.0", 791 | "entities": "^2.0.0" 792 | } 793 | }, 794 | "node_modules/inflight": { 795 | "version": "1.0.6", 796 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 797 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 798 | "dev": true, 799 | "dependencies": { 800 | "once": "^1.3.0", 801 | "wrappy": "1" 802 | } 803 | }, 804 | "node_modules/inherits": { 805 | "version": "2.0.4", 806 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 807 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 808 | "dev": true 809 | }, 810 | "node_modules/ink-docstrap": { 811 | "version": "1.3.2", 812 | "resolved": "https://registry.npmjs.org/ink-docstrap/-/ink-docstrap-1.3.2.tgz", 813 | "integrity": "sha512-STx5orGQU1gfrkoI/fMU7lX6CSP7LBGO10gXNgOZhwKhUqbtNjCkYSewJtNnLmWP1tAGN6oyEpG1HFPw5vpa5Q==", 814 | "dev": true, 815 | "dependencies": { 816 | "moment": "^2.14.1", 817 | "sanitize-html": "^1.13.0" 818 | } 819 | }, 820 | "node_modules/is-binary-path": { 821 | "version": "2.1.0", 822 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 823 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 824 | "dev": true, 825 | "dependencies": { 826 | "binary-extensions": "^2.0.0" 827 | }, 828 | "engines": { 829 | "node": ">=8" 830 | } 831 | }, 832 | "node_modules/is-extglob": { 833 | "version": "2.1.1", 834 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 835 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 836 | "dev": true, 837 | "engines": { 838 | "node": ">=0.10.0" 839 | } 840 | }, 841 | "node_modules/is-fullwidth-code-point": { 842 | "version": "3.0.0", 843 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 844 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 845 | "dev": true, 846 | "engines": { 847 | "node": ">=8" 848 | } 849 | }, 850 | "node_modules/is-glob": { 851 | "version": "4.0.3", 852 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 853 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 854 | "dev": true, 855 | "dependencies": { 856 | "is-extglob": "^2.1.1" 857 | }, 858 | "engines": { 859 | "node": ">=0.10.0" 860 | } 861 | }, 862 | "node_modules/is-number": { 863 | "version": "7.0.0", 864 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 865 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 866 | "dev": true, 867 | "engines": { 868 | "node": ">=0.12.0" 869 | } 870 | }, 871 | "node_modules/is-plain-obj": { 872 | "version": "2.1.0", 873 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 874 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 875 | "dev": true, 876 | "engines": { 877 | "node": ">=8" 878 | } 879 | }, 880 | "node_modules/is-unicode-supported": { 881 | "version": "0.1.0", 882 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 883 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 884 | "dev": true, 885 | "engines": { 886 | "node": ">=10" 887 | }, 888 | "funding": { 889 | "url": "https://github.com/sponsors/sindresorhus" 890 | } 891 | }, 892 | "node_modules/isarray": { 893 | "version": "0.0.1", 894 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 895 | "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", 896 | "dev": true 897 | }, 898 | "node_modules/js-yaml": { 899 | "version": "4.1.0", 900 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 901 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 902 | "dev": true, 903 | "dependencies": { 904 | "argparse": "^2.0.1" 905 | }, 906 | "bin": { 907 | "js-yaml": "bin/js-yaml.js" 908 | } 909 | }, 910 | "node_modules/js2xmlparser": { 911 | "version": "4.0.2", 912 | "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", 913 | "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", 914 | "dev": true, 915 | "dependencies": { 916 | "xmlcreate": "^2.0.4" 917 | } 918 | }, 919 | "node_modules/jsdoc": { 920 | "version": "4.0.2", 921 | "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", 922 | "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", 923 | "dev": true, 924 | "dependencies": { 925 | "@babel/parser": "^7.20.15", 926 | "@jsdoc/salty": "^0.2.1", 927 | "@types/markdown-it": "^12.2.3", 928 | "bluebird": "^3.7.2", 929 | "catharsis": "^0.9.0", 930 | "escape-string-regexp": "^2.0.0", 931 | "js2xmlparser": "^4.0.2", 932 | "klaw": "^3.0.0", 933 | "markdown-it": "^12.3.2", 934 | "markdown-it-anchor": "^8.4.1", 935 | "marked": "^4.0.10", 936 | "mkdirp": "^1.0.4", 937 | "requizzle": "^0.2.3", 938 | "strip-json-comments": "^3.1.0", 939 | "underscore": "~1.13.2" 940 | }, 941 | "bin": { 942 | "jsdoc": "jsdoc.js" 943 | }, 944 | "engines": { 945 | "node": ">=12.0.0" 946 | } 947 | }, 948 | "node_modules/json-stringify-safe": { 949 | "version": "5.0.1", 950 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 951 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", 952 | "dev": true 953 | }, 954 | "node_modules/just-extend": { 955 | "version": "4.2.1", 956 | "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", 957 | "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", 958 | "dev": true 959 | }, 960 | "node_modules/kindof": { 961 | "version": "2.0.0", 962 | "resolved": "https://registry.npmjs.org/kindof/-/kindof-2.0.0.tgz", 963 | "integrity": "sha512-ZjkyNRo87FUdtxtpx/MLmePxaLoAhipw0CSTNgX50S1BQhPnsjkgZ/Vso0tR9pbfrzzQiAn+MSFooZAr/GfUNw==", 964 | "dev": true 965 | }, 966 | "node_modules/klaw": { 967 | "version": "3.0.0", 968 | "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", 969 | "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", 970 | "dev": true, 971 | "dependencies": { 972 | "graceful-fs": "^4.1.9" 973 | } 974 | }, 975 | "node_modules/linkify-it": { 976 | "version": "3.0.3", 977 | "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", 978 | "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", 979 | "dev": true, 980 | "dependencies": { 981 | "uc.micro": "^1.0.1" 982 | } 983 | }, 984 | "node_modules/locate-path": { 985 | "version": "6.0.0", 986 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 987 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 988 | "dev": true, 989 | "dependencies": { 990 | "p-locate": "^5.0.0" 991 | }, 992 | "engines": { 993 | "node": ">=10" 994 | }, 995 | "funding": { 996 | "url": "https://github.com/sponsors/sindresorhus" 997 | } 998 | }, 999 | "node_modules/lodash": { 1000 | "version": "4.17.21", 1001 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1002 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1003 | "dev": true 1004 | }, 1005 | "node_modules/lodash._createwrapper": { 1006 | "version": "3.2.0", 1007 | "resolved": "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-3.2.0.tgz", 1008 | "integrity": "sha512-O8fi7P57KZQjtTJN3tbUAJsm6Coo35JVi4OiEU/WV0rrqaWemk+rRB/1ohiIiv1cIK3dIkVhMehaFOFyNZDYkQ==", 1009 | "dev": true, 1010 | "dependencies": { 1011 | "lodash._root": "^3.0.0" 1012 | } 1013 | }, 1014 | "node_modules/lodash._root": { 1015 | "version": "3.0.1", 1016 | "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", 1017 | "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", 1018 | "dev": true 1019 | }, 1020 | "node_modules/lodash.wrap": { 1021 | "version": "3.0.1", 1022 | "resolved": "https://registry.npmjs.org/lodash.wrap/-/lodash.wrap-3.0.1.tgz", 1023 | "integrity": "sha512-DG1m5ZU7tt5HC1c/UnwhTD3gcjMfAm0JvoamALYZDSxEmQlJrGclclL9nh/WmcthxnfYN53UQa7uKYMvBV+RAg==", 1024 | "dev": true, 1025 | "dependencies": { 1026 | "lodash._createwrapper": "^3.0.0" 1027 | } 1028 | }, 1029 | "node_modules/log-symbols": { 1030 | "version": "4.1.0", 1031 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 1032 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 1033 | "dev": true, 1034 | "dependencies": { 1035 | "chalk": "^4.1.0", 1036 | "is-unicode-supported": "^0.1.0" 1037 | }, 1038 | "engines": { 1039 | "node": ">=10" 1040 | }, 1041 | "funding": { 1042 | "url": "https://github.com/sponsors/sindresorhus" 1043 | } 1044 | }, 1045 | "node_modules/lolex": { 1046 | "version": "4.2.0", 1047 | "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", 1048 | "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==", 1049 | "dev": true 1050 | }, 1051 | "node_modules/markdown-it": { 1052 | "version": "12.3.2", 1053 | "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", 1054 | "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", 1055 | "dev": true, 1056 | "dependencies": { 1057 | "argparse": "^2.0.1", 1058 | "entities": "~2.1.0", 1059 | "linkify-it": "^3.0.1", 1060 | "mdurl": "^1.0.1", 1061 | "uc.micro": "^1.0.5" 1062 | }, 1063 | "bin": { 1064 | "markdown-it": "bin/markdown-it.js" 1065 | } 1066 | }, 1067 | "node_modules/markdown-it-anchor": { 1068 | "version": "8.6.7", 1069 | "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", 1070 | "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", 1071 | "dev": true, 1072 | "peerDependencies": { 1073 | "@types/markdown-it": "*", 1074 | "markdown-it": "*" 1075 | } 1076 | }, 1077 | "node_modules/marked": { 1078 | "version": "4.3.0", 1079 | "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", 1080 | "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", 1081 | "dev": true, 1082 | "bin": { 1083 | "marked": "bin/marked.js" 1084 | }, 1085 | "engines": { 1086 | "node": ">= 12" 1087 | } 1088 | }, 1089 | "node_modules/mdurl": { 1090 | "version": "1.0.1", 1091 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", 1092 | "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", 1093 | "dev": true 1094 | }, 1095 | "node_modules/methods": { 1096 | "version": "1.1.2", 1097 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1098 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 1099 | "dev": true, 1100 | "engines": { 1101 | "node": ">= 0.6" 1102 | } 1103 | }, 1104 | "node_modules/mime": { 1105 | "version": "1.6.0", 1106 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1107 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1108 | "dev": true, 1109 | "bin": { 1110 | "mime": "cli.js" 1111 | }, 1112 | "engines": { 1113 | "node": ">=4" 1114 | } 1115 | }, 1116 | "node_modules/mime-db": { 1117 | "version": "1.52.0", 1118 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1119 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1120 | "dev": true, 1121 | "engines": { 1122 | "node": ">= 0.6" 1123 | } 1124 | }, 1125 | "node_modules/mime-types": { 1126 | "version": "2.1.35", 1127 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1128 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1129 | "dev": true, 1130 | "dependencies": { 1131 | "mime-db": "1.52.0" 1132 | }, 1133 | "engines": { 1134 | "node": ">= 0.6" 1135 | } 1136 | }, 1137 | "node_modules/minimatch": { 1138 | "version": "5.0.1", 1139 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", 1140 | "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", 1141 | "dev": true, 1142 | "dependencies": { 1143 | "brace-expansion": "^2.0.1" 1144 | }, 1145 | "engines": { 1146 | "node": ">=10" 1147 | } 1148 | }, 1149 | "node_modules/mkdirp": { 1150 | "version": "1.0.4", 1151 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 1152 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 1153 | "dev": true, 1154 | "bin": { 1155 | "mkdirp": "bin/cmd.js" 1156 | }, 1157 | "engines": { 1158 | "node": ">=10" 1159 | } 1160 | }, 1161 | "node_modules/mocha": { 1162 | "version": "10.2.0", 1163 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", 1164 | "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", 1165 | "dev": true, 1166 | "dependencies": { 1167 | "ansi-colors": "4.1.1", 1168 | "browser-stdout": "1.3.1", 1169 | "chokidar": "3.5.3", 1170 | "debug": "4.3.4", 1171 | "diff": "5.0.0", 1172 | "escape-string-regexp": "4.0.0", 1173 | "find-up": "5.0.0", 1174 | "glob": "7.2.0", 1175 | "he": "1.2.0", 1176 | "js-yaml": "4.1.0", 1177 | "log-symbols": "4.1.0", 1178 | "minimatch": "5.0.1", 1179 | "ms": "2.1.3", 1180 | "nanoid": "3.3.3", 1181 | "serialize-javascript": "6.0.0", 1182 | "strip-json-comments": "3.1.1", 1183 | "supports-color": "8.1.1", 1184 | "workerpool": "6.2.1", 1185 | "yargs": "16.2.0", 1186 | "yargs-parser": "20.2.4", 1187 | "yargs-unparser": "2.0.0" 1188 | }, 1189 | "bin": { 1190 | "_mocha": "bin/_mocha", 1191 | "mocha": "bin/mocha.js" 1192 | }, 1193 | "engines": { 1194 | "node": ">= 14.0.0" 1195 | }, 1196 | "funding": { 1197 | "type": "opencollective", 1198 | "url": "https://opencollective.com/mochajs" 1199 | } 1200 | }, 1201 | "node_modules/mocha/node_modules/escape-string-regexp": { 1202 | "version": "4.0.0", 1203 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1204 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1205 | "dev": true, 1206 | "engines": { 1207 | "node": ">=10" 1208 | }, 1209 | "funding": { 1210 | "url": "https://github.com/sponsors/sindresorhus" 1211 | } 1212 | }, 1213 | "node_modules/moment": { 1214 | "version": "2.29.4", 1215 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 1216 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", 1217 | "dev": true, 1218 | "engines": { 1219 | "node": "*" 1220 | } 1221 | }, 1222 | "node_modules/ms": { 1223 | "version": "2.1.3", 1224 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1225 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1226 | "dev": true 1227 | }, 1228 | "node_modules/must": { 1229 | "version": "0.13.4", 1230 | "resolved": "https://registry.npmjs.org/must/-/must-0.13.4.tgz", 1231 | "integrity": "sha512-5RUPT4WINrrzxC0TuOvoBFJocOAaSnhu2r+98GYYGZRcYQla4QZInNVmAnRXtveceibc1RDSP16dwKMnMJhr4Q==", 1232 | "dev": true, 1233 | "dependencies": { 1234 | "egal": ">= 1.3.0 < 2", 1235 | "json-stringify-safe": ">= 5 < 6", 1236 | "kindof": ">= 2.0.0 < 3", 1237 | "lodash.wrap": ">= 3 < 4", 1238 | "oolong": ">= 1.11.0 < 2" 1239 | } 1240 | }, 1241 | "node_modules/nanoid": { 1242 | "version": "3.3.3", 1243 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", 1244 | "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", 1245 | "dev": true, 1246 | "bin": { 1247 | "nanoid": "bin/nanoid.cjs" 1248 | }, 1249 | "engines": { 1250 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1251 | } 1252 | }, 1253 | "node_modules/nise": { 1254 | "version": "1.5.3", 1255 | "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", 1256 | "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==", 1257 | "dev": true, 1258 | "dependencies": { 1259 | "@sinonjs/formatio": "^3.2.1", 1260 | "@sinonjs/text-encoding": "^0.7.1", 1261 | "just-extend": "^4.0.2", 1262 | "lolex": "^5.0.1", 1263 | "path-to-regexp": "^1.7.0" 1264 | } 1265 | }, 1266 | "node_modules/nise/node_modules/lolex": { 1267 | "version": "5.1.2", 1268 | "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", 1269 | "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", 1270 | "dev": true, 1271 | "dependencies": { 1272 | "@sinonjs/commons": "^1.7.0" 1273 | } 1274 | }, 1275 | "node_modules/noder.io": { 1276 | "version": "1.2.0", 1277 | "resolved": "https://registry.npmjs.org/noder.io/-/noder.io-1.2.0.tgz", 1278 | "integrity": "sha512-CC8J7QdQYeZeR4e0a1LcqP4+PvVmOBWO4m0mKOnKmIxn4S/+TnBkGhrq69uOHSw4k5899PLJhstkzz7ErKJAkQ==", 1279 | "dev": true 1280 | }, 1281 | "node_modules/normalize-path": { 1282 | "version": "3.0.0", 1283 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1284 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1285 | "dev": true, 1286 | "engines": { 1287 | "node": ">=0.10.0" 1288 | } 1289 | }, 1290 | "node_modules/object-inspect": { 1291 | "version": "1.13.0", 1292 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.0.tgz", 1293 | "integrity": "sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==", 1294 | "dev": true, 1295 | "funding": { 1296 | "url": "https://github.com/sponsors/ljharb" 1297 | } 1298 | }, 1299 | "node_modules/once": { 1300 | "version": "1.4.0", 1301 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1302 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1303 | "dev": true, 1304 | "dependencies": { 1305 | "wrappy": "1" 1306 | } 1307 | }, 1308 | "node_modules/oolong": { 1309 | "version": "1.15.1", 1310 | "resolved": "https://registry.npmjs.org/oolong/-/oolong-1.15.1.tgz", 1311 | "integrity": "sha512-I2XTx2/q8CsAXrAnoczmX0uSP5jIh7wQmLnVRcRLynYepaBPQ/p0nGLloO2Q5Lek6T5Gglnkb/SaEYLQrAWR3g==", 1312 | "dev": true 1313 | }, 1314 | "node_modules/p-limit": { 1315 | "version": "3.1.0", 1316 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1317 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1318 | "dev": true, 1319 | "dependencies": { 1320 | "yocto-queue": "^0.1.0" 1321 | }, 1322 | "engines": { 1323 | "node": ">=10" 1324 | }, 1325 | "funding": { 1326 | "url": "https://github.com/sponsors/sindresorhus" 1327 | } 1328 | }, 1329 | "node_modules/p-locate": { 1330 | "version": "5.0.0", 1331 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1332 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1333 | "dev": true, 1334 | "dependencies": { 1335 | "p-limit": "^3.0.2" 1336 | }, 1337 | "engines": { 1338 | "node": ">=10" 1339 | }, 1340 | "funding": { 1341 | "url": "https://github.com/sponsors/sindresorhus" 1342 | } 1343 | }, 1344 | "node_modules/parse-srcset": { 1345 | "version": "1.0.2", 1346 | "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", 1347 | "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", 1348 | "dev": true 1349 | }, 1350 | "node_modules/path-exists": { 1351 | "version": "4.0.0", 1352 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1353 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1354 | "dev": true, 1355 | "engines": { 1356 | "node": ">=8" 1357 | } 1358 | }, 1359 | "node_modules/path-is-absolute": { 1360 | "version": "1.0.1", 1361 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1362 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1363 | "dev": true, 1364 | "engines": { 1365 | "node": ">=0.10.0" 1366 | } 1367 | }, 1368 | "node_modules/path-to-regexp": { 1369 | "version": "1.8.0", 1370 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", 1371 | "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", 1372 | "dev": true, 1373 | "dependencies": { 1374 | "isarray": "0.0.1" 1375 | } 1376 | }, 1377 | "node_modules/picocolors": { 1378 | "version": "0.2.1", 1379 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", 1380 | "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", 1381 | "dev": true 1382 | }, 1383 | "node_modules/picomatch": { 1384 | "version": "2.3.1", 1385 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1386 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1387 | "dev": true, 1388 | "engines": { 1389 | "node": ">=8.6" 1390 | }, 1391 | "funding": { 1392 | "url": "https://github.com/sponsors/jonschlinkert" 1393 | } 1394 | }, 1395 | "node_modules/postcss": { 1396 | "version": "7.0.39", 1397 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", 1398 | "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", 1399 | "dev": true, 1400 | "dependencies": { 1401 | "picocolors": "^0.2.1", 1402 | "source-map": "^0.6.1" 1403 | }, 1404 | "engines": { 1405 | "node": ">=6.0.0" 1406 | }, 1407 | "funding": { 1408 | "type": "opencollective", 1409 | "url": "https://opencollective.com/postcss/" 1410 | } 1411 | }, 1412 | "node_modules/process-nextick-args": { 1413 | "version": "2.0.1", 1414 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1415 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 1416 | "dev": true 1417 | }, 1418 | "node_modules/qs": { 1419 | "version": "6.11.2", 1420 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", 1421 | "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", 1422 | "dev": true, 1423 | "dependencies": { 1424 | "side-channel": "^1.0.4" 1425 | }, 1426 | "engines": { 1427 | "node": ">=0.6" 1428 | }, 1429 | "funding": { 1430 | "url": "https://github.com/sponsors/ljharb" 1431 | } 1432 | }, 1433 | "node_modules/randombytes": { 1434 | "version": "2.1.0", 1435 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1436 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1437 | "dev": true, 1438 | "dependencies": { 1439 | "safe-buffer": "^5.1.0" 1440 | } 1441 | }, 1442 | "node_modules/readable-stream": { 1443 | "version": "2.3.8", 1444 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", 1445 | "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", 1446 | "dev": true, 1447 | "dependencies": { 1448 | "core-util-is": "~1.0.0", 1449 | "inherits": "~2.0.3", 1450 | "isarray": "~1.0.0", 1451 | "process-nextick-args": "~2.0.0", 1452 | "safe-buffer": "~5.1.1", 1453 | "string_decoder": "~1.1.1", 1454 | "util-deprecate": "~1.0.1" 1455 | } 1456 | }, 1457 | "node_modules/readable-stream/node_modules/isarray": { 1458 | "version": "1.0.0", 1459 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1460 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 1461 | "dev": true 1462 | }, 1463 | "node_modules/readdirp": { 1464 | "version": "3.6.0", 1465 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1466 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1467 | "dev": true, 1468 | "dependencies": { 1469 | "picomatch": "^2.2.1" 1470 | }, 1471 | "engines": { 1472 | "node": ">=8.10.0" 1473 | } 1474 | }, 1475 | "node_modules/require-directory": { 1476 | "version": "2.1.1", 1477 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1478 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1479 | "dev": true, 1480 | "engines": { 1481 | "node": ">=0.10.0" 1482 | } 1483 | }, 1484 | "node_modules/requizzle": { 1485 | "version": "0.2.4", 1486 | "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", 1487 | "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", 1488 | "dev": true, 1489 | "dependencies": { 1490 | "lodash": "^4.17.21" 1491 | } 1492 | }, 1493 | "node_modules/safe-buffer": { 1494 | "version": "5.1.2", 1495 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1496 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1497 | "dev": true 1498 | }, 1499 | "node_modules/sanitize-html": { 1500 | "version": "1.27.5", 1501 | "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.27.5.tgz", 1502 | "integrity": "sha512-M4M5iXDAUEcZKLXkmk90zSYWEtk5NH3JmojQxKxV371fnMh+x9t1rqdmXaGoyEHw3z/X/8vnFhKjGL5xFGOJ3A==", 1503 | "dev": true, 1504 | "dependencies": { 1505 | "htmlparser2": "^4.1.0", 1506 | "lodash": "^4.17.15", 1507 | "parse-srcset": "^1.0.2", 1508 | "postcss": "^7.0.27" 1509 | } 1510 | }, 1511 | "node_modules/serialize-javascript": { 1512 | "version": "6.0.0", 1513 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 1514 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 1515 | "dev": true, 1516 | "dependencies": { 1517 | "randombytes": "^2.1.0" 1518 | } 1519 | }, 1520 | "node_modules/should": { 1521 | "version": "13.2.3", 1522 | "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", 1523 | "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", 1524 | "dev": true, 1525 | "dependencies": { 1526 | "should-equal": "^2.0.0", 1527 | "should-format": "^3.0.3", 1528 | "should-type": "^1.4.0", 1529 | "should-type-adaptors": "^1.0.1", 1530 | "should-util": "^1.0.0" 1531 | } 1532 | }, 1533 | "node_modules/should-equal": { 1534 | "version": "2.0.0", 1535 | "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", 1536 | "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", 1537 | "dev": true, 1538 | "dependencies": { 1539 | "should-type": "^1.4.0" 1540 | } 1541 | }, 1542 | "node_modules/should-format": { 1543 | "version": "3.0.3", 1544 | "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", 1545 | "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", 1546 | "dev": true, 1547 | "dependencies": { 1548 | "should-type": "^1.3.0", 1549 | "should-type-adaptors": "^1.0.1" 1550 | } 1551 | }, 1552 | "node_modules/should-type": { 1553 | "version": "1.4.0", 1554 | "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", 1555 | "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", 1556 | "dev": true 1557 | }, 1558 | "node_modules/should-type-adaptors": { 1559 | "version": "1.1.0", 1560 | "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", 1561 | "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", 1562 | "dev": true, 1563 | "dependencies": { 1564 | "should-type": "^1.3.0", 1565 | "should-util": "^1.0.0" 1566 | } 1567 | }, 1568 | "node_modules/should-util": { 1569 | "version": "1.0.1", 1570 | "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", 1571 | "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", 1572 | "dev": true 1573 | }, 1574 | "node_modules/side-channel": { 1575 | "version": "1.0.4", 1576 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1577 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1578 | "dev": true, 1579 | "dependencies": { 1580 | "call-bind": "^1.0.0", 1581 | "get-intrinsic": "^1.0.2", 1582 | "object-inspect": "^1.9.0" 1583 | }, 1584 | "funding": { 1585 | "url": "https://github.com/sponsors/ljharb" 1586 | } 1587 | }, 1588 | "node_modules/sinon": { 1589 | "version": "7.5.0", 1590 | "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz", 1591 | "integrity": "sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q==", 1592 | "deprecated": "16.1.1", 1593 | "dev": true, 1594 | "dependencies": { 1595 | "@sinonjs/commons": "^1.4.0", 1596 | "@sinonjs/formatio": "^3.2.1", 1597 | "@sinonjs/samsam": "^3.3.3", 1598 | "diff": "^3.5.0", 1599 | "lolex": "^4.2.0", 1600 | "nise": "^1.5.2", 1601 | "supports-color": "^5.5.0" 1602 | } 1603 | }, 1604 | "node_modules/sinon-test": { 1605 | "version": "2.4.3", 1606 | "resolved": "https://registry.npmjs.org/sinon-test/-/sinon-test-2.4.3.tgz", 1607 | "integrity": "sha512-si0GRSeYtEFj67t/nyR5BKTWhFTerFJ7Xw88EIhUT5G99bpJ0HOxZiHuJ1DFqS6S7i0RqU23H9GaVxAVf/hxow==", 1608 | "dev": true, 1609 | "peerDependencies": { 1610 | "sinon": "2.x - 9.x" 1611 | } 1612 | }, 1613 | "node_modules/sinon/node_modules/diff": { 1614 | "version": "3.5.0", 1615 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 1616 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 1617 | "dev": true, 1618 | "engines": { 1619 | "node": ">=0.3.1" 1620 | } 1621 | }, 1622 | "node_modules/sinon/node_modules/has-flag": { 1623 | "version": "3.0.0", 1624 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1625 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 1626 | "dev": true, 1627 | "engines": { 1628 | "node": ">=4" 1629 | } 1630 | }, 1631 | "node_modules/sinon/node_modules/supports-color": { 1632 | "version": "5.5.0", 1633 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1634 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1635 | "dev": true, 1636 | "dependencies": { 1637 | "has-flag": "^3.0.0" 1638 | }, 1639 | "engines": { 1640 | "node": ">=4" 1641 | } 1642 | }, 1643 | "node_modules/source-map": { 1644 | "version": "0.6.1", 1645 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1646 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1647 | "dev": true, 1648 | "engines": { 1649 | "node": ">=0.10.0" 1650 | } 1651 | }, 1652 | "node_modules/string_decoder": { 1653 | "version": "1.1.1", 1654 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1655 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1656 | "dev": true, 1657 | "dependencies": { 1658 | "safe-buffer": "~5.1.0" 1659 | } 1660 | }, 1661 | "node_modules/string-width": { 1662 | "version": "4.2.3", 1663 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1664 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1665 | "dev": true, 1666 | "dependencies": { 1667 | "emoji-regex": "^8.0.0", 1668 | "is-fullwidth-code-point": "^3.0.0", 1669 | "strip-ansi": "^6.0.1" 1670 | }, 1671 | "engines": { 1672 | "node": ">=8" 1673 | } 1674 | }, 1675 | "node_modules/strip-ansi": { 1676 | "version": "6.0.1", 1677 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1678 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1679 | "dev": true, 1680 | "dependencies": { 1681 | "ansi-regex": "^5.0.1" 1682 | }, 1683 | "engines": { 1684 | "node": ">=8" 1685 | } 1686 | }, 1687 | "node_modules/strip-json-comments": { 1688 | "version": "3.1.1", 1689 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1690 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1691 | "dev": true, 1692 | "engines": { 1693 | "node": ">=8" 1694 | }, 1695 | "funding": { 1696 | "url": "https://github.com/sponsors/sindresorhus" 1697 | } 1698 | }, 1699 | "node_modules/superagent": { 1700 | "version": "3.8.3", 1701 | "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", 1702 | "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", 1703 | "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at .", 1704 | "dev": true, 1705 | "dependencies": { 1706 | "component-emitter": "^1.2.0", 1707 | "cookiejar": "^2.1.0", 1708 | "debug": "^3.1.0", 1709 | "extend": "^3.0.0", 1710 | "form-data": "^2.3.1", 1711 | "formidable": "^1.2.0", 1712 | "methods": "^1.1.1", 1713 | "mime": "^1.4.1", 1714 | "qs": "^6.5.1", 1715 | "readable-stream": "^2.3.5" 1716 | }, 1717 | "engines": { 1718 | "node": ">= 4.0" 1719 | } 1720 | }, 1721 | "node_modules/superagent/node_modules/debug": { 1722 | "version": "3.2.7", 1723 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1724 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1725 | "dev": true, 1726 | "dependencies": { 1727 | "ms": "^2.1.1" 1728 | } 1729 | }, 1730 | "node_modules/supertest": { 1731 | "version": "4.0.2", 1732 | "resolved": "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz", 1733 | "integrity": "sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ==", 1734 | "dev": true, 1735 | "dependencies": { 1736 | "methods": "^1.1.2", 1737 | "superagent": "^3.8.3" 1738 | }, 1739 | "engines": { 1740 | "node": ">=6.0.0" 1741 | } 1742 | }, 1743 | "node_modules/supports-color": { 1744 | "version": "8.1.1", 1745 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1746 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1747 | "dev": true, 1748 | "dependencies": { 1749 | "has-flag": "^4.0.0" 1750 | }, 1751 | "engines": { 1752 | "node": ">=10" 1753 | }, 1754 | "funding": { 1755 | "url": "https://github.com/chalk/supports-color?sponsor=1" 1756 | } 1757 | }, 1758 | "node_modules/taffydb": { 1759 | "version": "2.7.3", 1760 | "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.7.3.tgz", 1761 | "integrity": "sha512-GQ3gtYFSOAxSMN/apGtDKKkbJf+8izz5YfbGqIsUc7AMiQOapARZ76dhilRY2h39cynYxBFdafQo5HUL5vgkrg==", 1762 | "dev": true 1763 | }, 1764 | "node_modules/to-regex-range": { 1765 | "version": "5.0.1", 1766 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1767 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1768 | "dev": true, 1769 | "dependencies": { 1770 | "is-number": "^7.0.0" 1771 | }, 1772 | "engines": { 1773 | "node": ">=8.0" 1774 | } 1775 | }, 1776 | "node_modules/type-detect": { 1777 | "version": "4.0.8", 1778 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 1779 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 1780 | "dev": true, 1781 | "engines": { 1782 | "node": ">=4" 1783 | } 1784 | }, 1785 | "node_modules/uc.micro": { 1786 | "version": "1.0.6", 1787 | "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", 1788 | "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", 1789 | "dev": true 1790 | }, 1791 | "node_modules/underscore": { 1792 | "version": "1.13.6", 1793 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", 1794 | "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", 1795 | "dev": true 1796 | }, 1797 | "node_modules/unit.js": { 1798 | "version": "2.1.1", 1799 | "resolved": "https://registry.npmjs.org/unit.js/-/unit.js-2.1.1.tgz", 1800 | "integrity": "sha512-v9md/m+cpqrBuZIgdj4SK774XPnkBsoByN5K0ZOozyXAY9BkWgcOr9idZrrIrU+uKxLA6E/XlClcquuIw63qwA==", 1801 | "dev": true, 1802 | "dependencies": { 1803 | "bluebird": "^3.7.1", 1804 | "lodash": "^4.17.15", 1805 | "must": "^0.13.4", 1806 | "noder.io": ">= 1.0.0 < 2.0.0", 1807 | "should": "^13.2.3", 1808 | "sinon": "^7.5.0", 1809 | "sinon-test": "^2.4.0", 1810 | "supertest": "^4.0.2" 1811 | } 1812 | }, 1813 | "node_modules/util-deprecate": { 1814 | "version": "1.0.2", 1815 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1816 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 1817 | "dev": true 1818 | }, 1819 | "node_modules/workerpool": { 1820 | "version": "6.2.1", 1821 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", 1822 | "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", 1823 | "dev": true 1824 | }, 1825 | "node_modules/wrap-ansi": { 1826 | "version": "7.0.0", 1827 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1828 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1829 | "dev": true, 1830 | "dependencies": { 1831 | "ansi-styles": "^4.0.0", 1832 | "string-width": "^4.1.0", 1833 | "strip-ansi": "^6.0.0" 1834 | }, 1835 | "engines": { 1836 | "node": ">=10" 1837 | }, 1838 | "funding": { 1839 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1840 | } 1841 | }, 1842 | "node_modules/wrappy": { 1843 | "version": "1.0.2", 1844 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1845 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1846 | "dev": true 1847 | }, 1848 | "node_modules/xmlcreate": { 1849 | "version": "2.0.4", 1850 | "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", 1851 | "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", 1852 | "dev": true 1853 | }, 1854 | "node_modules/y18n": { 1855 | "version": "5.0.8", 1856 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1857 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1858 | "dev": true, 1859 | "engines": { 1860 | "node": ">=10" 1861 | } 1862 | }, 1863 | "node_modules/yargs": { 1864 | "version": "16.2.0", 1865 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 1866 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 1867 | "dev": true, 1868 | "dependencies": { 1869 | "cliui": "^7.0.2", 1870 | "escalade": "^3.1.1", 1871 | "get-caller-file": "^2.0.5", 1872 | "require-directory": "^2.1.1", 1873 | "string-width": "^4.2.0", 1874 | "y18n": "^5.0.5", 1875 | "yargs-parser": "^20.2.2" 1876 | }, 1877 | "engines": { 1878 | "node": ">=10" 1879 | } 1880 | }, 1881 | "node_modules/yargs-parser": { 1882 | "version": "20.2.4", 1883 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 1884 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 1885 | "dev": true, 1886 | "engines": { 1887 | "node": ">=10" 1888 | } 1889 | }, 1890 | "node_modules/yargs-unparser": { 1891 | "version": "2.0.0", 1892 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 1893 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 1894 | "dev": true, 1895 | "dependencies": { 1896 | "camelcase": "^6.0.0", 1897 | "decamelize": "^4.0.0", 1898 | "flat": "^5.0.2", 1899 | "is-plain-obj": "^2.1.0" 1900 | }, 1901 | "engines": { 1902 | "node": ">=10" 1903 | } 1904 | }, 1905 | "node_modules/yocto-queue": { 1906 | "version": "0.1.0", 1907 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 1908 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 1909 | "dev": true, 1910 | "engines": { 1911 | "node": ">=10" 1912 | }, 1913 | "funding": { 1914 | "url": "https://github.com/sponsors/sindresorhus" 1915 | } 1916 | } 1917 | }, 1918 | "dependencies": { 1919 | "@babel/parser": { 1920 | "version": "7.23.0", 1921 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", 1922 | "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", 1923 | "dev": true 1924 | }, 1925 | "@jsdoc/salty": { 1926 | "version": "0.2.5", 1927 | "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", 1928 | "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", 1929 | "dev": true, 1930 | "requires": { 1931 | "lodash": "^4.17.21" 1932 | } 1933 | }, 1934 | "@sinonjs/commons": { 1935 | "version": "1.8.6", 1936 | "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", 1937 | "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", 1938 | "dev": true, 1939 | "requires": { 1940 | "type-detect": "4.0.8" 1941 | } 1942 | }, 1943 | "@sinonjs/formatio": { 1944 | "version": "3.2.2", 1945 | "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", 1946 | "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", 1947 | "dev": true, 1948 | "requires": { 1949 | "@sinonjs/commons": "^1", 1950 | "@sinonjs/samsam": "^3.1.0" 1951 | } 1952 | }, 1953 | "@sinonjs/samsam": { 1954 | "version": "3.3.3", 1955 | "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", 1956 | "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", 1957 | "dev": true, 1958 | "requires": { 1959 | "@sinonjs/commons": "^1.3.0", 1960 | "array-from": "^2.1.1", 1961 | "lodash": "^4.17.15" 1962 | } 1963 | }, 1964 | "@sinonjs/text-encoding": { 1965 | "version": "0.7.2", 1966 | "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", 1967 | "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", 1968 | "dev": true 1969 | }, 1970 | "@types/linkify-it": { 1971 | "version": "3.0.4", 1972 | "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.4.tgz", 1973 | "integrity": "sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==", 1974 | "dev": true 1975 | }, 1976 | "@types/markdown-it": { 1977 | "version": "12.2.3", 1978 | "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", 1979 | "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", 1980 | "dev": true, 1981 | "requires": { 1982 | "@types/linkify-it": "*", 1983 | "@types/mdurl": "*" 1984 | } 1985 | }, 1986 | "@types/mdurl": { 1987 | "version": "1.0.4", 1988 | "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.4.tgz", 1989 | "integrity": "sha512-ARVxjAEX5TARFRzpDRVC6cEk0hUIXCCwaMhz8y7S1/PxU6zZS1UMjyobz7q4w/D/R552r4++EhwmXK1N2rAy0A==", 1990 | "dev": true 1991 | }, 1992 | "ansi-colors": { 1993 | "version": "4.1.1", 1994 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 1995 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 1996 | "dev": true 1997 | }, 1998 | "ansi-regex": { 1999 | "version": "5.0.1", 2000 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2001 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2002 | "dev": true 2003 | }, 2004 | "ansi-styles": { 2005 | "version": "4.3.0", 2006 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2007 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2008 | "dev": true, 2009 | "requires": { 2010 | "color-convert": "^2.0.1" 2011 | } 2012 | }, 2013 | "anymatch": { 2014 | "version": "3.1.3", 2015 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 2016 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 2017 | "dev": true, 2018 | "requires": { 2019 | "normalize-path": "^3.0.0", 2020 | "picomatch": "^2.0.4" 2021 | } 2022 | }, 2023 | "argparse": { 2024 | "version": "2.0.1", 2025 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 2026 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 2027 | "dev": true 2028 | }, 2029 | "array-from": { 2030 | "version": "2.1.1", 2031 | "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", 2032 | "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==", 2033 | "dev": true 2034 | }, 2035 | "asynckit": { 2036 | "version": "0.4.0", 2037 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 2038 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 2039 | "dev": true 2040 | }, 2041 | "balanced-match": { 2042 | "version": "1.0.2", 2043 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 2044 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 2045 | "dev": true 2046 | }, 2047 | "binary-extensions": { 2048 | "version": "2.2.0", 2049 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 2050 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 2051 | "dev": true 2052 | }, 2053 | "bluebird": { 2054 | "version": "3.7.2", 2055 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 2056 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", 2057 | "dev": true 2058 | }, 2059 | "brace-expansion": { 2060 | "version": "2.0.1", 2061 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 2062 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 2063 | "dev": true, 2064 | "requires": { 2065 | "balanced-match": "^1.0.0" 2066 | } 2067 | }, 2068 | "braces": { 2069 | "version": "3.0.2", 2070 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 2071 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 2072 | "dev": true, 2073 | "requires": { 2074 | "fill-range": "^7.0.1" 2075 | } 2076 | }, 2077 | "browser-stdout": { 2078 | "version": "1.3.1", 2079 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 2080 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 2081 | "dev": true 2082 | }, 2083 | "call-bind": { 2084 | "version": "1.0.2", 2085 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 2086 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 2087 | "dev": true, 2088 | "requires": { 2089 | "function-bind": "^1.1.1", 2090 | "get-intrinsic": "^1.0.2" 2091 | } 2092 | }, 2093 | "camelcase": { 2094 | "version": "6.3.0", 2095 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 2096 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 2097 | "dev": true 2098 | }, 2099 | "catharsis": { 2100 | "version": "0.9.0", 2101 | "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", 2102 | "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", 2103 | "dev": true, 2104 | "requires": { 2105 | "lodash": "^4.17.15" 2106 | } 2107 | }, 2108 | "chalk": { 2109 | "version": "4.1.2", 2110 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2111 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2112 | "dev": true, 2113 | "requires": { 2114 | "ansi-styles": "^4.1.0", 2115 | "supports-color": "^7.1.0" 2116 | }, 2117 | "dependencies": { 2118 | "supports-color": { 2119 | "version": "7.2.0", 2120 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2121 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2122 | "dev": true, 2123 | "requires": { 2124 | "has-flag": "^4.0.0" 2125 | } 2126 | } 2127 | } 2128 | }, 2129 | "chokidar": { 2130 | "version": "3.5.3", 2131 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 2132 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 2133 | "dev": true, 2134 | "requires": { 2135 | "anymatch": "~3.1.2", 2136 | "braces": "~3.0.2", 2137 | "fsevents": "~2.3.2", 2138 | "glob-parent": "~5.1.2", 2139 | "is-binary-path": "~2.1.0", 2140 | "is-glob": "~4.0.1", 2141 | "normalize-path": "~3.0.0", 2142 | "readdirp": "~3.6.0" 2143 | } 2144 | }, 2145 | "cliui": { 2146 | "version": "7.0.4", 2147 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 2148 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 2149 | "dev": true, 2150 | "requires": { 2151 | "string-width": "^4.2.0", 2152 | "strip-ansi": "^6.0.0", 2153 | "wrap-ansi": "^7.0.0" 2154 | } 2155 | }, 2156 | "color-convert": { 2157 | "version": "2.0.1", 2158 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2159 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2160 | "dev": true, 2161 | "requires": { 2162 | "color-name": "~1.1.4" 2163 | } 2164 | }, 2165 | "color-name": { 2166 | "version": "1.1.4", 2167 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2168 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2169 | "dev": true 2170 | }, 2171 | "combined-stream": { 2172 | "version": "1.0.8", 2173 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 2174 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 2175 | "dev": true, 2176 | "requires": { 2177 | "delayed-stream": "~1.0.0" 2178 | } 2179 | }, 2180 | "component-emitter": { 2181 | "version": "1.3.0", 2182 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", 2183 | "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", 2184 | "dev": true 2185 | }, 2186 | "concat-map": { 2187 | "version": "0.0.1", 2188 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2189 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 2190 | "dev": true 2191 | }, 2192 | "cookiejar": { 2193 | "version": "2.1.4", 2194 | "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", 2195 | "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", 2196 | "dev": true 2197 | }, 2198 | "core-util-is": { 2199 | "version": "1.0.3", 2200 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 2201 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 2202 | "dev": true 2203 | }, 2204 | "debug": { 2205 | "version": "4.3.4", 2206 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2207 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2208 | "dev": true, 2209 | "requires": { 2210 | "ms": "2.1.2" 2211 | }, 2212 | "dependencies": { 2213 | "ms": { 2214 | "version": "2.1.2", 2215 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2216 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2217 | "dev": true 2218 | } 2219 | } 2220 | }, 2221 | "decamelize": { 2222 | "version": "4.0.0", 2223 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 2224 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 2225 | "dev": true 2226 | }, 2227 | "delayed-stream": { 2228 | "version": "1.0.0", 2229 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 2230 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 2231 | "dev": true 2232 | }, 2233 | "diff": { 2234 | "version": "5.0.0", 2235 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 2236 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 2237 | "dev": true 2238 | }, 2239 | "dom-serializer": { 2240 | "version": "1.4.1", 2241 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", 2242 | "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", 2243 | "dev": true, 2244 | "requires": { 2245 | "domelementtype": "^2.0.1", 2246 | "domhandler": "^4.2.0", 2247 | "entities": "^2.0.0" 2248 | }, 2249 | "dependencies": { 2250 | "domhandler": { 2251 | "version": "4.3.1", 2252 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", 2253 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", 2254 | "dev": true, 2255 | "requires": { 2256 | "domelementtype": "^2.2.0" 2257 | } 2258 | } 2259 | } 2260 | }, 2261 | "domelementtype": { 2262 | "version": "2.3.0", 2263 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 2264 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", 2265 | "dev": true 2266 | }, 2267 | "domhandler": { 2268 | "version": "3.3.0", 2269 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", 2270 | "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", 2271 | "dev": true, 2272 | "requires": { 2273 | "domelementtype": "^2.0.1" 2274 | } 2275 | }, 2276 | "domutils": { 2277 | "version": "2.8.0", 2278 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 2279 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 2280 | "dev": true, 2281 | "requires": { 2282 | "dom-serializer": "^1.0.1", 2283 | "domelementtype": "^2.2.0", 2284 | "domhandler": "^4.2.0" 2285 | }, 2286 | "dependencies": { 2287 | "domhandler": { 2288 | "version": "4.3.1", 2289 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", 2290 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", 2291 | "dev": true, 2292 | "requires": { 2293 | "domelementtype": "^2.2.0" 2294 | } 2295 | } 2296 | } 2297 | }, 2298 | "egal": { 2299 | "version": "1.3.0", 2300 | "resolved": "https://registry.npmjs.org/egal/-/egal-1.3.0.tgz", 2301 | "integrity": "sha512-K3oJQTVoCyBA1xpmHcTUPxsOuiJXDfAO9Ts2ScP2z96dxPR8g680A0BG8owH5Pwh+5FQm4M2iWv0CTwPUtLrJA==", 2302 | "dev": true, 2303 | "requires": { 2304 | "kindof": ">= 2.0.0 < 3" 2305 | } 2306 | }, 2307 | "emoji-regex": { 2308 | "version": "8.0.0", 2309 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2310 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2311 | "dev": true 2312 | }, 2313 | "entities": { 2314 | "version": "2.1.0", 2315 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", 2316 | "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", 2317 | "dev": true 2318 | }, 2319 | "escalade": { 2320 | "version": "3.1.1", 2321 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 2322 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 2323 | "dev": true 2324 | }, 2325 | "escape-string-regexp": { 2326 | "version": "2.0.0", 2327 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", 2328 | "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", 2329 | "dev": true 2330 | }, 2331 | "extend": { 2332 | "version": "3.0.2", 2333 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 2334 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 2335 | "dev": true 2336 | }, 2337 | "fill-range": { 2338 | "version": "7.0.1", 2339 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 2340 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 2341 | "dev": true, 2342 | "requires": { 2343 | "to-regex-range": "^5.0.1" 2344 | } 2345 | }, 2346 | "find-up": { 2347 | "version": "5.0.0", 2348 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2349 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2350 | "dev": true, 2351 | "requires": { 2352 | "locate-path": "^6.0.0", 2353 | "path-exists": "^4.0.0" 2354 | } 2355 | }, 2356 | "flat": { 2357 | "version": "5.0.2", 2358 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 2359 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 2360 | "dev": true 2361 | }, 2362 | "form-data": { 2363 | "version": "2.5.1", 2364 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", 2365 | "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", 2366 | "dev": true, 2367 | "requires": { 2368 | "asynckit": "^0.4.0", 2369 | "combined-stream": "^1.0.6", 2370 | "mime-types": "^2.1.12" 2371 | } 2372 | }, 2373 | "formidable": { 2374 | "version": "1.2.6", 2375 | "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", 2376 | "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", 2377 | "dev": true 2378 | }, 2379 | "fs.realpath": { 2380 | "version": "1.0.0", 2381 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2382 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 2383 | "dev": true 2384 | }, 2385 | "fsevents": { 2386 | "version": "2.3.3", 2387 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 2388 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 2389 | "dev": true, 2390 | "optional": true 2391 | }, 2392 | "function-bind": { 2393 | "version": "1.1.2", 2394 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 2395 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 2396 | "dev": true 2397 | }, 2398 | "get-caller-file": { 2399 | "version": "2.0.5", 2400 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 2401 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 2402 | "dev": true 2403 | }, 2404 | "get-intrinsic": { 2405 | "version": "1.2.1", 2406 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", 2407 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", 2408 | "dev": true, 2409 | "requires": { 2410 | "function-bind": "^1.1.1", 2411 | "has": "^1.0.3", 2412 | "has-proto": "^1.0.1", 2413 | "has-symbols": "^1.0.3" 2414 | } 2415 | }, 2416 | "glob": { 2417 | "version": "7.2.0", 2418 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 2419 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 2420 | "dev": true, 2421 | "requires": { 2422 | "fs.realpath": "^1.0.0", 2423 | "inflight": "^1.0.4", 2424 | "inherits": "2", 2425 | "minimatch": "^3.0.4", 2426 | "once": "^1.3.0", 2427 | "path-is-absolute": "^1.0.0" 2428 | }, 2429 | "dependencies": { 2430 | "brace-expansion": { 2431 | "version": "1.1.11", 2432 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2433 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2434 | "dev": true, 2435 | "requires": { 2436 | "balanced-match": "^1.0.0", 2437 | "concat-map": "0.0.1" 2438 | } 2439 | }, 2440 | "minimatch": { 2441 | "version": "3.1.2", 2442 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2443 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2444 | "dev": true, 2445 | "requires": { 2446 | "brace-expansion": "^1.1.7" 2447 | } 2448 | } 2449 | } 2450 | }, 2451 | "glob-parent": { 2452 | "version": "5.1.2", 2453 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2454 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2455 | "dev": true, 2456 | "requires": { 2457 | "is-glob": "^4.0.1" 2458 | } 2459 | }, 2460 | "graceful-fs": { 2461 | "version": "4.2.11", 2462 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 2463 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 2464 | "dev": true 2465 | }, 2466 | "has": { 2467 | "version": "1.0.4", 2468 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", 2469 | "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", 2470 | "dev": true 2471 | }, 2472 | "has-flag": { 2473 | "version": "4.0.0", 2474 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2475 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2476 | "dev": true 2477 | }, 2478 | "has-proto": { 2479 | "version": "1.0.1", 2480 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 2481 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 2482 | "dev": true 2483 | }, 2484 | "has-symbols": { 2485 | "version": "1.0.3", 2486 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 2487 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 2488 | "dev": true 2489 | }, 2490 | "he": { 2491 | "version": "1.2.0", 2492 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 2493 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 2494 | "dev": true 2495 | }, 2496 | "htmlparser2": { 2497 | "version": "4.1.0", 2498 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", 2499 | "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", 2500 | "dev": true, 2501 | "requires": { 2502 | "domelementtype": "^2.0.1", 2503 | "domhandler": "^3.0.0", 2504 | "domutils": "^2.0.0", 2505 | "entities": "^2.0.0" 2506 | } 2507 | }, 2508 | "inflight": { 2509 | "version": "1.0.6", 2510 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2511 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 2512 | "dev": true, 2513 | "requires": { 2514 | "once": "^1.3.0", 2515 | "wrappy": "1" 2516 | } 2517 | }, 2518 | "inherits": { 2519 | "version": "2.0.4", 2520 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2521 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2522 | "dev": true 2523 | }, 2524 | "ink-docstrap": { 2525 | "version": "1.3.2", 2526 | "resolved": "https://registry.npmjs.org/ink-docstrap/-/ink-docstrap-1.3.2.tgz", 2527 | "integrity": "sha512-STx5orGQU1gfrkoI/fMU7lX6CSP7LBGO10gXNgOZhwKhUqbtNjCkYSewJtNnLmWP1tAGN6oyEpG1HFPw5vpa5Q==", 2528 | "dev": true, 2529 | "requires": { 2530 | "moment": "^2.14.1", 2531 | "sanitize-html": "^1.13.0" 2532 | } 2533 | }, 2534 | "is-binary-path": { 2535 | "version": "2.1.0", 2536 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2537 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2538 | "dev": true, 2539 | "requires": { 2540 | "binary-extensions": "^2.0.0" 2541 | } 2542 | }, 2543 | "is-extglob": { 2544 | "version": "2.1.1", 2545 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2546 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2547 | "dev": true 2548 | }, 2549 | "is-fullwidth-code-point": { 2550 | "version": "3.0.0", 2551 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2552 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2553 | "dev": true 2554 | }, 2555 | "is-glob": { 2556 | "version": "4.0.3", 2557 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2558 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2559 | "dev": true, 2560 | "requires": { 2561 | "is-extglob": "^2.1.1" 2562 | } 2563 | }, 2564 | "is-number": { 2565 | "version": "7.0.0", 2566 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2567 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2568 | "dev": true 2569 | }, 2570 | "is-plain-obj": { 2571 | "version": "2.1.0", 2572 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 2573 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 2574 | "dev": true 2575 | }, 2576 | "is-unicode-supported": { 2577 | "version": "0.1.0", 2578 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 2579 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 2580 | "dev": true 2581 | }, 2582 | "isarray": { 2583 | "version": "0.0.1", 2584 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 2585 | "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", 2586 | "dev": true 2587 | }, 2588 | "js-yaml": { 2589 | "version": "4.1.0", 2590 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2591 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2592 | "dev": true, 2593 | "requires": { 2594 | "argparse": "^2.0.1" 2595 | } 2596 | }, 2597 | "js2xmlparser": { 2598 | "version": "4.0.2", 2599 | "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", 2600 | "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", 2601 | "dev": true, 2602 | "requires": { 2603 | "xmlcreate": "^2.0.4" 2604 | } 2605 | }, 2606 | "jsdoc": { 2607 | "version": "4.0.2", 2608 | "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", 2609 | "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", 2610 | "dev": true, 2611 | "requires": { 2612 | "@babel/parser": "^7.20.15", 2613 | "@jsdoc/salty": "^0.2.1", 2614 | "@types/markdown-it": "^12.2.3", 2615 | "bluebird": "^3.7.2", 2616 | "catharsis": "^0.9.0", 2617 | "escape-string-regexp": "^2.0.0", 2618 | "js2xmlparser": "^4.0.2", 2619 | "klaw": "^3.0.0", 2620 | "markdown-it": "^12.3.2", 2621 | "markdown-it-anchor": "^8.4.1", 2622 | "marked": "^4.0.10", 2623 | "mkdirp": "^1.0.4", 2624 | "requizzle": "^0.2.3", 2625 | "strip-json-comments": "^3.1.0", 2626 | "underscore": "~1.13.2" 2627 | } 2628 | }, 2629 | "json-stringify-safe": { 2630 | "version": "5.0.1", 2631 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 2632 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", 2633 | "dev": true 2634 | }, 2635 | "just-extend": { 2636 | "version": "4.2.1", 2637 | "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", 2638 | "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", 2639 | "dev": true 2640 | }, 2641 | "kindof": { 2642 | "version": "2.0.0", 2643 | "resolved": "https://registry.npmjs.org/kindof/-/kindof-2.0.0.tgz", 2644 | "integrity": "sha512-ZjkyNRo87FUdtxtpx/MLmePxaLoAhipw0CSTNgX50S1BQhPnsjkgZ/Vso0tR9pbfrzzQiAn+MSFooZAr/GfUNw==", 2645 | "dev": true 2646 | }, 2647 | "klaw": { 2648 | "version": "3.0.0", 2649 | "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", 2650 | "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", 2651 | "dev": true, 2652 | "requires": { 2653 | "graceful-fs": "^4.1.9" 2654 | } 2655 | }, 2656 | "linkify-it": { 2657 | "version": "3.0.3", 2658 | "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", 2659 | "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", 2660 | "dev": true, 2661 | "requires": { 2662 | "uc.micro": "^1.0.1" 2663 | } 2664 | }, 2665 | "locate-path": { 2666 | "version": "6.0.0", 2667 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2668 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2669 | "dev": true, 2670 | "requires": { 2671 | "p-locate": "^5.0.0" 2672 | } 2673 | }, 2674 | "lodash": { 2675 | "version": "4.17.21", 2676 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2677 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 2678 | "dev": true 2679 | }, 2680 | "lodash._createwrapper": { 2681 | "version": "3.2.0", 2682 | "resolved": "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-3.2.0.tgz", 2683 | "integrity": "sha512-O8fi7P57KZQjtTJN3tbUAJsm6Coo35JVi4OiEU/WV0rrqaWemk+rRB/1ohiIiv1cIK3dIkVhMehaFOFyNZDYkQ==", 2684 | "dev": true, 2685 | "requires": { 2686 | "lodash._root": "^3.0.0" 2687 | } 2688 | }, 2689 | "lodash._root": { 2690 | "version": "3.0.1", 2691 | "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", 2692 | "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", 2693 | "dev": true 2694 | }, 2695 | "lodash.wrap": { 2696 | "version": "3.0.1", 2697 | "resolved": "https://registry.npmjs.org/lodash.wrap/-/lodash.wrap-3.0.1.tgz", 2698 | "integrity": "sha512-DG1m5ZU7tt5HC1c/UnwhTD3gcjMfAm0JvoamALYZDSxEmQlJrGclclL9nh/WmcthxnfYN53UQa7uKYMvBV+RAg==", 2699 | "dev": true, 2700 | "requires": { 2701 | "lodash._createwrapper": "^3.0.0" 2702 | } 2703 | }, 2704 | "log-symbols": { 2705 | "version": "4.1.0", 2706 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 2707 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 2708 | "dev": true, 2709 | "requires": { 2710 | "chalk": "^4.1.0", 2711 | "is-unicode-supported": "^0.1.0" 2712 | } 2713 | }, 2714 | "lolex": { 2715 | "version": "4.2.0", 2716 | "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", 2717 | "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==", 2718 | "dev": true 2719 | }, 2720 | "markdown-it": { 2721 | "version": "12.3.2", 2722 | "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", 2723 | "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", 2724 | "dev": true, 2725 | "requires": { 2726 | "argparse": "^2.0.1", 2727 | "entities": "~2.1.0", 2728 | "linkify-it": "^3.0.1", 2729 | "mdurl": "^1.0.1", 2730 | "uc.micro": "^1.0.5" 2731 | } 2732 | }, 2733 | "markdown-it-anchor": { 2734 | "version": "8.6.7", 2735 | "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", 2736 | "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", 2737 | "dev": true, 2738 | "requires": {} 2739 | }, 2740 | "marked": { 2741 | "version": "4.3.0", 2742 | "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", 2743 | "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", 2744 | "dev": true 2745 | }, 2746 | "mdurl": { 2747 | "version": "1.0.1", 2748 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", 2749 | "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", 2750 | "dev": true 2751 | }, 2752 | "methods": { 2753 | "version": "1.1.2", 2754 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 2755 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 2756 | "dev": true 2757 | }, 2758 | "mime": { 2759 | "version": "1.6.0", 2760 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 2761 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 2762 | "dev": true 2763 | }, 2764 | "mime-db": { 2765 | "version": "1.52.0", 2766 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 2767 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 2768 | "dev": true 2769 | }, 2770 | "mime-types": { 2771 | "version": "2.1.35", 2772 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 2773 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 2774 | "dev": true, 2775 | "requires": { 2776 | "mime-db": "1.52.0" 2777 | } 2778 | }, 2779 | "minimatch": { 2780 | "version": "5.0.1", 2781 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", 2782 | "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", 2783 | "dev": true, 2784 | "requires": { 2785 | "brace-expansion": "^2.0.1" 2786 | } 2787 | }, 2788 | "mkdirp": { 2789 | "version": "1.0.4", 2790 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 2791 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 2792 | "dev": true 2793 | }, 2794 | "mocha": { 2795 | "version": "10.2.0", 2796 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", 2797 | "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", 2798 | "dev": true, 2799 | "requires": { 2800 | "ansi-colors": "4.1.1", 2801 | "browser-stdout": "1.3.1", 2802 | "chokidar": "3.5.3", 2803 | "debug": "4.3.4", 2804 | "diff": "5.0.0", 2805 | "escape-string-regexp": "4.0.0", 2806 | "find-up": "5.0.0", 2807 | "glob": "7.2.0", 2808 | "he": "1.2.0", 2809 | "js-yaml": "4.1.0", 2810 | "log-symbols": "4.1.0", 2811 | "minimatch": "5.0.1", 2812 | "ms": "2.1.3", 2813 | "nanoid": "3.3.3", 2814 | "serialize-javascript": "6.0.0", 2815 | "strip-json-comments": "3.1.1", 2816 | "supports-color": "8.1.1", 2817 | "workerpool": "6.2.1", 2818 | "yargs": "16.2.0", 2819 | "yargs-parser": "20.2.4", 2820 | "yargs-unparser": "2.0.0" 2821 | }, 2822 | "dependencies": { 2823 | "escape-string-regexp": { 2824 | "version": "4.0.0", 2825 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2826 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2827 | "dev": true 2828 | } 2829 | } 2830 | }, 2831 | "moment": { 2832 | "version": "2.29.4", 2833 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 2834 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", 2835 | "dev": true 2836 | }, 2837 | "ms": { 2838 | "version": "2.1.3", 2839 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2840 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2841 | "dev": true 2842 | }, 2843 | "must": { 2844 | "version": "0.13.4", 2845 | "resolved": "https://registry.npmjs.org/must/-/must-0.13.4.tgz", 2846 | "integrity": "sha512-5RUPT4WINrrzxC0TuOvoBFJocOAaSnhu2r+98GYYGZRcYQla4QZInNVmAnRXtveceibc1RDSP16dwKMnMJhr4Q==", 2847 | "dev": true, 2848 | "requires": { 2849 | "egal": ">= 1.3.0 < 2", 2850 | "json-stringify-safe": ">= 5 < 6", 2851 | "kindof": ">= 2.0.0 < 3", 2852 | "lodash.wrap": ">= 3 < 4", 2853 | "oolong": ">= 1.11.0 < 2" 2854 | } 2855 | }, 2856 | "nanoid": { 2857 | "version": "3.3.3", 2858 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", 2859 | "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", 2860 | "dev": true 2861 | }, 2862 | "nise": { 2863 | "version": "1.5.3", 2864 | "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", 2865 | "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==", 2866 | "dev": true, 2867 | "requires": { 2868 | "@sinonjs/formatio": "^3.2.1", 2869 | "@sinonjs/text-encoding": "^0.7.1", 2870 | "just-extend": "^4.0.2", 2871 | "lolex": "^5.0.1", 2872 | "path-to-regexp": "^1.7.0" 2873 | }, 2874 | "dependencies": { 2875 | "lolex": { 2876 | "version": "5.1.2", 2877 | "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", 2878 | "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", 2879 | "dev": true, 2880 | "requires": { 2881 | "@sinonjs/commons": "^1.7.0" 2882 | } 2883 | } 2884 | } 2885 | }, 2886 | "noder.io": { 2887 | "version": "1.2.0", 2888 | "resolved": "https://registry.npmjs.org/noder.io/-/noder.io-1.2.0.tgz", 2889 | "integrity": "sha512-CC8J7QdQYeZeR4e0a1LcqP4+PvVmOBWO4m0mKOnKmIxn4S/+TnBkGhrq69uOHSw4k5899PLJhstkzz7ErKJAkQ==", 2890 | "dev": true 2891 | }, 2892 | "normalize-path": { 2893 | "version": "3.0.0", 2894 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2895 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2896 | "dev": true 2897 | }, 2898 | "object-inspect": { 2899 | "version": "1.13.0", 2900 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.0.tgz", 2901 | "integrity": "sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==", 2902 | "dev": true 2903 | }, 2904 | "once": { 2905 | "version": "1.4.0", 2906 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2907 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2908 | "dev": true, 2909 | "requires": { 2910 | "wrappy": "1" 2911 | } 2912 | }, 2913 | "oolong": { 2914 | "version": "1.15.1", 2915 | "resolved": "https://registry.npmjs.org/oolong/-/oolong-1.15.1.tgz", 2916 | "integrity": "sha512-I2XTx2/q8CsAXrAnoczmX0uSP5jIh7wQmLnVRcRLynYepaBPQ/p0nGLloO2Q5Lek6T5Gglnkb/SaEYLQrAWR3g==", 2917 | "dev": true 2918 | }, 2919 | "p-limit": { 2920 | "version": "3.1.0", 2921 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2922 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2923 | "dev": true, 2924 | "requires": { 2925 | "yocto-queue": "^0.1.0" 2926 | } 2927 | }, 2928 | "p-locate": { 2929 | "version": "5.0.0", 2930 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2931 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2932 | "dev": true, 2933 | "requires": { 2934 | "p-limit": "^3.0.2" 2935 | } 2936 | }, 2937 | "parse-srcset": { 2938 | "version": "1.0.2", 2939 | "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", 2940 | "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", 2941 | "dev": true 2942 | }, 2943 | "path-exists": { 2944 | "version": "4.0.0", 2945 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2946 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2947 | "dev": true 2948 | }, 2949 | "path-is-absolute": { 2950 | "version": "1.0.1", 2951 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2952 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2953 | "dev": true 2954 | }, 2955 | "path-to-regexp": { 2956 | "version": "1.8.0", 2957 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", 2958 | "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", 2959 | "dev": true, 2960 | "requires": { 2961 | "isarray": "0.0.1" 2962 | } 2963 | }, 2964 | "picocolors": { 2965 | "version": "0.2.1", 2966 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", 2967 | "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", 2968 | "dev": true 2969 | }, 2970 | "picomatch": { 2971 | "version": "2.3.1", 2972 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2973 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2974 | "dev": true 2975 | }, 2976 | "postcss": { 2977 | "version": "7.0.39", 2978 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", 2979 | "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", 2980 | "dev": true, 2981 | "requires": { 2982 | "picocolors": "^0.2.1", 2983 | "source-map": "^0.6.1" 2984 | } 2985 | }, 2986 | "process-nextick-args": { 2987 | "version": "2.0.1", 2988 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 2989 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 2990 | "dev": true 2991 | }, 2992 | "qs": { 2993 | "version": "6.11.2", 2994 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", 2995 | "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", 2996 | "dev": true, 2997 | "requires": { 2998 | "side-channel": "^1.0.4" 2999 | } 3000 | }, 3001 | "randombytes": { 3002 | "version": "2.1.0", 3003 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 3004 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 3005 | "dev": true, 3006 | "requires": { 3007 | "safe-buffer": "^5.1.0" 3008 | } 3009 | }, 3010 | "readable-stream": { 3011 | "version": "2.3.8", 3012 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", 3013 | "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", 3014 | "dev": true, 3015 | "requires": { 3016 | "core-util-is": "~1.0.0", 3017 | "inherits": "~2.0.3", 3018 | "isarray": "~1.0.0", 3019 | "process-nextick-args": "~2.0.0", 3020 | "safe-buffer": "~5.1.1", 3021 | "string_decoder": "~1.1.1", 3022 | "util-deprecate": "~1.0.1" 3023 | }, 3024 | "dependencies": { 3025 | "isarray": { 3026 | "version": "1.0.0", 3027 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 3028 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 3029 | "dev": true 3030 | } 3031 | } 3032 | }, 3033 | "readdirp": { 3034 | "version": "3.6.0", 3035 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 3036 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 3037 | "dev": true, 3038 | "requires": { 3039 | "picomatch": "^2.2.1" 3040 | } 3041 | }, 3042 | "require-directory": { 3043 | "version": "2.1.1", 3044 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 3045 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 3046 | "dev": true 3047 | }, 3048 | "requizzle": { 3049 | "version": "0.2.4", 3050 | "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", 3051 | "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", 3052 | "dev": true, 3053 | "requires": { 3054 | "lodash": "^4.17.21" 3055 | } 3056 | }, 3057 | "safe-buffer": { 3058 | "version": "5.1.2", 3059 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 3060 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 3061 | "dev": true 3062 | }, 3063 | "sanitize-html": { 3064 | "version": "1.27.5", 3065 | "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.27.5.tgz", 3066 | "integrity": "sha512-M4M5iXDAUEcZKLXkmk90zSYWEtk5NH3JmojQxKxV371fnMh+x9t1rqdmXaGoyEHw3z/X/8vnFhKjGL5xFGOJ3A==", 3067 | "dev": true, 3068 | "requires": { 3069 | "htmlparser2": "^4.1.0", 3070 | "lodash": "^4.17.15", 3071 | "parse-srcset": "^1.0.2", 3072 | "postcss": "^7.0.27" 3073 | } 3074 | }, 3075 | "serialize-javascript": { 3076 | "version": "6.0.0", 3077 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 3078 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 3079 | "dev": true, 3080 | "requires": { 3081 | "randombytes": "^2.1.0" 3082 | } 3083 | }, 3084 | "should": { 3085 | "version": "13.2.3", 3086 | "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", 3087 | "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", 3088 | "dev": true, 3089 | "requires": { 3090 | "should-equal": "^2.0.0", 3091 | "should-format": "^3.0.3", 3092 | "should-type": "^1.4.0", 3093 | "should-type-adaptors": "^1.0.1", 3094 | "should-util": "^1.0.0" 3095 | } 3096 | }, 3097 | "should-equal": { 3098 | "version": "2.0.0", 3099 | "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", 3100 | "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", 3101 | "dev": true, 3102 | "requires": { 3103 | "should-type": "^1.4.0" 3104 | } 3105 | }, 3106 | "should-format": { 3107 | "version": "3.0.3", 3108 | "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", 3109 | "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", 3110 | "dev": true, 3111 | "requires": { 3112 | "should-type": "^1.3.0", 3113 | "should-type-adaptors": "^1.0.1" 3114 | } 3115 | }, 3116 | "should-type": { 3117 | "version": "1.4.0", 3118 | "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", 3119 | "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", 3120 | "dev": true 3121 | }, 3122 | "should-type-adaptors": { 3123 | "version": "1.1.0", 3124 | "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", 3125 | "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", 3126 | "dev": true, 3127 | "requires": { 3128 | "should-type": "^1.3.0", 3129 | "should-util": "^1.0.0" 3130 | } 3131 | }, 3132 | "should-util": { 3133 | "version": "1.0.1", 3134 | "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", 3135 | "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", 3136 | "dev": true 3137 | }, 3138 | "side-channel": { 3139 | "version": "1.0.4", 3140 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 3141 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 3142 | "dev": true, 3143 | "requires": { 3144 | "call-bind": "^1.0.0", 3145 | "get-intrinsic": "^1.0.2", 3146 | "object-inspect": "^1.9.0" 3147 | } 3148 | }, 3149 | "sinon": { 3150 | "version": "7.5.0", 3151 | "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz", 3152 | "integrity": "sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q==", 3153 | "dev": true, 3154 | "requires": { 3155 | "@sinonjs/commons": "^1.4.0", 3156 | "@sinonjs/formatio": "^3.2.1", 3157 | "@sinonjs/samsam": "^3.3.3", 3158 | "diff": "^3.5.0", 3159 | "lolex": "^4.2.0", 3160 | "nise": "^1.5.2", 3161 | "supports-color": "^5.5.0" 3162 | }, 3163 | "dependencies": { 3164 | "diff": { 3165 | "version": "3.5.0", 3166 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 3167 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 3168 | "dev": true 3169 | }, 3170 | "has-flag": { 3171 | "version": "3.0.0", 3172 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 3173 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 3174 | "dev": true 3175 | }, 3176 | "supports-color": { 3177 | "version": "5.5.0", 3178 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 3179 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 3180 | "dev": true, 3181 | "requires": { 3182 | "has-flag": "^3.0.0" 3183 | } 3184 | } 3185 | } 3186 | }, 3187 | "sinon-test": { 3188 | "version": "2.4.3", 3189 | "resolved": "https://registry.npmjs.org/sinon-test/-/sinon-test-2.4.3.tgz", 3190 | "integrity": "sha512-si0GRSeYtEFj67t/nyR5BKTWhFTerFJ7Xw88EIhUT5G99bpJ0HOxZiHuJ1DFqS6S7i0RqU23H9GaVxAVf/hxow==", 3191 | "dev": true, 3192 | "requires": {} 3193 | }, 3194 | "source-map": { 3195 | "version": "0.6.1", 3196 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3197 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3198 | "dev": true 3199 | }, 3200 | "string_decoder": { 3201 | "version": "1.1.1", 3202 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 3203 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 3204 | "dev": true, 3205 | "requires": { 3206 | "safe-buffer": "~5.1.0" 3207 | } 3208 | }, 3209 | "string-width": { 3210 | "version": "4.2.3", 3211 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3212 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3213 | "dev": true, 3214 | "requires": { 3215 | "emoji-regex": "^8.0.0", 3216 | "is-fullwidth-code-point": "^3.0.0", 3217 | "strip-ansi": "^6.0.1" 3218 | } 3219 | }, 3220 | "strip-ansi": { 3221 | "version": "6.0.1", 3222 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3223 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3224 | "dev": true, 3225 | "requires": { 3226 | "ansi-regex": "^5.0.1" 3227 | } 3228 | }, 3229 | "strip-json-comments": { 3230 | "version": "3.1.1", 3231 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3232 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3233 | "dev": true 3234 | }, 3235 | "superagent": { 3236 | "version": "3.8.3", 3237 | "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", 3238 | "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", 3239 | "dev": true, 3240 | "requires": { 3241 | "component-emitter": "^1.2.0", 3242 | "cookiejar": "^2.1.0", 3243 | "debug": "^3.1.0", 3244 | "extend": "^3.0.0", 3245 | "form-data": "^2.3.1", 3246 | "formidable": "^1.2.0", 3247 | "methods": "^1.1.1", 3248 | "mime": "^1.4.1", 3249 | "qs": "^6.5.1", 3250 | "readable-stream": "^2.3.5" 3251 | }, 3252 | "dependencies": { 3253 | "debug": { 3254 | "version": "3.2.7", 3255 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 3256 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 3257 | "dev": true, 3258 | "requires": { 3259 | "ms": "^2.1.1" 3260 | } 3261 | } 3262 | } 3263 | }, 3264 | "supertest": { 3265 | "version": "4.0.2", 3266 | "resolved": "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz", 3267 | "integrity": "sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ==", 3268 | "dev": true, 3269 | "requires": { 3270 | "methods": "^1.1.2", 3271 | "superagent": "^3.8.3" 3272 | } 3273 | }, 3274 | "supports-color": { 3275 | "version": "8.1.1", 3276 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 3277 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 3278 | "dev": true, 3279 | "requires": { 3280 | "has-flag": "^4.0.0" 3281 | } 3282 | }, 3283 | "taffydb": { 3284 | "version": "2.7.3", 3285 | "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.7.3.tgz", 3286 | "integrity": "sha512-GQ3gtYFSOAxSMN/apGtDKKkbJf+8izz5YfbGqIsUc7AMiQOapARZ76dhilRY2h39cynYxBFdafQo5HUL5vgkrg==", 3287 | "dev": true 3288 | }, 3289 | "to-regex-range": { 3290 | "version": "5.0.1", 3291 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3292 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3293 | "dev": true, 3294 | "requires": { 3295 | "is-number": "^7.0.0" 3296 | } 3297 | }, 3298 | "type-detect": { 3299 | "version": "4.0.8", 3300 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 3301 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 3302 | "dev": true 3303 | }, 3304 | "uc.micro": { 3305 | "version": "1.0.6", 3306 | "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", 3307 | "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", 3308 | "dev": true 3309 | }, 3310 | "underscore": { 3311 | "version": "1.13.6", 3312 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", 3313 | "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", 3314 | "dev": true 3315 | }, 3316 | "unit.js": { 3317 | "version": "2.1.1", 3318 | "resolved": "https://registry.npmjs.org/unit.js/-/unit.js-2.1.1.tgz", 3319 | "integrity": "sha512-v9md/m+cpqrBuZIgdj4SK774XPnkBsoByN5K0ZOozyXAY9BkWgcOr9idZrrIrU+uKxLA6E/XlClcquuIw63qwA==", 3320 | "dev": true, 3321 | "requires": { 3322 | "bluebird": "^3.7.1", 3323 | "lodash": "^4.17.15", 3324 | "must": "^0.13.4", 3325 | "noder.io": ">= 1.0.0 < 2.0.0", 3326 | "should": "^13.2.3", 3327 | "sinon": "^7.5.0", 3328 | "sinon-test": "^2.4.0", 3329 | "supertest": "^4.0.2" 3330 | } 3331 | }, 3332 | "util-deprecate": { 3333 | "version": "1.0.2", 3334 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3335 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 3336 | "dev": true 3337 | }, 3338 | "workerpool": { 3339 | "version": "6.2.1", 3340 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", 3341 | "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", 3342 | "dev": true 3343 | }, 3344 | "wrap-ansi": { 3345 | "version": "7.0.0", 3346 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3347 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3348 | "dev": true, 3349 | "requires": { 3350 | "ansi-styles": "^4.0.0", 3351 | "string-width": "^4.1.0", 3352 | "strip-ansi": "^6.0.0" 3353 | } 3354 | }, 3355 | "wrappy": { 3356 | "version": "1.0.2", 3357 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3358 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3359 | "dev": true 3360 | }, 3361 | "xmlcreate": { 3362 | "version": "2.0.4", 3363 | "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", 3364 | "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", 3365 | "dev": true 3366 | }, 3367 | "y18n": { 3368 | "version": "5.0.8", 3369 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 3370 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 3371 | "dev": true 3372 | }, 3373 | "yargs": { 3374 | "version": "16.2.0", 3375 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 3376 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 3377 | "dev": true, 3378 | "requires": { 3379 | "cliui": "^7.0.2", 3380 | "escalade": "^3.1.1", 3381 | "get-caller-file": "^2.0.5", 3382 | "require-directory": "^2.1.1", 3383 | "string-width": "^4.2.0", 3384 | "y18n": "^5.0.5", 3385 | "yargs-parser": "^20.2.2" 3386 | } 3387 | }, 3388 | "yargs-parser": { 3389 | "version": "20.2.4", 3390 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 3391 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 3392 | "dev": true 3393 | }, 3394 | "yargs-unparser": { 3395 | "version": "2.0.0", 3396 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 3397 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 3398 | "dev": true, 3399 | "requires": { 3400 | "camelcase": "^6.0.0", 3401 | "decamelize": "^4.0.0", 3402 | "flat": "^5.0.2", 3403 | "is-plain-obj": "^2.1.0" 3404 | } 3405 | }, 3406 | "yocto-queue": { 3407 | "version": "0.1.0", 3408 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3409 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3410 | "dev": true 3411 | } 3412 | } 3413 | } 3414 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "winreg", 3 | "version": "1.2.5", 4 | "description": "provides access to the windows registry through the REG tool", 5 | "main": "lib/registry.js", 6 | "scripts": { 7 | "test": "mocha test", 8 | "generate-docs": "jsdoc -c ./jsdoc.conf.json", 9 | "download-docs": "git clone -b gh-pages https://github.com/fresc81/node-winreg.git docs", 10 | "checkout-docs": "git clone -b gh-pages git@github.com:fresc81/node-winreg.git docs" 11 | }, 12 | "homepage": "http://fresc81.github.io/node-winreg", 13 | "repository": { 14 | "type": "git", 15 | "url": "git://github.com/fresc81/node-winreg.git" 16 | }, 17 | "keywords": [ 18 | "windows", 19 | "registry" 20 | ], 21 | "author": "Paul Bottin", 22 | "license": "BSD-2-Clause", 23 | "readmeFilename": "README.md", 24 | "gitHead": "36cfe63a8dcb700cf44b0b7317827099d19c26c1", 25 | "devDependencies": { 26 | "ink-docstrap": "^1.3.2", 27 | "jsdoc": "^4.0.2", 28 | "mocha": "^10.2.0", 29 | "moment": "^2.11.2", 30 | "taffydb": "^2.7.3", 31 | "unit.js": "^2.0.0" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | 2 | // this should reveal wrong iteration on arrays 3 | Array.prototype.someNewMethod = function() {}; 4 | 5 | var test = require('unit.js'); 6 | 7 | describe('winreg', function(){ 8 | 9 | it('running on Windows', function () { 10 | 11 | test.string(process.platform) 12 | . is('win32'); 13 | 14 | }); 15 | 16 | // Registry class 17 | var Registry = require(__dirname+'/../lib/registry.js'); 18 | 19 | it('Registry is a class', function () { 20 | 21 | test.function(Registry) 22 | . hasName('Registry'); 23 | 24 | }); 25 | 26 | // create a uniqe registry key in HKCU to test in 27 | var regKey = new Registry({ 28 | hive: Registry.HKCU, 29 | key: '\\Software\\AAA_' + new Date().toISOString() 30 | }); 31 | 32 | it('regKey is instance of Registry', function(){ 33 | 34 | test.object(regKey) 35 | . isInstanceOf(Registry); 36 | 37 | }); 38 | 39 | // a key that has subkeys in it 40 | var softwareKey = new Registry({ 41 | hive: Registry.HKCU, 42 | key: '\\Software' 43 | }); 44 | 45 | it('softwareKey is instance of Registry', function(){ 46 | 47 | test.object(softwareKey) 48 | . isInstanceOf(Registry); 49 | 50 | }); 51 | 52 | it('can change the prototype', function (done) { 53 | 54 | var magicString = new Date().toISOString(); 55 | 56 | Registry.prototype.toString = function () { 57 | return magicString; 58 | }; 59 | 60 | var instance = new Registry({ 61 | hive: Registry.HKCU, 62 | key: '\\Software' 63 | }); 64 | 65 | test.string(instance.toString()) 66 | . is(magicString); 67 | 68 | done(); 69 | }); 70 | 71 | describe('Registry', function (){ 72 | 73 | describe('keyExists()', function(){ 74 | 75 | it('regKey has keyExists method', function () { 76 | 77 | test.object(regKey) 78 | . hasProperty('keyExists'); 79 | 80 | test.function(regKey.keyExists) 81 | . hasName('keyExists'); 82 | 83 | }); 84 | 85 | it('regKey does not already exist', function(done) { 86 | 87 | regKey.keyExists(function (err, exists) { 88 | 89 | if (err) throw err; 90 | 91 | test.bool(exists) 92 | . isNotTrue(); 93 | 94 | done(); 95 | 96 | }); 97 | 98 | }); 99 | 100 | }); // end - describe keyExists() 101 | 102 | describe('create()', function(){ 103 | 104 | it('regKey has create method', function () { 105 | 106 | test.object(regKey) 107 | . hasProperty('create'); 108 | 109 | test.function(regKey.create) 110 | . hasName('create'); 111 | 112 | }); 113 | 114 | it('regKey can be created', function(done) { 115 | 116 | regKey.create(function (err) { 117 | 118 | if (err) throw err; 119 | 120 | done(); 121 | 122 | }); 123 | 124 | }); 125 | 126 | it('regKey exists after being created', function(done) { 127 | 128 | regKey.keyExists(function (err, exists) { 129 | 130 | if (err) throw err; 131 | 132 | test.bool(exists) 133 | . isTrue(); 134 | 135 | done(); 136 | 137 | }); 138 | 139 | }); 140 | 141 | }); // end - describe create() 142 | 143 | describe('set()', function (){ 144 | 145 | it('regKey has set method', function () { 146 | 147 | test.object(regKey) 148 | . hasProperty('set'); 149 | 150 | test.function(regKey.set) 151 | . hasName('set'); 152 | 153 | }); 154 | 155 | it('can set a string value', function (done) { 156 | 157 | regKey.set('SomeString', Registry.REG_SZ, 'SomeValue', function (err) { 158 | 159 | if (err) throw err; 160 | 161 | done(); 162 | 163 | }); 164 | 165 | }); 166 | 167 | }); // end - describe set 168 | 169 | describe('valueExists()', function (){ 170 | 171 | it('regKey has valueExists method', function () { 172 | 173 | test.object(regKey) 174 | . hasProperty('valueExists'); 175 | 176 | test.function(regKey.valueExists) 177 | . hasName('valueExists'); 178 | 179 | }); 180 | 181 | it('can check for existing string value', function (done) { 182 | 183 | regKey.valueExists('SomeString', function (err, exists) { 184 | 185 | if (err) throw err; 186 | 187 | test.bool(exists) 188 | . isTrue(); 189 | 190 | done(); 191 | 192 | }); 193 | 194 | }); 195 | 196 | }); // end - describe valueExists 197 | 198 | describe('get()', function (){ 199 | 200 | it('regKey has get method', function () { 201 | 202 | test.object(regKey) 203 | . hasProperty('get'); 204 | 205 | test.function(regKey.get) 206 | . hasName('get'); 207 | 208 | }); 209 | 210 | it('can get a string value', function (done) { 211 | 212 | regKey.get('SomeString', function (err, item) { 213 | 214 | if (err) throw err; 215 | 216 | test.object(item) 217 | . hasProperty('value', 'SomeValue'); 218 | 219 | done(); 220 | 221 | }); 222 | 223 | }); 224 | 225 | }); // end - describe get 226 | 227 | describe('values()', function (){ 228 | 229 | it('regKey has values method', function () { 230 | 231 | test.object(regKey) 232 | . hasProperty('values'); 233 | 234 | test.function(regKey.values) 235 | . hasName('values'); 236 | 237 | }); 238 | 239 | it('returns array of RegistryItem objects', function (done) { 240 | 241 | regKey.values(function (err, items) { 242 | 243 | if (err) throw err; 244 | 245 | for (var i=0; i