├── .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 |
13 |
14 |
15 | String:
16 | Number:
17 | Boolean:
18 | Variable:
19 |
20 |
21 | String:
22 | Number:
23 | Boolean:
24 | Variable:
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | i = n % 3 == 0?
34 |
35 |
36 |
37 |
38 | i:
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | i = i % 3 == 0?
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | i = i % 4 == 0?
64 |
65 |
66 |
67 |
68 |
69 | i = i % 3 == 0 and i % 4 == 0?
70 |
71 |
72 | FizzBuzz
73 |
74 | Fizz
75 |
76 | Buzz
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 | i = i % 3 == 0?
101 |
102 |
103 |
104 | i = i % 4 == 0?
105 |
106 |
107 |
108 |
109 |
110 | i = i % 3 == 0 and i % 4 == 0?
111 |
112 |
113 | FizzBuzz
114 |
115 | Fizz
116 |
117 | Buzz
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
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 |
--------------------------------------------------------------------------------