@yelon/util 12.0.10 → 12.0.11

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 (224) hide show
  1. package/LICENSE +21 -21
  2. package/array/array-type.service.d.ts +68 -68
  3. package/array/array.service.d.ts +75 -75
  4. package/array/index.d.ts +2 -2
  5. package/array/yelon-util-array.d.ts +4 -4
  6. package/browser/browser.d.ts +4 -4
  7. package/browser/cookie.service.d.ts +64 -64
  8. package/browser/copy.d.ts +6 -6
  9. package/browser/index.d.ts +5 -5
  10. package/browser/is-empty.d.ts +6 -6
  11. package/browser/scroll.service.d.ts +34 -34
  12. package/browser/style.d.ts +21 -21
  13. package/bundles/browser.umd.js +275 -275
  14. package/bundles/yelon-util-array.umd.js +602 -602
  15. package/bundles/yelon-util-config.umd.js +366 -366
  16. package/bundles/yelon-util-date-time.umd.js +216 -216
  17. package/bundles/yelon-util-decorator.umd.js +437 -437
  18. package/bundles/yelon-util-form.umd.js +116 -116
  19. package/bundles/yelon-util-format.umd.js +726 -726
  20. package/bundles/yelon-util-math.umd.js +83 -83
  21. package/bundles/yelon-util-other.umd.js +655 -655
  22. package/bundles/yelon-util-pipes-currency.umd.js +83 -83
  23. package/bundles/yelon-util-pipes-filter.umd.js +353 -353
  24. package/bundles/yelon-util-pipes-format.umd.js +47 -47
  25. package/bundles/yelon-util-pipes.umd.js +7 -7
  26. package/bundles/yelon-util-token.umd.js +30 -30
  27. package/bundles/yelon-util.umd.js +7 -7
  28. package/config/abc/date-picker.type.d.ts +52 -52
  29. package/config/abc/error-collect.type.d.ts +10 -10
  30. package/config/abc/image.type.d.ts +15 -15
  31. package/config/abc/index.d.ts +16 -16
  32. package/config/abc/loading.type.d.ts +31 -31
  33. package/config/abc/lodop.type.d.ts +33 -33
  34. package/config/abc/media.type.d.ts +11 -11
  35. package/config/abc/onboarding.type.d.ts +4 -4
  36. package/config/abc/page-header.type.d.ts +39 -39
  37. package/config/abc/pdf.type.d.ts +35 -35
  38. package/config/abc/qr.type.d.ts +25 -25
  39. package/config/abc/se.type.d.ts +32 -32
  40. package/config/abc/sg.type.d.ts +10 -10
  41. package/config/abc/st.type.d.ts +431 -431
  42. package/config/abc/sv.type.d.ts +14 -14
  43. package/config/abc/xlsx.type.d.ts +12 -12
  44. package/config/abc/zip.type.d.ts +10 -10
  45. package/config/acl/acl.type.d.ts +32 -32
  46. package/config/auth/auth.type.d.ts +55 -55
  47. package/config/bis/bis.type.d.ts +7 -7
  48. package/config/cache/cache.type.d.ts +40 -40
  49. package/config/chart/chart.type.d.ts +33 -33
  50. package/config/config.service.d.ts +10 -10
  51. package/config/config.types.d.ts +49 -49
  52. package/config/index.d.ts +14 -14
  53. package/config/mock/mock.type.d.ts +18 -18
  54. package/config/sf/sf.type.d.ts +127 -127
  55. package/config/stomp/stomp.type.d.ts +2 -2
  56. package/config/theme/http.type.d.ts +14 -14
  57. package/config/theme/i18n.type.d.ts +8 -8
  58. package/config/theme/index.d.ts +3 -3
  59. package/config/theme/responsive.type.d.ts +12 -12
  60. package/config/util/array.type.d.ts +22 -22
  61. package/config/util/currency.type.d.ts +39 -39
  62. package/config/yelon-util-config.d.ts +4 -4
  63. package/date-time/index.d.ts +2 -2
  64. package/date-time/picker.d.ts +68 -68
  65. package/date-time/time.d.ts +26 -26
  66. package/date-time/yelon-util-date-time.d.ts +4 -4
  67. package/decorator/convert.d.ts +24 -24
  68. package/decorator/index.d.ts +2 -2
  69. package/decorator/yelon-util-decorator.d.ts +4 -4
  70. package/decorator/zone-outside.d.ts +35 -35
  71. package/esm2015/array/array-type.service.js +1 -1
  72. package/esm2015/array/array.service.js +249 -249
  73. package/esm2015/array/index.js +2 -2
  74. package/esm2015/array/yelon-util-array.js +4 -4
  75. package/esm2015/browser/browser.js +4 -4
  76. package/esm2015/browser/cookie.service.js +103 -103
  77. package/esm2015/browser/copy.js +26 -26
  78. package/esm2015/browser/index.js +5 -5
  79. package/esm2015/browser/is-empty.js +18 -18
  80. package/esm2015/browser/scroll.service.js +88 -88
  81. package/esm2015/browser/style.js +37 -37
  82. package/esm2015/config/abc/date-picker.type.js +1 -1
  83. package/esm2015/config/abc/error-collect.type.js +1 -1
  84. package/esm2015/config/abc/image.type.js +1 -1
  85. package/esm2015/config/abc/index.js +16 -16
  86. package/esm2015/config/abc/loading.type.js +1 -1
  87. package/esm2015/config/abc/lodop.type.js +1 -1
  88. package/esm2015/config/abc/media.type.js +1 -1
  89. package/esm2015/config/abc/onboarding.type.js +1 -1
  90. package/esm2015/config/abc/page-header.type.js +1 -1
  91. package/esm2015/config/abc/pdf.type.js +1 -1
  92. package/esm2015/config/abc/qr.type.js +1 -1
  93. package/esm2015/config/abc/se.type.js +1 -1
  94. package/esm2015/config/abc/sg.type.js +1 -1
  95. package/esm2015/config/abc/st.type.js +1 -1
  96. package/esm2015/config/abc/sv.type.js +2 -2
  97. package/esm2015/config/abc/xlsx.type.js +1 -1
  98. package/esm2015/config/abc/zip.type.js +1 -1
  99. package/esm2015/config/acl/acl.type.js +1 -1
  100. package/esm2015/config/auth/auth.type.js +1 -1
  101. package/esm2015/config/bis/bis.type.js +1 -1
  102. package/esm2015/config/cache/cache.type.js +1 -1
  103. package/esm2015/config/chart/chart.type.js +1 -1
  104. package/esm2015/config/config.service.js +33 -33
  105. package/esm2015/config/config.types.js +8 -8
  106. package/esm2015/config/index.js +14 -14
  107. package/esm2015/config/mock/mock.type.js +1 -1
  108. package/esm2015/config/sf/sf.type.js +1 -1
  109. package/esm2015/config/stomp/stomp.type.js +1 -1
  110. package/esm2015/config/theme/http.type.js +1 -1
  111. package/esm2015/config/theme/i18n.type.js +1 -1
  112. package/esm2015/config/theme/index.js +3 -3
  113. package/esm2015/config/theme/responsive.type.js +1 -1
  114. package/esm2015/config/util/array.type.js +1 -1
  115. package/esm2015/config/util/currency.type.js +1 -1
  116. package/esm2015/config/yelon-util-config.js +4 -4
  117. package/esm2015/date-time/index.js +2 -2
  118. package/esm2015/date-time/picker.js +115 -115
  119. package/esm2015/date-time/time.js +83 -83
  120. package/esm2015/date-time/yelon-util-date-time.js +4 -4
  121. package/esm2015/decorator/convert.js +55 -55
  122. package/esm2015/decorator/index.js +2 -2
  123. package/esm2015/decorator/yelon-util-decorator.js +4 -4
  124. package/esm2015/decorator/zone-outside.js +54 -54
  125. package/esm2015/form/index.js +2 -2
  126. package/esm2015/form/match-control.js +29 -29
  127. package/esm2015/form/validators.js +80 -80
  128. package/esm2015/form/yelon-util-form.js +4 -4
  129. package/esm2015/format/currency.service.js +224 -224
  130. package/esm2015/format/currency.types.js +7 -7
  131. package/esm2015/format/index.js +4 -4
  132. package/esm2015/format/string.js +75 -75
  133. package/esm2015/format/validate.js +93 -93
  134. package/esm2015/format/yelon-util-format.js +4 -4
  135. package/esm2015/index.js +11 -11
  136. package/esm2015/math/in-range.js +24 -24
  137. package/esm2015/math/index.js +2 -2
  138. package/esm2015/math/round.js +52 -52
  139. package/esm2015/math/yelon-util-math.js +4 -4
  140. package/esm2015/other/assert.js +66 -66
  141. package/esm2015/other/deep.js +75 -75
  142. package/esm2015/other/index.js +4 -4
  143. package/esm2015/other/lazy.service.js +117 -117
  144. package/esm2015/other/logger.js +35 -35
  145. package/esm2015/other/yelon-util-other.js +4 -4
  146. package/esm2015/pipes/currency/cny.pipe.js +21 -21
  147. package/esm2015/pipes/currency/index.js +3 -3
  148. package/esm2015/pipes/currency/mega.pipe.js +25 -25
  149. package/esm2015/pipes/currency/module.js +13 -13
  150. package/esm2015/pipes/currency/price.pipe.js +25 -25
  151. package/esm2015/pipes/currency/yelon-util-pipes-currency.js +5 -5
  152. package/esm2015/pipes/filter/filter.pipe.js +14 -14
  153. package/esm2015/pipes/filter/index.js +2 -2
  154. package/esm2015/pipes/filter/module.js +11 -11
  155. package/esm2015/pipes/filter/yelon-util-pipes-filter.js +4 -4
  156. package/esm2015/pipes/format/index.js +2 -2
  157. package/esm2015/pipes/format/mask.pipe.js +29 -29
  158. package/esm2015/pipes/format/module.js +11 -11
  159. package/esm2015/pipes/format/yelon-util-pipes-format.js +4 -4
  160. package/esm2015/pipes/index.js +3 -3
  161. package/esm2015/pipes/yelon-util-pipes.js +4 -4
  162. package/esm2015/token/index.js +2 -2
  163. package/esm2015/token/page-visibility.js +15 -15
  164. package/esm2015/token/window.js +16 -16
  165. package/esm2015/token/yelon-util-token.js +4 -4
  166. package/esm2015/yelon-util.js +4 -4
  167. package/fesm2015/browser.js +257 -257
  168. package/fesm2015/yelon-util-array.js +245 -245
  169. package/fesm2015/yelon-util-config.js +36 -36
  170. package/fesm2015/yelon-util-date-time.js +196 -196
  171. package/fesm2015/yelon-util-decorator.js +107 -107
  172. package/fesm2015/yelon-util-form.js +108 -108
  173. package/fesm2015/yelon-util-format.js +390 -390
  174. package/fesm2015/yelon-util-math.js +75 -75
  175. package/fesm2015/yelon-util-other.js +283 -283
  176. package/fesm2015/yelon-util-pipes-currency.js +72 -72
  177. package/fesm2015/yelon-util-pipes-filter.js +22 -22
  178. package/fesm2015/yelon-util-pipes-format.js +36 -36
  179. package/fesm2015/yelon-util-pipes.js +2 -2
  180. package/fesm2015/yelon-util-token.js +25 -25
  181. package/fesm2015/yelon-util.js +2 -2
  182. package/form/index.d.ts +2 -2
  183. package/form/match-control.d.ts +15 -15
  184. package/form/validators.d.ts +62 -62
  185. package/form/yelon-util-form.d.ts +4 -4
  186. package/format/currency.service.d.ts +34 -34
  187. package/format/currency.types.d.ts +77 -77
  188. package/format/index.d.ts +4 -4
  189. package/format/string.d.ts +44 -44
  190. package/format/validate.d.ts +72 -72
  191. package/format/yelon-util-format.d.ts +4 -4
  192. package/index.d.ts +11 -11
  193. package/math/in-range.d.ts +14 -14
  194. package/math/index.d.ts +2 -2
  195. package/math/round.d.ts +33 -33
  196. package/math/yelon-util-math.d.ts +4 -4
  197. package/other/assert.d.ts +36 -36
  198. package/other/deep.d.ts +33 -33
  199. package/other/index.d.ts +4 -4
  200. package/other/lazy.service.d.ts +22 -22
  201. package/other/logger.d.ts +6 -6
  202. package/other/yelon-util-other.d.ts +4 -4
  203. package/package.json +1 -1
  204. package/pipes/currency/cny.pipe.d.ts +12 -12
  205. package/pipes/currency/index.d.ts +3 -3
  206. package/pipes/currency/mega.pipe.d.ts +13 -13
  207. package/pipes/currency/module.d.ts +2 -2
  208. package/pipes/currency/price.pipe.d.ts +16 -16
  209. package/pipes/currency/yelon-util-pipes-currency.d.ts +5 -5
  210. package/pipes/filter/filter.pipe.d.ts +10 -10
  211. package/pipes/filter/index.d.ts +2 -2
  212. package/pipes/filter/module.d.ts +2 -2
  213. package/pipes/filter/yelon-util-pipes-filter.d.ts +4 -4
  214. package/pipes/format/index.d.ts +2 -2
  215. package/pipes/format/mask.pipe.d.ts +24 -24
  216. package/pipes/format/module.d.ts +2 -2
  217. package/pipes/format/yelon-util-pipes-format.d.ts +4 -4
  218. package/pipes/index.d.ts +3 -3
  219. package/pipes/yelon-util-pipes.d.ts +4 -4
  220. package/token/index.d.ts +2 -2
  221. package/token/page-visibility.d.ts +8 -8
  222. package/token/window.d.ts +7 -7
  223. package/token/yelon-util-token.d.ts +4 -4
  224. package/yelon-util.d.ts +4 -4
@@ -6,297 +6,297 @@ import { Injectable, Inject } from '@angular/core';
6
6
  import { BehaviorSubject, isObservable } from 'rxjs';
7
7
  import { share, filter } from 'rxjs/operators';
8
8
 
9
- /**
10
- * Gets the value at `path` of `object`, like `_.get` in lodash.
11
- *
12
- * 类似 `_.get`,根据 `path` 获取安全值
13
- */
14
- function deepGet(obj, path, defaultValue) {
15
- if (!obj || path == null || path.length === 0)
16
- return defaultValue;
17
- if (!Array.isArray(path)) {
18
- path = ~path.indexOf('.') ? path.split('.') : [path];
19
- }
20
- if (path.length === 1) {
21
- const checkObj = obj[path[0]];
22
- return typeof checkObj === 'undefined' ? defaultValue : checkObj;
23
- }
24
- const res = path.reduce((o, k) => (o || {})[k], obj);
25
- return typeof res === 'undefined' ? defaultValue : res;
26
- }
27
- /**
28
- * Base on [extend](https://github.com/justmoon/node-extend) deep copy.
29
- *
30
- * 基于 [extend](https://github.com/justmoon/node-extend) 的深度拷贝
31
- */
32
- function deepCopy(obj) {
33
- const result = extend(true, {}, { _: obj });
34
- return result._;
35
- }
36
- /**
37
- * Deep merge object.
38
- *
39
- * 深度合并对象
40
- *
41
- * @param original 原始对象
42
- * @param arrayProcessMethod 数组处理方式
43
- * - `true` 表示替换新值,不管新值为哪种类型
44
- * - `false` 表示会合并整个数组(将旧数据与新数据合并成新数组)
45
- * @param objects 要合并的对象
46
- */
47
- function deepMergeKey(original, arrayProcessMethod, ...objects) {
48
- if (Array.isArray(original) || typeof original !== 'object')
49
- return original;
50
- const isObject = (v) => typeof v === 'object';
51
- const merge = (target, obj) => {
52
- Object.keys(obj)
53
- .filter(key => key !== '__proto__' && Object.prototype.hasOwnProperty.call(obj, key))
54
- .forEach(key => {
55
- const fromValue = obj[key];
56
- const toValue = target[key];
57
- if (Array.isArray(toValue)) {
58
- target[key] = arrayProcessMethod ? fromValue : [...toValue, ...fromValue];
59
- }
60
- else if (typeof fromValue === 'function') {
61
- target[key] = fromValue;
62
- }
63
- else if (fromValue != null && isObject(fromValue) && toValue != null && isObject(toValue)) {
64
- target[key] = merge(toValue, fromValue);
65
- }
66
- else {
67
- target[key] = deepCopy(fromValue);
68
- }
69
- });
70
- return target;
71
- };
72
- objects.filter(v => v != null && isObject(v)).forEach(v => merge(original, v));
73
- return original;
74
- }
75
- /**
76
- * Deep merge object.
77
- *
78
- * 深度合并对象
79
- */
80
- function deepMerge(original, ...objects) {
81
- return deepMergeKey(original, false, ...objects);
9
+ /**
10
+ * Gets the value at `path` of `object`, like `_.get` in lodash.
11
+ *
12
+ * 类似 `_.get`,根据 `path` 获取安全值
13
+ */
14
+ function deepGet(obj, path, defaultValue) {
15
+ if (!obj || path == null || path.length === 0)
16
+ return defaultValue;
17
+ if (!Array.isArray(path)) {
18
+ path = ~path.indexOf('.') ? path.split('.') : [path];
19
+ }
20
+ if (path.length === 1) {
21
+ const checkObj = obj[path[0]];
22
+ return typeof checkObj === 'undefined' ? defaultValue : checkObj;
23
+ }
24
+ const res = path.reduce((o, k) => (o || {})[k], obj);
25
+ return typeof res === 'undefined' ? defaultValue : res;
26
+ }
27
+ /**
28
+ * Base on [extend](https://github.com/justmoon/node-extend) deep copy.
29
+ *
30
+ * 基于 [extend](https://github.com/justmoon/node-extend) 的深度拷贝
31
+ */
32
+ function deepCopy(obj) {
33
+ const result = extend(true, {}, { _: obj });
34
+ return result._;
35
+ }
36
+ /**
37
+ * Deep merge object.
38
+ *
39
+ * 深度合并对象
40
+ *
41
+ * @param original 原始对象
42
+ * @param arrayProcessMethod 数组处理方式
43
+ * - `true` 表示替换新值,不管新值为哪种类型
44
+ * - `false` 表示会合并整个数组(将旧数据与新数据合并成新数组)
45
+ * @param objects 要合并的对象
46
+ */
47
+ function deepMergeKey(original, arrayProcessMethod, ...objects) {
48
+ if (Array.isArray(original) || typeof original !== 'object')
49
+ return original;
50
+ const isObject = (v) => typeof v === 'object';
51
+ const merge = (target, obj) => {
52
+ Object.keys(obj)
53
+ .filter(key => key !== '__proto__' && Object.prototype.hasOwnProperty.call(obj, key))
54
+ .forEach(key => {
55
+ const fromValue = obj[key];
56
+ const toValue = target[key];
57
+ if (Array.isArray(toValue)) {
58
+ target[key] = arrayProcessMethod ? fromValue : [...toValue, ...fromValue];
59
+ }
60
+ else if (typeof fromValue === 'function') {
61
+ target[key] = fromValue;
62
+ }
63
+ else if (fromValue != null && isObject(fromValue) && toValue != null && isObject(toValue)) {
64
+ target[key] = merge(toValue, fromValue);
65
+ }
66
+ else {
67
+ target[key] = deepCopy(fromValue);
68
+ }
69
+ });
70
+ return target;
71
+ };
72
+ objects.filter(v => v != null && isObject(v)).forEach(v => merge(original, v));
73
+ return original;
74
+ }
75
+ /**
76
+ * Deep merge object.
77
+ *
78
+ * 深度合并对象
79
+ */
80
+ function deepMerge(original, ...objects) {
81
+ return deepMergeKey(original, false, ...objects);
82
82
  }
83
83
 
84
- const record = {};
85
- const PREFIX = '[@YELON]:';
86
- function notRecorded(...args) {
87
- const asRecord = args.reduce((acc, c) => acc + c.toString(), '');
88
- if (record[asRecord]) {
89
- return false;
90
- }
91
- else {
92
- record[asRecord] = true;
93
- return true;
94
- }
95
- }
96
- function consoleCommonBehavior(consoleFunc, ...args) {
97
- if (ngDevMode && notRecorded(...args)) {
98
- consoleFunc(...args);
99
- }
100
- }
101
- // Warning should only be printed in dev mode and only once.
102
- const warn = (...args) => consoleCommonBehavior((...arg) => console.warn(PREFIX, ...arg), ...args);
103
- const deprecation11 = (comp, from, to) => {
104
- warnDeprecation(`${comp} => '${from}' is going to be removed in 11.0.0${to ? `, Please use '${to}' instead` : ``}.`);
105
- };
106
- const warnDeprecation = (...args) => {
107
- if (ngDevMode) {
108
- return () => { };
109
- }
110
- const stack = new Error().stack;
111
- return consoleCommonBehavior((...arg) => console.warn(PREFIX, 'deprecated:', ...arg, stack), ...args);
112
- };
113
- // Log should only be printed in dev mode.
114
- const log = (...args) => {
115
- if (ngDevMode) {
116
- console.log(PREFIX, ...args);
117
- }
84
+ const record = {};
85
+ const PREFIX = '[@YELON]:';
86
+ function notRecorded(...args) {
87
+ const asRecord = args.reduce((acc, c) => acc + c.toString(), '');
88
+ if (record[asRecord]) {
89
+ return false;
90
+ }
91
+ else {
92
+ record[asRecord] = true;
93
+ return true;
94
+ }
95
+ }
96
+ function consoleCommonBehavior(consoleFunc, ...args) {
97
+ if (ngDevMode && notRecorded(...args)) {
98
+ consoleFunc(...args);
99
+ }
100
+ }
101
+ // Warning should only be printed in dev mode and only once.
102
+ const warn = (...args) => consoleCommonBehavior((...arg) => console.warn(PREFIX, ...arg), ...args);
103
+ const deprecation11 = (comp, from, to) => {
104
+ warnDeprecation(`${comp} => '${from}' is going to be removed in 11.0.0${to ? `, Please use '${to}' instead` : ``}.`);
105
+ };
106
+ const warnDeprecation = (...args) => {
107
+ if (ngDevMode) {
108
+ return () => { };
109
+ }
110
+ const stack = new Error().stack;
111
+ return consoleCommonBehavior((...arg) => console.warn(PREFIX, 'deprecated:', ...arg, stack), ...args);
112
+ };
113
+ // Log should only be printed in dev mode.
114
+ const log = (...args) => {
115
+ if (ngDevMode) {
116
+ console.log(PREFIX, ...args);
117
+ }
118
118
  };
119
119
 
120
- /**
121
- * 延迟加载资源(js 或 css)服务
122
- */
123
- class LazyService {
124
- constructor(doc) {
125
- this.doc = doc;
126
- this.list = {};
127
- this.cached = {};
128
- this._notify = new BehaviorSubject([]);
129
- }
130
- get change() {
131
- return this._notify.asObservable().pipe(share(), filter(ls => ls.length !== 0));
132
- }
133
- clear() {
134
- this.list = {};
135
- this.cached = {};
136
- }
137
- load(paths) {
138
- if (!Array.isArray(paths)) {
139
- paths = [paths];
140
- }
141
- const promises = [];
142
- paths.forEach(path => {
143
- if (path.endsWith('.js')) {
144
- promises.push(this.loadScript(path));
145
- }
146
- else {
147
- promises.push(this.loadStyle(path));
148
- }
149
- });
150
- return Promise.all(promises).then(res => {
151
- this._notify.next(res);
152
- return Promise.resolve(res);
153
- });
154
- }
155
- loadScript(path, innerContent) {
156
- return new Promise(resolve => {
157
- if (this.list[path] === true) {
158
- resolve(Object.assign(Object.assign({}, this.cached[path]), { status: 'loading' }));
159
- return;
160
- }
161
- this.list[path] = true;
162
- const onSuccess = (item) => {
163
- this.cached[path] = item;
164
- resolve(item);
165
- this._notify.next([item]);
166
- };
167
- const node = this.doc.createElement('script');
168
- node.type = 'text/javascript';
169
- node.src = path;
170
- node.charset = 'utf-8';
171
- if (innerContent) {
172
- node.innerHTML = innerContent;
173
- }
174
- if (node.readyState) {
175
- // IE
176
- node.onreadystatechange = () => {
177
- if (node.readyState === 'loaded' || node.readyState === 'complete') {
178
- node.onreadystatechange = null;
179
- onSuccess({
180
- path,
181
- status: 'ok'
182
- });
183
- }
184
- };
185
- }
186
- else {
187
- node.onload = () => onSuccess({
188
- path,
189
- status: 'ok'
190
- });
191
- }
192
- node.onerror = (error) => onSuccess({
193
- path,
194
- status: 'error',
195
- error
196
- });
197
- this.doc.getElementsByTagName('head')[0].appendChild(node);
198
- });
199
- }
200
- loadStyle(path, rel = 'stylesheet', innerContent) {
201
- return new Promise(resolve => {
202
- if (this.list[path] === true) {
203
- resolve(this.cached[path]);
204
- return;
205
- }
206
- this.list[path] = true;
207
- const node = this.doc.createElement('link');
208
- node.rel = rel;
209
- node.type = 'text/css';
210
- node.href = path;
211
- if (innerContent) {
212
- node.innerHTML = innerContent;
213
- }
214
- this.doc.getElementsByTagName('head')[0].appendChild(node);
215
- const item = {
216
- path,
217
- status: 'ok'
218
- };
219
- this.cached[path] = item;
220
- resolve(item);
221
- });
222
- }
223
- }
224
- LazyService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LazyService_Factory() { return new LazyService(i0.ɵɵinject(i1.DOCUMENT)); }, token: LazyService, providedIn: "root" });
225
- LazyService.decorators = [
226
- { type: Injectable, args: [{ providedIn: 'root' },] }
227
- ];
228
- LazyService.ctorParameters = () => [
229
- { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
120
+ /**
121
+ * 延迟加载资源(js 或 css)服务
122
+ */
123
+ class LazyService {
124
+ constructor(doc) {
125
+ this.doc = doc;
126
+ this.list = {};
127
+ this.cached = {};
128
+ this._notify = new BehaviorSubject([]);
129
+ }
130
+ get change() {
131
+ return this._notify.asObservable().pipe(share(), filter(ls => ls.length !== 0));
132
+ }
133
+ clear() {
134
+ this.list = {};
135
+ this.cached = {};
136
+ }
137
+ load(paths) {
138
+ if (!Array.isArray(paths)) {
139
+ paths = [paths];
140
+ }
141
+ const promises = [];
142
+ paths.forEach(path => {
143
+ if (path.endsWith('.js')) {
144
+ promises.push(this.loadScript(path));
145
+ }
146
+ else {
147
+ promises.push(this.loadStyle(path));
148
+ }
149
+ });
150
+ return Promise.all(promises).then(res => {
151
+ this._notify.next(res);
152
+ return Promise.resolve(res);
153
+ });
154
+ }
155
+ loadScript(path, innerContent) {
156
+ return new Promise(resolve => {
157
+ if (this.list[path] === true) {
158
+ resolve(Object.assign(Object.assign({}, this.cached[path]), { status: 'loading' }));
159
+ return;
160
+ }
161
+ this.list[path] = true;
162
+ const onSuccess = (item) => {
163
+ this.cached[path] = item;
164
+ resolve(item);
165
+ this._notify.next([item]);
166
+ };
167
+ const node = this.doc.createElement('script');
168
+ node.type = 'text/javascript';
169
+ node.src = path;
170
+ node.charset = 'utf-8';
171
+ if (innerContent) {
172
+ node.innerHTML = innerContent;
173
+ }
174
+ if (node.readyState) {
175
+ // IE
176
+ node.onreadystatechange = () => {
177
+ if (node.readyState === 'loaded' || node.readyState === 'complete') {
178
+ node.onreadystatechange = null;
179
+ onSuccess({
180
+ path,
181
+ status: 'ok'
182
+ });
183
+ }
184
+ };
185
+ }
186
+ else {
187
+ node.onload = () => onSuccess({
188
+ path,
189
+ status: 'ok'
190
+ });
191
+ }
192
+ node.onerror = (error) => onSuccess({
193
+ path,
194
+ status: 'error',
195
+ error
196
+ });
197
+ this.doc.getElementsByTagName('head')[0].appendChild(node);
198
+ });
199
+ }
200
+ loadStyle(path, rel = 'stylesheet', innerContent) {
201
+ return new Promise(resolve => {
202
+ if (this.list[path] === true) {
203
+ resolve(this.cached[path]);
204
+ return;
205
+ }
206
+ this.list[path] = true;
207
+ const node = this.doc.createElement('link');
208
+ node.rel = rel;
209
+ node.type = 'text/css';
210
+ node.href = path;
211
+ if (innerContent) {
212
+ node.innerHTML = innerContent;
213
+ }
214
+ this.doc.getElementsByTagName('head')[0].appendChild(node);
215
+ const item = {
216
+ path,
217
+ status: 'ok'
218
+ };
219
+ this.cached[path] = item;
220
+ resolve(item);
221
+ });
222
+ }
223
+ }
224
+ LazyService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LazyService_Factory() { return new LazyService(i0.ɵɵinject(i1.DOCUMENT)); }, token: LazyService, providedIn: "root" });
225
+ LazyService.decorators = [
226
+ { type: Injectable, args: [{ providedIn: 'root' },] }
227
+ ];
228
+ LazyService.ctorParameters = () => [
229
+ { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
230
230
  ];
231
231
 
232
- function throwError(msg, actual, expected, comparison) {
233
- if (ngDevMode) {
234
- throw new Error(`ASSERTION ERROR: ${msg}${comparison == null ? '' : ` [Expected=> ${expected} ${comparison} ${actual} <=Actual]`}`);
235
- }
236
- }
237
- /**
238
- * Assert whether the expression and throw an error into console in dev mode
239
- *
240
- * 断言表达式是否符合预期,并在开发模式下会在控制台抛出一个错误
241
- */
242
- function assert(expression, msg) {
243
- if (!expression) {
244
- throwError(msg);
245
- }
246
- }
247
- /**
248
- * Assert whether empty (`null` or `undefined`)
249
- *
250
- * 断言是否空值(`null` 或 `undefined`)
251
- */
252
- function assertEmpty(actual, msg) {
253
- if (actual == null) {
254
- throwError(msg, typeof actual, 'NULL', '==');
255
- }
256
- }
257
- /**
258
- * Assert whether `number` type
259
- *
260
- * 断言是否 `number` 类型
261
- */
262
- function assertNumber(actual, msg) {
263
- if (!(typeof actual === 'number')) {
264
- throwError(msg, typeof actual, 'number', '===');
265
- }
266
- }
267
- /**
268
- * Assert whether `string` type
269
- *
270
- * 断言是否 `string` 类型
271
- */
272
- function assertString(actual, msg) {
273
- if (!(typeof actual === 'string')) {
274
- throwError(msg, actual === null ? 'null' : typeof actual, 'string', '===');
275
- }
276
- }
277
- /**
278
- * Assert whether `array` type
279
- *
280
- * 断言是否 `array` 类型
281
- */
282
- function assertArray(actual, msg) {
283
- if (!Array.isArray(actual)) {
284
- throwError(msg, actual === null ? 'null' : typeof actual, 'array', '===');
285
- }
286
- }
287
- /**
288
- * Assert whether `Observable` type
289
- *
290
- * 断言是否 `Observable` 类型
291
- */
292
- function assertObservable(obj, msg) {
293
- if (!isObservable(obj)) {
294
- throwError(msg, obj === null ? 'null' : typeof obj, 'Observable', '===');
295
- }
232
+ function throwError(msg, actual, expected, comparison) {
233
+ if (ngDevMode) {
234
+ throw new Error(`ASSERTION ERROR: ${msg}${comparison == null ? '' : ` [Expected=> ${expected} ${comparison} ${actual} <=Actual]`}`);
235
+ }
236
+ }
237
+ /**
238
+ * Assert whether the expression and throw an error into console in dev mode
239
+ *
240
+ * 断言表达式是否符合预期,并在开发模式下会在控制台抛出一个错误
241
+ */
242
+ function assert(expression, msg) {
243
+ if (!expression) {
244
+ throwError(msg);
245
+ }
246
+ }
247
+ /**
248
+ * Assert whether empty (`null` or `undefined`)
249
+ *
250
+ * 断言是否空值(`null` 或 `undefined`)
251
+ */
252
+ function assertEmpty(actual, msg) {
253
+ if (actual == null) {
254
+ throwError(msg, typeof actual, 'NULL', '==');
255
+ }
256
+ }
257
+ /**
258
+ * Assert whether `number` type
259
+ *
260
+ * 断言是否 `number` 类型
261
+ */
262
+ function assertNumber(actual, msg) {
263
+ if (!(typeof actual === 'number')) {
264
+ throwError(msg, typeof actual, 'number', '===');
265
+ }
266
+ }
267
+ /**
268
+ * Assert whether `string` type
269
+ *
270
+ * 断言是否 `string` 类型
271
+ */
272
+ function assertString(actual, msg) {
273
+ if (!(typeof actual === 'string')) {
274
+ throwError(msg, actual === null ? 'null' : typeof actual, 'string', '===');
275
+ }
276
+ }
277
+ /**
278
+ * Assert whether `array` type
279
+ *
280
+ * 断言是否 `array` 类型
281
+ */
282
+ function assertArray(actual, msg) {
283
+ if (!Array.isArray(actual)) {
284
+ throwError(msg, actual === null ? 'null' : typeof actual, 'array', '===');
285
+ }
286
+ }
287
+ /**
288
+ * Assert whether `Observable` type
289
+ *
290
+ * 断言是否 `Observable` 类型
291
+ */
292
+ function assertObservable(obj, msg) {
293
+ if (!isObservable(obj)) {
294
+ throwError(msg, obj === null ? 'null' : typeof obj, 'Observable', '===');
295
+ }
296
296
  }
297
297
 
298
- /**
299
- * Generated bundle index. Do not edit.
298
+ /**
299
+ * Generated bundle index. Do not edit.
300
300
  */
301
301
 
302
302
  export { LazyService, PREFIX, assert, assertArray, assertEmpty, assertNumber, assertObservable, assertString, deepCopy, deepGet, deepMerge, deepMergeKey, deprecation11, log, warn, warnDeprecation };