@reskin/core 0.0.22 → 0.1.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 (45) hide show
  1. package/bundles/reskin-core-directives.umd.js +303 -163
  2. package/bundles/reskin-core-directives.umd.js.map +1 -1
  3. package/bundles/reskin-core-guards.umd.js +119 -32
  4. package/bundles/reskin-core-guards.umd.js.map +1 -1
  5. package/bundles/reskin-core-interceptors.umd.js +286 -104
  6. package/bundles/reskin-core-interceptors.umd.js.map +1 -1
  7. package/bundles/reskin-core-utils.umd.js +220 -77
  8. package/bundles/reskin-core-utils.umd.js.map +1 -1
  9. package/directives/auth.directive.d.ts +56 -9
  10. package/directives/load.styles.directive.d.ts +45 -5
  11. package/directives/string.template.outlet.directive.d.ts +68 -11
  12. package/esm2015/directives/auth.directive.js +71 -30
  13. package/esm2015/directives/load.styles.directive.js +84 -15
  14. package/esm2015/directives/string.template.outlet.directive.js +118 -60
  15. package/esm2015/guards/auth.guard.js +117 -30
  16. package/esm2015/interceptors/blob.interceptor.js +67 -28
  17. package/esm2015/interceptors/cache.interceptor.js +46 -14
  18. package/esm2015/interceptors/error.interceptor.js +104 -12
  19. package/esm2015/interceptors/public-api.js +2 -1
  20. package/esm2015/interceptors/token.interceptor.js +66 -53
  21. package/esm2015/interceptors/types.js +5 -0
  22. package/esm2015/utils/array.js +42 -22
  23. package/esm2015/utils/dom.js +29 -11
  24. package/esm2015/utils/form.js +44 -13
  25. package/esm2015/utils/store.js +101 -26
  26. package/fesm2015/reskin-core-directives.js +269 -103
  27. package/fesm2015/reskin-core-directives.js.map +1 -1
  28. package/fesm2015/reskin-core-guards.js +116 -29
  29. package/fesm2015/reskin-core-guards.js.map +1 -1
  30. package/fesm2015/reskin-core-interceptors.js +282 -102
  31. package/fesm2015/reskin-core-interceptors.js.map +1 -1
  32. package/fesm2015/reskin-core-utils.js +212 -68
  33. package/fesm2015/reskin-core-utils.js.map +1 -1
  34. package/guards/auth.guard.d.ts +85 -5
  35. package/interceptors/blob.interceptor.d.ts +30 -3
  36. package/interceptors/cache.interceptor.d.ts +28 -4
  37. package/interceptors/error.interceptor.d.ts +43 -2
  38. package/interceptors/public-api.d.ts +1 -0
  39. package/interceptors/token.interceptor.d.ts +35 -18
  40. package/interceptors/types.d.ts +68 -0
  41. package/package.json +1 -1
  42. package/utils/array.d.ts +8 -1
  43. package/utils/dom.d.ts +32 -5
  44. package/utils/form.d.ts +37 -2
  45. package/utils/store.d.ts +56 -15
@@ -1,25 +1,91 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { HTTP_INTERCEPTORS } from '@angular/common/http';
3
- import { of } from 'rxjs';
3
+ import { throwError } from 'rxjs';
4
4
  import { catchError } from 'rxjs/operators';
5
+ import { Router } from '@angular/router';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@angular/router";
8
+ /**
9
+ * 默认配置
10
+ */
11
+ const DEFAULT_CONFIG = {
12
+ unauthorizedPath: '/errors/401',
13
+ enableLogging: false,
14
+ };
15
+ /**
16
+ * HTTP 错误拦截器
17
+ * 统一处理 HTTP 请求错误,包括 401 未授权错误的自动跳转
18
+ */
7
19
  export class ErrorInterceptor {
8
20
  constructor(router) {
9
21
  this.router = router;
22
+ this.config = DEFAULT_CONFIG;
23
+ }
24
+ /**
25
+ * 设置拦截器配置
26
+ * @param config 配置对象
27
+ */
28
+ setConfig(config) {
29
+ this.config = Object.assign(Object.assign({}, DEFAULT_CONFIG), config);
10
30
  }
31
+ /**
32
+ * 拦截 HTTP 请求,处理错误响应
33
+ * @param request HTTP 请求对象
34
+ * @param next 下一个拦截器处理器
35
+ * @returns Observable<HttpEvent<unknown>>
36
+ */
11
37
  intercept(request, next) {
12
- return next.handle(request).pipe(catchError((result) => {
13
- var _a;
14
- if (result.status === 401) {
15
- this.router.navigate(['/errors/401']).then();
38
+ return next.handle(request).pipe(catchError((error) => {
39
+ // 处理 401 未授权错误
40
+ if (error.status === 401) {
41
+ this.handleUnauthorizedError();
42
+ return throwError(error);
16
43
  }
17
- if (result.error.code) {
18
- return of(result.error);
44
+ // 记录错误日志
45
+ if (this.config.enableLogging) {
46
+ console.error('[HTTP Error]', {
47
+ url: request.url,
48
+ method: request.method,
49
+ status: error.status,
50
+ message: error.message,
51
+ error: error.error,
52
+ });
19
53
  }
20
- throw (_a = result.error.msg) !== null && _a !== void 0 ? _a : result.message;
54
+ // 提取错误信息
55
+ const errorMessage = this.extractErrorMessage(error);
56
+ return throwError(new Error(errorMessage));
21
57
  }));
22
58
  }
59
+ /**
60
+ * 处理 401 未授权错误
61
+ */
62
+ handleUnauthorizedError() {
63
+ const path = this.config.unauthorizedPath || DEFAULT_CONFIG.unauthorizedPath;
64
+ this.router.navigate([path]).catch((err) => {
65
+ console.error('导航到错误页面失败:', err);
66
+ });
67
+ }
68
+ /**
69
+ * 提取错误信息
70
+ * @param error HTTP 错误响应
71
+ * @returns 错误信息字符串
72
+ */
73
+ extractErrorMessage(error) {
74
+ if (error.error) {
75
+ // 尝试从 error.error 中提取信息
76
+ if (typeof error.error === 'string') {
77
+ return error.error;
78
+ }
79
+ if (error.error.msg) {
80
+ return error.error.msg;
81
+ }
82
+ if (error.error.message) {
83
+ return error.error.message;
84
+ }
85
+ }
86
+ // 使用默认错误信息
87
+ return error.message || `HTTP Error ${error.status}`;
88
+ }
23
89
  }
24
90
  ErrorInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ErrorInterceptor, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
25
91
  ErrorInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ErrorInterceptor });
@@ -27,9 +93,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
27
93
  type: Injectable
28
94
  }], ctorParameters: function () { return [{ type: i1.Router }]; } });
29
95
  /**
30
- * 请求错误拦截器
96
+ * 提供 HTTP 错误拦截器
97
+ * @param config 可选的配置对象
98
+ * @returns Provider 配置对象
99
+ * @example
100
+ * providers: [
101
+ * providerHttpError({ unauthorizedPath: '/login', enableLogging: true })
102
+ * ]
31
103
  */
32
- export function providerHttpError() {
33
- return { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true };
104
+ export function providerHttpError(config) {
105
+ if (config) {
106
+ // 如果有配置,使用 useFactory
107
+ return {
108
+ provide: HTTP_INTERCEPTORS,
109
+ useFactory: (router) => {
110
+ const interceptor = new ErrorInterceptor(router);
111
+ interceptor.setConfig(config);
112
+ return interceptor;
113
+ },
114
+ deps: [Router],
115
+ multi: true,
116
+ };
117
+ }
118
+ else {
119
+ // 没有配置,直接使用 useClass
120
+ return {
121
+ provide: HTTP_INTERCEPTORS,
122
+ useClass: ErrorInterceptor,
123
+ multi: true,
124
+ };
125
+ }
34
126
  }
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJ5L2NvcmUvaW50ZXJjZXB0b3JzL2Vycm9yLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUF3RCxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9HLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFJNUMsTUFBTSxPQUFPLGdCQUFnQjtJQUN6QixZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUFHLENBQUM7SUFFdEMsU0FBUyxDQUFDLE9BQTZCLEVBQUUsSUFBaUI7UUFDdEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDNUIsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7O1lBQ2xCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNoRDtZQUNELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7Z0JBQ25CLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMzQjtZQUNELE1BQU0sTUFBQSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsbUNBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs7OEdBZlEsZ0JBQWdCO2tIQUFoQixnQkFBZ0I7NEZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVTs7QUFtQlg7O0dBRUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCO0lBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNuRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwUmVxdWVzdCwgSHR0cEhhbmRsZXIsIEh0dHBFdmVudCwgSHR0cEludGVyY2VwdG9yLCBIVFRQX0lOVEVSQ0VQVE9SUyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEVycm9ySW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge31cclxuXHJcbiAgICBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+IHtcclxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gNDAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvZXJyb3JzLzQwMSddKS50aGVuKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yLmNvZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YocmVzdWx0LmVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvci5tc2cgPz8gcmVzdWx0Lm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDor7fmsYLplJnor6/mi6bmiKrlmahcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlckh0dHBFcnJvcigpIHtcclxuICAgIHJldHVybiB7IHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLCB1c2VDbGFzczogRXJyb3JJbnRlcmNlcHRvciwgbXVsdGk6IHRydWUgfTtcclxufVxyXG4iXX0=
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJ5L2NvcmUvaW50ZXJjZXB0b3JzL2Vycm9yLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUF3RCxpQkFBaUIsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUNsSSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUd6Qzs7R0FFRztBQUNILE1BQU0sY0FBYyxHQUEyQjtJQUMzQyxnQkFBZ0IsRUFBRSxhQUFhO0lBQy9CLGFBQWEsRUFBRSxLQUFLO0NBQ3ZCLENBQUM7QUFFRjs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCO0lBR3pCLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRjFCLFdBQU0sR0FBMkIsY0FBYyxDQUFDO0lBRW5CLENBQUM7SUFFdEM7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLE1BQThCO1FBQ3BDLElBQUksQ0FBQyxNQUFNLG1DQUFRLGNBQWMsR0FBSyxNQUFNLENBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFTLENBQUMsT0FBNkIsRUFBRSxJQUFpQjtRQUN0RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM1QixVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUU7WUFDcEMsZUFBZTtZQUNmLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUMvQixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM1QjtZQUVELFNBQVM7WUFDVCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFO2dCQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRTtvQkFDMUIsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO29CQUNoQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07b0JBQ3RCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtvQkFDcEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO29CQUN0QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7aUJBQ3JCLENBQUMsQ0FBQzthQUNOO1lBRUQsU0FBUztZQUNULE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSyx1QkFBdUI7UUFDM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxjQUFjLENBQUMsZ0JBQWdCLENBQUM7UUFDN0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3ZDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxtQkFBbUIsQ0FBQyxLQUF3QjtRQUNoRCxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDYix3QkFBd0I7WUFDeEIsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUNqQyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUM7YUFDdEI7WUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNqQixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2FBQzFCO1lBQ0QsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtnQkFDckIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQzthQUM5QjtTQUNKO1FBQ0QsV0FBVztRQUNYLE9BQU8sS0FBSyxDQUFDLE9BQU8sSUFBSSxjQUFjLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN6RCxDQUFDOzs4R0E1RVEsZ0JBQWdCO2tIQUFoQixnQkFBZ0I7NEZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVTs7QUFnRlg7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBK0I7SUFDN0QsSUFBSSxNQUFNLEVBQUU7UUFDUixzQkFBc0I7UUFDdEIsT0FBTztZQUNILE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsVUFBVSxFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sV0FBVyxHQUFHLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2pELFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlCLE9BQU8sV0FBVyxDQUFDO1lBQ3ZCLENBQUM7WUFDRCxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDZCxLQUFLLEVBQUUsSUFBSTtTQUNkLENBQUM7S0FDTDtTQUFNO1FBQ0gscUJBQXFCO1FBQ3JCLE9BQU87WUFDSCxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFFBQVEsRUFBRSxnQkFBZ0I7WUFDMUIsS0FBSyxFQUFFLElBQUk7U0FDZCxDQUFDO0tBQ0w7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwUmVxdWVzdCwgSHR0cEhhbmRsZXIsIEh0dHBFdmVudCwgSHR0cEludGVyY2VwdG9yLCBIVFRQX0lOVEVSQ0VQVE9SUywgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRXJyb3JJbnRlcmNlcHRvckNvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xyXG5cclxuLyoqXHJcbiAqIOm7mOiupOmFjee9rlxyXG4gKi9cclxuY29uc3QgREVGQVVMVF9DT05GSUc6IEVycm9ySW50ZXJjZXB0b3JDb25maWcgPSB7XHJcbiAgICB1bmF1dGhvcml6ZWRQYXRoOiAnL2Vycm9ycy80MDEnLFxyXG4gICAgZW5hYmxlTG9nZ2luZzogZmFsc2UsXHJcbn07XHJcblxyXG4vKipcclxuICogSFRUUCDplJnor6/mi6bmiKrlmahcclxuICog57uf5LiA5aSE55CGIEhUVFAg6K+35rGC6ZSZ6K+v77yM5YyF5ousIDQwMSDmnKrmjojmnYPplJnor6/nmoToh6rliqjot7PovaxcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEVycm9ySW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG4gICAgcHJpdmF0ZSBjb25maWc6IEVycm9ySW50ZXJjZXB0b3JDb25maWcgPSBERUZBVUxUX0NPTkZJRztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog6K6+572u5oum5oiq5Zmo6YWN572uXHJcbiAgICAgKiBAcGFyYW0gY29uZmlnIOmFjee9ruWvueixoVxyXG4gICAgICovXHJcbiAgICBzZXRDb25maWcoY29uZmlnOiBFcnJvckludGVyY2VwdG9yQ29uZmlnKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5jb25maWcgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOaLpuaIqiBIVFRQIOivt+axgu+8jOWkhOeQhumUmeivr+WTjeW6lFxyXG4gICAgICogQHBhcmFtIHJlcXVlc3QgSFRUUCDor7fmsYLlr7nosaFcclxuICAgICAqIEBwYXJhbSBuZXh0IOS4i+S4gOS4quaLpuaIquWZqOWkhOeQhuWZqFxyXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+XHJcbiAgICAgKi9cclxuICAgIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xyXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIOWkhOeQhiA0MDEg5pyq5o6I5p2D6ZSZ6K+vXHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVVuYXV0aG9yaXplZEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIOiusOW9lemUmeivr+aXpeW/l1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmVuYWJsZUxvZ2dpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbSFRUUCBFcnJvcl0nLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcmVxdWVzdC51cmwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IuZXJyb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8g5o+Q5Y+W6ZSZ6K+v5L+h5oGvXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB0aGlzLmV4dHJhY3RFcnJvck1lc3NhZ2UoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IobmV3IEVycm9yKGVycm9yTWVzc2FnZSkpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5aSE55CGIDQwMSDmnKrmjojmnYPplJnor69cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVVbmF1dGhvcml6ZWRFcnJvcigpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5jb25maWcudW5hdXRob3JpemVkUGF0aCB8fCBERUZBVUxUX0NPTkZJRy51bmF1dGhvcml6ZWRQYXRoO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoXSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCflr7zoiKrliLDplJnor6/pobXpnaLlpLHotKU6JywgZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOaPkOWPlumUmeivr+S/oeaBr1xyXG4gICAgICogQHBhcmFtIGVycm9yIEhUVFAg6ZSZ6K+v5ZON5bqUXHJcbiAgICAgKiBAcmV0dXJucyDplJnor6/kv6Hmga/lrZfnrKbkuLJcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBleHRyYWN0RXJyb3JNZXNzYWdlKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGVycm9yLmVycm9yKSB7XHJcbiAgICAgICAgICAgIC8vIOWwneivleS7jiBlcnJvci5lcnJvciDkuK3mj5Dlj5bkv6Hmga9cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBlcnJvci5lcnJvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvci5lcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXJyb3IuZXJyb3IubXNnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IuZXJyb3IubXNnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlcnJvci5lcnJvci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IuZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyDkvb/nlKjpu5jorqTplJnor6/kv6Hmga9cclxuICAgICAgICByZXR1cm4gZXJyb3IubWVzc2FnZSB8fCBgSFRUUCBFcnJvciAke2Vycm9yLnN0YXR1c31gO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICog5o+Q5L6bIEhUVFAg6ZSZ6K+v5oum5oiq5ZmoXHJcbiAqIEBwYXJhbSBjb25maWcg5Y+v6YCJ55qE6YWN572u5a+56LGhXHJcbiAqIEByZXR1cm5zIFByb3ZpZGVyIOmFjee9ruWvueixoVxyXG4gKiBAZXhhbXBsZVxyXG4gKiBwcm92aWRlcnM6IFtcclxuICogICBwcm92aWRlckh0dHBFcnJvcih7IHVuYXV0aG9yaXplZFBhdGg6ICcvbG9naW4nLCBlbmFibGVMb2dnaW5nOiB0cnVlIH0pXHJcbiAqIF1cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlckh0dHBFcnJvcihjb25maWc/OiBFcnJvckludGVyY2VwdG9yQ29uZmlnKSB7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgICAgLy8g5aaC5p6c5pyJ6YWN572u77yM5L2/55SoIHVzZUZhY3RvcnlcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUyxcclxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKHJvdXRlcjogUm91dGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IG5ldyBFcnJvckludGVyY2VwdG9yKHJvdXRlcik7XHJcbiAgICAgICAgICAgICAgICBpbnRlcmNlcHRvci5zZXRDb25maWcoY29uZmlnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcmNlcHRvcjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGVwczogW1JvdXRlcl0sXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOayoeaciemFjee9ru+8jOebtOaOpeS9v+eUqCB1c2VDbGFzc1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLFxyXG4gICAgICAgICAgICB1c2VDbGFzczogRXJyb3JJbnRlcmNlcHRvcixcclxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,5 +1,6 @@
1
+ export * from './types';
1
2
  export * from './token.interceptor';
2
3
  export * from './error.interceptor';
3
4
  export * from './cache.interceptor';
4
5
  export * from './blob.interceptor';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvY29yZS9pbnRlcmNlcHRvcnMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90b2tlbi5pbnRlcmNlcHRvcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3IuaW50ZXJjZXB0b3InO1xyXG5leHBvcnQgKiBmcm9tICcuL2NhY2hlLmludGVyY2VwdG9yJztcclxuZXhwb3J0ICogZnJvbSAnLi9ibG9iLmludGVyY2VwdG9yJztcclxuIl19
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvY29yZS9pbnRlcmNlcHRvcnMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdG9rZW4uaW50ZXJjZXB0b3InO1xyXG5leHBvcnQgKiBmcm9tICcuL2Vycm9yLmludGVyY2VwdG9yJztcclxuZXhwb3J0ICogZnJvbSAnLi9jYWNoZS5pbnRlcmNlcHRvcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vYmxvYi5pbnRlcmNlcHRvcic7XHJcbiJdfQ==
@@ -2,39 +2,54 @@ import { Injectable } from '@angular/core';
2
2
  import { HTTP_INTERCEPTORS, HttpHeaders } from '@angular/common/http';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@reskin/core/services";
5
- // 定义默认的 token header 名称
5
+ /**
6
+ * Token 拦截器常量
7
+ */
6
8
  const DEFAULT_TOKEN_HEADER_NAME = 'Authorization';
7
9
  const TOKEN_CONTROL_HEADER = 'Token-Control';
8
10
  const CUSTOM_TOKEN_HEADER = 'Custom-Token';
9
11
  const CUSTOM_TOKEN_HEADER_NAME = 'Custom-Token-Header';
10
12
  const AUTH_ID_HEADER = 'X-Auth-Id';
13
+ /**
14
+ * Token 拦截器
15
+ * 自动为 HTTP 请求添加认证 Token
16
+ */
11
17
  export class TokenInterceptor {
12
- constructor(service) {
13
- this.service = service;
18
+ constructor(authService) {
19
+ this.authService = authService;
14
20
  }
21
+ /**
22
+ * 拦截 HTTP 请求,添加 Token 认证信息
23
+ * @param request HTTP 请求对象
24
+ * @param next 下一个拦截器处理器
25
+ * @returns Observable<HttpEvent<unknown>>
26
+ */
15
27
  intercept(request, next) {
16
- const tc = request.headers.get(TOKEN_CONTROL_HEADER);
17
- // 检查是否提供了自定义token
28
+ const tokenControl = request.headers.get(TOKEN_CONTROL_HEADER);
29
+ // 如果明确指定不需要 Token,直接放行
30
+ if (tokenControl === 'no-token') {
31
+ return next.handle(request);
32
+ }
18
33
  const customToken = request.headers.get(CUSTOM_TOKEN_HEADER);
19
- // 检查是否提供了自定义token header名称
20
34
  const customTokenHeaderName = request.headers.get(CUSTOM_TOKEN_HEADER_NAME) || DEFAULT_TOKEN_HEADER_NAME;
21
- if (tc !== 'no-token') {
22
- let headers = {};
23
- if (customToken) {
24
- // 使用自定义token
25
- headers[customTokenHeaderName] = customToken;
26
- }
27
- else {
28
- // 使用默认认证信息
29
- const auth = this.service.token;
30
- if (auth.token) {
31
- headers[DEFAULT_TOKEN_HEADER_NAME] = auth.token;
35
+ const headers = {};
36
+ if (customToken) {
37
+ // 使用自定义 Token
38
+ headers[customTokenHeaderName] = customToken;
39
+ }
40
+ else {
41
+ // 使用默认认证信息
42
+ const auth = this.authService.token;
43
+ if (auth === null || auth === void 0 ? void 0 : auth.token) {
44
+ headers[DEFAULT_TOKEN_HEADER_NAME] = auth.token;
45
+ if (auth.id) {
32
46
  headers[AUTH_ID_HEADER] = auth.id;
33
47
  }
34
48
  }
35
- if (Object.keys(headers).length > 0) {
36
- request = request.clone({ setHeaders: headers });
37
- }
49
+ }
50
+ // 如果有需要添加的 Header,克隆请求并添加
51
+ if (Object.keys(headers).length > 0) {
52
+ request = request.clone({ setHeaders: headers });
38
53
  }
39
54
  return next.handle(request);
40
55
  }
@@ -45,59 +60,57 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
45
60
  type: Injectable
46
61
  }], ctorParameters: function () { return [{ type: i1.RkAuthService }]; } });
47
62
  /**
48
- * 请求头增加token验证拦截器
63
+ * 提供 Token 拦截器
64
+ * @returns Provider 配置对象
49
65
  */
50
66
  export function providerAuthToken() {
51
67
  return { provide: HTTP_INTERCEPTORS, useClass: TokenInterceptor, multi: true };
52
68
  }
53
69
  /**
54
- * 不带token验证信息请求
55
- * @param urls 地址
56
- * @param params 参数
57
- * @constructor
70
+ * 创建不带 Token 的请求配置
71
+ * @param urls 模板字符串数组
72
+ * @param params 模板参数
73
+ * @returns [url, options] 元组
74
+ * @example
75
+ * this.http.get(...NoAuthTokenTemplate`/api/public/data`).subscribe();
58
76
  */
59
77
  export function NoAuthTokenTemplate(urls, ...params) {
60
- let [url] = urls;
61
- if (params.length > 0) {
62
- url = String.raw(urls, ...params);
63
- }
64
- return [url, { headers: new HttpHeaders({ 'Token-Control': 'no-token' }) }];
78
+ const url = params.length > 0 ? String.raw(urls, ...params) : urls[0];
79
+ return [url, { headers: new HttpHeaders({ [TOKEN_CONTROL_HEADER]: 'no-token' }) }];
65
80
  }
66
81
  /**
67
- * 使用自定义token的请求
68
- * @param token 自定义token
69
- * @param urls 地址
70
- * @param params 参数
71
- * @constructor
82
+ * 创建使用自定义 Token 的请求配置
83
+ * @param token 自定义 Token
84
+ * @param urls 模板字符串数组
85
+ * @param params 模板参数
86
+ * @returns [url, options] 元组
87
+ * @example
88
+ * this.http.get(...CustomTokenTemplate('my-token', `/api/data`)).subscribe();
72
89
  */
73
90
  export function CustomTokenTemplate(token, urls, ...params) {
74
- let [url] = urls;
75
- if (params.length > 0) {
76
- url = String.raw(urls, ...params);
77
- }
78
- return [url, { headers: new HttpHeaders({ 'Custom-Token': token }) }];
91
+ const url = params.length > 0 ? String.raw(urls, ...params) : urls[0];
92
+ return [url, { headers: new HttpHeaders({ [CUSTOM_TOKEN_HEADER]: token }) }];
79
93
  }
80
94
  /**
81
- * 使用自定义token和自定义header名称的请求
82
- * @param token 自定义token
83
- * @param headerName 自定义header名称
84
- * @param urls 地址
85
- * @param params 参数
86
- * @constructor
95
+ * 创建使用自定义 Token 和自定义 Header 名称的请求配置
96
+ * @param token 自定义 Token
97
+ * @param headerName 自定义 Header 名称
98
+ * @param urls 模板字符串数组
99
+ * @param params 模板参数
100
+ * @returns [url, options] 元组
101
+ * @example
102
+ * this.http.get(...CustomTokenWithHeaderTemplate('my-token', 'X-API-Key', `/api/data`)).subscribe();
87
103
  */
88
104
  export function CustomTokenWithHeaderTemplate(token, headerName, urls, ...params) {
89
- let [url] = urls;
90
- if (params.length > 0) {
91
- url = String.raw(urls, ...params);
92
- }
105
+ const url = params.length > 0 ? String.raw(urls, ...params) : urls[0];
93
106
  return [
94
107
  url,
95
108
  {
96
109
  headers: new HttpHeaders({
97
- 'Custom-Token': token,
98
- 'Custom-Token-Header': headerName,
110
+ [CUSTOM_TOKEN_HEADER]: token,
111
+ [CUSTOM_TOKEN_HEADER_NAME]: headerName,
99
112
  }),
100
113
  },
101
114
  ];
102
115
  }
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJ5L2NvcmUvaW50ZXJjZXB0b3JzL3Rva2VuLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUF3RCxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBSzVILHdCQUF3QjtBQUN4QixNQUFNLHlCQUF5QixHQUFHLGVBQWUsQ0FBQztBQUNsRCxNQUFNLG9CQUFvQixHQUFHLGVBQWUsQ0FBQztBQUM3QyxNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztBQUMzQyxNQUFNLHdCQUF3QixHQUFHLHFCQUFxQixDQUFDO0FBQ3ZELE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQztBQUduQyxNQUFNLE9BQU8sZ0JBQWdCO0lBQ3pCLFlBQW9CLE9BQXNCO1FBQXRCLFlBQU8sR0FBUCxPQUFPLENBQWU7SUFBRyxDQUFDO0lBRTlDLFNBQVMsQ0FBQyxPQUE2QixFQUFFLElBQWlCO1FBQ3RELE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDckQsa0JBQWtCO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDN0QsMkJBQTJCO1FBQzNCLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsSUFBSSx5QkFBeUIsQ0FBQztRQUV6RyxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxPQUFPLEdBQTBDLEVBQUUsQ0FBQztZQUV4RCxJQUFJLFdBQVcsRUFBRTtnQkFDYixhQUFhO2dCQUNiLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLFdBQVcsQ0FBQzthQUNoRDtpQkFBTTtnQkFDSCxXQUFXO2dCQUNYLE1BQU0sSUFBSSxHQUFVLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUN2QyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1osT0FBTyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDaEQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7aUJBQ3JDO2FBQ0o7WUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDakMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUNwRDtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7OzhHQTlCUSxnQkFBZ0I7a0hBQWhCLGdCQUFnQjs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVOztBQWtDWDs7R0FFRztBQUNILE1BQU0sVUFBVSxpQkFBaUI7SUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ25GLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUEwQixFQUFFLEdBQUcsTUFBYTtJQUM1RSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDbkIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7S0FDckM7SUFDRCxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hGLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBYSxFQUFFLElBQTBCLEVBQUUsR0FBRyxNQUFhO0lBQzNGLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDakIsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNuQixHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztLQUNyQztJQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQ3pDLEtBQWEsRUFDYixVQUFrQixFQUNsQixJQUEwQixFQUMxQixHQUFHLE1BQWE7SUFFaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNqQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ25CLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0tBQ3JDO0lBQ0QsT0FBTztRQUNILEdBQUc7UUFDSDtZQUNJLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQztnQkFDckIsY0FBYyxFQUFFLEtBQUs7Z0JBQ3JCLHFCQUFxQixFQUFFLFVBQVU7YUFDcEMsQ0FBQztTQUNMO0tBQ0osQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBSZXF1ZXN0LCBIdHRwSGFuZGxlciwgSHR0cEV2ZW50LCBIdHRwSW50ZXJjZXB0b3IsIEhUVFBfSU5URVJDRVBUT1JTLCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSa0F1dGhTZXJ2aWNlIH0gZnJvbSAnQHJlc2tpbi9jb3JlL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgSUF1dGggfSBmcm9tICdAcmVza2luL2NvcmUvZW50aXR5L3VzZXInO1xyXG5cclxuLy8g5a6a5LmJ6buY6K6k55qEIHRva2VuIGhlYWRlciDlkI3np7BcclxuY29uc3QgREVGQVVMVF9UT0tFTl9IRUFERVJfTkFNRSA9ICdBdXRob3JpemF0aW9uJztcclxuY29uc3QgVE9LRU5fQ09OVFJPTF9IRUFERVIgPSAnVG9rZW4tQ29udHJvbCc7XHJcbmNvbnN0IENVU1RPTV9UT0tFTl9IRUFERVIgPSAnQ3VzdG9tLVRva2VuJztcclxuY29uc3QgQ1VTVE9NX1RPS0VOX0hFQURFUl9OQU1FID0gJ0N1c3RvbS1Ub2tlbi1IZWFkZXInO1xyXG5jb25zdCBBVVRIX0lEX0hFQURFUiA9ICdYLUF1dGgtSWQnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVG9rZW5JbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2U6IFJrQXV0aFNlcnZpY2UpIHt9XHJcblxyXG4gICAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiB7XHJcbiAgICAgICAgY29uc3QgdGMgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KFRPS0VOX0NPTlRST0xfSEVBREVSKTtcclxuICAgICAgICAvLyDmo4Dmn6XmmK/lkKbmj5Dkvpvkuoboh6rlrprkuYl0b2tlblxyXG4gICAgICAgIGNvbnN0IGN1c3RvbVRva2VuID0gcmVxdWVzdC5oZWFkZXJzLmdldChDVVNUT01fVE9LRU5fSEVBREVSKTtcclxuICAgICAgICAvLyDmo4Dmn6XmmK/lkKbmj5Dkvpvkuoboh6rlrprkuYl0b2tlbiBoZWFkZXLlkI3np7BcclxuICAgICAgICBjb25zdCBjdXN0b21Ub2tlbkhlYWRlck5hbWUgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KENVU1RPTV9UT0tFTl9IRUFERVJfTkFNRSkgfHwgREVGQVVMVF9UT0tFTl9IRUFERVJfTkFNRTtcclxuXHJcbiAgICAgICAgaWYgKHRjICE9PSAnbm8tdG9rZW4nKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9ID0ge307XHJcblxyXG4gICAgICAgICAgICBpZiAoY3VzdG9tVG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIC8vIOS9v+eUqOiHquWumuS5iXRva2VuXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzW2N1c3RvbVRva2VuSGVhZGVyTmFtZV0gPSBjdXN0b21Ub2tlbjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIOS9v+eUqOm7mOiupOiupOivgeS/oeaBr1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aDogSUF1dGggPSB0aGlzLnNlcnZpY2UudG9rZW47XHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0aC50b2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbREVGQVVMVF9UT0tFTl9IRUFERVJfTkFNRV0gPSBhdXRoLnRva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbQVVUSF9JRF9IRUFERVJdID0gYXV0aC5pZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGhlYWRlcnMpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHsgc2V0SGVhZGVyczogaGVhZGVycyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDor7fmsYLlpLTlop7liqB0b2tlbumqjOivgeaLpuaIquWZqFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVyQXV0aFRva2VuKCkge1xyXG4gICAgcmV0dXJuIHsgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsIHVzZUNsYXNzOiBUb2tlbkludGVyY2VwdG9yLCBtdWx0aTogdHJ1ZSB9O1xyXG59XHJcblxyXG4vKipcclxuICog5LiN5bimdG9rZW7pqozor4Hkv6Hmga/or7fmsYJcclxuICogQHBhcmFtIHVybHMg5Zyw5Z2AXHJcbiAqIEBwYXJhbSBwYXJhbXMg5Y+C5pWwXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIE5vQXV0aFRva2VuVGVtcGxhdGUodXJsczogVGVtcGxhdGVTdHJpbmdzQXJyYXksIC4uLnBhcmFtczogYW55W10pOiBbc3RyaW5nLCB7IGhlYWRlcnM6IEh0dHBIZWFkZXJzIH1dIHtcclxuICAgIGxldCBbdXJsXSA9IHVybHM7XHJcbiAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB1cmwgPSBTdHJpbmcucmF3KHVybHMsIC4uLnBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW3VybCwgeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnVG9rZW4tQ29udHJvbCc6ICduby10b2tlbicgfSkgfV07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDkvb/nlKjoh6rlrprkuYl0b2tlbueahOivt+axglxyXG4gKiBAcGFyYW0gdG9rZW4g6Ieq5a6a5LmJdG9rZW7lgLxcclxuICogQHBhcmFtIHVybHMg5Zyw5Z2AXHJcbiAqIEBwYXJhbSBwYXJhbXMg5Y+C5pWwXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEN1c3RvbVRva2VuVGVtcGxhdGUodG9rZW46IHN0cmluZywgdXJsczogVGVtcGxhdGVTdHJpbmdzQXJyYXksIC4uLnBhcmFtczogYW55W10pOiBbc3RyaW5nLCB7IGhlYWRlcnM6IEh0dHBIZWFkZXJzIH1dIHtcclxuICAgIGxldCBbdXJsXSA9IHVybHM7XHJcbiAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB1cmwgPSBTdHJpbmcucmF3KHVybHMsIC4uLnBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW3VybCwgeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ3VzdG9tLVRva2VuJzogdG9rZW4gfSkgfV07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDkvb/nlKjoh6rlrprkuYl0b2tlbuWSjOiHquWumuS5iWhlYWRlcuWQjeensOeahOivt+axglxyXG4gKiBAcGFyYW0gdG9rZW4g6Ieq5a6a5LmJdG9rZW7lgLxcclxuICogQHBhcmFtIGhlYWRlck5hbWUg6Ieq5a6a5LmJaGVhZGVy5ZCN56ewXHJcbiAqIEBwYXJhbSB1cmxzIOWcsOWdgFxyXG4gKiBAcGFyYW0gcGFyYW1zIOWPguaVsFxyXG4gKiBAY29uc3RydWN0b3JcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBDdXN0b21Ub2tlbldpdGhIZWFkZXJUZW1wbGF0ZShcclxuICAgIHRva2VuOiBzdHJpbmcsXHJcbiAgICBoZWFkZXJOYW1lOiBzdHJpbmcsXHJcbiAgICB1cmxzOiBUZW1wbGF0ZVN0cmluZ3NBcnJheSxcclxuICAgIC4uLnBhcmFtczogYW55W11cclxuKTogW3N0cmluZywgeyBoZWFkZXJzOiBIdHRwSGVhZGVycyB9XSB7XHJcbiAgICBsZXQgW3VybF0gPSB1cmxzO1xyXG4gICAgaWYgKHBhcmFtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdXJsID0gU3RyaW5nLnJhdyh1cmxzLCAuLi5wYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICB1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICAgICAgICAgJ0N1c3RvbS1Ub2tlbic6IHRva2VuLFxyXG4gICAgICAgICAgICAgICAgJ0N1c3RvbS1Ub2tlbi1IZWFkZXInOiBoZWFkZXJOYW1lLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICB9LFxyXG4gICAgXTtcclxufVxyXG4iXX0=
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJ5L2NvcmUvaW50ZXJjZXB0b3JzL3Rva2VuLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUF3RCxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBSzVIOztHQUVHO0FBQ0gsTUFBTSx5QkFBeUIsR0FBRyxlQUFlLENBQUM7QUFDbEQsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUM7QUFDN0MsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUM7QUFDM0MsTUFBTSx3QkFBd0IsR0FBRyxxQkFBcUIsQ0FBQztBQUN2RCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUM7QUFFbkM7OztHQUdHO0FBRUgsTUFBTSxPQUFPLGdCQUFnQjtJQUN6QixZQUFvQixXQUEwQjtRQUExQixnQkFBVyxHQUFYLFdBQVcsQ0FBZTtJQUFHLENBQUM7SUFFbEQ7Ozs7O09BS0c7SUFDSCxTQUFTLENBQUMsT0FBNkIsRUFBRSxJQUFpQjtRQUN0RCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRS9ELHVCQUF1QjtRQUN2QixJQUFJLFlBQVksS0FBSyxVQUFVLEVBQUU7WUFDN0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQy9CO1FBRUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM3RCxNQUFNLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLElBQUkseUJBQXlCLENBQUM7UUFFekcsTUFBTSxPQUFPLEdBQTBDLEVBQUUsQ0FBQztRQUUxRCxJQUFJLFdBQVcsRUFBRTtZQUNiLGNBQWM7WUFDZCxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxXQUFXLENBQUM7U0FDaEQ7YUFBTTtZQUNILFdBQVc7WUFDWCxNQUFNLElBQUksR0FBVSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUMzQyxJQUFJLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxLQUFLLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDaEQsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO29CQUNULE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO2lCQUNyQzthQUNKO1NBQ0o7UUFFRCwwQkFBMEI7UUFDMUIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUNwRDtRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs4R0ExQ1EsZ0JBQWdCO2tIQUFoQixnQkFBZ0I7NEZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVTs7QUE4Q1g7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQjtJQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDbkYsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBMEIsRUFBRSxHQUFHLE1BQWE7SUFDNUUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsSUFBMEIsRUFBRSxHQUFHLE1BQWE7SUFDM0YsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQ3pDLEtBQWEsRUFDYixVQUFrQixFQUNsQixJQUEwQixFQUMxQixHQUFHLE1BQWE7SUFFaEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxPQUFPO1FBQ0gsR0FBRztRQUNIO1lBQ0ksT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDO2dCQUNyQixDQUFDLG1CQUFtQixDQUFDLEVBQUUsS0FBSztnQkFDNUIsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLFVBQVU7YUFDekMsQ0FBQztTQUNMO0tBQ0osQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBSZXF1ZXN0LCBIdHRwSGFuZGxlciwgSHR0cEV2ZW50LCBIdHRwSW50ZXJjZXB0b3IsIEhUVFBfSU5URVJDRVBUT1JTLCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSa0F1dGhTZXJ2aWNlIH0gZnJvbSAnQHJlc2tpbi9jb3JlL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgSUF1dGggfSBmcm9tICdAcmVza2luL2NvcmUvZW50aXR5L3VzZXInO1xyXG5cclxuLyoqXHJcbiAqIFRva2VuIOaLpuaIquWZqOW4uOmHj1xyXG4gKi9cclxuY29uc3QgREVGQVVMVF9UT0tFTl9IRUFERVJfTkFNRSA9ICdBdXRob3JpemF0aW9uJztcclxuY29uc3QgVE9LRU5fQ09OVFJPTF9IRUFERVIgPSAnVG9rZW4tQ29udHJvbCc7XHJcbmNvbnN0IENVU1RPTV9UT0tFTl9IRUFERVIgPSAnQ3VzdG9tLVRva2VuJztcclxuY29uc3QgQ1VTVE9NX1RPS0VOX0hFQURFUl9OQU1FID0gJ0N1c3RvbS1Ub2tlbi1IZWFkZXInO1xyXG5jb25zdCBBVVRIX0lEX0hFQURFUiA9ICdYLUF1dGgtSWQnO1xyXG5cclxuLyoqXHJcbiAqIFRva2VuIOaLpuaIquWZqFxyXG4gKiDoh6rliqjkuLogSFRUUCDor7fmsYLmt7vliqDorqTor4EgVG9rZW5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRva2VuSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogUmtBdXRoU2VydmljZSkge31cclxuXHJcbiAgICAvKipcclxuICAgICAqIOaLpuaIqiBIVFRQIOivt+axgu+8jOa3u+WKoCBUb2tlbiDorqTor4Hkv6Hmga9cclxuICAgICAqIEBwYXJhbSByZXF1ZXN0IEhUVFAg6K+35rGC5a+56LGhXHJcbiAgICAgKiBAcGFyYW0gbmV4dCDkuIvkuIDkuKrmi6bmiKrlmajlpITnkIblmahcclxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PlxyXG4gICAgICovXHJcbiAgICBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+IHtcclxuICAgICAgICBjb25zdCB0b2tlbkNvbnRyb2wgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KFRPS0VOX0NPTlRST0xfSEVBREVSKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyDlpoLmnpzmmI7noa7mjIflrprkuI3pnIDopoEgVG9rZW7vvIznm7TmjqXmlL7ooYxcclxuICAgICAgICBpZiAodG9rZW5Db250cm9sID09PSAnbm8tdG9rZW4nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGN1c3RvbVRva2VuID0gcmVxdWVzdC5oZWFkZXJzLmdldChDVVNUT01fVE9LRU5fSEVBREVSKTtcclxuICAgICAgICBjb25zdCBjdXN0b21Ub2tlbkhlYWRlck5hbWUgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KENVU1RPTV9UT0tFTl9IRUFERVJfTkFNRSkgfHwgREVGQVVMVF9UT0tFTl9IRUFERVJfTkFNRTtcclxuXHJcbiAgICAgICAgY29uc3QgaGVhZGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSA9IHt9O1xyXG5cclxuICAgICAgICBpZiAoY3VzdG9tVG9rZW4pIHtcclxuICAgICAgICAgICAgLy8g5L2/55So6Ieq5a6a5LmJIFRva2VuXHJcbiAgICAgICAgICAgIGhlYWRlcnNbY3VzdG9tVG9rZW5IZWFkZXJOYW1lXSA9IGN1c3RvbVRva2VuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIOS9v+eUqOm7mOiupOiupOivgeS/oeaBr1xyXG4gICAgICAgICAgICBjb25zdCBhdXRoOiBJQXV0aCA9IHRoaXMuYXV0aFNlcnZpY2UudG9rZW47XHJcbiAgICAgICAgICAgIGlmIChhdXRoPy50b2tlbikge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyc1tERUZBVUxUX1RPS0VOX0hFQURFUl9OQU1FXSA9IGF1dGgudG9rZW47XHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0aC5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbQVVUSF9JRF9IRUFERVJdID0gYXV0aC5pZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5aaC5p6c5pyJ6ZyA6KaB5re75Yqg55qEIEhlYWRlcu+8jOWFi+mahuivt+axguW5tua3u+WKoFxyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhoZWFkZXJzKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHsgc2V0SGVhZGVyczogaGVhZGVycyB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOaPkOS+myBUb2tlbiDmi6bmiKrlmahcclxuICogQHJldHVybnMgUHJvdmlkZXIg6YWN572u5a+56LGhXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZXJBdXRoVG9rZW4oKSB7XHJcbiAgICByZXR1cm4geyBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUywgdXNlQ2xhc3M6IFRva2VuSW50ZXJjZXB0b3IsIG11bHRpOiB0cnVlIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDliJvlu7rkuI3luKYgVG9rZW4g55qE6K+35rGC6YWN572uXHJcbiAqIEBwYXJhbSB1cmxzIOaooeadv+Wtl+espuS4suaVsOe7hFxyXG4gKiBAcGFyYW0gcGFyYW1zIOaooeadv+WPguaVsFxyXG4gKiBAcmV0dXJucyBbdXJsLCBvcHRpb25zXSDlhYPnu4RcclxuICogQGV4YW1wbGVcclxuICogdGhpcy5odHRwLmdldCguLi5Ob0F1dGhUb2tlblRlbXBsYXRlYC9hcGkvcHVibGljL2RhdGFgKS5zdWJzY3JpYmUoKTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBOb0F1dGhUb2tlblRlbXBsYXRlKHVybHM6IFRlbXBsYXRlU3RyaW5nc0FycmF5LCAuLi5wYXJhbXM6IGFueVtdKTogW3N0cmluZywgeyBoZWFkZXJzOiBIdHRwSGVhZGVycyB9XSB7XHJcbiAgICBjb25zdCB1cmwgPSBwYXJhbXMubGVuZ3RoID4gMCA/IFN0cmluZy5yYXcodXJscywgLi4ucGFyYW1zKSA6IHVybHNbMF07XHJcbiAgICByZXR1cm4gW3VybCwgeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyBbVE9LRU5fQ09OVFJPTF9IRUFERVJdOiAnbm8tdG9rZW4nIH0pIH1dO1xyXG59XHJcblxyXG4vKipcclxuICog5Yib5bu65L2/55So6Ieq5a6a5LmJIFRva2VuIOeahOivt+axgumFjee9rlxyXG4gKiBAcGFyYW0gdG9rZW4g6Ieq5a6a5LmJIFRva2VuIOWAvFxyXG4gKiBAcGFyYW0gdXJscyDmqKHmnb/lrZfnrKbkuLLmlbDnu4RcclxuICogQHBhcmFtIHBhcmFtcyDmqKHmnb/lj4LmlbBcclxuICogQHJldHVybnMgW3VybCwgb3B0aW9uc10g5YWD57uEXHJcbiAqIEBleGFtcGxlXHJcbiAqIHRoaXMuaHR0cC5nZXQoLi4uQ3VzdG9tVG9rZW5UZW1wbGF0ZSgnbXktdG9rZW4nLCBgL2FwaS9kYXRhYCkpLnN1YnNjcmliZSgpO1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEN1c3RvbVRva2VuVGVtcGxhdGUodG9rZW46IHN0cmluZywgdXJsczogVGVtcGxhdGVTdHJpbmdzQXJyYXksIC4uLnBhcmFtczogYW55W10pOiBbc3RyaW5nLCB7IGhlYWRlcnM6IEh0dHBIZWFkZXJzIH1dIHtcclxuICAgIGNvbnN0IHVybCA9IHBhcmFtcy5sZW5ndGggPiAwID8gU3RyaW5nLnJhdyh1cmxzLCAuLi5wYXJhbXMpIDogdXJsc1swXTtcclxuICAgIHJldHVybiBbdXJsLCB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7IFtDVVNUT01fVE9LRU5fSEVBREVSXTogdG9rZW4gfSkgfV07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDliJvlu7rkvb/nlKjoh6rlrprkuYkgVG9rZW4g5ZKM6Ieq5a6a5LmJIEhlYWRlciDlkI3np7DnmoTor7fmsYLphY3nva5cclxuICogQHBhcmFtIHRva2VuIOiHquWumuS5iSBUb2tlbiDlgLxcclxuICogQHBhcmFtIGhlYWRlck5hbWUg6Ieq5a6a5LmJIEhlYWRlciDlkI3np7BcclxuICogQHBhcmFtIHVybHMg5qih5p2/5a2X56ym5Liy5pWw57uEXHJcbiAqIEBwYXJhbSBwYXJhbXMg5qih5p2/5Y+C5pWwXHJcbiAqIEByZXR1cm5zIFt1cmwsIG9wdGlvbnNdIOWFg+e7hFxyXG4gKiBAZXhhbXBsZVxyXG4gKiB0aGlzLmh0dHAuZ2V0KC4uLkN1c3RvbVRva2VuV2l0aEhlYWRlclRlbXBsYXRlKCdteS10b2tlbicsICdYLUFQSS1LZXknLCBgL2FwaS9kYXRhYCkpLnN1YnNjcmliZSgpO1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEN1c3RvbVRva2VuV2l0aEhlYWRlclRlbXBsYXRlKFxyXG4gICAgdG9rZW46IHN0cmluZyxcclxuICAgIGhlYWRlck5hbWU6IHN0cmluZyxcclxuICAgIHVybHM6IFRlbXBsYXRlU3RyaW5nc0FycmF5LFxyXG4gICAgLi4ucGFyYW1zOiBhbnlbXVxyXG4pOiBbc3RyaW5nLCB7IGhlYWRlcnM6IEh0dHBIZWFkZXJzIH1dIHtcclxuICAgIGNvbnN0IHVybCA9IHBhcmFtcy5sZW5ndGggPiAwID8gU3RyaW5nLnJhdyh1cmxzLCAuLi5wYXJhbXMpIDogdXJsc1swXTtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgdXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAgICAgICAgIFtDVVNUT01fVE9LRU5fSEVBREVSXTogdG9rZW4sXHJcbiAgICAgICAgICAgICAgICBbQ1VTVE9NX1RPS0VOX0hFQURFUl9OQU1FXTogaGVhZGVyTmFtZSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgfSxcclxuICAgIF07XHJcbn1cclxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * HTTP 拦截器相关类型定义
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJ5L2NvcmUvaW50ZXJjZXB0b3JzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEhUVFAg5oum5oiq5Zmo55u45YWz57G75Z6L5a6a5LmJXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRva2VuIOaLpuaIquWZqOmFjee9rlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBUb2tlbkludGVyY2VwdG9yQ29uZmlnIHtcclxuICAgIC8qKlxyXG4gICAgICog6buY6K6k55qEIFRva2VuIEhlYWRlciDlkI3np7BcclxuICAgICAqIEBkZWZhdWx0ICdBdXRob3JpemF0aW9uJ1xyXG4gICAgICovXHJcbiAgICB0b2tlbkhlYWRlck5hbWU/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIOiupOivgSBJRCBIZWFkZXIg5ZCN56ewXHJcbiAgICAgKiBAZGVmYXVsdCAnWC1BdXRoLUlkJ1xyXG4gICAgICovXHJcbiAgICBhdXRoSWRIZWFkZXJOYW1lPzogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICog6ZSZ6K+v5oum5oiq5Zmo6YWN572uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEVycm9ySW50ZXJjZXB0b3JDb25maWcge1xyXG4gICAgLyoqXHJcbiAgICAgKiA0MDEg6ZSZ6K+v6Lez6L2s6Lev5b6EXHJcbiAgICAgKiBAZGVmYXVsdCAnL2Vycm9ycy80MDEnXHJcbiAgICAgKi9cclxuICAgIHVuYXV0aG9yaXplZFBhdGg/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIOaYr+WQpuWQr+eUqOmUmeivr+aXpeW/l1xyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqL1xyXG4gICAgZW5hYmxlTG9nZ2luZz86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIOiHquWumuS5iemUmeivr+WkhOeQhuWHveaVsFxyXG4gICAgICovXHJcbiAgICBjdXN0b21FcnJvckhhbmRsZXI/OiAoZXJyb3I6IGFueSkgPT4gdm9pZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIOe8k+WtmOaLpuaIquWZqOmFjee9rlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDYWNoZUludGVyY2VwdG9yQ29uZmlnIHtcclxuICAgIC8qKlxyXG4gICAgICog57yT5a2Y5pyA5aSn5pWw6YePXHJcbiAgICAgKiBAZGVmYXVsdCAxMDBcclxuICAgICAqL1xyXG4gICAgbWF4Q2FjaGVTaXplPzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiDnvJPlrZjov4fmnJ/ml7bpl7TvvIjmr6vnp5LvvIlcclxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAo5rC45LiN6L+H5pyfKVxyXG4gICAgICovXHJcbiAgICBjYWNoZUV4cGlyYXRpb24/OiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBIVFRQIOivt+axgumAiemhueaJqeWxlVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBIdHRwUmVxdWVzdE9wdGlvbnMge1xyXG4gICAgaGVhZGVycz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUb2tlbiDmjqfliLbnsbvlnotcclxuICovXHJcbmV4cG9ydCB0eXBlIFRva2VuQ29udHJvbCA9ICduby10b2tlbicgfCAnY3VzdG9tLXRva2VuJztcclxuXHJcbi8qKlxyXG4gKiDnvJPlrZjnrZbnlaXnsbvlnotcclxuICovXHJcbmV4cG9ydCB0eXBlIENhY2hlU3RyYXRlZ3kgPSAnU3RvcmFnZScgfCAnTWVtb3J5JztcclxuIl19
@@ -1,40 +1,60 @@
1
1
  /**
2
2
  * 深克隆一个对象或数组
3
3
  *
4
- * 该函数通过递归方式深克隆输入的对象或数组,确保与原对象或数组隔离,不会相互影响
4
+ * 该函数通过递归方式深克隆输入的对象或数组,确保与原对象或数组隔离,不会相互影响。
5
+ * 支持克隆:普通对象、数组、Date、Map、Set、RegExp 等类型。
5
6
  *
6
7
  * @param source 需要克隆的源对象或数组
7
8
  * @returns 返回克隆后的对象或数组
9
+ *
10
+ * @example
11
+ * const obj = { a: 1, b: { c: 2 } };
12
+ * const cloned = deepClone(obj);
13
+ * cloned.b.c = 3;
14
+ * console.log(obj.b.c); // 输出: 2
8
15
  */
9
16
  export function deepClone(source) {
10
- // 如果源对象为null或不是对象类型,则直接返回源对象
17
+ // 处理 null 和基本类型
11
18
  if (source === null || typeof source !== 'object') {
12
19
  return source;
13
20
  }
14
- // 如果源对象是数组,则创建一个新数组并递归克隆每个元素
21
+ // 处理 Date 对象
22
+ if (source instanceof Date) {
23
+ return new Date(source.getTime());
24
+ }
25
+ // 处理 RegExp 对象
26
+ if (source instanceof RegExp) {
27
+ return new RegExp(source.source, source.flags);
28
+ }
29
+ // 处理 Map 对象
30
+ if (source instanceof Map) {
31
+ const clonedMap = new Map();
32
+ source.forEach((value, key) => {
33
+ clonedMap.set(deepClone(key), deepClone(value));
34
+ });
35
+ return clonedMap;
36
+ }
37
+ // 处理 Set 对象
38
+ if (source instanceof Set) {
39
+ const clonedSet = new Set();
40
+ source.forEach((value) => {
41
+ clonedSet.add(deepClone(value));
42
+ });
43
+ return clonedSet;
44
+ }
45
+ // 处理数组
15
46
  if (Array.isArray(source)) {
16
- const clonedArray = [];
17
- for (let i = 0; i < source.length; i++) {
18
- clonedArray[i] = deepClone(source[i]);
19
- }
20
- // 忽略类型检查器的警告,确保能够返回泛型T类型的数组
21
- // @ts-ignore
22
- return clonedArray;
47
+ return source.map((item) => deepClone(item));
23
48
  }
24
- // 如果源对象是普通对象,则创建一个新的空对象并递归克隆每个属性
25
- if (typeof source === 'object') {
49
+ // 处理普通对象
50
+ if (Object.prototype.toString.call(source) === '[object Object]') {
26
51
  const clonedObject = {};
27
- for (const key in source) {
28
- // 确保只处理对象自身的属性,避免原型链上的属性被克隆
29
- // @ts-ignore
30
- if (source.hasOwnProperty(key)) {
31
- clonedObject[key] = deepClone(source[key]);
32
- }
33
- }
34
- // 忽略类型检查器的警告,确保能够返回泛型T类型的对象
52
+ Object.keys(source).forEach((key) => {
53
+ clonedObject[key] = deepClone(source[key]);
54
+ });
35
55
  return clonedObject;
36
56
  }
37
- // 如果源对象是其他非对象类型,则直接返回源对象
57
+ // 其他类型直接返回(如函数、Symbol 等)
38
58
  return source;
39
59
  }
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJ5L2NvcmUvdXRpbHMvYXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUksTUFBUztJQUNsQyw2QkFBNkI7SUFDN0IsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtRQUMvQyxPQUFPLE1BQU0sQ0FBQztLQUNqQjtJQUVELDZCQUE2QjtJQUM3QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDdkIsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekM7UUFDRCw0QkFBNEI7UUFDNUIsYUFBYTtRQUNiLE9BQU8sV0FBZ0IsQ0FBQztLQUMzQjtJQUVELGlDQUFpQztJQUNqQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtRQUM1QixNQUFNLFlBQVksR0FBd0IsRUFBRSxDQUFDO1FBQzdDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFO1lBQ3RCLDRCQUE0QjtZQUM1QixhQUFhO1lBQ2IsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzlDO1NBQ0o7UUFDRCw0QkFBNEI7UUFDNUIsT0FBTyxZQUFpQixDQUFDO0tBQzVCO0lBRUQseUJBQXlCO0lBQ3pCLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICog5rex5YWL6ZqG5LiA5Liq5a+56LGh5oiW5pWw57uEXHJcbiAqXHJcbiAqIOivpeWHveaVsOmAmui/h+mAkuW9kuaWueW8j+a3seWFi+mahui+k+WFpeeahOWvueixoeaIluaVsOe7hO+8jOehruS/neS4juWOn+WvueixoeaIluaVsOe7hOmalOemu++8jOS4jeS8muebuOS6kuW9seWTjVxyXG4gKlxyXG4gKiBAcGFyYW0gc291cmNlIOmcgOimgeWFi+mahueahOa6kOWvueixoeaIluaVsOe7hFxyXG4gKiBAcmV0dXJucyDov5Tlm57lhYvpmoblkI7nmoTlr7nosaHmiJbmlbDnu4RcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ2xvbmU8VD4oc291cmNlOiBUKTogVCB7XHJcbiAgICAvLyDlpoLmnpzmupDlr7nosaHkuLpudWxs5oiW5LiN5piv5a+56LGh57G75Z6L77yM5YiZ55u05o6l6L+U5Zue5rqQ5a+56LGhXHJcbiAgICBpZiAoc291cmNlID09PSBudWxsIHx8IHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlpoLmnpzmupDlr7nosaHmmK/mlbDnu4TvvIzliJnliJvlu7rkuIDkuKrmlrDmlbDnu4TlubbpgJLlvZLlhYvpmobmr4/kuKrlhYPntKBcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcclxuICAgICAgICBjb25zdCBjbG9uZWRBcnJheSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNsb25lZEFycmF5W2ldID0gZGVlcENsb25lKHNvdXJjZVtpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIOW/veeVpeexu+Wei+ajgOafpeWZqOeahOitpuWRiu+8jOehruS/neiDveWkn+i/lOWbnuazm+Wei1TnsbvlnovnmoTmlbDnu4RcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgcmV0dXJuIGNsb25lZEFycmF5IGFzIFQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5aaC5p6c5rqQ5a+56LGh5piv5pmu6YCa5a+56LGh77yM5YiZ5Yib5bu65LiA5Liq5paw55qE56m65a+56LGh5bm26YCS5b2S5YWL6ZqG5q+P5Liq5bGe5oCnXHJcbiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBjb25zdCBjbG9uZWRPYmplY3Q6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcclxuICAgICAgICAgICAgLy8g56Gu5L+d5Y+q5aSE55CG5a+56LGh6Ieq6Lqr55qE5bGe5oCn77yM6YG/5YWN5Y6f5Z6L6ZO+5LiK55qE5bGe5oCn6KKr5YWL6ZqGXHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjbG9uZWRPYmplY3Rba2V5XSA9IGRlZXBDbG9uZShzb3VyY2Vba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8g5b+955Wl57G75Z6L5qOA5p+l5Zmo55qE6K2m5ZGK77yM56Gu5L+d6IO95aSf6L+U5Zue5rOb5Z6LVOexu+Wei+eahOWvueixoVxyXG4gICAgICAgIHJldHVybiBjbG9uZWRPYmplY3QgYXMgVDtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlpoLmnpzmupDlr7nosaHmmK/lhbbku5bpnZ7lr7nosaHnsbvlnovvvIzliJnnm7TmjqXov5Tlm57mupDlr7nosaFcclxuICAgIHJldHVybiBzb3VyY2U7XHJcbn1cclxuIl19
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJ5L2NvcmUvdXRpbHMvYXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFJLE1BQVM7SUFDbEMsZ0JBQWdCO0lBQ2hCLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDL0MsT0FBTyxNQUFNLENBQUM7S0FDakI7SUFFRCxhQUFhO0lBQ2IsSUFBSSxNQUFNLFlBQVksSUFBSSxFQUFFO1FBQ3hCLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFpQixDQUFDO0tBQ3JEO0lBRUQsZUFBZTtJQUNmLElBQUksTUFBTSxZQUFZLE1BQU0sRUFBRTtRQUMxQixPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBaUIsQ0FBQztLQUNsRTtJQUVELFlBQVk7SUFDWixJQUFJLE1BQU0sWUFBWSxHQUFHLEVBQUU7UUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM1QixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxTQUF5QixDQUFDO0tBQ3BDO0lBRUQsWUFBWTtJQUNaLElBQUksTUFBTSxZQUFZLEdBQUcsRUFBRTtRQUN2QixNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQixTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxTQUF5QixDQUFDO0tBQ3BDO0lBRUQsT0FBTztJQUNQLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN2QixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBaUIsQ0FBQztLQUNoRTtJQUVELFNBQVM7SUFDVCxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxpQkFBaUIsRUFBRTtRQUM5RCxNQUFNLFlBQVksR0FBRyxFQUFPLENBQUM7UUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMvQixZQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBRSxNQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDO0tBQ3ZCO0lBRUQseUJBQXlCO0lBQ3pCLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICog5rex5YWL6ZqG5LiA5Liq5a+56LGh5oiW5pWw57uEXHJcbiAqXHJcbiAqIOivpeWHveaVsOmAmui/h+mAkuW9kuaWueW8j+a3seWFi+mahui+k+WFpeeahOWvueixoeaIluaVsOe7hO+8jOehruS/neS4juWOn+WvueixoeaIluaVsOe7hOmalOemu++8jOS4jeS8muebuOS6kuW9seWTjeOAglxyXG4gKiDmlK/mjIHlhYvpmobvvJrmma7pgJrlr7nosaHjgIHmlbDnu4TjgIFEYXRl44CBTWFw44CBU2V044CBUmVnRXhwIOetieexu+Wei+OAglxyXG4gKlxyXG4gKiBAcGFyYW0gc291cmNlIOmcgOimgeWFi+mahueahOa6kOWvueixoeaIluaVsOe7hFxyXG4gKiBAcmV0dXJucyDov5Tlm57lhYvpmoblkI7nmoTlr7nosaHmiJbmlbDnu4RcclxuICpcclxuICogQGV4YW1wbGVcclxuICogY29uc3Qgb2JqID0geyBhOiAxLCBiOiB7IGM6IDIgfSB9O1xyXG4gKiBjb25zdCBjbG9uZWQgPSBkZWVwQ2xvbmUob2JqKTtcclxuICogY2xvbmVkLmIuYyA9IDM7XHJcbiAqIGNvbnNvbGUubG9nKG9iai5iLmMpOyAvLyDovpPlh7o6IDJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ2xvbmU8VD4oc291cmNlOiBUKTogVCB7XHJcbiAgICAvLyDlpITnkIYgbnVsbCDlkozln7rmnKznsbvlnotcclxuICAgIGlmIChzb3VyY2UgPT09IG51bGwgfHwgdHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICByZXR1cm4gc291cmNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWkhOeQhiBEYXRlIOWvueixoVxyXG4gICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoc291cmNlLmdldFRpbWUoKSkgYXMgdW5rbm93biBhcyBUO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWkhOeQhiBSZWdFeHAg5a+56LGhXHJcbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoc291cmNlLnNvdXJjZSwgc291cmNlLmZsYWdzKSBhcyB1bmtub3duIGFzIFQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5aSE55CGIE1hcCDlr7nosaFcclxuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBNYXApIHtcclxuICAgICAgICBjb25zdCBjbG9uZWRNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgc291cmNlLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgY2xvbmVkTWFwLnNldChkZWVwQ2xvbmUoa2V5KSwgZGVlcENsb25lKHZhbHVlKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNsb25lZE1hcCBhcyB1bmtub3duIGFzIFQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5aSE55CGIFNldCDlr7nosaFcclxuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBTZXQpIHtcclxuICAgICAgICBjb25zdCBjbG9uZWRTZXQgPSBuZXcgU2V0KCk7XHJcbiAgICAgICAgc291cmNlLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGNsb25lZFNldC5hZGQoZGVlcENsb25lKHZhbHVlKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNsb25lZFNldCBhcyB1bmtub3duIGFzIFQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5aSE55CG5pWw57uEXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XHJcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5tYXAoKGl0ZW0pID0+IGRlZXBDbG9uZShpdGVtKSkgYXMgdW5rbm93biBhcyBUO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWkhOeQhuaZrumAmuWvueixoVxyXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzb3VyY2UpID09PSAnW29iamVjdCBPYmplY3RdJykge1xyXG4gICAgICAgIGNvbnN0IGNsb25lZE9iamVjdCA9IHt9IGFzIFQ7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgKGNsb25lZE9iamVjdCBhcyBhbnkpW2tleV0gPSBkZWVwQ2xvbmUoKHNvdXJjZSBhcyBhbnkpW2tleV0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjbG9uZWRPYmplY3Q7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5YW25LuW57G75Z6L55u05o6l6L+U5Zue77yI5aaC5Ye95pWw44CBU3ltYm9sIOetie+8iVxyXG4gICAgcmV0dXJuIHNvdXJjZTtcclxufVxyXG4iXX0=
@@ -1,28 +1,46 @@
1
1
  import { Observable } from 'rxjs';
2
+ import { debounceTime } from 'rxjs/operators';
2
3
  /**
3
4
  * 监听元素的大小变化
4
5
  *
5
- * 此函数创建了一个Observable,用于观察给定HTMLElement元素的大小变化它使用了ResizeObserver API来实现
6
- * 当元素的大小发生变化时,会发出一个包含变化记录的数组
6
+ * 此函数创建了一个 Observable,用于观察给定 HTMLElement 元素的大小变化。
7
+ * 它使用了 ResizeObserver API 来实现,当元素的大小发生变化时,会发出一个包含变化记录的数组。
7
8
  *
8
- * @param element 需要观察大小变化的HTMLElement元素
9
- * @returns 返回一个Observable,其中包含ResizeObserverEntry的数组,用于记录每次大小变化的信息
9
+ * @param element 需要观察大小变化的 HTMLElement 元素
10
+ * @param options 配置选项
11
+ * @returns 返回一个 Observable,其中包含 ResizeObserverEntry 的数组,用于记录每次大小变化的信息
12
+ *
13
+ * @example
14
+ * // 基础用法
15
+ * const element = document.querySelector('.container');
16
+ * observeResize(element).subscribe(entries => {
17
+ * const { width, height } = entries[0].contentRect;
18
+ * console.log(`元素尺寸: ${width}x${height}`);
19
+ * });
20
+ *
21
+ * @example
22
+ * // 使用防抖优化性能
23
+ * observeResize(element, { debounce: 300 }).subscribe(entries => {
24
+ * // 300ms 内的多次变化只会触发一次
25
+ * console.log('元素大小已稳定');
26
+ * });
10
27
  */
11
- export function observeResize(element) {
12
- return new Observable((observer) => {
13
- // 创建ResizeObserver实例,当观察的目标元素大小发生变化时,会调用回调函数
28
+ export function observeResize(element, options) {
29
+ const { debounce } = options || {};
30
+ const resize$ = new Observable((observer) => {
31
+ // 创建 ResizeObserver 实例,当观察的目标元素大小发生变化时,会调用回调函数
14
32
  const resizeObserver = new ResizeObserver((entries) => {
15
33
  observer.next(entries);
16
34
  });
17
35
  // 开始观察指定的元素
18
36
  resizeObserver.observe(element);
19
- // 返回一个函数,用于在停止观察时调用,以清理资源
37
+ // 返回清理函数,用于在取消订阅时调用
20
38
  return () => {
21
- // 停止观察指定的元素
22
39
  resizeObserver.unobserve(element);
23
- // 断开与所有目标的观察连接
24
40
  resizeObserver.disconnect();
25
41
  };
26
42
  });
43
+ // 如果设置了防抖,则应用防抖操作符
44
+ return debounce ? resize$.pipe(debounceTime(debounce)) : resize$;
27
45
  }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicmFyeS9jb3JlL3V0aWxzL2RvbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUFvQjtJQUM5QyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDL0IsNkNBQTZDO1FBQzdDLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbEQsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUNILFlBQVk7UUFDWixjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLDBCQUEwQjtRQUMxQixPQUFPLEdBQUcsRUFBRTtZQUNSLFlBQVk7WUFDWixjQUFjLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLGVBQWU7WUFDZixjQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuLyoqXHJcbiAqIOebkeWQrOWFg+e0oOeahOWkp+Wwj+WPmOWMllxyXG4gKlxyXG4gKiDmraTlh73mlbDliJvlu7rkuobkuIDkuKpPYnNlcnZhYmxl77yM55So5LqO6KeC5a+f57uZ5a6aSFRNTEVsZW1lbnTlhYPntKDnmoTlpKflsI/lj5jljJblroPkvb/nlKjkuoZSZXNpemVPYnNlcnZlciBBUEnmnaXlrp7njrBcclxuICog5b2T5YWD57Sg55qE5aSn5bCP5Y+R55Sf5Y+Y5YyW5pe277yM5Lya5Y+R5Ye65LiA5Liq5YyF5ZCr5Y+Y5YyW6K6w5b2V55qE5pWw57uEXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IOmcgOimgeinguWvn+Wkp+Wwj+WPmOWMlueahEhUTUxFbGVtZW505YWD57SgXHJcbiAqIEByZXR1cm5zIOi/lOWbnuS4gOS4qk9ic2VydmFibGXvvIzlhbbkuK3ljIXlkKtSZXNpemVPYnNlcnZlckVudHJ555qE5pWw57uE77yM55So5LqO6K6w5b2V5q+P5qyh5aSn5bCP5Y+Y5YyW55qE5L+h5oGvXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZVJlc2l6ZShlbGVtZW50OiBIVE1MRWxlbWVudCk6IE9ic2VydmFibGU8UmVzaXplT2JzZXJ2ZXJFbnRyeVtdPiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgLy8g5Yib5bu6UmVzaXplT2JzZXJ2ZXLlrp7kvovvvIzlvZPop4Llr5/nmoTnm67moIflhYPntKDlpKflsI/lj5HnlJ/lj5jljJbml7bvvIzkvJrosIPnlKjlm57osIPlh73mlbBcclxuICAgICAgICBjb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xyXG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGVudHJpZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIOW8gOWni+inguWvn+aMh+WumueahOWFg+e0oFxyXG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZWxlbWVudCk7XHJcbiAgICAgICAgLy8g6L+U5Zue5LiA5Liq5Ye95pWw77yM55So5LqO5Zyo5YGc5q2i6KeC5a+f5pe26LCD55So77yM5Lul5riF55CG6LWE5rqQXHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgLy8g5YGc5q2i6KeC5a+f5oyH5a6a55qE5YWD57SgXHJcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShlbGVtZW50KTtcclxuICAgICAgICAgICAgLy8g5pat5byA5LiO5omA5pyJ55uu5qCH55qE6KeC5a+f6L+e5o6lXHJcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcbn1cclxuIl19
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicmFyeS9jb3JlL3V0aWxzL2RvbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQWM5Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUFvQixFQUFFLE9BQThCO0lBQzlFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0lBRW5DLE1BQU0sT0FBTyxHQUFHLElBQUksVUFBVSxDQUF3QixDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQy9ELCtDQUErQztRQUMvQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2xELFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxZQUFZO1FBQ1osY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVoQyxvQkFBb0I7UUFDcEIsT0FBTyxHQUFHLEVBQUU7WUFDUixjQUFjLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQyxDQUFDLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztJQUVILG1CQUFtQjtJQUNuQixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3JFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbi8qKlxyXG4gKiDnm5HlkKzlhYPntKDlpKflsI/lj5jljJbnmoTphY3nva7pgInpoblcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgT2JzZXJ2ZVJlc2l6ZU9wdGlvbnMge1xyXG4gICAgLyoqXHJcbiAgICAgKiDpmLLmipblu7bov5/ml7bpl7TvvIjmr6vnp5LvvIlcclxuICAgICAqIOiuvue9ruWQjuS8muWvuemikee5geeahOWkp+Wwj+WPmOWMluS6i+S7tui/m+ihjOmYsuaKluWkhOeQhlxyXG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkICjkuI3pmLLmipYpXHJcbiAgICAgKi9cclxuICAgIGRlYm91bmNlPzogbnVtYmVyO1xyXG59XHJcblxyXG4vKipcclxuICog55uR5ZCs5YWD57Sg55qE5aSn5bCP5Y+Y5YyWXHJcbiAqXHJcbiAqIOatpOWHveaVsOWIm+W7uuS6huS4gOS4qiBPYnNlcnZhYmxl77yM55So5LqO6KeC5a+f57uZ5a6aIEhUTUxFbGVtZW50IOWFg+e0oOeahOWkp+Wwj+WPmOWMluOAglxyXG4gKiDlroPkvb/nlKjkuoYgUmVzaXplT2JzZXJ2ZXIgQVBJIOadpeWunueOsO+8jOW9k+WFg+e0oOeahOWkp+Wwj+WPkeeUn+WPmOWMluaXtu+8jOS8muWPkeWHuuS4gOS4quWMheWQq+WPmOWMluiusOW9leeahOaVsOe7hOOAglxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudCDpnIDopoHop4Llr5/lpKflsI/lj5jljJbnmoQgSFRNTEVsZW1lbnQg5YWD57SgXHJcbiAqIEBwYXJhbSBvcHRpb25zIOmFjee9rumAiemhuVxyXG4gKiBAcmV0dXJucyDov5Tlm57kuIDkuKogT2JzZXJ2YWJsZe+8jOWFtuS4reWMheWQqyBSZXNpemVPYnNlcnZlckVudHJ5IOeahOaVsOe7hO+8jOeUqOS6juiusOW9leavj+asoeWkp+Wwj+WPmOWMlueahOS/oeaBr1xyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAvLyDln7rnoYDnlKjms5VcclxuICogY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250YWluZXInKTtcclxuICogb2JzZXJ2ZVJlc2l6ZShlbGVtZW50KS5zdWJzY3JpYmUoZW50cmllcyA9PiB7XHJcbiAqICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBlbnRyaWVzWzBdLmNvbnRlbnRSZWN0O1xyXG4gKiAgIGNvbnNvbGUubG9nKGDlhYPntKDlsLrlr7g6ICR7d2lkdGh9eCR7aGVpZ2h0fWApO1xyXG4gKiB9KTtcclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8g5L2/55So6Ziy5oqW5LyY5YyW5oCn6IO9XHJcbiAqIG9ic2VydmVSZXNpemUoZWxlbWVudCwgeyBkZWJvdW5jZTogMzAwIH0pLnN1YnNjcmliZShlbnRyaWVzID0+IHtcclxuICogICAvLyAzMDBtcyDlhoXnmoTlpJrmrKHlj5jljJblj6rkvJrop6blj5HkuIDmrKFcclxuICogICBjb25zb2xlLmxvZygn5YWD57Sg5aSn5bCP5bey56iz5a6aJyk7XHJcbiAqIH0pO1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmVSZXNpemUoZWxlbWVudDogSFRNTEVsZW1lbnQsIG9wdGlvbnM/OiBPYnNlcnZlUmVzaXplT3B0aW9ucyk6IE9ic2VydmFibGU8UmVzaXplT2JzZXJ2ZXJFbnRyeVtdPiB7XHJcbiAgICBjb25zdCB7IGRlYm91bmNlIH0gPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIGNvbnN0IHJlc2l6ZSQgPSBuZXcgT2JzZXJ2YWJsZTxSZXNpemVPYnNlcnZlckVudHJ5W10+KChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgIC8vIOWIm+W7uiBSZXNpemVPYnNlcnZlciDlrp7kvovvvIzlvZPop4Llr5/nmoTnm67moIflhYPntKDlpKflsI/lj5HnlJ/lj5jljJbml7bvvIzkvJrosIPnlKjlm57osIPlh73mlbBcclxuICAgICAgICBjb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xyXG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGVudHJpZXMpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyDlvIDlp4vop4Llr5/mjIflrprnmoTlhYPntKBcclxuICAgICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpO1xyXG5cclxuICAgICAgICAvLyDov5Tlm57muIXnkIblh73mlbDvvIznlKjkuo7lnKjlj5bmtojorqLpmIXml7bosIPnlKhcclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICByZXNpemVPYnNlcnZlci51bm9ic2VydmUoZWxlbWVudCk7XHJcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g5aaC5p6c6K6+572u5LqG6Ziy5oqW77yM5YiZ5bqU55So6Ziy5oqW5pON5L2c56ymXHJcbiAgICByZXR1cm4gZGVib3VuY2UgPyByZXNpemUkLnBpcGUoZGVib3VuY2VUaW1lKGRlYm91bmNlKSkgOiByZXNpemUkO1xyXG59XHJcbiJdfQ==