|
39 | 39 |
|
40 | 40 | } |
41 | 41 |
|
42 | | - const ObjectId = (rnd = r16 => Math.floor(r16).toString(16)) => |
43 | | - rnd(Date.now() / 1000) + ' '.repeat(16).replace(/./g, () => rnd(Math.random() * 16)); |
| 42 | + /** |
| 43 | + * Generates an ObjectId |
| 44 | + */ |
| 45 | + const ObjectId = (id) => { |
| 46 | + // Define the rnd function |
| 47 | + const rnd = (r16) => Math.floor(r16).toString(16); |
| 48 | + |
| 49 | + if (id === undefined) { |
| 50 | + // If id is undefined, generate a new ObjectId |
| 51 | + return rnd(Date.now() / 1000) + '0'.repeat(16).replace(/./g, () => rnd(Math.random() * 16)); |
| 52 | + } else { |
| 53 | + // Check if the provided id is a valid ObjectId |
| 54 | + const validIdRegex = /^[0-9a-fA-F]{24}$/; |
| 55 | + if (!validIdRegex.test(id)) { |
| 56 | + throw new Error('Invalid ObjectId'); |
| 57 | + } |
| 58 | + return id; // Return the valid ObjectId as a string |
| 59 | + } |
| 60 | + }; |
44 | 61 |
|
45 | 62 | function checkValue(value) { |
46 | 63 | if (/{{\s*([\w\W]+)\s*}}/g.test(value)) |
|
49 | 66 | return true |
50 | 67 | } |
51 | 68 |
|
| 69 | + function isValidDate(value) { |
| 70 | + // Check if the value is a string and can be converted to a Date object |
| 71 | + if (typeof value === 'string' |
| 72 | + && !isNaN(value) |
| 73 | + && !(/^[0-9a-fA-F]{24}$/.test(value)) |
| 74 | + && !(/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?Z|Mon|Tue|Wed|Thu|Fri|Sat|Sun [A-Za-z]{3} \d{2} \d{4} \d{2}:\d{2}:\d{2} [A-Za-z]{3} \+\d{4}|\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}(\.\d{1,3})?|\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(\.\d{1,3})?|\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}(\.\d{1,3})?|Sun|Mon|Tue|Wed|Thu|Fri|Sat),? .+$/.test(value)) |
| 75 | + ) { |
| 76 | + const dateObject = new Date(value); |
| 77 | + |
| 78 | + // Check if the result of the Date constructor is a valid Date object |
| 79 | + if (!isNaN(dateObject) && dateObject.toString() !== 'Invalid Date') { |
| 80 | + return dateObject; // It's a valid Date object |
| 81 | + } |
| 82 | + } |
| 83 | + |
| 84 | + return value; // It's not a valid Date object |
| 85 | + } |
| 86 | + |
52 | 87 | function dotNotationToObject(data, obj = {}) { |
53 | 88 | try { |
54 | 89 | for (const key of Object.keys(data)) { |
55 | | - let value = data[key] |
| 90 | + let value = isValidDate(data[key]) |
56 | 91 | let newObject = obj |
57 | 92 | let oldObject = new Object(obj) |
58 | 93 | let keys = key.split('.'); |
|
602 | 637 | return { |
603 | 638 | ObjectId, |
604 | 639 | checkValue, |
| 640 | + isValidDate, |
605 | 641 | dotNotationToObject, |
606 | 642 | getValueFromObject, |
607 | 643 | isObjectEmpty, |
|
0 commit comments