@yelon/util 12.0.13 → 12.0.17

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