@yelon/util 15.2.0 → 15.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (218) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +22 -22
  3. package/array/array-type.service.d.ts +68 -68
  4. package/array/array.service.d.ts +78 -78
  5. package/array/index.d.ts +2 -2
  6. package/browser/cookie.service.d.ts +67 -67
  7. package/browser/copy.d.ts +6 -6
  8. package/browser/index.d.ts +5 -5
  9. package/browser/is-empty.d.ts +6 -6
  10. package/browser/scroll.service.d.ts +37 -37
  11. package/browser/style.d.ts +21 -21
  12. package/config/abc/date-picker.type.d.ts +52 -52
  13. package/config/abc/error-collect.type.d.ts +10 -10
  14. package/config/abc/exception.type.d.ts +9 -9
  15. package/config/abc/image.type.d.ts +15 -15
  16. package/config/abc/index.d.ts +17 -17
  17. package/config/abc/loading.type.d.ts +31 -31
  18. package/config/abc/lodop.type.d.ts +33 -33
  19. package/config/abc/media.type.d.ts +11 -11
  20. package/config/abc/onboarding.type.d.ts +4 -4
  21. package/config/abc/page-header.type.d.ts +39 -39
  22. package/config/abc/pdf.type.d.ts +35 -35
  23. package/config/abc/qr.type.d.ts +25 -25
  24. package/config/abc/se.type.d.ts +32 -32
  25. package/config/abc/sg.type.d.ts +10 -10
  26. package/config/abc/st.type.d.ts +465 -465
  27. package/config/abc/sv.type.d.ts +14 -14
  28. package/config/abc/xlsx.type.d.ts +12 -12
  29. package/config/abc/zip.type.d.ts +10 -10
  30. package/config/acl/acl.type.d.ts +32 -32
  31. package/config/auth/auth.type.d.ts +55 -55
  32. package/config/bis/bis.type.d.ts +7 -7
  33. package/config/cache/cache.type.d.ts +40 -40
  34. package/config/chart/chart.type.d.ts +33 -33
  35. package/config/config.service.d.ts +13 -13
  36. package/config/config.types.d.ts +48 -48
  37. package/config/index.d.ts +14 -14
  38. package/config/mock/mock.type.d.ts +18 -18
  39. package/config/sf/sf.type.d.ts +133 -133
  40. package/config/socket/socket.type.d.ts +4 -4
  41. package/config/theme/http.type.d.ts +14 -14
  42. package/config/theme/i18n.type.d.ts +14 -14
  43. package/config/theme/index.d.ts +3 -3
  44. package/config/theme/responsive.type.d.ts +12 -12
  45. package/config/util/array.type.d.ts +22 -22
  46. package/config/util/currency.type.d.ts +39 -39
  47. package/date-time/index.d.ts +2 -2
  48. package/date-time/picker.d.ts +68 -68
  49. package/date-time/time.d.ts +29 -29
  50. package/decorator/convert.d.ts +24 -24
  51. package/decorator/index.d.ts +2 -2
  52. package/decorator/zone-outside.d.ts +35 -35
  53. package/esm2020/array/array-type.service.mjs +1 -1
  54. package/esm2020/array/array.mjs +4 -4
  55. package/esm2020/array/array.service.mjs +276 -276
  56. package/esm2020/array/index.mjs +2 -2
  57. package/esm2020/browser/browser.mjs +4 -4
  58. package/esm2020/browser/cookie.service.mjs +102 -102
  59. package/esm2020/browser/copy.mjs +27 -27
  60. package/esm2020/browser/index.mjs +5 -5
  61. package/esm2020/browser/is-empty.mjs +18 -18
  62. package/esm2020/browser/scroll.service.mjs +87 -87
  63. package/esm2020/browser/style.mjs +37 -37
  64. package/esm2020/config/abc/date-picker.type.mjs +1 -1
  65. package/esm2020/config/abc/error-collect.type.mjs +1 -1
  66. package/esm2020/config/abc/exception.type.mjs +1 -1
  67. package/esm2020/config/abc/image.type.mjs +1 -1
  68. package/esm2020/config/abc/index.mjs +17 -17
  69. package/esm2020/config/abc/loading.type.mjs +1 -1
  70. package/esm2020/config/abc/lodop.type.mjs +1 -1
  71. package/esm2020/config/abc/media.type.mjs +1 -1
  72. package/esm2020/config/abc/onboarding.type.mjs +1 -1
  73. package/esm2020/config/abc/page-header.type.mjs +1 -1
  74. package/esm2020/config/abc/pdf.type.mjs +1 -1
  75. package/esm2020/config/abc/qr.type.mjs +1 -1
  76. package/esm2020/config/abc/se.type.mjs +1 -1
  77. package/esm2020/config/abc/sg.type.mjs +1 -1
  78. package/esm2020/config/abc/st.type.mjs +1 -1
  79. package/esm2020/config/abc/sv.type.mjs +2 -2
  80. package/esm2020/config/abc/xlsx.type.mjs +1 -1
  81. package/esm2020/config/abc/zip.type.mjs +1 -1
  82. package/esm2020/config/acl/acl.type.mjs +1 -1
  83. package/esm2020/config/auth/auth.type.mjs +1 -1
  84. package/esm2020/config/bis/bis.type.mjs +1 -1
  85. package/esm2020/config/cache/cache.type.mjs +1 -1
  86. package/esm2020/config/chart/chart.type.mjs +1 -1
  87. package/esm2020/config/config.mjs +4 -4
  88. package/esm2020/config/config.service.mjs +36 -36
  89. package/esm2020/config/config.types.mjs +8 -8
  90. package/esm2020/config/index.mjs +14 -14
  91. package/esm2020/config/mock/mock.type.mjs +1 -1
  92. package/esm2020/config/sf/sf.type.mjs +1 -1
  93. package/esm2020/config/socket/socket.type.mjs +1 -1
  94. package/esm2020/config/theme/http.type.mjs +1 -1
  95. package/esm2020/config/theme/i18n.type.mjs +1 -1
  96. package/esm2020/config/theme/index.mjs +3 -3
  97. package/esm2020/config/theme/responsive.type.mjs +1 -1
  98. package/esm2020/config/util/array.type.mjs +1 -1
  99. package/esm2020/config/util/currency.type.mjs +1 -1
  100. package/esm2020/date-time/date-time.mjs +4 -4
  101. package/esm2020/date-time/index.mjs +2 -2
  102. package/esm2020/date-time/picker.mjs +115 -115
  103. package/esm2020/date-time/time.mjs +88 -88
  104. package/esm2020/decorator/convert.mjs +57 -57
  105. package/esm2020/decorator/decorator.mjs +4 -4
  106. package/esm2020/decorator/index.mjs +2 -2
  107. package/esm2020/decorator/zone-outside.mjs +56 -56
  108. package/esm2020/form/form.mjs +4 -4
  109. package/esm2020/form/index.mjs +2 -2
  110. package/esm2020/form/match-control.mjs +29 -29
  111. package/esm2020/form/validators.mjs +80 -80
  112. package/esm2020/format/currency.service.mjs +237 -237
  113. package/esm2020/format/currency.types.mjs +7 -7
  114. package/esm2020/format/format.mjs +4 -4
  115. package/esm2020/format/index.mjs +4 -4
  116. package/esm2020/format/string.mjs +84 -84
  117. package/esm2020/format/validate.mjs +93 -93
  118. package/esm2020/index.mjs +11 -11
  119. package/esm2020/math/in-range.mjs +24 -24
  120. package/esm2020/math/index.mjs +2 -2
  121. package/esm2020/math/math.mjs +4 -4
  122. package/esm2020/math/round.mjs +52 -52
  123. package/esm2020/other/assert.mjs +66 -66
  124. package/esm2020/other/deep.mjs +77 -77
  125. package/esm2020/other/favicon.mjs +28 -28
  126. package/esm2020/other/index.mjs +7 -7
  127. package/esm2020/other/lazy.service.mjs +131 -131
  128. package/esm2020/other/logger.mjs +32 -32
  129. package/esm2020/other/other.mjs +4 -4
  130. package/esm2020/other/path-to-regexp.service.mjs +238 -238
  131. package/esm2020/other/resize.mjs +3 -3
  132. package/esm2020/pipes/currency/cny.pipe.mjs +22 -22
  133. package/esm2020/pipes/currency/index.mjs +4 -4
  134. package/esm2020/pipes/currency/mega.pipe.mjs +28 -28
  135. package/esm2020/pipes/currency/module.mjs +18 -18
  136. package/esm2020/pipes/currency/pipe-currency.mjs +4 -4
  137. package/esm2020/pipes/currency/price.pipe.mjs +26 -26
  138. package/esm2020/pipes/filter/filter.pipe.mjs +18 -18
  139. package/esm2020/pipes/filter/index.mjs +2 -2
  140. package/esm2020/pipes/filter/module.mjs +16 -16
  141. package/esm2020/pipes/filter/pipe-filter.mjs +4 -4
  142. package/esm2020/pipes/format/index.mjs +2 -2
  143. package/esm2020/pipes/format/mask.pipe.mjs +33 -33
  144. package/esm2020/pipes/format/module.mjs +16 -16
  145. package/esm2020/pipes/format/pipe-format.mjs +4 -4
  146. package/esm2020/pipes/index.mjs +3 -3
  147. package/esm2020/pipes/pipes.mjs +4 -4
  148. package/esm2020/token/index.mjs +2 -2
  149. package/esm2020/token/page-visibility.mjs +14 -14
  150. package/esm2020/token/token.mjs +4 -4
  151. package/esm2020/token/window.mjs +16 -16
  152. package/esm2020/yelon-util.mjs +4 -4
  153. package/fesm2015/array.mjs +254 -254
  154. package/fesm2015/browser.mjs +283 -283
  155. package/fesm2015/config.mjs +56 -56
  156. package/fesm2015/date-time.mjs +207 -207
  157. package/fesm2015/decorator.mjs +121 -121
  158. package/fesm2015/form.mjs +118 -118
  159. package/fesm2015/format.mjs +413 -413
  160. package/fesm2015/math.mjs +85 -85
  161. package/fesm2015/other.mjs +589 -589
  162. package/fesm2015/pipe-currency.mjs +96 -96
  163. package/fesm2015/pipe-filter.mjs +40 -40
  164. package/fesm2015/pipe-format.mjs +55 -55
  165. package/fesm2015/pipes.mjs +8 -8
  166. package/fesm2015/token.mjs +37 -37
  167. package/fesm2015/yelon-util.mjs +16 -16
  168. package/fesm2020/array.mjs +284 -284
  169. package/fesm2020/browser.mjs +279 -279
  170. package/fesm2020/config.mjs +54 -54
  171. package/fesm2020/date-time.mjs +211 -211
  172. package/fesm2020/decorator.mjs +121 -121
  173. package/fesm2020/form.mjs +118 -118
  174. package/fesm2020/format.mjs +431 -431
  175. package/fesm2020/math.mjs +85 -85
  176. package/fesm2020/other.mjs +586 -586
  177. package/fesm2020/pipe-currency.mjs +94 -94
  178. package/fesm2020/pipe-filter.mjs +40 -40
  179. package/fesm2020/pipe-format.mjs +55 -55
  180. package/fesm2020/pipes.mjs +8 -8
  181. package/fesm2020/token.mjs +37 -37
  182. package/fesm2020/yelon-util.mjs +16 -16
  183. package/form/index.d.ts +2 -2
  184. package/form/match-control.d.ts +15 -15
  185. package/form/validators.d.ts +62 -62
  186. package/format/currency.service.d.ts +37 -37
  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/index.d.ts +11 -11
  192. package/math/in-range.d.ts +14 -14
  193. package/math/index.d.ts +2 -2
  194. package/math/round.d.ts +33 -33
  195. package/other/assert.d.ts +36 -36
  196. package/other/deep.d.ts +35 -35
  197. package/other/favicon.d.ts +2 -2
  198. package/other/index.d.ts +7 -7
  199. package/other/lazy.service.d.ts +48 -48
  200. package/other/logger.d.ts +5 -5
  201. package/other/path-to-regexp.service.d.ts +26 -26
  202. package/other/resize.d.ts +1 -1
  203. package/package.json +157 -157
  204. package/pipes/currency/cny.pipe.d.ts +15 -15
  205. package/pipes/currency/index.d.ts +4 -4
  206. package/pipes/currency/mega.pipe.d.ts +16 -16
  207. package/pipes/currency/module.d.ts +9 -9
  208. package/pipes/currency/price.pipe.d.ts +19 -19
  209. package/pipes/filter/filter.pipe.d.ts +13 -13
  210. package/pipes/filter/index.d.ts +2 -2
  211. package/pipes/filter/module.d.ts +7 -7
  212. package/pipes/format/index.d.ts +2 -2
  213. package/pipes/format/mask.pipe.d.ts +27 -27
  214. package/pipes/format/module.d.ts +7 -7
  215. package/pipes/index.d.ts +3 -3
  216. package/token/index.d.ts +2 -2
  217. package/token/page-visibility.d.ts +8 -8
  218. package/token/window.d.ts +7 -7
@@ -1,239 +1,239 @@
1
- /* eslint-disable @typescript-eslint/explicit-function-return-type */
2
- import { Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class PathToRegexpService {
5
- constructor() {
6
- this.DEFAULT_DELIMITER = '/';
7
- this.PATH_REGEXP = new RegExp(['(\\\\.)', '(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?'].join('|'), 'g');
8
- }
9
- parse(str, options) {
10
- const tokens = [];
11
- let key = 0;
12
- let index = 0;
13
- let path = '';
14
- const defaultDelimiter = (options && options.delimiter) || this.DEFAULT_DELIMITER;
15
- const whitelist = (options && options.whitelist) || undefined;
16
- let pathEscaped = false;
17
- let res;
18
- while ((res = this.PATH_REGEXP.exec(str)) !== null) {
19
- const m = res[0];
20
- const escaped = res[1];
21
- const offset = res.index;
22
- path += str.slice(index, offset);
23
- index = offset + m.length;
24
- // Ignore already escaped sequences.
25
- if (escaped) {
26
- path += escaped[1];
27
- pathEscaped = true;
28
- continue;
29
- }
30
- let prev = '';
31
- const name = res[2];
32
- const capture = res[3];
33
- const group = res[4];
34
- const modifier = res[5];
35
- if (!pathEscaped && path.length) {
36
- const k = path.length - 1;
37
- const c = path[k];
38
- const matches = whitelist ? whitelist.indexOf(c) > -1 : true;
39
- if (matches) {
40
- prev = c;
41
- path = path.slice(0, k);
42
- }
43
- }
44
- // Push the current path onto the tokens.
45
- if (path) {
46
- tokens.push(path);
47
- path = '';
48
- pathEscaped = false;
49
- }
50
- const repeat = modifier === '+' || modifier === '*';
51
- const optional = modifier === '?' || modifier === '*';
52
- const pattern = capture || group;
53
- const delimiter = prev || defaultDelimiter;
54
- tokens.push({
55
- name: name || key++,
56
- prefix: prev,
57
- delimiter: delimiter,
58
- optional: optional,
59
- repeat: repeat,
60
- pattern: pattern
61
- ? this.escapeGroup(pattern)
62
- : `[^${this.escapeString(delimiter === defaultDelimiter ? delimiter : delimiter + defaultDelimiter)}]+?`
63
- });
64
- }
65
- // Push any remaining characters.
66
- if (path || index < str.length) {
67
- tokens.push(path + str.substr(index));
68
- }
69
- return tokens;
70
- }
71
- compile(str, options) {
72
- return this.tokensToFunction(this.parse(str, options), options);
73
- }
74
- tokensToFunction(tokens, options) {
75
- const matches = new Array(tokens.length);
76
- for (let i = 0; i < tokens.length; i++) {
77
- if (typeof tokens[i] === 'object') {
78
- matches[i] = new RegExp(`^(?:${tokens[i].pattern})$`, this.flags(options));
79
- }
80
- }
81
- return function (data, options) {
82
- let path = '';
83
- const encode = (options && options.encode) || encodeURIComponent;
84
- const validate = options ? options.validate !== false : true;
85
- for (let i = 0; i < tokens.length; i++) {
86
- const token = tokens[i];
87
- if (typeof token === 'string') {
88
- path += token;
89
- continue;
90
- }
91
- const value = data ? data[token.name] : undefined;
92
- let segment;
93
- if (Array.isArray(value)) {
94
- if (!token.repeat) {
95
- throw new TypeError(`Expected "${token.name}" to not repeat, but got array`);
96
- }
97
- if (value.length === 0) {
98
- if (token.optional) {
99
- continue;
100
- }
101
- throw new TypeError(`Expected "${token.name}" to not be empty`);
102
- }
103
- for (let j = 0; j < value.length; j++) {
104
- segment = encode(value[j], token);
105
- if (validate && !matches[i].test(segment)) {
106
- throw new TypeError(`Expected all "${token.name}" to match "${token.pattern}"`);
107
- }
108
- path += (j === 0 ? token.prefix : token.delimiter) + segment;
109
- }
110
- continue;
111
- }
112
- if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
113
- segment = encode(String(value), token);
114
- if (validate && !matches[i].test(segment)) {
115
- throw new TypeError(`Expected "${token.name}" to match "${token.pattern}", but got "${segment}"`);
116
- }
117
- path += token.prefix + segment;
118
- continue;
119
- }
120
- if (token.optional) {
121
- continue;
122
- }
123
- throw new TypeError(`Expected "${token.name}" to be ${token.repeat ? 'an array' : 'a string'}`);
124
- }
125
- return path;
126
- };
127
- }
128
- escapeString(str) {
129
- return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, '\\$1');
130
- }
131
- escapeGroup(group) {
132
- return group.replace(/([=!:$/()])/g, '\\$1');
133
- }
134
- flags(options) {
135
- return options && options.sensitive ? '' : 'i';
136
- }
137
- regexpToRegexp(path, keys) {
138
- if (!keys) {
139
- return path;
140
- }
141
- const groups = path.source.match(/\((?!\?)/g);
142
- if (groups) {
143
- for (let i = 0; i < groups.length; i++) {
144
- keys.push({
145
- name: i,
146
- prefix: null,
147
- delimiter: null,
148
- optional: false,
149
- repeat: false,
150
- pattern: null
151
- });
152
- }
153
- }
154
- return path;
155
- }
156
- arrayToRegexp(path, keys, options) {
157
- const parts = [];
158
- for (let i = 0; i < path.length; i++) {
159
- parts.push(this.pathToRegexp(path[i], keys, options).source);
160
- }
161
- return new RegExp(`(?:${parts.join('|')})`, this.flags(options));
162
- }
163
- stringToRegexp(path, keys, options) {
164
- return this.tokensToRegExp(this.parse(path, options), keys, options);
165
- }
166
- tokensToRegExp(tokens, keys, options) {
167
- options = options || {};
168
- const strict = options.strict;
169
- const start = options.start !== false;
170
- const end = options.end !== false;
171
- const delimiter = options.delimiter || this.DEFAULT_DELIMITER;
172
- const endsWith = []
173
- .concat(options.endsWith || [])
174
- .map(this.escapeString)
175
- .concat('$')
176
- .join('|');
177
- let route = start ? '^' : '';
178
- for (let i = 0; i < tokens.length; i++) {
179
- const token = tokens[i];
180
- if (typeof token === 'string') {
181
- route += this.escapeString(token);
182
- }
183
- else {
184
- const capture = token.repeat
185
- ? `(?:${token.pattern})(?:${this.escapeString(token.delimiter)}(?:${token.pattern}))*`
186
- : token.pattern;
187
- if (keys) {
188
- keys.push(token);
189
- }
190
- if (token.optional) {
191
- if (!token.prefix) {
192
- route += `(${capture})?`;
193
- }
194
- else {
195
- route += `(?:${this.escapeString(token.prefix)}(${capture}))?`;
196
- }
197
- }
198
- else {
199
- route += `${this.escapeString(token.prefix)}(${capture})`;
200
- }
201
- }
202
- }
203
- if (end) {
204
- if (!strict) {
205
- route += `(?:${this.escapeString(delimiter)})?`;
206
- }
207
- route += endsWith === '$' ? '$' : `(?=${endsWith})`;
208
- }
209
- else {
210
- const endToken = tokens[tokens.length - 1];
211
- const isEndDelimited = typeof endToken === 'string' ? endToken[endToken.length - 1] === delimiter : endToken === undefined;
212
- if (!strict) {
213
- route += `(?:${this.escapeString(delimiter)}(?=${endsWith}))?`;
214
- }
215
- if (!isEndDelimited) {
216
- route += `(?=${this.escapeString(delimiter)}|${endsWith})`;
217
- }
218
- }
219
- return new RegExp(route, this.flags(options));
220
- }
221
- pathToRegexp(path, keys, options) {
222
- if (path instanceof RegExp) {
223
- return this.regexpToRegexp(path, keys);
224
- }
225
- if (Array.isArray(path)) {
226
- return this.arrayToRegexp(/** @type {!Array} */ path, keys, options);
227
- }
228
- return this.stringToRegexp(/** @type {string} */ path, keys, options);
229
- }
230
- }
231
- PathToRegexpService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: PathToRegexpService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
232
- PathToRegexpService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: PathToRegexpService, providedIn: 'root' });
233
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: PathToRegexpService, decorators: [{
234
- type: Injectable,
235
- args: [{
236
- providedIn: 'root'
237
- }]
238
- }], ctorParameters: function () { return []; } });
1
+ /* eslint-disable @typescript-eslint/explicit-function-return-type */
2
+ import { Injectable } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export class PathToRegexpService {
5
+ constructor() {
6
+ this.DEFAULT_DELIMITER = '/';
7
+ this.PATH_REGEXP = new RegExp(['(\\\\.)', '(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?'].join('|'), 'g');
8
+ }
9
+ parse(str, options) {
10
+ const tokens = [];
11
+ let key = 0;
12
+ let index = 0;
13
+ let path = '';
14
+ const defaultDelimiter = (options && options.delimiter) || this.DEFAULT_DELIMITER;
15
+ const whitelist = (options && options.whitelist) || undefined;
16
+ let pathEscaped = false;
17
+ let res;
18
+ while ((res = this.PATH_REGEXP.exec(str)) !== null) {
19
+ const m = res[0];
20
+ const escaped = res[1];
21
+ const offset = res.index;
22
+ path += str.slice(index, offset);
23
+ index = offset + m.length;
24
+ // Ignore already escaped sequences.
25
+ if (escaped) {
26
+ path += escaped[1];
27
+ pathEscaped = true;
28
+ continue;
29
+ }
30
+ let prev = '';
31
+ const name = res[2];
32
+ const capture = res[3];
33
+ const group = res[4];
34
+ const modifier = res[5];
35
+ if (!pathEscaped && path.length) {
36
+ const k = path.length - 1;
37
+ const c = path[k];
38
+ const matches = whitelist ? whitelist.indexOf(c) > -1 : true;
39
+ if (matches) {
40
+ prev = c;
41
+ path = path.slice(0, k);
42
+ }
43
+ }
44
+ // Push the current path onto the tokens.
45
+ if (path) {
46
+ tokens.push(path);
47
+ path = '';
48
+ pathEscaped = false;
49
+ }
50
+ const repeat = modifier === '+' || modifier === '*';
51
+ const optional = modifier === '?' || modifier === '*';
52
+ const pattern = capture || group;
53
+ const delimiter = prev || defaultDelimiter;
54
+ tokens.push({
55
+ name: name || key++,
56
+ prefix: prev,
57
+ delimiter: delimiter,
58
+ optional: optional,
59
+ repeat: repeat,
60
+ pattern: pattern
61
+ ? this.escapeGroup(pattern)
62
+ : `[^${this.escapeString(delimiter === defaultDelimiter ? delimiter : delimiter + defaultDelimiter)}]+?`
63
+ });
64
+ }
65
+ // Push any remaining characters.
66
+ if (path || index < str.length) {
67
+ tokens.push(path + str.substr(index));
68
+ }
69
+ return tokens;
70
+ }
71
+ compile(str, options) {
72
+ return this.tokensToFunction(this.parse(str, options), options);
73
+ }
74
+ tokensToFunction(tokens, options) {
75
+ const matches = new Array(tokens.length);
76
+ for (let i = 0; i < tokens.length; i++) {
77
+ if (typeof tokens[i] === 'object') {
78
+ matches[i] = new RegExp(`^(?:${tokens[i].pattern})$`, this.flags(options));
79
+ }
80
+ }
81
+ return function (data, options) {
82
+ let path = '';
83
+ const encode = (options && options.encode) || encodeURIComponent;
84
+ const validate = options ? options.validate !== false : true;
85
+ for (let i = 0; i < tokens.length; i++) {
86
+ const token = tokens[i];
87
+ if (typeof token === 'string') {
88
+ path += token;
89
+ continue;
90
+ }
91
+ const value = data ? data[token.name] : undefined;
92
+ let segment;
93
+ if (Array.isArray(value)) {
94
+ if (!token.repeat) {
95
+ throw new TypeError(`Expected "${token.name}" to not repeat, but got array`);
96
+ }
97
+ if (value.length === 0) {
98
+ if (token.optional) {
99
+ continue;
100
+ }
101
+ throw new TypeError(`Expected "${token.name}" to not be empty`);
102
+ }
103
+ for (let j = 0; j < value.length; j++) {
104
+ segment = encode(value[j], token);
105
+ if (validate && !matches[i].test(segment)) {
106
+ throw new TypeError(`Expected all "${token.name}" to match "${token.pattern}"`);
107
+ }
108
+ path += (j === 0 ? token.prefix : token.delimiter) + segment;
109
+ }
110
+ continue;
111
+ }
112
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
113
+ segment = encode(String(value), token);
114
+ if (validate && !matches[i].test(segment)) {
115
+ throw new TypeError(`Expected "${token.name}" to match "${token.pattern}", but got "${segment}"`);
116
+ }
117
+ path += token.prefix + segment;
118
+ continue;
119
+ }
120
+ if (token.optional) {
121
+ continue;
122
+ }
123
+ throw new TypeError(`Expected "${token.name}" to be ${token.repeat ? 'an array' : 'a string'}`);
124
+ }
125
+ return path;
126
+ };
127
+ }
128
+ escapeString(str) {
129
+ return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, '\\$1');
130
+ }
131
+ escapeGroup(group) {
132
+ return group.replace(/([=!:$/()])/g, '\\$1');
133
+ }
134
+ flags(options) {
135
+ return options && options.sensitive ? '' : 'i';
136
+ }
137
+ regexpToRegexp(path, keys) {
138
+ if (!keys) {
139
+ return path;
140
+ }
141
+ const groups = path.source.match(/\((?!\?)/g);
142
+ if (groups) {
143
+ for (let i = 0; i < groups.length; i++) {
144
+ keys.push({
145
+ name: i,
146
+ prefix: null,
147
+ delimiter: null,
148
+ optional: false,
149
+ repeat: false,
150
+ pattern: null
151
+ });
152
+ }
153
+ }
154
+ return path;
155
+ }
156
+ arrayToRegexp(path, keys, options) {
157
+ const parts = [];
158
+ for (let i = 0; i < path.length; i++) {
159
+ parts.push(this.pathToRegexp(path[i], keys, options).source);
160
+ }
161
+ return new RegExp(`(?:${parts.join('|')})`, this.flags(options));
162
+ }
163
+ stringToRegexp(path, keys, options) {
164
+ return this.tokensToRegExp(this.parse(path, options), keys, options);
165
+ }
166
+ tokensToRegExp(tokens, keys, options) {
167
+ options = options || {};
168
+ const strict = options.strict;
169
+ const start = options.start !== false;
170
+ const end = options.end !== false;
171
+ const delimiter = options.delimiter || this.DEFAULT_DELIMITER;
172
+ const endsWith = []
173
+ .concat(options.endsWith || [])
174
+ .map(this.escapeString)
175
+ .concat('$')
176
+ .join('|');
177
+ let route = start ? '^' : '';
178
+ for (let i = 0; i < tokens.length; i++) {
179
+ const token = tokens[i];
180
+ if (typeof token === 'string') {
181
+ route += this.escapeString(token);
182
+ }
183
+ else {
184
+ const capture = token.repeat
185
+ ? `(?:${token.pattern})(?:${this.escapeString(token.delimiter)}(?:${token.pattern}))*`
186
+ : token.pattern;
187
+ if (keys) {
188
+ keys.push(token);
189
+ }
190
+ if (token.optional) {
191
+ if (!token.prefix) {
192
+ route += `(${capture})?`;
193
+ }
194
+ else {
195
+ route += `(?:${this.escapeString(token.prefix)}(${capture}))?`;
196
+ }
197
+ }
198
+ else {
199
+ route += `${this.escapeString(token.prefix)}(${capture})`;
200
+ }
201
+ }
202
+ }
203
+ if (end) {
204
+ if (!strict) {
205
+ route += `(?:${this.escapeString(delimiter)})?`;
206
+ }
207
+ route += endsWith === '$' ? '$' : `(?=${endsWith})`;
208
+ }
209
+ else {
210
+ const endToken = tokens[tokens.length - 1];
211
+ const isEndDelimited = typeof endToken === 'string' ? endToken[endToken.length - 1] === delimiter : endToken === undefined;
212
+ if (!strict) {
213
+ route += `(?:${this.escapeString(delimiter)}(?=${endsWith}))?`;
214
+ }
215
+ if (!isEndDelimited) {
216
+ route += `(?=${this.escapeString(delimiter)}|${endsWith})`;
217
+ }
218
+ }
219
+ return new RegExp(route, this.flags(options));
220
+ }
221
+ pathToRegexp(path, keys, options) {
222
+ if (path instanceof RegExp) {
223
+ return this.regexpToRegexp(path, keys);
224
+ }
225
+ if (Array.isArray(path)) {
226
+ return this.arrayToRegexp(/** @type {!Array} */ path, keys, options);
227
+ }
228
+ return this.stringToRegexp(/** @type {string} */ path, keys, options);
229
+ }
230
+ }
231
+ PathToRegexpService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PathToRegexpService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
232
+ PathToRegexpService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PathToRegexpService, providedIn: 'root' });
233
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PathToRegexpService, decorators: [{
234
+ type: Injectable,
235
+ args: [{
236
+ providedIn: 'root'
237
+ }]
238
+ }], ctorParameters: function () { return []; } });
239
239
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC10by1yZWdleHAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3V0aWwvb3RoZXIvcGF0aC10by1yZWdleHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxRUFBcUU7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QjtRQUNBLHNCQUFpQixHQUFHLEdBQUcsQ0FBQztRQUV4QixnQkFBVyxHQUFHLElBQUksTUFBTSxDQUN0QixDQUFDLFNBQVMsRUFBRSxxRkFBcUYsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFDNUcsR0FBRyxDQUNKLENBQUM7SUFOYSxDQUFDO0lBUWhCLEtBQUssQ0FBQyxHQUFRLEVBQUUsT0FBWTtRQUMxQixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2QsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ2xGLE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUM7UUFDOUQsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksR0FBRyxDQUFDO1FBRVIsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNsRCxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakIsTUFBTSxPQUFPLEdBQUcs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QUM7WUFFdEcsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxLQUFLLElBQUksTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLFFBQVEsS0FBSyxDQUFDO2FBQ2hFO1lBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDbkIsS0FBSyxJQUFJLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQzthQUM1RDtTQUNGO1FBRUQsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxZQUFZLENBQUMsSUFBUyxFQUFFLElBQVMsRUFBRSxPQUFZO1FBQzdDLElBQUksSUFBSSxZQUFZLE1BQU0sRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3RFO1FBRUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEUsQ0FBQzs7Z0hBdlJVLG1CQUFtQjtvSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1mdW5jdGlvbi1yZXR1cm4tdHlwZSAqL1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQYXRoVG9SZWdleHBTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoKSB7fVxuICBERUZBVUxUX0RFTElNSVRFUiA9ICcvJztcblxuICBQQVRIX1JFR0VYUCA9IG5ldyBSZWdFeHAoXG4gICAgWycoXFxcXFxcXFwuKScsICcoPzpcXFxcOihcXFxcdyspKD86XFxcXCgoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKV0pKylcXFxcKSk/fFxcXFwoKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKCldKSspXFxcXCkpKFsrKj9dKT8nXS5qb2luKCd8JyksXG4gICAgJ2cnXG4gICk7XG5cbiAgcGFyc2Uoc3RyOiBhbnksIG9wdGlvbnM6IGFueSkge1xuICAgIGNvbnN0IHRva2VucyA9IFtdO1xuICAgIGxldCBrZXkgPSAwO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgbGV0IHBhdGggPSAnJztcbiAgICBjb25zdCBkZWZhdWx0RGVsaW1pdGVyID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWxpbWl0ZXIpIHx8IHRoaXMuREVGQVVMVF9ERUxJTUlURVI7XG4gICAgY29uc3Qgd2hpdGVsaXN0ID0gKG9wdGlvbnMgJiYgb3B0aW9ucy53aGl0ZWxpc3QpIHx8IHVuZGVmaW5lZDtcbiAgICBsZXQgcGF0aEVzY2FwZWQgPSBmYWxzZTtcbiAgICBsZXQgcmVzO1xuXG4gICAgd2hpbGUgKChyZXMgPSB0aGlzLlBBVEhfUkVHRVhQLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG0gPSByZXNbMF07XG4gICAgICBjb25zdCBlc2NhcGVkID0gcmVzWzFdO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gcmVzLmluZGV4O1xuICAgICAgcGF0aCArPSBzdHIuc2xpY2UoaW5kZXgsIG9mZnNldCk7XG4gICAgICBpbmRleCA9IG9mZnNldCArIG0ubGVuZ3RoO1xuXG4gICAgICAvLyBJZ25vcmUgYWxyZWFkeSBlc2NhcGVkIHNlcXVlbmNlcy5cbiAgICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICAgIHBhdGggKz0gZXNjYXBlZFsxXTtcbiAgICAgICAgcGF0aEVzY2FwZWQgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IHByZXYgPSAnJztcbiAgICAgIGNvbnN0IG5hbWUgPSByZXNbMl07XG4gICAgICBjb25zdCBjYXB0dXJlID0gcmVzWzNdO1xuICAgICAgY29uc3QgZ3JvdXAgPSByZXNbNF07XG4gICAgICBjb25zdCBtb2RpZmllciA9IHJlc1s1XTtcblxuICAgICAgaWYgKCFwYXRoRXNjYXBlZCAmJiBwYXRoLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBrID0gcGF0aC5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBjID0gcGF0aFtrXTtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHdoaXRlbGlzdCA/IHdoaXRlbGlzdC5pbmRleE9mKGMpID4gLTEgOiB0cnVlO1xuXG4gICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgcHJldiA9IGM7XG4gICAgICAgICAgcGF0aCA9IHBhdGguc2xpY2UoMCwgayk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUHVzaCB0aGUgY3VycmVudCBwYXRoIG9udG8gdGhlIHRva2Vucy5cbiAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgIHRva2Vucy5wdXNoKHBhdGgpO1xuICAgICAgICBwYXRoID0gJyc7XG4gICAgICAgIHBhdGhFc2NhcGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcGVhdCA9IG1vZGlmaWVyID09PSAnKycgfHwgbW9kaWZpZXIgPT09ICcqJztcbiAgICAgIGNvbnN0IG9wdGlvbmFsID0gbW9kaWZpZXIgPT09ICc/JyB8fCBtb2RpZmllciA9PT0gJyonO1xuICAgICAgY29uc3QgcGF0dGVybiA9IGNhcHR1cmUgfHwgZ3JvdXA7XG4gICAgICBjb25zdCBkZWxpbWl0ZXIgPSBwcmV2IHx8IGRlZmF1bHREZWxpbWl0ZXI7XG5cbiAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAgbmFtZTogbmFtZSB8fCBrZXkrKyxcbiAgICAgICAgcHJlZml4OiBwcmV2LFxuICAgICAgICBkZWxpbWl0ZXI6IGRlbGltaXRlcixcbiAgICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgICByZXBlYXQ6IHJlcGVhdCxcbiAgICAgICAgcGF0dGVybjogcGF0dGVyblxuICAgICAgICAgID8gdGhpcy5lc2NhcGVHcm91cChwYXR0ZXJuKVxuICAgICAgICAgIDogYFteJHt0aGlzLmVzY2FwZVN0cmluZyhkZWxpbWl0ZXIgPT09IGRlZmF1bHREZWxpbWl0ZXIgPyBkZWxpbWl0ZXIgOiBkZWxpbWl0ZXIgKyBkZWZhdWx0RGVsaW1pdGVyKX1dKz9gXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQdXNoIGFueSByZW1haW5pbmcgY2hhcmFjdGVycy5cbiAgICBpZiAocGF0aCB8fCBpbmRleCA8IHN0ci5sZW5ndGgpIHtcbiAgICAgIHRva2Vucy5wdXNoKHBhdGggKyBzdHIuc3Vic3RyKGluZGV4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuICBjb21waWxlKHN0cjogYW55LCBvcHRpb25zOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnNUb0Z1bmN0aW9uKHRoaXMucGFyc2Uoc3RyLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gIH1cblxuICB0b2tlbnNUb0Z1bmN0aW9uKHRva2VuczogYW55LCBvcHRpb25zOiBhbnkpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gbmV3IEFycmF5KHRva2Vucy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0eXBlb2YgdG9rZW5zW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtYXRjaGVzW2ldID0gbmV3IFJlZ0V4cChgXig/OiR7dG9rZW5zW2ldLnBhdHRlcm59KSRgLCB0aGlzLmZsYWdzKG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGE6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgICBsZXQgcGF0aCA9ICcnO1xuICAgICAgY29uc3QgZW5jb2RlID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUpIHx8IGVuY29kZVVSSUNvbXBvbmVudDtcbiAgICAgIGNvbnN0IHZhbGlkYXRlID0gb3B0aW9ucyA/IG9wdGlvbnMudmFsaWRhdGUgIT09IGZhbHNlIDogdHJ1ZTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaV07XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBwYXRoICs9IHRva2VuO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhID8gZGF0YVt0b2tlbi5uYW1lXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHNlZ21lbnQ7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgaWYgKCF0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFwiJHt0b2tlbi5uYW1lfVwiIHRvIG5vdCByZXBlYXQsIGJ1dCBnb3QgYXJyYXlgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFwiJHt0b2tlbi5uYW1lfVwiIHRvIG5vdCBiZSBlbXB0eWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFsdWUubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIHNlZ21lbnQgPSBlbmNvZGUodmFsdWVbal0sIHRva2VuKTtcblxuICAgICAgICAgICAgaWYgKHZhbGlkYXRlICYmICFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYWxsIFwiJHt0b2tlbi5uYW1lfVwiIHRvIG1hdGNoIFwiJHt0b2tlbi5wYXR0ZXJufVwiYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhdGggKz0gKGogPT09IDAgPyB0b2tlbi5wcmVmaXggOiB0b2tlbi5kZWxpbWl0ZXIpICsgc2VnbWVudDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBzZWdtZW50ID0gZW5jb2RlKFN0cmluZyh2YWx1ZSksIHRva2VuKTtcblxuICAgICAgICAgIGlmICh2YWxpZGF0ZSAmJiAhbWF0Y2hlc1tpXS50ZXN0KHNlZ21lbnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcIiR7dG9rZW4ubmFtZX1cIiB0byBtYXRjaCBcIiR7dG9rZW4ucGF0dGVybn1cIiwgYnV0IGdvdCBcIiR7c2VnbWVudH1cImApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4ICsgc2VnbWVudDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXCIke3Rva2VuLm5hbWV9XCIgdG8gYmUgJHt0b2tlbi5yZXBlYXQgPyAnYW4gYXJyYXknIDogJ2Egc3RyaW5nJ31gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfTtcbiAgfVxuXG4gIGVzY2FwZVN0cmluZyhzdHI6IGFueSkge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvKFsuKyo/PV4hOiR7fSgpW1xcXXwvXFxcXF0pL2csICdcXFxcJDEnKTtcbiAgfVxuXG4gIGVzY2FwZUdyb3VwKGdyb3VwOiBhbnkpIHtcbiAgICByZXR1cm4gZ3JvdXAucmVwbGFjZSgvKFs9ITokLygpXSkvZywgJ1xcXFwkMScpO1xuICB9XG5cbiAgZmxhZ3Mob3B0aW9uczogYW55KSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgJiYgb3B0aW9ucy5zZW5zaXRpdmUgPyAnJyA6ICdpJztcbiAgfVxuXG4gIHJlZ2V4cFRvUmVnZXhwKHBhdGg6IGFueSwga2V5czogYW55KSB7XG4gICAgaWYgKCFrZXlzKSB7XG4gICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCBncm91cHMgPSBwYXRoLnNvdXJjZS5tYXRjaCgvXFwoKD8hXFw/KS9nKTtcblxuICAgIGlmIChncm91cHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGtleXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogaSxcbiAgICAgICAgICBwcmVmaXg6IG51bGwsXG4gICAgICAgICAgZGVsaW1pdGVyOiBudWxsLFxuICAgICAgICAgIG9wdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgICByZXBlYXQ6IGZhbHNlLFxuICAgICAgICAgIHBhdHRlcm46IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICBhcnJheVRvUmVnZXhwKHBhdGg6IGFueSwga2V5czogYW55LCBvcHRpb25zOiBhbnkpOiBSZWdFeHAge1xuICAgIGNvbnN0IHBhcnRzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhcnRzLnB1c2godGhpcy5wYXRoVG9SZWdleHAocGF0aFtpXSwga2V5cywgb3B0aW9ucykuc291cmNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86JHtwYXJ0cy5qb2luKCd8Jyl9KWAsIHRoaXMuZmxhZ3Mob3B0aW9ucykpO1xuICB9XG5cbiAgc3RyaW5nVG9SZWdleHAocGF0aDogYW55LCBrZXlzOiBhbnksIG9wdGlvbnM6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnRva2Vuc1RvUmVnRXhwKHRoaXMucGFyc2UocGF0aCwgb3B0aW9ucyksIGtleXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgdG9rZW5zVG9SZWdFeHAodG9rZW5zOiBhbnksIGtleXM6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBjb25zdCBzdHJpY3QgPSBvcHRpb25zLnN0cmljdDtcbiAgICBjb25zdCBzdGFydCA9IG9wdGlvbnMuc3RhcnQgIT09IGZhbHNlO1xuICAgIGNvbnN0IGVuZCA9IG9wdGlvbnMuZW5kICE9PSBmYWxzZTtcbiAgICBjb25zdCBkZWxpbWl0ZXIgPSBvcHRpb25zLmRlbGltaXRlciB8fCB0aGlzLkRFRkFVTFRfREVMSU1JVEVSO1xuICAgIGNvbnN0IGVuZHNXaXRoID0gW11cbiAgICAgIC5jb25jYXQob3B0aW9ucy5lbmRzV2l0aCB8fCBbXSlcbiAgICAgIC5tYXAodGhpcy5lc2NhcGVTdHJpbmcpXG4gICAgICAuY29uY2F0KCckJylcbiAgICAgIC5qb2luKCd8Jyk7XG4gICAgbGV0IHJvdXRlID0gc3RhcnQgPyAnXicgOiAnJztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1tpXTtcblxuICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcm91dGUgKz0gdGhpcy5lc2NhcGVTdHJpbmcodG9rZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2FwdHVyZSA9IHRva2VuLnJlcGVhdFxuICAgICAgICAgID8gYCg/OiR7dG9rZW4ucGF0dGVybn0pKD86JHt0aGlzLmVzY2FwZVN0cmluZyh0b2tlbi5kZWxpbWl0ZXIpfSg/OiR7dG9rZW4ucGF0dGVybn0pKSpgXG4gICAgICAgICAgOiB0b2tlbi5wYXR0ZXJuO1xuXG4gICAgICAgIGlmIChrZXlzKSB7XG4gICAgICAgICAga2V5cy5wdXNoKHRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgIGlmICghdG9rZW4ucHJlZml4KSB7XG4gICAgICAgICAgICByb3V0ZSArPSBgKCR7Y2FwdHVyZX0pP2A7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvdXRlICs9IGAoPzoke3RoaXMuZXNjYXBlU3RyaW5nKHRva2VuLnByZWZpeCl9KCR7Y2FwdHVyZX0pKT9gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3V0ZSArPSBgJHt0aGlzLmVzY2FwZVN0cmluZyh0b2tlbi5wcmVmaXgpfSgke2NhcHR1cmV9KWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW5kKSB7XG4gICAgICBpZiAoIXN0cmljdCkge1xuICAgICAgICByb3V0ZSArPSBgKD86JHt0aGlzLmVzY2FwZVN0cmluZyhkZWxpbWl0ZXIpfSk/YDtcbiAgICAgIH1cblxuICAgICAgcm91dGUgKz0gZW5kc1dpdGggPT09ICckJyA/ICckJyA6IGAoPz0ke2VuZHNXaXRofSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlbmRUb2tlbiA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBpc0VuZERlbGltaXRlZCA9XG4gICAgICAgIHR5cGVvZiBlbmRUb2tlbiA9PT0gJ3N0cmluZycgPyBlbmRUb2tlbltlbmRUb2tlbi5sZW5ndGggLSAxXSA9PT0gZGVsaW1pdGVyIDogZW5kVG9rZW4gPT09IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKCFzdHJpY3QpIHtcbiAgICAgICAgcm91dGUgKz0gYCg/OiR7dGhpcy5lc2NhcGVTdHJpbmcoZGVsaW1pdGVyKX0oPz0ke2VuZHNXaXRofSkpP2A7XG4gICAgICB9XG4gICAgICBpZiAoIWlzRW5kRGVsaW1pdGVkKSB7XG4gICAgICAgIHJvdXRlICs9IGAoPz0ke3RoaXMuZXNjYXBlU3RyaW5nKGRlbGltaXRlcil9fCR7ZW5kc1dpdGh9KWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAocm91dGUsIHRoaXMuZmxhZ3Mob3B0aW9ucykpO1xuICB9XG5cbiAgcGF0aFRvUmVnZXhwKHBhdGg6IGFueSwga2V5czogYW55LCBvcHRpb25zOiBhbnkpIHtcbiAgICBpZiAocGF0aCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVnZXhwVG9SZWdleHAocGF0aCwga2V5cyk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFycmF5VG9SZWdleHAoLyoqIEB0eXBlIHshQXJyYXl9ICovIHBhdGgsIGtleXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmluZ1RvUmVnZXhwKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyBwYXRoLCBrZXlzLCBvcHRpb25zKTtcbiAgfVxufVxuIl19
@@ -1,4 +1,4 @@
1
- export const resizeWindow = () => {
2
- window.dispatchEvent(new Event('resize'));
3
- };
1
+ export const resizeWindow = () => {
2
+ window.dispatchEvent(new Event('resize'));
3
+ };
4
4
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdXRpbC9vdGhlci9yZXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEdBQVMsRUFBRTtJQUNyQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHJlc2l6ZVdpbmRvdyA9ICgpOiB2b2lkID0+IHtcbiAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSk7XG59O1xuIl19
@@ -1,23 +1,23 @@
1
- import { Pipe } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@yelon/util/format";
4
- export class CurrencyCNYPipe {
5
- constructor(srv) {
6
- this.srv = srv;
7
- }
8
- /**
9
- * Converted into RMB notation.
10
- *
11
- * 转化成人民币表示法
12
- */
13
- transform(value, options) {
14
- return this.srv.cny(value, options);
15
- }
16
- }
17
- CurrencyCNYPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: CurrencyCNYPipe, deps: [{ token: i1.CurrencyService }], target: i0.ɵɵFactoryTarget.Pipe });
18
- CurrencyCNYPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.8", ngImport: i0, type: CurrencyCNYPipe, name: "cny" });
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: CurrencyCNYPipe, decorators: [{
20
- type: Pipe,
21
- args: [{ name: 'cny' }]
22
- }], ctorParameters: function () { return [{ type: i1.CurrencyService }]; } });
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@yelon/util/format";
4
+ export class CurrencyCNYPipe {
5
+ constructor(srv) {
6
+ this.srv = srv;
7
+ }
8
+ /**
9
+ * Converted into RMB notation.
10
+ *
11
+ * 转化成人民币表示法
12
+ */
13
+ transform(value, options) {
14
+ return this.srv.cny(value, options);
15
+ }
16
+ }
17
+ CurrencyCNYPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CurrencyCNYPipe, deps: [{ token: i1.CurrencyService }], target: i0.ɵɵFactoryTarget.Pipe });
18
+ CurrencyCNYPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: CurrencyCNYPipe, name: "cny" });
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CurrencyCNYPipe, decorators: [{
20
+ type: Pipe,
21
+ args: [{ name: 'cny' }]
22
+ }], ctorParameters: function () { return [{ type: i1.CurrencyService }]; } });
23
23
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY255LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy91dGlsL3BpcGVzL2N1cnJlbmN5L2NueS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7QUFLcEQsTUFBTSxPQUFPLGVBQWU7SUFDMUIsWUFBb0IsR0FBb0I7UUFBcEIsUUFBRyxHQUFILEdBQUcsQ0FBaUI7SUFBRyxDQUFDO0lBRTVDOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsS0FBc0IsRUFBRSxPQUE0QjtRQUM1RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDOzs0R0FWVSxlQUFlOzBHQUFmLGVBQWU7MkZBQWYsZUFBZTtrQkFEM0IsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEN1cnJlbmN5Q05ZT3B0aW9ucywgQ3VycmVuY3lTZXJ2aWNlIH0gZnJvbSAnQHllbG9uL3V0aWwvZm9ybWF0JztcblxuQFBpcGUoeyBuYW1lOiAnY255JyB9KVxuZXhwb3J0IGNsYXNzIEN1cnJlbmN5Q05ZUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNydjogQ3VycmVuY3lTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0ZWQgaW50byBSTUIgbm90YXRpb24uXG4gICAqXG4gICAqIOi9rOWMluaIkOS6uuawkeW4geihqOekuuazlVxuICAgKi9cbiAgdHJhbnNmb3JtKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcsIG9wdGlvbnM/OiBDdXJyZW5jeUNOWU9wdGlvbnMpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNydi5jbnkodmFsdWUsIG9wdGlvbnMpO1xuICB9XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
- export * from './mega.pipe';
2
- export * from './price.pipe';
3
- export * from './module';
4
- export * from './cny.pipe';
1
+ export * from './mega.pipe';
2
+ export * from './price.pipe';
3
+ export * from './module';
4
+ export * from './cny.pipe';
5
5
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy91dGlsL3BpcGVzL2N1cnJlbmN5L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9tZWdhLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9wcmljZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vY255LnBpcGUnO1xuIl19