web-one 0.0.1
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/README.md +1 -0
- package/lib/index.js +535 -0
- package/package.json +26 -0
- package/src/index.ts +500 -0
- package/tsconfig.json +26 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# web
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,535 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var resources = (function () {
|
|
4
|
+
function resources() {
|
|
5
|
+
}
|
|
6
|
+
resources.limits = [12, 24, 60, 100, 120, 180, 300, 600];
|
|
7
|
+
resources.page = "page";
|
|
8
|
+
resources.limit = "limit";
|
|
9
|
+
resources.defaultLimit = 12;
|
|
10
|
+
resources.sort = "sort";
|
|
11
|
+
return resources;
|
|
12
|
+
}());
|
|
13
|
+
exports.resources = resources;
|
|
14
|
+
function removePage(obj) {
|
|
15
|
+
var arr = [];
|
|
16
|
+
var keys = Object.keys(obj);
|
|
17
|
+
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
|
|
18
|
+
var k = keys_1[_i];
|
|
19
|
+
if (k !== resources.page) {
|
|
20
|
+
var v = obj[k];
|
|
21
|
+
arr.push(k + "=" + encodeURI(v));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return arr.length === 0 ? "" : arr.join("&");
|
|
25
|
+
}
|
|
26
|
+
exports.removePage = removePage;
|
|
27
|
+
function removeSort(obj) {
|
|
28
|
+
var arr = [];
|
|
29
|
+
var keys = Object.keys(obj);
|
|
30
|
+
for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {
|
|
31
|
+
var k = keys_2[_i];
|
|
32
|
+
if (k !== resources.sort) {
|
|
33
|
+
var v = obj[k];
|
|
34
|
+
arr.push(k + "=" + encodeURI(v));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return arr.length === 0 ? "" : arr.join("&");
|
|
38
|
+
}
|
|
39
|
+
exports.removeSort = removeSort;
|
|
40
|
+
function getSortString(field, sort) {
|
|
41
|
+
if (field === sort.field) {
|
|
42
|
+
return sort.type === "-" ? field : "-" + field;
|
|
43
|
+
}
|
|
44
|
+
return field;
|
|
45
|
+
}
|
|
46
|
+
exports.getSortString = getSortString;
|
|
47
|
+
function buildFilter(obj, dates, nums, arr) {
|
|
48
|
+
var filter = fromParams(obj, arr);
|
|
49
|
+
filter[resources.page] = getPage(filter[resources.page]);
|
|
50
|
+
filter[resources.limit] = getLimit(filter[resources.limit]);
|
|
51
|
+
format(filter, dates, nums);
|
|
52
|
+
return filter;
|
|
53
|
+
}
|
|
54
|
+
exports.buildFilter = buildFilter;
|
|
55
|
+
function fromParams(obj, arr) {
|
|
56
|
+
var s = {};
|
|
57
|
+
var keys = Object.keys(obj);
|
|
58
|
+
for (var _i = 0, keys_3 = keys; _i < keys_3.length; _i++) {
|
|
59
|
+
var key = keys_3[_i];
|
|
60
|
+
if (inArray(key, arr)) {
|
|
61
|
+
var x = obj[key].split(",");
|
|
62
|
+
setValue(s, key, x);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
setValue(s, key, obj[key]);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return s;
|
|
69
|
+
}
|
|
70
|
+
exports.fromParams = fromParams;
|
|
71
|
+
function inArray(s, arr) {
|
|
72
|
+
if (!arr || arr.length === 0) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {
|
|
76
|
+
var a = arr_1[_i];
|
|
77
|
+
if (s === a) {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
exports.inArray = inArray;
|
|
84
|
+
function setValue(o, key, value) {
|
|
85
|
+
var obj = o;
|
|
86
|
+
var replaceKey = key.replace(/\[/g, ".[").replace(/\.\./g, ".");
|
|
87
|
+
if (replaceKey.indexOf(".") === 0) {
|
|
88
|
+
replaceKey = replaceKey.slice(1, replaceKey.length);
|
|
89
|
+
}
|
|
90
|
+
var keys = replaceKey.split(".");
|
|
91
|
+
var firstKey = keys.shift();
|
|
92
|
+
if (!firstKey) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
var isArrayKey = /\[([0-9]+)\]/.test(firstKey);
|
|
96
|
+
if (keys.length > 0) {
|
|
97
|
+
var firstKeyValue = obj[firstKey] || {};
|
|
98
|
+
var returnValue = setValue(firstKeyValue, keys.join("."), value);
|
|
99
|
+
return setKey(obj, isArrayKey, firstKey, returnValue);
|
|
100
|
+
}
|
|
101
|
+
return setKey(obj, isArrayKey, firstKey, value);
|
|
102
|
+
}
|
|
103
|
+
exports.setValue = setValue;
|
|
104
|
+
var setKey = function (_object, _isArrayKey, _key, _nextValue) {
|
|
105
|
+
if (_isArrayKey) {
|
|
106
|
+
if (_object.length > _key) {
|
|
107
|
+
_object[_key] = _nextValue;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
_object.push(_nextValue);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
_object[_key] = _nextValue;
|
|
115
|
+
}
|
|
116
|
+
return _object;
|
|
117
|
+
};
|
|
118
|
+
var _datereg = "/Date(";
|
|
119
|
+
var _re = /-?\d+/;
|
|
120
|
+
function toDate(v) {
|
|
121
|
+
if (!v) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
if (v instanceof Date) {
|
|
125
|
+
return v;
|
|
126
|
+
}
|
|
127
|
+
else if (typeof v === "number") {
|
|
128
|
+
return new Date(v);
|
|
129
|
+
}
|
|
130
|
+
var i = v.indexOf(_datereg);
|
|
131
|
+
if (i >= 0) {
|
|
132
|
+
var m = _re.exec(v);
|
|
133
|
+
if (m !== null) {
|
|
134
|
+
var d = parseInt(m[0], 10);
|
|
135
|
+
return new Date(d);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
if (isNaN(v)) {
|
|
143
|
+
return new Date(v);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
var d = parseInt(v, 10);
|
|
147
|
+
return new Date(d);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function format(obj, dates, nums) {
|
|
152
|
+
var o = obj;
|
|
153
|
+
if (dates && dates.length > 0) {
|
|
154
|
+
for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {
|
|
155
|
+
var s = dates_1[_i];
|
|
156
|
+
var v = o[s];
|
|
157
|
+
if (v) {
|
|
158
|
+
if (v instanceof Date) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (typeof v === "string" || typeof v === "number") {
|
|
162
|
+
var d = toDate(v);
|
|
163
|
+
if (d) {
|
|
164
|
+
if (!(d instanceof Date) || d.toString() === "Invalid Date") {
|
|
165
|
+
delete o[s];
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
o[s] = d;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else if (typeof v === "object") {
|
|
173
|
+
var keys = Object.keys(v);
|
|
174
|
+
for (var _a = 0, keys_4 = keys; _a < keys_4.length; _a++) {
|
|
175
|
+
var key = keys_4[_a];
|
|
176
|
+
var v2 = v[key];
|
|
177
|
+
if (v2 instanceof Date) {
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (typeof v2 === "string" || typeof v2 === "number") {
|
|
181
|
+
var d2 = toDate(v2);
|
|
182
|
+
if (d2) {
|
|
183
|
+
if (!(d2 instanceof Date) || d2.toString() === "Invalid Date") {
|
|
184
|
+
delete v[key];
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
v[key] = d2;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
if (nums && nums.length > 0) {
|
|
197
|
+
for (var _b = 0, nums_1 = nums; _b < nums_1.length; _b++) {
|
|
198
|
+
var s = nums_1[_b];
|
|
199
|
+
var v = o[s];
|
|
200
|
+
if (v) {
|
|
201
|
+
if (v instanceof Date) {
|
|
202
|
+
delete o[s];
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
if (typeof v === "number") {
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
if (typeof v === "string") {
|
|
209
|
+
if (!isNaN(v)) {
|
|
210
|
+
delete o[s];
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
var i = parseFloat(v);
|
|
215
|
+
o[s] = i;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
else if (typeof v === "object") {
|
|
219
|
+
var keys = Object.keys(v);
|
|
220
|
+
for (var _c = 0, keys_5 = keys; _c < keys_5.length; _c++) {
|
|
221
|
+
var key = keys_5[_c];
|
|
222
|
+
var v2 = v[key];
|
|
223
|
+
if (v2 instanceof Date) {
|
|
224
|
+
delete o[key];
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
if (typeof v2 === "number") {
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
if (typeof v2 === "string") {
|
|
231
|
+
if (!isNaN(v2)) {
|
|
232
|
+
delete v[key];
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
var i = parseFloat(v2);
|
|
236
|
+
v[key] = i;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return o;
|
|
245
|
+
}
|
|
246
|
+
exports.format = format;
|
|
247
|
+
function buildSort(s) {
|
|
248
|
+
if (!s || s.indexOf(",") >= 0) {
|
|
249
|
+
return {};
|
|
250
|
+
}
|
|
251
|
+
if (s.startsWith("-")) {
|
|
252
|
+
return { field: s.substring(1), type: "-" };
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
return { field: s.startsWith("+") ? s.substring(1) : s, type: "+" };
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
exports.buildSort = buildSort;
|
|
259
|
+
function buildSortFromParams(params) {
|
|
260
|
+
var s = params[resources.sort];
|
|
261
|
+
return buildSort(s);
|
|
262
|
+
}
|
|
263
|
+
exports.buildSortFromParams = buildSortFromParams;
|
|
264
|
+
function renderSort(field, sort) {
|
|
265
|
+
if (field === sort.field) {
|
|
266
|
+
return sort.type === "-" ? "<i class='sort-down'></i>" : "<i class='sort-up'></i>";
|
|
267
|
+
}
|
|
268
|
+
return "";
|
|
269
|
+
}
|
|
270
|
+
exports.renderSort = renderSort;
|
|
271
|
+
function buildSortSearch(params, fields, sortStr) {
|
|
272
|
+
var search = removeSort(params);
|
|
273
|
+
var sort = buildSort(sortStr);
|
|
274
|
+
var sorts = {};
|
|
275
|
+
var prefix = search.length > 0 ? "?" + search + "&" : "?";
|
|
276
|
+
for (var i = 0; i < fields.length; i++) {
|
|
277
|
+
sorts[fields[i]] = {
|
|
278
|
+
url: prefix + resources.sort + "=" + getSortString(fields[i], sort),
|
|
279
|
+
tag: renderSort(fields[i], sort),
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
return sorts;
|
|
283
|
+
}
|
|
284
|
+
exports.buildSortSearch = buildSortSearch;
|
|
285
|
+
function getDateFormat(profile) {
|
|
286
|
+
return "M/D/YYYY";
|
|
287
|
+
}
|
|
288
|
+
exports.getDateFormat = getDateFormat;
|
|
289
|
+
function getPage(page) {
|
|
290
|
+
var num = getNumber(page);
|
|
291
|
+
return num === undefined || num < 1 ? 1 : num;
|
|
292
|
+
}
|
|
293
|
+
exports.getPage = getPage;
|
|
294
|
+
function getLimit(limit) {
|
|
295
|
+
var num = getNumber(limit);
|
|
296
|
+
return num === undefined || num < 1 ? resources.defaultLimit : num;
|
|
297
|
+
}
|
|
298
|
+
exports.getLimit = getLimit;
|
|
299
|
+
function getNumber(num, defaultNum) {
|
|
300
|
+
return !num || num.length === 0 ? defaultNum : isNaN(num) ? undefined : parseInt(num, 10);
|
|
301
|
+
}
|
|
302
|
+
exports.getNumber = getNumber;
|
|
303
|
+
function clone(obj) {
|
|
304
|
+
if (!obj) {
|
|
305
|
+
return obj;
|
|
306
|
+
}
|
|
307
|
+
if (obj instanceof Date) {
|
|
308
|
+
return new Date(obj.getTime());
|
|
309
|
+
}
|
|
310
|
+
if (typeof obj !== "object") {
|
|
311
|
+
return obj;
|
|
312
|
+
}
|
|
313
|
+
if (Array.isArray(obj)) {
|
|
314
|
+
var arr = [];
|
|
315
|
+
for (var _i = 0, obj_1 = obj; _i < obj_1.length; _i++) {
|
|
316
|
+
var sub = obj_1[_i];
|
|
317
|
+
var c = clone(sub);
|
|
318
|
+
arr.push(c);
|
|
319
|
+
}
|
|
320
|
+
return arr;
|
|
321
|
+
}
|
|
322
|
+
var x = {};
|
|
323
|
+
var keys = Object.keys(obj);
|
|
324
|
+
for (var _a = 0, keys_6 = keys; _a < keys_6.length; _a++) {
|
|
325
|
+
var k = keys_6[_a];
|
|
326
|
+
var v = obj[k];
|
|
327
|
+
if (v instanceof Date) {
|
|
328
|
+
x[k] = new Date(v.getTime());
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
switch (typeof v) {
|
|
332
|
+
case "object":
|
|
333
|
+
x[k] = clone(v);
|
|
334
|
+
break;
|
|
335
|
+
default:
|
|
336
|
+
x[k] = v;
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return x;
|
|
342
|
+
}
|
|
343
|
+
exports.clone = clone;
|
|
344
|
+
function datetimeToString(date) {
|
|
345
|
+
if (!date || date === "") {
|
|
346
|
+
return undefined;
|
|
347
|
+
}
|
|
348
|
+
var d2 = typeof date !== "string" ? date : new Date(date);
|
|
349
|
+
var year = d2.getFullYear();
|
|
350
|
+
var month = pad(d2.getMonth() + 1);
|
|
351
|
+
var day = pad(d2.getDate());
|
|
352
|
+
var hours = pad(d2.getHours());
|
|
353
|
+
var minutes = pad(d2.getMinutes());
|
|
354
|
+
var seconds = pad(d2.getSeconds());
|
|
355
|
+
return year + "-" + month + "-" + day + "T" + hours + ":" + minutes + ":" + seconds;
|
|
356
|
+
}
|
|
357
|
+
exports.datetimeToString = datetimeToString;
|
|
358
|
+
function formatDate(d, dateFormat, full, upper) {
|
|
359
|
+
if (!d) {
|
|
360
|
+
return "";
|
|
361
|
+
}
|
|
362
|
+
var format = dateFormat && dateFormat.length > 0 ? dateFormat : "M/D/YYYY";
|
|
363
|
+
if (upper) {
|
|
364
|
+
format = format.toUpperCase();
|
|
365
|
+
}
|
|
366
|
+
var arr = ["", "", ""];
|
|
367
|
+
var items = format.split(/\/|\.| |-/);
|
|
368
|
+
var iday = items.indexOf("D");
|
|
369
|
+
var im = items.indexOf("M");
|
|
370
|
+
var iyear = items.indexOf("YYYY");
|
|
371
|
+
var fm = full ? full : false;
|
|
372
|
+
var fd = full ? full : false;
|
|
373
|
+
var fy = true;
|
|
374
|
+
if (iday === -1) {
|
|
375
|
+
iday = items.indexOf("DD");
|
|
376
|
+
fd = true;
|
|
377
|
+
}
|
|
378
|
+
if (im === -1) {
|
|
379
|
+
im = items.indexOf("MM");
|
|
380
|
+
fm = true;
|
|
381
|
+
}
|
|
382
|
+
if (iyear === -1) {
|
|
383
|
+
iyear = items.indexOf("YY");
|
|
384
|
+
fy = full ? full : false;
|
|
385
|
+
}
|
|
386
|
+
arr[iday] = getD(d.getDate(), fd);
|
|
387
|
+
arr[im] = getD(d.getMonth() + 1, fm);
|
|
388
|
+
arr[iyear] = getYear(d.getFullYear(), fy);
|
|
389
|
+
var s = detectSeparator(format);
|
|
390
|
+
var e = detectLastSeparator(format);
|
|
391
|
+
var l = items.length === 4 ? format[format.length - 1] : "";
|
|
392
|
+
return arr[0] + s + arr[1] + e + arr[2] + l;
|
|
393
|
+
}
|
|
394
|
+
exports.formatDate = formatDate;
|
|
395
|
+
function detectSeparator(format) {
|
|
396
|
+
var len = format.length;
|
|
397
|
+
for (var i = 0; i < len; i++) {
|
|
398
|
+
var c = format[i];
|
|
399
|
+
if (!((c >= "A" && c <= "Z") || (c >= "a" && c <= "z"))) {
|
|
400
|
+
return c;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
return "/";
|
|
404
|
+
}
|
|
405
|
+
function detectLastSeparator(format) {
|
|
406
|
+
var len = format.length - 3;
|
|
407
|
+
for (var i = len; i > -0; i--) {
|
|
408
|
+
var c = format[i];
|
|
409
|
+
if (!((c >= "A" && c <= "Z") || (c >= "a" && c <= "z"))) {
|
|
410
|
+
return c;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
return "/";
|
|
414
|
+
}
|
|
415
|
+
function getYear(y, full) {
|
|
416
|
+
if (full || (y <= 99 && y >= -99)) {
|
|
417
|
+
return y.toString();
|
|
418
|
+
}
|
|
419
|
+
var s = y.toString();
|
|
420
|
+
return s.substring(s.length - 2);
|
|
421
|
+
}
|
|
422
|
+
exports.getYear = getYear;
|
|
423
|
+
function getD(n, fu) {
|
|
424
|
+
return fu ? pad(n) : n.toString();
|
|
425
|
+
}
|
|
426
|
+
function formatDateTime(date, dateFormat, full, upper) {
|
|
427
|
+
if (!date) {
|
|
428
|
+
return "";
|
|
429
|
+
}
|
|
430
|
+
var sd = formatDate(date, dateFormat, full, upper);
|
|
431
|
+
if (sd.length === 0) {
|
|
432
|
+
return sd;
|
|
433
|
+
}
|
|
434
|
+
return sd + " " + formatTime(date);
|
|
435
|
+
}
|
|
436
|
+
exports.formatDateTime = formatDateTime;
|
|
437
|
+
function formatLongDateTime(date, dateFormat, full, upper) {
|
|
438
|
+
if (!date) {
|
|
439
|
+
return "";
|
|
440
|
+
}
|
|
441
|
+
var sd = formatDate(date, dateFormat, full, upper);
|
|
442
|
+
if (sd.length === 0) {
|
|
443
|
+
return sd;
|
|
444
|
+
}
|
|
445
|
+
return sd + " " + formatLongTime(date);
|
|
446
|
+
}
|
|
447
|
+
exports.formatLongDateTime = formatLongDateTime;
|
|
448
|
+
function formatFullDateTime(date, dateFormat, s, full, upper) {
|
|
449
|
+
if (!date) {
|
|
450
|
+
return "";
|
|
451
|
+
}
|
|
452
|
+
var sd = formatDate(date, dateFormat, full, upper);
|
|
453
|
+
if (sd.length === 0) {
|
|
454
|
+
return sd;
|
|
455
|
+
}
|
|
456
|
+
return sd + " " + formatFullTime(date, s);
|
|
457
|
+
}
|
|
458
|
+
exports.formatFullDateTime = formatFullDateTime;
|
|
459
|
+
function formatTime(d) {
|
|
460
|
+
return pad(d.getHours()) + ":" + pad(d.getMinutes());
|
|
461
|
+
}
|
|
462
|
+
exports.formatTime = formatTime;
|
|
463
|
+
function formatLongTime(d) {
|
|
464
|
+
return pad(d.getHours()) + ":" + pad(d.getMinutes()) + ":" + pad(d.getSeconds());
|
|
465
|
+
}
|
|
466
|
+
exports.formatLongTime = formatLongTime;
|
|
467
|
+
function formatFullTime(d, s) {
|
|
468
|
+
var se = s && s.length > 0 ? s : ".";
|
|
469
|
+
return formatLongTime(d) + se + pad3(d.getMilliseconds());
|
|
470
|
+
}
|
|
471
|
+
exports.formatFullTime = formatFullTime;
|
|
472
|
+
function dateToString(d, milli) {
|
|
473
|
+
var s = "" + d.getFullYear() + pad(d.getMonth() + 1) + pad(d.getDate()) + pad(d.getHours()) + pad(d.getMinutes()) + pad(d.getSeconds());
|
|
474
|
+
if (milli) {
|
|
475
|
+
return s + pad3(d.getMilliseconds());
|
|
476
|
+
}
|
|
477
|
+
return s;
|
|
478
|
+
}
|
|
479
|
+
exports.dateToString = dateToString;
|
|
480
|
+
function pad(n) {
|
|
481
|
+
return n < 10 ? "0" + n : n.toString();
|
|
482
|
+
}
|
|
483
|
+
function pad3(n) {
|
|
484
|
+
if (n >= 100) {
|
|
485
|
+
return n.toString();
|
|
486
|
+
}
|
|
487
|
+
return n < 10 ? "00" + n : "0" + n.toString();
|
|
488
|
+
}
|
|
489
|
+
var formatter = (function () {
|
|
490
|
+
function formatter() {
|
|
491
|
+
}
|
|
492
|
+
formatter.removePhoneFormat = function (phone) {
|
|
493
|
+
if (phone) {
|
|
494
|
+
return phone.replace(formatter.phone, "");
|
|
495
|
+
}
|
|
496
|
+
else {
|
|
497
|
+
return phone;
|
|
498
|
+
}
|
|
499
|
+
};
|
|
500
|
+
formatter.formatPhone = function (phone) {
|
|
501
|
+
if (!phone) {
|
|
502
|
+
return "";
|
|
503
|
+
}
|
|
504
|
+
var s = phone;
|
|
505
|
+
var x = formatter.removePhoneFormat(phone);
|
|
506
|
+
if (x.length === 10) {
|
|
507
|
+
var USNumber = x.match(formatter.usPhone);
|
|
508
|
+
if (USNumber != null) {
|
|
509
|
+
s = USNumber[1] + " " + USNumber[2] + "-" + USNumber[3];
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
else if (x.length <= 3 && x.length > 0) {
|
|
513
|
+
s = x;
|
|
514
|
+
}
|
|
515
|
+
else if (x.length > 3 && x.length < 7) {
|
|
516
|
+
s = x.substring(0, 3) + " " + x.substring(3, x.length);
|
|
517
|
+
}
|
|
518
|
+
else if (x.length >= 7 && x.length < 10) {
|
|
519
|
+
s = x.substring(0, 3) + " " + x.substring(3, 6) + "-" + x.substring(6, x.length);
|
|
520
|
+
}
|
|
521
|
+
else if (x.length >= 11) {
|
|
522
|
+
var l = x.length;
|
|
523
|
+
s = x.substring(0, l - 7) + " " + x.substring(l - 7, l - 4) + "-" + x.substring(l - 4, l);
|
|
524
|
+
}
|
|
525
|
+
return s;
|
|
526
|
+
};
|
|
527
|
+
formatter.phone = / |\-|\.|\(|\)/g;
|
|
528
|
+
formatter.usPhone = /(\d{3})(\d{3})(\d{4})/;
|
|
529
|
+
return formatter;
|
|
530
|
+
}());
|
|
531
|
+
exports.formatter = formatter;
|
|
532
|
+
function formatPhone(phone) {
|
|
533
|
+
return formatter.formatPhone(phone);
|
|
534
|
+
}
|
|
535
|
+
exports.formatPhone = formatPhone;
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "web-one",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Validate data",
|
|
5
|
+
"main": "./lib/index.js",
|
|
6
|
+
"types": "./src/index.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build:lib": "tsc",
|
|
9
|
+
"clean:lib": "rimraf lib"
|
|
10
|
+
},
|
|
11
|
+
"devDependencies": {
|
|
12
|
+
"tslint": "5.10.0",
|
|
13
|
+
"typescript": "^3.8.3"
|
|
14
|
+
},
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"registry": "https://registry.npmjs.org/"
|
|
17
|
+
},
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git@github.com/core-ts/web"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"web",
|
|
24
|
+
"web utilities"
|
|
25
|
+
]
|
|
26
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
export class resources {
|
|
2
|
+
static limits = [12, 24, 60, 100, 120, 180, 300, 600]
|
|
3
|
+
static page = "page"
|
|
4
|
+
static limit = "limit"
|
|
5
|
+
static defaultLimit = 12
|
|
6
|
+
static sort = "sort"
|
|
7
|
+
}
|
|
8
|
+
export interface StringMap {
|
|
9
|
+
[key: string]: string
|
|
10
|
+
}
|
|
11
|
+
export interface Params {
|
|
12
|
+
params: StringMap
|
|
13
|
+
searchParams: StringMap
|
|
14
|
+
}
|
|
15
|
+
export function removePage(obj: StringMap): string {
|
|
16
|
+
const arr: string[] = []
|
|
17
|
+
const keys = Object.keys(obj)
|
|
18
|
+
for (const k of keys) {
|
|
19
|
+
if (k !== resources.page) {
|
|
20
|
+
const v = obj[k]
|
|
21
|
+
arr.push(`${k}=${encodeURI(v)}`)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return arr.length === 0 ? "" : arr.join("&")
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function removeSort(obj: StringMap): string {
|
|
28
|
+
const arr: string[] = []
|
|
29
|
+
const keys = Object.keys(obj)
|
|
30
|
+
for (const k of keys) {
|
|
31
|
+
if (k !== resources.sort) {
|
|
32
|
+
const v = obj[k]
|
|
33
|
+
arr.push(`${k}=${encodeURI(v)}`)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return arr.length === 0 ? "" : arr.join("&")
|
|
37
|
+
}
|
|
38
|
+
export type SearchParams = {
|
|
39
|
+
q?: string
|
|
40
|
+
page?: string
|
|
41
|
+
limit?: string
|
|
42
|
+
sort?: string
|
|
43
|
+
}
|
|
44
|
+
export interface Sort {
|
|
45
|
+
field?: string
|
|
46
|
+
type?: string
|
|
47
|
+
}
|
|
48
|
+
export interface SortType {
|
|
49
|
+
url: string
|
|
50
|
+
tag: string
|
|
51
|
+
}
|
|
52
|
+
export interface SortMap {
|
|
53
|
+
[key: string]: SortType
|
|
54
|
+
}
|
|
55
|
+
export function getSortString(field: string, sort: Sort): string {
|
|
56
|
+
if (field === sort.field) {
|
|
57
|
+
return sort.type === "-" ? field : "-" + field
|
|
58
|
+
}
|
|
59
|
+
return field
|
|
60
|
+
}
|
|
61
|
+
export function buildFilter<T>(obj: StringMap, dates?: string[], nums?: string[], arr?: string[]): T {
|
|
62
|
+
const filter: any = fromParams<T>(obj, arr)
|
|
63
|
+
filter[resources.page] = getPage(filter[resources.page] as string)
|
|
64
|
+
filter[resources.limit] = getLimit(filter[resources.limit] as string)
|
|
65
|
+
format(filter, dates, nums)
|
|
66
|
+
return filter
|
|
67
|
+
}
|
|
68
|
+
export function fromParams<T>(obj: StringMap, arr?: string[]): T {
|
|
69
|
+
const s: any = {}
|
|
70
|
+
const keys = Object.keys(obj)
|
|
71
|
+
for (const key of keys) {
|
|
72
|
+
if (inArray(key, arr)) {
|
|
73
|
+
const x = (obj[key] as string).split(",")
|
|
74
|
+
setValue(s, key, x)
|
|
75
|
+
} else {
|
|
76
|
+
setValue(s, key, obj[key] as string)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return s
|
|
80
|
+
}
|
|
81
|
+
export function inArray(s: string, arr?: string[]): boolean {
|
|
82
|
+
if (!arr || arr.length === 0) {
|
|
83
|
+
return false
|
|
84
|
+
}
|
|
85
|
+
for (const a of arr) {
|
|
86
|
+
if (s === a) {
|
|
87
|
+
return true
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return false
|
|
91
|
+
}
|
|
92
|
+
export function setValue<T, V>(o: T, key: string, value: V): any {
|
|
93
|
+
const obj: any = o
|
|
94
|
+
let replaceKey = key.replace(/\[/g, ".[").replace(/\.\./g, ".")
|
|
95
|
+
if (replaceKey.indexOf(".") === 0) {
|
|
96
|
+
replaceKey = replaceKey.slice(1, replaceKey.length)
|
|
97
|
+
}
|
|
98
|
+
const keys = replaceKey.split(".")
|
|
99
|
+
const firstKey = keys.shift()
|
|
100
|
+
if (!firstKey) {
|
|
101
|
+
return
|
|
102
|
+
}
|
|
103
|
+
const isArrayKey = /\[([0-9]+)\]/.test(firstKey)
|
|
104
|
+
if (keys.length > 0) {
|
|
105
|
+
const firstKeyValue = obj[firstKey] || {}
|
|
106
|
+
const returnValue = setValue(firstKeyValue, keys.join("."), value)
|
|
107
|
+
return setKey(obj, isArrayKey, firstKey, returnValue)
|
|
108
|
+
}
|
|
109
|
+
return setKey(obj, isArrayKey, firstKey, value)
|
|
110
|
+
}
|
|
111
|
+
const setKey = (_object: any, _isArrayKey: boolean, _key: string, _nextValue: any) => {
|
|
112
|
+
if (_isArrayKey) {
|
|
113
|
+
if (_object.length > _key) {
|
|
114
|
+
_object[_key] = _nextValue
|
|
115
|
+
} else {
|
|
116
|
+
_object.push(_nextValue)
|
|
117
|
+
}
|
|
118
|
+
} else {
|
|
119
|
+
_object[_key] = _nextValue
|
|
120
|
+
}
|
|
121
|
+
return _object
|
|
122
|
+
}
|
|
123
|
+
const _datereg = "/Date("
|
|
124
|
+
const _re = /-?\d+/
|
|
125
|
+
function toDate(v: any): Date | null | undefined {
|
|
126
|
+
if (!v) {
|
|
127
|
+
return null
|
|
128
|
+
}
|
|
129
|
+
if (v instanceof Date) {
|
|
130
|
+
return v
|
|
131
|
+
} else if (typeof v === "number") {
|
|
132
|
+
return new Date(v)
|
|
133
|
+
}
|
|
134
|
+
const i = v.indexOf(_datereg)
|
|
135
|
+
if (i >= 0) {
|
|
136
|
+
const m = _re.exec(v)
|
|
137
|
+
if (m !== null) {
|
|
138
|
+
const d = parseInt(m[0], 10)
|
|
139
|
+
return new Date(d)
|
|
140
|
+
} else {
|
|
141
|
+
return null
|
|
142
|
+
}
|
|
143
|
+
} else {
|
|
144
|
+
if (isNaN(v)) {
|
|
145
|
+
return new Date(v)
|
|
146
|
+
} else {
|
|
147
|
+
const d = parseInt(v, 10)
|
|
148
|
+
return new Date(d)
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
export function format<T>(obj: T, dates?: string[], nums?: string[]): T {
|
|
153
|
+
const o: any = obj
|
|
154
|
+
if (dates && dates.length > 0) {
|
|
155
|
+
for (const s of dates) {
|
|
156
|
+
const v = o[s]
|
|
157
|
+
if (v) {
|
|
158
|
+
if (v instanceof Date) {
|
|
159
|
+
continue
|
|
160
|
+
}
|
|
161
|
+
if (typeof v === "string" || typeof v === "number") {
|
|
162
|
+
const d = toDate(v)
|
|
163
|
+
if (d) {
|
|
164
|
+
if (!(d instanceof Date) || d.toString() === "Invalid Date") {
|
|
165
|
+
delete o[s]
|
|
166
|
+
} else {
|
|
167
|
+
o[s] = d
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
} else if (typeof v === "object") {
|
|
171
|
+
const keys = Object.keys(v)
|
|
172
|
+
for (const key of keys) {
|
|
173
|
+
const v2 = v[key]
|
|
174
|
+
if (v2 instanceof Date) {
|
|
175
|
+
continue
|
|
176
|
+
}
|
|
177
|
+
if (typeof v2 === "string" || typeof v2 === "number") {
|
|
178
|
+
const d2 = toDate(v2)
|
|
179
|
+
if (d2) {
|
|
180
|
+
if (!(d2 instanceof Date) || d2.toString() === "Invalid Date") {
|
|
181
|
+
delete v[key]
|
|
182
|
+
} else {
|
|
183
|
+
v[key] = d2
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (nums && nums.length > 0) {
|
|
193
|
+
for (const s of nums) {
|
|
194
|
+
const v = o[s]
|
|
195
|
+
if (v) {
|
|
196
|
+
if (v instanceof Date) {
|
|
197
|
+
delete o[s]
|
|
198
|
+
continue
|
|
199
|
+
}
|
|
200
|
+
if (typeof v === "number") {
|
|
201
|
+
continue
|
|
202
|
+
}
|
|
203
|
+
if (typeof v === "string") {
|
|
204
|
+
if (!isNaN(v as any)) {
|
|
205
|
+
delete o[s]
|
|
206
|
+
continue
|
|
207
|
+
} else {
|
|
208
|
+
const i = parseFloat(v)
|
|
209
|
+
o[s] = i
|
|
210
|
+
}
|
|
211
|
+
} else if (typeof v === "object") {
|
|
212
|
+
const keys = Object.keys(v)
|
|
213
|
+
for (const key of keys) {
|
|
214
|
+
const v2 = v[key]
|
|
215
|
+
if (v2 instanceof Date) {
|
|
216
|
+
delete o[key]
|
|
217
|
+
continue
|
|
218
|
+
}
|
|
219
|
+
if (typeof v2 === "number") {
|
|
220
|
+
continue
|
|
221
|
+
}
|
|
222
|
+
if (typeof v2 === "string") {
|
|
223
|
+
if (!isNaN(v2 as any)) {
|
|
224
|
+
delete v[key]
|
|
225
|
+
} else {
|
|
226
|
+
const i = parseFloat(v2)
|
|
227
|
+
v[key] = i
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return o
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
export function buildSort(s?: string): Sort {
|
|
239
|
+
if (!s || s.indexOf(",") >= 0) {
|
|
240
|
+
return {} as Sort
|
|
241
|
+
}
|
|
242
|
+
if (s.startsWith("-")) {
|
|
243
|
+
return { field: s.substring(1), type: "-" }
|
|
244
|
+
} else {
|
|
245
|
+
return { field: s.startsWith("+") ? s.substring(1) : s, type: "+" }
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
export function buildSortFromParams(params: StringMap): Sort {
|
|
249
|
+
const s = params[resources.sort] as string
|
|
250
|
+
return buildSort(s)
|
|
251
|
+
}
|
|
252
|
+
export function renderSort(field: string, sort: Sort): string {
|
|
253
|
+
if (field === sort.field) {
|
|
254
|
+
return sort.type === "-" ? "<i class='sort-down'></i>" : "<i class='sort-up'></i>"
|
|
255
|
+
}
|
|
256
|
+
return ""
|
|
257
|
+
}
|
|
258
|
+
export function buildSortSearch(params: StringMap, fields: string[], sortStr?: string): SortMap {
|
|
259
|
+
const search = removeSort(params)
|
|
260
|
+
const sort = buildSort(sortStr)
|
|
261
|
+
let sorts: SortMap = {}
|
|
262
|
+
const prefix = search.length > 0 ? "?" + search + "&" : "?"
|
|
263
|
+
for (let i = 0; i < fields.length; i++) {
|
|
264
|
+
sorts[fields[i]] = {
|
|
265
|
+
url: prefix + resources.sort + "=" + getSortString(fields[i], sort),
|
|
266
|
+
tag: renderSort(fields[i], sort),
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return sorts
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
export function getDateFormat(profile?: string): string {
|
|
273
|
+
return "M/D/YYYY"
|
|
274
|
+
}
|
|
275
|
+
export function getPage(page?: string): number {
|
|
276
|
+
const num = getNumber(page)
|
|
277
|
+
return num === undefined || num < 1 ? 1 : num
|
|
278
|
+
}
|
|
279
|
+
export function getLimit(limit?: string): number {
|
|
280
|
+
const num = getNumber(limit)
|
|
281
|
+
return num === undefined || num < 1 ? resources.defaultLimit : num
|
|
282
|
+
}
|
|
283
|
+
export function getNumber(num?: string, defaultNum?: number): number | undefined {
|
|
284
|
+
return !num || num.length === 0 ? defaultNum : isNaN(num as any) ? undefined : parseInt(num, 10)
|
|
285
|
+
}
|
|
286
|
+
export function clone(obj: any): any {
|
|
287
|
+
if (!obj) {
|
|
288
|
+
return obj
|
|
289
|
+
}
|
|
290
|
+
if (obj instanceof Date) {
|
|
291
|
+
return new Date(obj.getTime())
|
|
292
|
+
}
|
|
293
|
+
if (typeof obj !== "object") {
|
|
294
|
+
return obj
|
|
295
|
+
}
|
|
296
|
+
if (Array.isArray(obj)) {
|
|
297
|
+
const arr = []
|
|
298
|
+
for (const sub of obj) {
|
|
299
|
+
const c = clone(sub)
|
|
300
|
+
arr.push(c)
|
|
301
|
+
}
|
|
302
|
+
return arr
|
|
303
|
+
}
|
|
304
|
+
const x: any = {}
|
|
305
|
+
const keys = Object.keys(obj)
|
|
306
|
+
for (const k of keys) {
|
|
307
|
+
const v = obj[k]
|
|
308
|
+
if (v instanceof Date) {
|
|
309
|
+
x[k] = new Date(v.getTime())
|
|
310
|
+
} else {
|
|
311
|
+
switch (typeof v) {
|
|
312
|
+
case "object":
|
|
313
|
+
x[k] = clone(v)
|
|
314
|
+
break
|
|
315
|
+
default:
|
|
316
|
+
x[k] = v
|
|
317
|
+
break
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return x
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
export function datetimeToString(date?: Date | string): string | undefined {
|
|
325
|
+
if (!date || date === "") {
|
|
326
|
+
return undefined
|
|
327
|
+
}
|
|
328
|
+
const d2 = typeof date !== "string" ? date : new Date(date)
|
|
329
|
+
const year = d2.getFullYear()
|
|
330
|
+
const month = pad(d2.getMonth() + 1)
|
|
331
|
+
const day = pad(d2.getDate())
|
|
332
|
+
const hours = pad(d2.getHours())
|
|
333
|
+
const minutes = pad(d2.getMinutes())
|
|
334
|
+
const seconds = pad(d2.getSeconds())
|
|
335
|
+
return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
export function formatDate(d: Date | null | undefined, dateFormat?: string, full?: boolean, upper?: boolean): string {
|
|
339
|
+
if (!d) {
|
|
340
|
+
return ""
|
|
341
|
+
}
|
|
342
|
+
let format = dateFormat && dateFormat.length > 0 ? dateFormat : "M/D/YYYY"
|
|
343
|
+
if (upper) {
|
|
344
|
+
format = format.toUpperCase()
|
|
345
|
+
}
|
|
346
|
+
let arr = ["", "", ""]
|
|
347
|
+
const items = format.split(/\/|\.| |-/)
|
|
348
|
+
let iday = items.indexOf("D")
|
|
349
|
+
let im = items.indexOf("M")
|
|
350
|
+
let iyear = items.indexOf("YYYY")
|
|
351
|
+
let fm = full ? full : false
|
|
352
|
+
let fd = full ? full : false
|
|
353
|
+
let fy = true
|
|
354
|
+
if (iday === -1) {
|
|
355
|
+
iday = items.indexOf("DD")
|
|
356
|
+
fd = true
|
|
357
|
+
}
|
|
358
|
+
if (im === -1) {
|
|
359
|
+
im = items.indexOf("MM")
|
|
360
|
+
fm = true
|
|
361
|
+
}
|
|
362
|
+
if (iyear === -1) {
|
|
363
|
+
iyear = items.indexOf("YY")
|
|
364
|
+
fy = full ? full : false
|
|
365
|
+
}
|
|
366
|
+
arr[iday] = getD(d.getDate(), fd)
|
|
367
|
+
arr[im] = getD(d.getMonth() + 1, fm)
|
|
368
|
+
arr[iyear] = getYear(d.getFullYear(), fy)
|
|
369
|
+
const s = detectSeparator(format)
|
|
370
|
+
const e = detectLastSeparator(format)
|
|
371
|
+
const l = items.length === 4 ? format[format.length - 1] : ""
|
|
372
|
+
return arr[0] + s + arr[1] + e + arr[2] + l
|
|
373
|
+
}
|
|
374
|
+
function detectSeparator(format: string): string {
|
|
375
|
+
const len = format.length
|
|
376
|
+
for (let i = 0; i < len; i++) {
|
|
377
|
+
const c = format[i]
|
|
378
|
+
if (!((c >= "A" && c <= "Z") || (c >= "a" && c <= "z"))) {
|
|
379
|
+
return c
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
return "/"
|
|
383
|
+
}
|
|
384
|
+
function detectLastSeparator(format: string): string {
|
|
385
|
+
const len = format.length - 3
|
|
386
|
+
for (let i = len; i > -0; i--) {
|
|
387
|
+
const c = format[i]
|
|
388
|
+
if (!((c >= "A" && c <= "Z") || (c >= "a" && c <= "z"))) {
|
|
389
|
+
return c
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
return "/"
|
|
393
|
+
}
|
|
394
|
+
export function getYear(y: number, full?: boolean): string {
|
|
395
|
+
if (full || (y <= 99 && y >= -99)) {
|
|
396
|
+
return y.toString()
|
|
397
|
+
}
|
|
398
|
+
const s = y.toString()
|
|
399
|
+
return s.substring(s.length - 2)
|
|
400
|
+
}
|
|
401
|
+
function getD(n: number, fu: boolean): string {
|
|
402
|
+
return fu ? pad(n) : n.toString()
|
|
403
|
+
}
|
|
404
|
+
export function formatDateTime(date: Date | null | undefined, dateFormat?: string, full?: boolean, upper?: boolean): string {
|
|
405
|
+
if (!date) {
|
|
406
|
+
return ""
|
|
407
|
+
}
|
|
408
|
+
const sd = formatDate(date, dateFormat, full, upper)
|
|
409
|
+
if (sd.length === 0) {
|
|
410
|
+
return sd
|
|
411
|
+
}
|
|
412
|
+
return sd + " " + formatTime(date)
|
|
413
|
+
}
|
|
414
|
+
export function formatLongDateTime(date: Date | null | undefined, dateFormat?: string, full?: boolean, upper?: boolean): string {
|
|
415
|
+
if (!date) {
|
|
416
|
+
return ""
|
|
417
|
+
}
|
|
418
|
+
const sd = formatDate(date, dateFormat, full, upper)
|
|
419
|
+
if (sd.length === 0) {
|
|
420
|
+
return sd
|
|
421
|
+
}
|
|
422
|
+
return sd + " " + formatLongTime(date)
|
|
423
|
+
}
|
|
424
|
+
export function formatFullDateTime(date: Date | null | undefined, dateFormat?: string, s?: string, full?: boolean, upper?: boolean): string {
|
|
425
|
+
if (!date) {
|
|
426
|
+
return ""
|
|
427
|
+
}
|
|
428
|
+
const sd = formatDate(date, dateFormat, full, upper)
|
|
429
|
+
if (sd.length === 0) {
|
|
430
|
+
return sd
|
|
431
|
+
}
|
|
432
|
+
return sd + " " + formatFullTime(date, s)
|
|
433
|
+
}
|
|
434
|
+
export function formatTime(d: Date): string {
|
|
435
|
+
return pad(d.getHours()) + ":" + pad(d.getMinutes())
|
|
436
|
+
}
|
|
437
|
+
export function formatLongTime(d: Date): string {
|
|
438
|
+
return pad(d.getHours()) + ":" + pad(d.getMinutes()) + ":" + pad(d.getSeconds())
|
|
439
|
+
}
|
|
440
|
+
export function formatFullTime(d: Date, s?: string): string {
|
|
441
|
+
const se = s && s.length > 0 ? s : "."
|
|
442
|
+
return formatLongTime(d) + se + pad3(d.getMilliseconds())
|
|
443
|
+
}
|
|
444
|
+
export function dateToString(d: Date, milli?: boolean): string {
|
|
445
|
+
const s = `${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`
|
|
446
|
+
if (milli) {
|
|
447
|
+
return s + pad3(d.getMilliseconds())
|
|
448
|
+
}
|
|
449
|
+
return s
|
|
450
|
+
}
|
|
451
|
+
function pad(n: number): string {
|
|
452
|
+
return n < 10 ? "0" + n : n.toString()
|
|
453
|
+
}
|
|
454
|
+
function pad3(n: number): string {
|
|
455
|
+
if (n >= 100) {
|
|
456
|
+
return n.toString()
|
|
457
|
+
}
|
|
458
|
+
return n < 10 ? "00" + n : "0" + n.toString()
|
|
459
|
+
}
|
|
460
|
+
// tslint:disable-next-line:class-name
|
|
461
|
+
export class formatter {
|
|
462
|
+
static phone = / |\-|\.|\(|\)/g
|
|
463
|
+
static usPhone = /(\d{3})(\d{3})(\d{4})/
|
|
464
|
+
static removePhoneFormat(phone: string): string {
|
|
465
|
+
if (phone) {
|
|
466
|
+
return phone.replace(formatter.phone, "")
|
|
467
|
+
} else {
|
|
468
|
+
return phone
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
static formatPhone(phone?: string | null): string {
|
|
472
|
+
if (!phone) {
|
|
473
|
+
return ""
|
|
474
|
+
}
|
|
475
|
+
// reformat phone number
|
|
476
|
+
// 555 123-4567 or (+1) 555 123-4567
|
|
477
|
+
let s = phone
|
|
478
|
+
const x = formatter.removePhoneFormat(phone)
|
|
479
|
+
if (x.length === 10) {
|
|
480
|
+
const USNumber = x.match(formatter.usPhone)
|
|
481
|
+
if (USNumber != null) {
|
|
482
|
+
s = `${USNumber[1]} ${USNumber[2]}-${USNumber[3]}`
|
|
483
|
+
}
|
|
484
|
+
} else if (x.length <= 3 && x.length > 0) {
|
|
485
|
+
s = x
|
|
486
|
+
} else if (x.length > 3 && x.length < 7) {
|
|
487
|
+
s = `${x.substring(0, 3)} ${x.substring(3, x.length)}`
|
|
488
|
+
} else if (x.length >= 7 && x.length < 10) {
|
|
489
|
+
s = `${x.substring(0, 3)} ${x.substring(3, 6)}-${x.substring(6, x.length)}`
|
|
490
|
+
} else if (x.length >= 11) {
|
|
491
|
+
const l = x.length
|
|
492
|
+
s = `${x.substring(0, l - 7)} ${x.substring(l - 7, l - 4)}-${x.substring(l - 4, l)}`
|
|
493
|
+
// formatedPhone = `(+${phoneNumber.charAt(0)}) ${phoneNumber.substring(0, 3)} ${phoneNumber.substring(3, 6)}-${phoneNumber.substring(6, phoneNumber.length - 1)}`;
|
|
494
|
+
}
|
|
495
|
+
return s
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
export function formatPhone(phone?: string | null): string {
|
|
499
|
+
return formatter.formatPhone(phone)
|
|
500
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compileOnSave": true,
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"target": "es5",
|
|
5
|
+
"baseUrl": "./src",
|
|
6
|
+
"outDir": "./lib",
|
|
7
|
+
"module": "commonjs",
|
|
8
|
+
"moduleResolution": "node",
|
|
9
|
+
"strict": true,
|
|
10
|
+
"pretty": true,
|
|
11
|
+
"sourceMap": false,
|
|
12
|
+
"declaration": false,
|
|
13
|
+
"experimentalDecorators": false,
|
|
14
|
+
"removeComments": true,
|
|
15
|
+
"lib": [
|
|
16
|
+
"es5",
|
|
17
|
+
"es6"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"include": [
|
|
21
|
+
"src/**/*.ts"
|
|
22
|
+
],
|
|
23
|
+
"exclude": [
|
|
24
|
+
"node_modules"
|
|
25
|
+
]
|
|
26
|
+
}
|