@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,21 +1,52 @@
1
1
  /**
2
2
  * 表单验证
3
- * @param form
3
+ *
4
+ * 遍历表单所有控件,标记为脏状态并触发验证。
5
+ * 如果表单验证通过,返回表单的原始值;否则返回 false。
6
+ *
7
+ * @param form Angular 表单组对象
8
+ * @param options 验证配置选项
9
+ * @returns 验证通过返回表单值,验证失败返回 false
10
+ *
11
+ * @example
12
+ * const result = formVerify(this.form);
13
+ * if (result) {
14
+ * console.log('表单数据:', result);
15
+ * }
16
+ *
17
+ * @example
18
+ * // 自定义错误处理
19
+ * formVerify(this.form, {
20
+ * logError: false,
21
+ * onError: (fields) => {
22
+ * this.message.error(`以下字段验证失败: ${fields.join(', ')}`);
23
+ * }
24
+ * });
4
25
  */
5
- export function formVerify(form) {
6
- const errList = [];
7
- for (const key in form.controls) {
8
- form.controls[key].markAsDirty();
9
- form.controls[key].updateValueAndValidity();
10
- if (form.controls[key].status !== 'VALID' && form.controls[key].status !== 'DISABLED') {
11
- errList.push(key);
26
+ export function formVerify(form, options) {
27
+ const { logError = true, onError } = options || {};
28
+ const invalidFields = [];
29
+ // 遍历所有控件,标记为脏状态并更新验证状态
30
+ Object.keys(form.controls).forEach((key) => {
31
+ const control = form.controls[key];
32
+ control.markAsDirty();
33
+ control.updateValueAndValidity();
34
+ // 收集验证失败的字段(排除禁用状态)
35
+ if (control.status !== 'VALID' && control.status !== 'DISABLED') {
36
+ invalidFields.push(key);
37
+ }
38
+ });
39
+ // 表单验证失败(排除全部禁用的情况)
40
+ if (form.status !== 'VALID' && form.status !== 'DISABLED') {
41
+ if (logError) {
42
+ console.error(`表单验证失败,字段: ${invalidFields.join(', ')}`);
43
+ }
44
+ if (onError) {
45
+ onError(invalidFields);
12
46
  }
13
- }
14
- // 表单验证状态
15
- if (form.status !== 'VALID') {
16
- console.error(`Form validation failed fields:${errList.join(',')}`);
17
47
  return false;
18
48
  }
49
+ // 验证通过,返回表单原始值(包含禁用字段)
19
50
  return form.getRawValue();
20
51
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvY29yZS91dGlscy9mb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7R0FHRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQTBCLElBQWU7SUFDL0QsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ25CLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7WUFDbkYsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNyQjtLQUNKO0lBQ0QsU0FBUztJQUNULElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLEVBQUU7UUFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEUsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLyoqXHJcbiAqIOihqOWNlemqjOivgVxyXG4gKiBAcGFyYW0gZm9ybVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1WZXJpZnk8VCA9IFJlY29yZDxzdHJpbmcsIGFueT4+KGZvcm06IEZvcm1Hcm91cCk6IGZhbHNlIHwgVCB7XHJcbiAgICBjb25zdCBlcnJMaXN0ID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmb3JtLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgZm9ybS5jb250cm9sc1trZXldLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgZm9ybS5jb250cm9sc1trZXldLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICBpZiAoZm9ybS5jb250cm9sc1trZXldLnN0YXR1cyAhPT0gJ1ZBTElEJyAmJiBmb3JtLmNvbnRyb2xzW2tleV0uc3RhdHVzICE9PSAnRElTQUJMRUQnKSB7XHJcbiAgICAgICAgICAgIGVyckxpc3QucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIOihqOWNlemqjOivgeeKtuaAgVxyXG4gICAgaWYgKGZvcm0uc3RhdHVzICE9PSAnVkFMSUQnKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgRm9ybSB2YWxpZGF0aW9uIGZhaWxlZCBmaWVsZHPvvJoke2Vyckxpc3Quam9pbignLCcpfWApO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtLmdldFJhd1ZhbHVlKCk7XHJcbn1cclxuIl19
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvY29yZS91dGlscy9mb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBMEIsSUFBZSxFQUFFLE9BQTJCO0lBQzVGLE1BQU0sRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDbkQsTUFBTSxhQUFhLEdBQWEsRUFBRSxDQUFDO0lBRW5DLHVCQUF1QjtJQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUVqQyxvQkFBb0I7UUFDcEIsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRTtZQUM3RCxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzNCO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxvQkFBb0I7SUFDcEIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRTtRQUN2RCxJQUFJLFFBQVEsRUFBRTtZQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMzRDtRQUNELElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCx1QkFBdUI7SUFDdkIsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbi8qKlxyXG4gKiDooajljZXpqozor4HphY3nva5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVZlcmlmeU9wdGlvbnMge1xyXG4gICAgLyoqXHJcbiAgICAgKiDmmK/lkKblnKjmjqfliLblj7DovpPlh7rplJnor6/kv6Hmga9cclxuICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAqL1xyXG4gICAgbG9nRXJyb3I/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiDoh6rlrprkuYnplJnor6/lpITnkIblh73mlbBcclxuICAgICAqL1xyXG4gICAgb25FcnJvcj86IChpbnZhbGlkRmllbGRzOiBzdHJpbmdbXSkgPT4gdm9pZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIOihqOWNlemqjOivgVxyXG4gKlxyXG4gKiDpgY3ljobooajljZXmiYDmnInmjqfku7bvvIzmoIforrDkuLrohI/nirbmgIHlubbop6blj5Hpqozor4HjgIJcclxuICog5aaC5p6c6KGo5Y2V6aqM6K+B6YCa6L+H77yM6L+U5Zue6KGo5Y2V55qE5Y6f5aeL5YC877yb5ZCm5YiZ6L+U5ZueIGZhbHNl44CCXHJcbiAqXHJcbiAqIEBwYXJhbSBmb3JtIEFuZ3VsYXIg6KGo5Y2V57uE5a+56LGhXHJcbiAqIEBwYXJhbSBvcHRpb25zIOmqjOivgemFjee9rumAiemhuVxyXG4gKiBAcmV0dXJucyDpqozor4HpgJrov4fov5Tlm57ooajljZXlgLzvvIzpqozor4HlpLHotKXov5Tlm54gZmFsc2VcclxuICpcclxuICogQGV4YW1wbGVcclxuICogY29uc3QgcmVzdWx0ID0gZm9ybVZlcmlmeSh0aGlzLmZvcm0pO1xyXG4gKiBpZiAocmVzdWx0KSB7XHJcbiAqICAgY29uc29sZS5sb2coJ+ihqOWNleaVsOaNrjonLCByZXN1bHQpO1xyXG4gKiB9XHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIOiHquWumuS5iemUmeivr+WkhOeQhlxyXG4gKiBmb3JtVmVyaWZ5KHRoaXMuZm9ybSwge1xyXG4gKiAgIGxvZ0Vycm9yOiBmYWxzZSxcclxuICogICBvbkVycm9yOiAoZmllbGRzKSA9PiB7XHJcbiAqICAgICB0aGlzLm1lc3NhZ2UuZXJyb3IoYOS7peS4i+Wtl+autemqjOivgeWksei0pTogJHtmaWVsZHMuam9pbignLCAnKX1gKTtcclxuICogICB9XHJcbiAqIH0pO1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1WZXJpZnk8VCA9IFJlY29yZDxzdHJpbmcsIGFueT4+KGZvcm06IEZvcm1Hcm91cCwgb3B0aW9ucz86IEZvcm1WZXJpZnlPcHRpb25zKTogZmFsc2UgfCBUIHtcclxuICAgIGNvbnN0IHsgbG9nRXJyb3IgPSB0cnVlLCBvbkVycm9yIH0gPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgY29uc3QgaW52YWxpZEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAvLyDpgY3ljobmiYDmnInmjqfku7bvvIzmoIforrDkuLrohI/nirbmgIHlubbmm7TmlrDpqozor4HnirbmgIFcclxuICAgIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtLmNvbnRyb2xzW2tleV07XHJcbiAgICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cclxuICAgICAgICAvLyDmlLbpm4bpqozor4HlpLHotKXnmoTlrZfmrrXvvIjmjpLpmaTnpoHnlKjnirbmgIHvvIlcclxuICAgICAgICBpZiAoY29udHJvbC5zdGF0dXMgIT09ICdWQUxJRCcgJiYgY29udHJvbC5zdGF0dXMgIT09ICdESVNBQkxFRCcpIHtcclxuICAgICAgICAgICAgaW52YWxpZEZpZWxkcy5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g6KGo5Y2V6aqM6K+B5aSx6LSl77yI5o6S6Zmk5YWo6YOo56aB55So55qE5oOF5Ya177yJXHJcbiAgICBpZiAoZm9ybS5zdGF0dXMgIT09ICdWQUxJRCcgJiYgZm9ybS5zdGF0dXMgIT09ICdESVNBQkxFRCcpIHtcclxuICAgICAgICBpZiAobG9nRXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihg6KGo5Y2V6aqM6K+B5aSx6LSl77yM5a2X5q61OiAke2ludmFsaWRGaWVsZHMuam9pbignLCAnKX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9uRXJyb3IpIHtcclxuICAgICAgICAgICAgb25FcnJvcihpbnZhbGlkRmllbGRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOmqjOivgemAmui/h++8jOi/lOWbnuihqOWNleWOn+Wni+WAvO+8iOWMheWQq+emgeeUqOWtl+aute+8iVxyXG4gICAgcmV0dXJuIGZvcm0uZ2V0UmF3VmFsdWUoKTtcclxufVxyXG4iXX0=
@@ -6,71 +6,146 @@ let prefix = 'SK_';
6
6
  * 设置存储前缀
7
7
  *
8
8
  * 该函数用于更改全局存储前缀,影响后续所有存储操作的键名前缀。
9
- * 存储前缀的更改可能会影响已存储的数据被正确识别和访问。
9
+ * 注意:更改前缀后,之前使用旧前缀存储的数据将无法访问。
10
10
  *
11
11
  * @param newPrefix 新的存储前缀字符串
12
+ *
13
+ * @example
14
+ * setStorePrefix('MY_APP_');
12
15
  */
13
16
  export function setStorePrefix(newPrefix) {
14
17
  prefix = newPrefix;
15
18
  }
16
19
  /**
17
- * 提供了一个用于缓存值的类,值可以被存储在浏览器的localStorage或sessionStorage中。
18
- * 如果提供了过期时间,存储的值会在过期后自动移除。
20
+ * 提供了一个用于缓存值的类,值可以被存储在浏览器的 localStorage sessionStorage 中。
21
+ * 支持过期时间设置,过期后数据会自动移除。
22
+ *
23
+ * @template T 存储数据的类型
24
+ *
25
+ * @example
26
+ * // 基础用法
27
+ * const userStore = new Store<User>('user', { name: '', age: 0 });
28
+ * userStore.set({ name: '张三', age: 25 });
29
+ * console.log(userStore.get()); // { name: '张三', age: 25 }
30
+ *
31
+ * @example
32
+ * // 使用 localStorage 并设置过期时间
33
+ * const tokenStore = new Store<string>('token', '', {
34
+ * storageEngine: localStorage,
35
+ * expires: 3600000 // 1小时后过期
36
+ * });
19
37
  */
20
38
  export class Store {
21
39
  /**
22
- * 初始化Store类的实例。
23
- * @param key 缓存值的键名。
24
- * @param defaultValue 初始值,默认值会被存储并返回直到设置新的值。
25
- * @param options 配置选项,包括存储引擎和过期时间。
40
+ * 初始化 Store 类的实例
41
+ * @param key 缓存值的键名
42
+ * @param defaultValue 初始值,默认值会被存储并返回直到设置新的值
43
+ * @param options 配置选项,包括存储引擎和过期时间
26
44
  */
27
45
  constructor(key, defaultValue, options) {
46
+ this.key = key;
28
47
  this.value = defaultValue;
29
- // 进行初始设置
30
- this.storageKey = () => `@${prefix}_${key}`.toLocaleUpperCase();
31
48
  const { storageEngine = sessionStorage, expires } = options !== null && options !== void 0 ? options : {};
32
49
  this.storage = storageEngine;
33
50
  this.expires = expires;
34
- const storedValue = this.storage.getItem(this.storageKey());
35
- if (storedValue) {
51
+ // 尝试从存储中读取数据
52
+ this.loadFromStorage();
53
+ }
54
+ /**
55
+ * 生成存储键名
56
+ */
57
+ getStorageKey() {
58
+ return `@${prefix}_${this.key}`.toLocaleUpperCase();
59
+ }
60
+ /**
61
+ * 从存储中加载数据
62
+ */
63
+ loadFromStorage() {
64
+ try {
65
+ const storedValue = this.storage.getItem(this.getStorageKey());
66
+ if (!storedValue) {
67
+ return;
68
+ }
36
69
  const { data, expiry } = JSON.parse(storedValue);
37
- // 判断是否过期,过期后删除key
70
+ // 检查是否过期
38
71
  if (!expiry || expiry > Date.now()) {
39
72
  this.value = data;
40
73
  }
41
74
  else {
42
- this.storage.removeItem(this.storageKey());
75
+ // 过期则删除
76
+ this.clear();
43
77
  }
44
78
  }
79
+ catch (error) {
80
+ console.error(`从存储中读取数据失败 (key: ${this.getStorageKey()}):`, error);
81
+ // 数据损坏时清除
82
+ this.clear();
83
+ }
45
84
  }
46
85
  /**
47
- * 获取当前缓存的值。
48
- * @returns 缓存的值。
86
+ * 获取当前缓存的值
87
+ * @returns 缓存的值
49
88
  */
50
89
  get() {
51
90
  return this.value;
52
91
  }
53
92
  /**
54
- * 设置新的缓存值。
55
- * @param newValue 新的值。
93
+ * 设置新的缓存值
94
+ * @param newValue 新的值
56
95
  */
57
96
  set(newValue) {
58
97
  this.value = newValue;
59
- // 设置值时进行Storage设置
60
- const value = JSON.stringify({
61
- data: newValue,
62
- expiry: this.expires ? Date.now() + this.expires : null,
63
- });
64
- this.storage.setItem(this.storageKey(), value);
98
+ try {
99
+ const storageData = {
100
+ data: newValue,
101
+ expiry: this.expires ? Date.now() + this.expires : null,
102
+ };
103
+ this.storage.setItem(this.getStorageKey(), JSON.stringify(storageData));
104
+ }
105
+ catch (error) {
106
+ console.error(`存储数据失败 (key: ${this.getStorageKey()}):`, error);
107
+ }
65
108
  }
66
109
  /**
67
- * 使用提供的函数更新缓存的值。
68
- * @param updateFn 一个接受当前值并返回新值的函数。
110
+ * 使用提供的函数更新缓存的值
111
+ * @param updateFn 一个接受当前值并返回新值的函数
112
+ *
113
+ * @example
114
+ * const countStore = new Store<number>('count', 0);
115
+ * countStore.update(count => count + 1);
69
116
  */
70
117
  update(updateFn) {
71
118
  if (typeof updateFn === 'function') {
72
119
  this.set(updateFn(this.value));
73
120
  }
74
121
  }
122
+ /**
123
+ * 清除缓存数据
124
+ */
125
+ clear() {
126
+ try {
127
+ this.storage.removeItem(this.getStorageKey());
128
+ }
129
+ catch (error) {
130
+ console.error(`清除存储数据失败 (key: ${this.getStorageKey()}):`, error);
131
+ }
132
+ }
133
+ /**
134
+ * 检查缓存是否存在且未过期
135
+ * @returns 如果缓存存在且未过期返回 true,否则返回 false
136
+ */
137
+ has() {
138
+ try {
139
+ const storedValue = this.storage.getItem(this.getStorageKey());
140
+ if (!storedValue) {
141
+ return false;
142
+ }
143
+ const { expiry } = JSON.parse(storedValue);
144
+ return !expiry || expiry > Date.now();
145
+ }
146
+ catch (_a) {
147
+ return false;
148
+ }
149
+ }
75
150
  }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJ5L2NvcmUvdXRpbHMvc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0E7O0dBRUc7QUFDSCxJQUFJLE1BQU0sR0FBVyxLQUFLLENBQUM7QUFFM0I7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsU0FBaUI7SUFDNUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUN2QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLEtBQUs7SUFNZDs7Ozs7T0FLRztJQUNILFlBQVksR0FBVyxFQUFFLFlBQWUsRUFBRSxPQUFzQjtRQUM1RCxJQUFJLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQztRQUUxQixTQUFTO1FBQ1QsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sRUFBRSxhQUFhLEdBQUcsY0FBYyxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLEVBQUUsQ0FBQztRQUNsRSxJQUFJLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUV2QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLFdBQVcsRUFBRTtZQUNiLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNqRCxrQkFBa0I7WUFDbEIsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzthQUNyQjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQzthQUM5QztTQUNKO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEdBQUc7UUFDQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxRQUFXO1FBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7UUFFdEIsa0JBQWtCO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDekIsSUFBSSxFQUFFLFFBQVE7WUFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDMUQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsUUFBZ0M7UUFDbkMsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLEVBQUU7WUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDbEM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICog57yT5a2Y6YWN572u5L+h5oGvXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JlT3B0aW9ucyB7XHJcbiAgICAvKipcclxuICAgICAqIOe8k+WtmOWtmOWCqOaWueW8j1xyXG4gICAgICovXHJcbiAgICBzdG9yYWdlRW5naW5lPzogU3RvcmFnZTtcclxuICAgIC8qKlxyXG4gICAgICog6L+H5pyf5pe26Ze0KOavq+enkilcclxuICAgICAqL1xyXG4gICAgZXhwaXJlcz86IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIOm7mOiupOWJjee8gFxyXG4gKi9cclxubGV0IHByZWZpeDogc3RyaW5nID0gJ1NLXyc7XHJcblxyXG4vKipcclxuICog6K6+572u5a2Y5YKo5YmN57yAXHJcbiAqXHJcbiAqIOivpeWHveaVsOeUqOS6juabtOaUueWFqOWxgOWtmOWCqOWJjee8gO+8jOW9seWTjeWQjue7reaJgOacieWtmOWCqOaTjeS9nOeahOmUruWQjeWJjee8gOOAglxyXG4gKiDlrZjlgqjliY3nvIDnmoTmm7TmlLnlj6/og73kvJrlvbHlk43lt7LlrZjlgqjnmoTmlbDmja7ooqvmraPnoa7or4bliKvlkozorr/pl67jgIJcclxuICpcclxuICogQHBhcmFtIG5ld1ByZWZpeCDmlrDnmoTlrZjlgqjliY3nvIDlrZfnrKbkuLJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRTdG9yZVByZWZpeChuZXdQcmVmaXg6IHN0cmluZykge1xyXG4gICAgcHJlZml4ID0gbmV3UHJlZml4O1xyXG59XHJcblxyXG4vKipcclxuICog5o+Q5L6b5LqG5LiA5Liq55So5LqO57yT5a2Y5YC855qE57G777yM5YC85Y+v5Lul6KKr5a2Y5YKo5Zyo5rWP6KeI5Zmo55qEbG9jYWxTdG9yYWdl5oiWc2Vzc2lvblN0b3JhZ2XkuK3jgIJcclxuICog5aaC5p6c5o+Q5L6b5LqG6L+H5pyf5pe26Ze077yM5a2Y5YKo55qE5YC85Lya5Zyo6L+H5pyf5ZCO6Ieq5Yqo56e76Zmk44CCXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU3RvcmU8VD4ge1xyXG4gICAgcHJpdmF0ZSB2YWx1ZTogVDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZTogU3RvcmFnZTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhwaXJlcz86IG51bWJlcjtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZUtleTogKCkgPT4gc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yid5aeL5YyWU3RvcmXnsbvnmoTlrp7kvovjgIJcclxuICAgICAqIEBwYXJhbSBrZXkg57yT5a2Y5YC855qE6ZSu5ZCN44CCXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIOWIneWni+WAvO+8jOm7mOiupOWAvOS8muiiq+WtmOWCqOW5tui/lOWbnuebtOWIsOiuvue9ruaWsOeahOWAvOOAglxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMg6YWN572u6YCJ6aG577yM5YyF5ous5a2Y5YKo5byV5pOO5ZKM6L+H5pyf5pe26Ze044CCXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IFQsIG9wdGlvbnM/OiBTdG9yZU9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gZGVmYXVsdFZhbHVlO1xyXG5cclxuICAgICAgICAvLyDov5vooYzliJ3lp4vorr7nva5cclxuICAgICAgICB0aGlzLnN0b3JhZ2VLZXkgPSAoKSA9PiBgQCR7cHJlZml4fV8ke2tleX1gLnRvTG9jYWxlVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgeyBzdG9yYWdlRW5naW5lID0gc2Vzc2lvblN0b3JhZ2UsIGV4cGlyZXMgfSA9IG9wdGlvbnMgPz8ge307XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlID0gc3RvcmFnZUVuZ2luZTtcclxuICAgICAgICB0aGlzLmV4cGlyZXMgPSBleHBpcmVzO1xyXG5cclxuICAgICAgICBjb25zdCBzdG9yZWRWYWx1ZSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSgpKTtcclxuICAgICAgICBpZiAoc3RvcmVkVmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBleHBpcnkgfSA9IEpTT04ucGFyc2Uoc3RvcmVkVmFsdWUpO1xyXG4gICAgICAgICAgICAvLyDliKTmlq3mmK/lkKbov4fmnJ/vvIzov4fmnJ/lkI7liKDpmaRrZXlcclxuICAgICAgICAgICAgaWYgKCFleHBpcnkgfHwgZXhwaXJ5ID4gRGF0ZS5ub3coKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnN0b3JhZ2VLZXkoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDojrflj5blvZPliY3nvJPlrZjnmoTlgLzjgIJcclxuICAgICAqIEByZXR1cm5zIOe8k+WtmOeahOWAvOOAglxyXG4gICAgICovXHJcbiAgICBnZXQoKTogVCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDorr7nva7mlrDnmoTnvJPlrZjlgLzjgIJcclxuICAgICAqIEBwYXJhbSBuZXdWYWx1ZSDmlrDnmoTlgLzjgIJcclxuICAgICAqL1xyXG4gICAgc2V0KG5ld1ZhbHVlOiBUKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xyXG5cclxuICAgICAgICAvLyDorr7nva7lgLzml7bov5vooYxTdG9yYWdl6K6+572uXHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGRhdGE6IG5ld1ZhbHVlLFxyXG4gICAgICAgICAgICBleHBpcnk6IHRoaXMuZXhwaXJlcyA/IERhdGUubm93KCkgKyB0aGlzLmV4cGlyZXMgOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleSgpLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDkvb/nlKjmj5DkvpvnmoTlh73mlbDmm7TmlrDnvJPlrZjnmoTlgLzjgIJcclxuICAgICAqIEBwYXJhbSB1cGRhdGVGbiDkuIDkuKrmjqXlj5flvZPliY3lgLzlubbov5Tlm57mlrDlgLznmoTlh73mlbDjgIJcclxuICAgICAqL1xyXG4gICAgdXBkYXRlKHVwZGF0ZUZuOiAoY3VycmVudFZhbHVlOiBUKSA9PiBUKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB1cGRhdGVGbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aGlzLnNldCh1cGRhdGVGbih0aGlzLnZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJ5L2NvcmUvdXRpbHMvc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOEJBOztHQUVHO0FBQ0gsSUFBSSxNQUFNLEdBQVcsS0FBSyxDQUFDO0FBRTNCOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLFNBQWlCO0lBQzVDLE1BQU0sR0FBRyxTQUFTLENBQUM7QUFDdkIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLE9BQU8sS0FBSztJQU1kOzs7OztPQUtHO0lBQ0gsWUFBWSxHQUFXLEVBQUUsWUFBZSxFQUFFLE9BQXNCO1FBQzVELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7UUFFMUIsTUFBTSxFQUFFLGFBQWEsR0FBRyxjQUFjLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxhQUFQLE9BQU8sY0FBUCxPQUFPLEdBQUksRUFBRSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDO1FBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBRXZCLGFBQWE7UUFDYixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssYUFBYTtRQUNqQixPQUFPLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWU7UUFDbkIsSUFBSTtZQUNBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2QsT0FBTzthQUNWO1lBRUQsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBbUIsQ0FBQztZQUVuRSxTQUFTO1lBQ1QsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzthQUNyQjtpQkFBTTtnQkFDSCxRQUFRO2dCQUNSLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNoQjtTQUNKO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuRSxVQUFVO1lBQ1YsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEdBQUc7UUFDQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxRQUFXO1FBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7UUFFdEIsSUFBSTtZQUNBLE1BQU0sV0FBVyxHQUFtQjtnQkFDaEMsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJO2FBQzFELENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzNFO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNsRTtJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFFBQWdDO1FBQ25DLElBQUksT0FBTyxRQUFRLEtBQUssVUFBVSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNELElBQUk7WUFDQSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztTQUNqRDtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDcEU7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsR0FBRztRQUNDLElBQUk7WUFDQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNkLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFtQixDQUFDO1lBQzdELE9BQU8sQ0FBQyxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUN6QztRQUFDLFdBQU07WUFDSixPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiDnvJPlrZjphY3nva7kv6Hmga9cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmVPcHRpb25zIHtcclxuICAgIC8qKlxyXG4gICAgICog57yT5a2Y5a2Y5YKo5pa55byPXHJcbiAgICAgKiBAZGVmYXVsdCBzZXNzaW9uU3RvcmFnZVxyXG4gICAgICovXHJcbiAgICBzdG9yYWdlRW5naW5lPzogU3RvcmFnZTtcclxuICAgIC8qKlxyXG4gICAgICog6L+H5pyf5pe26Ze077yI5q+r56eS77yJXHJcbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgKOawuOS4jei/h+acnylcclxuICAgICAqL1xyXG4gICAgZXhwaXJlcz86IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIOWtmOWCqOaVsOaNrue7k+aehFxyXG4gKi9cclxuaW50ZXJmYWNlIFN0b3JhZ2VEYXRhPFQ+IHtcclxuICAgIC8qKlxyXG4gICAgICog5a6e6ZmF5a2Y5YKo55qE5pWw5o2uXHJcbiAgICAgKi9cclxuICAgIGRhdGE6IFQ7XHJcbiAgICAvKipcclxuICAgICAqIOi/h+acn+aXtumXtOaIs++8iOavq+enku+8iVxyXG4gICAgICovXHJcbiAgICBleHBpcnk6IG51bWJlciB8IG51bGw7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDpu5jorqTliY3nvIBcclxuICovXHJcbmxldCBwcmVmaXg6IHN0cmluZyA9ICdTS18nO1xyXG5cclxuLyoqXHJcbiAqIOiuvue9ruWtmOWCqOWJjee8gFxyXG4gKlxyXG4gKiDor6Xlh73mlbDnlKjkuo7mm7TmlLnlhajlsYDlrZjlgqjliY3nvIDvvIzlvbHlk43lkI7nu63miYDmnInlrZjlgqjmk43kvZznmoTplK7lkI3liY3nvIDjgIJcclxuICog5rOo5oSP77ya5pu05pS55YmN57yA5ZCO77yM5LmL5YmN5L2/55So5pen5YmN57yA5a2Y5YKo55qE5pWw5o2u5bCG5peg5rOV6K6/6Zeu44CCXHJcbiAqXHJcbiAqIEBwYXJhbSBuZXdQcmVmaXgg5paw55qE5a2Y5YKo5YmN57yA5a2X56ym5LiyXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIHNldFN0b3JlUHJlZml4KCdNWV9BUFBfJyk7XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0U3RvcmVQcmVmaXgobmV3UHJlZml4OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHByZWZpeCA9IG5ld1ByZWZpeDtcclxufVxyXG5cclxuLyoqXHJcbiAqIOaPkOS+m+S6huS4gOS4queUqOS6jue8k+WtmOWAvOeahOexu++8jOWAvOWPr+S7peiiq+WtmOWCqOWcqOa1j+iniOWZqOeahCBsb2NhbFN0b3JhZ2Ug5oiWIHNlc3Npb25TdG9yYWdlIOS4reOAglxyXG4gKiDmlK/mjIHov4fmnJ/ml7bpl7Torr7nva7vvIzov4fmnJ/lkI7mlbDmja7kvJroh6rliqjnp7vpmaTjgIJcclxuICpcclxuICogQHRlbXBsYXRlIFQg5a2Y5YKo5pWw5o2u55qE57G75Z6LXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIOWfuuehgOeUqOazlVxyXG4gKiBjb25zdCB1c2VyU3RvcmUgPSBuZXcgU3RvcmU8VXNlcj4oJ3VzZXInLCB7IG5hbWU6ICcnLCBhZ2U6IDAgfSk7XHJcbiAqIHVzZXJTdG9yZS5zZXQoeyBuYW1lOiAn5byg5LiJJywgYWdlOiAyNSB9KTtcclxuICogY29uc29sZS5sb2codXNlclN0b3JlLmdldCgpKTsgLy8geyBuYW1lOiAn5byg5LiJJywgYWdlOiAyNSB9XHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIOS9v+eUqCBsb2NhbFN0b3JhZ2Ug5bm26K6+572u6L+H5pyf5pe26Ze0XHJcbiAqIGNvbnN0IHRva2VuU3RvcmUgPSBuZXcgU3RvcmU8c3RyaW5nPigndG9rZW4nLCAnJywge1xyXG4gKiAgIHN0b3JhZ2VFbmdpbmU6IGxvY2FsU3RvcmFnZSxcclxuICogICBleHBpcmVzOiAzNjAwMDAwIC8vIDHlsI/ml7blkI7ov4fmnJ9cclxuICogfSk7XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU3RvcmU8VD4ge1xyXG4gICAgcHJpdmF0ZSB2YWx1ZTogVDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZTogU3RvcmFnZTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhwaXJlcz86IG51bWJlcjtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkga2V5OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliJ3lp4vljJYgU3RvcmUg57G755qE5a6e5L6LXHJcbiAgICAgKiBAcGFyYW0ga2V5IOe8k+WtmOWAvOeahOmUruWQjVxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSDliJ3lp4vlgLzvvIzpu5jorqTlgLzkvJrooqvlrZjlgqjlubbov5Tlm57nm7TliLDorr7nva7mlrDnmoTlgLxcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIOmFjee9rumAiemhue+8jOWMheaLrOWtmOWCqOW8leaTjuWSjOi/h+acn+aXtumXtFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihrZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBULCBvcHRpb25zPzogU3RvcmVPcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgeyBzdG9yYWdlRW5naW5lID0gc2Vzc2lvblN0b3JhZ2UsIGV4cGlyZXMgfSA9IG9wdGlvbnMgPz8ge307XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlID0gc3RvcmFnZUVuZ2luZTtcclxuICAgICAgICB0aGlzLmV4cGlyZXMgPSBleHBpcmVzO1xyXG5cclxuICAgICAgICAvLyDlsJ3or5Xku47lrZjlgqjkuK3or7vlj5bmlbDmja5cclxuICAgICAgICB0aGlzLmxvYWRGcm9tU3RvcmFnZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog55Sf5oiQ5a2Y5YKo6ZSu5ZCNXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0U3RvcmFnZUtleSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgQCR7cHJlZml4fV8ke3RoaXMua2V5fWAudG9Mb2NhbGVVcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOS7juWtmOWCqOS4reWKoOi9veaVsOaNrlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGxvYWRGcm9tU3RvcmFnZSgpOiB2b2lkIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBzdG9yZWRWYWx1ZSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMuZ2V0U3RvcmFnZUtleSgpKTtcclxuICAgICAgICAgICAgaWYgKCFzdG9yZWRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGV4cGlyeSB9ID0gSlNPTi5wYXJzZShzdG9yZWRWYWx1ZSkgYXMgU3RvcmFnZURhdGE8VD47XHJcblxyXG4gICAgICAgICAgICAvLyDmo4Dmn6XmmK/lkKbov4fmnJ9cclxuICAgICAgICAgICAgaWYgKCFleHBpcnkgfHwgZXhwaXJ5ID4gRGF0ZS5ub3coKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyDov4fmnJ/liJnliKDpmaRcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYOS7juWtmOWCqOS4reivu+WPluaVsOaNruWksei0pSAoa2V5OiAke3RoaXMuZ2V0U3RvcmFnZUtleSgpfSk6YCwgZXJyb3IpO1xyXG4gICAgICAgICAgICAvLyDmlbDmja7mjZ/lnY/ml7bmuIXpmaRcclxuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPluW9k+WJjee8k+WtmOeahOWAvFxyXG4gICAgICogQHJldHVybnMg57yT5a2Y55qE5YC8XHJcbiAgICAgKi9cclxuICAgIGdldCgpOiBUIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOiuvue9ruaWsOeahOe8k+WtmOWAvFxyXG4gICAgICogQHBhcmFtIG5ld1ZhbHVlIOaWsOeahOWAvFxyXG4gICAgICovXHJcbiAgICBzZXQobmV3VmFsdWU6IFQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VEYXRhOiBTdG9yYWdlRGF0YTxUPiA9IHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IG5ld1ZhbHVlLFxyXG4gICAgICAgICAgICAgICAgZXhwaXJ5OiB0aGlzLmV4cGlyZXMgPyBEYXRlLm5vdygpICsgdGhpcy5leHBpcmVzIDogbnVsbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0odGhpcy5nZXRTdG9yYWdlS2V5KCksIEpTT04uc3RyaW5naWZ5KHN0b3JhZ2VEYXRhKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihg5a2Y5YKo5pWw5o2u5aSx6LSlIChrZXk6ICR7dGhpcy5nZXRTdG9yYWdlS2V5KCl9KTpgLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5L2/55So5o+Q5L6b55qE5Ye95pWw5pu05paw57yT5a2Y55qE5YC8XHJcbiAgICAgKiBAcGFyYW0gdXBkYXRlRm4g5LiA5Liq5o6l5Y+X5b2T5YmN5YC85bm26L+U5Zue5paw5YC855qE5Ye95pWwXHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGNvbnN0IGNvdW50U3RvcmUgPSBuZXcgU3RvcmU8bnVtYmVyPignY291bnQnLCAwKTtcclxuICAgICAqIGNvdW50U3RvcmUudXBkYXRlKGNvdW50ID0+IGNvdW50ICsgMSk7XHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZSh1cGRhdGVGbjogKGN1cnJlbnRWYWx1ZTogVCkgPT4gVCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdXBkYXRlRm4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXQodXBkYXRlRm4odGhpcy52YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOa4hemZpOe8k+WtmOaVsOaNrlxyXG4gICAgICovXHJcbiAgICBjbGVhcigpOiB2b2lkIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihg5riF6Zmk5a2Y5YKo5pWw5o2u5aSx6LSlIChrZXk6ICR7dGhpcy5nZXRTdG9yYWdlS2V5KCl9KTpgLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5qOA5p+l57yT5a2Y5piv5ZCm5a2Y5Zyo5LiU5pyq6L+H5pyfXHJcbiAgICAgKiBAcmV0dXJucyDlpoLmnpznvJPlrZjlrZjlnKjkuJTmnKrov4fmnJ/ov5Tlm54gdHJ1Ze+8jOWQpuWImei/lOWbniBmYWxzZVxyXG4gICAgICovXHJcbiAgICBoYXMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RvcmVkVmFsdWUgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoKSk7XHJcbiAgICAgICAgICAgIGlmICghc3RvcmVkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgeyBleHBpcnkgfSA9IEpTT04ucGFyc2Uoc3RvcmVkVmFsdWUpIGFzIFN0b3JhZ2VEYXRhPFQ+O1xyXG4gICAgICAgICAgICByZXR1cm4gIWV4cGlyeSB8fCBleHBpcnkgPiBEYXRlLm5vdygpO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==