@irrelon/emitter 5.0.6 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,23 +1,23 @@
1
1
  import assert from "assert";
2
- import {ConvertInterfaceToDict, Emitter, EventListenerCallback, EventReturnFlag} from "../src/Emitter";
2
+ import { Emitter, EmitterEventsInterface, EventListenerCallback, ListenerReturnFlag } from "../src/Emitter";
3
3
 
4
4
  let expectedAssertions = 0;
5
5
  let actualAssertions = 0;
6
6
 
7
- function expect (val: number) {
7
+ function expect(val: number) {
8
8
  expectedAssertions = val;
9
9
  }
10
10
 
11
- function reset () {
11
+ function reset() {
12
12
  expectedAssertions = 0;
13
13
  actualAssertions = 0;
14
14
  }
15
15
 
16
- function countAssertion () {
16
+ function countAssertion() {
17
17
  actualAssertions++;
18
18
  }
19
19
 
20
- function check () {
20
+ function check() {
21
21
  if (expectedAssertions === undefined || expectedAssertions === actualAssertions) {
22
22
  return;
23
23
  }
@@ -33,14 +33,19 @@ describe("Emitter", () => {
33
33
  it("Creates emitter instance by instantiation", () => {
34
34
  const myClass = new Emitter();
35
35
 
36
- myClass.on("moo", () => {
37
- });
36
+ myClass.on("moo", () => {});
38
37
 
39
38
  assert.strictEqual(myClass._eventListeners?.moo!["*"].length, 1, "Listener registered on event");
40
39
 
41
40
  myClass.off("moo");
42
41
 
43
- assert.strictEqual(!myClass._eventListeners?.moo || !myClass._eventListeners.moo["*"] || myClass._eventListeners.moo["*"].length, true, "Listeners all removed from event");
42
+ assert.strictEqual(
43
+ !myClass._eventListeners?.moo ||
44
+ !myClass._eventListeners.moo["*"] ||
45
+ myClass._eventListeners.moo["*"].length,
46
+ true,
47
+ "Listeners all removed from event"
48
+ );
44
49
  });
45
50
 
46
51
  it("Supports extending Emitter as a base class", () => {
@@ -48,13 +53,13 @@ describe("Emitter", () => {
48
53
 
49
54
  // Test extending Emitter and modifying base functionality
50
55
  class MyClass extends Emitter {
51
- testFunc () {
56
+ testFunc() {
52
57
  testFuncCount++;
53
58
  }
54
59
 
55
- on (eventName: string, id: string, listener: EventListenerCallback): this;
56
- on (eventName: string, listener: EventListenerCallback): this;
57
- on (eventName: string, ...rest: any[]): this {
60
+ on(eventName: string, id: string, listener: EventListenerCallback): this;
61
+ on(eventName: string, listener: EventListenerCallback): this;
62
+ on(eventName: string, ...rest: any[]): this {
58
63
  const restTypes = rest.map((arg) => typeof arg);
59
64
 
60
65
  if (restTypes[0] === "function") {
@@ -68,14 +73,14 @@ describe("Emitter", () => {
68
73
  }
69
74
 
70
75
  // @ts-ignore
71
- emit (eventName: string, ...rest: any[]): EventReturnFlag {
76
+ emit(eventName: string, ...rest: any[]) {
72
77
  return super.emitId(eventName, "^^noId", ...rest);
73
78
  }
74
79
 
75
- off (eventName: string, id: string, listener?: EventListenerCallback): this;
76
- off (eventName: string, listener?: EventListenerCallback): this;
77
- off (eventName: string): this;
78
- off (eventName: string, ...rest: any[]) {
80
+ off(eventName: string, id: string, listener?: EventListenerCallback): this;
81
+ off(eventName: string, listener?: EventListenerCallback): this;
82
+ off(eventName: string): this;
83
+ off(eventName: string, ...rest: any[]) {
79
84
  let id = rest[0];
80
85
  let func = rest[1];
81
86
 
@@ -111,37 +116,61 @@ describe("Emitter", () => {
111
116
 
112
117
  myClass.off("moo", "testId");
113
118
 
114
- assert.strictEqual(!myClass._eventListeners?.moo || !myClass._eventListeners?.moo["testId"] || myClass._eventListeners?.moo["testId"].length === 0, true, "Listeners all removed from event");
115
- assert.strictEqual(myClass._eventListeners?.moo && myClass._eventListeners?.moo["^^noId"] && myClass._eventListeners?.moo["^^noId"].length === 1, true, "Global listener still there");
116
- assert.strictEqual(!myClass._eventListeners?.moo || !myClass._eventListeners?.moo["*"] || myClass._eventListeners?.moo["*"].length === 0, true, "Global listener still there");
119
+ assert.strictEqual(
120
+ !myClass._eventListeners?.moo ||
121
+ !myClass._eventListeners?.moo["testId"] ||
122
+ (myClass._eventListeners?.moo["testId"].length as number) === 0,
123
+ true,
124
+ "Listeners all removed from event"
125
+ );
126
+ assert.strictEqual(
127
+ myClass._eventListeners?.moo &&
128
+ myClass._eventListeners?.moo["^^noId"] &&
129
+ myClass._eventListeners?.moo["^^noId"].length === 1,
130
+ true,
131
+ "Global listener still there"
132
+ );
133
+ assert.strictEqual(
134
+ !myClass._eventListeners?.moo ||
135
+ !myClass._eventListeners?.moo["*"] ||
136
+ myClass._eventListeners?.moo["*"].length === 0,
137
+ true,
138
+ "Global listener still there"
139
+ );
117
140
 
118
141
  myClass.off("moo");
119
142
 
120
- assert.strictEqual(!myClass._eventListeners?.moo || !myClass._eventListeners?.moo["*"] || myClass._eventListeners?.moo["*"].length === 0, true, "Listeners all removed from event");
143
+ assert.strictEqual(
144
+ !myClass._eventListeners?.moo ||
145
+ !myClass._eventListeners?.moo["*"] ||
146
+ myClass._eventListeners?.moo["*"].length === 0,
147
+ true,
148
+ "Listeners all removed from event"
149
+ );
121
150
  });
122
151
  });
123
152
 
124
153
  describe("emit()", () => {
125
154
  it("Supports type safe usage", async () => {
126
155
  interface MyEventsResponses {
127
- post: () => void;
128
- person: (name: string, age: number, enabled: boolean) => void;
156
+ post: () => Promise<void>;
157
+ person: (name: string, age: number, enabled: boolean) => Promise<string>;
129
158
  house: (no: number, street: string, postcode: string, enabled: boolean) => void;
130
159
  }
131
160
 
132
- const emitter = new Emitter<ConvertInterfaceToDict<MyEventsResponses>>();
161
+ const emitter = new Emitter<MyEventsResponses>();
133
162
  let listenerFiredCount = 0;
134
163
 
135
- emitter.on("person", async (name, age, enabled) => {
136
- return new Promise<void>((resolve) => {
164
+ emitter.on("person", (name) => {
165
+ return new Promise<string>((resolve) => {
137
166
  setTimeout(() => {
138
167
  listenerFiredCount++;
139
- resolve();
168
+ resolve(name);
140
169
  }, 1000);
141
170
  });
142
171
  });
143
172
 
144
- emitter.on("post", async () => {
173
+ emitter.on("post", () => {
145
174
  return new Promise<void>((resolve) => {
146
175
  setTimeout(() => {
147
176
  listenerFiredCount++;
@@ -150,7 +179,7 @@ describe("Emitter", () => {
150
179
  });
151
180
  });
152
181
 
153
- emitter.on("post", async () => {
182
+ emitter.on("post", () => {
154
183
  return new Promise<void>((resolve) => {
155
184
  setTimeout(() => {
156
185
  listenerFiredCount++;
@@ -160,14 +189,22 @@ describe("Emitter", () => {
160
189
  });
161
190
 
162
191
  const time = new Date().getTime();
163
- await emitter.emit("post");
192
+ await Promise.all(emitter.emit("post"));
164
193
  const delta = new Date().getTime() - time;
165
194
 
166
195
  assert.ok(delta > 900, `Delta was not correct, await may not have paused? Delta was: ${delta}`);
196
+ assert.ok(
197
+ listenerFiredCount === 2,
198
+ `listenerFiredCount was not correct, await may not have paused? listenerFiredCount was: ${listenerFiredCount}`
199
+ );
167
200
  });
168
201
 
169
202
  it("Supports awaiting async listeners", async () => {
170
- const emitter = new Emitter();
203
+ interface TestEvents {
204
+ foo: () => Promise<void>;
205
+ }
206
+
207
+ const emitter = new Emitter<EmitterEventsInterface<TestEvents>>();
171
208
  let listenerFiredCount = 0;
172
209
 
173
210
  emitter.on("foo", async () => {
@@ -189,26 +226,124 @@ describe("Emitter", () => {
189
226
  });
190
227
 
191
228
  const time = new Date().getTime();
192
- await emitter.emit("foo");
229
+ await Promise.all(emitter.emit("foo"));
230
+ const delta = new Date().getTime() - time;
231
+
232
+ assert.ok(delta > 900, "Delta was not correct, await may not have paused?");
233
+ });
234
+
235
+ it("Supports awaiting async and non-async listener return data", async () => {
236
+ interface MyTestEvents {
237
+ foo: () => string | Promise<string>;
238
+ }
239
+
240
+ const emitter = new Emitter<EmitterEventsInterface<MyTestEvents>>();
241
+ let listenerFiredCount = 0;
242
+
243
+ emitter.on("foo", () => {
244
+ return new Promise<string>((resolve) => {
245
+ setTimeout(() => {
246
+ listenerFiredCount++;
247
+ resolve("Foo1 Return Value");
248
+ }, 1000);
249
+ });
250
+ });
251
+
252
+ emitter.on("foo", () => {
253
+ return "Foo2 Return Value";
254
+ });
255
+
256
+ const time = new Date().getTime();
257
+ const results: string[] = await Promise.all(emitter.emit("foo"));
258
+ const delta = new Date().getTime() - time;
259
+
260
+ assert.ok(delta > 900, "Delta was not correct, await may not have paused?");
261
+ assert.ok(listenerFiredCount === 1, "listenerFiredCount was not correct, await may not have been used?");
262
+ assert.strictEqual(results[0], "Foo1 Return Value", "Return data for foo1 was not correct");
263
+ assert.strictEqual(results[1], "Foo2 Return Value", "Return data for foo2 was not correct");
264
+ });
265
+
266
+ it("Supports awaiting async and non-async rpc listener return data", async () => {
267
+ interface MyTestEvents {
268
+ foo1: () => string | Promise<string>;
269
+ foo2: () => string;
270
+ }
271
+
272
+ const emitter = new Emitter<EmitterEventsInterface<MyTestEvents>>();
273
+ let listenerFiredCount = 0;
274
+
275
+ emitter.on("foo1", () => {
276
+ return new Promise<string>((resolve) => {
277
+ setTimeout(() => {
278
+ listenerFiredCount++;
279
+ resolve("Foo1 Return Value");
280
+ }, 1000);
281
+ });
282
+ });
283
+
284
+ emitter.on("foo2", () => {
285
+ return "Foo2 Return Value";
286
+ });
287
+
288
+ const time = new Date().getTime();
289
+ const result1 = await emitter.rpc("foo1");
290
+ const result2 = emitter.rpc("foo2");
193
291
  const delta = new Date().getTime() - time;
194
292
 
195
293
  assert.ok(delta > 900, "Delta was not correct, await may not have paused?");
294
+ assert.ok(listenerFiredCount === 1, "listenerFiredCount was not correct, await may not have been used?");
295
+ assert.strictEqual(result1, "Foo1 Return Value", "Return data for foo1 was not correct");
296
+ assert.strictEqual(result2, "Foo2 Return Value", "Return data for foo2 was not correct");
297
+ });
298
+
299
+ it("Supports responding with a cancellation signal", async () => {
300
+ interface MyTestEvents {
301
+ foo: () => string | ListenerReturnFlag;
302
+ }
303
+
304
+ const emitter = new Emitter<EmitterEventsInterface<MyTestEvents>>();
305
+ let listenerFiredCount = 0;
306
+
307
+ emitter.on("foo", () => {
308
+ listenerFiredCount++;
309
+ return "Foo1 Return Value";
310
+ });
311
+
312
+ emitter.on("foo", () => {
313
+ listenerFiredCount++;
314
+
315
+ // This listener will respond with a cancellation, this should terminate further listener calls
316
+ return ListenerReturnFlag.cancel;
317
+ });
318
+
319
+ emitter.on("foo", () => {
320
+ listenerFiredCount++;
321
+ return "Foo3 Return Value";
322
+ });
323
+
324
+ emitter.on("foo", () => {
325
+ listenerFiredCount++;
326
+ return "Foo4 Return Value";
327
+ });
328
+
329
+ const results = emitter.emit("foo");
330
+
331
+ assert.ok(listenerFiredCount === 2, "listenerFiredCount was not correct, await may not have been used?");
332
+ assert.strictEqual(results[0], "Foo1 Return Value", "Return data should be a cancel flag");
333
+ assert.strictEqual(results[1], ListenerReturnFlag.cancel, "Return data should be a cancel flag");
334
+ assert.ok(emitter.didCancel(results), "didCancel should detect a cancel flag");
196
335
  });
197
336
  });
198
337
 
199
338
  describe("off()", () => {
200
339
  it("Cancels all listeners (event)", () => {
201
340
  const myClass = new Emitter();
202
- const listener1 = () => {
203
- };
204
- const listener2 = () => {
205
- };
341
+ const listener1 = () => {};
342
+ const listener2 = () => {};
206
343
 
207
- myClass.on("moo", () => {
208
- });
344
+ myClass.on("moo", () => {});
209
345
  assert.strictEqual(myClass._eventListeners?.moo!["*"].length, 1, "Listeners registered on event");
210
- myClass.on("moo", "testId", () => {
211
- });
346
+ myClass.on("moo", "testId", () => {});
212
347
  assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 1, "Listeners registered on event");
213
348
  myClass.on("moo", listener1);
214
349
  assert.strictEqual(myClass._eventListeners?.moo["*"].length, 2, "Listeners registered on event");
@@ -217,21 +352,23 @@ describe("Emitter", () => {
217
352
 
218
353
  myClass.off("moo");
219
354
 
220
- assert.strictEqual(!myClass._eventListeners?.moo || (myClass._eventListeners?.moo["*"].length === 0 && myClass._eventListeners?.moo["testId"].length === 0), true, "Listeners all removed from event");
355
+ assert.strictEqual(
356
+ !myClass._eventListeners?.moo ||
357
+ (myClass._eventListeners?.moo["*"].length === 0 &&
358
+ myClass._eventListeners?.moo["testId"].length === 0),
359
+ true,
360
+ "Listeners all removed from event"
361
+ );
221
362
  });
222
363
 
223
364
  it("Cancels id-based listeners (event, id)", () => {
224
365
  const myClass = new Emitter();
225
- const listener1 = () => {
226
- };
227
- const listener2 = () => {
228
- };
366
+ const listener1 = () => {};
367
+ const listener2 = () => {};
229
368
 
230
- myClass.on("moo", () => {
231
- });
369
+ myClass.on("moo", () => {});
232
370
  assert.strictEqual(myClass._eventListeners?.moo!["*"].length, 1, "Listeners registered on event");
233
- myClass.on("moo", "testId", () => {
234
- });
371
+ myClass.on("moo", "testId", () => {});
235
372
  assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 1, "Listeners registered on event");
236
373
  myClass.on("moo", listener1);
237
374
  assert.strictEqual(myClass._eventListeners?.moo["*"].length, 2, "Listeners registered on event");
@@ -240,22 +377,26 @@ describe("Emitter", () => {
240
377
 
241
378
  myClass.off("moo", "testId");
242
379
 
243
- assert.strictEqual(myClass._eventListeners?.moo["*"].length === 2, true, "Listeners all removed from event");
244
- assert.strictEqual(!myClass._eventListeners?.moo["testId"] || myClass._eventListeners?.moo["testId"].length === 0, true, "Listeners all removed from event");
380
+ assert.strictEqual(
381
+ myClass._eventListeners?.moo["*"].length === 2,
382
+ true,
383
+ "Listeners all removed from event"
384
+ );
385
+ assert.strictEqual(
386
+ !myClass._eventListeners?.moo["testId"] || myClass._eventListeners?.moo["testId"].length === 0,
387
+ true,
388
+ "Listeners all removed from event"
389
+ );
245
390
  });
246
391
 
247
392
  it("Cancels listener-based listeners (event, listener)", () => {
248
393
  const myClass = new Emitter();
249
- const listener1 = () => {
250
- };
251
- const listener2 = () => {
252
- };
394
+ const listener1 = () => {};
395
+ const listener2 = () => {};
253
396
 
254
- myClass.on("moo", () => {
255
- });
397
+ myClass.on("moo", () => {});
256
398
  assert.strictEqual(myClass._eventListeners?.moo!["*"].length, 1, "Listeners registered on event");
257
- myClass.on("moo", "testId", () => {
258
- });
399
+ myClass.on("moo", "testId", () => {});
259
400
  assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 1, "Listeners registered on event");
260
401
  myClass.on("moo", listener1);
261
402
  assert.strictEqual(myClass._eventListeners?.moo["*"].length, 2, "Listeners registered on event");
@@ -264,22 +405,26 @@ describe("Emitter", () => {
264
405
 
265
406
  myClass.off("moo", listener1);
266
407
 
267
- assert.strictEqual(myClass._eventListeners?.moo["*"].length === 1, true, "Listeners all removed from event");
268
- assert.strictEqual(myClass._eventListeners?.moo["testId"].length === 2, true, "Listeners all removed from event");
408
+ assert.strictEqual(
409
+ myClass._eventListeners?.moo["*"].length === 1,
410
+ true,
411
+ "Listeners all removed from event"
412
+ );
413
+ assert.strictEqual(
414
+ myClass._eventListeners?.moo["testId"].length === 2,
415
+ true,
416
+ "Listeners all removed from event"
417
+ );
269
418
  });
270
419
 
271
420
  it("Cancels id-based + listener-based listeners (event, id, listener)", () => {
272
421
  const myClass = new Emitter();
273
- const listener1 = () => {
274
- };
275
- const listener2 = () => {
276
- };
422
+ const listener1 = () => {};
423
+ const listener2 = () => {};
277
424
 
278
- myClass.on("moo", () => {
279
- });
425
+ myClass.on("moo", () => {});
280
426
  assert.strictEqual(myClass._eventListeners?.moo!["*"].length, 1, "Listeners registered on event");
281
- myClass.on("moo", "testId", () => {
282
- });
427
+ myClass.on("moo", "testId", () => {});
283
428
  assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 1, "Listeners registered on event");
284
429
  myClass.on("moo", listener1);
285
430
  assert.strictEqual(myClass._eventListeners?.moo["*"].length, 2, "Listeners registered on event");
@@ -288,15 +433,22 @@ describe("Emitter", () => {
288
433
 
289
434
  myClass.off("moo", "testId", listener2);
290
435
 
291
- assert.strictEqual(myClass._eventListeners?.moo["*"].length === 2, true, "Listeners all removed from event");
292
- assert.strictEqual(myClass._eventListeners?.moo["testId"].length === 1, true, "Listeners all removed from event");
436
+ assert.strictEqual(
437
+ myClass._eventListeners?.moo["*"].length === 2,
438
+ true,
439
+ "Listeners all removed from event"
440
+ );
441
+ assert.strictEqual(
442
+ myClass._eventListeners?.moo["testId"].length === 1,
443
+ true,
444
+ "Listeners all removed from event"
445
+ );
293
446
  });
294
447
  });
295
448
 
296
449
  describe("emitStatic()", () => {
297
450
  it("Static emitter will emit when a new listener is added", (resolve) => {
298
- class MyClass extends Emitter {
299
- }
451
+ class MyClass extends Emitter {}
300
452
 
301
453
  expect(1);
302
454
 
@@ -312,8 +464,7 @@ describe("Emitter", () => {
312
464
 
313
465
  describe("cancelStatic()", () => {
314
466
  it("Removes static emitter", (resolve) => {
315
- class MyClass extends Emitter {
316
- }
467
+ class MyClass extends Emitter {}
317
468
 
318
469
  expect(1);
319
470
 
@@ -338,8 +489,7 @@ describe("Emitter", () => {
338
489
 
339
490
  describe("overwrite()", () => {
340
491
  it("Only fires the last listener added, cancelling all other listeners before it", (resolve) => {
341
- class MyClass extends Emitter {
342
- }
492
+ class MyClass extends Emitter {}
343
493
 
344
494
  expect(1);
345
495
 
@@ -364,8 +514,7 @@ describe("Emitter", () => {
364
514
  });
365
515
 
366
516
  it("Only fires the last listener added (with id), cancelling all other listeners before it", (resolve) => {
367
- class MyClass extends Emitter {
368
- }
517
+ class MyClass extends Emitter {}
369
518
 
370
519
  expect(2);
371
520
 
@@ -424,12 +573,30 @@ describe("Emitter", () => {
424
573
 
425
574
  myClass.off("moo", "testId");
426
575
 
427
- assert.strictEqual(!myClass._eventListeners?.moo || !myClass._eventListeners?.moo["testId"] || myClass._eventListeners?.moo["testId"].length, true, "Listeners all removed from event");
428
- assert.strictEqual(myClass._eventListeners?.moo && myClass._eventListeners?.moo["*"] && myClass._eventListeners?.moo["*"].length === 1, true, "Global listener still there");
576
+ assert.strictEqual(
577
+ !myClass._eventListeners?.moo ||
578
+ !myClass._eventListeners?.moo["testId"] ||
579
+ myClass._eventListeners?.moo["testId"].length,
580
+ true,
581
+ "Listeners all removed from event"
582
+ );
583
+ assert.strictEqual(
584
+ myClass._eventListeners?.moo &&
585
+ myClass._eventListeners?.moo["*"] &&
586
+ myClass._eventListeners?.moo["*"].length === 1,
587
+ true,
588
+ "Global listener still there"
589
+ );
429
590
 
430
591
  myClass.off("moo");
431
592
 
432
- assert.strictEqual(!myClass._eventListeners?.moo || !myClass._eventListeners?.moo["*"] || myClass._eventListeners?.moo["*"].length === 0, true, "Listeners all removed from event");
593
+ assert.strictEqual(
594
+ !myClass._eventListeners?.moo ||
595
+ !myClass._eventListeners?.moo["*"] ||
596
+ myClass._eventListeners?.moo["*"].length === 0,
597
+ true,
598
+ "Listeners all removed from event"
599
+ );
433
600
  });
434
601
  });
435
602
  });
package/tsconfig-cjs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "extends": "./tsconfig-base.json",
2
+ "extends": "./tsconfig.json",
3
3
  "compilerOptions": {
4
4
  "module": "commonjs",
5
5
  "outDir": "dist/cjs",
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "module": "esnext",
5
+ "outDir": "dist/esm",
6
+ "target": "esnext"
7
+ }
8
+ }
package/tsconfig.json CHANGED
@@ -1,8 +1,36 @@
1
1
  {
2
- "extends": "./tsconfig-base.json",
3
2
  "compilerOptions": {
4
- "module": "esnext",
5
- "outDir": "dist/mjs",
6
- "target": "esnext"
7
- }
3
+ "downlevelIteration": true,
4
+ "baseUrl": ".",
5
+ "target": "es6",
6
+ "lib": [
7
+ "esnext"
8
+ ],
9
+ "allowJs": false,
10
+ "skipLibCheck": false,
11
+ "strict": true,
12
+ "pretty": true,
13
+ "allowSyntheticDefaultImports": true,
14
+ "forceConsistentCasingInFileNames": true,
15
+ "noEmit": false,
16
+ "incremental": true,
17
+ "esModuleInterop": true,
18
+ "module": "es2022",
19
+ "moduleResolution": "node",
20
+ "resolveJsonModule": true,
21
+ "isolatedModules": true,
22
+ "declaration": true,
23
+ "inlineSourceMap": false,
24
+ "types": ["node", "jest"]
25
+ },
26
+ "include": [
27
+ "src/**/*.ts",
28
+ "tests/*.ts",
29
+ "tests/**/*.ts",
30
+ "src/**/*.tsx"
31
+ ],
32
+ "exclude": [
33
+ "node_modules",
34
+ "dist"
35
+ ]
8
36
  }