`
46 |
47 | **Get your glossary ready and adjust it to your needs:**
48 |
49 | The default comes integrated under `/data/glossary.json` with the data shown below.
50 | But you definetly want to use your own :)
51 |
52 | You can set it like this:
53 |
54 | ```node
55 | import myGlossary from "../data/my-glossary.json";
56 |
57 | taggy.setGlossary(myGlossary);
58 | ```
59 |
60 | The structure is as follows:
61 |
62 |
63 | ```json
64 | {
65 | "tags": [
66 | {
67 | "category": "Herbs and Spices",
68 | "keywords": ["Rosemary", "Parsley", "Pepper", "Thyme", "Mint", "Chilli", "Basil", "Dill"]
69 | },
70 | {
71 | "category": "Vegetables",
72 | "keywords": ["Potatoes", "Cucumber", "Garlic", "Carrots", "Spinach", "Onion", "Mushrooms"]
73 | },
74 | {
75 | "category": "Fish",
76 | "keywords": ["Salmon", "Tuna", "Red Snapper", "Sardines", "Herring", "Flounder", "Bass", "Mackerel"]
77 | }
78 | ]
79 | }
80 |
81 | ```
82 |
83 | **Retrieve detected single Tag:**
84 |
85 | The input-element which was provided on instatiation will receive the parameter "value" with the detected tag in it. For example:
86 |
87 | ```html
88 |
91 | ```
92 | **Retrieve multiple Tags:**
93 |
94 | You can get multiple detected tags via the override-function, even when it's not visible to your users (e.g. "display: none"). Please make sure to turn it on (see options below). You'll get an element like this:
95 |
96 | ```html
97 |
98 |
Politics
99 |
Science
100 |
101 | ```
102 |
103 |
104 | ## Options
105 | You can add additional params when creating the taggy object:
106 | ```node
107 |
108 | let taggy = new Taggy(inputElement, outputElement,
109 | { submitButton: submit, loaderElement: loaderDiv, includeTop: true });
110 | ```
111 |
112 | | Parameter | Type | Info |
113 | |-----------------|------------------|------------------------------------------------------------------------------------------------------------------------------------|
114 | | submitButton | HTMLElement | Element (button) triggers analysis on click |
115 | | frequencyOutput | HTMLSpanElement | Element contains additional info on most occurencies of detected keywords |
116 | | overrideOutput | HTMLInputElement | Element shows multiple detected tags if analysis is not unambiguous |
117 | | loaderElement | HTMLElement | Element (loader/spinner) that gets hidden on completion |
118 | | useSubmit | boolean | true -> analyze input while typing / false -> use of submit button to process ('submitButton' has to be defined) \| default: false |
119 | | waittime | number | Duration for the time to wait until tags show up \| default: 1000 |
120 | | language | string | Language Code in ISO 639-1; see list of available options below| default: "en" |
121 | | assignTop | boolean | true -> return category of found keyword / false -> return the keyword itself \| default: true |
122 | | includeTop | boolean | Include name of the categories themself as keywords \| default: false |
123 | | messageNotFound | string | Customize displayed message if no tag is found \| default "No matching tag found" |
124 | | openthesaurus | boolean | Add call to openthesaurus API to enrich words (experimental) \| default: false |
125 | ## Framework Integration
126 |
127 | ### Angular
128 |
129 | This is a basic example on how you can integrate taggy into an Angular-project:
130 |
131 | **In your HTML-Template:**
132 | ```html
133 |
134 |
135 | ```
136 | **In your .ts-file:**
137 | ```ts
138 | import { ViewChild, ElementRef } from "@angular/core";
139 | import { Taggy } from "@b1tsteller/taggy";
140 |
141 | ...
142 | @ViewChild("taggyInput") taggyInput: ElementRef;
143 | @ViewChild("taggyOutput") taggyOutput: ElementRef;
144 |
145 | ...
146 | ngAfterViewInit() {
147 | let taggyObject = new Taggy(this.taggyInput.nativeElement, this.taggyOutput.nativeElement);
148 | }
149 | ```
150 |
151 | ## Languages
152 |
153 | taggy is language agnostic. But it's advised to define it, so common (and for this task irrelevant words) aka *stopwords* ("by", "a", "the", "also", "and", ...) in the input won't be processed. Below list from [here](https://www.npmjs.com/package/stopwords-iso)
154 |
155 |
ISO 639-1 Language List
156 |
157 |
158 | | ISO 639-1 Code | Language |
159 | | -------------- | -------- |
160 | | af | Afrikaans |
161 | | ar | Arabic |
162 | | hy | Armenian |
163 | | eu | Basque |
164 | | bn | Bengali |
165 | | br | Breton |
166 | | bg | Bulgarian |
167 | | ca | Catalan; Valencian |
168 | | cs | Czech |
169 | | zh | Chinese |
170 | | da | Danish |
171 | | de | German |
172 | | nl | Dutch; Flemish |
173 | | el | Greek, Modern (1453-) |
174 | | en | English |
175 | | eo | Esperanto |
176 | | et | Estonian |
177 | | fa | Persian |
178 | | fi | Finnish |
179 | | fr | French |
180 | | ga | Irish |
181 | | gl | Galician |
182 | | gu | Gujarati |
183 | | ha | Hausa |
184 | | he | Hebrew |
185 | | hi | Hindi |
186 | | hr | Croatian |
187 | | hu | Hungarian |
188 | | id | Indonesian |
189 | | it | Italian |
190 | | ja | Japanese |
191 | | ko | Korean |
192 | | ku | Kurdish |
193 | | la | Latin |
194 | | lv | Latvian |
195 | | lt | Lithuanian |
196 | | mr | Marathi |
197 | | ms | Malay |
198 | | no | Norwegian |
199 | | pl | Polish |
200 | | pt | Portuguese |
201 | | ro | Romanian; Moldavian; Moldovan |
202 | | ru | Russian |
203 | | sk | Slovak |
204 | | sl | Slovenian |
205 | | so | Somali |
206 | | st | Sotho, Southern |
207 | | es | Spanish; Castilian |
208 | | sw | Swahili |
209 | | sv | Swedish |
210 | | tl | Tagalog |
211 | | th | Thai |
212 | | tr | Turkish |
213 | | uk | Ukrainian |
214 | | ur | Urdu |
215 | | vi | Vietnamese |
216 | | yo | Yoruba |
217 | | zu | Zulu |
218 |
219 |
220 |
221 | ## Glossary Building
222 |
223 | If you don't have your own glossary ready to feed taggy, you can build your own with a service like this https://freetools.textmagic.com/word-cloud-generator and the following steps:
224 |
225 | 1. Paste all of your existing training/example texts **for one category** into the input field
226 | 2. Hit "Generate" and receive the wordcloud for this category
227 | 3. Click download as CSV and you have your keywords ready
228 | 4. Put the most frequent ones into your [taggy glossary-JSON](#taggy-glossary)
229 | 5. Repeat steps 1 - 4 for all your other categories
230 |
--------------------------------------------------------------------------------
/data/glossary.json:
--------------------------------------------------------------------------------
1 | {
2 | "tags": [
3 | {
4 | "category": "Herbs and Spices",
5 | "keywords": [
6 | "Rosemary",
7 | "Parsley",
8 | "Pepper",
9 | "Thyme",
10 | "Mint",
11 | "Chilli",
12 | "Basil",
13 | "Dill"
14 | ]
15 | },
16 | {
17 | "category": "Vegetables",
18 | "keywords": [
19 | "Potatoes",
20 | "Cucumber",
21 | "Garlic",
22 | "Carrots",
23 | "Spinach",
24 | "Onion",
25 | "Mushrooms"
26 | ]
27 | },
28 | {
29 | "category": "Fish",
30 | "keywords": [
31 | "Salmon",
32 | "Tuna",
33 | "Red Snapper",
34 | "Sardines",
35 | "Herring",
36 | "Flounder",
37 | "Bass",
38 | "Mackerel"
39 | ]
40 | }
41 | ]
42 | }
43 |
--------------------------------------------------------------------------------
/data/glossary_DE-abo.json:
--------------------------------------------------------------------------------
1 | {
2 | "tags": [
3 | {
4 | "category": "Print-Abo",
5 | "keywords": ["printausgabe", "gedruckt", "postkasten", "zeitung"]
6 | },
7 | {
8 | "category": "Online-Abo",
9 | "keywords": ["website", "kommentarfunktion", "forum"]
10 | },
11 | {
12 | "category": "ePaper-Abo",
13 | "keywords": [
14 | "eReader",
15 | "kindle",
16 | "tolino",
17 | "cloud",
18 | "download",
19 | "connection",
20 | "error"
21 | ]
22 | },
23 | {
24 | "category": "Nachsendeauftrag",
25 | "keywords": [
26 | "nachsendung",
27 | "urlaub",
28 | "umzug",
29 | "reise",
30 | "verreisen",
31 | "ausland",
32 | "adresse"
33 | ]
34 | },
35 | {
36 | "category": "Reklamation",
37 | "keywords": [
38 | "beschwerde",
39 | "beschweren",
40 | "ärgerlich",
41 | "frechheit",
42 | "unverschämt",
43 | "verzögert",
44 | "nicht gekommen",
45 | "verschwunden"
46 | ]
47 | }
48 | ]
49 | }
50 |
--------------------------------------------------------------------------------
/data/glossary_DE-bike.json:
--------------------------------------------------------------------------------
1 | {
2 | "tags": [
3 | {
4 | "category": "Mountainbike",
5 | "keywords": ["biken", "berge", "felsen", "fully", "mtb"]
6 | },
7 | {
8 | "category": "Rennrad",
9 | "keywords": ["straße", "dura ace", "tour de france"]
10 | },
11 | {
12 | "category": "Trekking/Reise",
13 | "keywords": ["trekking", "reise", "langstrecke", "gepäcktasche"]
14 | },
15 | {
16 | "category": "Urban",
17 | "keywords": ["pendeln", "fixed gear", "pegs"]
18 | }
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/data/glossary_EN-economy.json:
--------------------------------------------------------------------------------
1 | {
2 | "tags": [
3 | {
4 | "category": "Economy",
5 | "keywords": [
6 | "401a Retirement Plan",
7 | "401k Retirement Plan",
8 | "403b Retirement Plan",
9 | "457 Retirement Plan",
10 | "absolute advantage",
11 | "abandonment of the gold standard",
12 | "adaptive expectations",
13 | "aggregate demand (AD)",
14 | "aggregate supply (AS)",
15 | "aggregation problem",
16 | "agent",
17 | "agricultural economics",
18 | "allocative efficiency",
19 | "antitrust law",
20 | "applied economics",
21 | "appropriate technology",
22 | "arbitrage",
23 | "Arrow's impossibility ",
24 | "Austrian School",
25 | "autarky",
26 | "automatic stabilizer",
27 | "autonomous consumption",
28 | "average cost",
29 | "average fixed cost",
30 | "average variable cost",
31 | "average tax rate",
32 | "backward induction",
33 | "balance of payments",
34 | "balance of trade",
35 | "balanced budget",
36 | "bank",
37 | "bankruptcy",
38 | "barriers to entry",
39 | "barter",
40 | "behavioral economics",
41 | "Bellman equation",
42 | "bequest motive",
43 | "Bertrand–Edgeworth model",
44 | "Black–Scholes model",
45 | "board of governors",
46 | "bond",
47 | "borrower",
48 | "break-even",
49 | "Bretton Woods system",
50 | "budget deficit",
51 | "budget set",
52 | "budget surplus",
53 | "big push model",
54 | "business cycle",
55 | "business economics",
56 | "business sector",
57 | "capacity utilization",
58 | "capital",
59 | "capital cost",
60 | "capital flight",
61 | "capital good",
62 | "cartel",
63 | "central bank",
64 | "Certificate of ",
65 | "Choice (CD or COD)",
66 | "circular flow of income",
67 | "circulation",
68 | "classical economics",
69 | "command economy",
70 | "commerce",
71 | "commodity",
72 | "comparative advantage",
73 | "Competition (CD or COD)",
74 | "competition law",
75 | "competitive market",
76 | "complementary goods",
77 | "compound interest",
78 | "computational economics",
79 | "consumer",
80 | "consumer choice",
81 | "consumer confidence",
82 | "consumer price index (CPI)",
83 | "consumer surplus",
84 | "consumerism",
85 | "consumption",
86 | "consumption function",
87 | "contract curve",
88 | "contract theory",
89 | "convexity",
90 | "corporation",
91 | "cost",
92 | "cost curve",
93 | "cost of living",
94 | "cost overrun",
95 | "cost-benefit analysis",
96 | "Cost-of-production theory of ",
97 | "credit bureau",
98 | "credit card",
99 | "credit score",
100 | "credit rating",
101 | "credit union",
102 | "creditor",
103 | "crowding out",
104 | "cultural economics",
105 | "currency",
106 | "current ",
107 | "cyclical unemployment",
108 | "deadweight loss",
109 | "debt",
110 | "debtor",
111 | "deficit spending",
112 | "deflation",
113 | "deflator",
114 | "demand",
115 | "demand curve",
116 | "demand deposit",
117 | "demand shock",
118 | "demographic economics",
119 | "depreciation",
120 | "depression",
121 | "deregulation",
122 | "Diminishing marginal ",
123 | "diminishing returns",
124 | "discretionary income",
125 | "disinflation",
126 | "disposable ",
127 | "dissaving",
128 | "distribution",
129 | "domestic final demand",
130 | "domestic final supply (DFS)",
131 | "duopoly",
132 | "dynamic ",
133 | "econometrics",
134 | "economic costs",
135 | "economic development",
136 | "economic efficiency",
137 | "economic equilibrium",
138 | "economic growth",
139 | "economic indicator",
140 | "economic interdependence",
141 | "economic model",
142 | "economic profits",
143 | "economic rent",
144 | "economic shortage",
145 | "economic surplus",
146 | "economic system",
147 | "economics",
148 | "economies of agglomeration",
149 | "economies of scale",
150 | "economies of scope",
151 | "economist",
152 | "economy",
153 | "effective demand",
154 | "elastic demand",
155 | "elasticity",
156 | "engineering economics",
157 | "entrepreneurship",
158 | "environmental economics",
159 | "equal opportunity",
160 | "equilibrium",
161 | "equilibrium price",
162 | "equity",
163 | "excess supply",
164 | "exchange rate",
165 | "excludability",
166 | "expected utility hypothesis",
167 | "expeditionary economics",
168 | "experimental economics",
169 | "externality",
170 | "factors of production",
171 | "federal funds rate target",
172 | "Federal Open Market ",
173 | "Federal Reserve ",
174 | "finance",
175 | "financial economics",
176 | "financial institution",
177 | "financial markets",
178 | "financial planning",
179 | "financial risk",
180 | "financial transaction",
181 | "fiscal policy",
182 | "fixed costs",
183 | "foreign exchange market",
184 | "free market",
185 | "free trade",
186 | "frictional unemployment",
187 | "full employment",
188 | "full employment output (Y*)",
189 | "functions of money",
190 | "future value",
191 | "GDP deflator",
192 | "general equilibrium theory",
193 | "gift economy",
194 | "good",
195 | "government revenue",
196 | "government spending",
197 | "gross domestic product (GDP)",
198 | "growth recession",
199 | "happiness economics",
200 | "health economics",
201 | "heterodox economics",
202 | "household",
203 | "housing starts",
204 | "human capital",
205 | "humanistic economics",
206 | "hyperinflation",
207 | "implicit cost",
208 | "import quota",
209 | "import",
210 | "incentive",
211 | "income",
212 | "income distribution",
213 | "income effect",
214 | "increasing returns",
215 | "indifference curve",
216 | "Individual Retirement ",
217 | "industrial organization",
218 | "industry",
219 | "inelastic demand",
220 | "inflation",
221 | "inflation rate",
222 | "information economics",
223 | "interest",
224 | "interest rate",
225 | "international economics",
226 | "intertemporal choice",
227 | "inventory bounce",
228 | "investment",
229 | "investment fund",
230 | "invisible hand",
231 | "IS–LM model",
232 | "JEL classification codes",
233 | "job hunting",
234 | "joint product pricing",
235 | "just price",
236 | "Keynesian economics",
237 | "labor",
238 | "labor economics",
239 | "laissez-fairei>",
240 | "Law of Demand",
241 | "Law of Diminishing Marginal Utility",
242 | "law of increasing costs",
243 | "law of supply",
244 | "lease",
245 | "lending",
246 | "leprechaun economics",
247 | "liability",
248 | "loan",
249 | "local tax",
250 | "long run",
251 | "long-run shutdown condition",
252 | "long-term financing",
253 | "loose money policy",
254 | "macroeconomics",
255 | "Major ",
256 | "managerial economics",
257 | "marginal cost",
258 | "marginal product of labor",
259 | "marginal propensity to ",
260 | "marginal revenue",
261 | "marginal utility",
262 | "marginal value",
263 | "marginalism",
264 | "market",
265 | "market basket",
266 | "market economy",
267 | "market failures",
268 | "market structure",
269 | "market production",
270 | "market system",
271 | "markets",
272 | "mercantilism",
273 | "microeconomics",
274 | "mixed economy",
275 | "monetarism",
276 | "monetary economics",
277 | "monetary policy",
278 | "monetary system",
279 | "money",
280 | "money supply",
281 | "monopolistic competition",
282 | "monopoly",
283 | "monopsony",
284 | "mortgage",
285 | "motivation",
286 | "multiplier",
287 | "mutual fund",
288 | "Nash equilibrium",
289 | "national tax",
290 | "national wealth",
291 | "natural monopoly",
292 | "natural resource economics",
293 | "need",
294 | "nominal interest rates",
295 | "nominal prices",
296 | "nominal wages",
297 | "non-convexity",
298 | "non-price determinant of demand",
299 | "non-rivalry",
300 | "oligopoly",
301 | "oligopsony",
302 | "open-market operations",
303 | "opportunity cost",
304 | "organizational economics",
305 | "Pareto efficiency",
306 | "participation",
307 | "partnership",
308 | "per capita",
309 | "perfect competition",
310 | "personal property",
311 | "physical capital",
312 | "physiocracy",
313 | "population economics",
314 | "preference",
315 | "price",
316 | "price ceiling",
317 | "price controls",
318 | "price elasticity of demand",
319 | "price elasticity of supply",
320 | "price floor",
321 | "price index",
322 | "price level",
323 | "pricing",
324 | "prime rate",
325 | "producer",
326 | "producer price index",
327 | "producer surplus",
328 | "product differentiation",
329 | "production",
330 | "Production possibilities ",
331 | "productive efficiency",
332 | "production set",
333 | "profit",
334 | "profit motive",
335 | "progressive tax",
336 | "proportional tax",
337 | "proxemics",
338 | "public economics",
339 | "public good",
340 | "pure competition",
341 | "purchasing power parity (PPP)",
342 | "quantitative easing (QE)",
343 | "quantity demanded",
344 | "quantity supplied",
345 | "quantity theory of money",
346 | "quota",
347 | "rate of profit",
348 | "rational choice",
349 | "rational expectations",
350 | "rationing",
351 | "Real income ",
352 | "real interest rates",
353 | "real GDP",
354 | "real prices",
355 | "real wages",
356 | "recessions",
357 | "recoveries",
358 | "reflation",
359 | "regional science",
360 | "regressive tax",
361 | "regulation",
362 | "retail sales",
363 | "returns to scale",
364 | "revenue",
365 | "rights",
366 | "right to work law",
367 | "risk aversion",
368 | "rivalry",
369 | "saving",
370 | "scarcity",
371 | "sector",
372 | "service",
373 | "service economy",
374 | "shift work",
375 | "short run",
376 | "shortage",
377 | "short-run shutdown condition",
378 | "shrinkflation",
379 | "social behavior",
380 | "social choice theory",
381 | "social mobility",
382 | "socialist economics",
383 | "sociality",
384 | "socially optimal output level",
385 | "socioeconomics",
386 | "sole proprietorship",
387 | "solidarity economy",
388 | "stagflation",
389 | "standard of living",
390 | "state tax",
391 | "steady-state economy",
392 | "sticky prices",
393 | "Stockholm School",
394 | "structural unemployment",
395 | "substitution effect",
396 | "substitute good",
397 | "sunk costs",
398 | "supply",
399 | "supply and demand",
400 | "supply chain",
401 | "supply curve",
402 | "supply schedule",
403 | "supply shock",
404 | "supply-side economics",
405 | "surplus",
406 | "tariff",
407 | "tax",
408 | "tax rate",
409 | "terms of trade",
410 | "theory of the firm",
411 | "thermoeconomics",
412 | "time value of money",
413 | "total cost",
414 | "total surplus",
415 | "trade",
416 | "traditional economy",
417 | "transaction cost",
418 | "transport economics",
419 | "trough",
420 | "underemployment",
421 | "unemployment",
422 | "unit of account",
423 | "Unitary elastic ",
424 | "unskilled labor",
425 | "urban economics",
426 | "utilitarianism",
427 | "utility",
428 | "value",
429 | "value-added tax (VAT)",
430 | "variable costs",
431 | "velocity of money",
432 | "wage",
433 | "want",
434 | "wealth",
435 | "wealth effect",
436 | "welfare",
437 | "welfare economics",
438 | "willingness to accept (WTA)",
439 | "willingness to pay (WTP)",
440 | "yield",
441 | "zero-sum game"
442 | ]
443 | }
444 | ]
445 | }
446 |
--------------------------------------------------------------------------------
/data/glossary_EN-shop.json:
--------------------------------------------------------------------------------
1 | {
2 | "tags": [
3 | {
4 | "category": "Returnment",
5 | "keywords": ["return", "shipment", "reposit"]
6 | },
7 | {
8 | "category": "Feedback",
9 | "keywords": ["love", "great work", "fan"]
10 | },
11 | {
12 | "category": "Account Information",
13 | "keywords": ["information", "account"]
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/lib/index.d.ts:
--------------------------------------------------------------------------------
1 | import "regenerator-runtime/runtime";
2 | export interface IGlossaryData {
3 | tags: ITag[];
4 | }
5 | export interface ITag {
6 | category: string;
7 | keywords: string[];
8 | }
9 | export interface IOptions {
10 | submitButton: HTMLElement | undefined;
11 | frequencyOutput: HTMLSpanElement | undefined;
12 | overrideOutput: HTMLInputElement | undefined;
13 | loaderElement: HTMLElement | undefined;
14 | useSubmit: boolean;
15 | waittime: number;
16 | language: "en";
17 | assignTop: boolean;
18 | includeTop: boolean;
19 | messageNotFound: string;
20 | openthesaurus: boolean;
21 | }
22 | export declare class Taggy {
23 | name: string;
24 | private glossaryData;
25 | private winkTokenizer;
26 | private stopwords;
27 | private openthesaurus;
28 | private inputField;
29 | private outputField;
30 | private submitButton;
31 | private frequencyOutput;
32 | private overrideOutput;
33 | private loaderElement;
34 | private mostFrequentWords;
35 | private mostFrequentTopTags;
36 | private timeout;
37 | options: IOptions;
38 | /**
39 | * Create a new instance of taggy
40 | * @param inputField Input field where user text goes
41 | * @param outputField Output field where the tags will show up
42 | * @param options Optional: Provide options for taggy's behaviour
43 | */
44 | constructor(inputField: HTMLInputElement, outputField: HTMLInputElement, options?: IOptions);
45 | resetData(): void;
46 | setInputField(inputField: HTMLInputElement): void;
47 | setSubmitButton(submitButton: HTMLElement): void;
48 | setLanguage(languageCode: string): void;
49 | handleInputEventListener(): void;
50 | handleSubmitButtonEventListener(): Promise
;
51 | setOutputField(outputField: HTMLInputElement): void;
52 | setFrequencyOutput(frequencyOutput: HTMLSpanElement): void;
53 | setOverrideOutput(overrideOutput: HTMLInputElement): void;
54 | handleOverrideOutputEventListener(event: MouseEvent): void;
55 | getOptions(): Object;
56 | getGlossary(): IGlossaryData;
57 | setGlossary(glossaryToSet: IGlossaryData): void;
58 | setOption(option: string, value: boolean): void;
59 | getMostFrequentWords(): string[];
60 | callOpenThesaurusAPI(inputArray: string[]): Promise;
61 | processAndAddTags(input: string, outputField: HTMLInputElement): Promise;
62 | addTags(input: string): void;
63 | addFrequencyOutput(): void;
64 | addOverrideOutput(): void;
65 | deleteTags(): void;
66 | tokenize(input: string, type?: string): string[];
67 | normalize(inputArray: string[]): string[];
68 | filterStopWords(inputArray: any[]): any[];
69 | processInput(input: string): Promise;
70 | }
71 |
--------------------------------------------------------------------------------
/lib/index.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | exports.Taggy = void 0;
7 | const wink_tokenizer_1 = __importDefault(require("wink-tokenizer"));
8 | const stopwords_iso_1 = __importDefault(require("stopwords-iso"));
9 | const normalize_for_search_1 = __importDefault(require("normalize-for-search"));
10 | const lodash_1 = require("lodash");
11 | require("regenerator-runtime/runtime");
12 | const openthesaurus = require("openthesaurus");
13 | const glossaryData = require("../data/glossary.json");
14 | class Taggy {
15 | // * @param submitButton Optional: Submit button to trigger processing instead of automatic behavior while typing
16 | // * @param frequencyOutput Optional: Show frequency of identified tags
17 | // * @param overrideOutput Optional: Show identified top tags with possibility to override default detection
18 | // * @param loaderElement Optional: Add a loading indicator (spinner) that gets hidden on completion
19 | /**
20 | * Create a new instance of taggy
21 | * @param inputField Input field where user text goes
22 | * @param outputField Output field where the tags will show up
23 | * @param options Optional: Provide options for taggy's behaviour
24 | */
25 | constructor(inputField, outputField, options) {
26 | this.name = "taggy";
27 | this.mostFrequentWords = [];
28 | this.mostFrequentTopTags = [];
29 | this.timeout = null;
30 | this.options = {
31 | submitButton: undefined,
32 | frequencyOutput: undefined,
33 | overrideOutput: undefined,
34 | loaderElement: undefined,
35 | useSubmit: false,
36 | waittime: 1000,
37 | language: "en",
38 | assignTop: true,
39 | includeTop: false,
40 | messageNotFound: "No matching tag found",
41 | openthesaurus: false,
42 | };
43 | // if options get passed to constructor -> merge with existing options-object
44 | this.options = { ...this.options, ...options };
45 | // set demo-data for glossary
46 | this.glossaryData = glossaryData;
47 | if (options?.submitButton) {
48 | this.setSubmitButton(options.submitButton);
49 | this.options.useSubmit = true;
50 | }
51 | else {
52 | this.options.useSubmit = false;
53 | this.options.waittime = 500;
54 | }
55 | if (!inputField)
56 | throw new Error("No input-element provided for taggy");
57 | this.setInputField(inputField);
58 | if (!outputField)
59 | throw new Error("No output-element provided for taggy");
60 | this.outputField = outputField;
61 | if (options?.loaderElement)
62 | this.loaderElement = options.loaderElement;
63 | // this.submitButton = submitButton;
64 | this.winkTokenizer = new wink_tokenizer_1.default();
65 | // set stopwords-language | defaults to en
66 | this.setLanguage(this.options.language);
67 | this.openthesaurus = openthesaurus;
68 | if (options?.frequencyOutput)
69 | this.frequencyOutput = options.frequencyOutput;
70 | if (options?.overrideOutput) {
71 | this.setOverrideOutput(options.overrideOutput);
72 | }
73 | }
74 | resetData() {
75 | this.mostFrequentTopTags = [];
76 | this.mostFrequentWords = [];
77 | }
78 | setInputField(inputField) {
79 | this.inputField = inputField;
80 | if (this.options.useSubmit && this.submitButton) {
81 | return;
82 | // fall back to eventlistener when no submitbutton specified
83 | }
84 | else {
85 | this.inputField.addEventListener("input", (event) => {
86 | this.handleInputEventListener();
87 | });
88 | }
89 | }
90 | setSubmitButton(submitButton) {
91 | this.submitButton = submitButton;
92 | this.submitButton.addEventListener("click", (event) => {
93 | if (this.options.useSubmit) {
94 | this.handleSubmitButtonEventListener();
95 | }
96 | });
97 | }
98 | setLanguage(languageCode) {
99 | this.stopwords = stopwords_iso_1.default[languageCode];
100 | }
101 | handleInputEventListener() {
102 | if (this.options.useSubmit) {
103 | return;
104 | }
105 | if (this.loaderElement)
106 | this.loaderElement.style.setProperty("display", "block");
107 | this.deleteTags();
108 | clearTimeout(this.timeout);
109 | // make a new timeout set to go off in 1000ms
110 | this.timeout = setTimeout(async () => {
111 | await this.processAndAddTags(this.inputField.value, this.outputField);
112 | this.loaderElement?.style.setProperty("display", "none");
113 | // this.addTags(result);
114 | }, this.options.waittime);
115 | }
116 | async handleSubmitButtonEventListener() {
117 | if (this.loaderElement) {
118 | this.loaderElement.style.setProperty("display", "block");
119 | }
120 | this.deleteTags();
121 | // set and hide loading-indicator
122 | clearTimeout(this.timeout);
123 | this.timeout = setTimeout(async () => {
124 | await this.processAndAddTags(this.inputField.value, this.outputField);
125 | if (this.loaderElement) {
126 | this.loaderElement.style.setProperty("display", "none");
127 | }
128 | }, this.options.waittime);
129 | }
130 | setOutputField(outputField) {
131 | // outputField.setAttribute("value", "");
132 | outputField.readOnly = true;
133 | outputField.value = "";
134 | this.outputField = outputField;
135 | }
136 | setFrequencyOutput(frequencyOutput) {
137 | this.frequencyOutput = frequencyOutput;
138 | }
139 | setOverrideOutput(overrideOutput) {
140 | this.overrideOutput = overrideOutput;
141 | this.overrideOutput.addEventListener("click", (event) => {
142 | this.handleOverrideOutputEventListener(event);
143 | });
144 | }
145 | handleOverrideOutputEventListener(event) {
146 | const target = event.target;
147 | // prevent container above to be clickabe -> only tag-div itself
148 | if (event.target == event.currentTarget)
149 | return;
150 | if (target)
151 | this.addTags(target.innerHTML);
152 | }
153 | getOptions() {
154 | return this.options;
155 | }
156 | getGlossary() {
157 | return this.glossaryData;
158 | }
159 | setGlossary(glossaryToSet) {
160 | this.glossaryData = glossaryToSet;
161 | }
162 | setOption(option, value) {
163 | if (option == "useSubmit") {
164 | this.options.useSubmit = value;
165 | if (value) {
166 | this.setSubmitButton(this.submitButton);
167 | this.setInputField(this.inputField);
168 | }
169 | else {
170 | this.setInputField(this.inputField);
171 | }
172 | }
173 | if (option == "assignTop") {
174 | this.options.assignTop = value;
175 | }
176 | if (option == "openthesaurus") {
177 | this.options.openthesaurus = value;
178 | }
179 | if (option == "includeTop") {
180 | this.options.includeTop = value;
181 | }
182 | }
183 | getMostFrequentWords() {
184 | return this.mostFrequentWords;
185 | }
186 | async callOpenThesaurusAPI(inputArray) {
187 | let returnSet = [];
188 | // get synsets from openthesaurus?
189 | for await (const word of inputArray) {
190 | await this.openthesaurus.get(word).then((response) => {
191 | let optValues = [];
192 | // response.baseforms?
193 | if (response && response.synsets[0]?.terms) {
194 | response.synsets[0].terms.forEach((term) => {
195 | optValues.push((0, normalize_for_search_1.default)(term.term));
196 | });
197 | }
198 | returnSet = this.tokenize(this.filterStopWords(optValues).toString());
199 | });
200 | }
201 | return returnSet;
202 | }
203 | async processAndAddTags(input, outputField) {
204 | this.deleteTags();
205 | let processedInput = await this.processInput(input);
206 | if (processedInput) {
207 | this.addTags(processedInput[0]);
208 | return Promise.resolve(true);
209 | }
210 | return Promise.reject(false);
211 | }
212 | addTags(input) {
213 | this.deleteTags();
214 | if (this.outputField.lastChild)
215 | this.outputField.removeChild(this.outputField.lastChild);
216 | this.outputField.setAttribute("value", input);
217 | this.outputField.value = input;
218 | if (this.options.messageNotFound == "" && (!input || input == "")) {
219 | return;
220 | }
221 | const taggyTag = document.createElement("div");
222 | taggyTag.classList.add("taggy-tag");
223 | if (!input || input == "") {
224 | input = this.options.messageNotFound;
225 | taggyTag.classList.add("tag-not-found");
226 | }
227 | else {
228 | // set override tags
229 | if (this.overrideOutput && this.mostFrequentTopTags) {
230 | this.addOverrideOutput();
231 | }
232 | // set most frequent words
233 | this.addFrequencyOutput();
234 | }
235 | taggyTag.innerText = input;
236 | this.outputField.appendChild(taggyTag);
237 | // }
238 | }
239 | addFrequencyOutput() {
240 | if (this.frequencyOutput) {
241 | let frequencyList = [];
242 | // delete previous added words
243 | while (this.frequencyOutput.firstChild) {
244 | this.frequencyOutput.removeChild(this.frequencyOutput.firstChild);
245 | }
246 | // add new words
247 | this.getMostFrequentWords().forEach((word) => {
248 | let frequencySpan = document.createElement("span");
249 | frequencySpan.innerText = word;
250 | frequencySpan.classList.add("taggy-frequency");
251 | this.frequencyOutput?.appendChild(frequencySpan);
252 | });
253 | }
254 | }
255 | addOverrideOutput() {
256 | let topTags = [];
257 | Object.values(this.mostFrequentTopTags).forEach((element) => topTags.push(element.category));
258 | if (this.overrideOutput) {
259 | if (topTags.length > 1) {
260 | this.overrideOutput.setAttribute("value", topTags.join(", "));
261 | topTags.forEach((tag) => {
262 | let taggyTagOverride = document.createElement("div");
263 | taggyTagOverride.classList.add("taggy-tag", "taggy-override");
264 | taggyTagOverride.innerText = tag;
265 | this.overrideOutput.appendChild(taggyTagOverride);
266 | });
267 | }
268 | }
269 | }
270 | deleteTags() {
271 | // delete main tag
272 | if (this.outputField.lastChild)
273 | this.outputField.removeChild(this.outputField.lastChild);
274 | // delete override tags
275 | if (this.overrideOutput) {
276 | while (this.overrideOutput.firstChild) {
277 | this.overrideOutput.removeChild(this.overrideOutput.firstChild);
278 | }
279 | }
280 | }
281 | tokenize(input, type = "word") {
282 | let tokenizedItems = this.winkTokenizer.tokenize(input);
283 | let returnSet = [];
284 | let tokenizedWords = tokenizedItems.filter((item) => {
285 | return item.tag === type;
286 | });
287 | tokenizedWords.forEach((element) => {
288 | returnSet.push(element.value);
289 | });
290 | return returnSet;
291 | }
292 | normalize(inputArray) {
293 | let normalizedValues = [];
294 | for (const element of inputArray) {
295 | normalizedValues.push((0, normalize_for_search_1.default)(element));
296 | }
297 | return normalizedValues;
298 | }
299 | filterStopWords(inputArray) {
300 | return inputArray.filter((item) => !this.stopwords.includes(item.value));
301 | }
302 | async processInput(input) {
303 | this.resetData();
304 | // tokenize, filter out german stopwords and normalize input (remove umlaute and transform to lowercase)
305 | let tokenizedValues = this.normalize(this.filterStopWords(this.tokenize(input, "word")));
306 | // return if input is too small
307 | if (tokenizedValues.length < 1)
308 | return [];
309 | let enrichedInputValues = [];
310 | // don't call openthesaurus-API too often (-> results in too many requests error)
311 | if (this.options.openthesaurus && tokenizedValues.length < 20) {
312 | enrichedInputValues = await this.callOpenThesaurusAPI(tokenizedValues);
313 | }
314 | // flat out arrays
315 | enrichedInputValues = enrichedInputValues
316 | .flat()
317 | .concat(tokenizedValues.flat());
318 | let glossaryTags = [];
319 | let combinedWordsReturnSet = [];
320 | // if INCLUDE-TOP is set -> add top tag
321 | for (const category of this.glossaryData.tags) {
322 | if (this.options.includeTop) {
323 | glossaryTags.push((0, normalize_for_search_1.default)(category.category));
324 | }
325 | for (const word of category.keywords) {
326 | glossaryTags.push((0, normalize_for_search_1.default)(word));
327 | }
328 | }
329 | // check input for words with whitespaces and "-"
330 | for (const word of glossaryTags) {
331 | if (word.includes(" ") || word.includes("-")) {
332 | if ((0, normalize_for_search_1.default)(input).includes(word)) {
333 | combinedWordsReturnSet.push(word);
334 | }
335 | }
336 | }
337 | let returnValues = [];
338 | // look for matches in glossary
339 | for (const glossaryValue of glossaryTags) {
340 | for (const inputValue of enrichedInputValues) {
341 | if (inputValue == glossaryValue) {
342 | returnValues.push(inputValue);
343 | }
344 | }
345 | }
346 | let finalSet = [...combinedWordsReturnSet].concat(returnValues);
347 | let topTagCount = [];
348 | let maxCount = 0;
349 | // if assignTop is set -> return top categegory
350 | if (this.options.assignTop) {
351 | let count = 0;
352 | // if includeTop ist set -> add top categories
353 | this.glossaryData.tags.forEach((category) => {
354 | count = 0;
355 | finalSet.forEach((element) => {
356 | // if includeTop ist set -> add top categories
357 | if ((0, normalize_for_search_1.default)(category.category) == element) {
358 | count += 1;
359 | }
360 | if (this.normalize(category.keywords).includes(element)) {
361 | count += 1;
362 | }
363 | });
364 | topTagCount.push({
365 | category: category.category,
366 | count: count,
367 | });
368 | if (count > maxCount)
369 | maxCount = count;
370 | });
371 | // set most frequent top tags
372 | let groupedMostFrequentTopTags = (0, lodash_1.groupBy)(topTagCount, "count");
373 | if (groupedMostFrequentTopTags[maxCount][0].count) {
374 | this.mostFrequentTopTags = groupedMostFrequentTopTags[maxCount];
375 | }
376 | }
377 | // set most frequent matches
378 | this.mostFrequentWords = modeArray(finalSet);
379 | let finalValue = (0, lodash_1.sample)(this.mostFrequentWords);
380 | // if assignTop is set -> return top categegory
381 | if (this.options.assignTop) {
382 | let topTags = [];
383 | Object.values(this.mostFrequentTopTags).forEach((element) => {
384 | if (element.count)
385 | topTags.push(element.category);
386 | });
387 | let tempValue = (0, lodash_1.sample)(topTags);
388 | if (tempValue)
389 | finalValue = tempValue;
390 | }
391 | return finalValue ? [finalValue] : [""];
392 | }
393 | }
394 | exports.Taggy = Taggy;
395 | function enrichWithOpenThesaurus(inputArray) {
396 | let enrichedArray = [];
397 | for (const word of inputArray) {
398 | // get baseforms from openthesaurus?
399 | openthesaurus.get(word).then((response) => {
400 | if (response && response.baseforms) {
401 | enrichedArray.push(response.baseforms);
402 | }
403 | });
404 | }
405 | return enrichedArray;
406 | }
407 | // return an array of mode element(s) -> highest occurrences
408 | function modeArray(array) {
409 | if (array.length == 0)
410 | return null;
411 | var modeMap = {}, maxCount = 1, modes = [];
412 | for (var i = 0; i < array.length; i++) {
413 | var el = array[i];
414 | if (modeMap[el] == null)
415 | modeMap[el] = 1;
416 | else
417 | modeMap[el]++;
418 | if (modeMap[el] > maxCount) {
419 | modes = [el];
420 | maxCount = modeMap[el];
421 | }
422 | else if (modeMap[el] == maxCount) {
423 | modes.push(el);
424 | maxCount = modeMap[el];
425 | }
426 | }
427 | return modes;
428 | }
429 | //# sourceMappingURL=index.js.map
--------------------------------------------------------------------------------
/lib/index.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@b1tsteller/taggy",
3 | "version": "0.0.10",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "@b1tsteller/taggy",
9 | "version": "0.0.10",
10 | "license": "MIT",
11 | "dependencies": {
12 | "lodash": "^4.17.21",
13 | "normalize-for-search": "^2.1.0",
14 | "openthesaurus": "^1.0.2",
15 | "regenerator-runtime": "^0.13.9",
16 | "stopwords-iso": "^1.1.0",
17 | "wink-tokenizer": "^5.3.0"
18 | },
19 | "devDependencies": {
20 | "@types/lodash": "^4.14.186",
21 | "@types/node": "^18.7.18",
22 | "@types/normalize-for-search": "^2.1.0",
23 | "@types/wink-tokenizer": "^4.0.3",
24 | "webpack-cli": "^5.0.0"
25 | }
26 | },
27 | "node_modules/@discoveryjs/json-ext": {
28 | "version": "0.5.7",
29 | "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
30 | "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
31 | "dev": true,
32 | "engines": {
33 | "node": ">=10.0.0"
34 | }
35 | },
36 | "node_modules/@jridgewell/gen-mapping": {
37 | "version": "0.3.2",
38 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
39 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
40 | "dev": true,
41 | "peer": true,
42 | "dependencies": {
43 | "@jridgewell/set-array": "^1.0.1",
44 | "@jridgewell/sourcemap-codec": "^1.4.10",
45 | "@jridgewell/trace-mapping": "^0.3.9"
46 | },
47 | "engines": {
48 | "node": ">=6.0.0"
49 | }
50 | },
51 | "node_modules/@jridgewell/resolve-uri": {
52 | "version": "3.1.0",
53 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
54 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
55 | "dev": true,
56 | "peer": true,
57 | "engines": {
58 | "node": ">=6.0.0"
59 | }
60 | },
61 | "node_modules/@jridgewell/set-array": {
62 | "version": "1.1.2",
63 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
64 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
65 | "dev": true,
66 | "peer": true,
67 | "engines": {
68 | "node": ">=6.0.0"
69 | }
70 | },
71 | "node_modules/@jridgewell/source-map": {
72 | "version": "0.3.2",
73 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
74 | "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
75 | "dev": true,
76 | "peer": true,
77 | "dependencies": {
78 | "@jridgewell/gen-mapping": "^0.3.0",
79 | "@jridgewell/trace-mapping": "^0.3.9"
80 | }
81 | },
82 | "node_modules/@jridgewell/sourcemap-codec": {
83 | "version": "1.4.14",
84 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
85 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
86 | "dev": true,
87 | "peer": true
88 | },
89 | "node_modules/@jridgewell/trace-mapping": {
90 | "version": "0.3.17",
91 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
92 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
93 | "dev": true,
94 | "peer": true,
95 | "dependencies": {
96 | "@jridgewell/resolve-uri": "3.1.0",
97 | "@jridgewell/sourcemap-codec": "1.4.14"
98 | }
99 | },
100 | "node_modules/@types/eslint": {
101 | "version": "8.4.10",
102 | "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz",
103 | "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==",
104 | "dev": true,
105 | "peer": true,
106 | "dependencies": {
107 | "@types/estree": "*",
108 | "@types/json-schema": "*"
109 | }
110 | },
111 | "node_modules/@types/eslint-scope": {
112 | "version": "3.7.4",
113 | "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
114 | "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
115 | "dev": true,
116 | "peer": true,
117 | "dependencies": {
118 | "@types/eslint": "*",
119 | "@types/estree": "*"
120 | }
121 | },
122 | "node_modules/@types/estree": {
123 | "version": "0.0.51",
124 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
125 | "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
126 | "dev": true,
127 | "peer": true
128 | },
129 | "node_modules/@types/json-schema": {
130 | "version": "7.0.11",
131 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
132 | "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
133 | "dev": true,
134 | "peer": true
135 | },
136 | "node_modules/@types/lodash": {
137 | "version": "4.14.186",
138 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz",
139 | "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==",
140 | "dev": true
141 | },
142 | "node_modules/@types/node": {
143 | "version": "18.7.18",
144 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.18.tgz",
145 | "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==",
146 | "dev": true
147 | },
148 | "node_modules/@types/normalize-for-search": {
149 | "version": "2.1.0",
150 | "resolved": "https://registry.npmjs.org/@types/normalize-for-search/-/normalize-for-search-2.1.0.tgz",
151 | "integrity": "sha512-FCtwm1A29kneeKo6xZCh6YMsbbqKiRpeh1PnjTEa6/34p/Dj9hYA/J1fJ9bWla4H+BmwIa3HeSh0uXDeypcRoA==",
152 | "dev": true
153 | },
154 | "node_modules/@types/wink-tokenizer": {
155 | "version": "4.0.3",
156 | "resolved": "https://registry.npmjs.org/@types/wink-tokenizer/-/wink-tokenizer-4.0.3.tgz",
157 | "integrity": "sha512-GvScwtp6bpVtq9AmSCFr+xu9EJhw436lNQAIecBpkrWVjR7OImJIHJjdznBeJDe5AmusdUbH16cToV9013QQmA==",
158 | "dev": true
159 | },
160 | "node_modules/@webassemblyjs/ast": {
161 | "version": "1.11.1",
162 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
163 | "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
164 | "dev": true,
165 | "peer": true,
166 | "dependencies": {
167 | "@webassemblyjs/helper-numbers": "1.11.1",
168 | "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
169 | }
170 | },
171 | "node_modules/@webassemblyjs/floating-point-hex-parser": {
172 | "version": "1.11.1",
173 | "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
174 | "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
175 | "dev": true,
176 | "peer": true
177 | },
178 | "node_modules/@webassemblyjs/helper-api-error": {
179 | "version": "1.11.1",
180 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
181 | "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
182 | "dev": true,
183 | "peer": true
184 | },
185 | "node_modules/@webassemblyjs/helper-buffer": {
186 | "version": "1.11.1",
187 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
188 | "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
189 | "dev": true,
190 | "peer": true
191 | },
192 | "node_modules/@webassemblyjs/helper-numbers": {
193 | "version": "1.11.1",
194 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
195 | "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
196 | "dev": true,
197 | "peer": true,
198 | "dependencies": {
199 | "@webassemblyjs/floating-point-hex-parser": "1.11.1",
200 | "@webassemblyjs/helper-api-error": "1.11.1",
201 | "@xtuc/long": "4.2.2"
202 | }
203 | },
204 | "node_modules/@webassemblyjs/helper-wasm-bytecode": {
205 | "version": "1.11.1",
206 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
207 | "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
208 | "dev": true,
209 | "peer": true
210 | },
211 | "node_modules/@webassemblyjs/helper-wasm-section": {
212 | "version": "1.11.1",
213 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
214 | "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
215 | "dev": true,
216 | "peer": true,
217 | "dependencies": {
218 | "@webassemblyjs/ast": "1.11.1",
219 | "@webassemblyjs/helper-buffer": "1.11.1",
220 | "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
221 | "@webassemblyjs/wasm-gen": "1.11.1"
222 | }
223 | },
224 | "node_modules/@webassemblyjs/ieee754": {
225 | "version": "1.11.1",
226 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
227 | "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
228 | "dev": true,
229 | "peer": true,
230 | "dependencies": {
231 | "@xtuc/ieee754": "^1.2.0"
232 | }
233 | },
234 | "node_modules/@webassemblyjs/leb128": {
235 | "version": "1.11.1",
236 | "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
237 | "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
238 | "dev": true,
239 | "peer": true,
240 | "dependencies": {
241 | "@xtuc/long": "4.2.2"
242 | }
243 | },
244 | "node_modules/@webassemblyjs/utf8": {
245 | "version": "1.11.1",
246 | "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
247 | "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
248 | "dev": true,
249 | "peer": true
250 | },
251 | "node_modules/@webassemblyjs/wasm-edit": {
252 | "version": "1.11.1",
253 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
254 | "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
255 | "dev": true,
256 | "peer": true,
257 | "dependencies": {
258 | "@webassemblyjs/ast": "1.11.1",
259 | "@webassemblyjs/helper-buffer": "1.11.1",
260 | "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
261 | "@webassemblyjs/helper-wasm-section": "1.11.1",
262 | "@webassemblyjs/wasm-gen": "1.11.1",
263 | "@webassemblyjs/wasm-opt": "1.11.1",
264 | "@webassemblyjs/wasm-parser": "1.11.1",
265 | "@webassemblyjs/wast-printer": "1.11.1"
266 | }
267 | },
268 | "node_modules/@webassemblyjs/wasm-gen": {
269 | "version": "1.11.1",
270 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
271 | "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
272 | "dev": true,
273 | "peer": true,
274 | "dependencies": {
275 | "@webassemblyjs/ast": "1.11.1",
276 | "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
277 | "@webassemblyjs/ieee754": "1.11.1",
278 | "@webassemblyjs/leb128": "1.11.1",
279 | "@webassemblyjs/utf8": "1.11.1"
280 | }
281 | },
282 | "node_modules/@webassemblyjs/wasm-opt": {
283 | "version": "1.11.1",
284 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
285 | "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
286 | "dev": true,
287 | "peer": true,
288 | "dependencies": {
289 | "@webassemblyjs/ast": "1.11.1",
290 | "@webassemblyjs/helper-buffer": "1.11.1",
291 | "@webassemblyjs/wasm-gen": "1.11.1",
292 | "@webassemblyjs/wasm-parser": "1.11.1"
293 | }
294 | },
295 | "node_modules/@webassemblyjs/wasm-parser": {
296 | "version": "1.11.1",
297 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
298 | "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
299 | "dev": true,
300 | "peer": true,
301 | "dependencies": {
302 | "@webassemblyjs/ast": "1.11.1",
303 | "@webassemblyjs/helper-api-error": "1.11.1",
304 | "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
305 | "@webassemblyjs/ieee754": "1.11.1",
306 | "@webassemblyjs/leb128": "1.11.1",
307 | "@webassemblyjs/utf8": "1.11.1"
308 | }
309 | },
310 | "node_modules/@webassemblyjs/wast-printer": {
311 | "version": "1.11.1",
312 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
313 | "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
314 | "dev": true,
315 | "peer": true,
316 | "dependencies": {
317 | "@webassemblyjs/ast": "1.11.1",
318 | "@xtuc/long": "4.2.2"
319 | }
320 | },
321 | "node_modules/@webpack-cli/configtest": {
322 | "version": "2.0.0",
323 | "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.0.0.tgz",
324 | "integrity": "sha512-war4OU8NGjBqU3DP3bx6ciODXIh7dSXcpQq+P4K2Tqyd8L5OjZ7COx9QXx/QdCIwL2qoX09Wr4Cwf7uS4qdEng==",
325 | "dev": true,
326 | "engines": {
327 | "node": ">=14.15.0"
328 | },
329 | "peerDependencies": {
330 | "webpack": "5.x.x",
331 | "webpack-cli": "5.x.x"
332 | }
333 | },
334 | "node_modules/@webpack-cli/info": {
335 | "version": "2.0.0",
336 | "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.0.tgz",
337 | "integrity": "sha512-NNxDgbo4VOkNhOlTgY0Elhz3vKpOJq4/PKeKg7r8cmYM+GQA9vDofLYyup8jS6EpUvhNmR30cHTCEIyvXpskwA==",
338 | "dev": true,
339 | "engines": {
340 | "node": ">=14.15.0"
341 | },
342 | "peerDependencies": {
343 | "webpack": "5.x.x",
344 | "webpack-cli": "5.x.x"
345 | }
346 | },
347 | "node_modules/@webpack-cli/serve": {
348 | "version": "2.0.0",
349 | "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.0.tgz",
350 | "integrity": "sha512-Rumq5mHvGXamnOh3O8yLk1sjx8dB30qF1OeR6VC00DIR6SLJ4bwwUGKC4pE7qBFoQyyh0H9sAg3fikYgAqVR0w==",
351 | "dev": true,
352 | "engines": {
353 | "node": ">=14.15.0"
354 | },
355 | "peerDependencies": {
356 | "webpack": "5.x.x",
357 | "webpack-cli": "5.x.x"
358 | },
359 | "peerDependenciesMeta": {
360 | "webpack-dev-server": {
361 | "optional": true
362 | }
363 | }
364 | },
365 | "node_modules/@xtuc/ieee754": {
366 | "version": "1.2.0",
367 | "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
368 | "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
369 | "dev": true,
370 | "peer": true
371 | },
372 | "node_modules/@xtuc/long": {
373 | "version": "4.2.2",
374 | "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
375 | "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
376 | "dev": true,
377 | "peer": true
378 | },
379 | "node_modules/acorn": {
380 | "version": "8.8.1",
381 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
382 | "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
383 | "dev": true,
384 | "peer": true,
385 | "bin": {
386 | "acorn": "bin/acorn"
387 | },
388 | "engines": {
389 | "node": ">=0.4.0"
390 | }
391 | },
392 | "node_modules/acorn-import-assertions": {
393 | "version": "1.8.0",
394 | "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
395 | "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
396 | "dev": true,
397 | "peer": true,
398 | "peerDependencies": {
399 | "acorn": "^8"
400 | }
401 | },
402 | "node_modules/ajv": {
403 | "version": "6.12.6",
404 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
405 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
406 | "dev": true,
407 | "peer": true,
408 | "dependencies": {
409 | "fast-deep-equal": "^3.1.1",
410 | "fast-json-stable-stringify": "^2.0.0",
411 | "json-schema-traverse": "^0.4.1",
412 | "uri-js": "^4.2.2"
413 | },
414 | "funding": {
415 | "type": "github",
416 | "url": "https://github.com/sponsors/epoberezkin"
417 | }
418 | },
419 | "node_modules/ajv-keywords": {
420 | "version": "3.5.2",
421 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
422 | "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
423 | "dev": true,
424 | "peer": true,
425 | "peerDependencies": {
426 | "ajv": "^6.9.1"
427 | }
428 | },
429 | "node_modules/browserslist": {
430 | "version": "4.21.4",
431 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
432 | "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
433 | "dev": true,
434 | "funding": [
435 | {
436 | "type": "opencollective",
437 | "url": "https://opencollective.com/browserslist"
438 | },
439 | {
440 | "type": "tidelift",
441 | "url": "https://tidelift.com/funding/github/npm/browserslist"
442 | }
443 | ],
444 | "peer": true,
445 | "dependencies": {
446 | "caniuse-lite": "^1.0.30001400",
447 | "electron-to-chromium": "^1.4.251",
448 | "node-releases": "^2.0.6",
449 | "update-browserslist-db": "^1.0.9"
450 | },
451 | "bin": {
452 | "browserslist": "cli.js"
453 | },
454 | "engines": {
455 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
456 | }
457 | },
458 | "node_modules/buffer-from": {
459 | "version": "1.1.2",
460 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
461 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
462 | "dev": true,
463 | "peer": true
464 | },
465 | "node_modules/caniuse-lite": {
466 | "version": "1.0.30001434",
467 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz",
468 | "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==",
469 | "dev": true,
470 | "funding": [
471 | {
472 | "type": "opencollective",
473 | "url": "https://opencollective.com/browserslist"
474 | },
475 | {
476 | "type": "tidelift",
477 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
478 | }
479 | ],
480 | "peer": true
481 | },
482 | "node_modules/chrome-trace-event": {
483 | "version": "1.0.3",
484 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
485 | "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
486 | "dev": true,
487 | "peer": true,
488 | "engines": {
489 | "node": ">=6.0"
490 | }
491 | },
492 | "node_modules/clone-deep": {
493 | "version": "4.0.1",
494 | "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
495 | "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
496 | "dev": true,
497 | "dependencies": {
498 | "is-plain-object": "^2.0.4",
499 | "kind-of": "^6.0.2",
500 | "shallow-clone": "^3.0.0"
501 | },
502 | "engines": {
503 | "node": ">=6"
504 | }
505 | },
506 | "node_modules/colorette": {
507 | "version": "2.0.19",
508 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
509 | "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
510 | "dev": true
511 | },
512 | "node_modules/commander": {
513 | "version": "2.20.3",
514 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
515 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
516 | "dev": true,
517 | "peer": true
518 | },
519 | "node_modules/cross-spawn": {
520 | "version": "7.0.3",
521 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
522 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
523 | "dev": true,
524 | "dependencies": {
525 | "path-key": "^3.1.0",
526 | "shebang-command": "^2.0.0",
527 | "which": "^2.0.1"
528 | },
529 | "engines": {
530 | "node": ">= 8"
531 | }
532 | },
533 | "node_modules/electron-to-chromium": {
534 | "version": "1.4.284",
535 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
536 | "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
537 | "dev": true,
538 | "peer": true
539 | },
540 | "node_modules/emoji-regex": {
541 | "version": "9.2.2",
542 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
543 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
544 | },
545 | "node_modules/enhanced-resolve": {
546 | "version": "5.12.0",
547 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
548 | "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
549 | "dev": true,
550 | "peer": true,
551 | "dependencies": {
552 | "graceful-fs": "^4.2.4",
553 | "tapable": "^2.2.0"
554 | },
555 | "engines": {
556 | "node": ">=10.13.0"
557 | }
558 | },
559 | "node_modules/envinfo": {
560 | "version": "7.8.1",
561 | "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
562 | "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==",
563 | "dev": true,
564 | "bin": {
565 | "envinfo": "dist/cli.js"
566 | },
567 | "engines": {
568 | "node": ">=4"
569 | }
570 | },
571 | "node_modules/es-module-lexer": {
572 | "version": "0.9.3",
573 | "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
574 | "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
575 | "dev": true,
576 | "peer": true
577 | },
578 | "node_modules/escalade": {
579 | "version": "3.1.1",
580 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
581 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
582 | "dev": true,
583 | "peer": true,
584 | "engines": {
585 | "node": ">=6"
586 | }
587 | },
588 | "node_modules/eslint-scope": {
589 | "version": "5.1.1",
590 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
591 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
592 | "dev": true,
593 | "peer": true,
594 | "dependencies": {
595 | "esrecurse": "^4.3.0",
596 | "estraverse": "^4.1.1"
597 | },
598 | "engines": {
599 | "node": ">=8.0.0"
600 | }
601 | },
602 | "node_modules/esrecurse": {
603 | "version": "4.3.0",
604 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
605 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
606 | "dev": true,
607 | "peer": true,
608 | "dependencies": {
609 | "estraverse": "^5.2.0"
610 | },
611 | "engines": {
612 | "node": ">=4.0"
613 | }
614 | },
615 | "node_modules/esrecurse/node_modules/estraverse": {
616 | "version": "5.3.0",
617 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
618 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
619 | "dev": true,
620 | "peer": true,
621 | "engines": {
622 | "node": ">=4.0"
623 | }
624 | },
625 | "node_modules/estraverse": {
626 | "version": "4.3.0",
627 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
628 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
629 | "dev": true,
630 | "peer": true,
631 | "engines": {
632 | "node": ">=4.0"
633 | }
634 | },
635 | "node_modules/events": {
636 | "version": "3.3.0",
637 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
638 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
639 | "dev": true,
640 | "peer": true,
641 | "engines": {
642 | "node": ">=0.8.x"
643 | }
644 | },
645 | "node_modules/fast-deep-equal": {
646 | "version": "3.1.3",
647 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
648 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
649 | "dev": true,
650 | "peer": true
651 | },
652 | "node_modules/fast-json-stable-stringify": {
653 | "version": "2.1.0",
654 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
655 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
656 | "dev": true,
657 | "peer": true
658 | },
659 | "node_modules/fastest-levenshtein": {
660 | "version": "1.0.16",
661 | "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
662 | "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
663 | "dev": true,
664 | "engines": {
665 | "node": ">= 4.9.1"
666 | }
667 | },
668 | "node_modules/find-up": {
669 | "version": "4.1.0",
670 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
671 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
672 | "dev": true,
673 | "dependencies": {
674 | "locate-path": "^5.0.0",
675 | "path-exists": "^4.0.0"
676 | },
677 | "engines": {
678 | "node": ">=8"
679 | }
680 | },
681 | "node_modules/function-bind": {
682 | "version": "1.1.1",
683 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
684 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
685 | "dev": true
686 | },
687 | "node_modules/glob-to-regexp": {
688 | "version": "0.4.1",
689 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
690 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
691 | "dev": true,
692 | "peer": true
693 | },
694 | "node_modules/graceful-fs": {
695 | "version": "4.2.10",
696 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
697 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
698 | "dev": true,
699 | "peer": true
700 | },
701 | "node_modules/has": {
702 | "version": "1.0.3",
703 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
704 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
705 | "dev": true,
706 | "dependencies": {
707 | "function-bind": "^1.1.1"
708 | },
709 | "engines": {
710 | "node": ">= 0.4.0"
711 | }
712 | },
713 | "node_modules/has-flag": {
714 | "version": "4.0.0",
715 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
716 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
717 | "dev": true,
718 | "peer": true,
719 | "engines": {
720 | "node": ">=8"
721 | }
722 | },
723 | "node_modules/import-local": {
724 | "version": "3.1.0",
725 | "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
726 | "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
727 | "dev": true,
728 | "dependencies": {
729 | "pkg-dir": "^4.2.0",
730 | "resolve-cwd": "^3.0.0"
731 | },
732 | "bin": {
733 | "import-local-fixture": "fixtures/cli.js"
734 | },
735 | "engines": {
736 | "node": ">=8"
737 | },
738 | "funding": {
739 | "url": "https://github.com/sponsors/sindresorhus"
740 | }
741 | },
742 | "node_modules/interpret": {
743 | "version": "3.1.1",
744 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
745 | "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
746 | "dev": true,
747 | "engines": {
748 | "node": ">=10.13.0"
749 | }
750 | },
751 | "node_modules/is-core-module": {
752 | "version": "2.11.0",
753 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
754 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
755 | "dev": true,
756 | "dependencies": {
757 | "has": "^1.0.3"
758 | },
759 | "funding": {
760 | "url": "https://github.com/sponsors/ljharb"
761 | }
762 | },
763 | "node_modules/is-plain-object": {
764 | "version": "2.0.4",
765 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
766 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
767 | "dev": true,
768 | "dependencies": {
769 | "isobject": "^3.0.1"
770 | },
771 | "engines": {
772 | "node": ">=0.10.0"
773 | }
774 | },
775 | "node_modules/isexe": {
776 | "version": "2.0.0",
777 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
778 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
779 | "dev": true
780 | },
781 | "node_modules/isobject": {
782 | "version": "3.0.1",
783 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
784 | "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
785 | "dev": true,
786 | "engines": {
787 | "node": ">=0.10.0"
788 | }
789 | },
790 | "node_modules/jest-worker": {
791 | "version": "27.5.1",
792 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
793 | "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
794 | "dev": true,
795 | "peer": true,
796 | "dependencies": {
797 | "@types/node": "*",
798 | "merge-stream": "^2.0.0",
799 | "supports-color": "^8.0.0"
800 | },
801 | "engines": {
802 | "node": ">= 10.13.0"
803 | }
804 | },
805 | "node_modules/json-parse-even-better-errors": {
806 | "version": "2.3.1",
807 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
808 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
809 | "dev": true,
810 | "peer": true
811 | },
812 | "node_modules/json-schema-traverse": {
813 | "version": "0.4.1",
814 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
815 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
816 | "dev": true,
817 | "peer": true
818 | },
819 | "node_modules/kind-of": {
820 | "version": "6.0.3",
821 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
822 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
823 | "dev": true,
824 | "engines": {
825 | "node": ">=0.10.0"
826 | }
827 | },
828 | "node_modules/loader-runner": {
829 | "version": "4.3.0",
830 | "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
831 | "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
832 | "dev": true,
833 | "peer": true,
834 | "engines": {
835 | "node": ">=6.11.5"
836 | }
837 | },
838 | "node_modules/locate-path": {
839 | "version": "5.0.0",
840 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
841 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
842 | "dev": true,
843 | "dependencies": {
844 | "p-locate": "^4.1.0"
845 | },
846 | "engines": {
847 | "node": ">=8"
848 | }
849 | },
850 | "node_modules/lodash": {
851 | "version": "4.17.21",
852 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
853 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
854 | },
855 | "node_modules/merge-stream": {
856 | "version": "2.0.0",
857 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
858 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
859 | "dev": true,
860 | "peer": true
861 | },
862 | "node_modules/mime-db": {
863 | "version": "1.52.0",
864 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
865 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
866 | "dev": true,
867 | "peer": true,
868 | "engines": {
869 | "node": ">= 0.6"
870 | }
871 | },
872 | "node_modules/mime-types": {
873 | "version": "2.1.35",
874 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
875 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
876 | "dev": true,
877 | "peer": true,
878 | "dependencies": {
879 | "mime-db": "1.52.0"
880 | },
881 | "engines": {
882 | "node": ">= 0.6"
883 | }
884 | },
885 | "node_modules/neo-async": {
886 | "version": "2.6.2",
887 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
888 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
889 | "dev": true,
890 | "peer": true
891 | },
892 | "node_modules/node-fetch": {
893 | "version": "2.6.7",
894 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
895 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
896 | "dependencies": {
897 | "whatwg-url": "^5.0.0"
898 | },
899 | "engines": {
900 | "node": "4.x || >=6.0.0"
901 | },
902 | "peerDependencies": {
903 | "encoding": "^0.1.0"
904 | },
905 | "peerDependenciesMeta": {
906 | "encoding": {
907 | "optional": true
908 | }
909 | }
910 | },
911 | "node_modules/node-releases": {
912 | "version": "2.0.6",
913 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
914 | "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
915 | "dev": true,
916 | "peer": true
917 | },
918 | "node_modules/normalize-for-search": {
919 | "version": "2.1.0",
920 | "resolved": "https://registry.npmjs.org/normalize-for-search/-/normalize-for-search-2.1.0.tgz",
921 | "integrity": "sha512-SL9xv8eEXXQfj7wo4aq/QjgCLzcKSLYAoVcRyaxJPZJkiIlGX579TiuoLWrFSkG6MZfesJ9fRpYcdpYKwckZUw=="
922 | },
923 | "node_modules/openthesaurus": {
924 | "version": "1.0.2",
925 | "resolved": "https://registry.npmjs.org/openthesaurus/-/openthesaurus-1.0.2.tgz",
926 | "integrity": "sha512-RKbRgRVk2q7+4mR8CxKY11pWpRDrAGwmtABjbuBJMeuh6wiWNuUP8ZJPezQbt9aULqji60sjpv4UZAvbBg2h9g==",
927 | "dependencies": {
928 | "node-fetch": "^2.6.1"
929 | },
930 | "funding": {
931 | "url": "https://github.com/marvinschopf/openthesaurus?sponsor=1"
932 | }
933 | },
934 | "node_modules/p-limit": {
935 | "version": "2.3.0",
936 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
937 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
938 | "dev": true,
939 | "dependencies": {
940 | "p-try": "^2.0.0"
941 | },
942 | "engines": {
943 | "node": ">=6"
944 | },
945 | "funding": {
946 | "url": "https://github.com/sponsors/sindresorhus"
947 | }
948 | },
949 | "node_modules/p-locate": {
950 | "version": "4.1.0",
951 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
952 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
953 | "dev": true,
954 | "dependencies": {
955 | "p-limit": "^2.2.0"
956 | },
957 | "engines": {
958 | "node": ">=8"
959 | }
960 | },
961 | "node_modules/p-try": {
962 | "version": "2.2.0",
963 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
964 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
965 | "dev": true,
966 | "engines": {
967 | "node": ">=6"
968 | }
969 | },
970 | "node_modules/path-exists": {
971 | "version": "4.0.0",
972 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
973 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
974 | "dev": true,
975 | "engines": {
976 | "node": ">=8"
977 | }
978 | },
979 | "node_modules/path-key": {
980 | "version": "3.1.1",
981 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
982 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
983 | "dev": true,
984 | "engines": {
985 | "node": ">=8"
986 | }
987 | },
988 | "node_modules/path-parse": {
989 | "version": "1.0.7",
990 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
991 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
992 | "dev": true
993 | },
994 | "node_modules/picocolors": {
995 | "version": "1.0.0",
996 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
997 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
998 | "dev": true,
999 | "peer": true
1000 | },
1001 | "node_modules/pkg-dir": {
1002 | "version": "4.2.0",
1003 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
1004 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
1005 | "dev": true,
1006 | "dependencies": {
1007 | "find-up": "^4.0.0"
1008 | },
1009 | "engines": {
1010 | "node": ">=8"
1011 | }
1012 | },
1013 | "node_modules/punycode": {
1014 | "version": "2.1.1",
1015 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1016 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
1017 | "dev": true,
1018 | "peer": true,
1019 | "engines": {
1020 | "node": ">=6"
1021 | }
1022 | },
1023 | "node_modules/randombytes": {
1024 | "version": "2.1.0",
1025 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
1026 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
1027 | "dev": true,
1028 | "peer": true,
1029 | "dependencies": {
1030 | "safe-buffer": "^5.1.0"
1031 | }
1032 | },
1033 | "node_modules/rechoir": {
1034 | "version": "0.8.0",
1035 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
1036 | "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
1037 | "dev": true,
1038 | "dependencies": {
1039 | "resolve": "^1.20.0"
1040 | },
1041 | "engines": {
1042 | "node": ">= 10.13.0"
1043 | }
1044 | },
1045 | "node_modules/regenerator-runtime": {
1046 | "version": "0.13.9",
1047 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
1048 | "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
1049 | },
1050 | "node_modules/resolve": {
1051 | "version": "1.22.1",
1052 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
1053 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
1054 | "dev": true,
1055 | "dependencies": {
1056 | "is-core-module": "^2.9.0",
1057 | "path-parse": "^1.0.7",
1058 | "supports-preserve-symlinks-flag": "^1.0.0"
1059 | },
1060 | "bin": {
1061 | "resolve": "bin/resolve"
1062 | },
1063 | "funding": {
1064 | "url": "https://github.com/sponsors/ljharb"
1065 | }
1066 | },
1067 | "node_modules/resolve-cwd": {
1068 | "version": "3.0.0",
1069 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
1070 | "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
1071 | "dev": true,
1072 | "dependencies": {
1073 | "resolve-from": "^5.0.0"
1074 | },
1075 | "engines": {
1076 | "node": ">=8"
1077 | }
1078 | },
1079 | "node_modules/resolve-from": {
1080 | "version": "5.0.0",
1081 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
1082 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
1083 | "dev": true,
1084 | "engines": {
1085 | "node": ">=8"
1086 | }
1087 | },
1088 | "node_modules/safe-buffer": {
1089 | "version": "5.2.1",
1090 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1091 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1092 | "dev": true,
1093 | "funding": [
1094 | {
1095 | "type": "github",
1096 | "url": "https://github.com/sponsors/feross"
1097 | },
1098 | {
1099 | "type": "patreon",
1100 | "url": "https://www.patreon.com/feross"
1101 | },
1102 | {
1103 | "type": "consulting",
1104 | "url": "https://feross.org/support"
1105 | }
1106 | ],
1107 | "peer": true
1108 | },
1109 | "node_modules/schema-utils": {
1110 | "version": "3.1.1",
1111 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
1112 | "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
1113 | "dev": true,
1114 | "peer": true,
1115 | "dependencies": {
1116 | "@types/json-schema": "^7.0.8",
1117 | "ajv": "^6.12.5",
1118 | "ajv-keywords": "^3.5.2"
1119 | },
1120 | "engines": {
1121 | "node": ">= 10.13.0"
1122 | },
1123 | "funding": {
1124 | "type": "opencollective",
1125 | "url": "https://opencollective.com/webpack"
1126 | }
1127 | },
1128 | "node_modules/serialize-javascript": {
1129 | "version": "6.0.0",
1130 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
1131 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
1132 | "dev": true,
1133 | "peer": true,
1134 | "dependencies": {
1135 | "randombytes": "^2.1.0"
1136 | }
1137 | },
1138 | "node_modules/shallow-clone": {
1139 | "version": "3.0.1",
1140 | "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
1141 | "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
1142 | "dev": true,
1143 | "dependencies": {
1144 | "kind-of": "^6.0.2"
1145 | },
1146 | "engines": {
1147 | "node": ">=8"
1148 | }
1149 | },
1150 | "node_modules/shebang-command": {
1151 | "version": "2.0.0",
1152 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
1153 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
1154 | "dev": true,
1155 | "dependencies": {
1156 | "shebang-regex": "^3.0.0"
1157 | },
1158 | "engines": {
1159 | "node": ">=8"
1160 | }
1161 | },
1162 | "node_modules/shebang-regex": {
1163 | "version": "3.0.0",
1164 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
1165 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
1166 | "dev": true,
1167 | "engines": {
1168 | "node": ">=8"
1169 | }
1170 | },
1171 | "node_modules/source-map": {
1172 | "version": "0.6.1",
1173 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1174 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1175 | "dev": true,
1176 | "peer": true,
1177 | "engines": {
1178 | "node": ">=0.10.0"
1179 | }
1180 | },
1181 | "node_modules/source-map-support": {
1182 | "version": "0.5.21",
1183 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
1184 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
1185 | "dev": true,
1186 | "peer": true,
1187 | "dependencies": {
1188 | "buffer-from": "^1.0.0",
1189 | "source-map": "^0.6.0"
1190 | }
1191 | },
1192 | "node_modules/stopwords-iso": {
1193 | "version": "1.1.0",
1194 | "resolved": "https://registry.npmjs.org/stopwords-iso/-/stopwords-iso-1.1.0.tgz",
1195 | "integrity": "sha512-I6GPS/E0zyieHehMRPQcqkiBMJKGgLta+1hREixhoLPqEA0AlVFiC43dl8uPpmkkeRdDMzYRWFWk5/l9x7nmNg==",
1196 | "engines": {
1197 | "node": ">=0.10.0"
1198 | }
1199 | },
1200 | "node_modules/supports-color": {
1201 | "version": "8.1.1",
1202 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
1203 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
1204 | "dev": true,
1205 | "peer": true,
1206 | "dependencies": {
1207 | "has-flag": "^4.0.0"
1208 | },
1209 | "engines": {
1210 | "node": ">=10"
1211 | },
1212 | "funding": {
1213 | "url": "https://github.com/chalk/supports-color?sponsor=1"
1214 | }
1215 | },
1216 | "node_modules/supports-preserve-symlinks-flag": {
1217 | "version": "1.0.0",
1218 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1219 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1220 | "dev": true,
1221 | "engines": {
1222 | "node": ">= 0.4"
1223 | },
1224 | "funding": {
1225 | "url": "https://github.com/sponsors/ljharb"
1226 | }
1227 | },
1228 | "node_modules/tapable": {
1229 | "version": "2.2.1",
1230 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
1231 | "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
1232 | "dev": true,
1233 | "peer": true,
1234 | "engines": {
1235 | "node": ">=6"
1236 | }
1237 | },
1238 | "node_modules/terser": {
1239 | "version": "5.16.0",
1240 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.0.tgz",
1241 | "integrity": "sha512-KjTV81QKStSfwbNiwlBXfcgMcOloyuRdb62/iLFPGBcVNF4EXjhdYBhYHmbJpiBrVxZhDvltE11j+LBQUxEEJg==",
1242 | "dev": true,
1243 | "peer": true,
1244 | "dependencies": {
1245 | "@jridgewell/source-map": "^0.3.2",
1246 | "acorn": "^8.5.0",
1247 | "commander": "^2.20.0",
1248 | "source-map-support": "~0.5.20"
1249 | },
1250 | "bin": {
1251 | "terser": "bin/terser"
1252 | },
1253 | "engines": {
1254 | "node": ">=10"
1255 | }
1256 | },
1257 | "node_modules/terser-webpack-plugin": {
1258 | "version": "5.3.6",
1259 | "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz",
1260 | "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==",
1261 | "dev": true,
1262 | "peer": true,
1263 | "dependencies": {
1264 | "@jridgewell/trace-mapping": "^0.3.14",
1265 | "jest-worker": "^27.4.5",
1266 | "schema-utils": "^3.1.1",
1267 | "serialize-javascript": "^6.0.0",
1268 | "terser": "^5.14.1"
1269 | },
1270 | "engines": {
1271 | "node": ">= 10.13.0"
1272 | },
1273 | "funding": {
1274 | "type": "opencollective",
1275 | "url": "https://opencollective.com/webpack"
1276 | },
1277 | "peerDependencies": {
1278 | "webpack": "^5.1.0"
1279 | },
1280 | "peerDependenciesMeta": {
1281 | "@swc/core": {
1282 | "optional": true
1283 | },
1284 | "esbuild": {
1285 | "optional": true
1286 | },
1287 | "uglify-js": {
1288 | "optional": true
1289 | }
1290 | }
1291 | },
1292 | "node_modules/tr46": {
1293 | "version": "0.0.3",
1294 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
1295 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
1296 | },
1297 | "node_modules/update-browserslist-db": {
1298 | "version": "1.0.10",
1299 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
1300 | "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
1301 | "dev": true,
1302 | "funding": [
1303 | {
1304 | "type": "opencollective",
1305 | "url": "https://opencollective.com/browserslist"
1306 | },
1307 | {
1308 | "type": "tidelift",
1309 | "url": "https://tidelift.com/funding/github/npm/browserslist"
1310 | }
1311 | ],
1312 | "peer": true,
1313 | "dependencies": {
1314 | "escalade": "^3.1.1",
1315 | "picocolors": "^1.0.0"
1316 | },
1317 | "bin": {
1318 | "browserslist-lint": "cli.js"
1319 | },
1320 | "peerDependencies": {
1321 | "browserslist": ">= 4.21.0"
1322 | }
1323 | },
1324 | "node_modules/uri-js": {
1325 | "version": "4.4.1",
1326 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
1327 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
1328 | "dev": true,
1329 | "peer": true,
1330 | "dependencies": {
1331 | "punycode": "^2.1.0"
1332 | }
1333 | },
1334 | "node_modules/watchpack": {
1335 | "version": "2.4.0",
1336 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
1337 | "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
1338 | "dev": true,
1339 | "peer": true,
1340 | "dependencies": {
1341 | "glob-to-regexp": "^0.4.1",
1342 | "graceful-fs": "^4.1.2"
1343 | },
1344 | "engines": {
1345 | "node": ">=10.13.0"
1346 | }
1347 | },
1348 | "node_modules/webidl-conversions": {
1349 | "version": "3.0.1",
1350 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
1351 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
1352 | },
1353 | "node_modules/webpack": {
1354 | "version": "5.75.0",
1355 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz",
1356 | "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==",
1357 | "dev": true,
1358 | "peer": true,
1359 | "dependencies": {
1360 | "@types/eslint-scope": "^3.7.3",
1361 | "@types/estree": "^0.0.51",
1362 | "@webassemblyjs/ast": "1.11.1",
1363 | "@webassemblyjs/wasm-edit": "1.11.1",
1364 | "@webassemblyjs/wasm-parser": "1.11.1",
1365 | "acorn": "^8.7.1",
1366 | "acorn-import-assertions": "^1.7.6",
1367 | "browserslist": "^4.14.5",
1368 | "chrome-trace-event": "^1.0.2",
1369 | "enhanced-resolve": "^5.10.0",
1370 | "es-module-lexer": "^0.9.0",
1371 | "eslint-scope": "5.1.1",
1372 | "events": "^3.2.0",
1373 | "glob-to-regexp": "^0.4.1",
1374 | "graceful-fs": "^4.2.9",
1375 | "json-parse-even-better-errors": "^2.3.1",
1376 | "loader-runner": "^4.2.0",
1377 | "mime-types": "^2.1.27",
1378 | "neo-async": "^2.6.2",
1379 | "schema-utils": "^3.1.0",
1380 | "tapable": "^2.1.1",
1381 | "terser-webpack-plugin": "^5.1.3",
1382 | "watchpack": "^2.4.0",
1383 | "webpack-sources": "^3.2.3"
1384 | },
1385 | "bin": {
1386 | "webpack": "bin/webpack.js"
1387 | },
1388 | "engines": {
1389 | "node": ">=10.13.0"
1390 | },
1391 | "funding": {
1392 | "type": "opencollective",
1393 | "url": "https://opencollective.com/webpack"
1394 | },
1395 | "peerDependenciesMeta": {
1396 | "webpack-cli": {
1397 | "optional": true
1398 | }
1399 | }
1400 | },
1401 | "node_modules/webpack-cli": {
1402 | "version": "5.0.0",
1403 | "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.0.tgz",
1404 | "integrity": "sha512-AACDTo20yG+xn6HPW5xjbn2Be4KUzQPebWXsDMHwPPyKh9OnTOJgZN2Nc+g/FZKV3ObRTYsGvibAvc+5jAUrVA==",
1405 | "dev": true,
1406 | "dependencies": {
1407 | "@discoveryjs/json-ext": "^0.5.0",
1408 | "@webpack-cli/configtest": "^2.0.0",
1409 | "@webpack-cli/info": "^2.0.0",
1410 | "@webpack-cli/serve": "^2.0.0",
1411 | "colorette": "^2.0.14",
1412 | "commander": "^9.4.1",
1413 | "cross-spawn": "^7.0.3",
1414 | "envinfo": "^7.7.3",
1415 | "fastest-levenshtein": "^1.0.12",
1416 | "import-local": "^3.0.2",
1417 | "interpret": "^3.1.1",
1418 | "rechoir": "^0.8.0",
1419 | "webpack-merge": "^5.7.3"
1420 | },
1421 | "bin": {
1422 | "webpack-cli": "bin/cli.js"
1423 | },
1424 | "engines": {
1425 | "node": ">=14.15.0"
1426 | },
1427 | "funding": {
1428 | "type": "opencollective",
1429 | "url": "https://opencollective.com/webpack"
1430 | },
1431 | "peerDependencies": {
1432 | "webpack": "5.x.x"
1433 | },
1434 | "peerDependenciesMeta": {
1435 | "@webpack-cli/generators": {
1436 | "optional": true
1437 | },
1438 | "webpack-bundle-analyzer": {
1439 | "optional": true
1440 | },
1441 | "webpack-dev-server": {
1442 | "optional": true
1443 | }
1444 | }
1445 | },
1446 | "node_modules/webpack-cli/node_modules/commander": {
1447 | "version": "9.4.1",
1448 | "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz",
1449 | "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==",
1450 | "dev": true,
1451 | "engines": {
1452 | "node": "^12.20.0 || >=14"
1453 | }
1454 | },
1455 | "node_modules/webpack-merge": {
1456 | "version": "5.8.0",
1457 | "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz",
1458 | "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==",
1459 | "dev": true,
1460 | "dependencies": {
1461 | "clone-deep": "^4.0.1",
1462 | "wildcard": "^2.0.0"
1463 | },
1464 | "engines": {
1465 | "node": ">=10.0.0"
1466 | }
1467 | },
1468 | "node_modules/webpack-sources": {
1469 | "version": "3.2.3",
1470 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
1471 | "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
1472 | "dev": true,
1473 | "peer": true,
1474 | "engines": {
1475 | "node": ">=10.13.0"
1476 | }
1477 | },
1478 | "node_modules/whatwg-url": {
1479 | "version": "5.0.0",
1480 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
1481 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
1482 | "dependencies": {
1483 | "tr46": "~0.0.3",
1484 | "webidl-conversions": "^3.0.0"
1485 | }
1486 | },
1487 | "node_modules/which": {
1488 | "version": "2.0.2",
1489 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1490 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1491 | "dev": true,
1492 | "dependencies": {
1493 | "isexe": "^2.0.0"
1494 | },
1495 | "bin": {
1496 | "node-which": "bin/node-which"
1497 | },
1498 | "engines": {
1499 | "node": ">= 8"
1500 | }
1501 | },
1502 | "node_modules/wildcard": {
1503 | "version": "2.0.0",
1504 | "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
1505 | "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
1506 | "dev": true
1507 | },
1508 | "node_modules/wink-tokenizer": {
1509 | "version": "5.3.0",
1510 | "resolved": "https://registry.npmjs.org/wink-tokenizer/-/wink-tokenizer-5.3.0.tgz",
1511 | "integrity": "sha512-O/yAw0g3FmSgeeQuYAJJfP7fVPB4A6ay0018qASh79aWmIOyPYy4j4r9EQT8xBjicja6lCLvgRVAybmEBaATQA==",
1512 | "dependencies": {
1513 | "emoji-regex": "^9.0.0"
1514 | }
1515 | }
1516 | },
1517 | "dependencies": {
1518 | "@discoveryjs/json-ext": {
1519 | "version": "0.5.7",
1520 | "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
1521 | "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
1522 | "dev": true
1523 | },
1524 | "@jridgewell/gen-mapping": {
1525 | "version": "0.3.2",
1526 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
1527 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
1528 | "dev": true,
1529 | "peer": true,
1530 | "requires": {
1531 | "@jridgewell/set-array": "^1.0.1",
1532 | "@jridgewell/sourcemap-codec": "^1.4.10",
1533 | "@jridgewell/trace-mapping": "^0.3.9"
1534 | }
1535 | },
1536 | "@jridgewell/resolve-uri": {
1537 | "version": "3.1.0",
1538 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
1539 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
1540 | "dev": true,
1541 | "peer": true
1542 | },
1543 | "@jridgewell/set-array": {
1544 | "version": "1.1.2",
1545 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
1546 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
1547 | "dev": true,
1548 | "peer": true
1549 | },
1550 | "@jridgewell/source-map": {
1551 | "version": "0.3.2",
1552 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
1553 | "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
1554 | "dev": true,
1555 | "peer": true,
1556 | "requires": {
1557 | "@jridgewell/gen-mapping": "^0.3.0",
1558 | "@jridgewell/trace-mapping": "^0.3.9"
1559 | }
1560 | },
1561 | "@jridgewell/sourcemap-codec": {
1562 | "version": "1.4.14",
1563 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
1564 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
1565 | "dev": true,
1566 | "peer": true
1567 | },
1568 | "@jridgewell/trace-mapping": {
1569 | "version": "0.3.17",
1570 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
1571 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
1572 | "dev": true,
1573 | "peer": true,
1574 | "requires": {
1575 | "@jridgewell/resolve-uri": "3.1.0",
1576 | "@jridgewell/sourcemap-codec": "1.4.14"
1577 | }
1578 | },
1579 | "@types/eslint": {
1580 | "version": "8.4.10",
1581 | "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz",
1582 | "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==",
1583 | "dev": true,
1584 | "peer": true,
1585 | "requires": {
1586 | "@types/estree": "*",
1587 | "@types/json-schema": "*"
1588 | }
1589 | },
1590 | "@types/eslint-scope": {
1591 | "version": "3.7.4",
1592 | "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
1593 | "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
1594 | "dev": true,
1595 | "peer": true,
1596 | "requires": {
1597 | "@types/eslint": "*",
1598 | "@types/estree": "*"
1599 | }
1600 | },
1601 | "@types/estree": {
1602 | "version": "0.0.51",
1603 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
1604 | "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
1605 | "dev": true,
1606 | "peer": true
1607 | },
1608 | "@types/json-schema": {
1609 | "version": "7.0.11",
1610 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
1611 | "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
1612 | "dev": true,
1613 | "peer": true
1614 | },
1615 | "@types/lodash": {
1616 | "version": "4.14.186",
1617 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz",
1618 | "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==",
1619 | "dev": true
1620 | },
1621 | "@types/node": {
1622 | "version": "18.7.18",
1623 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.18.tgz",
1624 | "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==",
1625 | "dev": true
1626 | },
1627 | "@types/normalize-for-search": {
1628 | "version": "2.1.0",
1629 | "resolved": "https://registry.npmjs.org/@types/normalize-for-search/-/normalize-for-search-2.1.0.tgz",
1630 | "integrity": "sha512-FCtwm1A29kneeKo6xZCh6YMsbbqKiRpeh1PnjTEa6/34p/Dj9hYA/J1fJ9bWla4H+BmwIa3HeSh0uXDeypcRoA==",
1631 | "dev": true
1632 | },
1633 | "@types/wink-tokenizer": {
1634 | "version": "4.0.3",
1635 | "resolved": "https://registry.npmjs.org/@types/wink-tokenizer/-/wink-tokenizer-4.0.3.tgz",
1636 | "integrity": "sha512-GvScwtp6bpVtq9AmSCFr+xu9EJhw436lNQAIecBpkrWVjR7OImJIHJjdznBeJDe5AmusdUbH16cToV9013QQmA==",
1637 | "dev": true
1638 | },
1639 | "@webassemblyjs/ast": {
1640 | "version": "1.11.1",
1641 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
1642 | "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
1643 | "dev": true,
1644 | "peer": true,
1645 | "requires": {
1646 | "@webassemblyjs/helper-numbers": "1.11.1",
1647 | "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
1648 | }
1649 | },
1650 | "@webassemblyjs/floating-point-hex-parser": {
1651 | "version": "1.11.1",
1652 | "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
1653 | "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
1654 | "dev": true,
1655 | "peer": true
1656 | },
1657 | "@webassemblyjs/helper-api-error": {
1658 | "version": "1.11.1",
1659 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
1660 | "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
1661 | "dev": true,
1662 | "peer": true
1663 | },
1664 | "@webassemblyjs/helper-buffer": {
1665 | "version": "1.11.1",
1666 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
1667 | "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
1668 | "dev": true,
1669 | "peer": true
1670 | },
1671 | "@webassemblyjs/helper-numbers": {
1672 | "version": "1.11.1",
1673 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
1674 | "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
1675 | "dev": true,
1676 | "peer": true,
1677 | "requires": {
1678 | "@webassemblyjs/floating-point-hex-parser": "1.11.1",
1679 | "@webassemblyjs/helper-api-error": "1.11.1",
1680 | "@xtuc/long": "4.2.2"
1681 | }
1682 | },
1683 | "@webassemblyjs/helper-wasm-bytecode": {
1684 | "version": "1.11.1",
1685 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
1686 | "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
1687 | "dev": true,
1688 | "peer": true
1689 | },
1690 | "@webassemblyjs/helper-wasm-section": {
1691 | "version": "1.11.1",
1692 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
1693 | "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
1694 | "dev": true,
1695 | "peer": true,
1696 | "requires": {
1697 | "@webassemblyjs/ast": "1.11.1",
1698 | "@webassemblyjs/helper-buffer": "1.11.1",
1699 | "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
1700 | "@webassemblyjs/wasm-gen": "1.11.1"
1701 | }
1702 | },
1703 | "@webassemblyjs/ieee754": {
1704 | "version": "1.11.1",
1705 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
1706 | "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
1707 | "dev": true,
1708 | "peer": true,
1709 | "requires": {
1710 | "@xtuc/ieee754": "^1.2.0"
1711 | }
1712 | },
1713 | "@webassemblyjs/leb128": {
1714 | "version": "1.11.1",
1715 | "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
1716 | "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
1717 | "dev": true,
1718 | "peer": true,
1719 | "requires": {
1720 | "@xtuc/long": "4.2.2"
1721 | }
1722 | },
1723 | "@webassemblyjs/utf8": {
1724 | "version": "1.11.1",
1725 | "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
1726 | "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
1727 | "dev": true,
1728 | "peer": true
1729 | },
1730 | "@webassemblyjs/wasm-edit": {
1731 | "version": "1.11.1",
1732 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
1733 | "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
1734 | "dev": true,
1735 | "peer": true,
1736 | "requires": {
1737 | "@webassemblyjs/ast": "1.11.1",
1738 | "@webassemblyjs/helper-buffer": "1.11.1",
1739 | "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
1740 | "@webassemblyjs/helper-wasm-section": "1.11.1",
1741 | "@webassemblyjs/wasm-gen": "1.11.1",
1742 | "@webassemblyjs/wasm-opt": "1.11.1",
1743 | "@webassemblyjs/wasm-parser": "1.11.1",
1744 | "@webassemblyjs/wast-printer": "1.11.1"
1745 | }
1746 | },
1747 | "@webassemblyjs/wasm-gen": {
1748 | "version": "1.11.1",
1749 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
1750 | "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
1751 | "dev": true,
1752 | "peer": true,
1753 | "requires": {
1754 | "@webassemblyjs/ast": "1.11.1",
1755 | "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
1756 | "@webassemblyjs/ieee754": "1.11.1",
1757 | "@webassemblyjs/leb128": "1.11.1",
1758 | "@webassemblyjs/utf8": "1.11.1"
1759 | }
1760 | },
1761 | "@webassemblyjs/wasm-opt": {
1762 | "version": "1.11.1",
1763 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
1764 | "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
1765 | "dev": true,
1766 | "peer": true,
1767 | "requires": {
1768 | "@webassemblyjs/ast": "1.11.1",
1769 | "@webassemblyjs/helper-buffer": "1.11.1",
1770 | "@webassemblyjs/wasm-gen": "1.11.1",
1771 | "@webassemblyjs/wasm-parser": "1.11.1"
1772 | }
1773 | },
1774 | "@webassemblyjs/wasm-parser": {
1775 | "version": "1.11.1",
1776 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
1777 | "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
1778 | "dev": true,
1779 | "peer": true,
1780 | "requires": {
1781 | "@webassemblyjs/ast": "1.11.1",
1782 | "@webassemblyjs/helper-api-error": "1.11.1",
1783 | "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
1784 | "@webassemblyjs/ieee754": "1.11.1",
1785 | "@webassemblyjs/leb128": "1.11.1",
1786 | "@webassemblyjs/utf8": "1.11.1"
1787 | }
1788 | },
1789 | "@webassemblyjs/wast-printer": {
1790 | "version": "1.11.1",
1791 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
1792 | "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
1793 | "dev": true,
1794 | "peer": true,
1795 | "requires": {
1796 | "@webassemblyjs/ast": "1.11.1",
1797 | "@xtuc/long": "4.2.2"
1798 | }
1799 | },
1800 | "@webpack-cli/configtest": {
1801 | "version": "2.0.0",
1802 | "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.0.0.tgz",
1803 | "integrity": "sha512-war4OU8NGjBqU3DP3bx6ciODXIh7dSXcpQq+P4K2Tqyd8L5OjZ7COx9QXx/QdCIwL2qoX09Wr4Cwf7uS4qdEng==",
1804 | "dev": true,
1805 | "requires": {}
1806 | },
1807 | "@webpack-cli/info": {
1808 | "version": "2.0.0",
1809 | "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.0.tgz",
1810 | "integrity": "sha512-NNxDgbo4VOkNhOlTgY0Elhz3vKpOJq4/PKeKg7r8cmYM+GQA9vDofLYyup8jS6EpUvhNmR30cHTCEIyvXpskwA==",
1811 | "dev": true,
1812 | "requires": {}
1813 | },
1814 | "@webpack-cli/serve": {
1815 | "version": "2.0.0",
1816 | "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.0.tgz",
1817 | "integrity": "sha512-Rumq5mHvGXamnOh3O8yLk1sjx8dB30qF1OeR6VC00DIR6SLJ4bwwUGKC4pE7qBFoQyyh0H9sAg3fikYgAqVR0w==",
1818 | "dev": true,
1819 | "requires": {}
1820 | },
1821 | "@xtuc/ieee754": {
1822 | "version": "1.2.0",
1823 | "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
1824 | "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
1825 | "dev": true,
1826 | "peer": true
1827 | },
1828 | "@xtuc/long": {
1829 | "version": "4.2.2",
1830 | "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
1831 | "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
1832 | "dev": true,
1833 | "peer": true
1834 | },
1835 | "acorn": {
1836 | "version": "8.8.1",
1837 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
1838 | "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
1839 | "dev": true,
1840 | "peer": true
1841 | },
1842 | "acorn-import-assertions": {
1843 | "version": "1.8.0",
1844 | "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
1845 | "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
1846 | "dev": true,
1847 | "peer": true,
1848 | "requires": {}
1849 | },
1850 | "ajv": {
1851 | "version": "6.12.6",
1852 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
1853 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
1854 | "dev": true,
1855 | "peer": true,
1856 | "requires": {
1857 | "fast-deep-equal": "^3.1.1",
1858 | "fast-json-stable-stringify": "^2.0.0",
1859 | "json-schema-traverse": "^0.4.1",
1860 | "uri-js": "^4.2.2"
1861 | }
1862 | },
1863 | "ajv-keywords": {
1864 | "version": "3.5.2",
1865 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
1866 | "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
1867 | "dev": true,
1868 | "peer": true,
1869 | "requires": {}
1870 | },
1871 | "browserslist": {
1872 | "version": "4.21.4",
1873 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
1874 | "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
1875 | "dev": true,
1876 | "peer": true,
1877 | "requires": {
1878 | "caniuse-lite": "^1.0.30001400",
1879 | "electron-to-chromium": "^1.4.251",
1880 | "node-releases": "^2.0.6",
1881 | "update-browserslist-db": "^1.0.9"
1882 | }
1883 | },
1884 | "buffer-from": {
1885 | "version": "1.1.2",
1886 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
1887 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
1888 | "dev": true,
1889 | "peer": true
1890 | },
1891 | "caniuse-lite": {
1892 | "version": "1.0.30001434",
1893 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz",
1894 | "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==",
1895 | "dev": true,
1896 | "peer": true
1897 | },
1898 | "chrome-trace-event": {
1899 | "version": "1.0.3",
1900 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
1901 | "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
1902 | "dev": true,
1903 | "peer": true
1904 | },
1905 | "clone-deep": {
1906 | "version": "4.0.1",
1907 | "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
1908 | "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
1909 | "dev": true,
1910 | "requires": {
1911 | "is-plain-object": "^2.0.4",
1912 | "kind-of": "^6.0.2",
1913 | "shallow-clone": "^3.0.0"
1914 | }
1915 | },
1916 | "colorette": {
1917 | "version": "2.0.19",
1918 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
1919 | "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
1920 | "dev": true
1921 | },
1922 | "commander": {
1923 | "version": "2.20.3",
1924 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
1925 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
1926 | "dev": true,
1927 | "peer": true
1928 | },
1929 | "cross-spawn": {
1930 | "version": "7.0.3",
1931 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
1932 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
1933 | "dev": true,
1934 | "requires": {
1935 | "path-key": "^3.1.0",
1936 | "shebang-command": "^2.0.0",
1937 | "which": "^2.0.1"
1938 | }
1939 | },
1940 | "electron-to-chromium": {
1941 | "version": "1.4.284",
1942 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
1943 | "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
1944 | "dev": true,
1945 | "peer": true
1946 | },
1947 | "emoji-regex": {
1948 | "version": "9.2.2",
1949 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
1950 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
1951 | },
1952 | "enhanced-resolve": {
1953 | "version": "5.12.0",
1954 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
1955 | "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
1956 | "dev": true,
1957 | "peer": true,
1958 | "requires": {
1959 | "graceful-fs": "^4.2.4",
1960 | "tapable": "^2.2.0"
1961 | }
1962 | },
1963 | "envinfo": {
1964 | "version": "7.8.1",
1965 | "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
1966 | "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==",
1967 | "dev": true
1968 | },
1969 | "es-module-lexer": {
1970 | "version": "0.9.3",
1971 | "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
1972 | "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
1973 | "dev": true,
1974 | "peer": true
1975 | },
1976 | "escalade": {
1977 | "version": "3.1.1",
1978 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
1979 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
1980 | "dev": true,
1981 | "peer": true
1982 | },
1983 | "eslint-scope": {
1984 | "version": "5.1.1",
1985 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
1986 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
1987 | "dev": true,
1988 | "peer": true,
1989 | "requires": {
1990 | "esrecurse": "^4.3.0",
1991 | "estraverse": "^4.1.1"
1992 | }
1993 | },
1994 | "esrecurse": {
1995 | "version": "4.3.0",
1996 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
1997 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
1998 | "dev": true,
1999 | "peer": true,
2000 | "requires": {
2001 | "estraverse": "^5.2.0"
2002 | },
2003 | "dependencies": {
2004 | "estraverse": {
2005 | "version": "5.3.0",
2006 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
2007 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
2008 | "dev": true,
2009 | "peer": true
2010 | }
2011 | }
2012 | },
2013 | "estraverse": {
2014 | "version": "4.3.0",
2015 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
2016 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
2017 | "dev": true,
2018 | "peer": true
2019 | },
2020 | "events": {
2021 | "version": "3.3.0",
2022 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
2023 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
2024 | "dev": true,
2025 | "peer": true
2026 | },
2027 | "fast-deep-equal": {
2028 | "version": "3.1.3",
2029 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
2030 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
2031 | "dev": true,
2032 | "peer": true
2033 | },
2034 | "fast-json-stable-stringify": {
2035 | "version": "2.1.0",
2036 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
2037 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
2038 | "dev": true,
2039 | "peer": true
2040 | },
2041 | "fastest-levenshtein": {
2042 | "version": "1.0.16",
2043 | "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
2044 | "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
2045 | "dev": true
2046 | },
2047 | "find-up": {
2048 | "version": "4.1.0",
2049 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
2050 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
2051 | "dev": true,
2052 | "requires": {
2053 | "locate-path": "^5.0.0",
2054 | "path-exists": "^4.0.0"
2055 | }
2056 | },
2057 | "function-bind": {
2058 | "version": "1.1.1",
2059 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
2060 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
2061 | "dev": true
2062 | },
2063 | "glob-to-regexp": {
2064 | "version": "0.4.1",
2065 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
2066 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
2067 | "dev": true,
2068 | "peer": true
2069 | },
2070 | "graceful-fs": {
2071 | "version": "4.2.10",
2072 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
2073 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
2074 | "dev": true,
2075 | "peer": true
2076 | },
2077 | "has": {
2078 | "version": "1.0.3",
2079 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
2080 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
2081 | "dev": true,
2082 | "requires": {
2083 | "function-bind": "^1.1.1"
2084 | }
2085 | },
2086 | "has-flag": {
2087 | "version": "4.0.0",
2088 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
2089 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
2090 | "dev": true,
2091 | "peer": true
2092 | },
2093 | "import-local": {
2094 | "version": "3.1.0",
2095 | "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
2096 | "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
2097 | "dev": true,
2098 | "requires": {
2099 | "pkg-dir": "^4.2.0",
2100 | "resolve-cwd": "^3.0.0"
2101 | }
2102 | },
2103 | "interpret": {
2104 | "version": "3.1.1",
2105 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
2106 | "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
2107 | "dev": true
2108 | },
2109 | "is-core-module": {
2110 | "version": "2.11.0",
2111 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
2112 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
2113 | "dev": true,
2114 | "requires": {
2115 | "has": "^1.0.3"
2116 | }
2117 | },
2118 | "is-plain-object": {
2119 | "version": "2.0.4",
2120 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
2121 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
2122 | "dev": true,
2123 | "requires": {
2124 | "isobject": "^3.0.1"
2125 | }
2126 | },
2127 | "isexe": {
2128 | "version": "2.0.0",
2129 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2130 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
2131 | "dev": true
2132 | },
2133 | "isobject": {
2134 | "version": "3.0.1",
2135 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
2136 | "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
2137 | "dev": true
2138 | },
2139 | "jest-worker": {
2140 | "version": "27.5.1",
2141 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
2142 | "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
2143 | "dev": true,
2144 | "peer": true,
2145 | "requires": {
2146 | "@types/node": "*",
2147 | "merge-stream": "^2.0.0",
2148 | "supports-color": "^8.0.0"
2149 | }
2150 | },
2151 | "json-parse-even-better-errors": {
2152 | "version": "2.3.1",
2153 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
2154 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
2155 | "dev": true,
2156 | "peer": true
2157 | },
2158 | "json-schema-traverse": {
2159 | "version": "0.4.1",
2160 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
2161 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
2162 | "dev": true,
2163 | "peer": true
2164 | },
2165 | "kind-of": {
2166 | "version": "6.0.3",
2167 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
2168 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
2169 | "dev": true
2170 | },
2171 | "loader-runner": {
2172 | "version": "4.3.0",
2173 | "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
2174 | "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
2175 | "dev": true,
2176 | "peer": true
2177 | },
2178 | "locate-path": {
2179 | "version": "5.0.0",
2180 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
2181 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
2182 | "dev": true,
2183 | "requires": {
2184 | "p-locate": "^4.1.0"
2185 | }
2186 | },
2187 | "lodash": {
2188 | "version": "4.17.21",
2189 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
2190 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
2191 | },
2192 | "merge-stream": {
2193 | "version": "2.0.0",
2194 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
2195 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
2196 | "dev": true,
2197 | "peer": true
2198 | },
2199 | "mime-db": {
2200 | "version": "1.52.0",
2201 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
2202 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
2203 | "dev": true,
2204 | "peer": true
2205 | },
2206 | "mime-types": {
2207 | "version": "2.1.35",
2208 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
2209 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
2210 | "dev": true,
2211 | "peer": true,
2212 | "requires": {
2213 | "mime-db": "1.52.0"
2214 | }
2215 | },
2216 | "neo-async": {
2217 | "version": "2.6.2",
2218 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
2219 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
2220 | "dev": true,
2221 | "peer": true
2222 | },
2223 | "node-fetch": {
2224 | "version": "2.6.7",
2225 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
2226 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
2227 | "requires": {
2228 | "whatwg-url": "^5.0.0"
2229 | }
2230 | },
2231 | "node-releases": {
2232 | "version": "2.0.6",
2233 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
2234 | "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
2235 | "dev": true,
2236 | "peer": true
2237 | },
2238 | "normalize-for-search": {
2239 | "version": "2.1.0",
2240 | "resolved": "https://registry.npmjs.org/normalize-for-search/-/normalize-for-search-2.1.0.tgz",
2241 | "integrity": "sha512-SL9xv8eEXXQfj7wo4aq/QjgCLzcKSLYAoVcRyaxJPZJkiIlGX579TiuoLWrFSkG6MZfesJ9fRpYcdpYKwckZUw=="
2242 | },
2243 | "openthesaurus": {
2244 | "version": "1.0.2",
2245 | "resolved": "https://registry.npmjs.org/openthesaurus/-/openthesaurus-1.0.2.tgz",
2246 | "integrity": "sha512-RKbRgRVk2q7+4mR8CxKY11pWpRDrAGwmtABjbuBJMeuh6wiWNuUP8ZJPezQbt9aULqji60sjpv4UZAvbBg2h9g==",
2247 | "requires": {
2248 | "node-fetch": "^2.6.1"
2249 | }
2250 | },
2251 | "p-limit": {
2252 | "version": "2.3.0",
2253 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
2254 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
2255 | "dev": true,
2256 | "requires": {
2257 | "p-try": "^2.0.0"
2258 | }
2259 | },
2260 | "p-locate": {
2261 | "version": "4.1.0",
2262 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
2263 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
2264 | "dev": true,
2265 | "requires": {
2266 | "p-limit": "^2.2.0"
2267 | }
2268 | },
2269 | "p-try": {
2270 | "version": "2.2.0",
2271 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
2272 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
2273 | "dev": true
2274 | },
2275 | "path-exists": {
2276 | "version": "4.0.0",
2277 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
2278 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
2279 | "dev": true
2280 | },
2281 | "path-key": {
2282 | "version": "3.1.1",
2283 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2284 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2285 | "dev": true
2286 | },
2287 | "path-parse": {
2288 | "version": "1.0.7",
2289 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
2290 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
2291 | "dev": true
2292 | },
2293 | "picocolors": {
2294 | "version": "1.0.0",
2295 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
2296 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
2297 | "dev": true,
2298 | "peer": true
2299 | },
2300 | "pkg-dir": {
2301 | "version": "4.2.0",
2302 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
2303 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
2304 | "dev": true,
2305 | "requires": {
2306 | "find-up": "^4.0.0"
2307 | }
2308 | },
2309 | "punycode": {
2310 | "version": "2.1.1",
2311 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
2312 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
2313 | "dev": true,
2314 | "peer": true
2315 | },
2316 | "randombytes": {
2317 | "version": "2.1.0",
2318 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
2319 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
2320 | "dev": true,
2321 | "peer": true,
2322 | "requires": {
2323 | "safe-buffer": "^5.1.0"
2324 | }
2325 | },
2326 | "rechoir": {
2327 | "version": "0.8.0",
2328 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
2329 | "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
2330 | "dev": true,
2331 | "requires": {
2332 | "resolve": "^1.20.0"
2333 | }
2334 | },
2335 | "regenerator-runtime": {
2336 | "version": "0.13.9",
2337 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
2338 | "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
2339 | },
2340 | "resolve": {
2341 | "version": "1.22.1",
2342 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
2343 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
2344 | "dev": true,
2345 | "requires": {
2346 | "is-core-module": "^2.9.0",
2347 | "path-parse": "^1.0.7",
2348 | "supports-preserve-symlinks-flag": "^1.0.0"
2349 | }
2350 | },
2351 | "resolve-cwd": {
2352 | "version": "3.0.0",
2353 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
2354 | "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
2355 | "dev": true,
2356 | "requires": {
2357 | "resolve-from": "^5.0.0"
2358 | }
2359 | },
2360 | "resolve-from": {
2361 | "version": "5.0.0",
2362 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
2363 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
2364 | "dev": true
2365 | },
2366 | "safe-buffer": {
2367 | "version": "5.2.1",
2368 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
2369 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
2370 | "dev": true,
2371 | "peer": true
2372 | },
2373 | "schema-utils": {
2374 | "version": "3.1.1",
2375 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
2376 | "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
2377 | "dev": true,
2378 | "peer": true,
2379 | "requires": {
2380 | "@types/json-schema": "^7.0.8",
2381 | "ajv": "^6.12.5",
2382 | "ajv-keywords": "^3.5.2"
2383 | }
2384 | },
2385 | "serialize-javascript": {
2386 | "version": "6.0.0",
2387 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
2388 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
2389 | "dev": true,
2390 | "peer": true,
2391 | "requires": {
2392 | "randombytes": "^2.1.0"
2393 | }
2394 | },
2395 | "shallow-clone": {
2396 | "version": "3.0.1",
2397 | "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
2398 | "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
2399 | "dev": true,
2400 | "requires": {
2401 | "kind-of": "^6.0.2"
2402 | }
2403 | },
2404 | "shebang-command": {
2405 | "version": "2.0.0",
2406 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2407 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2408 | "dev": true,
2409 | "requires": {
2410 | "shebang-regex": "^3.0.0"
2411 | }
2412 | },
2413 | "shebang-regex": {
2414 | "version": "3.0.0",
2415 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2416 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2417 | "dev": true
2418 | },
2419 | "source-map": {
2420 | "version": "0.6.1",
2421 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
2422 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
2423 | "dev": true,
2424 | "peer": true
2425 | },
2426 | "source-map-support": {
2427 | "version": "0.5.21",
2428 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
2429 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
2430 | "dev": true,
2431 | "peer": true,
2432 | "requires": {
2433 | "buffer-from": "^1.0.0",
2434 | "source-map": "^0.6.0"
2435 | }
2436 | },
2437 | "stopwords-iso": {
2438 | "version": "1.1.0",
2439 | "resolved": "https://registry.npmjs.org/stopwords-iso/-/stopwords-iso-1.1.0.tgz",
2440 | "integrity": "sha512-I6GPS/E0zyieHehMRPQcqkiBMJKGgLta+1hREixhoLPqEA0AlVFiC43dl8uPpmkkeRdDMzYRWFWk5/l9x7nmNg=="
2441 | },
2442 | "supports-color": {
2443 | "version": "8.1.1",
2444 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
2445 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
2446 | "dev": true,
2447 | "peer": true,
2448 | "requires": {
2449 | "has-flag": "^4.0.0"
2450 | }
2451 | },
2452 | "supports-preserve-symlinks-flag": {
2453 | "version": "1.0.0",
2454 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2455 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
2456 | "dev": true
2457 | },
2458 | "tapable": {
2459 | "version": "2.2.1",
2460 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
2461 | "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
2462 | "dev": true,
2463 | "peer": true
2464 | },
2465 | "terser": {
2466 | "version": "5.16.0",
2467 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.0.tgz",
2468 | "integrity": "sha512-KjTV81QKStSfwbNiwlBXfcgMcOloyuRdb62/iLFPGBcVNF4EXjhdYBhYHmbJpiBrVxZhDvltE11j+LBQUxEEJg==",
2469 | "dev": true,
2470 | "peer": true,
2471 | "requires": {
2472 | "@jridgewell/source-map": "^0.3.2",
2473 | "acorn": "^8.5.0",
2474 | "commander": "^2.20.0",
2475 | "source-map-support": "~0.5.20"
2476 | }
2477 | },
2478 | "terser-webpack-plugin": {
2479 | "version": "5.3.6",
2480 | "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz",
2481 | "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==",
2482 | "dev": true,
2483 | "peer": true,
2484 | "requires": {
2485 | "@jridgewell/trace-mapping": "^0.3.14",
2486 | "jest-worker": "^27.4.5",
2487 | "schema-utils": "^3.1.1",
2488 | "serialize-javascript": "^6.0.0",
2489 | "terser": "^5.14.1"
2490 | }
2491 | },
2492 | "tr46": {
2493 | "version": "0.0.3",
2494 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
2495 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
2496 | },
2497 | "update-browserslist-db": {
2498 | "version": "1.0.10",
2499 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
2500 | "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
2501 | "dev": true,
2502 | "peer": true,
2503 | "requires": {
2504 | "escalade": "^3.1.1",
2505 | "picocolors": "^1.0.0"
2506 | }
2507 | },
2508 | "uri-js": {
2509 | "version": "4.4.1",
2510 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
2511 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
2512 | "dev": true,
2513 | "peer": true,
2514 | "requires": {
2515 | "punycode": "^2.1.0"
2516 | }
2517 | },
2518 | "watchpack": {
2519 | "version": "2.4.0",
2520 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
2521 | "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
2522 | "dev": true,
2523 | "peer": true,
2524 | "requires": {
2525 | "glob-to-regexp": "^0.4.1",
2526 | "graceful-fs": "^4.1.2"
2527 | }
2528 | },
2529 | "webidl-conversions": {
2530 | "version": "3.0.1",
2531 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
2532 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
2533 | },
2534 | "webpack": {
2535 | "version": "5.75.0",
2536 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz",
2537 | "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==",
2538 | "dev": true,
2539 | "peer": true,
2540 | "requires": {
2541 | "@types/eslint-scope": "^3.7.3",
2542 | "@types/estree": "^0.0.51",
2543 | "@webassemblyjs/ast": "1.11.1",
2544 | "@webassemblyjs/wasm-edit": "1.11.1",
2545 | "@webassemblyjs/wasm-parser": "1.11.1",
2546 | "acorn": "^8.7.1",
2547 | "acorn-import-assertions": "^1.7.6",
2548 | "browserslist": "^4.14.5",
2549 | "chrome-trace-event": "^1.0.2",
2550 | "enhanced-resolve": "^5.10.0",
2551 | "es-module-lexer": "^0.9.0",
2552 | "eslint-scope": "5.1.1",
2553 | "events": "^3.2.0",
2554 | "glob-to-regexp": "^0.4.1",
2555 | "graceful-fs": "^4.2.9",
2556 | "json-parse-even-better-errors": "^2.3.1",
2557 | "loader-runner": "^4.2.0",
2558 | "mime-types": "^2.1.27",
2559 | "neo-async": "^2.6.2",
2560 | "schema-utils": "^3.1.0",
2561 | "tapable": "^2.1.1",
2562 | "terser-webpack-plugin": "^5.1.3",
2563 | "watchpack": "^2.4.0",
2564 | "webpack-sources": "^3.2.3"
2565 | }
2566 | },
2567 | "webpack-cli": {
2568 | "version": "5.0.0",
2569 | "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.0.tgz",
2570 | "integrity": "sha512-AACDTo20yG+xn6HPW5xjbn2Be4KUzQPebWXsDMHwPPyKh9OnTOJgZN2Nc+g/FZKV3ObRTYsGvibAvc+5jAUrVA==",
2571 | "dev": true,
2572 | "requires": {
2573 | "@discoveryjs/json-ext": "^0.5.0",
2574 | "@webpack-cli/configtest": "^2.0.0",
2575 | "@webpack-cli/info": "^2.0.0",
2576 | "@webpack-cli/serve": "^2.0.0",
2577 | "colorette": "^2.0.14",
2578 | "commander": "^9.4.1",
2579 | "cross-spawn": "^7.0.3",
2580 | "envinfo": "^7.7.3",
2581 | "fastest-levenshtein": "^1.0.12",
2582 | "import-local": "^3.0.2",
2583 | "interpret": "^3.1.1",
2584 | "rechoir": "^0.8.0",
2585 | "webpack-merge": "^5.7.3"
2586 | },
2587 | "dependencies": {
2588 | "commander": {
2589 | "version": "9.4.1",
2590 | "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz",
2591 | "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==",
2592 | "dev": true
2593 | }
2594 | }
2595 | },
2596 | "webpack-merge": {
2597 | "version": "5.8.0",
2598 | "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz",
2599 | "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==",
2600 | "dev": true,
2601 | "requires": {
2602 | "clone-deep": "^4.0.1",
2603 | "wildcard": "^2.0.0"
2604 | }
2605 | },
2606 | "webpack-sources": {
2607 | "version": "3.2.3",
2608 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
2609 | "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
2610 | "dev": true,
2611 | "peer": true
2612 | },
2613 | "whatwg-url": {
2614 | "version": "5.0.0",
2615 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
2616 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
2617 | "requires": {
2618 | "tr46": "~0.0.3",
2619 | "webidl-conversions": "^3.0.0"
2620 | }
2621 | },
2622 | "which": {
2623 | "version": "2.0.2",
2624 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2625 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2626 | "dev": true,
2627 | "requires": {
2628 | "isexe": "^2.0.0"
2629 | }
2630 | },
2631 | "wildcard": {
2632 | "version": "2.0.0",
2633 | "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
2634 | "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
2635 | "dev": true
2636 | },
2637 | "wink-tokenizer": {
2638 | "version": "5.3.0",
2639 | "resolved": "https://registry.npmjs.org/wink-tokenizer/-/wink-tokenizer-5.3.0.tgz",
2640 | "integrity": "sha512-O/yAw0g3FmSgeeQuYAJJfP7fVPB4A6ay0018qASh79aWmIOyPYy4j4r9EQT8xBjicja6lCLvgRVAybmEBaATQA==",
2641 | "requires": {
2642 | "emoji-regex": "^9.0.0"
2643 | }
2644 | }
2645 | }
2646 | }
2647 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@b1tsteller/taggy",
3 | "version": "0.1.0",
4 | "description": "taggy helps you tag your content",
5 | "main": "./lib/index.js",
6 | "scripts": {
7 | "build": "tsc -w",
8 | "test": "echo \"Error: no test specified\" && exit 1"
9 | },
10 | "repository": {
11 | "type": "git",
12 | "url": "git+https://github.com/open-taggy/taggy.git"
13 | },
14 | "files": [
15 | "lib/**/*",
16 | "data/glossary.json"
17 | ],
18 | "keywords": [
19 | "tag",
20 | "tags",
21 | "tagging",
22 | "categories",
23 | "categorization",
24 | "glossary",
25 | "input",
26 | "text"
27 | ],
28 | "author": "Johannes Busching ",
29 | "license": "MIT",
30 | "bugs": {
31 | "url": "https://github.com/open-taggy/taggy-base/issues"
32 | },
33 | "homepage": "https://github.com/open-taggy",
34 | "dependencies": {
35 | "lodash": "^4.17.21",
36 | "normalize-for-search": "^2.1.0",
37 | "openthesaurus": "^1.0.2",
38 | "regenerator-runtime": "^0.13.9",
39 | "stopwords-iso": "^1.1.0",
40 | "wink-tokenizer": "^5.3.0"
41 | },
42 | "devDependencies": {
43 | "@types/lodash": "^4.14.186",
44 | "@types/node": "^18.7.18",
45 | "@types/normalize-for-search": "^2.1.0",
46 | "@types/wink-tokenizer": "^4.0.3",
47 | "webpack-cli": "^5.0.0"
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | exports.__esModule = true;
3 | exports.taggy = void 0;
4 | // var readline = require("readline");
5 | var wink_tokenizer_1 = require("wink-tokenizer");
6 | var stopwords_iso_1 = require("stopwords-iso"); // object of stopwords for multiple languages
7 | // import stopwordsDE from de; // german stopwords
8 | var normalize_for_search_1 = require("normalize-for-search");
9 | var winkTokenizer = new wink_tokenizer_1["default"]();
10 | exports.taggy = {
11 | taggy: function () {
12 | // create shell input
13 | var rl = readline.createInterface({
14 | input: process.stdin,
15 | output: process.stdout
16 | });
17 | var stopwordsDE = stopwords_iso_1["default"].de;
18 | rl.question("Input: ", function (input) {
19 | console.log("Tokens for \"" + input + "\":");
20 | // tokenize input
21 | var tokenizedItems = winkTokenizer.tokenize(input);
22 | var tokenizedWords = tokenizedItems.filter(function (item) {
23 | return item.tag === "word";
24 | });
25 | console.log(tokenizedItems);
26 | console.log(tokenizedWords);
27 | console.log(stopwordsDE);
28 | // filter out german stopwords
29 | var tokenizedWordsNoStop = tokenizedWords.filter(function (item) { return !stopwordsDE.includes(item.value.toLowerCase()); });
30 | // create array with only lowercase and normalized (remove ö and stuff)
31 | var tokenizedValues = [];
32 | for (var _i = 0, tokenizedWordsNoStop_1 = tokenizedWordsNoStop; _i < tokenizedWordsNoStop_1.length; _i++) {
33 | var element = tokenizedWordsNoStop_1[_i];
34 | tokenizedValues.push(normalize_for_search_1["default"](element.value.toLowerCase()));
35 | }
36 | console.log(tokenizedWordsNoStop);
37 | // console.log(tokenizedValues);
38 | console.log(process.cwd());
39 | // read glossar data
40 | var rawData = fs_1["default"].readFileSync("../taggy/data/glossar.json");
41 | var glossar = JSON.parse(rawData.toString());
42 | console.log(glossar);
43 | var glossarTags = glossar.tags;
44 | // look for matches in glossar
45 | for (var _a = 0, glossarTags_1 = glossarTags; _a < glossarTags_1.length; _a++) {
46 | var tag = glossarTags_1[_a];
47 | console.log(tag.name + ": ");
48 | for (var _b = 0, _c = tag.words; _b < _c.length; _b++) {
49 | var word = _c[_b];
50 | console.log("- " + word);
51 | if (tokenizedValues.includes(word.toLowerCase())) {
52 | console.log("-> MATCH");
53 | }
54 | }
55 | }
56 | rl.close();
57 | });
58 | }
59 | };
60 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import tokenizer from "wink-tokenizer";
2 | import stopwordsISO from "stopwords-iso";
3 | import normalizer from "normalize-for-search";
4 | import { sample, groupBy } from "lodash";
5 | import "regenerator-runtime/runtime";
6 |
7 | export interface IGlossaryData {
8 | tags: ITag[];
9 | }
10 |
11 | export interface ITag {
12 | category: string;
13 | keywords: string[];
14 | }
15 |
16 | export interface IOptions {
17 | submitButton: HTMLElement | undefined;
18 | frequencyOutput: HTMLSpanElement | undefined;
19 | overrideOutput: HTMLInputElement | undefined;
20 | loaderElement: HTMLElement | undefined;
21 | useSubmit: boolean;
22 | waittime: number;
23 | language: "en";
24 | assignTop: boolean;
25 | includeTop: boolean;
26 | messageNotFound: string;
27 | openthesaurus: boolean;
28 | }
29 |
30 | const openthesaurus = require("openthesaurus");
31 | const glossaryData: IGlossaryData = require("../data/glossary.json");
32 |
33 | export class Taggy {
34 | public name: string = "taggy";
35 | private glossaryData: IGlossaryData;
36 | private winkTokenizer: tokenizer;
37 | private stopwords: any;
38 | private openthesaurus: any;
39 | private inputField!: HTMLInputElement;
40 | private outputField!: HTMLInputElement;
41 | private submitButton!: HTMLElement;
42 | private frequencyOutput: HTMLSpanElement | undefined;
43 | private overrideOutput!: HTMLInputElement;
44 | private loaderElement: HTMLElement | undefined;
45 | private mostFrequentWords: string[] = [];
46 | private mostFrequentTopTags: any[] = [];
47 | private timeout: any = null;
48 |
49 | public options: IOptions = {
50 | submitButton: undefined,
51 | frequencyOutput: undefined,
52 | overrideOutput: undefined,
53 | loaderElement: undefined,
54 | useSubmit: false,
55 | waittime: 1000,
56 | language: "en",
57 | assignTop: true,
58 | includeTop: false,
59 | messageNotFound: "No matching tag found",
60 | openthesaurus: false,
61 | };
62 | // * @param submitButton Optional: Submit button to trigger processing instead of automatic behavior while typing
63 | // * @param frequencyOutput Optional: Show frequency of identified tags
64 | // * @param overrideOutput Optional: Show identified top tags with possibility to override default detection
65 | // * @param loaderElement Optional: Add a loading indicator (spinner) that gets hidden on completion
66 |
67 | /**
68 | * Create a new instance of taggy
69 | * @param inputField Input field where user text goes
70 | * @param outputField Output field where the tags will show up
71 | * @param options Optional: Provide options for taggy's behaviour
72 | */
73 | constructor(
74 | inputField: HTMLInputElement,
75 | outputField: HTMLInputElement,
76 | options?: IOptions
77 | ) {
78 | // if options get passed to constructor -> merge with existing options-object
79 | this.options = { ...this.options, ...options };
80 |
81 | // set demo-data for glossary
82 | this.glossaryData = glossaryData;
83 |
84 | if (options?.submitButton) {
85 | this.setSubmitButton(options.submitButton);
86 | this.options.useSubmit = true;
87 | } else {
88 | this.options.useSubmit = false;
89 | this.options.waittime = 500;
90 | }
91 | if (!inputField) throw new Error("No input-element provided for taggy");
92 | this.setInputField(inputField);
93 | if (!outputField) throw new Error("No output-element provided for taggy");
94 | this.outputField = outputField;
95 | if (options?.loaderElement) this.loaderElement = options.loaderElement;
96 | // this.submitButton = submitButton;
97 |
98 | this.winkTokenizer = new tokenizer();
99 | // set stopwords-language | defaults to en
100 | this.setLanguage(this.options.language);
101 | this.openthesaurus = openthesaurus;
102 |
103 | if (options?.frequencyOutput)
104 | this.frequencyOutput = options.frequencyOutput;
105 |
106 | if (options?.overrideOutput) {
107 | this.setOverrideOutput(options.overrideOutput);
108 | }
109 | }
110 |
111 | resetData() {
112 | this.mostFrequentTopTags = [];
113 | this.mostFrequentWords = [];
114 | }
115 |
116 | setInputField(inputField: HTMLInputElement) {
117 | this.inputField = inputField;
118 | if (this.options.useSubmit && this.submitButton) {
119 | return;
120 | // fall back to eventlistener when no submitbutton specified
121 | } else {
122 | this.inputField.addEventListener("input", (event) => {
123 | this.handleInputEventListener();
124 | });
125 | }
126 | }
127 |
128 | setSubmitButton(submitButton: HTMLElement) {
129 | this.submitButton = submitButton;
130 | this.submitButton.addEventListener("click", (event) => {
131 | if (this.options.useSubmit) {
132 | this.handleSubmitButtonEventListener();
133 | }
134 | });
135 | }
136 |
137 | setLanguage(languageCode: string) {
138 | this.stopwords = stopwordsISO[languageCode];
139 | }
140 |
141 | handleInputEventListener() {
142 | if (this.options.useSubmit) {
143 | return;
144 | }
145 | if (this.loaderElement)
146 | this.loaderElement.style.setProperty("display", "block");
147 | this.deleteTags();
148 |
149 | clearTimeout(this.timeout);
150 |
151 | // make a new timeout set to go off in 1000ms
152 | this.timeout = setTimeout(async () => {
153 | await this.processAndAddTags(this.inputField.value, this.outputField);
154 | this.loaderElement?.style.setProperty("display", "none");
155 |
156 | // this.addTags(result);
157 | }, this.options.waittime);
158 | }
159 |
160 | async handleSubmitButtonEventListener() {
161 | if (this.loaderElement) {
162 | this.loaderElement.style.setProperty("display", "block");
163 | }
164 |
165 | this.deleteTags();
166 |
167 | // set and hide loading-indicator
168 | clearTimeout(this.timeout);
169 | this.timeout = setTimeout(async () => {
170 | await this.processAndAddTags(this.inputField.value, this.outputField);
171 | if (this.loaderElement) {
172 | this.loaderElement.style.setProperty("display", "none");
173 | }
174 | }, this.options.waittime);
175 | }
176 |
177 | setOutputField(outputField: HTMLInputElement) {
178 | // outputField.setAttribute("value", "");
179 | outputField.readOnly = true;
180 | outputField.value = "";
181 | this.outputField = outputField;
182 | }
183 |
184 | setFrequencyOutput(frequencyOutput: HTMLSpanElement) {
185 | this.frequencyOutput = frequencyOutput;
186 | }
187 |
188 | setOverrideOutput(overrideOutput: HTMLInputElement) {
189 | this.overrideOutput = overrideOutput;
190 |
191 | this.overrideOutput.addEventListener("click", (event) => {
192 | this.handleOverrideOutputEventListener(event);
193 | });
194 | }
195 |
196 | handleOverrideOutputEventListener(event: MouseEvent) {
197 | const target = event.target as HTMLElement;
198 |
199 | // prevent container above to be clickabe -> only tag-div itself
200 | if (event.target == event.currentTarget) return;
201 | if (target) this.addTags(target.innerHTML);
202 | }
203 |
204 | public getOptions(): Object {
205 | return this.options;
206 | }
207 |
208 | public getGlossary(): IGlossaryData {
209 | return this.glossaryData;
210 | }
211 |
212 | public setGlossary(glossaryToSet: IGlossaryData) {
213 | this.glossaryData = glossaryToSet;
214 | }
215 |
216 | public setOption(option: string, value: boolean) {
217 | if (option == "useSubmit") {
218 | this.options.useSubmit = value;
219 | if (value) {
220 | this.setSubmitButton(this.submitButton);
221 | this.setInputField(this.inputField);
222 | } else {
223 | this.setInputField(this.inputField);
224 | }
225 | }
226 | if (option == "assignTop") {
227 | this.options.assignTop = value;
228 | }
229 | if (option == "openthesaurus") {
230 | this.options.openthesaurus = value;
231 | }
232 | if (option == "includeTop") {
233 | this.options.includeTop = value;
234 | }
235 | }
236 |
237 | getMostFrequentWords() {
238 | return this.mostFrequentWords;
239 | }
240 |
241 | async callOpenThesaurusAPI(inputArray: string[]): Promise {
242 | let returnSet: string[] = [];
243 | // get synsets from openthesaurus?
244 | for await (const word of inputArray) {
245 | await this.openthesaurus.get(word).then((response: any) => {
246 | let optValues: string[] = [];
247 | // response.baseforms?
248 | if (response && response.synsets[0]?.terms) {
249 | response.synsets[0].terms.forEach((term: any) => {
250 | optValues.push(normalizer(term.term));
251 | });
252 | }
253 | returnSet = this.tokenize(this.filterStopWords(optValues).toString());
254 | });
255 | }
256 | return returnSet;
257 | }
258 |
259 | async processAndAddTags(
260 | input: string,
261 | outputField: HTMLInputElement
262 | ): Promise {
263 | this.deleteTags();
264 | let processedInput = await this.processInput(input);
265 | if (processedInput) {
266 | this.addTags(processedInput[0]);
267 | return Promise.resolve(true);
268 | }
269 | return Promise.reject(false);
270 | }
271 |
272 | addTags(input: string) {
273 | this.deleteTags();
274 | if (this.outputField.lastChild)
275 | this.outputField.removeChild(this.outputField.lastChild!);
276 |
277 | this.outputField.setAttribute("value", input);
278 | this.outputField.value = input;
279 |
280 | if (this.options.messageNotFound == "" && (!input || input == "")) {
281 | return;
282 | }
283 |
284 | const taggyTag = document.createElement("div");
285 | taggyTag.classList.add("taggy-tag");
286 | if (!input || input == "") {
287 | input = this.options.messageNotFound;
288 | taggyTag.classList.add("tag-not-found");
289 | } else {
290 | // set override tags
291 | if (this.overrideOutput && this.mostFrequentTopTags) {
292 | this.addOverrideOutput();
293 | }
294 | // set most frequent words
295 | this.addFrequencyOutput();
296 | }
297 | taggyTag.innerText = input;
298 | this.outputField.appendChild(taggyTag);
299 | // }
300 | }
301 |
302 | addFrequencyOutput() {
303 | if (this.frequencyOutput) {
304 | let frequencyList = [];
305 | // delete previous added words
306 | while (this.frequencyOutput.firstChild) {
307 | this.frequencyOutput.removeChild(this.frequencyOutput.firstChild);
308 | }
309 | // add new words
310 | this.getMostFrequentWords().forEach((word) => {
311 | let frequencySpan = document.createElement("span");
312 | frequencySpan.innerText = word;
313 | frequencySpan.classList.add("taggy-frequency");
314 | this.frequencyOutput?.appendChild(frequencySpan);
315 | });
316 | }
317 | }
318 |
319 | addOverrideOutput() {
320 | let topTags: string[] = [];
321 | Object.values(this.mostFrequentTopTags).forEach((element) =>
322 | topTags.push(element.category)
323 | );
324 | if (this.overrideOutput) {
325 | if (topTags.length > 1) {
326 | this.overrideOutput.setAttribute("value", topTags.join(", "));
327 | topTags.forEach((tag) => {
328 | let taggyTagOverride = document.createElement("div");
329 | taggyTagOverride.classList.add("taggy-tag", "taggy-override");
330 | taggyTagOverride.innerText = tag;
331 |
332 | this.overrideOutput.appendChild(taggyTagOverride);
333 | });
334 | }
335 | }
336 | }
337 |
338 | deleteTags() {
339 | // delete main tag
340 | if (this.outputField.lastChild)
341 | this.outputField.removeChild(this.outputField.lastChild!);
342 |
343 | // delete override tags
344 | if (this.overrideOutput) {
345 | while (this.overrideOutput.firstChild) {
346 | this.overrideOutput.removeChild(this.overrideOutput.firstChild);
347 | }
348 | }
349 | }
350 |
351 | tokenize(input: string, type: string = "word"): string[] {
352 | let tokenizedItems = this.winkTokenizer.tokenize(input);
353 | let returnSet: string[] = [];
354 | let tokenizedWords = tokenizedItems.filter((item) => {
355 | return item.tag === type;
356 | });
357 | tokenizedWords.forEach((element) => {
358 | returnSet.push(element.value);
359 | });
360 | return returnSet;
361 | }
362 |
363 | normalize(inputArray: string[]) {
364 | let normalizedValues = [];
365 | for (const element of inputArray) {
366 | normalizedValues.push(normalizer(element));
367 | }
368 | return normalizedValues;
369 | }
370 |
371 | filterStopWords(inputArray: any[]) {
372 | return inputArray.filter((item) => !this.stopwords.includes(item.value));
373 | }
374 |
375 | async processInput(input: string): Promise {
376 | this.resetData();
377 |
378 | // tokenize, filter out german stopwords and normalize input (remove umlaute and transform to lowercase)
379 | let tokenizedValues = this.normalize(
380 | this.filterStopWords(this.tokenize(input, "word"))
381 | );
382 |
383 | // return if input is too small
384 | if (tokenizedValues.length < 1) return [];
385 |
386 | let enrichedInputValues: string[] = [];
387 |
388 | // don't call openthesaurus-API too often (-> results in too many requests error)
389 | if (this.options.openthesaurus && tokenizedValues.length < 20) {
390 | enrichedInputValues = await this.callOpenThesaurusAPI(tokenizedValues);
391 | }
392 | // flat out arrays
393 | enrichedInputValues = enrichedInputValues
394 | .flat()
395 | .concat(tokenizedValues.flat());
396 |
397 | let glossaryTags: string[] = [];
398 | let combinedWordsReturnSet: string[] = [];
399 |
400 | // if INCLUDE-TOP is set -> add top tag
401 | for (const category of this.glossaryData.tags) {
402 | if (this.options.includeTop) {
403 | glossaryTags.push(normalizer(category.category));
404 | }
405 | for (const word of category.keywords) {
406 | glossaryTags.push(normalizer(word));
407 | }
408 | }
409 |
410 | // check input for words with whitespaces and "-"
411 | for (const word of glossaryTags) {
412 | if (word.includes(" ") || word.includes("-")) {
413 | if (normalizer(input).includes(word)) {
414 | combinedWordsReturnSet.push(word);
415 | }
416 | }
417 | }
418 |
419 | let returnValues: string[] = [];
420 |
421 | // look for matches in glossary
422 | for (const glossaryValue of glossaryTags) {
423 | for (const inputValue of enrichedInputValues) {
424 | if (inputValue == glossaryValue) {
425 | returnValues.push(inputValue);
426 | }
427 | }
428 | }
429 |
430 | let finalSet: string[] = [...combinedWordsReturnSet!].concat(returnValues);
431 |
432 | let topTagCount: any = [];
433 |
434 | let maxCount = 0;
435 | // if assignTop is set -> return top categegory
436 | if (this.options.assignTop) {
437 | let count = 0;
438 | // if includeTop ist set -> add top categories
439 | this.glossaryData.tags.forEach((category: any) => {
440 | count = 0;
441 | finalSet.forEach((element) => {
442 | // if includeTop ist set -> add top categories
443 | if (normalizer(category.category) == element) {
444 | count += 1;
445 | }
446 | if (this.normalize(category.keywords).includes(element)) {
447 | count += 1;
448 | }
449 | });
450 | topTagCount.push({
451 | category: category.category,
452 | count: count,
453 | });
454 | if (count > maxCount) maxCount = count;
455 | });
456 |
457 | // set most frequent top tags
458 | let groupedMostFrequentTopTags = groupBy(topTagCount, "count");
459 | if (groupedMostFrequentTopTags[maxCount][0].count) {
460 | this.mostFrequentTopTags = groupedMostFrequentTopTags[maxCount];
461 | }
462 | }
463 |
464 | // set most frequent matches
465 | this.mostFrequentWords = modeArray(finalSet)!;
466 |
467 | let finalValue = sample(this.mostFrequentWords)!;
468 |
469 | // if assignTop is set -> return top categegory
470 | if (this.options.assignTop) {
471 | let topTags: string[] = [];
472 | Object.values(this.mostFrequentTopTags).forEach((element) => {
473 | if (element.count) topTags.push(element.category);
474 | });
475 |
476 | let tempValue = sample(topTags);
477 | if (tempValue) finalValue = tempValue;
478 | }
479 |
480 | return finalValue ? [finalValue] : [""];
481 | }
482 | }
483 |
484 | function enrichWithOpenThesaurus(inputArray: string[]) {
485 | let enrichedArray: string[] = [];
486 |
487 | for (const word of inputArray) {
488 | // get baseforms from openthesaurus?
489 | openthesaurus.get(word).then((response: any) => {
490 | if (response && response.baseforms) {
491 | enrichedArray.push(response.baseforms);
492 | }
493 | });
494 | }
495 |
496 | return enrichedArray;
497 | }
498 |
499 | // return an array of mode element(s) -> highest occurrences
500 | function modeArray(array: any) {
501 | if (array.length == 0) return null;
502 | var modeMap: any = {},
503 | maxCount = 1,
504 | modes = [];
505 |
506 | for (var i = 0; i < array.length; i++) {
507 | var el = array[i];
508 |
509 | if (modeMap[el] == null) modeMap[el] = 1;
510 | else modeMap[el]++;
511 |
512 | if (modeMap[el] > maxCount) {
513 | modes = [el];
514 | maxCount = modeMap[el];
515 | } else if (modeMap[el] == maxCount) {
516 | modes.push(el);
517 | maxCount = modeMap[el];
518 | }
519 | }
520 | return modes;
521 | }
522 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json.schemastore.org/tsconfig",
3 | "display": "Node 16",
4 | "compilerOptions": {
5 | "lib": ["es2020", "DOM"],
6 | "module": "commonjs",
7 | "target": "es2020",
8 | "strict": true,
9 | "esModuleInterop": true,
10 | "skipLibCheck": true,
11 | "forceConsistentCasingInFileNames": true,
12 | "moduleResolution": "node",
13 | "outDir": "lib",
14 | "sourceMap": true,
15 | "declaration": true
16 | },
17 | "include": ["src/**/*", "./typings-custom/**/*.ts"]
18 | }
19 |
--------------------------------------------------------------------------------
/typings-custom/stopwords-iso.d.ts:
--------------------------------------------------------------------------------
1 | declare module 'stopwords-iso';
--------------------------------------------------------------------------------