@yelon/util 12.0.17 → 12.0.18

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 +652 -652
  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 +427 -427
  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 +32 -32
  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 +280 -280
  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 +5 -5
  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,294 +6,294 @@ 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 ((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
- }
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
+ }
115
115
  };
116
116
 
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,] }] }
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,] }] }
227
227
  ];
228
228
 
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
- }
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
+ }
293
293
  }
294
294
 
295
- /**
296
- * Generated bundle index. Do not edit.
295
+ /**
296
+ * Generated bundle index. Do not edit.
297
297
  */
298
298
 
299
299
  export { LazyService, PREFIX, assert, assertArray, assertEmpty, assertNumber, assertObservable, assertString, deepCopy, deepGet, deepMerge, deepMergeKey, log, warn, warnDeprecation };