cmat 0.0.82 → 0.0.84

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 (160) hide show
  1. package/fesm2022/cmat-components-adapter.mjs +19 -13
  2. package/fesm2022/cmat-components-adapter.mjs.map +1 -1
  3. package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
  4. package/fesm2022/cmat-components-card.mjs.map +1 -1
  5. package/fesm2022/cmat-components-carousel.mjs +20 -20
  6. package/fesm2022/cmat-components-carousel.mjs.map +1 -1
  7. package/fesm2022/cmat-components-cascade.mjs +7 -5
  8. package/fesm2022/cmat-components-cascade.mjs.map +1 -1
  9. package/fesm2022/cmat-components-chip-input.mjs.map +1 -1
  10. package/fesm2022/cmat-components-code-editor.mjs +3 -2
  11. package/fesm2022/cmat-components-code-editor.mjs.map +1 -1
  12. package/fesm2022/cmat-components-custom-formly.mjs +228 -108
  13. package/fesm2022/cmat-components-custom-formly.mjs.map +1 -1
  14. package/fesm2022/cmat-components-date-range.mjs +20 -11
  15. package/fesm2022/cmat-components-date-range.mjs.map +1 -1
  16. package/fesm2022/cmat-components-date-time-display.mjs.map +1 -1
  17. package/fesm2022/cmat-components-drawer.mjs +0 -2
  18. package/fesm2022/cmat-components-drawer.mjs.map +1 -1
  19. package/fesm2022/cmat-components-empty-state.mjs.map +1 -1
  20. package/fesm2022/cmat-components-file-preview.mjs.map +1 -1
  21. package/fesm2022/cmat-components-filter-toolbar.mjs.map +1 -1
  22. package/fesm2022/cmat-components-form-actions.mjs.map +1 -1
  23. package/fesm2022/cmat-components-fullscreen.mjs +1 -1
  24. package/fesm2022/cmat-components-fullscreen.mjs.map +1 -1
  25. package/fesm2022/cmat-components-highlight.mjs +1 -1
  26. package/fesm2022/cmat-components-highlight.mjs.map +1 -1
  27. package/fesm2022/cmat-components-image-viewer.mjs +29 -11
  28. package/fesm2022/cmat-components-image-viewer.mjs.map +1 -1
  29. package/fesm2022/cmat-components-inline-loading.mjs.map +1 -1
  30. package/fesm2022/cmat-components-json-editor.mjs +16 -26
  31. package/fesm2022/cmat-components-json-editor.mjs.map +1 -1
  32. package/fesm2022/cmat-components-knob-input.mjs +8 -7
  33. package/fesm2022/cmat-components-knob-input.mjs.map +1 -1
  34. package/fesm2022/cmat-components-masonry.mjs.map +1 -1
  35. package/fesm2022/cmat-components-material-color-picker.mjs +3 -3
  36. package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
  37. package/fesm2022/cmat-components-material-datetimepicker.mjs +28 -16
  38. package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
  39. package/fesm2022/cmat-components-navigation.mjs +1 -0
  40. package/fesm2022/cmat-components-navigation.mjs.map +1 -1
  41. package/fesm2022/cmat-components-opt-input.mjs +2 -2
  42. package/fesm2022/cmat-components-opt-input.mjs.map +1 -1
  43. package/fesm2022/cmat-components-org-chart.mjs.map +1 -1
  44. package/fesm2022/cmat-components-page-header.mjs.map +1 -1
  45. package/fesm2022/cmat-components-password-strength.mjs +8 -5
  46. package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
  47. package/fesm2022/cmat-components-popover.mjs +2 -2
  48. package/fesm2022/cmat-components-popover.mjs.map +1 -1
  49. package/fesm2022/cmat-components-qrcode.mjs +9 -2
  50. package/fesm2022/cmat-components-qrcode.mjs.map +1 -1
  51. package/fesm2022/cmat-components-rating.mjs +1 -1
  52. package/fesm2022/cmat-components-rating.mjs.map +1 -1
  53. package/fesm2022/cmat-components-rich-text-editor.mjs.map +1 -1
  54. package/fesm2022/cmat-components-select-search.mjs +25 -24
  55. package/fesm2022/cmat-components-select-search.mjs.map +1 -1
  56. package/fesm2022/cmat-components-select-table.mjs +42 -15
  57. package/fesm2022/cmat-components-select-table.mjs.map +1 -1
  58. package/fesm2022/cmat-components-select-tree.mjs +3 -1
  59. package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
  60. package/fesm2022/cmat-components-skeleton.mjs.map +1 -1
  61. package/fesm2022/cmat-components-speed-dial.mjs +24 -5
  62. package/fesm2022/cmat-components-speed-dial.mjs.map +1 -1
  63. package/fesm2022/cmat-components-status-tag.mjs.map +1 -1
  64. package/fesm2022/cmat-components-table-toolbar.mjs.map +1 -1
  65. package/fesm2022/cmat-components-timeline.mjs.map +1 -1
  66. package/fesm2022/cmat-components-toast.mjs +20 -13
  67. package/fesm2022/cmat-components-toast.mjs.map +1 -1
  68. package/fesm2022/cmat-components-transfer-picker.mjs +11 -6
  69. package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
  70. package/fesm2022/cmat-components-treetable.mjs +4 -3
  71. package/fesm2022/cmat-components-treetable.mjs.map +1 -1
  72. package/fesm2022/cmat-components-upload.mjs +29 -15
  73. package/fesm2022/cmat-components-upload.mjs.map +1 -1
  74. package/fesm2022/cmat-components-x6-angular-shape.mjs +2 -2
  75. package/fesm2022/cmat-components-x6-angular-shape.mjs.map +1 -1
  76. package/fesm2022/cmat-directives-animate-on-scroll.mjs.map +1 -1
  77. package/fesm2022/cmat-directives-autofocus.mjs.map +1 -1
  78. package/fesm2022/cmat-directives-data-exporter.mjs +1 -1
  79. package/fesm2022/cmat-directives-data-exporter.mjs.map +1 -1
  80. package/fesm2022/cmat-directives-debounce.mjs.map +1 -1
  81. package/fesm2022/cmat-directives-digit-only.mjs +12 -18
  82. package/fesm2022/cmat-directives-digit-only.mjs.map +1 -1
  83. package/fesm2022/cmat-directives-seamless-auto-scroll.mjs +3 -2
  84. package/fesm2022/cmat-directives-seamless-auto-scroll.mjs.map +1 -1
  85. package/fesm2022/cmat-lib-mock-api.mjs +7 -7
  86. package/fesm2022/cmat-lib-mock-api.mjs.map +1 -1
  87. package/fesm2022/cmat-pipes-find-by-key.mjs +1 -1
  88. package/fesm2022/cmat-pipes-find-by-key.mjs.map +1 -1
  89. package/fesm2022/cmat-pipes-group-by.mjs +9 -5
  90. package/fesm2022/cmat-pipes-group-by.mjs.map +1 -1
  91. package/fesm2022/cmat-pipes-keys.mjs.map +1 -1
  92. package/fesm2022/cmat-pipes-secure.mjs +9 -1
  93. package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
  94. package/fesm2022/cmat-services-alert.mjs +16 -7
  95. package/fesm2022/cmat-services-alert.mjs.map +1 -1
  96. package/fesm2022/cmat-services-data.mjs.map +1 -1
  97. package/fesm2022/cmat-services-export-as.mjs +11 -10
  98. package/fesm2022/cmat-services-export-as.mjs.map +1 -1
  99. package/fesm2022/cmat-services-local-storage.mjs +42 -4
  100. package/fesm2022/cmat-services-local-storage.mjs.map +1 -1
  101. package/fesm2022/cmat-services-title.mjs +2 -2
  102. package/fesm2022/cmat-services-title.mjs.map +1 -1
  103. package/fesm2022/cmat-services-translation.mjs.map +1 -1
  104. package/fesm2022/cmat-services-utils.mjs +78 -57
  105. package/fesm2022/cmat-services-utils.mjs.map +1 -1
  106. package/fesm2022/cmat-validators.mjs +4 -1
  107. package/fesm2022/cmat-validators.mjs.map +1 -1
  108. package/fesm2022/cmat.mjs +746 -426
  109. package/fesm2022/cmat.mjs.map +1 -1
  110. package/package.json +1 -1
  111. package/types/cmat-components-adapter.d.ts +24 -24
  112. package/types/cmat-components-breadcrumb.d.ts +1 -1
  113. package/types/cmat-components-card.d.ts +1 -1
  114. package/types/cmat-components-carousel.d.ts +23 -23
  115. package/types/cmat-components-cascade.d.ts +12 -12
  116. package/types/cmat-components-chip-input.d.ts +8 -8
  117. package/types/cmat-components-code-editor.d.ts +2 -2
  118. package/types/cmat-components-custom-formly.d.ts +121 -44
  119. package/types/cmat-components-date-range.d.ts +31 -16
  120. package/types/cmat-components-drawer.d.ts +2 -3
  121. package/types/cmat-components-file-preview.d.ts +1 -1
  122. package/types/cmat-components-image-viewer.d.ts +5 -3
  123. package/types/cmat-components-json-editor.d.ts +7 -9
  124. package/types/cmat-components-knob-input.d.ts +3 -3
  125. package/types/cmat-components-masonry.d.ts +3 -3
  126. package/types/cmat-components-material-color-picker.d.ts +13 -9
  127. package/types/cmat-components-material-datetimepicker.d.ts +26 -10
  128. package/types/cmat-components-navigation.d.ts +1 -1
  129. package/types/cmat-components-opt-input.d.ts +8 -8
  130. package/types/cmat-components-popover.d.ts +1 -1
  131. package/types/cmat-components-qrcode.d.ts +2 -1
  132. package/types/cmat-components-rating.d.ts +13 -13
  133. package/types/cmat-components-select-search.d.ts +5 -5
  134. package/types/cmat-components-select-table.d.ts +12 -8
  135. package/types/cmat-components-select-tree.d.ts +1 -1
  136. package/types/cmat-components-speed-dial.d.ts +3 -0
  137. package/types/cmat-components-timeline.d.ts +2 -2
  138. package/types/cmat-components-toast.d.ts +2 -2
  139. package/types/cmat-components-transfer-picker.d.ts +5 -4
  140. package/types/cmat-components-treetable.d.ts +2 -2
  141. package/types/cmat-components-upload.d.ts +36 -29
  142. package/types/cmat-components-x6-angular-shape.d.ts +1 -1
  143. package/types/cmat-directives-autofocus.d.ts +1 -1
  144. package/types/cmat-directives-data-exporter.d.ts +3 -2
  145. package/types/cmat-directives-debounce.d.ts +5 -5
  146. package/types/cmat-directives-digit-only.d.ts +7 -7
  147. package/types/cmat-directives-seamless-auto-scroll.d.ts +2 -2
  148. package/types/cmat-lib-mock-api.d.ts +1 -1
  149. package/types/cmat-pipes-find-by-key.d.ts +2 -1
  150. package/types/cmat-pipes-group-by.d.ts +7 -1
  151. package/types/cmat-pipes-keys.d.ts +4 -1
  152. package/types/cmat-pipes-secure.d.ts +1 -0
  153. package/types/cmat-services-alert.d.ts +14 -13
  154. package/types/cmat-services-data.d.ts +3 -3
  155. package/types/cmat-services-export-as.d.ts +4 -3
  156. package/types/cmat-services-local-storage.d.ts +14 -2
  157. package/types/cmat-services-translation.d.ts +3 -3
  158. package/types/cmat-services-utils.d.ts +31 -15
  159. package/types/cmat-validators.d.ts +1 -1
  160. package/types/cmat.d.ts +465 -303
@@ -1,6 +1,6 @@
1
1
  import { HttpHeaders, HttpResponseBase, HttpResponse, HttpErrorResponse } from '@angular/common/http';
2
2
  import * as i0 from '@angular/core';
3
- import { Injectable } from '@angular/core';
3
+ import { InjectionToken, Injectable } from '@angular/core';
4
4
  import { CMAT_VERSION } from 'cmat/version';
5
5
  import AES from 'crypto-js/aes';
6
6
  import CryptoJSCore from 'crypto-js/core';
@@ -12,14 +12,34 @@ import dayjs from 'dayjs';
12
12
  import { isUndefined } from 'lodash-es';
13
13
  import { throwError } from 'rxjs';
14
14
 
15
+ const CMAT_CRYPTO_CONFIG = new InjectionToken('CMAT_CRYPTO_CONFIG', {
16
+ factory: () => ({
17
+ key: '14789632236987411478963223698741',
18
+ iv: '1478963223698741',
19
+ specialParam: 'partymanageApi'
20
+ })
21
+ });
22
+ function initializeCmatUtilsConfig(config) {
23
+ CmatUtilsService.setCryptoConfig(config);
24
+ }
15
25
  class CmatUtilsService {
16
26
  static { this.captionAndMessageSeparator = ':'; }
17
27
  static { this.noNetworkMessageCaption = '无网络'; }
18
28
  static { this.noNetworkMessageDetail = '无法连接服务器'; }
19
29
  static { this.accessDeniedMessageCaption = '拒绝访问!'; }
20
30
  static { this.accessDeniedMessageDetail = ''; }
21
- static { this.key = UTF8.parse('14789632236987411478963223698741'); } // 32位
22
- static { this.iv = UTF8.parse('1478963223698741'); } // 16位
31
+ static { this._key = null; }
32
+ static { this._iv = null; }
33
+ static { this._specialParam = null; }
34
+ static get key() {
35
+ return this._key;
36
+ }
37
+ static get iv() {
38
+ return this._iv;
39
+ }
40
+ static get specialParam() {
41
+ return this._specialParam;
42
+ }
23
43
  get exactMatchOptions() {
24
44
  return {
25
45
  paths: 'exact',
@@ -36,16 +56,19 @@ class CmatUtilsService {
36
56
  queryParams: 'subset'
37
57
  };
38
58
  }
59
+ static setCryptoConfig(config) {
60
+ this._key = UTF8.parse(config.key);
61
+ this._iv = UTF8.parse(config.iv);
62
+ this._specialParam = UTF8.parse(config.specialParam);
63
+ }
39
64
  static getRequestHeaders() {
40
65
  return new HttpHeaders()
41
- .append('Access-Control-Allow-Origin', '*')
42
66
  .append('Content-Type', 'application/json')
43
67
  .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)
44
68
  .append('App-Version', CMAT_VERSION);
45
69
  }
46
70
  static getRequestIdempotentHeaders() {
47
71
  return new HttpHeaders()
48
- .append('Access-Control-Allow-Origin', '*')
49
72
  .append('Content-Type', 'application/json')
50
73
  .append('X-Request-ID', CmatUtilsService.newGuid())
51
74
  .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)
@@ -53,7 +76,6 @@ class CmatUtilsService {
53
76
  }
54
77
  static getRequestBypassHeaders() {
55
78
  return new HttpHeaders()
56
- .append('Access-Control-Allow-Origin', '*')
57
79
  .append('Content-Type', 'application/json')
58
80
  .append('bypass', 'true')
59
81
  .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)
@@ -61,7 +83,6 @@ class CmatUtilsService {
61
83
  }
62
84
  static getRequestIdempotentBypassHeaders() {
63
85
  return new HttpHeaders()
64
- .append('Access-Control-Allow-Origin', '*')
65
86
  .append('Content-Type', 'application/json')
66
87
  .append('X-Request-ID', CmatUtilsService.newGuid())
67
88
  .append('bypass', 'true')
@@ -70,34 +91,30 @@ class CmatUtilsService {
70
91
  }
71
92
  static getRequestCryptoHeaders(params) {
72
93
  return new HttpHeaders()
73
- .append('Access-Control-Allow-Origin', '*')
74
94
  .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)
75
- .append('App-Version', this.getEncryptData('partymanageApi' + params).toString());
95
+ .append('App-Version', this.getEncryptData(params).toString());
76
96
  }
77
97
  static getRequestCryptoBypassHeaders(params) {
78
98
  return new HttpHeaders()
79
- .append('Access-Control-Allow-Origin', '*')
80
99
  .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)
81
100
  .append('bypass', 'true')
82
- .append('App-Version', this.getEncryptData('partymanageApi' + params).toString());
101
+ .append('App-Version', this.getEncryptData(params).toString());
83
102
  }
84
103
  static getRequestCryptoIdempotentHeaders(params) {
85
104
  return new HttpHeaders()
86
- .append('Access-Control-Allow-Origin', '*')
87
105
  .append('X-Request-ID', CmatUtilsService.newGuid())
88
106
  .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)
89
- .append('App-Version', this.getEncryptData('partymanageApi' + params).toString());
107
+ .append('App-Version', this.getEncryptData(params).toString());
90
108
  }
91
109
  static getRequestCryptoIdempotentBypassHeaders(params) {
92
110
  return new HttpHeaders()
93
- .append('Access-Control-Allow-Origin', '*')
94
111
  .append('X-Request-ID', CmatUtilsService.newGuid())
95
112
  .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)
96
113
  .append('bypass', 'true')
97
- .append('App-Version', this.getEncryptData('partymanageApi' + params).toString());
114
+ .append('App-Version', this.getEncryptData(params).toString());
98
115
  }
99
116
  static getEncryptData(data) {
100
- const src = UTF8.parse(data);
117
+ const src = UTF8.parse(this.specialParam.toString() + data);
101
118
  return AES.encrypt(src, this.key, {
102
119
  iv: this.iv,
103
120
  mode: CryptoJSCore.mode.CBC,
@@ -113,14 +130,17 @@ class CmatUtilsService {
113
130
  }).toString(UTF8).toString();
114
131
  }
115
132
  static handleError(error) {
116
- if (error.error instanceof ErrorEvent) {
133
+ if (error instanceof ErrorEvent) {
117
134
  console.error('Client side network error occurred:', error.message);
118
135
  }
119
- else {
136
+ else if (typeof error === 'object' && error !== null && 'status' in error) {
137
+ const httpError = error;
120
138
  console.error('Backend - ' +
121
- `status: ${error.status}, ` +
122
- `statusText: ${error.statusText}, ` +
123
- `message: ${error.error}`);
139
+ `status: ${String(httpError.status)}, ` +
140
+ `message: ${String(httpError.error)}`);
141
+ }
142
+ else {
143
+ console.error('Unknown error occurred:', String(error));
124
144
  }
125
145
  return throwError(() => error ?? 'server error');
126
146
  }
@@ -132,27 +152,35 @@ class CmatUtilsService {
132
152
  }
133
153
  else {
134
154
  const responseObject = this.getResponseBody(data);
135
- if (responseObject && (typeof responseObject === 'object' || responseObject instanceof Object)) {
155
+ if (responseObject && typeof responseObject === 'object') {
136
156
  for (const key in responseObject) {
137
157
  if (Object.prototype.hasOwnProperty.call(responseObject, key)) {
158
+ const value = responseObject[key];
159
+ const stringValue = typeof value === 'object' && value !== null ? JSON.stringify(value) : String(value);
138
160
  if (key) {
139
- responses.push(`${key}${this.captionAndMessageSeparator} ${responseObject[key]}`);
161
+ responses.push(`${key}${this.captionAndMessageSeparator} ${stringValue}`);
140
162
  }
141
- else if (responseObject[key]) {
142
- responses.push(responseObject[key].toString());
163
+ else if (value) {
164
+ responses.push(stringValue);
143
165
  }
144
166
  }
145
167
  }
146
168
  }
147
169
  }
148
- if (!responses.length && this.getResponseBody(data)) {
149
- responses.push(`${this.getResponseBody(data).toString()}`);
170
+ const responseBody = this.getResponseBody(data);
171
+ if (!responses.length && responseBody != null) {
172
+ if (typeof responseBody === 'object') {
173
+ responses.push(JSON.stringify(responseBody));
174
+ }
175
+ else {
176
+ responses.push(String(responseBody));
177
+ }
150
178
  }
151
179
  }
152
180
  if (!responses.length) {
153
- responses.push(data.toString());
181
+ responses.push(typeof data === 'object' ? JSON.stringify(data) : String(data));
154
182
  }
155
- if (this.checkAccessDenied(data)) {
183
+ if (data instanceof HttpResponseBase && this.checkAccessDenied(data)) {
156
184
  responses.splice(0, 0, `${this.accessDeniedMessageCaption}${this.captionAndMessageSeparator} ${this.accessDeniedMessageDetail}`);
157
185
  }
158
186
  return responses;
@@ -188,7 +216,7 @@ class CmatUtilsService {
188
216
  if (response instanceof HttpErrorResponse) {
189
217
  return response.error ?? response.message;
190
218
  }
191
- return response;
219
+ return null;
192
220
  }
193
221
  static checkNoNetwork(response) {
194
222
  if (response instanceof HttpResponseBase) {
@@ -227,7 +255,7 @@ class CmatUtilsService {
227
255
  return params;
228
256
  }
229
257
  static splitInTwo(text, separator) {
230
- const separatorIndex = separator ? text.indexOf(separator) : -1;
258
+ const separatorIndex = separator && text.includes(separator) ? text.indexOf(separator) : -1;
231
259
  if (separatorIndex === -1) {
232
260
  return { firstPart: text, secondPart: null };
233
261
  }
@@ -247,13 +275,14 @@ class CmatUtilsService {
247
275
  if (!Object.prototype.hasOwnProperty.call(object, prop)) {
248
276
  continue;
249
277
  }
250
- if (typeof (object[prop]) == 'object') {
278
+ const value = object[prop];
279
+ if (typeof value === 'object') {
251
280
  continue;
252
281
  }
253
- if (typeof (object[prop]) == 'function') {
282
+ if (typeof value === 'function') {
254
283
  continue;
255
284
  }
256
- simpleObject[prop] = object[prop];
285
+ simpleObject[prop] = value;
257
286
  }
258
287
  result = '[***Sanitized Object***]: ' + JSON.stringify(simpleObject);
259
288
  return result;
@@ -278,17 +307,14 @@ class CmatUtilsService {
278
307
  }
279
308
  }
280
309
  static toTitleCase(text) {
281
- return text.replace(/\w\S*/g, subString => subString.charAt(0).toUpperCase() + subString.substring(1).toLowerCase());
310
+ return text.replace(/\w\S*/g, (subString) => subString.charAt(0).toUpperCase() + subString.substring(1).toLowerCase());
282
311
  }
283
312
  static toLowerCase(items) {
284
313
  if (items instanceof Array) {
285
- const loweredRoles = [];
286
- for (let i = 0; i < items.length; i++) {
287
- loweredRoles[i] = items[i].toLowerCase();
288
- }
314
+ const loweredRoles = items.map((item) => item.toLowerCase());
289
315
  return loweredRoles;
290
316
  }
291
- else if (typeof items === 'string' || items instanceof String) {
317
+ else if (typeof items === 'string') {
292
318
  return items.toLowerCase();
293
319
  }
294
320
  return void 0;
@@ -310,11 +336,7 @@ class CmatUtilsService {
310
336
  return base.replace(/\/$/, '');
311
337
  }
312
338
  static newGuid() {
313
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
314
- const r = (Math.random() * 16) | 0;
315
- const v = c === 'x' ? r : (r & 0x3) | 0x8;
316
- return v.toString(16);
317
- });
339
+ return crypto.randomUUID();
318
340
  }
319
341
  static testIsAbsoluteUrl(url) {
320
342
  const r = new RegExp('^(?:[a-z]+:)?//', 'i');
@@ -356,8 +378,8 @@ class CmatUtilsService {
356
378
  if (!Object.prototype.hasOwnProperty.call(decoded, 'exp')) {
357
379
  return null;
358
380
  }
359
- const date = new Date(0); // The 0 here is the key, which sets the date to the epoch
360
- date.setUTCSeconds(decoded.exp);
381
+ const date = new Date(0);
382
+ date.setUTCSeconds(Number(decoded.exp));
361
383
  return date;
362
384
  }
363
385
  static isTokenExpired(token, offsetSeconds) {
@@ -374,9 +396,8 @@ class CmatUtilsService {
374
396
  reader.onload = () => {
375
397
  resolve(reader.result);
376
398
  };
377
- reader.onerror = (e) => {
378
- // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
379
- reject(e);
399
+ reader.onerror = () => {
400
+ reject(new Error('Failed to read file as Data URL'));
380
401
  };
381
402
  reader.readAsDataURL(file);
382
403
  });
@@ -386,8 +407,8 @@ class CmatUtilsService {
386
407
  const byteString = splitDataURI[0].includes('base64') ? atob(splitDataURI[1]) : decodeURI(splitDataURI[1]);
387
408
  const mimeString = splitDataURI[0].split(':')[1].split(';')[0];
388
409
  const ia = new Uint8Array(byteString.length);
389
- for (let i = 0; i < byteString.length; i++) {
390
- ia[i] = byteString.charCodeAt(i);
410
+ for (const [i, char] of [...byteString].entries()) {
411
+ ia[i] = char.charCodeAt(0);
391
412
  }
392
413
  return new Blob([ia], { type: mimeString });
393
414
  }
@@ -413,7 +434,7 @@ class CmatUtilsService {
413
434
  break;
414
435
  case 'application/vnd.ms-excel':
415
436
  case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
416
- fileType = 'word';
437
+ fileType = 'excel';
417
438
  break;
418
439
  case 'application/pdf':
419
440
  fileType = 'pdf';
@@ -430,7 +451,7 @@ class CmatUtilsService {
430
451
  case 'audio/mp4':
431
452
  fileType = 'video';
432
453
  break;
433
- case 'aplication/zip':
454
+ case 'application/zip':
434
455
  fileType = 'zip';
435
456
  break;
436
457
  }
@@ -458,14 +479,14 @@ class CmatUtilsService {
458
479
  const lastPart = parts.pop();
459
480
  let currentValue = jsonObject;
460
481
  parts.forEach((part) => {
461
- if (Object.prototype.hasOwnProperty.call(currentValue, part)) {
482
+ if (typeof currentValue === 'object' && currentValue !== null && Object.prototype.hasOwnProperty.call(currentValue, part)) {
462
483
  currentValue = currentValue[part];
463
484
  }
464
485
  else {
465
486
  currentValue = undefined;
466
487
  }
467
488
  });
468
- result[info.code] = currentValue ? (Object.prototype.hasOwnProperty.call(currentValue, lastPart) ? currentValue[lastPart] : '') : '';
489
+ result[info.code] = currentValue && typeof currentValue === 'object' && Object.prototype.hasOwnProperty.call(currentValue, lastPart) ? currentValue[lastPart] : '';
469
490
  });
470
491
  return result;
471
492
  });
@@ -495,5 +516,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
495
516
  * Generated bundle index. Do not edit.
496
517
  */
497
518
 
498
- export { CmatUtilsService };
519
+ export { CMAT_CRYPTO_CONFIG, CmatUtilsService, initializeCmatUtilsConfig };
499
520
  //# sourceMappingURL=cmat-services-utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cmat-services-utils.mjs","sources":["../../../projects/cmat/services/utils/utils.service.ts","../../../projects/cmat/services/utils/cmat-services-utils.ts"],"sourcesContent":["import { HttpErrorResponse, HttpHeaders, HttpResponse, HttpResponseBase } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { IsActiveMatchOptions } from '@angular/router';\r\nimport { CMAT_VERSION } from 'cmat/version';\r\nimport AES from 'crypto-js/aes';\r\nimport CryptoJSCore from 'crypto-js/core';\r\nimport Base64 from 'crypto-js/enc-base64';\r\nimport Hex from 'crypto-js/enc-hex';\r\nimport UTF8 from 'crypto-js/enc-utf8';\r\nimport Pkcs7 from 'crypto-js/pad-pkcs7';\r\nimport dayjs from 'dayjs';\r\nimport { isUndefined } from 'lodash-es';\r\nimport { throwError, Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CmatUtilsService {\r\n public static readonly captionAndMessageSeparator = ':';\r\n public static readonly noNetworkMessageCaption = '无网络';\r\n public static readonly noNetworkMessageDetail = '无法连接服务器';\r\n public static readonly accessDeniedMessageCaption = '拒绝访问!';\r\n public static readonly accessDeniedMessageDetail = '';\r\n private static readonly key = UTF8.parse('14789632236987411478963223698741'); // 32位\n private static readonly iv = UTF8.parse('1478963223698741'); // 16位\n\r\n get exactMatchOptions(): IsActiveMatchOptions {\r\n return {\r\n paths: 'exact',\r\n fragment: 'ignored',\r\n matrixParams: 'ignored',\r\n queryParams: 'exact'\r\n };\r\n }\r\n\r\n get subsetMatchOptions(): IsActiveMatchOptions {\r\n return {\r\n paths: 'subset',\r\n fragment: 'ignored',\r\n matrixParams: 'ignored',\r\n queryParams: 'subset'\r\n };\r\n }\r\n\r\n public static getRequestHeaders(): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('Access-Control-Allow-Origin', '*')\r\n .append('Content-Type', 'application/json')\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('App-Version', CMAT_VERSION);\r\n }\r\n\r\n public static getRequestIdempotentHeaders(): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('Access-Control-Allow-Origin', '*')\r\n .append('Content-Type', 'application/json')\r\n .append('X-Request-ID', CmatUtilsService.newGuid())\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('App-Version', CMAT_VERSION);\r\n }\r\n\r\n public static getRequestBypassHeaders(): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('Access-Control-Allow-Origin', '*')\r\n .append('Content-Type', 'application/json')\r\n .append('bypass', 'true')\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('App-Version', CMAT_VERSION);\r\n }\r\n\r\n public static getRequestIdempotentBypassHeaders(): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('Access-Control-Allow-Origin', '*')\r\n .append('Content-Type', 'application/json')\r\n .append('X-Request-ID', CmatUtilsService.newGuid())\r\n .append('bypass', 'true')\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('App-Version', CMAT_VERSION);\r\n }\r\n\r\n public static getRequestCryptoHeaders(params: string): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('Access-Control-Allow-Origin', '*')\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('App-Version', this.getEncryptData('partymanageApi' + params).toString());\r\n }\r\n\r\n public static getRequestCryptoBypassHeaders(params: string): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('Access-Control-Allow-Origin', '*')\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('bypass', 'true')\r\n .append('App-Version', this.getEncryptData('partymanageApi' + params).toString());\r\n }\r\n\r\n public static getRequestCryptoIdempotentHeaders(params: string): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('Access-Control-Allow-Origin', '*')\r\n .append('X-Request-ID', CmatUtilsService.newGuid())\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('App-Version', this.getEncryptData('partymanageApi' + params).toString());\r\n }\r\n\r\n public static getRequestCryptoIdempotentBypassHeaders(params: string): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('Access-Control-Allow-Origin', '*')\r\n .append('X-Request-ID', CmatUtilsService.newGuid())\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('bypass', 'true')\r\n .append('App-Version', this.getEncryptData('partymanageApi' + params).toString());\r\n }\r\n\r\n public static getEncryptData(data: string): string {\r\n const src = UTF8.parse(data);\r\n\r\n return AES.encrypt(src, this.key, {\r\n iv: this.iv,\r\n mode: CryptoJSCore.mode.CBC,\r\n padding: Pkcs7\r\n }).ciphertext.toString();\r\n }\r\n\r\n public static getDecryptData(data: string): string {\r\n const encryptedHexStr = Hex.parse(data);\r\n return AES.decrypt(Base64.stringify(encryptedHexStr), this.key, {\r\n iv: this.iv,\r\n mode: CryptoJSCore.mode.CBC,\r\n padding: Pkcs7\r\n }).toString(UTF8).toString();\r\n }\r\n\r\n public static handleError(error: any): Observable<never> {\r\n if (error.error instanceof ErrorEvent) {\r\n console.error('Client side network error occurred:', error.message);\r\n } else {\r\n console.error('Backend - ' +\r\n `status: ${error.status}, ` +\r\n `statusText: ${error.statusText}, ` +\r\n `message: ${error.error}`);\r\n }\r\n return throwError(() => error ?? 'server error');\r\n }\r\n\r\n public static getHttpResponseMessage(data: any): string[] {\r\n\r\n const responses: string[] = [];\r\n\r\n if (data instanceof HttpResponseBase) {\r\n if (this.checkNoNetwork(data)) {\r\n responses.push(`${this.noNetworkMessageCaption}${this.captionAndMessageSeparator} ${this.noNetworkMessageDetail}`);\r\n } else {\r\n const responseObject = this.getResponseBody(data);\r\n\r\n if (responseObject && (typeof responseObject === 'object' || responseObject instanceof Object)) {\r\n\r\n for (const key in responseObject) {\r\n if (Object.prototype.hasOwnProperty.call(responseObject, key)) {\r\n if (key) {\r\n responses.push(`${key}${this.captionAndMessageSeparator} ${responseObject[key]}`);\r\n } else if (responseObject[key]) {\r\n responses.push(responseObject[key].toString());\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!responses.length && this.getResponseBody(data)) {\r\n responses.push(`${this.getResponseBody(data).toString()}`);\r\n }\r\n }\r\n\r\n if (!responses.length) {\r\n responses.push(data.toString());\r\n }\r\n\r\n if (this.checkAccessDenied(data)) {\r\n responses.splice(0, 0, `${this.accessDeniedMessageCaption}${this.captionAndMessageSeparator} ${this.accessDeniedMessageDetail}`);\r\n }\r\n\r\n return responses;\r\n }\r\n\r\n\r\n public static findHttpResponseMessage(messageToFind: string, data: any, seachInCaptionOnly = true, includeCaptionInResult = false): string | null {\r\n const searchString = messageToFind.toLowerCase();\r\n const httpMessages = this.getHttpResponseMessage(data);\r\n\r\n for (const message of httpMessages) {\r\n const fullMessage = CmatUtilsService.splitInTwo(message, this.captionAndMessageSeparator);\r\n\r\n if (fullMessage.firstPart?.toLowerCase().includes(searchString)) {\r\n return includeCaptionInResult ? message : fullMessage.secondPart ?? fullMessage.firstPart;\r\n }\r\n }\r\n\r\n if (!seachInCaptionOnly) {\r\n for (const message of httpMessages) {\r\n\r\n if (message.toLowerCase().includes(searchString)) {\r\n if (includeCaptionInResult) {\r\n return message;\r\n } else {\r\n const fullMessage = CmatUtilsService.splitInTwo(message, this.captionAndMessageSeparator);\r\n return fullMessage.secondPart ?? fullMessage.firstPart;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public static getResponseBody(response: HttpResponseBase): any {\r\n if (response instanceof HttpResponse) {\r\n return response.body;\r\n }\r\n\r\n if (response instanceof HttpErrorResponse) {\r\n return response.error ?? response.message;\r\n }\r\n return response;\r\n }\r\n\r\n\r\n public static checkNoNetwork(response: HttpResponseBase): boolean {\r\n if (response instanceof HttpResponseBase) {\r\n return response.status === 0;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public static checkAccessDenied(response: HttpResponseBase): boolean {\r\n if (response instanceof HttpResponseBase) {\r\n return response.status === 403;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public static checkNotFound(response: HttpResponseBase): boolean {\r\n if (response instanceof HttpResponseBase) {\r\n return response.status === 404;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public static checkIsLocalHost(url: string, base?: string): boolean {\r\n if (url) {\r\n const location = new URL(url, base);\r\n return location.hostname === 'localhost' || location.hostname === '127.0.0.1';\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public static getQueryParamsFromString(paramString: string): Record<string, string | null> | null {\r\n if (!paramString) {\r\n return null;\r\n }\r\n\r\n const params: Record<string, string | null> = {};\r\n\r\n for (const param of paramString.split('&')) {\r\n const keyValue = CmatUtilsService.splitInTwo(param, '=');\r\n params[keyValue.firstPart] = keyValue.secondPart;\r\n }\r\n\r\n return params;\r\n }\r\n\r\n public static splitInTwo(text: string, separator?: string): { firstPart: string; secondPart: string | null } {\r\n const separatorIndex = separator ? text.indexOf(separator) : -1;\r\n\r\n if (separatorIndex === -1) {\r\n return { firstPart: text, secondPart: null };\r\n }\r\n\r\n const part1 = text.substring(0, separatorIndex).trim();\r\n const part2 = text.substring(separatorIndex + 1).trim();\r\n\r\n return { firstPart: part1, secondPart: part2 };\r\n }\r\n\r\n public static safeStringify(object: any): string {\r\n let result: string;\r\n\r\n try {\r\n result = JSON.stringify(object);\r\n return result;\r\n } catch { /* empty */ }\r\n\r\n const simpleObject: any = {};\r\n\r\n for (const prop in object) {\r\n if (!Object.prototype.hasOwnProperty.call(object, prop)) {\r\n continue;\r\n }\r\n if (typeof (object[prop]) == 'object') {\r\n continue;\r\n }\r\n if (typeof (object[prop]) == 'function') {\r\n continue;\r\n }\r\n simpleObject[prop] = object[prop];\r\n }\r\n\r\n result = '[***Sanitized Object***]: ' + JSON.stringify(simpleObject);\r\n\r\n return result;\r\n }\r\n\r\n public static jsonTryParse(value: string): string | void {\r\n try {\r\n return JSON.parse(value);\r\n } catch {\r\n if (isUndefined(value)) {\r\n return void 0;\r\n }\r\n\r\n return value;\r\n }\r\n }\r\n\r\n public static capitalizeFirstLetter(text: string): string {\r\n if (text) {\r\n return text.charAt(0).toUpperCase() + text.slice(1);\r\n } else {\r\n return text;\r\n }\r\n }\r\n\r\n\r\n public static toTitleCase(text: string): string {\r\n return text.replace(/\\w\\S*/g, subString => subString.charAt(0).toUpperCase() + subString.substring(1).toLowerCase());\r\n }\r\n\r\n public static toLowerCase(items: any): string | string[] | void {\r\n if (items instanceof Array) {\r\n const loweredRoles: string[] = [];\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n loweredRoles[i] = items[i].toLowerCase();\r\n }\r\n\r\n return loweredRoles;\r\n } else if (typeof items === 'string' || items instanceof String) {\r\n return items.toLowerCase();\r\n }\r\n\r\n return void 0;\r\n }\r\n\r\n public static uniqueId(): string {\r\n return this.randomNumber(1000000, 9000000).toString();\r\n }\r\n\r\n public static randomNumber(min: number, max: number): number {\r\n return Math.floor(Math.random() * (max - min + 1) + min);\r\n }\r\n\r\n public static baseUrl(): string {\r\n let base: string;\r\n\r\n if (window.location.origin) {\r\n base = window.location.origin;\r\n } else {\r\n base = window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\r\n }\r\n\r\n return base.replace(/\\/$/, '');\r\n }\r\n\r\n public static newGuid(): string {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n\r\n const r = (Math.random() * 16) | 0;\r\n\r\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n public static testIsAbsoluteUrl(url: string): boolean {\r\n const r = new RegExp('^(?:[a-z]+:)?//', 'i');\r\n return r.test(url);\r\n }\r\n\r\n public static convertToAbsoluteUrl(url: string): string {\r\n return CmatUtilsService.testIsAbsoluteUrl(url) ? url : '//' + url;\r\n }\r\n\r\n public static urlBase64Decode(str: string): string {\r\n let output = str.replace(/-/g, '+').replace(/_/g, '/');\r\n switch (output.length % 4) {\r\n case 0: {\r\n break;\r\n }\r\n case 2: {\r\n output += '==';\r\n break;\r\n }\r\n case 3: {\r\n output += '=';\r\n break;\r\n }\r\n }\r\n return this._base64DecodeUnicode(output);\r\n }\r\n\r\n public static decodeToken(token: string): any {\r\n const parts = token.split('.');\r\n\r\n if (parts.length !== 3) {\r\n throw new Error('JWT must have 3 parts');\r\n }\r\n\r\n const decoded = this.urlBase64Decode(parts[1]);\r\n if (!decoded) {\r\n throw new Error('Cannot decode the token');\r\n }\r\n\r\n return JSON.parse(decoded);\r\n }\r\n\r\n public static getTokenExpirationDate(token: string): Date | null {\r\n const decoded = this.decodeToken(token);\r\n\r\n if (!Object.prototype.hasOwnProperty.call(decoded, 'exp')) {\r\n return null;\r\n }\r\n\r\n const date = new Date(0); // The 0 here is the key, which sets the date to the epoch\r\n date.setUTCSeconds(decoded.exp);\r\n\r\n return date;\r\n }\r\n\r\n public static isTokenExpired(token: string, offsetSeconds?: number): boolean {\r\n const date = this.getTokenExpirationDate(token);\r\n offsetSeconds = offsetSeconds ?? 0;\r\n\r\n if (date == null) {\r\n return false;\r\n }\r\n return !(date.valueOf() > (new Date().valueOf() + (offsetSeconds * 1000)));\r\n }\r\n\r\n public static readAsDataURL(file: File): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = (): void => {\r\n resolve(reader.result);\r\n };\r\n reader.onerror = (e): void => {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(e);\r\n };\r\n reader.readAsDataURL(file);\r\n });\r\n }\r\n\r\n public static dataURIToBlob(dataURI: string): Blob {\r\n const splitDataURI = dataURI.split(',');\r\n\r\n const byteString = splitDataURI[0].includes('base64') ? atob(splitDataURI[1]) : decodeURI(splitDataURI[1]);\r\n const mimeString = splitDataURI[0].split(':')[1].split(';')[0];\r\n\r\n const ia = new Uint8Array(byteString.length);\r\n for (let i = 0; i < byteString.length; i++) {\r\n ia[i] = byteString.charCodeAt(i);\r\n }\r\n\r\n return new Blob([ia], { type: mimeString });\r\n }\r\n\r\n public static getFileType(accept: string): 'csv' | 'gif' | 'word' | 'excel' | 'jpg' | 'outlook' | 'pdf' | 'png' | 'ppt' | 'file' | 'text' | 'video' | 'zip' {\r\n let fileType = 'file';\r\n switch (accept) {\r\n case 'image/jpeg':\r\n case 'image/jpg':\r\n fileType = 'jpg';\r\n break;\r\n case 'image/png':\r\n fileType = 'png';\r\n break;\r\n case 'text/csv':\r\n fileType = 'csv';\r\n break;\r\n case 'image/gif':\r\n fileType = 'gif';\r\n break;\r\n case 'application/msword':\r\n case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\r\n fileType = 'word';\r\n break;\r\n case 'application/vnd.ms-excel':\r\n case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\r\n fileType = 'word';\r\n break;\r\n case 'application/pdf':\r\n fileType = 'pdf';\r\n break;\r\n case 'application/vnd.openxmlformats-officedocument.presentationml.presentation':\r\n case 'application/vnd.ms-powerpoint':\r\n fileType = 'ppt';\r\n break;\r\n case 'text/plain':\r\n fileType = 'text';\r\n break;\r\n case 'video/mpeg':\r\n case 'video/mp4':\r\n case 'audio/mp4':\r\n fileType = 'video';\r\n break;\r\n case 'aplication/zip':\r\n fileType = 'zip';\r\n break;\r\n }\r\n\r\n return fileType as 'csv' | 'gif' | 'word' | 'excel' | 'jpg' | 'outlook' | 'pdf' | 'png' | 'ppt' | 'file' | 'text' | 'video' | 'zip';\r\n }\r\n public static isDateString(value: any): boolean {\r\n if (!value || (typeof value !== 'string' && typeof value !== 'number')) {\r\n return false;\r\n }\r\n const stringValue = String(value);\r\n if (/^\\d+$/.test(stringValue)) {\r\n return false;\r\n }\r\n const parsedDate = Date.parse(stringValue);\r\n if (isNaN(parsedDate)) {\r\n return false;\r\n }\r\n return dayjs(stringValue).isValid();\r\n }\r\n public static transformObjectsForExport(jsonObjects: any[], columns: any[]): any[] {\r\n return jsonObjects.map((jsonObject) => {\r\n const result: any = {};\r\n columns.forEach((info) => {\r\n const parts = info.code.split('.');\r\n const lastPart = parts.pop()!;\r\n let currentValue = jsonObject;\r\n parts.forEach((part:any) => {\r\n if (Object.prototype.hasOwnProperty.call(currentValue, part)) {\r\n currentValue = currentValue[part];\r\n } else {\r\n currentValue = undefined;\r\n }\r\n });\r\n result[info.code] = currentValue ? (Object.prototype.hasOwnProperty.call(currentValue, lastPart) ? currentValue[lastPart] : '') : '';\r\n });\r\n\r\n return result;\r\n });\r\n }\r\n\r\n private static _base64DecodeUnicode(str: any): string {\r\n return decodeURIComponent(Array.prototype.map.call(atob(str), (c: any) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)).join(''));\r\n }\r\n\r\n randomId(stringLength: number = 10): string {\r\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n let id = '';\r\n\r\n for (let i = 0; i < stringLength; i++) {\r\n id += chars.charAt(Math.floor(Math.random() * chars.length));\r\n }\r\n\r\n return id;\r\n }\r\n\r\n\r\n}\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cmat-services-utils.mjs","sources":["../../../projects/cmat/services/utils/utils.service.ts","../../../projects/cmat/services/utils/cmat-services-utils.ts"],"sourcesContent":["import { HttpErrorResponse, HttpHeaders, HttpResponse, HttpResponseBase } from '@angular/common/http';\r\nimport { InjectionToken, Injectable } from '@angular/core';\r\nimport { type IsActiveMatchOptions } from '@angular/router';\r\nimport { CMAT_VERSION } from 'cmat/version';\r\nimport AES from 'crypto-js/aes';\r\nimport CryptoJSCore from 'crypto-js/core';\r\nimport Base64 from 'crypto-js/enc-base64';\r\nimport Hex from 'crypto-js/enc-hex';\r\nimport UTF8 from 'crypto-js/enc-utf8';\r\nimport Pkcs7 from 'crypto-js/pad-pkcs7';\r\nimport dayjs from 'dayjs';\r\nimport { isUndefined } from 'lodash-es';\r\nimport { throwError, Observable } from 'rxjs';\r\n\r\nexport interface CmatCryptoConfig {\r\n key: string;\r\n iv: string;\r\n specialParam: string;\r\n}\r\n\r\nexport const CMAT_CRYPTO_CONFIG = new InjectionToken<CmatCryptoConfig>('CMAT_CRYPTO_CONFIG', {\r\n factory: (): CmatCryptoConfig => ({\r\n key: '14789632236987411478963223698741',\r\n iv: '1478963223698741',\r\n specialParam: 'partymanageApi'\r\n })\r\n});\r\n\r\nexport function initializeCmatUtilsConfig(config: CmatCryptoConfig): void {\r\n CmatUtilsService.setCryptoConfig(config);\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CmatUtilsService {\r\n public static readonly captionAndMessageSeparator = ':';\r\n public static readonly noNetworkMessageCaption = '无网络';\r\n public static readonly noNetworkMessageDetail = '无法连接服务器';\r\n public static readonly accessDeniedMessageCaption = '拒绝访问!';\r\n public static readonly accessDeniedMessageDetail = '';\r\n private static _key: ReturnType<typeof UTF8.parse> | null = null;\r\n private static _iv: ReturnType<typeof UTF8.parse> | null = null;\r\n private static _specialParam: ReturnType<typeof UTF8.parse> | null = null;\r\n\r\n private static get key(): ReturnType<typeof UTF8.parse> {\r\n return this._key!;\r\n }\r\n\r\n private static get iv(): ReturnType<typeof UTF8.parse> {\r\n return this._iv!;\r\n }\r\n\r\n private static get specialParam(): ReturnType<typeof UTF8.parse> {\r\n return this._specialParam!;\r\n }\r\n\r\n get exactMatchOptions(): IsActiveMatchOptions {\r\n return {\r\n paths: 'exact',\r\n fragment: 'ignored',\r\n matrixParams: 'ignored',\r\n queryParams: 'exact'\r\n };\r\n }\r\n\r\n get subsetMatchOptions(): IsActiveMatchOptions {\r\n return {\r\n paths: 'subset',\r\n fragment: 'ignored',\r\n matrixParams: 'ignored',\r\n queryParams: 'subset'\r\n };\r\n }\r\n\r\n public static setCryptoConfig(config: CmatCryptoConfig): void {\r\n this._key = UTF8.parse(config.key);\r\n this._iv = UTF8.parse(config.iv);\r\n this._specialParam = UTF8.parse(config.specialParam);\r\n }\r\n\r\n public static getRequestHeaders(): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('Content-Type', 'application/json')\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('App-Version', CMAT_VERSION);\r\n }\r\n\r\n public static getRequestIdempotentHeaders(): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('Content-Type', 'application/json')\r\n .append('X-Request-ID', CmatUtilsService.newGuid())\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('App-Version', CMAT_VERSION);\r\n }\r\n\r\n public static getRequestBypassHeaders(): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('Content-Type', 'application/json')\r\n .append('bypass', 'true')\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('App-Version', CMAT_VERSION);\r\n }\r\n\r\n public static getRequestIdempotentBypassHeaders(): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('Content-Type', 'application/json')\r\n .append('X-Request-ID', CmatUtilsService.newGuid())\r\n .append('bypass', 'true')\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('App-Version', CMAT_VERSION);\r\n }\r\n\r\n public static getRequestCryptoHeaders(params: string): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('App-Version', this.getEncryptData(params).toString());\r\n }\r\n\r\n public static getRequestCryptoBypassHeaders(params: string): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('bypass', 'true')\r\n .append('App-Version', this.getEncryptData(params).toString());\r\n }\r\n\r\n public static getRequestCryptoIdempotentHeaders(params: string): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('X-Request-ID', CmatUtilsService.newGuid())\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('App-Version', this.getEncryptData(params).toString());\r\n }\r\n\r\n public static getRequestCryptoIdempotentBypassHeaders(params: string): HttpHeaders {\r\n return new HttpHeaders()\r\n .append('X-Request-ID', CmatUtilsService.newGuid())\r\n .append('Accept', `application/vnd.iman.v${CMAT_VERSION}+json, application/json, text/plain, */*`)\r\n .append('bypass', 'true')\r\n .append('App-Version', this.getEncryptData(params).toString());\r\n }\r\n\r\n public static getEncryptData(data: string): string {\r\n const src = UTF8.parse(this.specialParam.toString() + data);\r\n\r\n return AES.encrypt(src, this.key, {\r\n iv: this.iv,\r\n mode: CryptoJSCore.mode.CBC,\r\n padding: Pkcs7\r\n }).ciphertext.toString();\r\n }\r\n\r\n public static getDecryptData(data: string): string {\r\n const encryptedHexStr = Hex.parse(data);\r\n return AES.decrypt(Base64.stringify(encryptedHexStr), this.key, {\r\n iv: this.iv,\r\n mode: CryptoJSCore.mode.CBC,\r\n padding: Pkcs7\r\n }).toString(UTF8).toString();\r\n }\r\n\r\n public static handleError(error: unknown): Observable<never> {\r\n if (error instanceof ErrorEvent) {\r\n console.error('Client side network error occurred:', error.message);\r\n } else if (typeof error === 'object' && error !== null && 'status' in error) {\r\n const httpError = error as { status?: unknown; error?: unknown };\r\n console.error('Backend - ' +\r\n `status: ${String(httpError.status)}, ` +\r\n `message: ${String(httpError.error)}`);\r\n } else {\r\n console.error('Unknown error occurred:', String(error));\r\n }\r\n return throwError(() => error ?? 'server error');\r\n }\r\n\r\n public static getHttpResponseMessage(data: HttpResponseBase | Record<string, unknown>): string[] {\r\n\r\n const responses: string[] = [];\r\n\r\n if (data instanceof HttpResponseBase) {\r\n if (this.checkNoNetwork(data)) {\r\n responses.push(`${this.noNetworkMessageCaption}${this.captionAndMessageSeparator} ${this.noNetworkMessageDetail}`);\r\n } else {\r\n const responseObject = this.getResponseBody(data);\r\n\r\n if (responseObject && typeof responseObject === 'object') {\r\n\r\n for (const key in responseObject) {\r\n if (Object.prototype.hasOwnProperty.call(responseObject, key)) {\r\n const value = responseObject[key];\r\n const stringValue = typeof value === 'object' && value !== null ? JSON.stringify(value) : String(value);\r\n if (key) {\r\n responses.push(`${key}${this.captionAndMessageSeparator} ${stringValue}`);\r\n } else if (value) {\r\n responses.push(stringValue);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const responseBody = this.getResponseBody(data);\r\n if (!responses.length && responseBody != null) {\r\n if (typeof responseBody === 'object') {\r\n responses.push(JSON.stringify(responseBody));\r\n } else {\r\n responses.push(String(responseBody));\r\n }\r\n }\r\n }\r\n\r\n if (!responses.length) {\r\n responses.push(typeof data === 'object' ? JSON.stringify(data) : String(data));\r\n }\r\n\r\n if (data instanceof HttpResponseBase && this.checkAccessDenied(data)) {\r\n responses.splice(0, 0, `${this.accessDeniedMessageCaption}${this.captionAndMessageSeparator} ${this.accessDeniedMessageDetail}`);\r\n }\r\n\r\n return responses;\r\n }\r\n\r\n\r\n public static findHttpResponseMessage(messageToFind: string, data: HttpResponseBase | Record<string, unknown>, seachInCaptionOnly = true, includeCaptionInResult = false): string | null {\r\n const searchString = messageToFind.toLowerCase();\r\n const httpMessages = this.getHttpResponseMessage(data);\r\n\r\n for (const message of httpMessages) {\r\n const fullMessage = CmatUtilsService.splitInTwo(message, this.captionAndMessageSeparator);\r\n\r\n if (fullMessage.firstPart?.toLowerCase().includes(searchString)) {\r\n return includeCaptionInResult ? message : fullMessage.secondPart ?? fullMessage.firstPart;\r\n }\r\n }\r\n\r\n if (!seachInCaptionOnly) {\r\n for (const message of httpMessages) {\r\n\r\n if (message.toLowerCase().includes(searchString)) {\r\n if (includeCaptionInResult) {\r\n return message;\r\n } else {\r\n const fullMessage = CmatUtilsService.splitInTwo(message, this.captionAndMessageSeparator);\r\n return fullMessage.secondPart ?? fullMessage.firstPart;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public static getResponseBody(response: HttpResponseBase): Record<string, unknown> | string | null {\r\n if (response instanceof HttpResponse) {\r\n return response.body as Record<string, unknown> | null;\r\n }\r\n\r\n if (response instanceof HttpErrorResponse) {\r\n return (response.error as Record<string, unknown> | string) ?? response.message;\r\n }\r\n return null;\r\n }\r\n\r\n\r\n public static checkNoNetwork(response: HttpResponseBase): boolean {\r\n if (response instanceof HttpResponseBase) {\r\n return response.status === 0;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public static checkAccessDenied(response: HttpResponseBase): boolean {\r\n if (response instanceof HttpResponseBase) {\r\n return response.status === 403;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public static checkNotFound(response: HttpResponseBase): boolean {\r\n if (response instanceof HttpResponseBase) {\r\n return response.status === 404;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public static checkIsLocalHost(url: string, base?: string): boolean {\r\n if (url) {\r\n const location = new URL(url, base);\r\n return location.hostname === 'localhost' || location.hostname === '127.0.0.1';\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public static getQueryParamsFromString(paramString: string): Record<string, string | null> | null {\r\n if (!paramString) {\r\n return null;\r\n }\r\n\r\n const params: Record<string, string | null> = {};\r\n\r\n for (const param of paramString.split('&')) {\r\n const keyValue = CmatUtilsService.splitInTwo(param, '=');\r\n params[keyValue.firstPart] = keyValue.secondPart;\r\n }\r\n\r\n return params;\r\n }\r\n\r\n public static splitInTwo(text: string, separator?: string): { firstPart: string; secondPart: string | null } {\r\n const separatorIndex = separator && text.includes(separator) ? text.indexOf(separator) : -1;\r\n\r\n if (separatorIndex === -1) {\r\n return { firstPart: text, secondPart: null };\r\n }\r\n\r\n const part1 = text.substring(0, separatorIndex).trim();\r\n const part2 = text.substring(separatorIndex + 1).trim();\r\n\r\n return { firstPart: part1, secondPart: part2 };\r\n }\r\n\r\n public static safeStringify(object: Record<string, unknown>): string {\r\n let result: string;\r\n\r\n try {\r\n result = JSON.stringify(object);\r\n return result;\r\n } catch { /* empty */ }\r\n\r\n const simpleObject: Record<string, string | number | boolean | null | undefined> = {};\r\n\r\n for (const prop in object) {\r\n if (!Object.prototype.hasOwnProperty.call(object, prop)) {\r\n continue;\r\n }\r\n const value = object[prop];\r\n if (typeof value === 'object') {\r\n continue;\r\n }\r\n if (typeof value === 'function') {\r\n continue;\r\n }\r\n simpleObject[prop] = value as string | number | boolean | null | undefined;\r\n }\r\n\r\n result = '[***Sanitized Object***]: ' + JSON.stringify(simpleObject);\r\n\r\n return result;\r\n }\r\n\r\n public static jsonTryParse(value: string): unknown {\r\n try {\r\n return JSON.parse(value) as unknown;\r\n } catch {\r\n if (isUndefined(value)) {\r\n return void 0;\r\n }\r\n\r\n return value;\r\n }\r\n }\r\n\r\n public static capitalizeFirstLetter(text: string): string {\r\n if (text) {\r\n return text.charAt(0).toUpperCase() + text.slice(1);\r\n } else {\r\n return text;\r\n }\r\n }\r\n\r\n\r\n public static toTitleCase(text: string): string {\r\n return text.replace(/\\w\\S*/g, (subString: string): string => subString.charAt(0).toUpperCase() + subString.substring(1).toLowerCase());\r\n }\r\n\r\n public static toLowerCase(items: string | readonly string[]): string | string[] | void {\r\n if (items instanceof Array) {\r\n const loweredRoles: string[] = items.map((item: string): string => item.toLowerCase());\r\n\r\n return loweredRoles;\r\n } else if (typeof items === 'string') {\r\n return items.toLowerCase();\r\n }\r\n\r\n return void 0;\r\n }\r\n\r\n public static uniqueId(): string {\r\n return this.randomNumber(1000000, 9000000).toString();\r\n }\r\n\r\n public static randomNumber(min: number, max: number): number {\r\n return Math.floor(Math.random() * (max - min + 1) + min);\r\n }\r\n\r\n public static baseUrl(): string {\r\n let base: string;\r\n\r\n if (window.location.origin) {\r\n base = window.location.origin;\r\n } else {\r\n base = window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\r\n }\r\n\r\n return base.replace(/\\/$/, '');\r\n }\r\n\r\n public static newGuid(): string {\r\n return crypto.randomUUID();\r\n }\r\n\r\n public static testIsAbsoluteUrl(url: string): boolean {\r\n const r = new RegExp('^(?:[a-z]+:)?//', 'i');\r\n return r.test(url);\r\n }\r\n\r\n public static convertToAbsoluteUrl(url: string): string {\r\n return CmatUtilsService.testIsAbsoluteUrl(url) ? url : '//' + url;\r\n }\r\n\r\n public static urlBase64Decode(str: string): string {\r\n let output = str.replace(/-/g, '+').replace(/_/g, '/');\r\n switch (output.length % 4) {\r\n case 0: {\r\n break;\r\n }\r\n case 2: {\r\n output += '==';\r\n break;\r\n }\r\n case 3: {\r\n output += '=';\r\n break;\r\n }\r\n }\r\n return this._base64DecodeUnicode(output);\r\n }\r\n\r\n public static decodeToken(token: string): Record<string, unknown> {\r\n const parts = token.split('.');\r\n\r\n if (parts.length !== 3) {\r\n throw new Error('JWT must have 3 parts');\r\n }\r\n\r\n const decoded = this.urlBase64Decode(parts[1]);\r\n if (!decoded) {\r\n throw new Error('Cannot decode the token');\r\n }\r\n\r\n return JSON.parse(decoded) as Record<string, unknown>;\r\n }\r\n\r\n public static getTokenExpirationDate(token: string): Date | null {\r\n const decoded = this.decodeToken(token);\r\n\r\n if (!Object.prototype.hasOwnProperty.call(decoded, 'exp')) {\r\n return null;\r\n }\r\n\r\n const date = new Date(0);\r\n date.setUTCSeconds(Number((decoded as { exp: unknown }).exp));\r\n\r\n return date;\r\n }\r\n\r\n public static isTokenExpired(token: string, offsetSeconds?: number): boolean {\r\n const date = this.getTokenExpirationDate(token);\r\n offsetSeconds = offsetSeconds ?? 0;\r\n\r\n if (date == null) {\r\n return false;\r\n }\r\n return !(date.valueOf() > (new Date().valueOf() + (offsetSeconds * 1000)));\r\n }\r\n\r\n public static readAsDataURL(file: File): Promise<string> {\r\n return new Promise((resolve, reject): void => {\r\n const reader = new FileReader();\r\n reader.onload = (): void => {\r\n resolve(reader.result as string);\r\n };\r\n reader.onerror = (): void => {\r\n reject(new Error('Failed to read file as Data URL'));\r\n };\r\n reader.readAsDataURL(file);\r\n });\r\n }\r\n\r\n public static dataURIToBlob(dataURI: string): Blob {\r\n const splitDataURI = dataURI.split(',');\r\n\r\n const byteString = splitDataURI[0].includes('base64') ? atob(splitDataURI[1]) : decodeURI(splitDataURI[1]);\r\n const mimeString = splitDataURI[0].split(':')[1].split(';')[0];\r\n\r\n const ia = new Uint8Array(byteString.length);\r\n for (const [i, char] of [...byteString].entries()) {\r\n ia[i] = char.charCodeAt(0);\r\n }\r\n\r\n return new Blob([ia], { type: mimeString });\r\n }\r\n\r\n public static getFileType(accept: string): 'csv' | 'gif' | 'word' | 'excel' | 'jpg' | 'outlook' | 'pdf' | 'png' | 'ppt' | 'file' | 'text' | 'video' | 'zip' {\r\n let fileType = 'file';\r\n switch (accept) {\r\n case 'image/jpeg':\r\n case 'image/jpg':\r\n fileType = 'jpg';\r\n break;\r\n case 'image/png':\r\n fileType = 'png';\r\n break;\r\n case 'text/csv':\r\n fileType = 'csv';\r\n break;\r\n case 'image/gif':\r\n fileType = 'gif';\r\n break;\r\n case 'application/msword':\r\n case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\r\n fileType = 'word';\r\n break;\r\n case 'application/vnd.ms-excel':\r\n case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\r\n fileType = 'excel';\r\n break;\r\n case 'application/pdf':\r\n fileType = 'pdf';\r\n break;\r\n case 'application/vnd.openxmlformats-officedocument.presentationml.presentation':\r\n case 'application/vnd.ms-powerpoint':\r\n fileType = 'ppt';\r\n break;\r\n case 'text/plain':\r\n fileType = 'text';\r\n break;\r\n case 'video/mpeg':\r\n case 'video/mp4':\r\n case 'audio/mp4':\r\n fileType = 'video';\r\n break;\r\n case 'application/zip':\r\n fileType = 'zip';\r\n break;\r\n }\r\n\r\n return fileType as 'csv' | 'gif' | 'word' | 'excel' | 'jpg' | 'outlook' | 'pdf' | 'png' | 'ppt' | 'file' | 'text' | 'video' | 'zip';\r\n }\r\n\r\n public static isDateString(value: string | number): boolean {\r\n if (!value || (typeof value !== 'string' && typeof value !== 'number')) {\r\n return false;\r\n }\r\n const stringValue = String(value);\r\n if (/^\\d+$/.test(stringValue)) {\r\n return false;\r\n }\r\n const parsedDate = Date.parse(stringValue);\r\n if (isNaN(parsedDate)) {\r\n return false;\r\n }\r\n return dayjs(stringValue).isValid();\r\n }\r\n\r\n public static transformObjectsForExport(jsonObjects: Record<string, unknown>[], columns: readonly { code: string }[]): Record<string, unknown>[] {\r\n return jsonObjects.map((jsonObject: Record<string, unknown>): Record<string, unknown> => {\r\n const result: Record<string, unknown> = {};\r\n columns.forEach((info: Readonly<{ code: string }>): void => {\r\n const parts: string[] = info.code.split('.');\r\n const lastPart = parts.pop()!;\r\n let currentValue: unknown = jsonObject;\r\n parts.forEach((part: string): void => {\r\n if (typeof currentValue === 'object' && currentValue !== null && Object.prototype.hasOwnProperty.call(currentValue, part)) {\r\n currentValue = (currentValue as Record<string, unknown>)[part];\r\n } else {\r\n currentValue = undefined;\r\n }\r\n });\r\n result[info.code] = currentValue && typeof currentValue === 'object' && Object.prototype.hasOwnProperty.call(currentValue, lastPart) ? (currentValue as Record<string, unknown>)[lastPart] : '';\r\n });\r\n\r\n return result;\r\n });\r\n }\r\n\r\n private static _base64DecodeUnicode(str: string): string {\r\n return decodeURIComponent(Array.prototype.map.call(atob(str), (c: string): string => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)).join(''));\r\n }\r\n\r\n randomId(stringLength: number = 10): string {\r\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n let id = '';\r\n\r\n for (let i = 0; i < stringLength; i++) {\r\n id += chars.charAt(Math.floor(Math.random() * chars.length));\r\n }\r\n\r\n return id;\r\n }\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  class CmatValidators {
2
2
  static isEmptyInputValue(value) {
3
- return value == null || value.length === 0;
3
+ if (Array.isArray(value) || typeof value === 'string') {
4
+ return value.length === 0;
5
+ }
6
+ return value == null || (typeof value === 'object' && 'length' in value && value.length === 0);
4
7
  }
5
8
  static mustMatch(controlPath, matchingControlPath) {
6
9
  return (formGroup) => {
@@ -1 +1 @@
1
- {"version":3,"file":"cmat-validators.mjs","sources":["../../../projects/cmat/validators/validators.ts","../../../projects/cmat/validators/cmat-validators.ts"],"sourcesContent":["import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\nexport class CmatValidators {\r\n static isEmptyInputValue(value: any): boolean {\r\n return value == null || value.length === 0;\r\n }\r\n\r\n static mustMatch(controlPath: string, matchingControlPath: string): ValidatorFn {\r\n return (formGroup: AbstractControl): ValidationErrors | null => {\r\n const control = formGroup.get(controlPath);\r\n const matchingControl = formGroup.get(matchingControlPath);\r\n if (!control || !matchingControl) {\r\n return null;\r\n }\r\n if (matchingControl.hasError('mustMatch')) {\r\n delete matchingControl.errors?.['mustMatch'];\r\n matchingControl.updateValueAndValidity();\r\n }\r\n if (this.isEmptyInputValue(matchingControl.value) || control.value === matchingControl.value) {\r\n return null;\r\n }\r\n const errors = { mustMatch: true };\r\n matchingControl.setErrors(errors);\r\n return errors;\r\n };\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"MAEa,cAAc,CAAA;IACvB,OAAO,iBAAiB,CAAC,KAAU,EAAA;QAC/B,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;IAC9C;AAEA,IAAA,OAAO,SAAS,CAAC,WAAmB,EAAE,mBAA2B,EAAA;QAC7D,OAAO,CAAC,SAA0B,KAA6B;YAC3D,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;YAC1C,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAC1D,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE;AAC9B,gBAAA,OAAO,IAAI;YACf;AACA,YAAA,IAAI,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AACvC,gBAAA,OAAO,eAAe,CAAC,MAAM,GAAG,WAAW,CAAC;gBAC5C,eAAe,CAAC,sBAAsB,EAAE;YAC5C;AACA,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,eAAe,CAAC,KAAK,EAAE;AAC1F,gBAAA,OAAO,IAAI;YACf;AACA,YAAA,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE;AAClC,YAAA,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC;AACjC,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC;IACL;AACH;;AC1BD;;AAEG;;;;"}
1
+ {"version":3,"file":"cmat-validators.mjs","sources":["../../../projects/cmat/validators/validators.ts","../../../projects/cmat/validators/cmat-validators.ts"],"sourcesContent":["import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\nexport class CmatValidators {\r\n static isEmptyInputValue(value: unknown): boolean {\r\n if (Array.isArray(value) || typeof value === 'string') {\r\n return value.length === 0;\r\n }\r\n\r\n return value == null || (typeof value === 'object' && 'length' in value && (value as { length: number }).length === 0);\r\n }\r\n\r\n static mustMatch(controlPath: string, matchingControlPath: string): ValidatorFn {\r\n return (formGroup: AbstractControl): ValidationErrors | null => {\r\n const control = formGroup.get(controlPath);\r\n const matchingControl = formGroup.get(matchingControlPath);\r\n if (!control || !matchingControl) {\r\n return null;\r\n }\r\n if (matchingControl.hasError('mustMatch')) {\r\n delete matchingControl.errors?.['mustMatch'];\r\n matchingControl.updateValueAndValidity();\r\n }\r\n if (this.isEmptyInputValue(matchingControl.value) || control.value === matchingControl.value) {\r\n return null;\r\n }\r\n const errors = { mustMatch: true };\r\n matchingControl.setErrors(errors);\r\n return errors;\r\n };\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"MAEa,cAAc,CAAA;IACvB,OAAO,iBAAiB,CAAC,KAAc,EAAA;AACnC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACnD,YAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;QAC7B;QAEA,OAAO,KAAK,IAAI,IAAI,KAAK,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,IAAK,KAA4B,CAAC,MAAM,KAAK,CAAC,CAAC;IAC1H;AAEA,IAAA,OAAO,SAAS,CAAC,WAAmB,EAAE,mBAA2B,EAAA;QAC7D,OAAO,CAAC,SAA0B,KAA6B;YAC3D,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;YAC1C,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAC1D,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE;AAC9B,gBAAA,OAAO,IAAI;YACf;AACA,YAAA,IAAI,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AACvC,gBAAA,OAAO,eAAe,CAAC,MAAM,GAAG,WAAW,CAAC;gBAC5C,eAAe,CAAC,sBAAsB,EAAE;YAC5C;AACA,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,eAAe,CAAC,KAAK,EAAE;AAC1F,gBAAA,OAAO,IAAI;YACf;AACA,YAAA,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE;AAClC,YAAA,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC;AACjC,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC;IACL;AACH;;AC9BD;;AAEG;;;;"}