├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── README.md ├── index.html ├── js └── app.js ├── package-lock.json ├── package.json └── shell.nix /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true 4 | }, 5 | "extends": "eslint:recommended", 6 | "parserOptions": { 7 | "ecmaVersion": 6, 8 | "sourceType": "module" 9 | }, 10 | "rules": { 11 | "indent": [ 12 | "error", 13 | 4 14 | ], 15 | "no-var": ["error"], 16 | "linebreak-style": ["error", "unix"], 17 | "semi": [ 18 | "error", 19 | "always" 20 | ], 21 | "indent": "off", 22 | "no-unused-vars": ["warn", { "args": "all", "argsIgnorePattern": "^_" }] 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | 3 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "bracketSpacing": false, 4 | "tabWidth": 2 5 | } 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HTML Is A Programming Language 2 | 3 | The following material is taken from a research project by an expert to end the eternal discusion. 4 | 5 | ## Language Overview 6 | 7 | To avoid introducing a parser for arithmetic/comparison/logic expressions I did 8 | what any sensible person would do, create a stack language hybrid. 9 | 10 | ### Character 11 | 12 | It is a single character. (`a-z,@,#,$,%,^,&,*,...`) 13 | 14 | ### Numbers 15 | 16 | `1, 2, 3, 4, 5, 6, 7, 8, 9, 0` 17 | 18 | ### Booleans 19 | 20 | `true`, `false` 21 | 22 | ### Variables 23 | 24 | `$foo`, `$bar` 25 | 26 | ### Strings 27 | 28 | Anything that is not character value is considered a string, no quotes needed 29 | 30 | ## Language Constructs 31 | 32 | ### v 33 | 34 | Put the value in the document 35 | 36 | Example: put the value of variable `$i` in the document 37 | 38 | `` 39 | 40 | ### let 41 | 42 | Binds variables to values (see literals above), for example: 43 | 44 | ```html 45 | 46 |

String:

47 |

Number:

48 |

Boolean:

49 |

Variable:

50 |
51 | ``` 52 | 53 | Will generate: 54 | 55 | ```html 56 | String: hello 57 | 58 | Number: 4 59 | 60 | Boolean: true 61 | 62 | Variable: hello 63 | ``` 64 | 65 | ### cond 66 | 67 | Evaluate conditions in order, return the body of the first that matches or `else` if 68 | present and no other `if` matches 69 | 70 | ```html 71 | 72 |

FizzBuzz

73 | 74 |

Fizz

75 | 76 |

Buzz

77 | 78 |

79 |
80 | ``` 81 | 82 | Note: any other HTML tags or expressions are evaluated if present inside `cond` until 83 | the first if/else match, for example: 84 | 85 | ```html 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 |

FizzBuzz

99 | 100 |

Fizz

101 | 102 |

Buzz

103 | 104 |

105 |
106 | ``` 107 | 108 | ### if 109 | 110 | Embed the tag's body if the condition evaluates to true. 111 | 112 | Note: can be used inside cond where if true stops evaluating conditions (like if/else 113 | if) or outside where it works like a single if without else if/else branches. 114 | 115 | ### else 116 | 117 | Embed the tag's body if the tag is reached inside a `cond` tag. 118 | 119 | Note: if used outside a `cond` it will always embed its body. 120 | 121 | ### for 122 | 123 | Binds each item in an iterator to a variable and embeds the body of the `for` tag 124 | as many times as items in the iterator with the item bound to the provided variable. 125 | 126 | ```html 127 | 128 | 129 | 130 | 131 | 132 | ``` 133 | 134 | ### defn 135 | 136 | Define a function that can later be called with the `do` tag. 137 | 138 | ```html 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | ``` 147 | 148 | ### do 149 | 150 | Call a function with a name and 0 or more parameters 151 | 152 | Push value in variable `$i` to the stack: `` 153 | Push number 3 to the stack: `` 154 | Call reminder (takes 2 values from the stack and pushes the result): `` 155 | 156 | Call user defined function `calc-is-mod` passing variable `$i` and number `3` as parameter: `` 157 | 158 | ### nb 159 | 160 | A [comment](https://dictionary.cambridge.org/dictionary/english/nb) whose body is logged to the console 161 | 162 | `i = i % 3 == 0? ` will print something like `i = 1 i % 3 == 0? false` to the console 163 | 164 | ## Examples 165 | 166 | ### Simple Fizzbuzz 167 | 168 | ```html 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | i = i % 3 == 0? 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | i = i % 4 == 0? 187 | 188 | 189 | 190 | 191 | 192 | i = i % 3 == 0 and i % 4 == 0? 193 | 194 | 195 |

FizzBuzz

196 | 197 |

Fizz

198 | 199 |

Buzz

200 | 201 |

202 |
203 |
204 | ``` 205 | 206 | ### Fizzbuzz with Functions 207 | 208 | ```html 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | i = i % 3 == 0? 224 | 225 | 226 | 227 | i = i % 4 == 0? 228 | 229 | 230 | 231 | 232 | 233 | i = i % 3 == 0 and i % 4 == 0? 234 | 235 | 236 |

FizzBuzz

237 | 238 |

Fizz

239 | 240 |

Buzz

241 | 242 |

243 |
244 |
245 |
246 | 247 | 248 | 249 | ``` 250 | 251 | ### Counter 252 | 253 | A counter with two buttons, one to increment and one to decrement, the counter markup 254 | is: 255 | 256 | ```html 257 | 258 | 259 | 260 | ``` 261 | 262 | ```html 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | ``` 289 | 290 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | HTML is a Programming Language 7 | 8 | 9 | 10 |

Read the source, check the dev console or read the description at HTML-is-a-Programming-Language

11 | 12 | 43 | 44 | 83 | 84 | 128 | 129 | 158 | 159 | 160 | 161 | 162 | 163 |
164 | 165 |
166 |

Overview Output

167 |
168 | 169 |
170 |

Fizzbuzz 2 Output

171 |
172 | 173 | 174 | 181 | 182 | 183 | -------------------------------------------------------------------------------- /js/app.js: -------------------------------------------------------------------------------- 1 | //@format 2 | 3 | class ANode { 4 | eval(_env) { 5 | console.warn('ANode.eval', this); 6 | return nullNode(); 7 | } 8 | evalToValue(_env) { 9 | return null; 10 | } 11 | } 12 | 13 | class ValueNode extends ANode { 14 | constructor(v) { 15 | super(); 16 | this.v = v; 17 | } 18 | 19 | evalToValue(env) { 20 | return this.v.eval(env); 21 | } 22 | 23 | eval(env) { 24 | return document.createTextNode('' + this.evalToValue(env)); 25 | } 26 | } 27 | 28 | class InfoNode extends ANode { 29 | constructor(body) { 30 | super(); 31 | this.body = body; 32 | } 33 | 34 | evalToValue(_env) { 35 | return null; 36 | } 37 | 38 | eval(env) { 39 | console.info.apply( 40 | console, 41 | this.body.map((child) => child.evalToValue(env)) 42 | ); 43 | return null; 44 | } 45 | } 46 | 47 | class CommentNode extends ANode { 48 | constructor(body) { 49 | super(); 50 | this.body = body; 51 | } 52 | 53 | evalToValue(_env) { 54 | return null; 55 | } 56 | 57 | eval(_env) { 58 | return document.createComment(this.body); 59 | } 60 | } 61 | 62 | function nullNode() { 63 | return null; 64 | } 65 | 66 | class DefnNode extends ANode { 67 | constructor(name, args, body) { 68 | super(); 69 | this.name = name; 70 | this.args = args; 71 | this.body = body; 72 | } 73 | 74 | eval(env) { 75 | const fnName = this.name.eval(env), 76 | // all should be strings 77 | argNames = this.args.map((arg) => arg.eval(env)); 78 | env.setFn(fnName, new Fn(fnName, argNames, this.body)); 79 | return nullNode(); 80 | } 81 | } 82 | 83 | class LetNode extends ANode { 84 | constructor(binds, body) { 85 | super(); 86 | this.binds = binds; 87 | this.body = body; 88 | } 89 | 90 | eval(env0) { 91 | const env = env0.enter(); 92 | for (let bind of this.binds) { 93 | if (bind instanceof KeyVal) { 94 | env.set(bind.key, bind.val.eval(env)); 95 | } 96 | } 97 | 98 | return this.body.map((child) => child.eval(env)); 99 | } 100 | } 101 | class CondNode extends ANode { 102 | constructor(body) { 103 | super(); 104 | this.body = body; 105 | } 106 | 107 | eval(env) { 108 | for (let node of this.body) { 109 | if (node instanceof ElseNode) { 110 | return node.eval(env); 111 | } else if (node instanceof IfNode && node.shouldEval(env)) { 112 | return node.evalTrue(env); 113 | } else { 114 | node.eval(env); 115 | } 116 | } 117 | 118 | return nullNode(); 119 | } 120 | } 121 | class ForNode extends ANode { 122 | constructor(bind, iter, body) { 123 | super(); 124 | this.bind = bind; 125 | this.iter = iter; 126 | this.body = body; 127 | } 128 | 129 | eval(env0) { 130 | const varName = this.bind.eval(env0), 131 | items = this.iter.eval(env0), 132 | env = env0.enter(), 133 | result = []; 134 | 135 | for (let item of items) { 136 | env.set(varName, item); 137 | result.push(this.body.map((child) => child.eval(env))); 138 | } 139 | 140 | return result; 141 | } 142 | } 143 | class CallNode extends ANode { 144 | constructor(fn, args) { 145 | super(); 146 | this.fn = fn; 147 | this.args = args; 148 | } 149 | 150 | eval(env) { 151 | const fnName = this.fn.eval(env), 152 | fn = env.lookupFn(fnName); 153 | 154 | if (fn) { 155 | const args = this.args.map((arg) => arg.eval(env)), 156 | result = fn.eval(env, args); 157 | return result === undefined ? null : result; 158 | } else { 159 | console.warn(fnName, 'not found'); 160 | return nullNode(); 161 | } 162 | } 163 | } 164 | 165 | class IfNode extends ANode { 166 | constructor(args, body) { 167 | super(); 168 | this.args = args; 169 | this.body = body; 170 | } 171 | 172 | shouldEval(env) { 173 | // TODO: 174 | // a 175 | // a=b 176 | // a ne b 177 | const head = this.args[0], 178 | v = head.eval(env); 179 | return !!v; 180 | } 181 | 182 | eval(env) { 183 | if (this.shouldEval(env)) { 184 | return this.evalTrue(env); 185 | } else { 186 | return nullNode(); 187 | } 188 | } 189 | 190 | evalTrue(env) { 191 | return this.body.map((child) => child.eval(env)); 192 | } 193 | } 194 | 195 | class ElseNode extends ANode { 196 | constructor(body) { 197 | super(); 198 | this.body = body; 199 | } 200 | 201 | eval(env) { 202 | return this.body.map((child) => child.eval(env)); 203 | } 204 | } 205 | 206 | function flattenAppend(node, nodes) { 207 | for (let child of nodes) { 208 | if (child === null) { 209 | continue; 210 | } 211 | 212 | if (Array.isArray(child)) { 213 | flattenAppend(node, child); 214 | } else if (child instanceof Node) { 215 | node.appendChild(child); 216 | } else { 217 | node.appendChild(document.createTextNode('' + child)); 218 | } 219 | } 220 | } 221 | 222 | class DomNode extends ANode { 223 | constructor(tagName, attributes, childs) { 224 | super(); 225 | this.tagName = tagName; 226 | this.attributes = attributes; 227 | this.childs = childs; 228 | } 229 | 230 | eval(env) { 231 | const node = document.createElement(this.tagName), 232 | childs = this.childs.map((child) => child.eval(env)); 233 | 234 | for (let {name, value} of this.attributes) { 235 | node.setAttribute(name, value); 236 | } 237 | 238 | flattenAppend(node, childs); 239 | 240 | return node; 241 | } 242 | } 243 | 244 | ANode.fromDOM = function (node) { 245 | if (node instanceof Text) { 246 | return new ValueNode(new Str(node.textContent)); 247 | } else if (node instanceof Comment) { 248 | return new CommentNode(node.textContent); 249 | } 250 | 251 | const {childNodes, attributes, tagName} = node, 252 | attrs = parseAttrs(attributes), 253 | {order} = attrs, 254 | childs = new Array(childNodes.length); 255 | 256 | for (let i = 0; i < childNodes.length; i++) { 257 | childs[i] = ANode.fromDOM(childNodes[i]); 258 | } 259 | 260 | switch (tagName) { 261 | case 'V': 262 | return new ValueNode(order[0]); 263 | case 'DEFN': 264 | return new DefnNode(order[0], order.slice(1), childs); 265 | case 'LET': 266 | return new LetNode(order, childs); 267 | case 'COND': 268 | return new CondNode(childs); 269 | case 'FOR': 270 | return new ForNode(order[0], order[2], childs); 271 | case 'IF': 272 | return new IfNode(order, childs); 273 | case 'ELSE': 274 | return new ElseNode(childs); 275 | case 'DO': 276 | return new CallNode(order[0], order.slice(1), childs); 277 | case 'NB': 278 | return new InfoNode(childs); 279 | default: 280 | return new DomNode(tagName, attributes, childs); 281 | } 282 | }; 283 | 284 | function parseAttrs(attributes) { 285 | const byName = {}, 286 | orderRaw = [], 287 | order = []; 288 | 289 | if (attributes !== undefined) { 290 | for (let {name, value} of attributes) { 291 | byName[name] = value; 292 | orderRaw.push({name, value}); 293 | order.push(parseAttr(name, value)); 294 | } 295 | } 296 | 297 | return {byName, order, orderRaw}; 298 | } 299 | 300 | class Value { 301 | eval(_env) { 302 | return nullNode(); 303 | } 304 | } 305 | 306 | class Num extends Value { 307 | constructor(v) { 308 | super(); 309 | this.v = v; 310 | } 311 | 312 | eval(_env) { 313 | return this.v; 314 | } 315 | } 316 | 317 | class Var extends Value { 318 | constructor(name) { 319 | super(); 320 | this.name = name; 321 | } 322 | 323 | eval(env) { 324 | const val = env.lookup(this.name); 325 | return val === undefined 326 | ? null 327 | : val instanceof Value 328 | ? val.eval(env) 329 | : val; 330 | } 331 | } 332 | 333 | class Bool extends Value { 334 | constructor(v) { 335 | super(); 336 | this.v = v; 337 | } 338 | 339 | eval(_env) { 340 | return this.v; 341 | } 342 | } 343 | 344 | class Str extends Value { 345 | constructor(v) { 346 | super(); 347 | this.v = '' + v; 348 | } 349 | 350 | eval(_env) { 351 | return this.v; 352 | } 353 | } 354 | 355 | class KeyVal { 356 | constructor(key, val) { 357 | this.key = key; 358 | this.val = val; 359 | } 360 | 361 | eval(_env) { 362 | return this.val; 363 | } 364 | } 365 | 366 | function parseValue(v) { 367 | const asNum = +v; 368 | if (Number.isFinite(asNum)) { 369 | return new Num(asNum); 370 | } else if (v[0] === '$') { 371 | return new Var(v.slice(1)); 372 | } else if (v === 'true' || v === 'false') { 373 | return new Bool(v === 'true'); 374 | } else { 375 | return new Str(v); 376 | } 377 | } 378 | 379 | function parseAttr(name, value) { 380 | if (value === '') { 381 | return parseValue(name); 382 | } else { 383 | return new KeyVal(name, parseValue(value)); 384 | } 385 | } 386 | 387 | function htmlToANode(html) { 388 | const parser = new DOMParser(), 389 | doc = parser.parseFromString(html, 'text/html'), 390 | rootNode = doc.body.childNodes[0], 391 | anode = ANode.fromDOM(rootNode); 392 | 393 | return anode; 394 | } 395 | 396 | function fromString(s) { 397 | return htmlToANode(s); 398 | } 399 | 400 | class Env { 401 | constructor(parentEnv, stack) { 402 | this.parentEnv = parentEnv; 403 | this.bindings = {}; 404 | this.isBoundary = false; 405 | this.fns = {}; 406 | // mutable stack shared on all envs between boundaries 407 | this.stack = stack || []; 408 | } 409 | 410 | enter() { 411 | return new Env(this, this.stack); 412 | } 413 | 414 | enterBoundary() { 415 | const env = new Env(this, []); 416 | env.isBoundary = true; 417 | return env; 418 | } 419 | 420 | leave() { 421 | return this.parentEnv; 422 | } 423 | 424 | setFn(key, val) { 425 | this.fns[key] = val; 426 | } 427 | 428 | lookupFn(key) { 429 | const v = this.fns[key]; 430 | if (v !== undefined) { 431 | return v; 432 | } 433 | const {parentEnv} = this; 434 | if (parentEnv !== null) { 435 | return parentEnv.lookupFn(key); 436 | } 437 | return null; 438 | } 439 | 440 | push(v) { 441 | this.stack.push(v); 442 | } 443 | pop() { 444 | return this.stack.pop(); 445 | } 446 | 447 | set(key, val) { 448 | this.bindings[key] = val; 449 | } 450 | 451 | lookup(key, defVal) { 452 | const v = this.bindings[key]; 453 | if (v !== undefined) { 454 | return v; 455 | } 456 | const {parentEnv, isBoundary} = this; 457 | if (!isBoundary && parentEnv !== null) { 458 | return parentEnv.lookup(key, defVal); 459 | } 460 | return defVal; 461 | } 462 | 463 | _setNativeFn0(name, fn) { 464 | this.setFn(name, new NativeFn(0, fn)); 465 | } 466 | 467 | _setNativeFn1(name, fn) { 468 | this.setFn(name, new NativeFn(1, fn)); 469 | } 470 | 471 | _setNativeFn2(name, fn) { 472 | this.setFn(name, new NativeFn(2, fn)); 473 | } 474 | 475 | _setNativeFn3(name, fn) { 476 | this.setFn(name, new NativeFn(3, fn)); 477 | } 478 | 479 | _bindPrelude() { 480 | this._setNativeFn0('push', (env, [v]) => { 481 | env.push(v); 482 | return null; 483 | }); 484 | this._setNativeFn0('pop', (env, _args) => { 485 | return env.pop(); 486 | }); 487 | 488 | this._setNativeFn0('set', (env, [name]) => { 489 | const v = env.pop(); 490 | env.set(name, v); 491 | return null; 492 | }); 493 | 494 | this._setNativeFn0('range', (env, [a, b]) => { 495 | const arr = []; 496 | for (let i = a; i < b; i++) { 497 | arr.push(i); 498 | } 499 | 500 | env.push(arr); 501 | return null; 502 | }); 503 | 504 | this._setNativeFn1('query-selector-id', (env, [sel]) => { 505 | const node = document.querySelector('#' + sel); 506 | env.push(node); 507 | return null; 508 | }); 509 | 510 | this._setNativeFn3( 511 | 'add-event-listener-id', 512 | (env, [sel, evName, fnName]) => { 513 | const node = document.querySelector('#' + sel); 514 | node.addEventListener(evName, (e) => 515 | env.lookupFn(fnName).eval(env, [e]) 516 | ); 517 | return null; 518 | } 519 | ); 520 | 521 | this._setNativeFn2('get-attribute', (env, [node, name]) => { 522 | const val = node.getAttribute(name); 523 | env.push(val); 524 | return null; 525 | }); 526 | 527 | this._setNativeFn3('set-attribute', (_env, [node, name, value]) => { 528 | node.setAttribute(name, value); 529 | return null; 530 | }); 531 | 532 | this._setNativeFn1('parse-int', (env, [v]) => { 533 | env.push(parseInt(v, 10)); 534 | return null; 535 | }); 536 | 537 | this._setNativeFn0('inc', (env, _args) => { 538 | env.push(env.pop() + 1); 539 | return null; 540 | }); 541 | this._setNativeFn0('dec', (env, _args) => { 542 | env.push(env.pop() - 1); 543 | return null; 544 | }); 545 | this._setNativeFn2('add', (env, _args, a, b) => { 546 | env.push(a + b); 547 | return null; 548 | }); 549 | this._setNativeFn2('sub', (env, _args, a, b) => { 550 | env.push(a - b); 551 | return null; 552 | }); 553 | this._setNativeFn2('mul', (env, _args, a, b) => { 554 | env.push(a * b); 555 | return null; 556 | }); 557 | this._setNativeFn2('rem', (env, _args, a, b) => { 558 | env.push(a % b); 559 | return null; 560 | }); 561 | this._setNativeFn2('div', (env, _args, a, b) => { 562 | env.push(a / b); 563 | return null; 564 | }); 565 | this._setNativeFn2('eq', (env, _args, a, b) => { 566 | env.push(a === b); 567 | return null; 568 | }); 569 | this._setNativeFn2('ne', (env, _args, a, b) => { 570 | env.push(a !== b); 571 | return null; 572 | }); 573 | this._setNativeFn2('lt', (env, _args, a, b) => { 574 | env.push(a < b); 575 | return null; 576 | }); 577 | this._setNativeFn2('le', (env, _args, a, b) => { 578 | env.push(a <= b); 579 | return null; 580 | }); 581 | this._setNativeFn2('gt', (env, _args, a, b) => { 582 | env.push(a > b); 583 | return null; 584 | }); 585 | this._setNativeFn2('ge', (env, _args, a, b) => { 586 | env.push(a >= b); 587 | return null; 588 | }); 589 | this._setNativeFn2('and', (env, _args, a, b) => { 590 | env.push(!!(a && b)); 591 | return null; 592 | }); 593 | this._setNativeFn2('or', (env, _args, a, b) => { 594 | env.push(!!(a || b)); 595 | return null; 596 | }); 597 | return this; 598 | } 599 | } 600 | 601 | class Fn { 602 | constructor(name, args, body) { 603 | this.name = name; 604 | this.args = args; 605 | this.body = body; 606 | } 607 | 608 | _setEnv(env0, args) { 609 | const env = env0.enterBoundary(); 610 | for (let i = 0; i < args.length; i++) { 611 | env.set(this.args[i], args[i]); 612 | } 613 | return env; 614 | } 615 | 616 | evalToValue(env0, args) { 617 | const env = this._setEnv(env0, args); 618 | let last = null; 619 | this.body.forEach((child) => { 620 | last = child.evalToValue(env); 621 | }); 622 | return last; 623 | } 624 | 625 | eval(env0, args) { 626 | const env = this._setEnv(env0, args), 627 | dom = this.body.map((child) => child.eval(env)); 628 | 629 | env0.push(env.pop()); 630 | 631 | return dom; 632 | } 633 | } 634 | 635 | class NativeFn { 636 | constructor(popCount, fn) { 637 | this.popCount = popCount; 638 | this.fn = fn; 639 | } 640 | 641 | eval(env, args) { 642 | const len = this.popCount + 2, 643 | fnArgs = new Array(len); 644 | 645 | fnArgs[0] = env; 646 | fnArgs[1] = args; 647 | 648 | for (let i = len - 1; i >= 2; i--) { 649 | fnArgs[i] = env.pop(); 650 | } 651 | 652 | return this.fn.apply(null, fnArgs); 653 | } 654 | } 655 | 656 | function evalTo(anode, target) { 657 | const dom = anode.eval(new Env(null)._bindPrelude()); 658 | if (dom instanceof Node) { 659 | target.appendChild(dom); 660 | } 661 | return dom; 662 | } 663 | 664 | window.evalStringToTarget = function (s, targetNode) { 665 | const anode = fromString(s); 666 | return evalTo(anode, targetNode); 667 | }; 668 | 669 | window.evalFromTo = function (templateNode, targetNode) { 670 | const anode = ANode.fromDOM( 671 | templateNode.content.firstElementChild.cloneNode(true) 672 | ); 673 | evalTo(anode, targetNode); 674 | }; 675 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hiapl", 3 | "version": "0.0.1", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "hiapl", 9 | "version": "0.0.1", 10 | "license": "MIt", 11 | "devDependencies": { 12 | "eslint": "^8.6.0", 13 | "prettier": "^2.5.1" 14 | } 15 | }, 16 | "node_modules/@eslint/eslintrc": { 17 | "version": "1.0.5", 18 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", 19 | "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", 20 | "dev": true, 21 | "dependencies": { 22 | "ajv": "^6.12.4", 23 | "debug": "^4.3.2", 24 | "espree": "^9.2.0", 25 | "globals": "^13.9.0", 26 | "ignore": "^4.0.6", 27 | "import-fresh": "^3.2.1", 28 | "js-yaml": "^4.1.0", 29 | "minimatch": "^3.0.4", 30 | "strip-json-comments": "^3.1.1" 31 | }, 32 | "engines": { 33 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 34 | } 35 | }, 36 | "node_modules/@humanwhocodes/config-array": { 37 | "version": "0.9.2", 38 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", 39 | "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", 40 | "dev": true, 41 | "dependencies": { 42 | "@humanwhocodes/object-schema": "^1.2.1", 43 | "debug": "^4.1.1", 44 | "minimatch": "^3.0.4" 45 | }, 46 | "engines": { 47 | "node": ">=10.10.0" 48 | } 49 | }, 50 | "node_modules/@humanwhocodes/object-schema": { 51 | "version": "1.2.1", 52 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 53 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 54 | "dev": true 55 | }, 56 | "node_modules/acorn": { 57 | "version": "8.7.0", 58 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", 59 | "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", 60 | "dev": true, 61 | "bin": { 62 | "acorn": "bin/acorn" 63 | }, 64 | "engines": { 65 | "node": ">=0.4.0" 66 | } 67 | }, 68 | "node_modules/acorn-jsx": { 69 | "version": "5.3.2", 70 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 71 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 72 | "dev": true, 73 | "peerDependencies": { 74 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 75 | } 76 | }, 77 | "node_modules/ajv": { 78 | "version": "6.12.6", 79 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 80 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 81 | "dev": true, 82 | "dependencies": { 83 | "fast-deep-equal": "^3.1.1", 84 | "fast-json-stable-stringify": "^2.0.0", 85 | "json-schema-traverse": "^0.4.1", 86 | "uri-js": "^4.2.2" 87 | }, 88 | "funding": { 89 | "type": "github", 90 | "url": "https://github.com/sponsors/epoberezkin" 91 | } 92 | }, 93 | "node_modules/ansi-colors": { 94 | "version": "4.1.1", 95 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 96 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 97 | "dev": true, 98 | "engines": { 99 | "node": ">=6" 100 | } 101 | }, 102 | "node_modules/ansi-regex": { 103 | "version": "5.0.1", 104 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 105 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 106 | "dev": true, 107 | "engines": { 108 | "node": ">=8" 109 | } 110 | }, 111 | "node_modules/ansi-styles": { 112 | "version": "4.3.0", 113 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 114 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 115 | "dev": true, 116 | "dependencies": { 117 | "color-convert": "^2.0.1" 118 | }, 119 | "engines": { 120 | "node": ">=8" 121 | }, 122 | "funding": { 123 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 124 | } 125 | }, 126 | "node_modules/argparse": { 127 | "version": "2.0.1", 128 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 129 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 130 | "dev": true 131 | }, 132 | "node_modules/balanced-match": { 133 | "version": "1.0.2", 134 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 135 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 136 | "dev": true 137 | }, 138 | "node_modules/brace-expansion": { 139 | "version": "1.1.11", 140 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 141 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 142 | "dev": true, 143 | "dependencies": { 144 | "balanced-match": "^1.0.0", 145 | "concat-map": "0.0.1" 146 | } 147 | }, 148 | "node_modules/callsites": { 149 | "version": "3.1.0", 150 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 151 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 152 | "dev": true, 153 | "engines": { 154 | "node": ">=6" 155 | } 156 | }, 157 | "node_modules/chalk": { 158 | "version": "4.1.2", 159 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 160 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 161 | "dev": true, 162 | "dependencies": { 163 | "ansi-styles": "^4.1.0", 164 | "supports-color": "^7.1.0" 165 | }, 166 | "engines": { 167 | "node": ">=10" 168 | }, 169 | "funding": { 170 | "url": "https://github.com/chalk/chalk?sponsor=1" 171 | } 172 | }, 173 | "node_modules/color-convert": { 174 | "version": "2.0.1", 175 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 176 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 177 | "dev": true, 178 | "dependencies": { 179 | "color-name": "~1.1.4" 180 | }, 181 | "engines": { 182 | "node": ">=7.0.0" 183 | } 184 | }, 185 | "node_modules/color-name": { 186 | "version": "1.1.4", 187 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 188 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 189 | "dev": true 190 | }, 191 | "node_modules/concat-map": { 192 | "version": "0.0.1", 193 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 194 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 195 | "dev": true 196 | }, 197 | "node_modules/cross-spawn": { 198 | "version": "7.0.3", 199 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 200 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 201 | "dev": true, 202 | "dependencies": { 203 | "path-key": "^3.1.0", 204 | "shebang-command": "^2.0.0", 205 | "which": "^2.0.1" 206 | }, 207 | "engines": { 208 | "node": ">= 8" 209 | } 210 | }, 211 | "node_modules/debug": { 212 | "version": "4.3.3", 213 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 214 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 215 | "dev": true, 216 | "dependencies": { 217 | "ms": "2.1.2" 218 | }, 219 | "engines": { 220 | "node": ">=6.0" 221 | }, 222 | "peerDependenciesMeta": { 223 | "supports-color": { 224 | "optional": true 225 | } 226 | } 227 | }, 228 | "node_modules/deep-is": { 229 | "version": "0.1.4", 230 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 231 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 232 | "dev": true 233 | }, 234 | "node_modules/doctrine": { 235 | "version": "3.0.0", 236 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 237 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 238 | "dev": true, 239 | "dependencies": { 240 | "esutils": "^2.0.2" 241 | }, 242 | "engines": { 243 | "node": ">=6.0.0" 244 | } 245 | }, 246 | "node_modules/enquirer": { 247 | "version": "2.3.6", 248 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 249 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 250 | "dev": true, 251 | "dependencies": { 252 | "ansi-colors": "^4.1.1" 253 | }, 254 | "engines": { 255 | "node": ">=8.6" 256 | } 257 | }, 258 | "node_modules/escape-string-regexp": { 259 | "version": "4.0.0", 260 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 261 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 262 | "dev": true, 263 | "engines": { 264 | "node": ">=10" 265 | }, 266 | "funding": { 267 | "url": "https://github.com/sponsors/sindresorhus" 268 | } 269 | }, 270 | "node_modules/eslint": { 271 | "version": "8.6.0", 272 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", 273 | "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", 274 | "dev": true, 275 | "dependencies": { 276 | "@eslint/eslintrc": "^1.0.5", 277 | "@humanwhocodes/config-array": "^0.9.2", 278 | "ajv": "^6.10.0", 279 | "chalk": "^4.0.0", 280 | "cross-spawn": "^7.0.2", 281 | "debug": "^4.3.2", 282 | "doctrine": "^3.0.0", 283 | "enquirer": "^2.3.5", 284 | "escape-string-regexp": "^4.0.0", 285 | "eslint-scope": "^7.1.0", 286 | "eslint-utils": "^3.0.0", 287 | "eslint-visitor-keys": "^3.1.0", 288 | "espree": "^9.3.0", 289 | "esquery": "^1.4.0", 290 | "esutils": "^2.0.2", 291 | "fast-deep-equal": "^3.1.3", 292 | "file-entry-cache": "^6.0.1", 293 | "functional-red-black-tree": "^1.0.1", 294 | "glob-parent": "^6.0.1", 295 | "globals": "^13.6.0", 296 | "ignore": "^4.0.6", 297 | "import-fresh": "^3.0.0", 298 | "imurmurhash": "^0.1.4", 299 | "is-glob": "^4.0.0", 300 | "js-yaml": "^4.1.0", 301 | "json-stable-stringify-without-jsonify": "^1.0.1", 302 | "levn": "^0.4.1", 303 | "lodash.merge": "^4.6.2", 304 | "minimatch": "^3.0.4", 305 | "natural-compare": "^1.4.0", 306 | "optionator": "^0.9.1", 307 | "progress": "^2.0.0", 308 | "regexpp": "^3.2.0", 309 | "semver": "^7.2.1", 310 | "strip-ansi": "^6.0.1", 311 | "strip-json-comments": "^3.1.0", 312 | "text-table": "^0.2.0", 313 | "v8-compile-cache": "^2.0.3" 314 | }, 315 | "bin": { 316 | "eslint": "bin/eslint.js" 317 | }, 318 | "engines": { 319 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 320 | }, 321 | "funding": { 322 | "url": "https://opencollective.com/eslint" 323 | } 324 | }, 325 | "node_modules/eslint-scope": { 326 | "version": "7.1.0", 327 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", 328 | "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", 329 | "dev": true, 330 | "dependencies": { 331 | "esrecurse": "^4.3.0", 332 | "estraverse": "^5.2.0" 333 | }, 334 | "engines": { 335 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 336 | } 337 | }, 338 | "node_modules/eslint-utils": { 339 | "version": "3.0.0", 340 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 341 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 342 | "dev": true, 343 | "dependencies": { 344 | "eslint-visitor-keys": "^2.0.0" 345 | }, 346 | "engines": { 347 | "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" 348 | }, 349 | "funding": { 350 | "url": "https://github.com/sponsors/mysticatea" 351 | }, 352 | "peerDependencies": { 353 | "eslint": ">=5" 354 | } 355 | }, 356 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { 357 | "version": "2.1.0", 358 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 359 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 360 | "dev": true, 361 | "engines": { 362 | "node": ">=10" 363 | } 364 | }, 365 | "node_modules/eslint-visitor-keys": { 366 | "version": "3.1.0", 367 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", 368 | "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", 369 | "dev": true, 370 | "engines": { 371 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 372 | } 373 | }, 374 | "node_modules/espree": { 375 | "version": "9.3.0", 376 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", 377 | "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", 378 | "dev": true, 379 | "dependencies": { 380 | "acorn": "^8.7.0", 381 | "acorn-jsx": "^5.3.1", 382 | "eslint-visitor-keys": "^3.1.0" 383 | }, 384 | "engines": { 385 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 386 | } 387 | }, 388 | "node_modules/esquery": { 389 | "version": "1.4.0", 390 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 391 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 392 | "dev": true, 393 | "dependencies": { 394 | "estraverse": "^5.1.0" 395 | }, 396 | "engines": { 397 | "node": ">=0.10" 398 | } 399 | }, 400 | "node_modules/esrecurse": { 401 | "version": "4.3.0", 402 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 403 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 404 | "dev": true, 405 | "dependencies": { 406 | "estraverse": "^5.2.0" 407 | }, 408 | "engines": { 409 | "node": ">=4.0" 410 | } 411 | }, 412 | "node_modules/estraverse": { 413 | "version": "5.3.0", 414 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 415 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 416 | "dev": true, 417 | "engines": { 418 | "node": ">=4.0" 419 | } 420 | }, 421 | "node_modules/esutils": { 422 | "version": "2.0.3", 423 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 424 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 425 | "dev": true, 426 | "engines": { 427 | "node": ">=0.10.0" 428 | } 429 | }, 430 | "node_modules/fast-deep-equal": { 431 | "version": "3.1.3", 432 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 433 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 434 | "dev": true 435 | }, 436 | "node_modules/fast-json-stable-stringify": { 437 | "version": "2.1.0", 438 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 439 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 440 | "dev": true 441 | }, 442 | "node_modules/fast-levenshtein": { 443 | "version": "2.0.6", 444 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 445 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 446 | "dev": true 447 | }, 448 | "node_modules/file-entry-cache": { 449 | "version": "6.0.1", 450 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 451 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 452 | "dev": true, 453 | "dependencies": { 454 | "flat-cache": "^3.0.4" 455 | }, 456 | "engines": { 457 | "node": "^10.12.0 || >=12.0.0" 458 | } 459 | }, 460 | "node_modules/flat-cache": { 461 | "version": "3.0.4", 462 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 463 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 464 | "dev": true, 465 | "dependencies": { 466 | "flatted": "^3.1.0", 467 | "rimraf": "^3.0.2" 468 | }, 469 | "engines": { 470 | "node": "^10.12.0 || >=12.0.0" 471 | } 472 | }, 473 | "node_modules/flatted": { 474 | "version": "3.2.4", 475 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", 476 | "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", 477 | "dev": true 478 | }, 479 | "node_modules/fs.realpath": { 480 | "version": "1.0.0", 481 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 482 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 483 | "dev": true 484 | }, 485 | "node_modules/functional-red-black-tree": { 486 | "version": "1.0.1", 487 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 488 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 489 | "dev": true 490 | }, 491 | "node_modules/glob": { 492 | "version": "7.2.0", 493 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 494 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 495 | "dev": true, 496 | "dependencies": { 497 | "fs.realpath": "^1.0.0", 498 | "inflight": "^1.0.4", 499 | "inherits": "2", 500 | "minimatch": "^3.0.4", 501 | "once": "^1.3.0", 502 | "path-is-absolute": "^1.0.0" 503 | }, 504 | "engines": { 505 | "node": "*" 506 | }, 507 | "funding": { 508 | "url": "https://github.com/sponsors/isaacs" 509 | } 510 | }, 511 | "node_modules/glob-parent": { 512 | "version": "6.0.2", 513 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 514 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 515 | "dev": true, 516 | "dependencies": { 517 | "is-glob": "^4.0.3" 518 | }, 519 | "engines": { 520 | "node": ">=10.13.0" 521 | } 522 | }, 523 | "node_modules/globals": { 524 | "version": "13.12.0", 525 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", 526 | "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", 527 | "dev": true, 528 | "dependencies": { 529 | "type-fest": "^0.20.2" 530 | }, 531 | "engines": { 532 | "node": ">=8" 533 | }, 534 | "funding": { 535 | "url": "https://github.com/sponsors/sindresorhus" 536 | } 537 | }, 538 | "node_modules/has-flag": { 539 | "version": "4.0.0", 540 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 541 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 542 | "dev": true, 543 | "engines": { 544 | "node": ">=8" 545 | } 546 | }, 547 | "node_modules/ignore": { 548 | "version": "4.0.6", 549 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 550 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 551 | "dev": true, 552 | "engines": { 553 | "node": ">= 4" 554 | } 555 | }, 556 | "node_modules/import-fresh": { 557 | "version": "3.3.0", 558 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 559 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 560 | "dev": true, 561 | "dependencies": { 562 | "parent-module": "^1.0.0", 563 | "resolve-from": "^4.0.0" 564 | }, 565 | "engines": { 566 | "node": ">=6" 567 | }, 568 | "funding": { 569 | "url": "https://github.com/sponsors/sindresorhus" 570 | } 571 | }, 572 | "node_modules/imurmurhash": { 573 | "version": "0.1.4", 574 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 575 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 576 | "dev": true, 577 | "engines": { 578 | "node": ">=0.8.19" 579 | } 580 | }, 581 | "node_modules/inflight": { 582 | "version": "1.0.6", 583 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 584 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 585 | "dev": true, 586 | "dependencies": { 587 | "once": "^1.3.0", 588 | "wrappy": "1" 589 | } 590 | }, 591 | "node_modules/inherits": { 592 | "version": "2.0.4", 593 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 594 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 595 | "dev": true 596 | }, 597 | "node_modules/is-extglob": { 598 | "version": "2.1.1", 599 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 600 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 601 | "dev": true, 602 | "engines": { 603 | "node": ">=0.10.0" 604 | } 605 | }, 606 | "node_modules/is-glob": { 607 | "version": "4.0.3", 608 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 609 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 610 | "dev": true, 611 | "dependencies": { 612 | "is-extglob": "^2.1.1" 613 | }, 614 | "engines": { 615 | "node": ">=0.10.0" 616 | } 617 | }, 618 | "node_modules/isexe": { 619 | "version": "2.0.0", 620 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 621 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 622 | "dev": true 623 | }, 624 | "node_modules/js-yaml": { 625 | "version": "4.1.0", 626 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 627 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 628 | "dev": true, 629 | "dependencies": { 630 | "argparse": "^2.0.1" 631 | }, 632 | "bin": { 633 | "js-yaml": "bin/js-yaml.js" 634 | } 635 | }, 636 | "node_modules/json-schema-traverse": { 637 | "version": "0.4.1", 638 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 639 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 640 | "dev": true 641 | }, 642 | "node_modules/json-stable-stringify-without-jsonify": { 643 | "version": "1.0.1", 644 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 645 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 646 | "dev": true 647 | }, 648 | "node_modules/levn": { 649 | "version": "0.4.1", 650 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 651 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 652 | "dev": true, 653 | "dependencies": { 654 | "prelude-ls": "^1.2.1", 655 | "type-check": "~0.4.0" 656 | }, 657 | "engines": { 658 | "node": ">= 0.8.0" 659 | } 660 | }, 661 | "node_modules/lodash.merge": { 662 | "version": "4.6.2", 663 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 664 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 665 | "dev": true 666 | }, 667 | "node_modules/lru-cache": { 668 | "version": "6.0.0", 669 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 670 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 671 | "dev": true, 672 | "dependencies": { 673 | "yallist": "^4.0.0" 674 | }, 675 | "engines": { 676 | "node": ">=10" 677 | } 678 | }, 679 | "node_modules/minimatch": { 680 | "version": "3.0.4", 681 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 682 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 683 | "dev": true, 684 | "dependencies": { 685 | "brace-expansion": "^1.1.7" 686 | }, 687 | "engines": { 688 | "node": "*" 689 | } 690 | }, 691 | "node_modules/ms": { 692 | "version": "2.1.2", 693 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 694 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 695 | "dev": true 696 | }, 697 | "node_modules/natural-compare": { 698 | "version": "1.4.0", 699 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 700 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 701 | "dev": true 702 | }, 703 | "node_modules/once": { 704 | "version": "1.4.0", 705 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 706 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 707 | "dev": true, 708 | "dependencies": { 709 | "wrappy": "1" 710 | } 711 | }, 712 | "node_modules/optionator": { 713 | "version": "0.9.1", 714 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 715 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 716 | "dev": true, 717 | "dependencies": { 718 | "deep-is": "^0.1.3", 719 | "fast-levenshtein": "^2.0.6", 720 | "levn": "^0.4.1", 721 | "prelude-ls": "^1.2.1", 722 | "type-check": "^0.4.0", 723 | "word-wrap": "^1.2.3" 724 | }, 725 | "engines": { 726 | "node": ">= 0.8.0" 727 | } 728 | }, 729 | "node_modules/parent-module": { 730 | "version": "1.0.1", 731 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 732 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 733 | "dev": true, 734 | "dependencies": { 735 | "callsites": "^3.0.0" 736 | }, 737 | "engines": { 738 | "node": ">=6" 739 | } 740 | }, 741 | "node_modules/path-is-absolute": { 742 | "version": "1.0.1", 743 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 744 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 745 | "dev": true, 746 | "engines": { 747 | "node": ">=0.10.0" 748 | } 749 | }, 750 | "node_modules/path-key": { 751 | "version": "3.1.1", 752 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 753 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 754 | "dev": true, 755 | "engines": { 756 | "node": ">=8" 757 | } 758 | }, 759 | "node_modules/prelude-ls": { 760 | "version": "1.2.1", 761 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 762 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 763 | "dev": true, 764 | "engines": { 765 | "node": ">= 0.8.0" 766 | } 767 | }, 768 | "node_modules/prettier": { 769 | "version": "2.5.1", 770 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", 771 | "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", 772 | "dev": true, 773 | "bin": { 774 | "prettier": "bin-prettier.js" 775 | }, 776 | "engines": { 777 | "node": ">=10.13.0" 778 | } 779 | }, 780 | "node_modules/progress": { 781 | "version": "2.0.3", 782 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 783 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 784 | "dev": true, 785 | "engines": { 786 | "node": ">=0.4.0" 787 | } 788 | }, 789 | "node_modules/punycode": { 790 | "version": "2.1.1", 791 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 792 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 793 | "dev": true, 794 | "engines": { 795 | "node": ">=6" 796 | } 797 | }, 798 | "node_modules/regexpp": { 799 | "version": "3.2.0", 800 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 801 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 802 | "dev": true, 803 | "engines": { 804 | "node": ">=8" 805 | }, 806 | "funding": { 807 | "url": "https://github.com/sponsors/mysticatea" 808 | } 809 | }, 810 | "node_modules/resolve-from": { 811 | "version": "4.0.0", 812 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 813 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 814 | "dev": true, 815 | "engines": { 816 | "node": ">=4" 817 | } 818 | }, 819 | "node_modules/rimraf": { 820 | "version": "3.0.2", 821 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 822 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 823 | "dev": true, 824 | "dependencies": { 825 | "glob": "^7.1.3" 826 | }, 827 | "bin": { 828 | "rimraf": "bin.js" 829 | }, 830 | "funding": { 831 | "url": "https://github.com/sponsors/isaacs" 832 | } 833 | }, 834 | "node_modules/semver": { 835 | "version": "7.3.5", 836 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 837 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 838 | "dev": true, 839 | "dependencies": { 840 | "lru-cache": "^6.0.0" 841 | }, 842 | "bin": { 843 | "semver": "bin/semver.js" 844 | }, 845 | "engines": { 846 | "node": ">=10" 847 | } 848 | }, 849 | "node_modules/shebang-command": { 850 | "version": "2.0.0", 851 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 852 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 853 | "dev": true, 854 | "dependencies": { 855 | "shebang-regex": "^3.0.0" 856 | }, 857 | "engines": { 858 | "node": ">=8" 859 | } 860 | }, 861 | "node_modules/shebang-regex": { 862 | "version": "3.0.0", 863 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 864 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 865 | "dev": true, 866 | "engines": { 867 | "node": ">=8" 868 | } 869 | }, 870 | "node_modules/strip-ansi": { 871 | "version": "6.0.1", 872 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 873 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 874 | "dev": true, 875 | "dependencies": { 876 | "ansi-regex": "^5.0.1" 877 | }, 878 | "engines": { 879 | "node": ">=8" 880 | } 881 | }, 882 | "node_modules/strip-json-comments": { 883 | "version": "3.1.1", 884 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 885 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 886 | "dev": true, 887 | "engines": { 888 | "node": ">=8" 889 | }, 890 | "funding": { 891 | "url": "https://github.com/sponsors/sindresorhus" 892 | } 893 | }, 894 | "node_modules/supports-color": { 895 | "version": "7.2.0", 896 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 897 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 898 | "dev": true, 899 | "dependencies": { 900 | "has-flag": "^4.0.0" 901 | }, 902 | "engines": { 903 | "node": ">=8" 904 | } 905 | }, 906 | "node_modules/text-table": { 907 | "version": "0.2.0", 908 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 909 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 910 | "dev": true 911 | }, 912 | "node_modules/type-check": { 913 | "version": "0.4.0", 914 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 915 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 916 | "dev": true, 917 | "dependencies": { 918 | "prelude-ls": "^1.2.1" 919 | }, 920 | "engines": { 921 | "node": ">= 0.8.0" 922 | } 923 | }, 924 | "node_modules/type-fest": { 925 | "version": "0.20.2", 926 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 927 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 928 | "dev": true, 929 | "engines": { 930 | "node": ">=10" 931 | }, 932 | "funding": { 933 | "url": "https://github.com/sponsors/sindresorhus" 934 | } 935 | }, 936 | "node_modules/uri-js": { 937 | "version": "4.4.1", 938 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 939 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 940 | "dev": true, 941 | "dependencies": { 942 | "punycode": "^2.1.0" 943 | } 944 | }, 945 | "node_modules/v8-compile-cache": { 946 | "version": "2.3.0", 947 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 948 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 949 | "dev": true 950 | }, 951 | "node_modules/which": { 952 | "version": "2.0.2", 953 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 954 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 955 | "dev": true, 956 | "dependencies": { 957 | "isexe": "^2.0.0" 958 | }, 959 | "bin": { 960 | "node-which": "bin/node-which" 961 | }, 962 | "engines": { 963 | "node": ">= 8" 964 | } 965 | }, 966 | "node_modules/word-wrap": { 967 | "version": "1.2.3", 968 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 969 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 970 | "dev": true, 971 | "engines": { 972 | "node": ">=0.10.0" 973 | } 974 | }, 975 | "node_modules/wrappy": { 976 | "version": "1.0.2", 977 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 978 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 979 | "dev": true 980 | }, 981 | "node_modules/yallist": { 982 | "version": "4.0.0", 983 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 984 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 985 | "dev": true 986 | } 987 | }, 988 | "dependencies": { 989 | "@eslint/eslintrc": { 990 | "version": "1.0.5", 991 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", 992 | "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", 993 | "dev": true, 994 | "requires": { 995 | "ajv": "^6.12.4", 996 | "debug": "^4.3.2", 997 | "espree": "^9.2.0", 998 | "globals": "^13.9.0", 999 | "ignore": "^4.0.6", 1000 | "import-fresh": "^3.2.1", 1001 | "js-yaml": "^4.1.0", 1002 | "minimatch": "^3.0.4", 1003 | "strip-json-comments": "^3.1.1" 1004 | } 1005 | }, 1006 | "@humanwhocodes/config-array": { 1007 | "version": "0.9.2", 1008 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", 1009 | "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", 1010 | "dev": true, 1011 | "requires": { 1012 | "@humanwhocodes/object-schema": "^1.2.1", 1013 | "debug": "^4.1.1", 1014 | "minimatch": "^3.0.4" 1015 | } 1016 | }, 1017 | "@humanwhocodes/object-schema": { 1018 | "version": "1.2.1", 1019 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 1020 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 1021 | "dev": true 1022 | }, 1023 | "acorn": { 1024 | "version": "8.7.0", 1025 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", 1026 | "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", 1027 | "dev": true 1028 | }, 1029 | "acorn-jsx": { 1030 | "version": "5.3.2", 1031 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1032 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1033 | "dev": true, 1034 | "requires": {} 1035 | }, 1036 | "ajv": { 1037 | "version": "6.12.6", 1038 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1039 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1040 | "dev": true, 1041 | "requires": { 1042 | "fast-deep-equal": "^3.1.1", 1043 | "fast-json-stable-stringify": "^2.0.0", 1044 | "json-schema-traverse": "^0.4.1", 1045 | "uri-js": "^4.2.2" 1046 | } 1047 | }, 1048 | "ansi-colors": { 1049 | "version": "4.1.1", 1050 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 1051 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 1052 | "dev": true 1053 | }, 1054 | "ansi-regex": { 1055 | "version": "5.0.1", 1056 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1057 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1058 | "dev": true 1059 | }, 1060 | "ansi-styles": { 1061 | "version": "4.3.0", 1062 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1063 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1064 | "dev": true, 1065 | "requires": { 1066 | "color-convert": "^2.0.1" 1067 | } 1068 | }, 1069 | "argparse": { 1070 | "version": "2.0.1", 1071 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1072 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1073 | "dev": true 1074 | }, 1075 | "balanced-match": { 1076 | "version": "1.0.2", 1077 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1078 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1079 | "dev": true 1080 | }, 1081 | "brace-expansion": { 1082 | "version": "1.1.11", 1083 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1084 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1085 | "dev": true, 1086 | "requires": { 1087 | "balanced-match": "^1.0.0", 1088 | "concat-map": "0.0.1" 1089 | } 1090 | }, 1091 | "callsites": { 1092 | "version": "3.1.0", 1093 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1094 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1095 | "dev": true 1096 | }, 1097 | "chalk": { 1098 | "version": "4.1.2", 1099 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1100 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1101 | "dev": true, 1102 | "requires": { 1103 | "ansi-styles": "^4.1.0", 1104 | "supports-color": "^7.1.0" 1105 | } 1106 | }, 1107 | "color-convert": { 1108 | "version": "2.0.1", 1109 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1110 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1111 | "dev": true, 1112 | "requires": { 1113 | "color-name": "~1.1.4" 1114 | } 1115 | }, 1116 | "color-name": { 1117 | "version": "1.1.4", 1118 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1119 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1120 | "dev": true 1121 | }, 1122 | "concat-map": { 1123 | "version": "0.0.1", 1124 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1125 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1126 | "dev": true 1127 | }, 1128 | "cross-spawn": { 1129 | "version": "7.0.3", 1130 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1131 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1132 | "dev": true, 1133 | "requires": { 1134 | "path-key": "^3.1.0", 1135 | "shebang-command": "^2.0.0", 1136 | "which": "^2.0.1" 1137 | } 1138 | }, 1139 | "debug": { 1140 | "version": "4.3.3", 1141 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 1142 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 1143 | "dev": true, 1144 | "requires": { 1145 | "ms": "2.1.2" 1146 | } 1147 | }, 1148 | "deep-is": { 1149 | "version": "0.1.4", 1150 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1151 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1152 | "dev": true 1153 | }, 1154 | "doctrine": { 1155 | "version": "3.0.0", 1156 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1157 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1158 | "dev": true, 1159 | "requires": { 1160 | "esutils": "^2.0.2" 1161 | } 1162 | }, 1163 | "enquirer": { 1164 | "version": "2.3.6", 1165 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 1166 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 1167 | "dev": true, 1168 | "requires": { 1169 | "ansi-colors": "^4.1.1" 1170 | } 1171 | }, 1172 | "escape-string-regexp": { 1173 | "version": "4.0.0", 1174 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1175 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1176 | "dev": true 1177 | }, 1178 | "eslint": { 1179 | "version": "8.6.0", 1180 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", 1181 | "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", 1182 | "dev": true, 1183 | "requires": { 1184 | "@eslint/eslintrc": "^1.0.5", 1185 | "@humanwhocodes/config-array": "^0.9.2", 1186 | "ajv": "^6.10.0", 1187 | "chalk": "^4.0.0", 1188 | "cross-spawn": "^7.0.2", 1189 | "debug": "^4.3.2", 1190 | "doctrine": "^3.0.0", 1191 | "enquirer": "^2.3.5", 1192 | "escape-string-regexp": "^4.0.0", 1193 | "eslint-scope": "^7.1.0", 1194 | "eslint-utils": "^3.0.0", 1195 | "eslint-visitor-keys": "^3.1.0", 1196 | "espree": "^9.3.0", 1197 | "esquery": "^1.4.0", 1198 | "esutils": "^2.0.2", 1199 | "fast-deep-equal": "^3.1.3", 1200 | "file-entry-cache": "^6.0.1", 1201 | "functional-red-black-tree": "^1.0.1", 1202 | "glob-parent": "^6.0.1", 1203 | "globals": "^13.6.0", 1204 | "ignore": "^4.0.6", 1205 | "import-fresh": "^3.0.0", 1206 | "imurmurhash": "^0.1.4", 1207 | "is-glob": "^4.0.0", 1208 | "js-yaml": "^4.1.0", 1209 | "json-stable-stringify-without-jsonify": "^1.0.1", 1210 | "levn": "^0.4.1", 1211 | "lodash.merge": "^4.6.2", 1212 | "minimatch": "^3.0.4", 1213 | "natural-compare": "^1.4.0", 1214 | "optionator": "^0.9.1", 1215 | "progress": "^2.0.0", 1216 | "regexpp": "^3.2.0", 1217 | "semver": "^7.2.1", 1218 | "strip-ansi": "^6.0.1", 1219 | "strip-json-comments": "^3.1.0", 1220 | "text-table": "^0.2.0", 1221 | "v8-compile-cache": "^2.0.3" 1222 | } 1223 | }, 1224 | "eslint-scope": { 1225 | "version": "7.1.0", 1226 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", 1227 | "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", 1228 | "dev": true, 1229 | "requires": { 1230 | "esrecurse": "^4.3.0", 1231 | "estraverse": "^5.2.0" 1232 | } 1233 | }, 1234 | "eslint-utils": { 1235 | "version": "3.0.0", 1236 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 1237 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 1238 | "dev": true, 1239 | "requires": { 1240 | "eslint-visitor-keys": "^2.0.0" 1241 | }, 1242 | "dependencies": { 1243 | "eslint-visitor-keys": { 1244 | "version": "2.1.0", 1245 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 1246 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 1247 | "dev": true 1248 | } 1249 | } 1250 | }, 1251 | "eslint-visitor-keys": { 1252 | "version": "3.1.0", 1253 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", 1254 | "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", 1255 | "dev": true 1256 | }, 1257 | "espree": { 1258 | "version": "9.3.0", 1259 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", 1260 | "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", 1261 | "dev": true, 1262 | "requires": { 1263 | "acorn": "^8.7.0", 1264 | "acorn-jsx": "^5.3.1", 1265 | "eslint-visitor-keys": "^3.1.0" 1266 | } 1267 | }, 1268 | "esquery": { 1269 | "version": "1.4.0", 1270 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 1271 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 1272 | "dev": true, 1273 | "requires": { 1274 | "estraverse": "^5.1.0" 1275 | } 1276 | }, 1277 | "esrecurse": { 1278 | "version": "4.3.0", 1279 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1280 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1281 | "dev": true, 1282 | "requires": { 1283 | "estraverse": "^5.2.0" 1284 | } 1285 | }, 1286 | "estraverse": { 1287 | "version": "5.3.0", 1288 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1289 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1290 | "dev": true 1291 | }, 1292 | "esutils": { 1293 | "version": "2.0.3", 1294 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1295 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1296 | "dev": true 1297 | }, 1298 | "fast-deep-equal": { 1299 | "version": "3.1.3", 1300 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1301 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1302 | "dev": true 1303 | }, 1304 | "fast-json-stable-stringify": { 1305 | "version": "2.1.0", 1306 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1307 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1308 | "dev": true 1309 | }, 1310 | "fast-levenshtein": { 1311 | "version": "2.0.6", 1312 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1313 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 1314 | "dev": true 1315 | }, 1316 | "file-entry-cache": { 1317 | "version": "6.0.1", 1318 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1319 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1320 | "dev": true, 1321 | "requires": { 1322 | "flat-cache": "^3.0.4" 1323 | } 1324 | }, 1325 | "flat-cache": { 1326 | "version": "3.0.4", 1327 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 1328 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 1329 | "dev": true, 1330 | "requires": { 1331 | "flatted": "^3.1.0", 1332 | "rimraf": "^3.0.2" 1333 | } 1334 | }, 1335 | "flatted": { 1336 | "version": "3.2.4", 1337 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", 1338 | "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", 1339 | "dev": true 1340 | }, 1341 | "fs.realpath": { 1342 | "version": "1.0.0", 1343 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1344 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1345 | "dev": true 1346 | }, 1347 | "functional-red-black-tree": { 1348 | "version": "1.0.1", 1349 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 1350 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 1351 | "dev": true 1352 | }, 1353 | "glob": { 1354 | "version": "7.2.0", 1355 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 1356 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 1357 | "dev": true, 1358 | "requires": { 1359 | "fs.realpath": "^1.0.0", 1360 | "inflight": "^1.0.4", 1361 | "inherits": "2", 1362 | "minimatch": "^3.0.4", 1363 | "once": "^1.3.0", 1364 | "path-is-absolute": "^1.0.0" 1365 | } 1366 | }, 1367 | "glob-parent": { 1368 | "version": "6.0.2", 1369 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1370 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1371 | "dev": true, 1372 | "requires": { 1373 | "is-glob": "^4.0.3" 1374 | } 1375 | }, 1376 | "globals": { 1377 | "version": "13.12.0", 1378 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", 1379 | "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", 1380 | "dev": true, 1381 | "requires": { 1382 | "type-fest": "^0.20.2" 1383 | } 1384 | }, 1385 | "has-flag": { 1386 | "version": "4.0.0", 1387 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1388 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1389 | "dev": true 1390 | }, 1391 | "ignore": { 1392 | "version": "4.0.6", 1393 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 1394 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 1395 | "dev": true 1396 | }, 1397 | "import-fresh": { 1398 | "version": "3.3.0", 1399 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1400 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1401 | "dev": true, 1402 | "requires": { 1403 | "parent-module": "^1.0.0", 1404 | "resolve-from": "^4.0.0" 1405 | } 1406 | }, 1407 | "imurmurhash": { 1408 | "version": "0.1.4", 1409 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1410 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1411 | "dev": true 1412 | }, 1413 | "inflight": { 1414 | "version": "1.0.6", 1415 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1416 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1417 | "dev": true, 1418 | "requires": { 1419 | "once": "^1.3.0", 1420 | "wrappy": "1" 1421 | } 1422 | }, 1423 | "inherits": { 1424 | "version": "2.0.4", 1425 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1426 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1427 | "dev": true 1428 | }, 1429 | "is-extglob": { 1430 | "version": "2.1.1", 1431 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1432 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1433 | "dev": true 1434 | }, 1435 | "is-glob": { 1436 | "version": "4.0.3", 1437 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1438 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1439 | "dev": true, 1440 | "requires": { 1441 | "is-extglob": "^2.1.1" 1442 | } 1443 | }, 1444 | "isexe": { 1445 | "version": "2.0.0", 1446 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1447 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1448 | "dev": true 1449 | }, 1450 | "js-yaml": { 1451 | "version": "4.1.0", 1452 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1453 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1454 | "dev": true, 1455 | "requires": { 1456 | "argparse": "^2.0.1" 1457 | } 1458 | }, 1459 | "json-schema-traverse": { 1460 | "version": "0.4.1", 1461 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1462 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1463 | "dev": true 1464 | }, 1465 | "json-stable-stringify-without-jsonify": { 1466 | "version": "1.0.1", 1467 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1468 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1469 | "dev": true 1470 | }, 1471 | "levn": { 1472 | "version": "0.4.1", 1473 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1474 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1475 | "dev": true, 1476 | "requires": { 1477 | "prelude-ls": "^1.2.1", 1478 | "type-check": "~0.4.0" 1479 | } 1480 | }, 1481 | "lodash.merge": { 1482 | "version": "4.6.2", 1483 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1484 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1485 | "dev": true 1486 | }, 1487 | "lru-cache": { 1488 | "version": "6.0.0", 1489 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1490 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1491 | "dev": true, 1492 | "requires": { 1493 | "yallist": "^4.0.0" 1494 | } 1495 | }, 1496 | "minimatch": { 1497 | "version": "3.0.4", 1498 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1499 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1500 | "dev": true, 1501 | "requires": { 1502 | "brace-expansion": "^1.1.7" 1503 | } 1504 | }, 1505 | "ms": { 1506 | "version": "2.1.2", 1507 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1508 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1509 | "dev": true 1510 | }, 1511 | "natural-compare": { 1512 | "version": "1.4.0", 1513 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1514 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1515 | "dev": true 1516 | }, 1517 | "once": { 1518 | "version": "1.4.0", 1519 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1520 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1521 | "dev": true, 1522 | "requires": { 1523 | "wrappy": "1" 1524 | } 1525 | }, 1526 | "optionator": { 1527 | "version": "0.9.1", 1528 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1529 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 1530 | "dev": true, 1531 | "requires": { 1532 | "deep-is": "^0.1.3", 1533 | "fast-levenshtein": "^2.0.6", 1534 | "levn": "^0.4.1", 1535 | "prelude-ls": "^1.2.1", 1536 | "type-check": "^0.4.0", 1537 | "word-wrap": "^1.2.3" 1538 | } 1539 | }, 1540 | "parent-module": { 1541 | "version": "1.0.1", 1542 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1543 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1544 | "dev": true, 1545 | "requires": { 1546 | "callsites": "^3.0.0" 1547 | } 1548 | }, 1549 | "path-is-absolute": { 1550 | "version": "1.0.1", 1551 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1552 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1553 | "dev": true 1554 | }, 1555 | "path-key": { 1556 | "version": "3.1.1", 1557 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1558 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1559 | "dev": true 1560 | }, 1561 | "prelude-ls": { 1562 | "version": "1.2.1", 1563 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1564 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1565 | "dev": true 1566 | }, 1567 | "prettier": { 1568 | "version": "2.5.1", 1569 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", 1570 | "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", 1571 | "dev": true 1572 | }, 1573 | "progress": { 1574 | "version": "2.0.3", 1575 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1576 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1577 | "dev": true 1578 | }, 1579 | "punycode": { 1580 | "version": "2.1.1", 1581 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1582 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1583 | "dev": true 1584 | }, 1585 | "regexpp": { 1586 | "version": "3.2.0", 1587 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 1588 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 1589 | "dev": true 1590 | }, 1591 | "resolve-from": { 1592 | "version": "4.0.0", 1593 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1594 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1595 | "dev": true 1596 | }, 1597 | "rimraf": { 1598 | "version": "3.0.2", 1599 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1600 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1601 | "dev": true, 1602 | "requires": { 1603 | "glob": "^7.1.3" 1604 | } 1605 | }, 1606 | "semver": { 1607 | "version": "7.3.5", 1608 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 1609 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 1610 | "dev": true, 1611 | "requires": { 1612 | "lru-cache": "^6.0.0" 1613 | } 1614 | }, 1615 | "shebang-command": { 1616 | "version": "2.0.0", 1617 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1618 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1619 | "dev": true, 1620 | "requires": { 1621 | "shebang-regex": "^3.0.0" 1622 | } 1623 | }, 1624 | "shebang-regex": { 1625 | "version": "3.0.0", 1626 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1627 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1628 | "dev": true 1629 | }, 1630 | "strip-ansi": { 1631 | "version": "6.0.1", 1632 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1633 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1634 | "dev": true, 1635 | "requires": { 1636 | "ansi-regex": "^5.0.1" 1637 | } 1638 | }, 1639 | "strip-json-comments": { 1640 | "version": "3.1.1", 1641 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1642 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1643 | "dev": true 1644 | }, 1645 | "supports-color": { 1646 | "version": "7.2.0", 1647 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1648 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1649 | "dev": true, 1650 | "requires": { 1651 | "has-flag": "^4.0.0" 1652 | } 1653 | }, 1654 | "text-table": { 1655 | "version": "0.2.0", 1656 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1657 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1658 | "dev": true 1659 | }, 1660 | "type-check": { 1661 | "version": "0.4.0", 1662 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1663 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1664 | "dev": true, 1665 | "requires": { 1666 | "prelude-ls": "^1.2.1" 1667 | } 1668 | }, 1669 | "type-fest": { 1670 | "version": "0.20.2", 1671 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 1672 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 1673 | "dev": true 1674 | }, 1675 | "uri-js": { 1676 | "version": "4.4.1", 1677 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1678 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1679 | "dev": true, 1680 | "requires": { 1681 | "punycode": "^2.1.0" 1682 | } 1683 | }, 1684 | "v8-compile-cache": { 1685 | "version": "2.3.0", 1686 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 1687 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 1688 | "dev": true 1689 | }, 1690 | "which": { 1691 | "version": "2.0.2", 1692 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1693 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1694 | "dev": true, 1695 | "requires": { 1696 | "isexe": "^2.0.0" 1697 | } 1698 | }, 1699 | "word-wrap": { 1700 | "version": "1.2.3", 1701 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1702 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1703 | "dev": true 1704 | }, 1705 | "wrappy": { 1706 | "version": "1.0.2", 1707 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1708 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1709 | "dev": true 1710 | }, 1711 | "yallist": { 1712 | "version": "4.0.0", 1713 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1714 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1715 | "dev": true 1716 | } 1717 | } 1718 | } 1719 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hiapl", 3 | "version": "0.0.1", 4 | "description": "HTML is a programming language", 5 | "main": "index.js", 6 | "directories": { 7 | "lib": "lib", 8 | "test": "test" 9 | }, 10 | "scripts": { 11 | "test": "echo \"Error: no test specified\" && exit 1" 12 | }, 13 | "author": "Mariano Guerra", 14 | "license": "MIt", 15 | "devDependencies": { 16 | "eslint": "^8.6.0", 17 | "prettier": "^2.5.1" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /shell.nix: -------------------------------------------------------------------------------- 1 | { pkgs ? import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-21.11.tar.gz") {} }: 2 | 3 | pkgs.mkShell { 4 | LOCALE_ARCHIVE_2_27 = "${pkgs.glibcLocales}/lib/locale/locale-archive"; 5 | buildInputs = [ 6 | pkgs.glibcLocales 7 | pkgs.wget 8 | pkgs.nodejs-16_x 9 | pkgs.yarn 10 | pkgs.gnumake 11 | ]; 12 | shellHook = '' 13 | export LC_ALL=en_US.UTF-8 14 | export PATH=$PWD/node_modules/.bin:$PATH 15 | ''; 16 | } 17 | --------------------------------------------------------------------------------