@wemake4u/form-player-se 1.0.45 → 1.0.47

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.
Files changed (42) hide show
  1. package/esm2022/lib/builtIn/builtIn.mjs +6 -2
  2. package/esm2022/lib/builtIn/cache.json +30 -0
  3. package/esm2022/lib/builtIn/form.json +25 -0
  4. package/esm2022/lib/builtIn/function.json +28 -0
  5. package/esm2022/lib/builtIn/nav.json +37 -0
  6. package/esm2022/lib/dialog/dialog.component.mjs +5 -4
  7. package/esm2022/lib/directives/collapse.directive.mjs +22 -2
  8. package/esm2022/lib/directives/dropdown.directive.mjs +38 -8
  9. package/esm2022/lib/directives/required.directive.mjs +2 -2
  10. package/esm2022/lib/directives/tabcontrol.directive.mjs +1 -1
  11. package/esm2022/lib/directives/treelist.directive.mjs +98 -0
  12. package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +96 -34
  13. package/esm2022/lib/services/builder.service.mjs +9 -1
  14. package/esm2022/lib/services/dialog.service.mjs +1 -1
  15. package/esm2022/lib/services/feel.service.mjs +25 -7
  16. package/esm2022/lib/services/form.service.mjs +17 -1
  17. package/esm2022/lib/services/function.service.mjs +26 -8
  18. package/esm2022/lib/services/programmability.service.mjs +26 -12
  19. package/esm2022/lib/services/validation.service.mjs +89 -54
  20. package/esm2022/lib/services/weak.service.mjs +4 -3
  21. package/esm2022/lib/utils/cacheControl.mjs +24 -0
  22. package/esm2022/lib/utils/deepEqual.mjs +27 -19
  23. package/esm2022/lib/utils/flatten.mjs +44 -0
  24. package/esm2022/lib/utils/observable.mjs +7 -3
  25. package/fesm2022/wemake4u-form-player-se.mjs +710 -190
  26. package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
  27. package/lib/directives/collapse.directive.d.ts +6 -1
  28. package/lib/directives/dropdown.directive.d.ts +5 -2
  29. package/lib/directives/treelist.directive.d.ts +23 -0
  30. package/lib/dynamic-fields/dynamic-fields.component.d.ts +18 -4
  31. package/lib/services/dialog.service.d.ts +10 -3
  32. package/lib/services/feel.service.d.ts +7 -2
  33. package/lib/services/form.service.d.ts +3 -0
  34. package/lib/services/function.service.d.ts +4 -1
  35. package/lib/services/programmability.service.d.ts +3 -2
  36. package/lib/services/validation.service.d.ts +5 -2
  37. package/lib/services/weak.service.d.ts +1 -1
  38. package/lib/utils/cacheControl.d.ts +9 -0
  39. package/lib/utils/deepEqual.d.ts +3 -1
  40. package/lib/utils/flatten.d.ts +13 -0
  41. package/lib/utils/observable.d.ts +1 -1
  42. package/package.json +3 -3
@@ -9,6 +9,9 @@ export declare class CollapseDirective implements OnChanges, OnDestroy {
9
9
  private listenerService;
10
10
  private languageService;
11
11
  maxHeight: number | null;
12
+ onCollapse?: () => void;
13
+ onExpand?: () => void;
14
+ component: any;
12
15
  private currentHeight;
13
16
  private button;
14
17
  private iconSpan;
@@ -33,6 +36,8 @@ export declare class CollapseDirective implements OnChanges, OnDestroy {
33
36
  private collapse;
34
37
  private updateIcon;
35
38
  private locale;
39
+ private onExpandOccurred;
40
+ private onCollapseOccurred;
36
41
  static ɵfac: i0.ɵɵFactoryDeclaration<CollapseDirective, never>;
37
- static ɵdir: i0.ɵɵDirectiveDeclaration<CollapseDirective, "[collapse]", never, { "maxHeight": { "alias": "collapse"; "required": false; }; }, {}, never, never, true, never>;
42
+ static ɵdir: i0.ɵɵDirectiveDeclaration<CollapseDirective, "[collapse]", never, { "maxHeight": { "alias": "collapse"; "required": false; }; "onCollapse": { "alias": "onCollapse"; "required": false; }; "onExpand": { "alias": "onExpand"; "required": false; }; "component": { "alias": "register"; "required": false; }; }, {}, never, never, true, never>;
38
43
  }
@@ -1,6 +1,7 @@
1
1
  import { AfterViewInit, OnDestroy, ElementRef, Renderer2, DestroyRef } from '@angular/core';
2
2
  import { ListenerService } from '../services/listener.service';
3
3
  import { SirioSelectComponent } from 'ngx-sirio-lib';
4
+ import { ExtendContextFn } from '../services/programmability.service';
4
5
  import * as i0 from "@angular/core";
5
6
  export declare class DropdownDirective implements AfterViewInit, OnDestroy {
6
7
  private el;
@@ -8,6 +9,8 @@ export declare class DropdownDirective implements AfterViewInit, OnDestroy {
8
9
  private listenerService;
9
10
  private destroyRef;
10
11
  private sirioSelect;
12
+ component: any;
13
+ onSelectionChanged?: (extendContext: ExtendContextFn) => void;
11
14
  constructor(el: ElementRef, renderer: Renderer2, listenerService: ListenerService, destroyRef: DestroyRef, sirioSelect: SirioSelectComponent);
12
15
  ngAfterViewInit(): void;
13
16
  ngOnInit(): void;
@@ -15,7 +18,7 @@ export declare class DropdownDirective implements AfterViewInit, OnDestroy {
15
18
  private handleValue;
16
19
  private handleSearchable;
17
20
  private handleOptionsChanges;
18
- private optionsSubscription?;
21
+ private handleOptionSelected;
19
22
  private canValidate;
20
23
  private validator;
21
24
  private addValidator;
@@ -35,5 +38,5 @@ export declare class DropdownDirective implements AfterViewInit, OnDestroy {
35
38
  private findPreviousVisibleOption;
36
39
  private findNextVisibleOption;
37
40
  static ɵfac: i0.ɵɵFactoryDeclaration<DropdownDirective, [null, null, null, null, { host: true; }]>;
38
- static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownDirective, "[dropdown]", never, {}, {}, never, never, true, never>;
41
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownDirective, "[dropdown]", never, { "component": { "alias": "register"; "required": false; }; "onSelectionChanged": { "alias": "onSelectionChanged"; "required": false; }; }, {}, never, never, true, never>;
39
42
  }
@@ -0,0 +1,23 @@
1
+ import { ElementRef, AfterViewInit, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { ListenerService } from '../services/listener.service';
3
+ import * as i0 from "@angular/core";
4
+ export declare class TreeListDirective implements OnChanges, AfterViewInit {
5
+ private el;
6
+ private listenerService;
7
+ nodes: any[];
8
+ constructor(el: ElementRef, listenerService: ListenerService);
9
+ ngOnChanges(changes: SimpleChanges): void;
10
+ ngAfterViewInit(): void;
11
+ private initialized;
12
+ private rows;
13
+ private rebuild;
14
+ private getChildren;
15
+ private setVisible;
16
+ private updateVisibility;
17
+ private isExpanded;
18
+ private refreshTree;
19
+ private initToggles;
20
+ private refreshToggleIcon;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<TreeListDirective, never>;
22
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TreeListDirective, "[treelist]", never, { "nodes": { "alias": "treelist"; "required": false; }; }, {}, never, never, true, never>;
23
+ }
@@ -5,7 +5,7 @@ import { SafeHtml, SafeResourceUrl } from '@angular/platform-browser';
5
5
  import { SanitizeService } from '../services/sanitize.service';
6
6
  import { MarkdownService } from '../services/markdown.service';
7
7
  import { MimeService } from '../services/mime.service';
8
- import { ProgrammabilityService } from '../services/programmability.service';
8
+ import { ExtendContextFn, ProgrammabilityService } from '../services/programmability.service';
9
9
  import { DialogService } from '../services/dialog.service';
10
10
  import { WeakService } from '../services/weak.service';
11
11
  import { RegisterService } from '../services/register.service';
@@ -15,7 +15,9 @@ import { FormService } from '../services/form.service';
15
15
  import { GridService } from '../services/grid.service';
16
16
  import { ChartService } from '../services/chart.service';
17
17
  import { AutoFocusService } from '../services/autofocus.service';
18
+ import { FunctionService } from '../services/function.service';
18
19
  import { Observable } from 'rxjs';
20
+ import { FlatNode } from '../utils/flatten';
19
21
  import { SirioFileUploadComponent, NgxSirioEvent, ButtonColors } from 'ngx-sirio-lib';
20
22
  import { Module, GridOptions } from 'ag-grid-community';
21
23
  import { AgChartOptions } from 'ag-charts-community';
@@ -32,6 +34,7 @@ export declare class DynamicFieldsComponent implements OnInit, OnChanges, AfterV
32
34
  private metadata;
33
35
  private languageService;
34
36
  private global;
37
+ private functionService;
35
38
  private formService;
36
39
  private grid;
37
40
  private chart;
@@ -385,7 +388,7 @@ export declare class DynamicFieldsComponent implements OnInit, OnChanges, AfterV
385
388
  Elements: string;
386
389
  Of: string;
387
390
  };
388
- constructor(sanitizer: SanitizeService, markdown: MarkdownService, mime: MimeService, programmability: ProgrammabilityService, weak: WeakService, register: RegisterService, metadata: MetadataService, languageService: LanguageService, global: GlobalService, formService: FormService, grid: GridService, chart: ChartService, dialog: DialogService, autoFocus: AutoFocusService, el: ElementRef);
391
+ constructor(sanitizer: SanitizeService, markdown: MarkdownService, mime: MimeService, programmability: ProgrammabilityService, weak: WeakService, register: RegisterService, metadata: MetadataService, languageService: LanguageService, global: GlobalService, functionService: FunctionService, formService: FormService, grid: GridService, chart: ChartService, dialog: DialogService, autoFocus: AutoFocusService, el: ElementRef);
389
392
  ngOnInit(): void;
390
393
  ngOnChanges(changes: SimpleChanges): void;
391
394
  ngAfterViewInit(): void;
@@ -397,11 +400,13 @@ export declare class DynamicFieldsComponent implements OnInit, OnChanges, AfterV
397
400
  evaluateBoolean(value: boolean | string | null): boolean | null;
398
401
  evaluateNumber(value: number | string | null): number | null;
399
402
  evaluateUrl(value: string | null): SafeResourceUrl;
400
- evaluateHeight(value: number | string | null): string | null;
403
+ evaluateSize(value: number | string | null): string | null;
401
404
  evaluateTemplate(value: string | null): string;
402
- evaluate(text: string | null, cacheable?: boolean): any;
405
+ evaluate(text: string | null, cacheable?: boolean, extendContext?: ExtendContextFn): any;
403
406
  evaluateColor(value: string | null): ButtonColors | null;
404
407
  evaluateConditional(conditional: any): boolean;
408
+ getTreeColumns(component: any): any;
409
+ getTreeSource(component: any): Observable<FlatNode<any>[]>;
405
410
  getTemplate(value: string): any;
406
411
  getFormGroup(control: AbstractControl | null): FormGroup;
407
412
  getFormArray(control: AbstractControl | null): FormArray;
@@ -425,6 +430,7 @@ export declare class DynamicFieldsComponent implements OnInit, OnChanges, AfterV
425
430
  getGridModules(component: any): Module[];
426
431
  onGridSelectionChanged(component: any, event: any): void;
427
432
  getRowSource(component: any): any;
433
+ runExpression(expression: any): (() => void) | undefined;
428
434
  refreshRowSource(component: any): () => void;
429
435
  addItem(formArray: FormArray): void;
430
436
  removeItem(formArray: FormArray, index: number, withConfirm: boolean): void;
@@ -455,6 +461,10 @@ export declare class DynamicFieldsComponent implements OnInit, OnChanges, AfterV
455
461
  getComponentStyle(component: any): {
456
462
  [key: string]: string;
457
463
  } | null;
464
+ getClass(component: any): {};
465
+ getStyle(component: any): {
466
+ [key: string]: string;
467
+ } | null;
458
468
  getTextAlignment(component: any): string;
459
469
  getHorizontalAlignment(component: any): {
460
470
  "horizontal-left": boolean;
@@ -462,8 +472,10 @@ export declare class DynamicFieldsComponent implements OnInit, OnChanges, AfterV
462
472
  "horizontal-right": boolean;
463
473
  "horizontal-fill": boolean;
464
474
  };
475
+ getJustify(align: string | undefined): string;
465
476
  getLightView(component: any): string;
466
477
  getPanels(component: any): Observable<any>;
478
+ isTextOverflow(el: HTMLElement): boolean;
467
479
  private noData;
468
480
  private get language();
469
481
  private invalidate;
@@ -471,6 +483,8 @@ export declare class DynamicFieldsComponent implements OnInit, OnChanges, AfterV
471
483
  private getAsObservable;
472
484
  private applyCssClasses;
473
485
  private applyInlineStyles;
486
+ private evaluateFuncOrValue;
487
+ private invokeFuncOrValue;
474
488
  private configureDatepicker;
475
489
  private markForAutoFocus;
476
490
  private requireAutoFocus;
@@ -1,5 +1,5 @@
1
1
  import { Injector } from '@angular/core';
2
- import { SirioDialogService, DialogTypes, DialogSizes } from 'ngx-sirio-lib';
2
+ import { SirioDialogService, DialogTypes, DialogSizes, ButtonColors } from 'ngx-sirio-lib';
3
3
  import { IEvaluatorProvider } from '../services/programmability.service';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class DialogService implements IEvaluatorProvider {
@@ -27,6 +27,8 @@ export interface DialogOptions {
27
27
  isDrawer?: boolean;
28
28
  closeButton?: boolean;
29
29
  buttons?: DialogButtons;
30
+ customButtons?: CustomButton[];
31
+ keepOpen?: boolean;
30
32
  onResult?: (result: DialogResult) => void;
31
33
  }
32
34
  export interface FormDialogOptions extends DialogOptions {
@@ -38,8 +40,13 @@ export interface FormDialogOptions extends DialogOptions {
38
40
  showFormTitle?: boolean;
39
41
  }
40
42
  export interface DialogResult {
41
- action: DialogAction;
43
+ action: DialogAction | string;
42
44
  value?: any;
43
45
  }
46
+ export interface CustomButton {
47
+ text: string;
48
+ color: ButtonColors;
49
+ action: string;
50
+ }
44
51
  export type DialogAction = 'OK' | 'Cancel' | 'Yes' | 'No' | 'Confirm' | 'Close' | 'Abort' | 'Retry' | 'Ignore' | 'Try' | 'Continue';
45
- export type DialogButtons = 'OK' | 'OKCancel' | 'ConfirmCancel' | 'AbortRetryIgnore' | 'YesNoCancel' | 'YesNo' | 'RetryCancel' | 'CancelTryContinue';
52
+ export type DialogButtons = 'OK' | 'OKCancel' | 'ConfirmCancel' | 'AbortRetryIgnore' | 'YesNoCancel' | 'YesNo' | 'RetryCancel' | 'CancelTryContinue' | 'Custom';
@@ -1,9 +1,13 @@
1
+ import { GlobalService } from '../services/global.service';
1
2
  import * as i0 from "@angular/core";
2
3
  export declare class FeelService {
3
- constructor();
4
+ private globalService;
5
+ constructor(globalService: GlobalService);
6
+ private _verbose;
7
+ get verbose(): boolean;
4
8
  evalTemplate(template: string, context?: any): string;
5
9
  evalExpression(expression: string, context?: Record<string, any>): any;
6
- evalUnaryTest(expression: string, context?: Record<string, any>, input?: any): boolean;
10
+ evalUnaryTest(expression: string, context?: Record<string, any>, input?: any): boolean | null;
7
11
  isValidExpression(expression: string): boolean;
8
12
  isValidUnaryTest(expression: string): boolean;
9
13
  getDependencies(expression: string, context?: Record<string, any>): (string | string[])[];
@@ -15,6 +19,7 @@ export declare class FeelService {
15
19
  private getFunctionName;
16
20
  private getStatusDependencies;
17
21
  private splitQuoted;
22
+ private logWarnings;
18
23
  static ɵfac: i0.ɵɵFactoryDeclaration<FeelService, never>;
19
24
  static ɵprov: i0.ɵɵInjectableDeclaration<FeelService>;
20
25
  }
@@ -18,10 +18,13 @@ export interface PathOptions {
18
18
  create?: boolean;
19
19
  expected?: ControlType;
20
20
  breakOnArray?: boolean;
21
+ breakOnNull?: boolean;
21
22
  }
22
23
  export declare class FormService implements IEvaluatorProvider {
23
24
  set(control: AbstractControl, path: Path, value: any, pathOptions?: PathOptions, patchOptions?: PatchOptions): boolean;
24
25
  get(control: AbstractControl, path: Path, pathOptions?: PathOptions): any;
26
+ reset(control: AbstractControl, path: Path): any;
27
+ resetAll(control: AbstractControl, ...paths: string[]): void;
25
28
  getControl(control: AbstractControl, path: Path, pathOptions?: PathOptions): AbstractControl | undefined;
26
29
  prepend(control: AbstractControl, path: Path, value: any, pathOptions?: PathOptions, patchOptions?: PatchOptions): boolean;
27
30
  append(control: AbstractControl, path: Path, value: any, pathOptions?: PathOptions, patchOptions?: PatchOptions): boolean;
@@ -10,8 +10,11 @@ export declare class FunctionService implements IEvaluatorProvider {
10
10
  private dialog;
11
11
  private injector;
12
12
  constructor(metadata: MetadataService, dialog: DialogService, injector: Injector);
13
- invokable(func: any): Function;
13
+ invokable(func: any): (...args: any[]) => any;
14
+ asInvokable(func: any): ((...args: any[]) => any) | null;
14
15
  executeOnce<T>(observable: Observable<T>, callback: any): void;
16
+ asObservable<T>(value: T): Observable<T>;
17
+ setTimeout<T>(callback: any, delay: number): void;
15
18
  openForm(template: string | object, options: DialogOptions): void;
16
19
  openWindow(url: string, target?: WindowTarget, features?: OpenWindowFeatures): Window | null;
17
20
  newGuid(): string;
@@ -19,7 +19,7 @@ export declare class ProgrammabilityService {
19
19
  private toastService;
20
20
  private dialogService;
21
21
  private formatterService;
22
- private JsonService;
22
+ private jsonService;
23
23
  private functionService;
24
24
  private formService;
25
25
  private globalService;
@@ -27,7 +27,7 @@ export declare class ProgrammabilityService {
27
27
  private destroyRef;
28
28
  private register;
29
29
  private scope;
30
- constructor(feelService: FeelService, weakService: WeakService, toastService: ToastService, dialogService: DialogService, formatterService: FormatterService, JsonService: JsonService, functionService: FunctionService, formService: FormService, globalService: GlobalService, subscribeService: SubscribeService, destroyRef: DestroyRef, register: RegisterService, scope: ScopeService);
30
+ constructor(feelService: FeelService, weakService: WeakService, toastService: ToastService, dialogService: DialogService, formatterService: FormatterService, jsonService: JsonService, functionService: FunctionService, formService: FormService, globalService: GlobalService, subscribeService: SubscribeService, destroyRef: DestroyRef, register: RegisterService, scope: ScopeService);
31
31
  private predefinedFunctions;
32
32
  private evaluatorProviders;
33
33
  addEvaluatorProviders(evaluatorProvider: IEvaluatorProvider): void;
@@ -76,6 +76,7 @@ export interface IEvaluatorProvider {
76
76
  export interface EvaluateOptions {
77
77
  cacheable?: boolean;
78
78
  ignoreDeps?: boolean;
79
+ cacheInvalidated?: () => void;
79
80
  extendContext?: ExtendContextFn;
80
81
  }
81
82
  export type ExtendContextFn = () => Record<string, any>;
@@ -12,23 +12,26 @@ export declare class ValidationService {
12
12
  createCollection(): ValidationCollection;
13
13
  addToCollection(collection: ValidationCollection, control: AbstractControl, formGroup: FormGroup, component: any): void;
14
14
  setupCollection(collection: ValidationCollection): void;
15
- validateRequired(control: AbstractControl): ValidationErrors | null;
15
+ validateRequired(control: AbstractControl, currentValue: any): ValidationErrors | null;
16
16
  private canAddToCollection;
17
17
  private getRules;
18
18
  private validateRules;
19
19
  private createValidator;
20
20
  private createAsyncValidator;
21
+ private createRequiredValidator;
21
22
  private validationErrors;
22
23
  private watchForValidation;
23
24
  private logValidation;
24
25
  private readonly nullObserver;
25
26
  private get language();
26
27
  private locale;
27
- private getRequiredValidator;
28
+ private requiredValidators;
28
29
  private requiredValidator;
29
30
  private requiredTrueValidator;
30
31
  private isTrueValidator;
31
32
  private getRequiredMessage;
33
+ private shouldSkipValidation;
34
+ private resolveSkipValidation;
32
35
  static ɵfac: i0.ɵɵFactoryDeclaration<ValidationService, never>;
33
36
  static ɵprov: i0.ɵɵInjectableDeclaration<ValidationService>;
34
37
  }
@@ -3,7 +3,7 @@ export declare class WeakService {
3
3
  constructor();
4
4
  private cache;
5
5
  exists(source: object, key: string): boolean;
6
- call<T>(source: object, key: string, func: () => T, reusable?: ((value: T) => boolean) | null, store?: ((value: T) => any) | null): T;
6
+ call<T>(source: object, key: string, func: () => T, reusable?: ((value: T) => boolean) | null, store?: ((value: T) => any) | null, cacheable?: ((value: T) => boolean) | null): T;
7
7
  invalidate(source: object, key: string): void;
8
8
  invalidateAll(source: object): void;
9
9
  static ɵfac: i0.ɵɵFactoryDeclaration<WeakService, never>;
@@ -0,0 +1,9 @@
1
+ export declare class CacheControl {
2
+ private _volatile;
3
+ private _ttl?;
4
+ get isVolatile(): boolean;
5
+ get ttl(): number | undefined;
6
+ volatile<T>(value: T): T;
7
+ cacheFor<T>(value: T, ttl: number): T;
8
+ configure(context: Record<string, any>): void;
9
+ }
@@ -1 +1,3 @@
1
- export declare function deepEqual(a: any, b: any, visited?: WeakMap<object, any>): boolean;
1
+ export declare function deepEqual(a: any, b: any, options?: {
2
+ handleCircular?: boolean;
3
+ }, visited?: WeakMap<any, any>): boolean;
@@ -0,0 +1,13 @@
1
+ export interface FlatNode<T = any> {
2
+ id: number;
3
+ parentId: number | null;
4
+ level: number;
5
+ hasChildren: boolean;
6
+ expanded: boolean;
7
+ data: T;
8
+ meta?: Record<string, any>;
9
+ }
10
+ export declare function flattenTree<T>(nodes: unknown, options?: {
11
+ children?: keyof T | ((node: T) => T[] | null | undefined);
12
+ onCreate?: (flatNode: FlatNode<T>) => void;
13
+ }): FlatNode<T>[];
@@ -1,2 +1,2 @@
1
1
  import { Observable } from 'rxjs';
2
- export declare function subscribeOnce<T>(source$: Observable<T>, next: (value: T) => void): void;
2
+ export declare function subscribeOnce<T>(source$: Observable<T>, next: (value: T) => void, error?: (err: any) => void, complete?: () => void): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wemake4u/form-player-se",
3
- "version": "1.0.45",
3
+ "version": "1.0.47",
4
4
  "license": "MIT",
5
5
  "peerDependencies": {
6
6
  "@angular/cdk": "^18.2.0",
@@ -23,8 +23,8 @@
23
23
  "@types/mime-db": "1.43.5",
24
24
  "@types/sanitize-html": "2.13.0",
25
25
  "@types/vanillajs-datepicker": "^1.3.4",
26
- "feelers": "^1.4.0",
27
- "feelin": "4.3.0",
26
+ "feelers": "^1.5.1",
27
+ "feelin": "6.2.0",
28
28
  "marked": "15.0.7",
29
29
  "mime-db": "1.53.0",
30
30
  "sanitize-html": "^2.13.0",