nmce-func 0.0.6 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_func/authentication.service.d.ts +8 -5
- package/_func/dateFunc.d.ts +11 -1
- package/_func/htmlPrintFunc.d.ts +18 -0
- package/_func/index.d.ts +5 -3
- package/_func/javascriptFunc.d.ts +9 -0
- package/_func/{jsFunc.d.ts → jsonFunc.d.ts} +17 -2
- package/_func/stringAusFunc.d.ts +40 -0
- package/_func/stringFunc.d.ts +7 -36
- package/_func/{helperFunc.d.ts → uuidFunc.d.ts} +1 -2
- package/{esm2015/_func/addressFunc.js → esm2020/_func/addressFunc.mjs} +0 -0
- package/esm2020/_func/authentication.service.mjs +43 -0
- package/{esm2015/_func/currencyFunc.js → esm2020/_func/currencyFunc.mjs} +2 -2
- package/esm2020/_func/dateFunc.mjs +316 -0
- package/esm2020/_func/htmlPrintFunc.mjs +45 -0
- package/esm2020/_func/index.mjs +11 -0
- package/esm2020/_func/javascriptFunc.mjs +17 -0
- package/esm2020/_func/jsonFunc.mjs +67 -0
- package/esm2020/_func/stringAusFunc.mjs +200 -0
- package/esm2020/_func/stringFunc.mjs +93 -0
- package/esm2020/_func/uuidFunc.mjs +17 -0
- package/{esm2015/nmce-func.js → esm2020/nmce-func.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{nmce-func.js → nmce-func.mjs} +189 -137
- package/fesm2015/nmce-func.mjs.map +1 -0
- package/fesm2020/nmce-func.mjs +929 -0
- package/fesm2020/nmce-func.mjs.map +1 -0
- package/nmce-func.d.ts +1 -0
- package/package.json +22 -10
- package/_func/htmlFunc.d.ts +0 -14
- package/bundles/nmce-func.umd.js +0 -1238
- package/bundles/nmce-func.umd.js.map +0 -1
- package/bundles/nmce-func.umd.min.js +0 -2
- package/bundles/nmce-func.umd.min.js.map +0 -1
- package/esm2015/_func/authentication.service.js +0 -41
- package/esm2015/_func/dateFunc.js +0 -306
- package/esm2015/_func/helperFunc.js +0 -25
- package/esm2015/_func/htmlFunc.js +0 -41
- package/esm2015/_func/index.js +0 -9
- package/esm2015/_func/jsFunc.js +0 -52
- package/esm2015/_func/stringFunc.js +0 -283
- package/fesm2015/nmce-func.js.map +0 -1
- package/nmce-func.metadata.json +0 -1
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
import moment from 'moment';
|
|
2
|
-
export class DateFunc {
|
|
3
|
-
/**
|
|
4
|
-
* Transform UTC DateTime to local date without H, M and S. For example, the month day of 2018-01-23T22:00:00Z is 24 in Australia.
|
|
5
|
-
* @param dtUtc
|
|
6
|
-
* @param offsetMinutes if not defined, it will be new Date().getTimezoneOffset(). //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset
|
|
7
|
-
*/
|
|
8
|
-
static dateTimeUtcToLocalDateNumber(dtUtc) {
|
|
9
|
-
if (!dtUtc) {
|
|
10
|
-
return 0; //0 is better for calculation by the clients.
|
|
11
|
-
}
|
|
12
|
-
const localDt = DateFunc.dateTimeUtcToLocalDateTime(dtUtc);
|
|
13
|
-
const localDNum = localDt.setHours(0, 0, 0, 0);
|
|
14
|
-
return localDNum;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Date only. However, the date may still be in UTC.
|
|
18
|
-
* @param dtUtc
|
|
19
|
-
*/
|
|
20
|
-
static dateTimeUtcToLocalDate(dtUtc) {
|
|
21
|
-
const localDt = DateFunc.dateTimeUtcToLocalDateTime(dtUtc);
|
|
22
|
-
const localD = localDt.setHours(0, 0, 0, 0);
|
|
23
|
-
return new Date(localD);
|
|
24
|
-
}
|
|
25
|
-
static localISODateString(dtUtc) {
|
|
26
|
-
const dt = moment(dtUtc).local();
|
|
27
|
-
return dt.format('YYYY-MM-DD');
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* locate date ONLY (no time) to UTC date.
|
|
31
|
-
* @param dt if dt contain time info, it will become dt.setHours(0, 0, 0, 0)
|
|
32
|
-
*/
|
|
33
|
-
static localDateToUtc(d) {
|
|
34
|
-
const dt = moment(d).toDate();
|
|
35
|
-
const n = dt.setHours(0, 0, 0, 0);
|
|
36
|
-
const offset = dt.getTimezoneOffset() * 60000;
|
|
37
|
-
return new Date(n + offset);
|
|
38
|
-
}
|
|
39
|
-
static getTimezoneOffset() {
|
|
40
|
-
const dt = this.today;
|
|
41
|
-
return dt.getTimezoneOffset();
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Transform UTC DateTime to local dateTime.
|
|
45
|
-
* @param dtUtc
|
|
46
|
-
* @param offsetMinutes if not defined, it will be new Date().getTimezoneOffset(). //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset
|
|
47
|
-
*/
|
|
48
|
-
static dateTimeUtcToLocalDateTime(dtUtc) {
|
|
49
|
-
const stillUtc = moment.utc(dtUtc).toDate();
|
|
50
|
-
return moment(stillUtc).local().toDate();
|
|
51
|
-
}
|
|
52
|
-
static dateTimeUtcToLocaMoment(dtUtc) {
|
|
53
|
-
const stillUtc = moment.utc(dtUtc);
|
|
54
|
-
return stillUtc.local();
|
|
55
|
-
}
|
|
56
|
-
static getEndOfWeek(dt) {
|
|
57
|
-
return moment(dt).endOf('isoWeek').toDate();
|
|
58
|
-
}
|
|
59
|
-
static getStartOfWeek(dt) {
|
|
60
|
-
return moment(dt).startOf('isoWeek').toDate();
|
|
61
|
-
}
|
|
62
|
-
static getEndOfMonth(dt) {
|
|
63
|
-
// return new Date(dt.getFullYear(), dt.getMonth() + 1, 0, 23, 59, 59, 999);
|
|
64
|
-
return moment(dt).endOf('month').toDate();
|
|
65
|
-
}
|
|
66
|
-
static getStartOfMonth(dt) {
|
|
67
|
-
return moment(dt).startOf('month').toDate();
|
|
68
|
-
}
|
|
69
|
-
static getDaysBetweenDates(dt1, dt2) {
|
|
70
|
-
return this.getDaysBetween(dt1, dt2);
|
|
71
|
-
}
|
|
72
|
-
static getEndOfDate(dt) {
|
|
73
|
-
return dt ? new Date(dt.setHours(23, 59, 59, 999)) :
|
|
74
|
-
new Date(this.now.setHours(23, 59, 59, 999));
|
|
75
|
-
}
|
|
76
|
-
static getStartOfDate(dt) {
|
|
77
|
-
return moment(dt).startOf('day').toDate();
|
|
78
|
-
}
|
|
79
|
-
static getEndOfToday() {
|
|
80
|
-
// return new Date((new Date(Date.now())).setHours(23, 59, 59, 999));
|
|
81
|
-
return moment(Date.now()).endOf('day').toDate();
|
|
82
|
-
}
|
|
83
|
-
static getStartOfToday() {
|
|
84
|
-
// return new Date((new Date(Date.now())).setHours(0, 0, 0, 0));
|
|
85
|
-
return moment(Date.now()).startOf('day').toDate();
|
|
86
|
-
}
|
|
87
|
-
//inspired https://stackoverflow.com/questions/563406/add-days-to-javascript-date
|
|
88
|
-
static addDays(dt, days = 0) {
|
|
89
|
-
const dat = moment(dt);
|
|
90
|
-
dat.add(days, 'days');
|
|
91
|
-
return dat.toDate();
|
|
92
|
-
}
|
|
93
|
-
static subtractDays(dt, days = 0) {
|
|
94
|
-
const dat = moment(dt);
|
|
95
|
-
dat.subtract(days, 'days');
|
|
96
|
-
return dat.toDate();
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Start of today
|
|
100
|
-
*/
|
|
101
|
-
static get today() {
|
|
102
|
-
return this.getStartOfToday();
|
|
103
|
-
}
|
|
104
|
-
static get now() {
|
|
105
|
-
return new Date(Date.now());
|
|
106
|
-
}
|
|
107
|
-
static getNext5MinuteMark() {
|
|
108
|
-
const m = moment().set('second', 0).set('millisecond', 0);
|
|
109
|
-
const minute = m.minute();
|
|
110
|
-
const mod = minute % 5;
|
|
111
|
-
if (mod) {
|
|
112
|
-
const delta = 5 - mod;
|
|
113
|
-
return m.add(delta, 'm').toDate();
|
|
114
|
-
}
|
|
115
|
-
return m.toDate();
|
|
116
|
-
}
|
|
117
|
-
static getYMD(d) {
|
|
118
|
-
return moment(d).format('YYYYMMDD');
|
|
119
|
-
}
|
|
120
|
-
static getDMYWithSlash(d) {
|
|
121
|
-
return moment(d).format('DD/MM/YYYY');
|
|
122
|
-
}
|
|
123
|
-
static getDMYHmWithSlash(d) {
|
|
124
|
-
return moment(d).format('DD/MM/YYYY HH:mm');
|
|
125
|
-
}
|
|
126
|
-
static getMcpTime(dt) {
|
|
127
|
-
return moment(dt).format('HH:mm:ss.SSSZ');
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* In 24 hour format
|
|
131
|
-
* @param dtUtc
|
|
132
|
-
*/
|
|
133
|
-
static getLocalDMYHmWithSlash(dtUtc) {
|
|
134
|
-
const d = DateFunc.dateTimeUtcToLocalDateTime(dtUtc);
|
|
135
|
-
return moment(d).format('DD/MM/YYYY HH:mm');
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Offset minutes comparing with today
|
|
139
|
-
*/
|
|
140
|
-
static getOffsetMinutes(dtUtc) {
|
|
141
|
-
const dm1 = moment(dtUtc);
|
|
142
|
-
const dm2 = moment(new Date().setHours(0, 0, 0, 0));
|
|
143
|
-
return dm1.diff(dm2, 'minutes');
|
|
144
|
-
}
|
|
145
|
-
static getDaysBetween(d1, d2) {
|
|
146
|
-
const dm1 = moment(d1);
|
|
147
|
-
const dm2 = moment(d2);
|
|
148
|
-
return dm2.diff(dm1, 'days');
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Get hour of the date. If Date is not defined, the hour will be current hour.
|
|
152
|
-
* @param dtUtc
|
|
153
|
-
*/
|
|
154
|
-
static getHour(dtUtc) {
|
|
155
|
-
const m = moment(dtUtc);
|
|
156
|
-
return m.hours();
|
|
157
|
-
}
|
|
158
|
-
static getMinute(dtUtc) {
|
|
159
|
-
const m = moment(dtUtc);
|
|
160
|
-
return m.minutes();
|
|
161
|
-
}
|
|
162
|
-
static composeDateTime(dt, h = 0, minute = 0) {
|
|
163
|
-
const mt = moment(dt);
|
|
164
|
-
return new Date(mt.toDate().setHours(h, minute, 0, 0));
|
|
165
|
-
}
|
|
166
|
-
static olderThan24Hours(d) {
|
|
167
|
-
const m = moment(d);
|
|
168
|
-
return moment().diff(m, 'hours') >= 24;
|
|
169
|
-
}
|
|
170
|
-
static olderThan24HoursUtc(dtUtc) {
|
|
171
|
-
return DateFunc.getHourAgeUtc(dtUtc) >= 24;
|
|
172
|
-
}
|
|
173
|
-
static olderThanHours(d, hours) {
|
|
174
|
-
const m = moment(d);
|
|
175
|
-
return moment().diff(m, 'hours') >= hours;
|
|
176
|
-
}
|
|
177
|
-
static olderThanHoursUtc(dtUtc, hours) {
|
|
178
|
-
return DateFunc.getHourAgeUtc(dtUtc) >= hours;
|
|
179
|
-
}
|
|
180
|
-
static olderThanMinutes(d, minutes) {
|
|
181
|
-
const m = moment(d);
|
|
182
|
-
return moment().diff(m, 'minutes') >= minutes;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* It could be 11PM yesterday, and 1 AM today. Actually based on local today.
|
|
186
|
-
*/
|
|
187
|
-
static olderThan1Day(dtUtc) {
|
|
188
|
-
return DateFunc.getDayAgeUtc(dtUtc) > 0;
|
|
189
|
-
}
|
|
190
|
-
static getHourAge(d) {
|
|
191
|
-
const m = moment(d);
|
|
192
|
-
return moment().diff(m, 'hours');
|
|
193
|
-
}
|
|
194
|
-
static getHourAgeUtc(dtUtc) {
|
|
195
|
-
const m = moment.utc(dtUtc);
|
|
196
|
-
return moment.utc().diff(m, 'hours');
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Compare utc date with utc now.
|
|
200
|
-
* @param dtUtc
|
|
201
|
-
*/
|
|
202
|
-
static getDayAgeUtc(dtUtc) {
|
|
203
|
-
const m = moment.utc(dtUtc);
|
|
204
|
-
return moment.utc().diff(m, 'days');
|
|
205
|
-
}
|
|
206
|
-
static getAge(d) {
|
|
207
|
-
const m = moment(d);
|
|
208
|
-
return moment().diff(m, 'years');
|
|
209
|
-
}
|
|
210
|
-
static getYear(d) {
|
|
211
|
-
const m = moment(d);
|
|
212
|
-
return m.year();
|
|
213
|
-
}
|
|
214
|
-
static getUtcNow() {
|
|
215
|
-
return moment.utc().toDate();
|
|
216
|
-
}
|
|
217
|
-
static addMinutes(d, m) {
|
|
218
|
-
return moment(d).add(m, 'm').toDate();
|
|
219
|
-
}
|
|
220
|
-
static addMonth(d, m) {
|
|
221
|
-
return moment(d).add(m, 'M').toDate();
|
|
222
|
-
}
|
|
223
|
-
static getDuration(d1, d2) {
|
|
224
|
-
const md1 = moment(d1);
|
|
225
|
-
const md2 = moment(d2);
|
|
226
|
-
return moment.duration(md2.diff(md1));
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Convert minutes from midnight to HH:mm text
|
|
230
|
-
* @param mins
|
|
231
|
-
*/
|
|
232
|
-
static getHMFromMins(mins) {
|
|
233
|
-
// do not include the first validation check if you want, for example,
|
|
234
|
-
// getTimeFromMins(1530) to equal getTimeFromMins(90) (i.e. mins rollover)
|
|
235
|
-
if (mins >= 24 * 60 || mins < 0) {
|
|
236
|
-
throw new RangeError('Valid input should be greater than or equal to 0 and less than 1440.');
|
|
237
|
-
}
|
|
238
|
-
const h = mins / 60 | 0, m = mins % 60 | 0;
|
|
239
|
-
return moment.utc().hours(h).minutes(m).format('HH:mm');
|
|
240
|
-
}
|
|
241
|
-
static getMinutesSinceMidnight(d) {
|
|
242
|
-
const m = moment(d);
|
|
243
|
-
const midnight = moment(d).startOf('day'); //Mutates the original moment by setting it to the start of a unit of time. So I have better not to use m which wil be changed by calling this function
|
|
244
|
-
return m.diff(midnight, 'minutes');
|
|
245
|
-
}
|
|
246
|
-
static getMinutesBetween(start, end) {
|
|
247
|
-
const m = moment(start);
|
|
248
|
-
const m2 = moment(end);
|
|
249
|
-
return m2.diff(m, 'minutes');
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Parse json string with date serialized into string, and get proper date object back
|
|
253
|
-
* @param s
|
|
254
|
-
*/
|
|
255
|
-
static dateSafeJsonParse(s) {
|
|
256
|
-
return JSON.parse(s, this.dateReviver);
|
|
257
|
-
}
|
|
258
|
-
static dateReviver(key, value) {
|
|
259
|
-
if (DateFunc.isSerializedDate(value)) {
|
|
260
|
-
return (new Date(value));
|
|
261
|
-
}
|
|
262
|
-
// If it's not a date-string, we want to return the value as-is. If we fail to return
|
|
263
|
-
// a value, it will be omitted from the resultant data structure.
|
|
264
|
-
return (value);
|
|
265
|
-
}
|
|
266
|
-
// I determine if the given value is a string that matches the serialized-date pattern.
|
|
267
|
-
static isSerializedDate(value) {
|
|
268
|
-
// Dates are serialized in TZ format, example: '1981-12-20T04:00:14.000Z'.
|
|
269
|
-
const datePattern = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;
|
|
270
|
-
return (DateFunc.isString(value) && datePattern.test(value));
|
|
271
|
-
}
|
|
272
|
-
// I determine if the given value is a String.
|
|
273
|
-
static isString(value) {
|
|
274
|
-
return ({}.toString.call(value) === '[object String]');
|
|
275
|
-
}
|
|
276
|
-
static dateSafeParse(s) {
|
|
277
|
-
const m = moment(s);
|
|
278
|
-
return m.toDate();
|
|
279
|
-
}
|
|
280
|
-
static composeDateWithMinutes(d, minute) {
|
|
281
|
-
const m = moment(d);
|
|
282
|
-
const midnight = moment(d).startOf('day'); // Mutates the original moment by setting it to the start of a unit of time. So I have better not to use m which wil be changed by calling this function
|
|
283
|
-
midnight.add(minute, 'minutes');
|
|
284
|
-
return midnight.toDate();
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* Safe compare since date data may be considered as string rather than date.
|
|
288
|
-
* @param d1
|
|
289
|
-
* @param d2
|
|
290
|
-
*/
|
|
291
|
-
static compare(d1, d2) {
|
|
292
|
-
if (!d1 && !d2) {
|
|
293
|
-
return 0;
|
|
294
|
-
}
|
|
295
|
-
if (!d1) {
|
|
296
|
-
return -NaN;
|
|
297
|
-
}
|
|
298
|
-
if (!d2) {
|
|
299
|
-
return NaN;
|
|
300
|
-
}
|
|
301
|
-
const dd1 = (new Date(d1)).valueOf();
|
|
302
|
-
const dd2 = (new Date(d2)).valueOf();
|
|
303
|
-
return dd1 - dd2;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZUZ1bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ubWNlLWZ1bmMvc3JjL19mdW5jL2RhdGVGdW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixNQUFNLE9BQU8sUUFBUTtJQUVwQjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLDRCQUE0QixDQUFDLEtBQThCO1FBQ2pFLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDWCxPQUFPLENBQUMsQ0FBQyxDQUFDLDZDQUE2QztTQUN2RDtRQUVELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRS9DLE9BQU8sU0FBUyxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsc0JBQXNCLENBQUMsS0FBOEI7UUFDM0QsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEtBQThCO1FBQ3ZELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxjQUFj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Q3hELENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLENBQWdCO1FBQ3BDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQU8sRUFBRSxNQUFjO1FBQ3BELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsd0pBQXdKO1FBQ25NLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFvQixFQUFFLEVBQW9CO1FBQ3hELElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDZixPQUFPLENBQUMsQ0FBQztTQUNUO1FBRUQsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUE7U0FDWDtRQUVELElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDUixPQUFPLEdBQUcsQ0FBQztTQUNYO1FBRUQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxPQUFPLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbEIsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuZXhwb3J0IGNsYXNzIERhdGVGdW5jIHtcclxuXHJcblx0LyoqXHJcblx0ICogVHJhbnNmb3JtIFVUQyBEYXRlVGltZSB0byBsb2NhbCBkYXRlIHdpdGhvdXQgSCwgTSBhbmQgUy4gRm9yIGV4YW1wbGUsIHRoZSBtb250aCBkYXkgb2YgMjAxOC0wMS0yM1QyMjowMDowMFogaXMgMjQgaW4gQXVzdHJhbGlhLlxyXG5cdCAqIEBwYXJhbSBkdFV0Y1xyXG5cdCAqIEBwYXJhbSBvZmZzZXRNaW51dGVzIGlmIG5vdCBkZWZpbmVkLCBpdCB3aWxsIGJlIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKS4gLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlL2dldFRpbWV6b25lT2Zmc2V0XHJcblx0ICovXHJcblx0c3RhdGljIGRhdGVUaW1lVXRjVG9Mb2NhbERhdGVOdW1iZXIoZHRVdGM6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcclxuXHRcdGlmICghZHRVdGMpIHtcclxuXHRcdFx0cmV0dXJuIDA7IC8vMCBpcyBiZXR0ZXIgZm9yIGNhbGN1bGF0aW9uIGJ5IHRoZSBjbGllbnRzLlxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGxvY2FsRHQgPSBEYXRlRnVuYy5kYXRlVGltZVV0Y1RvTG9jYWxEYXRlVGltZShkdFV0Yyk7XHJcblx0XHRjb25zdCBsb2NhbEROdW0gPSBsb2NhbER0LnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG5cclxuXHRcdHJldHVybiBsb2NhbEROdW07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEYXRlIG9ubHkuIEhvd2V2ZXIsIHRoZSBkYXRlIG1heSBzdGlsbCBiZSBpbiBVVEMuXHJcblx0ICogQHBhcmFtIGR0VXRjXHJcblx0ICovXHJcblx0c3RhdGljIGRhdGVUaW1lVXRjVG9Mb2NhbERhdGUoZHRVdGM6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkKTogRGF0ZSB7XHJcblx0XHRjb25zdCBsb2NhbER0ID0gRGF0ZUZ1bmMuZGF0ZVRpbWVVdGNUb0xvY2FsRGF0ZVRpbWUoZHRVdGMpO1xyXG5cdFx0Y29uc3QgbG9jYWxEID0gbG9jYWxEdC5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuXHRcdHJldHVybiBuZXcgRGF0ZShsb2NhbEQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGxvY2FsSVNPRGF0ZVN0cmluZyhkdFV0YzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG5cdFx0Y29uc3QgZHQgPSBtb21lbnQoZHRVdGMpLmxvY2FsKCk7XHJcblx0XHRyZXR1cm4gZHQuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBsb2NhdGUgZGF0ZSBPTkxZIChubyB0aW1lKSB0byBVVEMgZGF0ZS5cclxuXHQgKiBAcGFyYW0gZHQgaWYgZHQgY29udGFpbiB0aW1lIGluZm8sIGl0IHdpbGwgYmVjb21lIGR0LnNldEhvdXJzKDAsIDAsIDAsIDApXHJcblx0ICovXHJcblx0c3RhdGljIGxvY2FsRGF0ZVRvVXRjKGQ6IERhdGUgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkIHwgc3RyaW5nKTogRGF0ZSB7XHJcblx0XHRjb25zdCBkdCA9IG1vbWVudChkKS50b0RhdGUoKTtcclxuXHRcdGNvbnN0IG4gPSBkdC5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuXHRcdGNvbnN0IG9mZnNldCA9IGR0LmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDtcclxuXHRcdHJldHVybiBuZXcgRGF0ZShuICsgb2Zmc2V0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRUaW1lem9uZU9mZnNldCgpOiBudW1iZXIge1xyXG5cdFx0Y29uc3QgZHQgPSB0aGlzLnRvZGF5O1xyXG5cdFx0cmV0dXJuIGR0LmdldFRpbWV6b25lT2Zmc2V0KCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUcmFuc2Zvcm0gVVRDIERhdGVUaW1lIHRvIGxvY2FsIGRhdGVUaW1lLlxyXG5cdCAqIEBwYXJhbSBkdFV0Y1xyXG5cdCAqIEBwYXJhbSBvZmZzZXRNaW51dGVzIGlmIG5vdCBkZWZpbmVkLCBpdCB3aWxsIGJlIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKS4gLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlL2dldFRpbWV6b25lT2Zmc2V0XHJcblx0ICovXHJcblx0c3RhdGljIGRhdGVUaW1lVXRjVG9Mb2NhbERhdGVUaW1lKGR0VXRjOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IERhdGUge1xyXG5cdFx0Y29uc3Qgc3RpbGxVdGMgPSBtb21lbnQudXRjKGR0VXRjKS50b0RhdGUoKTtcclxuXHRcdHJldHVybiBtb21lbnQoc3RpbGxVdGMpLmxvY2FsKCkudG9EYXRlKCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGF0ZVRpbWVVdGNUb0xvY2FNb21lbnQoZHRVdGM6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkKTogbW9tZW50Lk1vbWVudCB7XHJcblx0XHRjb25zdCBzdGlsbFV0YyA9IG1vbWVudC51dGMoZHRVdGMpO1xyXG5cdFx0cmV0dXJuIHN0aWxsVXRjLmxvY2FsKCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0RW5kT2ZXZWVrKGR0OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCB8IG51bWJlcikge1xyXG5cdFx0cmV0dXJuIG1vbWVudChkdCkuZW5kT2YoJ2lzb1dlZWsnKS50b0RhdGUoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRTdGFydE9mV2VlayhkdDogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQgfCBudW1iZXIpIHtcclxuXHRcdHJldHVybiBtb21lbnQoZHQpLnN0YXJ0T2YoJ2lzb1dlZWsnKS50b0RhdGUoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRFbmRPZk1vbnRoKGR0OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCB8IG51bWJlcikge1xyXG5cdFx0Ly8gIHJldHVybiBuZXcgRGF0ZShkdC5nZXRGdWxsWWVhcigpLCBkdC5nZXRNb250aCgpICsgMSwgMCwgMjMsIDU5LCA1OSwgOTk5KTtcclxuXHRcdHJldHVybiBtb21lbnQoZHQpLmVuZE9mKCdtb250aCcpLnRvRGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldFN0YXJ0T2ZNb250aChkdDogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQgfCBudW1iZXIpIHtcclxuXHRcdHJldHVybiBtb21lbnQoZHQpLnN0YXJ0T2YoJ21vbnRoJykudG9EYXRlKCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0RGF5c0JldHdlZW5EYXRlcyhkdDE6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkLCBkdDI6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXREYXlzQmV0d2VlbihkdDEsIGR0Mik7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0RW5kT2ZEYXRlKGR0OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IERhdGUge1xyXG5cdFx0cmV0dXJuIGR0ID8gbmV3IERhdGUoZHQuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KSkgOlxyXG5cdFx0XHRuZXcgRGF0ZSh0aGlzLm5vdy5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRTdGFydE9mRGF0ZShkdDogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQpOiBEYXRlIHtcclxuXHRcdHJldHVybiBtb21lbnQoZHQpLnN0YXJ0T2YoJ2RheScpLnRvRGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldEVuZE9mVG9kYXkoKTogRGF0ZSB7XHJcblx0XHQvL1x0cmV0dXJuIG5ldyBEYXRlKChuZXcgRGF0ZShEYXRlLm5vdygpKSkuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KSk7XHJcblx0XHRyZXR1cm4gbW9tZW50KERhdGUubm93KCkpLmVuZE9mKCdkYXknKS50b0RhdGUoKTtcclxuXHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0U3RhcnRPZlRvZGF5KCk6IERhdGUge1xyXG5cdFx0Ly9cdHJldHVybiBuZXcgRGF0ZSgobmV3IERhdGUoRGF0ZS5ub3coKSkpLnNldEhvdXJzKDAsIDAsIDAsIDApKTtcclxuXHRcdHJldHVybiBtb21lbnQoRGF0ZS5ub3coKSkuc3RhcnRPZignZGF5JykudG9EYXRlKCk7XHJcblx0fVxyXG5cclxuXHQvL2luc3BpcmVkIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MzQwNi9hZGQtZGF5cy10by1qYXZhc2NyaXB0LWRhdGVcclxuXHRzdGF0aWMgYWRkRGF5cyhkdDogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQsIGRheXM6IG51bWJlciA9IDApIHtcclxuXHRcdGNvbnN0IGRhdCA9IG1vbWVudChkdCk7XHJcblx0XHRkYXQuYWRkKGRheXMsICdkYXlzJyk7XHJcblx0XHRyZXR1cm4gZGF0LnRvRGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHN1YnRyYWN0RGF5cyhkdDogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQsIGRheXM6IG51bWJlciA9IDApIHtcclxuXHRcdGNvbnN0IGRhdCA9IG1vbWVudChkdCk7XHJcblx0XHRkYXQuc3VidHJhY3QoZGF5cywgJ2RheXMnKTtcclxuXHRcdHJldHVybiBkYXQudG9EYXRlKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTdGFydCBvZiB0b2RheVxyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXQgdG9kYXkoKTogRGF0ZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRTdGFydE9mVG9kYXkoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXQgbm93KCk6IERhdGUge1xyXG5cdFx0cmV0dXJuIG5ldyBEYXRlKERhdGUubm93KCkpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldE5leHQ1TWludXRlTWFyaygpOiBEYXRlIHtcclxuXHRcdGNvbnN0IG0gPSBtb21lbnQoKS5zZXQoJ3NlY29uZCcsIDApLnNldCgnbWlsbGlzZWNvbmQnLCAwKTtcclxuXHRcdGNvbnN0IG1pbnV0ZSA9IG0ubWludXRlKCk7XHJcblx0XHRjb25zdCBtb2QgPSBtaW51dGUgJSA1O1xyXG5cdFx0aWYgKG1vZCkge1xyXG5cdFx0XHRjb25zdCBkZWx0YSA9IDUgLSBtb2Q7XHJcblx0XHRcdHJldHVybiBtLmFkZChkZWx0YSwgJ20nKS50b0RhdGUoKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbS50b0RhdGUoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRZTUQoZDogRGF0ZSkge1xyXG5cdFx0cmV0dXJuIG1vbWVudChkKS5mb3JtYXQoJ1lZWVlNTUREJyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0RE1ZV2l0aFNsYXNoKGQ6IERhdGUpIHtcclxuXHRcdHJldHVybiBtb21lbnQoZCkuZm9ybWF0KCdERC9NTS9ZWVlZJyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0RE1ZSG1XaXRoU2xhc2goZDogRGF0ZSkge1xyXG5cdFx0cmV0dXJuIG1vbWVudChkKS5mb3JtYXQoJ0REL01NL1lZWVkgSEg6bW0nKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRNY3BUaW1lKGR0OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG5cdFx0cmV0dXJuIG1vbWVudChkdCkuZm9ybWF0KCdISDptbTpzcy5TU1NaJyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJbiAyNCBob3VyIGZvcm1hdFxyXG5cdCAqIEBwYXJhbSBkdFV0Y1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXRMb2NhbERNWUhtV2l0aFNsYXNoKGR0VXRjOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG5cdFx0Y29uc3QgZCA9IERhdGVGdW5jLmRhdGVUaW1lVXRjVG9Mb2NhbERhdGVUaW1lKGR0VXRjKTtcclxuXHRcdHJldHVybiBtb21lbnQoZCkuZm9ybWF0KCdERC9NTS9ZWVlZIEhIOm1tJyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBPZmZzZXQgbWludXRlcyBjb21wYXJpbmcgd2l0aCB0b2RheVxyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXRPZmZzZXRNaW51dGVzKGR0VXRjOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCB8IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRjb25zdCBkbTEgPSBtb21lbnQoZHRVdGMpO1xyXG5cdFx0Y29uc3QgZG0yID0gbW9tZW50KG5ldyBEYXRlKCkuc2V0SG91cnMoMCwgMCwgMCwgMCkpO1xyXG5cdFx0cmV0dXJuIGRtMS5kaWZmKGRtMiwgJ21pbnV0ZXMnKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXREYXlzQmV0d2VlbihkMT86IERhdGUgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBkMj86IERhdGUgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcclxuXHRcdGNvbnN0IGRtMSA9IG1vbWVudChkMSk7XHJcblx0XHRjb25zdCBkbTIgPSBtb21lbnQoZDIpO1xyXG5cdFx0cmV0dXJuIGRtMi5kaWZmKGRtMSwgJ2RheXMnKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBob3VyIG9mIHRoZSBkYXRlLiBJZiBEYXRlIGlzIG5vdCBkZWZpbmVkLCB0aGUgaG91ciB3aWxsIGJlIGN1cnJlbnQgaG91ci5cclxuXHQgKiBAcGFyYW0gZHRVdGNcclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0SG91cihkdFV0YzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQgfCBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0Y29uc3QgbSA9IG1vbWVudChkdFV0Yyk7XHJcblx0XHRyZXR1cm4gbS5ob3VycygpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldE1pbnV0ZShkdFV0YzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQgfCBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0Y29uc3QgbSA9IG1vbWVudChkdFV0Yyk7XHJcblx0XHRyZXR1cm4gbS5taW51dGVzKCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY29tcG9zZURhdGVUaW1lKGR0OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCwgaDogbnVtYmVyID0gMCwgbWludXRlOiBudW1iZXIgPSAwKTogRGF0ZSB7XHJcblx0XHRjb25zdCBtdCA9IG1vbWVudChkdCk7XHJcblx0XHRyZXR1cm4gbmV3IERhdGUobXQudG9EYXRlKCkuc2V0SG91cnMoaCwgbWludXRlLCAwLCAwKSk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgb2xkZXJUaGFuMjRIb3VycyhkOiBEYXRlKTogYm9vbGVhbiB7XHJcblx0XHRjb25zdCBtID0gbW9tZW50KGQpO1xyXG5cdFx0cmV0dXJuIG1vbWVudCgpLmRpZmYobSwgJ2hvdXJzJykgPj0gMjQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgb2xkZXJUaGFuMjRIb3Vyc1V0YyhkdFV0YzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBEYXRlRnVuYy5nZXRIb3VyQWdlVXRjKGR0VXRjKSA+PSAyNDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBvbGRlclRoYW5Ib3VycyhkOiBEYXRlLCBob3VyczogbnVtYmVyKSB7XHJcblx0XHRjb25zdCBtID0gbW9tZW50KGQpO1xyXG5cdFx0cmV0dXJuIG1vbWVudCgpLmRpZmYobSwgJ2hvdXJzJykgPj0gaG91cnM7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgb2xkZXJUaGFuSG91cnNVdGMoZHRVdGM6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkLCBob3VyczogbnVtYmVyKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gRGF0ZUZ1bmMuZ2V0SG91ckFnZVV0YyhkdFV0YykgPj0gaG91cnM7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgb2xkZXJUaGFuTWludXRlcyhkOiBEYXRlLCBtaW51dGVzOiBudW1iZXIpIHtcclxuXHRcdGNvbnN0IG0gPSBtb21lbnQoZCk7XHJcblx0XHRyZXR1cm4gbW9tZW50KCkuZGlmZihtLCAnbWludXRlcycpID49IG1pbnV0ZXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJdCBjb3VsZCBiZSAxMVBNIHllc3RlcmRheSwgYW5kIDEgQU0gdG9kYXkuIEFjdHVhbGx5IGJhc2VkIG9uIGxvY2FsIHRvZGF5LlxyXG5cdCAqL1xyXG5cdHN0YXRpYyBvbGRlclRoYW4xRGF5KGR0VXRjOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIERhdGVGdW5jLmdldERheUFnZVV0YyhkdFV0YykgPiAwO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldEhvdXJBZ2UoZDogRGF0ZSkge1xyXG5cdFx0Y29uc3QgbSA9IG1vbWVudChkKTtcclxuXHRcdHJldHVybiBtb21lbnQoKS5kaWZmKG0sICdob3VycycpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldEhvdXJBZ2VVdGMoZHRVdGM6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcblx0XHRjb25zdCBtID0gbW9tZW50LnV0YyhkdFV0Yyk7XHJcblx0XHRyZXR1cm4gbW9tZW50LnV0YygpLmRpZmYobSwgJ2hvdXJzJyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb21wYXJlIHV0YyBkYXRlIHdpdGggdXRjIG5vdy5cclxuXHQgKiBAcGFyYW0gZHRVdGNcclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0RGF5QWdlVXRjKGR0VXRjOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG5cdFx0Y29uc3QgbSA9IG1vbWVudC51dGMoZHRVdGMpO1xyXG5cdFx0cmV0dXJuIG1vbWVudC51dGMoKS5kaWZmKG0sICdkYXlzJyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0QWdlKGQ6IERhdGUpIHtcclxuXHRcdGNvbnN0IG0gPSBtb21lbnQoZCk7XHJcblx0XHRyZXR1cm4gbW9tZW50KCkuZGlmZihtLCAneWVhcnMnKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRZZWFyKGQ6IERhdGUpIHtcclxuXHRcdGNvbnN0IG0gPSBtb21lbnQoZCk7XHJcblx0XHRyZXR1cm4gbS55ZWFyKCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0VXRjTm93KCk6IERhdGUge1xyXG5cdFx0cmV0dXJuIG1vbWVudC51dGMoKS50b0RhdGUoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhZGRNaW51dGVzKGQ6IERhdGUsIG06IG51bWJlcik6IERhdGUge1xyXG5cdFx0cmV0dXJuIG1vbWVudChkKS5hZGQobSwgJ20nKS50b0RhdGUoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhZGRNb250aChkOiBEYXRlLCBtOiBudW1iZXIpOiBEYXRlIHtcclxuXHRcdHJldHVybiBtb21lbnQoZCkuYWRkKG0sICdNJykudG9EYXRlKCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0RHVyYXRpb24oZDE6IERhdGUsIGQyOiBEYXRlKSB7XHJcblx0XHRjb25zdCBtZDEgPSBtb21lbnQoZDEpO1xyXG5cdFx0Y29uc3QgbWQyID0gbW9tZW50KGQyKTtcclxuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24obWQyLmRpZmYobWQxKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb252ZXJ0IG1pbnV0ZXMgZnJvbSBtaWRuaWdodCB0byBISDptbSB0ZXh0XHJcblx0ICogQHBhcmFtIG1pbnNcclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0SE1Gcm9tTWlucyhtaW5zOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdFx0Ly8gZG8gbm90IGluY2x1ZGUgdGhlIGZpcnN0IHZhbGlkYXRpb24gY2hlY2sgaWYgeW91IHdhbnQsIGZvciBleGFtcGxlLFxyXG5cdFx0Ly8gZ2V0VGltZUZyb21NaW5zKDE1MzApIHRvIGVxdWFsIGdldFRpbWVGcm9tTWlucyg5MCkgKGkuZS4gbWlucyByb2xsb3ZlcilcclxuXHRcdGlmIChtaW5zID49IDI0ICogNjAgfHwgbWlucyA8IDApIHtcclxuXHRcdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZhbGlkIGlucHV0IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCBhbmQgbGVzcyB0aGFuIDE0NDAuJyk7XHJcblx0XHR9XHJcblx0XHRjb25zdCBoID0gbWlucyAvIDYwIHwgMCxcclxuXHRcdFx0bSA9IG1pbnMgJSA2MCB8IDA7XHJcblx0XHRyZXR1cm4gbW9tZW50LnV0YygpLmhvdXJzKGgpLm1pbnV0ZXMobSkuZm9ybWF0KCdISDptbScpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldE1pbnV0ZXNTaW5jZU1pZG5pZ2h0KGQ6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcblx0XHRjb25zdCBtID0gbW9tZW50KGQpO1xyXG5cdFx0Y29uc3QgbWlkbmlnaHQgPSBtb21lbnQoZCkuc3RhcnRPZignZGF5Jyk7IC8vTXV0YXRlcyB0aGUgb3JpZ2luYWwgbW9tZW50IGJ5IHNldHRpbmcgaXQgdG8gdGhlIHN0YXJ0IG9mIGEgdW5pdCBvZiB0aW1lLiBTbyBJIGhhdmUgYmV0dGVyIG5vdCB0byB1c2UgbSB3aGljaCB3aWwgYmUgY2hhbmdlZCBieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb25cclxuXHRcdHJldHVybiBtLmRpZmYobWlkbmlnaHQsICdtaW51dGVzJyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0TWludXRlc0JldHdlZW4oc3RhcnQ6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkLCBlbmQ6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcblx0XHRjb25zdCBtID0gbW9tZW50KHN0YXJ0KTtcclxuXHRcdGNvbnN0IG0yID0gbW9tZW50KGVuZCk7XHJcblx0XHRyZXR1cm4gbTIuZGlmZihtLCAnbWludXRlcycpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGFyc2UganNvbiBzdHJpbmcgd2l0aCBkYXRlIHNlcmlhbGl6ZWQgaW50byBzdHJpbmcsIGFuZCBnZXQgcHJvcGVyIGRhdGUgb2JqZWN0IGJhY2tcclxuXHQgKiBAcGFyYW0gc1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBkYXRlU2FmZUpzb25QYXJzZShzOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBKU09OLnBhcnNlKHMsIHRoaXMuZGF0ZVJldml2ZXIpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgZGF0ZVJldml2ZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuXHRcdGlmIChEYXRlRnVuYy5pc1NlcmlhbGl6ZWREYXRlKHZhbHVlKSkge1xyXG5cdFx0XHRyZXR1cm4gKG5ldyBEYXRlKHZhbHVlKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSWYgaXQncyBub3QgYSBkYXRlLXN0cmluZywgd2Ugd2FudCB0byByZXR1cm4gdGhlIHZhbHVlIGFzLWlzLiBJZiB3ZSBmYWlsIHRvIHJldHVyblxyXG5cdFx0Ly8gYSB2YWx1ZSwgaXQgd2lsbCBiZSBvbWl0dGVkIGZyb20gdGhlIHJlc3VsdGFudCBkYXRhIHN0cnVjdHVyZS5cclxuXHRcdHJldHVybiAodmFsdWUpO1xyXG5cclxuXHR9XHJcblxyXG5cclxuXHQvLyBJIGRldGVybWluZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBzZXJpYWxpemVkLWRhdGUgcGF0dGVybi5cclxuXHRwcml2YXRlIHN0YXRpYyBpc1NlcmlhbGl6ZWREYXRlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuXHRcdC8vIERhdGVzIGFyZSBzZXJpYWxpemVkIGluIFRaIGZvcm1hdCwgZXhhbXBsZTogJzE5ODEtMTItMjBUMDQ6MDA6MTQuMDAwWicuXHJcblx0XHRjb25zdCBkYXRlUGF0dGVybiA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn1cXC5cXGR7M31aJC87XHJcblx0XHRyZXR1cm4gKERhdGVGdW5jLmlzU3RyaW5nKHZhbHVlKSAmJiBkYXRlUGF0dGVybi50ZXN0KHZhbHVlKSk7XHJcblx0fVxyXG5cclxuXHJcblx0Ly8gSSBkZXRlcm1pbmUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgU3RyaW5nLlxyXG5cdHByaXZhdGUgc3RhdGljIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoe30udG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IFN0cmluZ10nKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkYXRlU2FmZVBhcnNlKHM6IHN0cmluZyB8IERhdGUpIHtcclxuXHRcdGNvbnN0IG0gPSBtb21lbnQocyk7XHJcblx0XHRyZXR1cm4gbS50b0RhdGUoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjb21wb3NlRGF0ZVdpdGhNaW51dGVzKGQ6IERhdGUsIG1pbnV0ZTogbnVtYmVyKTogRGF0ZSB7XHJcblx0XHRjb25zdCBtID0gbW9tZW50KGQpO1xyXG5cdFx0Y29uc3QgbWlkbmlnaHQgPSBtb21lbnQoZCkuc3RhcnRPZignZGF5Jyk7IC8vIE11dGF0ZXMgdGhlIG9yaWdpbmFsIG1vbWVudCBieSBzZXR0aW5nIGl0IHRvIHRoZSBzdGFydCBvZiBhIHVuaXQgb2YgdGltZS4gU28gSSBoYXZlIGJldHRlciBub3QgdG8gdXNlIG0gd2hpY2ggd2lsIGJlIGNoYW5nZWQgYnkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uXHJcblx0XHRtaWRuaWdodC5hZGQobWludXRlLCAnbWludXRlcycpO1xyXG5cdFx0cmV0dXJuIG1pZG5pZ2h0LnRvRGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2FmZSBjb21wYXJlIHNpbmNlIGRhdGUgZGF0YSBtYXkgYmUgY29uc2lkZXJlZCBhcyBzdHJpbmcgcmF0aGVyIHRoYW4gZGF0ZS5cclxuXHQgKiBAcGFyYW0gZDFcclxuXHQgKiBAcGFyYW0gZDJcclxuXHQgKi9cclxuXHRzdGF0aWMgY29tcGFyZShkMTogRGF0ZSB8IHVuZGVmaW5lZCwgZDI6IERhdGUgfCB1bmRlZmluZWQpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFkMSAmJiAhZDIpIHtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFkMSkge1xyXG5cdFx0XHRyZXR1cm4gLU5hTlxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghZDIpIHtcclxuXHRcdFx0cmV0dXJuIE5hTjtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBkZDEgPSAobmV3IERhdGUoZDEpKS52YWx1ZU9mKCk7XHJcblx0XHRjb25zdCBkZDIgPSAobmV3IERhdGUoZDIpKS52YWx1ZU9mKCk7XHJcblx0XHRyZXR1cm4gZGQxIC0gZGQyO1xyXG5cdH1cclxufVxyXG5cclxuIl19
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { v4 as uuid } from 'uuid'; //todo: somehow the system could not recognize v5.
|
|
2
|
-
// import { v5 as uuid } from 'uuid/v5 causes ERROR in src / app / _func / helperFunc.ts(1, 10): error TS2305: Module '"C:/VSProjects/ApsCloudTrunk/APS.WebPos.NGCli/NGSource/node_modules/@types/uuid/v5"' has no exported member 'v5'
|
|
3
|
-
// https://github.com/DefinitelyTyped/DefinitelyTyped/pull/28439
|
|
4
|
-
export class HelperFunc {
|
|
5
|
-
static loadExternalScript(scriptUrl) {
|
|
6
|
-
return new Promise((resolve, reject) => {
|
|
7
|
-
const scriptElement = document.createElement('script');
|
|
8
|
-
scriptElement.src = scriptUrl;
|
|
9
|
-
scriptElement.onload = resolve;
|
|
10
|
-
document.body.appendChild(scriptElement);
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* 36 UUID string including 4 hyphens. MySql stores GUID as 36 bytes anyway rather than 16bytes.
|
|
15
|
-
*/
|
|
16
|
-
static newUUID() {
|
|
17
|
-
// return uuid('medilink.com.au', 'apscloud');
|
|
18
|
-
return uuid();
|
|
19
|
-
}
|
|
20
|
-
static newUUIDStartWith0() {
|
|
21
|
-
const s = uuid();
|
|
22
|
-
return '0000' + s.slice(4);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyRnVuYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25tY2UtZnVuYy9zcmMvX2Z1bmMvaGVscGVyRnVuYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQyxDQUFDLG1EQUFtRDtBQUN0Rix1T0FBdU87QUFDdk8sZ0VBQWdFO0FBRWhFLE1BQU0sT0FBTyxVQUFVO0lBQ3RCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxTQUFpQjtRQUMxQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3RDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkQsYUFBYSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUM7WUFDOUIsYUFBYSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7WUFDL0IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsT0FBTztRQUNmLCtDQUErQztRQUM3QyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUI7UUFDdkIsTUFBTSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDakIsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7IC8vdG9kbzogc29tZWhvdyAgdGhlIHN5c3RlbSBjb3VsZCBub3QgcmVjb2duaXplIHY1LlxyXG4vLyBpbXBvcnQgeyB2NSBhcyB1dWlkIH0gZnJvbSAndXVpZC92NSBjYXVzZXMgRVJST1IgaW4gc3JjIC8gYXBwIC8gX2Z1bmMgLyBoZWxwZXJGdW5jLnRzKDEsIDEwKTogZXJyb3IgVFMyMzA1OiBNb2R1bGUgJ1wiQzovVlNQcm9qZWN0cy9BcHNDbG91ZFRydW5rL0FQUy5XZWJQb3MuTkdDbGkvTkdTb3VyY2Uvbm9kZV9tb2R1bGVzL0B0eXBlcy91dWlkL3Y1XCInIGhhcyBubyBleHBvcnRlZCBtZW1iZXIgJ3Y1J1xyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vRGVmaW5pdGVseVR5cGVkL0RlZmluaXRlbHlUeXBlZC9wdWxsLzI4NDM5XHJcblxyXG5leHBvcnQgY2xhc3MgSGVscGVyRnVuYyB7XHJcblx0c3RhdGljIGxvYWRFeHRlcm5hbFNjcmlwdChzY3JpcHRVcmw6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0Y29uc3Qgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG5cdFx0XHRzY3JpcHRFbGVtZW50LnNyYyA9IHNjcmlwdFVybDtcclxuXHRcdFx0c2NyaXB0RWxlbWVudC5vbmxvYWQgPSByZXNvbHZlO1xyXG5cdFx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdEVsZW1lbnQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiAzNiBVVUlEIHN0cmluZyBpbmNsdWRpbmcgNCBoeXBoZW5zLiBNeVNxbCBzdG9yZXMgR1VJRCBhcyAzNiBieXRlcyBhbnl3YXkgcmF0aGVyIHRoYW4gMTZieXRlcy5cclxuXHQgKi9cclxuXHRzdGF0aWMgbmV3VVVJRCgpOiBzdHJpbmcge1xyXG4vL1x0XHRyZXR1cm4gdXVpZCgnbWVkaWxpbmsuY29tLmF1JywgJ2Fwc2Nsb3VkJyk7XHJcblx0XHRyZXR1cm4gdXVpZCgpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5ld1VVSURTdGFydFdpdGgwKCkge1xyXG5cdFx0Y29uc3QgcyA9IHV1aWQoKTtcclxuXHRcdHJldHVybiAnMDAwMCcgKyBzLnNsaWNlKDQpO1xyXG5cdH1cclxufVxyXG4iXX0=
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
export class HtmlFunc {
|
|
2
|
-
/**
|
|
3
|
-
* Print with buillt-in CSS for internal reports
|
|
4
|
-
* @param htmlTags
|
|
5
|
-
* @param baseRef
|
|
6
|
-
*/
|
|
7
|
-
static printWithCSS(htmlTags, baseRef) {
|
|
8
|
-
if (window) {
|
|
9
|
-
const htmlToPrint = `<html><head>
|
|
10
|
-
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
|
|
11
|
-
<link rel="stylesheet" type="text/css" href="${baseRef}scripts/print190826.css" media="screen,print"/>
|
|
12
|
-
</head><body onload="window.print()">${htmlTags}</body></html>`;
|
|
13
|
-
const popup = window.open('', '_blank', 'width=1024,height=768');
|
|
14
|
-
popup === null || popup === void 0 ? void 0 : popup.document.open();
|
|
15
|
-
popup === null || popup === void 0 ? void 0 : popup.document.write(htmlToPrint);
|
|
16
|
-
popup === null || popup === void 0 ? void 0 : popup.document.close();
|
|
17
|
-
}
|
|
18
|
-
return true;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Print for external documents.
|
|
22
|
-
* @param htmlTags
|
|
23
|
-
*/
|
|
24
|
-
static print(htmlTags) {
|
|
25
|
-
if (window) {
|
|
26
|
-
const htmlToPrint = `<html><head>
|
|
27
|
-
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
|
|
28
|
-
</head><body onload="window.print()">${htmlTags}</body></html>`;
|
|
29
|
-
const popup = window.open('', '_blank', 'width=1024,height=768');
|
|
30
|
-
popup === null || popup === void 0 ? void 0 : popup.document.open();
|
|
31
|
-
popup === null || popup === void 0 ? void 0 : popup.document.write(htmlToPrint);
|
|
32
|
-
popup === null || popup === void 0 ? void 0 : popup.document.close();
|
|
33
|
-
}
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
static printImage(url) {
|
|
37
|
-
const imageTags = `<img src="${url}" alt="Image from URL"/>`;
|
|
38
|
-
HtmlFunc.print(imageTags);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbEZ1bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ubWNlLWZ1bmMvc3JjL19mdW5jL2h0bWxGdW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxRQUFRO0lBQ3BCOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQWdCLEVBQUUsT0FBZTtRQUNwRCxJQUFJLE1BQU0sRUFBRTtZQUNYLE1BQU0sV0FBVyxHQUFHOzsrQ0FFd0IsT0FBTzt1Q0FDZixRQUFRLGdCQUFnQixDQUFDO1lBRTdELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2pFLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFbkMsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN4QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBZ0I7UUFDNUIsSUFBSSxNQUFNLEVBQUU7WUFDWCxNQUFNLFdBQVcsR0FBRzs7dUNBRWdCLFFBQVEsZ0JBQWdCLENBQUM7WUFFN0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixDQUFDLENBQUM7WUFDakUsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2QixLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUVuQyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFXO1FBQzVCLE1BQU0sU0FBUyxHQUFHLGFBQWEsR0FBRywwQkFBMEIsQ0FBQztRQUM3RCxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBIdG1sRnVuYyB7XHJcblx0LyoqXHJcblx0ICogUHJpbnQgd2l0aCBidWlsbHQtaW4gQ1NTIGZvciBpbnRlcm5hbCByZXBvcnRzXHJcblx0ICogQHBhcmFtIGh0bWxUYWdzXHJcblx0ICogQHBhcmFtIGJhc2VSZWZcclxuXHQgKi9cclxuXHRzdGF0aWMgcHJpbnRXaXRoQ1NTKGh0bWxUYWdzOiBzdHJpbmcsIGJhc2VSZWY6IHN0cmluZykge1xyXG5cdFx0aWYgKHdpbmRvdykge1xyXG5cdFx0XHRjb25zdCBodG1sVG9QcmludCA9IGA8aHRtbD48aGVhZD5cclxuPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCIvPlxyXG48bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgaHJlZj1cIiR7YmFzZVJlZn1zY3JpcHRzL3ByaW50MTkwODI2LmNzc1wiIG1lZGlhPVwic2NyZWVuLHByaW50XCIvPlxyXG48L2hlYWQ+PGJvZHkgb25sb2FkPVwid2luZG93LnByaW50KClcIj4ke2h0bWxUYWdzfTwvYm9keT48L2h0bWw+YDtcclxuXHJcblx0XHRcdGNvbnN0IHBvcHVwID0gd2luZG93Lm9wZW4oJycsICdfYmxhbmsnLCAnd2lkdGg9MTAyNCxoZWlnaHQ9NzY4Jyk7XHJcblx0XHRcdHBvcHVwPy5kb2N1bWVudC5vcGVuKCk7XHJcblx0XHRcdHBvcHVwPy5kb2N1bWVudC53cml0ZShodG1sVG9QcmludCk7XHJcblxyXG5cdFx0XHRwb3B1cD8uZG9jdW1lbnQuY2xvc2UoKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUHJpbnQgZm9yIGV4dGVybmFsIGRvY3VtZW50cy5cclxuXHQgKiBAcGFyYW0gaHRtbFRhZ3NcclxuXHQgKi9cclxuXHRzdGF0aWMgcHJpbnQoaHRtbFRhZ3M6IHN0cmluZykge1xyXG5cdFx0aWYgKHdpbmRvdykge1xyXG5cdFx0XHRjb25zdCBodG1sVG9QcmludCA9IGA8aHRtbD48aGVhZD5cclxuPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCIvPlxyXG48L2hlYWQ+PGJvZHkgb25sb2FkPVwid2luZG93LnByaW50KClcIj4ke2h0bWxUYWdzfTwvYm9keT48L2h0bWw+YDtcclxuXHJcblx0XHRcdGNvbnN0IHBvcHVwID0gd2luZG93Lm9wZW4oJycsICdfYmxhbmsnLCAnd2lkdGg9MTAyNCxoZWlnaHQ9NzY4Jyk7XHJcblx0XHRcdHBvcHVwPy5kb2N1bWVudC5vcGVuKCk7XHJcblx0XHRcdHBvcHVwPy5kb2N1bWVudC53cml0ZShodG1sVG9QcmludCk7XHJcblxyXG5cdFx0XHRwb3B1cD8uZG9jdW1lbnQuY2xvc2UoKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHByaW50SW1hZ2UodXJsOiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IGltYWdlVGFncyA9IGA8aW1nIHNyYz1cIiR7dXJsfVwiIGFsdD1cIkltYWdlIGZyb20gVVJMXCIvPmA7XHJcblx0XHRIdG1sRnVuYy5wcmludChpbWFnZVRhZ3MpO1xyXG5cdH1cclxufVxyXG4iXX0=
|
package/esm2015/_func/index.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export * from './addressFunc';
|
|
2
|
-
export * from './authentication.service';
|
|
3
|
-
export * from './currencyFunc';
|
|
4
|
-
export * from './dateFunc';
|
|
5
|
-
export * from './helperFunc';
|
|
6
|
-
export * from './htmlFunc';
|
|
7
|
-
export * from './jsFunc';
|
|
8
|
-
export * from './stringFunc';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ubWNlLWZ1bmMvc3JjL19mdW5jL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWRkcmVzc0Z1bmMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2N1cnJlbmN5RnVuYyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZUZ1bmMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2hlbHBlckZ1bmMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2h0bWxGdW5jJztcclxuZXhwb3J0ICogZnJvbSAnLi9qc0Z1bmMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3N0cmluZ0Z1bmMnO1xyXG5cclxuIl19
|
package/esm2015/_func/jsFunc.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { DateFunc } from './dateFunc';
|
|
2
|
-
export class JSFunc {
|
|
3
|
-
static groupBy(array, propertyName) {
|
|
4
|
-
return array.reduce(function (acc, obj) {
|
|
5
|
-
const key = obj[propertyName];
|
|
6
|
-
if (!acc[key]) {
|
|
7
|
-
acc[key] = [];
|
|
8
|
-
}
|
|
9
|
-
acc[key].push(obj);
|
|
10
|
-
return acc;
|
|
11
|
-
}, {});
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Group by a date property. The key is always of string type and representing milliseconds. The client should convert the string to number.
|
|
15
|
-
* Angular date pipe could actually consume such string without explicitly converting to number.
|
|
16
|
-
* @param array
|
|
17
|
-
* @param propertyName
|
|
18
|
-
*/
|
|
19
|
-
static groupByDate(array, propertyName) {
|
|
20
|
-
return array.reduce(function (acc, obj) {
|
|
21
|
-
const key = DateFunc.dateTimeUtcToLocalDateNumber(obj[propertyName]);
|
|
22
|
-
if (!acc[key]) {
|
|
23
|
-
acc[key] = [];
|
|
24
|
-
}
|
|
25
|
-
acc[key].push(obj);
|
|
26
|
-
return acc;
|
|
27
|
-
}, {});
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Remove null or empty fields including those in nested objects.
|
|
31
|
-
* @param obj
|
|
32
|
-
*/
|
|
33
|
-
static removeNullOrEmptyFields(obj) {
|
|
34
|
-
for (const f in obj) {
|
|
35
|
-
let p = obj[f];
|
|
36
|
-
if (p === null || p === '') {
|
|
37
|
-
delete obj[f];
|
|
38
|
-
}
|
|
39
|
-
else if (typeof p === 'object' && p !== null) {
|
|
40
|
-
this.removeNullOrEmptyFields(p);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
static removeNullFields(obj) {
|
|
45
|
-
for (const f in obj) {
|
|
46
|
-
if (obj[f] === null) {
|
|
47
|
-
delete obj[f];
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNGdW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbm1jZS1mdW5jL3NyYy9fZnVuYy9qc0Z1bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0QyxNQUFNLE9BQU8sTUFBTTtJQUNsQixNQUFNLENBQUMsT0FBTyxDQUFJLEtBQWUsRUFBRSxZQUFvQjtRQUN0RCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBUyxHQUFRLEVBQUUsR0FBUTtZQUM5QyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDZCxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ2Q7WUFDRCxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLE9BQU8sR0FBRyxDQUFDO1FBQ1osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBSSxLQUFlLEVBQUUsWUFBb0I7UUFDMUQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVMsR0FBUSxFQUFFLEdBQVE7WUFDOUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNkO1lBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixPQUFPLEdBQUcsQ0FBQztRQUNaLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsdUJBQXVCLENBQUMsR0FBUTtRQUN0QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRTtZQUNwQixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDM0IsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDZDtpQkFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEM7U0FDRDtJQUNGLENBQUM7SUFFRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBUTtRQUMvQixLQUFLLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRTtZQUNwQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQ3BCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2Q7U0FDRDtJQUNGLENBQUM7Q0FFRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVGdW5jIH0gZnJvbSAnLi9kYXRlRnVuYyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSlNGdW5jIHtcclxuXHRzdGF0aWMgZ3JvdXBCeTxUPihhcnJheTogQXJyYXk8VD4sIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gYXJyYXkucmVkdWNlKGZ1bmN0aW9uKGFjYzogYW55LCBvYmo6IGFueSkge1xyXG5cdFx0XHRjb25zdCBrZXkgPSBvYmpbcHJvcGVydHlOYW1lXTtcclxuXHRcdFx0aWYgKCFhY2Nba2V5XSkge1xyXG5cdFx0XHRcdGFjY1trZXldID0gW107XHJcblx0XHRcdH1cclxuXHRcdFx0YWNjW2tleV0ucHVzaChvYmopO1xyXG5cdFx0XHRyZXR1cm4gYWNjO1xyXG5cdFx0fSwge30pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR3JvdXAgYnkgYSBkYXRlIHByb3BlcnR5LiBUaGUga2V5IGlzIGFsd2F5cyBvZiBzdHJpbmcgdHlwZSBhbmQgcmVwcmVzZW50aW5nIG1pbGxpc2Vjb25kcy4gVGhlIGNsaWVudCBzaG91bGQgY29udmVydCB0aGUgc3RyaW5nIHRvIG51bWJlci5cclxuXHQgKiBBbmd1bGFyIGRhdGUgcGlwZSBjb3VsZCBhY3R1YWxseSBjb25zdW1lIHN1Y2ggc3RyaW5nIHdpdGhvdXQgZXhwbGljaXRseSBjb252ZXJ0aW5nIHRvIG51bWJlci5cclxuXHQgKiBAcGFyYW0gYXJyYXlcclxuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lXHJcblx0ICovXHJcblx0c3RhdGljIGdyb3VwQnlEYXRlPFQ+KGFycmF5OiBBcnJheTxUPiwgcHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBhcnJheS5yZWR1Y2UoZnVuY3Rpb24oYWNjOiBhbnksIG9iajogYW55KSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IERhdGVGdW5jLmRhdGVUaW1lVXRjVG9Mb2NhbERhdGVOdW1iZXIob2JqW3Byb3BlcnR5TmFtZV0pO1xyXG5cdFx0XHRpZiAoIWFjY1trZXldKSB7XHJcblx0XHRcdFx0YWNjW2tleV0gPSBbXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRhY2Nba2V5XS5wdXNoKG9iaik7XHJcblx0XHRcdHJldHVybiBhY2M7XHJcblx0XHR9LCB7fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmUgbnVsbCBvciBlbXB0eSBmaWVsZHMgaW5jbHVkaW5nIHRob3NlIGluIG5lc3RlZCBvYmplY3RzLlxyXG5cdCAqIEBwYXJhbSBvYmogXHJcblx0ICovXHJcblx0c3RhdGljIHJlbW92ZU51bGxPckVtcHR5RmllbGRzKG9iajogYW55KSB7XHJcblx0XHRmb3IgKGNvbnN0IGYgaW4gb2JqKSB7XHJcblx0XHRcdGxldCBwID0gb2JqW2ZdO1xyXG5cdFx0XHRpZiAocCA9PT0gbnVsbCB8fCBwID09PSAnJykge1xyXG5cdFx0XHRcdGRlbGV0ZSBvYmpbZl07XHJcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHAgPT09ICdvYmplY3QnICYmIHAgIT09IG51bGwpIHtcclxuXHRcdFx0XHR0aGlzLnJlbW92ZU51bGxPckVtcHR5RmllbGRzKHApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgcmVtb3ZlTnVsbEZpZWxkcyhvYmo6IGFueSkge1xyXG5cdFx0Zm9yIChjb25zdCBmIGluIG9iaikge1xyXG5cdFx0XHRpZiAob2JqW2ZdID09PSBudWxsKSB7XHJcblx0XHRcdFx0ZGVsZXRlIG9ialtmXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcbn1cclxuIl19
|