ngx-lift 0.4.0

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 (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +56 -0
  3. package/esm2022/lib/const.mjs +5 -0
  4. package/esm2022/lib/models/async-state.model.mjs +2 -0
  5. package/esm2022/lib/models/index.mjs +2 -0
  6. package/esm2022/lib/operators/combine-latest-eager.operator.mjs +48 -0
  7. package/esm2022/lib/operators/create-async-state.operator.mjs +52 -0
  8. package/esm2022/lib/operators/distinct-on-change.operator.mjs +80 -0
  9. package/esm2022/lib/operators/index.mjs +8 -0
  10. package/esm2022/lib/operators/logger.operator.mjs +21 -0
  11. package/esm2022/lib/operators/poll.operator.mjs +32 -0
  12. package/esm2022/lib/operators/start-with-tap.operator.mjs +15 -0
  13. package/esm2022/lib/operators/switch-map-with-async-state.operator.mjs +33 -0
  14. package/esm2022/lib/pipes/array-join.pipe.mjs +21 -0
  15. package/esm2022/lib/pipes/byte-converter.pipe.mjs +159 -0
  16. package/esm2022/lib/pipes/index.mjs +5 -0
  17. package/esm2022/lib/pipes/is-https.pipe.mjs +18 -0
  18. package/esm2022/lib/pipes/mask.pipe.mjs +36 -0
  19. package/esm2022/lib/utils/form.util.mjs +56 -0
  20. package/esm2022/lib/utils/index.mjs +5 -0
  21. package/esm2022/lib/utils/is-empty.util.mjs +17 -0
  22. package/esm2022/lib/utils/is-equal.util.mjs +24 -0
  23. package/esm2022/lib/utils/pick-by.util.mjs +16 -0
  24. package/esm2022/lib/validators/index.mjs +3 -0
  25. package/esm2022/lib/validators/unique.validator.mjs +64 -0
  26. package/esm2022/lib/validators/url.validator.mjs +14 -0
  27. package/esm2022/ngx-lift.mjs +5 -0
  28. package/esm2022/public-api.mjs +10 -0
  29. package/fesm2022/ngx-lift.mjs +707 -0
  30. package/fesm2022/ngx-lift.mjs.map +1 -0
  31. package/index.d.ts +5 -0
  32. package/lib/const.d.ts +3 -0
  33. package/lib/models/async-state.model.d.ts +22 -0
  34. package/lib/models/index.d.ts +1 -0
  35. package/lib/operators/combine-latest-eager.operator.d.ts +7 -0
  36. package/lib/operators/create-async-state.operator.d.ts +49 -0
  37. package/lib/operators/distinct-on-change.operator.d.ts +55 -0
  38. package/lib/operators/index.d.ts +7 -0
  39. package/lib/operators/logger.operator.d.ts +11 -0
  40. package/lib/operators/poll.operator.d.ts +18 -0
  41. package/lib/operators/start-with-tap.operator.d.ts +10 -0
  42. package/lib/operators/switch-map-with-async-state.operator.d.ts +31 -0
  43. package/lib/pipes/array-join.pipe.d.ts +7 -0
  44. package/lib/pipes/byte-converter.pipe.d.ts +39 -0
  45. package/lib/pipes/index.d.ts +4 -0
  46. package/lib/pipes/is-https.pipe.d.ts +7 -0
  47. package/lib/pipes/mask.pipe.d.ts +19 -0
  48. package/lib/utils/form.util.d.ts +18 -0
  49. package/lib/utils/index.d.ts +4 -0
  50. package/lib/utils/is-empty.util.d.ts +6 -0
  51. package/lib/utils/is-equal.util.d.ts +7 -0
  52. package/lib/utils/pick-by.util.d.ts +7 -0
  53. package/lib/validators/index.d.ts +2 -0
  54. package/lib/validators/unique.validator.d.ts +18 -0
  55. package/lib/validators/url.validator.d.ts +3 -0
  56. package/package.json +28 -0
  57. package/public-api.d.ts +5 -0
@@ -0,0 +1,159 @@
1
+ import { Inject, LOCALE_ID, Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * import { LOCALE_ID, NgModule } from '@angular/core';
5
+ * import { BrowserModule } from '@angular/platform-browser';
6
+ * import { AppComponent } from './app.component';
7
+ * import { registerLocaleData } from '@angular/common';
8
+ *
9
+ * import localeEn from '@angular/common/locales/en';
10
+ * import localeFr from '@angular/common/locales/fr';
11
+ *
12
+ * // Register locales
13
+ * registerLocaleData(localeEn);
14
+ * registerLocaleData(localeFr);
15
+ *
16
+ * @NgModule({
17
+ * declarations: [AppComponent],
18
+ * imports: [BrowserModule],
19
+ * providers: [
20
+ * {
21
+ * provide: LOCALE_ID,
22
+ * useFactory: () => {
23
+ * // Use the browser's language or a default language
24
+ * return navigator.language || 'en';
25
+ * },
26
+ * },
27
+ * ],
28
+ * bootstrap: [AppComponent],
29
+ * })
30
+ * export class AppModule {}
31
+ */
32
+ export class ByteConverterPipe {
33
+ constructor(locale) {
34
+ this.locale = locale;
35
+ }
36
+ // If using navigator.language directly in the pipe, this approach directly uses the browser's language at the moment the ByteConverterPipe is constructed. If the user changes the language while using the application, it won't be automatically reflected. If dynamic language changes are a requirement, using the LOCALE_ID provider as demonstrated in the AppModule is a more Angular-centric approach.
37
+ // private locale: string;
38
+ // constructor() {
39
+ // // Use navigator.language as the default locale
40
+ // this.locale = navigator.language || 'en';
41
+ // }
42
+ transform(value) {
43
+ if (value === null || value === undefined || isNaN(value)) {
44
+ return '-';
45
+ }
46
+ const units = ['BYTE', 'KB', 'MB', 'GB', 'TB'];
47
+ let unitIndex = 0;
48
+ while (value >= 1024 && unitIndex < units.length - 1) {
49
+ value /= 1024;
50
+ unitIndex++;
51
+ }
52
+ const translationObject = translations[this.locale] || translations['en'];
53
+ const key = units[unitIndex];
54
+ return this.formatNumber(value) + ' ' + translationObject[key];
55
+ }
56
+ formatNumber(value) {
57
+ return new Intl.NumberFormat(this.locale, { maximumFractionDigits: 2 }).format(value);
58
+ }
59
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ByteConverterPipe, deps: [{ token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Pipe }); }
60
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: ByteConverterPipe, isStandalone: true, name: "byteConverter" }); }
61
+ }
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ByteConverterPipe, decorators: [{
63
+ type: Pipe,
64
+ args: [{
65
+ name: 'byteConverter',
66
+ standalone: true,
67
+ }]
68
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
69
+ type: Inject,
70
+ args: [LOCALE_ID]
71
+ }] }] });
72
+ const translations = {
73
+ en: {
74
+ BYTE: 'B',
75
+ KB: 'KB',
76
+ MB: 'MB',
77
+ GB: 'GB',
78
+ TB: 'TB',
79
+ },
80
+ 'en-US': {
81
+ // You can provide specific variations for en-US if needed
82
+ BYTE: 'B',
83
+ KB: 'KB',
84
+ MB: 'MB',
85
+ GB: 'GB',
86
+ TB: 'TB',
87
+ },
88
+ de: {
89
+ BYTE: 'B',
90
+ KB: 'KB',
91
+ MB: 'MB',
92
+ GB: 'GB',
93
+ TB: 'TB',
94
+ },
95
+ es: {
96
+ BYTE: 'B',
97
+ KB: 'KB',
98
+ MB: 'MB',
99
+ GB: 'GB',
100
+ TB: 'TB',
101
+ },
102
+ fr: {
103
+ BYTE: 'o',
104
+ KB: 'Ko',
105
+ MB: 'Mo',
106
+ GB: 'Go',
107
+ TB: 'To',
108
+ },
109
+ it: {
110
+ BYTE: 'B',
111
+ KB: 'KB',
112
+ MB: 'MB',
113
+ GB: 'GB',
114
+ TB: 'TB',
115
+ },
116
+ ja: {
117
+ BYTE: 'B',
118
+ KB: 'KB',
119
+ MB: 'MB',
120
+ GB: 'GB',
121
+ TB: 'TB',
122
+ },
123
+ ko: {
124
+ BYTE: 'B',
125
+ KB: 'KB',
126
+ MB: 'MB',
127
+ GB: 'GB',
128
+ TB: 'TB',
129
+ },
130
+ 'pt-BR': {
131
+ BYTE: 'B',
132
+ KB: 'KB',
133
+ MB: 'MB',
134
+ GB: 'GB',
135
+ TB: 'TB',
136
+ },
137
+ 'zh-CN': {
138
+ BYTE: '字节',
139
+ KB: '千字节',
140
+ MB: '兆字节',
141
+ GB: '千兆字节',
142
+ TB: '太字节',
143
+ },
144
+ 'zh-TW': {
145
+ BYTE: '位元組',
146
+ KB: '千位元組',
147
+ MB: '兆位元組',
148
+ GB: '千兆位元組',
149
+ TB: '太位元組',
150
+ },
151
+ ru: {
152
+ BYTE: 'Б',
153
+ KB: 'КБ',
154
+ MB: 'МБ',
155
+ GB: 'ГБ',
156
+ TB: 'ТБ',
157
+ },
158
+ };
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnl0ZS1jb252ZXJ0ZXIucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvcGlwZXMvYnl0ZS1jb252ZXJ0ZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDOztBQUVyRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQU1ILE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFBdUMsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBRXpELCtZQUErWTtJQUMvWSwwQkFBMEI7SUFDMUIsa0JBQWtCO0lBQ2xCLG9EQUFvRDtJQUNwRCw4Q0FBOEM7SUFDOUMsSUFBSTtJQUVKLFNBQVMsQ0FBQyxLQUFhO1FBQ3JCLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6RCxPQUFPLEdBQUcsQ0FBQztTQUNaO1FBRUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDcEQsS0FBSyxJQUFJLElBQUksQ0FBQztZQUNkLFNBQVMsRUFBRSxDQUFDO1NBQ2I7UUFFRCxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFFLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU3QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUNoQyxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUMscUJBQXFCLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEYsQ0FBQzs4R0EvQlUsaUJBQWlCLGtCQUNSLFNBQVM7NEdBRGxCLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFKN0IsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsZUFBZTtvQkFDckIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzswQkFFYyxNQUFNOzJCQUFDLFNBQVM7O0FBaUMvQixNQUFNLFlBQVksR0FBMkM7SUFDM0QsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLEdBQUc7UUFDVCxFQUFFLEVBQUUsSUFBSTtRQUNSLEVBQUUsRUFBRSxJQUFJO1FBQ1IsRUFBRSxFQUFFLElBQUk7UUFDUixFQUFFLEVBQUUsSUFBSTtLQUNUO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsMERBQTBEO1FBQzFELElBQUksRUFBRSxHQUFHO1FBQ1QsRUFBRSxFQUFFLElBQUk7UUFDUixFQUFFLEVBQUUsSUFBSTtRQUNSLEVBQUUsRUFBRSxJQUFJO1FBQ1IsRUFBRSxFQUFFLElBQUk7S0FDVDtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxHQUFHO1FBQ1QsRUFBRSxFQUFFLElBQUk7UUFDUixFQUFFLEVBQUUsSUFBSTtRQUNSLEVBQUUsRUFBRSxJQUFJO1FBQ1IsRUFBRSxFQUFFLElBQUk7S0FDVDtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxHQUFHO1FBQ1QsRUFBRSxFQUFFLElBQUk7UUFDUixFQUFFLEVBQUUsSUFBSTtRQUNSLEVBQUUsRUFBRSxJQUFJO1FBQ1IsRUFBRSxFQUFFLElBQUk7S0FDVDtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxHQUFHO1FBQ1QsRUFBRSxFQUFFLElBQUk7UUFDUixFQUFFLEVBQUUsSUFBSTtRQUNSLEVBQUUsRUFBRSxJQUFJO1FBQ1IsRUFBRSxFQUFFLElBQUk7S0FDVDtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxHQUFHO1FBQ1QsRUFBRSxFQUFFLElBQUk7UUFDUixFQUFFLEVBQUUsSUFBSTtRQUNSLEVBQUUsRUFBRSxJQUFJO1FBQ1IsRUFBRSxFQUFFLElBQUk7S0FDVDtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxHQUFHO1FBQ1QsRUFBRSxFQUFFLElBQUk7UUFDUixFQUFFLEVBQUUsSUFBSTtRQUNSLEVBQUUsRUFBRSxJQUFJO1FBQ1IsRUFBRSxFQUFFLElBQUk7S0FDVDtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxHQUFHO1FBQ1QsRUFBRSxFQUFFLElBQUk7UUFDUixFQUFFLEVBQUUsSUFBSTtRQUNSLEVBQUUsRUFBRSxJQUFJO1FBQ1IsRUFBRSxFQUFFLElBQUk7S0FDVDtJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxHQUFHO1FBQ1QsRUFBRSxFQUFFLElBQUk7UUFDUixFQUFFLEVBQUUsSUFBSTtRQUNSLEVBQUUsRUFBRSxJQUFJO1FBQ1IsRUFBRSxFQUFFLElBQUk7S0FDVDtJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxJQUFJO1FBQ1YsRUFBRSxFQUFFLEtBQUs7UUFDVCxFQUFFLEVBQUUsS0FBSztRQUNULEVBQUUsRUFBRSxNQUFNO1FBQ1YsRUFBRSxFQUFFLEtBQUs7S0FDVjtJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxLQUFLO1FBQ1gsRUFBRSxFQUFFLE1BQU07UUFDVixFQUFFLEVBQUUsTUFBTTtRQUNWLEVBQUUsRUFBRSxPQUFPO1FBQ1gsRUFBRSxFQUFFLE1BQU07S0FDWDtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxHQUFHO1FBQ1QsRUFBRSxFQUFFLElBQUk7UUFDUixFQUFFLEVBQUUsSUFBSTtRQUNSLEVBQUUsRUFBRSxJQUFJO1FBQ1IsRUFBRSxFQUFFLElBQUk7S0FDVDtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgTE9DQUxFX0lELCBQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBpbXBvcnQgeyBMT0NBTEVfSUQsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKiBpbXBvcnQgeyBCcm93c2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICogaW1wb3J0IHsgcmVnaXN0ZXJMb2NhbGVEYXRhIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbiAqXG4gKiBpbXBvcnQgbG9jYWxlRW4gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2xvY2FsZXMvZW4nO1xuICogaW1wb3J0IGxvY2FsZUZyIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL2ZyJztcbiAqXG4gKiAvLyBSZWdpc3RlciBsb2NhbGVzXG4gKiByZWdpc3RlckxvY2FsZURhdGEobG9jYWxlRW4pO1xuICogcmVnaXN0ZXJMb2NhbGVEYXRhKGxvY2FsZUZyKTtcbiAqXG4gKiBATmdNb2R1bGUoe1xuICogICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLFxuICogICBpbXBvcnRzOiBbQnJvd3Nlck1vZHVsZV0sXG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHtcbiAqICAgICAgIHByb3ZpZGU6IExPQ0FMRV9JRCxcbiAqICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAqICAgICAgICAgLy8gVXNlIHRoZSBicm93c2VyJ3MgbGFuZ3VhZ2Ugb3IgYSBkZWZhdWx0IGxhbmd1YWdlXG4gKiAgICAgICAgIHJldHVybiBuYXZpZ2F0b3IubGFuZ3VhZ2UgfHwgJ2VuJztcbiAqICAgICAgIH0sXG4gKiAgICAgfSxcbiAqICAgXSxcbiAqICAgYm9vdHN0cmFwOiBbQXBwQ29tcG9uZW50XSxcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKi9cblxuQFBpcGUoe1xuICBuYW1lOiAnYnl0ZUNvbnZlcnRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEJ5dGVDb252ZXJ0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTE9DQUxFX0lEKSBwcml2YXRlIGxvY2FsZTogc3RyaW5nKSB7fVxuXG4gIC8vIElmIHVzaW5nIG5hdmlnYXRvci5sYW5ndWFnZSBkaXJlY3RseSBpbiB0aGUgcGlwZSwgdGhpcyBhcHByb2FjaCBkaXJlY3RseSB1c2VzIHRoZSBicm93c2VyJ3MgbGFuZ3VhZ2UgYXQgdGhlIG1vbWVudCB0aGUgQnl0ZUNvbnZlcnRlclBpcGUgaXMgY29uc3RydWN0ZWQuIElmIHRoZSB1c2VyIGNoYW5nZXMgdGhlIGxhbmd1YWdlIHdoaWxlIHVzaW5nIHRoZSBhcHBsaWNhdGlvbiwgaXQgd29uJ3QgYmUgYXV0b21hdGljYWxseSByZWZsZWN0ZWQuIElmIGR5bmFtaWMgbGFuZ3VhZ2UgY2hhbmdlcyBhcmUgYSByZXF1aXJlbWVudCwgdXNpbmcgdGhlIExPQ0FMRV9JRCBwcm92aWRlciBhcyBkZW1vbnN0cmF0ZWQgaW4gdGhlIEFwcE1vZHVsZSBpcyBhIG1vcmUgQW5ndWxhci1jZW50cmljIGFwcHJvYWNoLlxuICAvLyBwcml2YXRlIGxvY2FsZTogc3RyaW5nO1xuICAvLyBjb25zdHJ1Y3RvcigpIHtcbiAgLy8gICAvLyBVc2UgbmF2aWdhdG9yLmxhbmd1YWdlIGFzIHRoZSBkZWZhdWx0IGxvY2FsZVxuICAvLyAgIHRoaXMubG9jYWxlID0gbmF2aWdhdG9yLmxhbmd1YWdlIHx8ICdlbic7XG4gIC8vIH1cblxuICB0cmFuc2Zvcm0odmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgaXNOYU4odmFsdWUpKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cblxuICAgIGNvbnN0IHVuaXRzID0gWydCWVRFJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJ107XG4gICAgbGV0IHVuaXRJbmRleCA9IDA7XG5cbiAgICB3aGlsZSAodmFsdWUgPj0gMTAyNCAmJiB1bml0SW5kZXggPCB1bml0cy5sZW5ndGggLSAxKSB7XG4gICAgICB2YWx1ZSAvPSAxMDI0O1xuICAgICAgdW5pdEluZGV4Kys7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNsYXRpb25PYmplY3QgPSB0cmFuc2xhdGlvbnNbdGhpcy5sb2NhbGVdIHx8IHRyYW5zbGF0aW9uc1snZW4nXTtcbiAgICBjb25zdCBrZXkgPSB1bml0c1t1bml0SW5kZXhdO1xuXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0TnVtYmVyKHZhbHVlKSArICcgJyArIHRyYW5zbGF0aW9uT2JqZWN0W2tleV07XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdE51bWJlcih2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KHRoaXMubG9jYWxlLCB7bWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyfSkuZm9ybWF0KHZhbHVlKTtcbiAgfVxufVxuXG5jb25zdCB0cmFuc2xhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge1xuICBlbjoge1xuICAgIEJZVEU6ICdCJyxcbiAgICBLQjogJ0tCJyxcbiAgICBNQjogJ01CJyxcbiAgICBHQjogJ0dCJyxcbiAgICBUQjogJ1RCJyxcbiAgfSxcbiAgJ2VuLVVTJzoge1xuICAgIC8vIFlvdSBjYW4gcHJvdmlkZSBzcGVjaWZpYyB2YXJpYXRpb25zIGZvciBlbi1VUyBpZiBuZWVkZWRcbiAgICBCWVRFOiAnQicsXG4gICAgS0I6ICdLQicsXG4gICAgTUI6ICdNQicsXG4gICAgR0I6ICdHQicsXG4gICAgVEI6ICdUQicsXG4gIH0sXG4gIGRlOiB7XG4gICAgQllURTogJ0InLFxuICAgIEtCOiAnS0InLFxuICAgIE1COiAnTUInLFxuICAgIEdCOiAnR0InLFxuICAgIFRCOiAnVEInLFxuICB9LFxuICBlczoge1xuICAgIEJZVEU6ICdCJyxcbiAgICBLQjogJ0tCJyxcbiAgICBNQjogJ01CJyxcbiAgICBHQjogJ0dCJyxcbiAgICBUQjogJ1RCJyxcbiAgfSxcbiAgZnI6IHtcbiAgICBCWVRFOiAnbycsXG4gICAgS0I6ICdLbycsXG4gICAgTUI6ICdNbycsXG4gICAgR0I6ICdHbycsXG4gICAgVEI6ICdUbycsXG4gIH0sXG4gIGl0OiB7XG4gICAgQllURTogJ0InLFxuICAgIEtCOiAnS0InLFxuICAgIE1COiAnTUInLFxuICAgIEdCOiAnR0InLFxuICAgIFRCOiAnVEInLFxuICB9LFxuICBqYToge1xuICAgIEJZVEU6ICdCJyxcbiAgICBLQjogJ0tCJyxcbiAgICBNQjogJ01CJyxcbiAgICBHQjogJ0dCJyxcbiAgICBUQjogJ1RCJyxcbiAgfSxcbiAga286IHtcbiAgICBCWVRFOiAnQicsXG4gICAgS0I6ICdLQicsXG4gICAgTUI6ICdNQicsXG4gICAgR0I6ICdHQicsXG4gICAgVEI6ICdUQicsXG4gIH0sXG4gICdwdC1CUic6IHtcbiAgICBCWVRFOiAnQicsXG4gICAgS0I6ICdLQicsXG4gICAgTUI6ICdNQicsXG4gICAgR0I6ICdHQicsXG4gICAgVEI6ICdUQicsXG4gIH0sXG4gICd6aC1DTic6IHtcbiAgICBCWVRFOiAn5a2X6IqCJyxcbiAgICBLQjogJ+WNg+Wtl+iKgicsXG4gICAgTUI6ICflhYblrZfoioInLFxuICAgIEdCOiAn5Y2D5YWG5a2X6IqCJyxcbiAgICBUQjogJ+WkquWtl+iKgicsXG4gIH0sXG4gICd6aC1UVyc6IHtcbiAgICBCWVRFOiAn5L2N5YWD57WEJyxcbiAgICBLQjogJ+WNg+S9jeWFg+e1hCcsXG4gICAgTUI6ICflhYbkvY3lhYPntYQnLFxuICAgIEdCOiAn5Y2D5YWG5L2N5YWD57WEJyxcbiAgICBUQjogJ+WkquS9jeWFg+e1hCcsXG4gIH0sXG4gIHJ1OiB7XG4gICAgQllURTogJ9CRJyxcbiAgICBLQjogJ9Ca0JEnLFxuICAgIE1COiAn0JzQkScsXG4gICAgR0I6ICfQk9CRJyxcbiAgICBUQjogJ9Ci0JEnLFxuICB9LFxufTtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export * from './array-join.pipe';
2
+ export * from './byte-converter.pipe';
3
+ export * from './is-https.pipe';
4
+ export * from './mask.pipe';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGlmdC9zcmMvbGliL3BpcGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hcnJheS1qb2luLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9ieXRlLWNvbnZlcnRlci5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vaXMtaHR0cHMucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL21hc2sucGlwZSc7XG4iXX0=
@@ -0,0 +1,18 @@
1
+ import { Pipe } from '@angular/core';
2
+ import { httpsPattern } from '../const';
3
+ import * as i0 from "@angular/core";
4
+ export class IsHttpsPipe {
5
+ transform(value) {
6
+ return httpsPattern.test(value);
7
+ }
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsHttpsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
9
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: IsHttpsPipe, isStandalone: true, name: "isHttps" }); }
10
+ }
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IsHttpsPipe, decorators: [{
12
+ type: Pipe,
13
+ args: [{
14
+ name: 'isHttps',
15
+ standalone: true,
16
+ }]
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtaHR0cHMucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvcGlwZXMvaXMtaHR0cHMucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sVUFBVSxDQUFDOztBQU10QyxNQUFNLE9BQU8sV0FBVztJQUN0QixTQUFTLENBQUMsS0FBYTtRQUNyQixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQzs4R0FIVSxXQUFXOzRHQUFYLFdBQVc7OzJGQUFYLFdBQVc7a0JBSnZCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFNBQVM7b0JBQ2YsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtodHRwc1BhdHRlcm59IGZyb20gJy4uL2NvbnN0JztcblxuQFBpcGUoe1xuICBuYW1lOiAnaXNIdHRwcycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIElzSHR0cHNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGh0dHBzUGF0dGVybi50ZXN0KHZhbHVlKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,36 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ const unmaskNumber = 6;
4
+ const maskChar = '*';
5
+ export class MaskPipe {
6
+ /**
7
+ * Transforms the input string by masking characters based on the provided options.
8
+ *
9
+ * @param {string} value - The input string to be masked.
10
+ * @param {MaskOptions} [options={}] - Options for customizing the masking behavior.
11
+ * @returns {string} - The masked string.
12
+ */
13
+ transform(value, options = {}) {
14
+ const { unmaskedPrefixLength = unmaskNumber, unmaskedSuffixLength = unmaskNumber, masked = true } = options;
15
+ if (value.length <= unmaskedPrefixLength + unmaskedSuffixLength ||
16
+ unmaskedPrefixLength < 0 ||
17
+ unmaskedSuffixLength < 0 ||
18
+ !masked) {
19
+ return value;
20
+ }
21
+ return value
22
+ .split('')
23
+ .map((char, i) => (i < unmaskedPrefixLength || i > value.length - unmaskedSuffixLength - 1 ? char : maskChar))
24
+ .join('');
25
+ }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MaskPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
27
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: MaskPipe, isStandalone: true, name: "mask" }); }
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MaskPipe, decorators: [{
30
+ type: Pipe,
31
+ args: [{
32
+ name: 'mask',
33
+ standalone: true,
34
+ }]
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpZnQvc3JjL2xpYi9waXBlcy9tYXNrLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBZ0IsTUFBTSxlQUFlLENBQUM7O0FBRWxELE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFZckIsTUFBTSxPQUFPLFFBQVE7SUFDbkI7Ozs7OztPQU1HO0lBQ0gsU0FBUyxDQUFDLEtBQWEsRUFBRSxVQUF1QixFQUFFO1FBQ2hELE1BQU0sRUFBQyxvQkFBb0IsR0FBRyxZQUFZLEVBQUUsb0JBQW9CLEdBQUcsWUFBWSxFQUFFLE1BQU0sR0FBRyxJQUFJLEVBQUMsR0FBRyxPQUFPLENBQUM7UUFFMUcsSUFDRSxLQUFLLENBQUMsTUFBTSxJQUFJLG9CQUFvQixHQUFHLG9CQUFvQjtZQUMzRCxvQkFBb0IsR0FBRyxDQUFDO1lBQ3hCLG9CQUFvQixHQUFHLENBQUM7WUFDeEIsQ0FBQyxNQUFNLEVBQ1A7WUFDQSxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsT0FBTyxLQUFLO2FBQ1QsS0FBSyxDQUFDLEVBQUUsQ0FBQzthQUNULEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLG9CQUFvQixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM3RyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZCxDQUFDOzhHQXhCVSxRQUFROzRHQUFSLFFBQVE7OzJGQUFSLFFBQVE7a0JBSnBCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLE1BQU07b0JBQ1osVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuY29uc3QgdW5tYXNrTnVtYmVyID0gNjtcbmNvbnN0IG1hc2tDaGFyID0gJyonO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hc2tPcHRpb25zIHtcbiAgdW5tYXNrZWRQcmVmaXhMZW5ndGg/OiBudW1iZXI7XG4gIHVubWFza2VkU3VmZml4TGVuZ3RoPzogbnVtYmVyO1xuICBtYXNrZWQ/OiBib29sZWFuO1xufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdtYXNrJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTWFza1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBieSBtYXNraW5nIGNoYXJhY3RlcnMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgbWFza2VkLlxuICAgKiBAcGFyYW0ge01hc2tPcHRpb25zfSBbb3B0aW9ucz17fV0gLSBPcHRpb25zIGZvciBjdXN0b21pemluZyB0aGUgbWFza2luZyBiZWhhdmlvci5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgbWFza2VkIHN0cmluZy5cbiAgICovXG4gIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nLCBvcHRpb25zOiBNYXNrT3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCB7dW5tYXNrZWRQcmVmaXhMZW5ndGggPSB1bm1hc2tOdW1iZXIsIHVubWFza2VkU3VmZml4TGVuZ3RoID0gdW5tYXNrTnVtYmVyLCBtYXNrZWQgPSB0cnVlfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAoXG4gICAgICB2YWx1ZS5sZW5ndGggPD0gdW5tYXNrZWRQcmVmaXhMZW5ndGggKyB1bm1hc2tlZFN1ZmZpeExlbmd0aCB8fFxuICAgICAgdW5tYXNrZWRQcmVmaXhMZW5ndGggPCAwIHx8XG4gICAgICB1bm1hc2tlZFN1ZmZpeExlbmd0aCA8IDAgfHxcbiAgICAgICFtYXNrZWRcbiAgICApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgICAgIC5zcGxpdCgnJylcbiAgICAgIC5tYXAoKGNoYXIsIGkpID0+IChpIDwgdW5tYXNrZWRQcmVmaXhMZW5ndGggfHwgaSA+IHZhbHVlLmxlbmd0aCAtIHVubWFza2VkU3VmZml4TGVuZ3RoIC0gMSA/IGNoYXIgOiBtYXNrQ2hhcikpXG4gICAgICAuam9pbignJyk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,56 @@
1
+ import { Validators } from '@angular/forms';
2
+ import { of } from 'rxjs';
3
+ /**
4
+ * Provides a conditional validator that applies the specified validator functions only if the condition is met.
5
+ *
6
+ * @param condition A function that determines whether the validators should be applied.
7
+ * @param trueValidatorFn The validator function or an array of validator functions to be applied when the condition is true.
8
+ * @param falseValidatorFn Optional. The validator function or an array of validator functions to be applied when the condition is false.
9
+ * @returns A validator function that can be used with Angular Reactive Forms.
10
+ */
11
+ export function ifValidator(condition, trueValidatorFn, falseValidatorFn) {
12
+ /**
13
+ * @param control The AbstractControl to validate.
14
+ * @returns Validation errors if the condition is met; otherwise, null.
15
+ */
16
+ return (control) => {
17
+ if (!trueValidatorFn || !condition(control)) {
18
+ return composeValidators(control, falseValidatorFn);
19
+ }
20
+ return composeValidators(control, trueValidatorFn);
21
+ };
22
+ }
23
+ /**
24
+ * Provides a conditional async validator that applies the specified async validator function only if the condition is met.
25
+ *
26
+ * @param condition A function that determines whether the async validator should be applied.
27
+ * @param validatorFn The async validator function to be applied conditionally.
28
+ * @returns An async validator function that can be used with Angular Reactive Forms.
29
+ */
30
+ export function ifAsyncValidator(condition, validatorFn) {
31
+ /**
32
+ * @param control The AbstractControl to validate asynchronously.
33
+ * @returns An observable that emits validation errors if the condition is met; otherwise, emits null.
34
+ */
35
+ return (control) => {
36
+ if (!validatorFn || !condition(control)) {
37
+ return of(null);
38
+ }
39
+ return validatorFn(control);
40
+ };
41
+ }
42
+ /**
43
+ * Composes and applies the provided validators to the given AbstractControl.
44
+ *
45
+ * @param control The AbstractControl to validate.
46
+ * @param validatorFn The validator function or an array of validator functions to be applied.
47
+ * @returns Validation errors if the validators are applicable; otherwise, null.
48
+ */
49
+ function composeValidators(control, validatorFn) {
50
+ if (!validatorFn) {
51
+ return null;
52
+ }
53
+ const validatorFns = Array.isArray(validatorFn) ? validatorFn : [validatorFn];
54
+ return Validators.compose(validatorFns)?.(control) || null;
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpZnQvc3JjL2xpYi91dGlscy9mb3JtLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpRCxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXhCOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixTQUFnRCxFQUNoRCxlQUE0QyxFQUM1QyxnQkFBOEM7SUFFOUM7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLE9BQXdCLEVBQXFCLEVBQUU7UUFDckQsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzQyxPQUFPLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsT0FBTyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDckQsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsU0FBZ0QsRUFDaEQsV0FBNkI7SUFFN0I7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLE9BQXdCLEVBQUUsRUFBRTtRQUNsQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pCO1FBRUQsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsaUJBQWlCLENBQ3hCLE9BQXdCLEVBQ3hCLFdBQW9EO0lBRXBELElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDaEIsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5RSxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtvZn0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogUHJvdmlkZXMgYSBjb25kaXRpb25hbCB2YWxpZGF0b3IgdGhhdCBhcHBsaWVzIHRoZSBzcGVjaWZpZWQgdmFsaWRhdG9yIGZ1bmN0aW9ucyBvbmx5IGlmIHRoZSBjb25kaXRpb24gaXMgbWV0LlxuICpcbiAqIEBwYXJhbSBjb25kaXRpb24gQSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgdmFsaWRhdG9ycyBzaG91bGQgYmUgYXBwbGllZC5cbiAqIEBwYXJhbSB0cnVlVmFsaWRhdG9yRm4gVGhlIHZhbGlkYXRvciBmdW5jdGlvbiBvciBhbiBhcnJheSBvZiB2YWxpZGF0b3IgZnVuY3Rpb25zIHRvIGJlIGFwcGxpZWQgd2hlbiB0aGUgY29uZGl0aW9uIGlzIHRydWUuXG4gKiBAcGFyYW0gZmFsc2VWYWxpZGF0b3JGbiBPcHRpb25hbC4gVGhlIHZhbGlkYXRvciBmdW5jdGlvbiBvciBhbiBhcnJheSBvZiB2YWxpZGF0b3IgZnVuY3Rpb25zIHRvIGJlIGFwcGxpZWQgd2hlbiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLlxuICogQHJldHVybnMgQSB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB3aXRoIEFuZ3VsYXIgUmVhY3RpdmUgRm9ybXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZlZhbGlkYXRvcihcbiAgY29uZGl0aW9uOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuLFxuICB0cnVlVmFsaWRhdG9yRm46IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSxcbiAgZmFsc2VWYWxpZGF0b3JGbj86IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSxcbik6IFZhbGlkYXRvckZuIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBjb250cm9sIFRoZSBBYnN0cmFjdENvbnRyb2wgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIFZhbGlkYXRpb24gZXJyb3JzIGlmIHRoZSBjb25kaXRpb24gaXMgbWV0OyBvdGhlcndpc2UsIG51bGwuXG4gICAqL1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoIXRydWVWYWxpZGF0b3JGbiB8fCAhY29uZGl0aW9uKGNvbnRyb2wpKSB7XG4gICAgICByZXR1cm4gY29tcG9zZVZhbGlkYXRvcnMoY29udHJvbCwgZmFsc2VWYWxpZGF0b3JGbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvc2VWYWxpZGF0b3JzKGNvbnRyb2wsIHRydWVWYWxpZGF0b3JGbik7XG4gIH07XG59XG5cbi8qKlxuICogUHJvdmlkZXMgYSBjb25kaXRpb25hbCBhc3luYyB2YWxpZGF0b3IgdGhhdCBhcHBsaWVzIHRoZSBzcGVjaWZpZWQgYXN5bmMgdmFsaWRhdG9yIGZ1bmN0aW9uIG9ubHkgaWYgdGhlIGNvbmRpdGlvbiBpcyBtZXQuXG4gKlxuICogQHBhcmFtIGNvbmRpdGlvbiBBIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhc3luYyB2YWxpZGF0b3Igc2hvdWxkIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gdmFsaWRhdG9yRm4gVGhlIGFzeW5jIHZhbGlkYXRvciBmdW5jdGlvbiB0byBiZSBhcHBsaWVkIGNvbmRpdGlvbmFsbHkuXG4gKiBAcmV0dXJucyBBbiBhc3luYyB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB3aXRoIEFuZ3VsYXIgUmVhY3RpdmUgRm9ybXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZkFzeW5jVmFsaWRhdG9yKFxuICBjb25kaXRpb246IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IGJvb2xlYW4sXG4gIHZhbGlkYXRvckZuOiBBc3luY1ZhbGlkYXRvckZuLFxuKTogQXN5bmNWYWxpZGF0b3JGbiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gY29udHJvbCBUaGUgQWJzdHJhY3RDb250cm9sIHRvIHZhbGlkYXRlIGFzeW5jaHJvbm91c2x5LlxuICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdmFsaWRhdGlvbiBlcnJvcnMgaWYgdGhlIGNvbmRpdGlvbiBpcyBtZXQ7IG90aGVyd2lzZSwgZW1pdHMgbnVsbC5cbiAgICovXG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgaWYgKCF2YWxpZGF0b3JGbiB8fCAhY29uZGl0aW9uKGNvbnRyb2wpKSB7XG4gICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvckZuKGNvbnRyb2wpO1xuICB9O1xufVxuXG4vKipcbiAqIENvbXBvc2VzIGFuZCBhcHBsaWVzIHRoZSBwcm92aWRlZCB2YWxpZGF0b3JzIHRvIHRoZSBnaXZlbiBBYnN0cmFjdENvbnRyb2wuXG4gKlxuICogQHBhcmFtIGNvbnRyb2wgVGhlIEFic3RyYWN0Q29udHJvbCB0byB2YWxpZGF0ZS5cbiAqIEBwYXJhbSB2YWxpZGF0b3JGbiBUaGUgdmFsaWRhdG9yIGZ1bmN0aW9uIG9yIGFuIGFycmF5IG9mIHZhbGlkYXRvciBmdW5jdGlvbnMgdG8gYmUgYXBwbGllZC5cbiAqIEByZXR1cm5zIFZhbGlkYXRpb24gZXJyb3JzIGlmIHRoZSB2YWxpZGF0b3JzIGFyZSBhcHBsaWNhYmxlOyBvdGhlcndpc2UsIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VWYWxpZGF0b3JzKFxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gIHZhbGlkYXRvckZuOiBWYWxpZGF0b3JGbiB8IFZhbGlkYXRvckZuW10gfCB1bmRlZmluZWQsXG4pOiBWYWxpZGF0b3JzIHwgbnVsbCB7XG4gIGlmICghdmFsaWRhdG9yRm4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHZhbGlkYXRvckZucyA9IEFycmF5LmlzQXJyYXkodmFsaWRhdG9yRm4pID8gdmFsaWRhdG9yRm4gOiBbdmFsaWRhdG9yRm5dO1xuICByZXR1cm4gVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvckZucyk/Lihjb250cm9sKSB8fCBudWxsO1xufVxuIl19
@@ -0,0 +1,5 @@
1
+ export * from './form.util';
2
+ export * from './is-empty.util';
3
+ export * from './is-equal.util';
4
+ export * from './pick-by.util';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGlmdC9zcmMvbGliL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9mb3JtLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9pcy1lbXB0eS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vaXMtZXF1YWwudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3BpY2stYnkudXRpbCc7XG4iXX0=
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Check if a value is empty.
3
+ * @param {T | undefined | null} value - The value to check for emptiness.
4
+ * @returns {boolean} - Returns true if the value is empty, otherwise false.
5
+ */
6
+ export function isEmpty(value) {
7
+ if (value == null)
8
+ return true;
9
+ if (typeof value === 'string' || Array.isArray(value)) {
10
+ return value.length === 0;
11
+ }
12
+ if (typeof value === 'object') {
13
+ return Object.keys(value).length === 0;
14
+ }
15
+ return false;
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZW1wdHkudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvdXRpbHMvaXMtZW1wdHkudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBNkMsS0FBMkI7SUFDN0YsSUFBSSxLQUFLLElBQUksSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRS9CLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDckQsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztLQUMzQjtJQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzdCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFnQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztLQUNuRTtJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBlbXB0eS5cbiAqIEBwYXJhbSB7VCB8IHVuZGVmaW5lZCB8IG51bGx9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrIGZvciBlbXB0aW5lc3MuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGlzIGVtcHR5LCBvdGhlcndpc2UgZmFsc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5PFQgZXh0ZW5kcyBvYmplY3QgfCBzdHJpbmcgfCBBcnJheTx1bmtub3duPj4odmFsdWU6IFQgfCB1bmRlZmluZWQgfCBudWxsKTogdmFsdWUgaXMgbnVsbCB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPT09IDA7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl19
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Check if two values are deeply equal.
3
+ * @param {T} value1 - The first value to compare.
4
+ * @param {T} value2 - The second value to compare.
5
+ * @returns {boolean} - Returns true if the values are deeply equal, otherwise false.
6
+ */
7
+ export function isEqual(value1, value2) {
8
+ if (value1 === value2)
9
+ return true;
10
+ if (typeof value1 !== 'object' || typeof value2 !== 'object' || value1 === null || value2 === null) {
11
+ return false;
12
+ }
13
+ const keys1 = Object.keys(value1);
14
+ const keys2 = Object.keys(value2);
15
+ if (keys1.length !== keys2.length)
16
+ return false;
17
+ for (const key of keys1) {
18
+ if (!keys2.includes(key) || !isEqual(value1[key], value2[key])) {
19
+ return false;
20
+ }
21
+ }
22
+ return true;
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZXF1YWwudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvdXRpbHMvaXMtZXF1YWwudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUksTUFBUyxFQUFFLE1BQVM7SUFDN0MsSUFBSSxNQUFNLEtBQUssTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRW5DLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7UUFDbEcsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFtQixDQUFDO0lBQ3BELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFtQixDQUFDO0lBRXBELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRWhELEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUM5RCxPQUFPLEtBQUssQ0FBQztTQUNkO0tBQ0Y7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrIGlmIHR3byB2YWx1ZXMgYXJlIGRlZXBseSBlcXVhbC5cbiAqIEBwYXJhbSB7VH0gdmFsdWUxIC0gVGhlIGZpcnN0IHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge1R9IHZhbHVlMiAtIFRoZSBzZWNvbmQgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSBkZWVwbHkgZXF1YWwsIG90aGVyd2lzZSBmYWxzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXF1YWw8VD4odmFsdWUxOiBULCB2YWx1ZTI6IFQpOiBib29sZWFuIHtcbiAgaWYgKHZhbHVlMSA9PT0gdmFsdWUyKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAodHlwZW9mIHZhbHVlMSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlMiAhPT0gJ29iamVjdCcgfHwgdmFsdWUxID09PSBudWxsIHx8IHZhbHVlMiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGtleXMxID0gT2JqZWN0LmtleXModmFsdWUxKSBhcyBBcnJheTxrZXlvZiBUPjtcbiAgY29uc3Qga2V5czIgPSBPYmplY3Qua2V5cyh2YWx1ZTIpIGFzIEFycmF5PGtleW9mIFQ+O1xuXG4gIGlmIChrZXlzMS5sZW5ndGggIT09IGtleXMyLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMxKSB7XG4gICAgaWYgKCFrZXlzMi5pbmNsdWRlcyhrZXkpIHx8ICFpc0VxdWFsKHZhbHVlMVtrZXldLCB2YWx1ZTJba2V5XSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Create an object composed of object properties that satisfy a given condition.
3
+ * @param {T} source - The object to pick properties from.
4
+ * @param {(value: T[keyof T], key: string) => boolean} predicate - The function invoked per property.
5
+ * @returns {Partial<T>} - Returns the new object.
6
+ */
7
+ export function pickBy(source, predicate) {
8
+ const result = {};
9
+ for (const key in source) {
10
+ if (Object.prototype.hasOwnProperty.call(source, key) && predicate(source[key], key)) {
11
+ result[key] = source[key];
12
+ }
13
+ }
14
+ return result;
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGljay1ieS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpZnQvc3JjL2xpYi91dGlscy9waWNrLWJ5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFJLE1BQVMsRUFBRSxTQUFzRDtJQUN6RixNQUFNLE1BQU0sR0FBZSxFQUFFLENBQUM7SUFFOUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUU7UUFDeEIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDcEYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzQjtLQUNGO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCBjb21wb3NlZCBvZiBvYmplY3QgcHJvcGVydGllcyB0aGF0IHNhdGlzZnkgYSBnaXZlbiBjb25kaXRpb24uXG4gKiBAcGFyYW0ge1R9IHNvdXJjZSAtIFRoZSBvYmplY3QgdG8gcGljayBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0geyh2YWx1ZTogVFtrZXlvZiBUXSwga2V5OiBzdHJpbmcpID0+IGJvb2xlYW59IHByZWRpY2F0ZSAtIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIHtQYXJ0aWFsPFQ+fSAtIFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaWNrQnk8VD4oc291cmNlOiBULCBwcmVkaWNhdGU6ICh2YWx1ZTogVFtrZXlvZiBUXSwga2V5OiBzdHJpbmcpID0+IGJvb2xlYW4pOiBQYXJ0aWFsPFQ+IHtcbiAgY29uc3QgcmVzdWx0OiBQYXJ0aWFsPFQ+ID0ge307XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkgJiYgcHJlZGljYXRlKHNvdXJjZVtrZXldLCBrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export * from './unique.validator';
2
+ export * from './url.validator';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGlmdC9zcmMvbGliL3ZhbGlkYXRvcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi91bmlxdWUudmFsaWRhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vdXJsLnZhbGlkYXRvcic7XG4iXX0=
@@ -0,0 +1,64 @@
1
+ import { FormArray } from '@angular/forms';
2
+ /**
3
+ * Validator for checking uniqueness across multiple fields in a FormArray or FormGroup.
4
+ *
5
+ * This validator can be applied to a FormArray or FormGroup containing the controls to be validated.
6
+ * It ensures that each control's value is unique among all other controls within the array or group.
7
+ */
8
+ export class UniqueValidator {
9
+ /**
10
+ * Validator function to be attached to a FormArray or FormGroup.
11
+ *
12
+ * This validator checks for uniqueness of each control's value within the array or group.
13
+ *
14
+ * @param keySelector A function to select the key control for comparison (default is the control itself).
15
+ * @typeparam T The type of the control value.
16
+ */
17
+ static unique(keySelector = (control) => control) {
18
+ return (formArray) => {
19
+ if (!(formArray instanceof FormArray)) {
20
+ return null;
21
+ }
22
+ const targetControls = formArray.controls.map(keySelector);
23
+ const valueControlMap = new Map();
24
+ const invalidControls = [];
25
+ for (const control of targetControls) {
26
+ const value = control.value;
27
+ if (value == null || String(value) === '' || String(value) === 'NaN') {
28
+ continue;
29
+ }
30
+ const controlInMap = valueControlMap.get(value);
31
+ if (controlInMap) {
32
+ if (!invalidControls.includes(controlInMap)) {
33
+ invalidControls.push(controlInMap);
34
+ }
35
+ invalidControls.push(control);
36
+ }
37
+ else {
38
+ valueControlMap.set(value, control);
39
+ }
40
+ }
41
+ const notUniqueError = { notUnique: true };
42
+ // set errors manually for target controls
43
+ for (const control of targetControls) {
44
+ const errors = control.errors;
45
+ if (invalidControls.includes(control)) {
46
+ // set not unique error for invalid controls
47
+ control.setErrors(errors === null ? notUniqueError : { ...errors, ...notUniqueError });
48
+ }
49
+ else {
50
+ // remove not unique errors for valid controls
51
+ if (errors === null) {
52
+ control.setErrors(null);
53
+ }
54
+ else {
55
+ delete errors['notUnique'];
56
+ control.setErrors(Object.keys(errors).length > 0 ? errors : null);
57
+ }
58
+ }
59
+ }
60
+ return invalidControls.length > 0 ? notUniqueError : null;
61
+ };
62
+ }
63
+ }
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvdmFsaWRhdG9ycy91bmlxdWUudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0IsU0FBUyxFQUFnQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpGOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDMUI7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQ1gsY0FBZ0UsQ0FBQyxPQUEyQixFQUFFLEVBQUUsQ0FBQyxPQUFPO1FBRXhHLE9BQU8sQ0FBQyxTQUEwQixFQUEyQixFQUFFO1lBQzdELElBQUksQ0FBQyxDQUFDLFNBQVMsWUFBWSxTQUFTLENBQUMsRUFBRTtnQkFDckMsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO1lBQ3pELE1BQU0sZUFBZSxHQUF5QixFQUFFLENBQUM7WUFFakQsS0FBSyxNQUFNLE9BQU8sSUFBSSxjQUFjLEVBQUU7Z0JBQ3BDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBRTVCLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLEVBQUU7b0JBQ3BFLFNBQVM7aUJBQ1Y7Z0JBRUQsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFaEQsSUFBSSxZQUFZLEVBQUU7b0JBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO3dCQUMzQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO3FCQUNwQztvQkFFRCxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUMvQjtxQkFBTTtvQkFDTCxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztpQkFDckM7YUFDRjtZQUVELE1BQU0sY0FBYyxHQUFHLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDO1lBRXpDLDBDQUEwQztZQUMxQyxLQUFLLE1BQU0sT0FBTyxJQUFJLGNBQWMsRUFBRTtnQkFDcEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFFOUIsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNyQyw0Q0FBNEM7b0JBQzVDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsY0FBYyxFQUFDLENBQUMsQ0FBQztpQkFDdEY7cUJBQU07b0JBQ0wsOENBQThDO29CQUM5QyxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7d0JBQ25CLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3pCO3lCQUFNO3dCQUNMLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUMzQixPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDbkU7aUJBQ0Y7YUFDRjtZQUVELE9BQU8sZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzVELENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8qKlxuICogVmFsaWRhdG9yIGZvciBjaGVja2luZyB1bmlxdWVuZXNzIGFjcm9zcyBtdWx0aXBsZSBmaWVsZHMgaW4gYSBGb3JtQXJyYXkgb3IgRm9ybUdyb3VwLlxuICpcbiAqIFRoaXMgdmFsaWRhdG9yIGNhbiBiZSBhcHBsaWVkIHRvIGEgRm9ybUFycmF5IG9yIEZvcm1Hcm91cCBjb250YWluaW5nIHRoZSBjb250cm9scyB0byBiZSB2YWxpZGF0ZWQuXG4gKiBJdCBlbnN1cmVzIHRoYXQgZWFjaCBjb250cm9sJ3MgdmFsdWUgaXMgdW5pcXVlIGFtb25nIGFsbCBvdGhlciBjb250cm9scyB3aXRoaW4gdGhlIGFycmF5IG9yIGdyb3VwLlxuICovXG5leHBvcnQgY2xhc3MgVW5pcXVlVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIFZhbGlkYXRvciBmdW5jdGlvbiB0byBiZSBhdHRhY2hlZCB0byBhIEZvcm1BcnJheSBvciBGb3JtR3JvdXAuXG4gICAqXG4gICAqIFRoaXMgdmFsaWRhdG9yIGNoZWNrcyBmb3IgdW5pcXVlbmVzcyBvZiBlYWNoIGNvbnRyb2wncyB2YWx1ZSB3aXRoaW4gdGhlIGFycmF5IG9yIGdyb3VwLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5U2VsZWN0b3IgQSBmdW5jdGlvbiB0byBzZWxlY3QgdGhlIGtleSBjb250cm9sIGZvciBjb21wYXJpc29uIChkZWZhdWx0IGlzIHRoZSBjb250cm9sIGl0c2VsZikuXG4gICAqIEB0eXBlcGFyYW0gVCBUaGUgdHlwZSBvZiB0aGUgY29udHJvbCB2YWx1ZS5cbiAgICovXG4gIHN0YXRpYyB1bmlxdWU8VD4oXG4gICAga2V5U2VsZWN0b3I6IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IEFic3RyYWN0Q29udHJvbDxUPiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2w8VD4pID0+IGNvbnRyb2wsXG4gICk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGZvcm1BcnJheTogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgaWYgKCEoZm9ybUFycmF5IGluc3RhbmNlb2YgRm9ybUFycmF5KSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0Q29udHJvbHMgPSBmb3JtQXJyYXkuY29udHJvbHMubWFwKGtleVNlbGVjdG9yKTtcbiAgICAgIGNvbnN0IHZhbHVlQ29udHJvbE1hcCA9IG5ldyBNYXA8VCwgQWJzdHJhY3RDb250cm9sPFQ+PigpO1xuICAgICAgY29uc3QgaW52YWxpZENvbnRyb2xzOiBBYnN0cmFjdENvbnRyb2w8VD5bXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGFyZ2V0Q29udHJvbHMpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IFN0cmluZyh2YWx1ZSkgPT09ICcnIHx8IFN0cmluZyh2YWx1ZSkgPT09ICdOYU4nKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250cm9sSW5NYXAgPSB2YWx1ZUNvbnRyb2xNYXAuZ2V0KHZhbHVlKTtcblxuICAgICAgICBpZiAoY29udHJvbEluTWFwKSB7XG4gICAgICAgICAgaWYgKCFpbnZhbGlkQ29udHJvbHMuaW5jbHVkZXMoY29udHJvbEluTWFwKSkge1xuICAgICAgICAgICAgaW52YWxpZENvbnRyb2xzLnB1c2goY29udHJvbEluTWFwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbnZhbGlkQ29udHJvbHMucHVzaChjb250cm9sKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZUNvbnRyb2xNYXAuc2V0KHZhbHVlLCBjb250cm9sKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBub3RVbmlxdWVFcnJvciA9IHtub3RVbmlxdWU6IHRydWV9O1xuXG4gICAgICAvLyBzZXQgZXJyb3JzIG1hbnVhbGx5IGZvciB0YXJnZXQgY29udHJvbHNcbiAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0YXJnZXRDb250cm9scykge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBjb250cm9sLmVycm9ycztcblxuICAgICAgICBpZiAoaW52YWxpZENvbnRyb2xzLmluY2x1ZGVzKGNvbnRyb2wpKSB7XG4gICAgICAgICAgLy8gc2V0IG5vdCB1bmlxdWUgZXJyb3IgZm9yIGludmFsaWQgY29udHJvbHNcbiAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcnMgPT09IG51bGwgPyBub3RVbmlxdWVFcnJvciA6IHsuLi5lcnJvcnMsIC4uLm5vdFVuaXF1ZUVycm9yfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIG5vdCB1bmlxdWUgZXJyb3JzIGZvciB2YWxpZCBjb250cm9sc1xuICAgICAgICAgIGlmIChlcnJvcnMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgZXJyb3JzWydub3RVbmlxdWUnXTtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID4gMCA/IGVycm9ycyA6IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW52YWxpZENvbnRyb2xzLmxlbmd0aCA+IDAgPyBub3RVbmlxdWVFcnJvciA6IG51bGw7XG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,14 @@
1
+ import { httpsPattern, urlPattern } from '../const';
2
+ export function urlValidator(control) {
3
+ if (!urlPattern.test(control.value)) {
4
+ return { invalidUrl: true };
5
+ }
6
+ return null;
7
+ }
8
+ export function httpsValidator(control) {
9
+ if (!httpsPattern.test(control.value)) {
10
+ return { invalidUrl: true };
11
+ }
12
+ return null;
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9saWIvdmFsaWRhdG9ycy91cmwudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRWxELE1BQU0sVUFBVSxZQUFZLENBQUMsT0FBd0I7SUFDbkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ25DLE9BQU8sRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUM7S0FDM0I7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLE9BQXdCO0lBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNyQyxPQUFPLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDO0tBQzNCO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtodHRwc1BhdHRlcm4sIHVybFBhdHRlcm59IGZyb20gJy4uL2NvbnN0JztcblxuZXhwb3J0IGZ1bmN0aW9uIHVybFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gIGlmICghdXJsUGF0dGVybi50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgcmV0dXJuIHtpbnZhbGlkVXJsOiB0cnVlfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh0dHBzVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgaWYgKCFodHRwc1BhdHRlcm4udGVzdChjb250cm9sLnZhbHVlKSkge1xuICAgIHJldHVybiB7aW52YWxpZFVybDogdHJ1ZX07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWxpZnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGlmdC9zcmMvbmd4LWxpZnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,10 @@
1
+ /*
2
+ * Public API Surface of ngx-lift
3
+ */
4
+ export * from './lib/models';
5
+ export * from './lib/operators';
6
+ export * from './lib/pipes';
7
+ export * from './lib/utils';
8
+ export * from './lib/validators';
9
+ // export * from './lib/signals';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1saWZ0L3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGlDQUFpQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmd4LWxpZnRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvb3BlcmF0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZhbGlkYXRvcnMnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvc2lnbmFscyc7XG4iXX0=