@autometa/datetime 0.1.2 → 0.1.4
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/.turbo/turbo-build.log +21 -0
- package/.turbo/turbo-clean.log +4 -0
- package/.turbo/turbo-coverage.log +33 -0
- package/.turbo/turbo-lint.log +4 -0
- package/.turbo/turbo-lint:fix.log +4 -0
- package/.turbo/turbo-test.log +18 -0
- package/CHANGELOG.md +15 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +166 -0
- package/coverage/coverage-final.json +7 -0
- package/coverage/dates/date-factory.ts.html +646 -0
- package/coverage/dates/dates.ts.html +310 -0
- package/coverage/dates/formatted-date-factory.ts.html +133 -0
- package/coverage/dates/index.html +176 -0
- package/coverage/dates/iso-date-factory.ts.html +256 -0
- package/coverage/dates/midnight.ts.html +103 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +131 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +196 -0
- package/coverage/time/index.html +116 -0
- package/coverage/time/time.ts.html +208 -0
- package/dist/esm/index.js +6 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
var addSorting = (function() {
|
|
3
|
+
'use strict';
|
|
4
|
+
var cols,
|
|
5
|
+
currentSort = {
|
|
6
|
+
index: 0,
|
|
7
|
+
desc: false
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
// returns the summary table element
|
|
11
|
+
function getTable() {
|
|
12
|
+
return document.querySelector('.coverage-summary');
|
|
13
|
+
}
|
|
14
|
+
// returns the thead element of the summary table
|
|
15
|
+
function getTableHeader() {
|
|
16
|
+
return getTable().querySelector('thead tr');
|
|
17
|
+
}
|
|
18
|
+
// returns the tbody element of the summary table
|
|
19
|
+
function getTableBody() {
|
|
20
|
+
return getTable().querySelector('tbody');
|
|
21
|
+
}
|
|
22
|
+
// returns the th element for nth column
|
|
23
|
+
function getNthColumn(n) {
|
|
24
|
+
return getTableHeader().querySelectorAll('th')[n];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function onFilterInput() {
|
|
28
|
+
const searchValue = document.getElementById('fileSearch').value;
|
|
29
|
+
const rows = document.getElementsByTagName('tbody')[0].children;
|
|
30
|
+
for (let i = 0; i < rows.length; i++) {
|
|
31
|
+
const row = rows[i];
|
|
32
|
+
if (
|
|
33
|
+
row.textContent
|
|
34
|
+
.toLowerCase()
|
|
35
|
+
.includes(searchValue.toLowerCase())
|
|
36
|
+
) {
|
|
37
|
+
row.style.display = '';
|
|
38
|
+
} else {
|
|
39
|
+
row.style.display = 'none';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// loads the search box
|
|
45
|
+
function addSearchBox() {
|
|
46
|
+
var template = document.getElementById('filterTemplate');
|
|
47
|
+
var templateClone = template.content.cloneNode(true);
|
|
48
|
+
templateClone.getElementById('fileSearch').oninput = onFilterInput;
|
|
49
|
+
template.parentElement.appendChild(templateClone);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// loads all columns
|
|
53
|
+
function loadColumns() {
|
|
54
|
+
var colNodes = getTableHeader().querySelectorAll('th'),
|
|
55
|
+
colNode,
|
|
56
|
+
cols = [],
|
|
57
|
+
col,
|
|
58
|
+
i;
|
|
59
|
+
|
|
60
|
+
for (i = 0; i < colNodes.length; i += 1) {
|
|
61
|
+
colNode = colNodes[i];
|
|
62
|
+
col = {
|
|
63
|
+
key: colNode.getAttribute('data-col'),
|
|
64
|
+
sortable: !colNode.getAttribute('data-nosort'),
|
|
65
|
+
type: colNode.getAttribute('data-type') || 'string'
|
|
66
|
+
};
|
|
67
|
+
cols.push(col);
|
|
68
|
+
if (col.sortable) {
|
|
69
|
+
col.defaultDescSort = col.type === 'number';
|
|
70
|
+
colNode.innerHTML =
|
|
71
|
+
colNode.innerHTML + '<span class="sorter"></span>';
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return cols;
|
|
75
|
+
}
|
|
76
|
+
// attaches a data attribute to every tr element with an object
|
|
77
|
+
// of data values keyed by column name
|
|
78
|
+
function loadRowData(tableRow) {
|
|
79
|
+
var tableCols = tableRow.querySelectorAll('td'),
|
|
80
|
+
colNode,
|
|
81
|
+
col,
|
|
82
|
+
data = {},
|
|
83
|
+
i,
|
|
84
|
+
val;
|
|
85
|
+
for (i = 0; i < tableCols.length; i += 1) {
|
|
86
|
+
colNode = tableCols[i];
|
|
87
|
+
col = cols[i];
|
|
88
|
+
val = colNode.getAttribute('data-value');
|
|
89
|
+
if (col.type === 'number') {
|
|
90
|
+
val = Number(val);
|
|
91
|
+
}
|
|
92
|
+
data[col.key] = val;
|
|
93
|
+
}
|
|
94
|
+
return data;
|
|
95
|
+
}
|
|
96
|
+
// loads all row data
|
|
97
|
+
function loadData() {
|
|
98
|
+
var rows = getTableBody().querySelectorAll('tr'),
|
|
99
|
+
i;
|
|
100
|
+
|
|
101
|
+
for (i = 0; i < rows.length; i += 1) {
|
|
102
|
+
rows[i].data = loadRowData(rows[i]);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// sorts the table using the data for the ith column
|
|
106
|
+
function sortByIndex(index, desc) {
|
|
107
|
+
var key = cols[index].key,
|
|
108
|
+
sorter = function(a, b) {
|
|
109
|
+
a = a.data[key];
|
|
110
|
+
b = b.data[key];
|
|
111
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
112
|
+
},
|
|
113
|
+
finalSorter = sorter,
|
|
114
|
+
tableBody = document.querySelector('.coverage-summary tbody'),
|
|
115
|
+
rowNodes = tableBody.querySelectorAll('tr'),
|
|
116
|
+
rows = [],
|
|
117
|
+
i;
|
|
118
|
+
|
|
119
|
+
if (desc) {
|
|
120
|
+
finalSorter = function(a, b) {
|
|
121
|
+
return -1 * sorter(a, b);
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
for (i = 0; i < rowNodes.length; i += 1) {
|
|
126
|
+
rows.push(rowNodes[i]);
|
|
127
|
+
tableBody.removeChild(rowNodes[i]);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
rows.sort(finalSorter);
|
|
131
|
+
|
|
132
|
+
for (i = 0; i < rows.length; i += 1) {
|
|
133
|
+
tableBody.appendChild(rows[i]);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// removes sort indicators for current column being sorted
|
|
137
|
+
function removeSortIndicators() {
|
|
138
|
+
var col = getNthColumn(currentSort.index),
|
|
139
|
+
cls = col.className;
|
|
140
|
+
|
|
141
|
+
cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
|
|
142
|
+
col.className = cls;
|
|
143
|
+
}
|
|
144
|
+
// adds sort indicators for current column being sorted
|
|
145
|
+
function addSortIndicators() {
|
|
146
|
+
getNthColumn(currentSort.index).className += currentSort.desc
|
|
147
|
+
? ' sorted-desc'
|
|
148
|
+
: ' sorted';
|
|
149
|
+
}
|
|
150
|
+
// adds event listeners for all sorter widgets
|
|
151
|
+
function enableUI() {
|
|
152
|
+
var i,
|
|
153
|
+
el,
|
|
154
|
+
ithSorter = function ithSorter(i) {
|
|
155
|
+
var col = cols[i];
|
|
156
|
+
|
|
157
|
+
return function() {
|
|
158
|
+
var desc = col.defaultDescSort;
|
|
159
|
+
|
|
160
|
+
if (currentSort.index === i) {
|
|
161
|
+
desc = !currentSort.desc;
|
|
162
|
+
}
|
|
163
|
+
sortByIndex(i, desc);
|
|
164
|
+
removeSortIndicators();
|
|
165
|
+
currentSort.index = i;
|
|
166
|
+
currentSort.desc = desc;
|
|
167
|
+
addSortIndicators();
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
for (i = 0; i < cols.length; i += 1) {
|
|
171
|
+
if (cols[i].sortable) {
|
|
172
|
+
// add the click event handler on the th so users
|
|
173
|
+
// dont have to click on those tiny arrows
|
|
174
|
+
el = getNthColumn(i).querySelector('.sorter').parentElement;
|
|
175
|
+
if (el.addEventListener) {
|
|
176
|
+
el.addEventListener('click', ithSorter(i));
|
|
177
|
+
} else {
|
|
178
|
+
el.attachEvent('onclick', ithSorter(i));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// adds sorting functionality to the UI
|
|
184
|
+
return function() {
|
|
185
|
+
if (!getTable()) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
cols = loadColumns();
|
|
189
|
+
loadData();
|
|
190
|
+
addSearchBox();
|
|
191
|
+
addSortIndicators();
|
|
192
|
+
enableUI();
|
|
193
|
+
};
|
|
194
|
+
})();
|
|
195
|
+
|
|
196
|
+
window.addEventListener('load', addSorting);
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for time</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../index.html">All files</a> time</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">78.57% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>11/14</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">100% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>0/0</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">87.5% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>7/8</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">78.57% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>11/14</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input oninput="onInput()" type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line medium'></div>
|
|
65
|
+
<div class="pad1">
|
|
66
|
+
<table class="coverage-summary">
|
|
67
|
+
<thead>
|
|
68
|
+
<tr>
|
|
69
|
+
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
|
|
70
|
+
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
|
|
71
|
+
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
|
|
72
|
+
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
73
|
+
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
|
|
74
|
+
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
75
|
+
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
|
|
76
|
+
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
77
|
+
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
|
|
78
|
+
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
79
|
+
</tr>
|
|
80
|
+
</thead>
|
|
81
|
+
<tbody><tr>
|
|
82
|
+
<td class="file medium" data-value="time.ts"><a href="time.ts.html">time.ts</a></td>
|
|
83
|
+
<td data-value="78.57" class="pic medium">
|
|
84
|
+
<div class="chart"><div class="cover-fill" style="width: 78%"></div><div class="cover-empty" style="width: 22%"></div></div>
|
|
85
|
+
</td>
|
|
86
|
+
<td data-value="78.57" class="pct medium">78.57%</td>
|
|
87
|
+
<td data-value="14" class="abs medium">11/14</td>
|
|
88
|
+
<td data-value="100" class="pct high">100%</td>
|
|
89
|
+
<td data-value="0" class="abs high">0/0</td>
|
|
90
|
+
<td data-value="87.5" class="pct high">87.5%</td>
|
|
91
|
+
<td data-value="8" class="abs high">7/8</td>
|
|
92
|
+
<td data-value="78.57" class="pct medium">78.57%</td>
|
|
93
|
+
<td data-value="14" class="abs medium">11/14</td>
|
|
94
|
+
</tr>
|
|
95
|
+
|
|
96
|
+
</tbody>
|
|
97
|
+
</table>
|
|
98
|
+
</div>
|
|
99
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
100
|
+
</div><!-- /wrapper -->
|
|
101
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
|
+
Code coverage generated by
|
|
103
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
+
at 2023-09-21T15:39:03.633Z
|
|
105
|
+
</div>
|
|
106
|
+
<script src="../prettify.js"></script>
|
|
107
|
+
<script>
|
|
108
|
+
window.onload = function () {
|
|
109
|
+
prettyPrint();
|
|
110
|
+
};
|
|
111
|
+
</script>
|
|
112
|
+
<script src="../sorter.js"></script>
|
|
113
|
+
<script src="../block-navigation.js"></script>
|
|
114
|
+
</body>
|
|
115
|
+
</html>
|
|
116
|
+
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for time/time.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../index.html">All files</a> / <a href="index.html">time</a> time.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">78.57% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>11/14</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">100% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>0/0</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">87.5% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>7/8</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">78.57% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>11/14</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input oninput="onInput()" type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line medium'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
108
|
+
<span class="cline-any cline-neutral"> </span>
|
|
109
|
+
<span class="cline-any cline-neutral"> </span>
|
|
110
|
+
<span class="cline-any cline-neutral"> </span>
|
|
111
|
+
<span class="cline-any cline-neutral"> </span>
|
|
112
|
+
<span class="cline-any cline-neutral"> </span>
|
|
113
|
+
<span class="cline-any cline-yes">1x</span>
|
|
114
|
+
<span class="cline-any cline-neutral"> </span>
|
|
115
|
+
<span class="cline-any cline-neutral"> </span>
|
|
116
|
+
<span class="cline-any cline-yes">1x</span>
|
|
117
|
+
<span class="cline-any cline-neutral"> </span>
|
|
118
|
+
<span class="cline-any cline-neutral"> </span>
|
|
119
|
+
<span class="cline-any cline-yes">6x</span>
|
|
120
|
+
<span class="cline-any cline-yes">6x</span>
|
|
121
|
+
<span class="cline-any cline-yes">6x</span>
|
|
122
|
+
<span class="cline-any cline-neutral"> </span>
|
|
123
|
+
<span class="cline-any cline-neutral"> </span>
|
|
124
|
+
<span class="cline-any cline-yes">1x</span>
|
|
125
|
+
<span class="cline-any cline-neutral"> </span>
|
|
126
|
+
<span class="cline-any cline-neutral"> </span>
|
|
127
|
+
<span class="cline-any cline-yes">1x</span>
|
|
128
|
+
<span class="cline-any cline-neutral"> </span>
|
|
129
|
+
<span class="cline-any cline-neutral"> </span>
|
|
130
|
+
<span class="cline-any cline-yes">1x</span>
|
|
131
|
+
<span class="cline-any cline-neutral"> </span>
|
|
132
|
+
<span class="cline-any cline-neutral"> </span>
|
|
133
|
+
<span class="cline-any cline-neutral"> </span>
|
|
134
|
+
<span class="cline-any cline-neutral"> </span>
|
|
135
|
+
<span class="cline-any cline-yes">1x</span>
|
|
136
|
+
<span class="cline-any cline-neutral"> </span>
|
|
137
|
+
<span class="cline-any cline-yes">6x</span>
|
|
138
|
+
<span class="cline-any cline-neutral"> </span>
|
|
139
|
+
<span class="cline-any cline-neutral"> </span>
|
|
140
|
+
<span class="cline-any cline-neutral"> </span>
|
|
141
|
+
<span class="cline-any cline-no"> </span>
|
|
142
|
+
<span class="cline-any cline-no"> </span>
|
|
143
|
+
<span class="cline-any cline-no"> </span>
|
|
144
|
+
<span class="cline-any cline-neutral"> </span>
|
|
145
|
+
<span class="cline-any cline-neutral"> </span>
|
|
146
|
+
<span class="cline-any cline-neutral"> </span>
|
|
147
|
+
<span class="cline-any cline-yes">1x</span>
|
|
148
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { AssertKey } from "@autometa/asserters";
|
|
149
|
+
import { camel, convertPhrase } from "@autometa/phrases";
|
|
150
|
+
type TimeDiffFn = (date1: Date, date2: Date) => number;
|
|
151
|
+
|
|
152
|
+
export class TimeDiff {
|
|
153
|
+
minutes(date1: Date, date2: Date) {
|
|
154
|
+
return this.millis(date1, date2) / 60000;
|
|
155
|
+
}
|
|
156
|
+
seconds(date1: Date, date2: Date) {
|
|
157
|
+
return this.millis(date1, date2) / 1000;
|
|
158
|
+
}
|
|
159
|
+
millis(date1: Date, date2: Date) {
|
|
160
|
+
const d1 = new Date(date1).getTime();
|
|
161
|
+
const d2 = new Date(date2).getTime();
|
|
162
|
+
return Math.abs(Math.round(d2 - d1));
|
|
163
|
+
}
|
|
164
|
+
days(date1: Date, date2: Date) {
|
|
165
|
+
return this.millis(date1, date2) / 86400000;
|
|
166
|
+
}
|
|
167
|
+
hours(date1: Date, date2: Date) {
|
|
168
|
+
return this.millis(date1, date2) / 3600000;
|
|
169
|
+
}
|
|
170
|
+
weeks(date1: Date, date2: Date) {
|
|
171
|
+
return this.millis(date1, date2) / 604800000;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export class TimeObject {
|
|
176
|
+
#diff = new TimeDiff();
|
|
177
|
+
get diff() {
|
|
178
|
+
return this.#diff;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
<span class="fstat-no" title="function not covered" > fromPhrase(p</span>hrase: string): TimeDiffFn {
|
|
182
|
+
const propertyKey = <span class="cstat-no" title="statement not covered" >convertPhrase(phrase, camel);</span>
|
|
183
|
+
<span class="cstat-no" title="statement not covered" > AssertKey(this.diff, propertyKey);</span>
|
|
184
|
+
<span class="cstat-no" title="statement not covered" > return Time.diff[propertyKey];</span>
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export const Time = new TimeObject();
|
|
189
|
+
</pre></td></tr></table></pre>
|
|
190
|
+
|
|
191
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
192
|
+
</div><!-- /wrapper -->
|
|
193
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
194
|
+
Code coverage generated by
|
|
195
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
196
|
+
at 2023-09-21T15:39:03.633Z
|
|
197
|
+
</div>
|
|
198
|
+
<script src="../prettify.js"></script>
|
|
199
|
+
<script>
|
|
200
|
+
window.onload = function () {
|
|
201
|
+
prettyPrint();
|
|
202
|
+
};
|
|
203
|
+
</script>
|
|
204
|
+
<script src="../sorter.js"></script>
|
|
205
|
+
<script src="../block-navigation.js"></script>
|
|
206
|
+
</body>
|
|
207
|
+
</html>
|
|
208
|
+
|
package/dist/esm/index.js
CHANGED
|
@@ -347,7 +347,7 @@ var Dates = new DatesObject();
|
|
|
347
347
|
|
|
348
348
|
// src/time/time.ts
|
|
349
349
|
import { AssertKey } from "@autometa/asserters";
|
|
350
|
-
import {
|
|
350
|
+
import { convertPhrase as convertPhrase2, lower } from "@autometa/phrases";
|
|
351
351
|
var TimeDiff = class {
|
|
352
352
|
minutes(date1, date2) {
|
|
353
353
|
return this.millis(date1, date2) / 6e4;
|
|
@@ -369,6 +369,11 @@ var TimeDiff = class {
|
|
|
369
369
|
weeks(date1, date2) {
|
|
370
370
|
return this.millis(date1, date2) / 6048e5;
|
|
371
371
|
}
|
|
372
|
+
fromPhrase(phrase) {
|
|
373
|
+
const propertyKey = convertPhrase2(phrase, lower);
|
|
374
|
+
AssertKey(this, propertyKey);
|
|
375
|
+
return this[propertyKey].bind(this);
|
|
376
|
+
}
|
|
372
377
|
};
|
|
373
378
|
var _diff;
|
|
374
379
|
var TimeObject = class {
|
|
@@ -378,11 +383,6 @@ var TimeObject = class {
|
|
|
378
383
|
get diff() {
|
|
379
384
|
return __privateGet(this, _diff);
|
|
380
385
|
}
|
|
381
|
-
fromPhrase(phrase) {
|
|
382
|
-
const propertyKey = convertPhrase2(phrase, camel2);
|
|
383
|
-
AssertKey(this.diff, propertyKey);
|
|
384
|
-
return Time.diff[propertyKey];
|
|
385
|
-
}
|
|
386
386
|
};
|
|
387
387
|
_diff = new WeakMap();
|
|
388
388
|
var Time = new TimeObject();
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/dates/date-factory.ts","../../src/dates/midnight.ts","../../src/dates/iso-date-factory.ts","../../src/dates/formatted-date-factory.ts","../../src/dates/dates.ts","../../src/time/time.ts"],"sourcesContent":["import { TimeUnit, camel, convertPhrase, collapse } from \"@autometa/phrases\";\nimport { midnight } from \"./midnight\";\nimport { AutomationError, raise } from \"@autometa/errors\";\nimport { ConfirmDefined, ConfirmLengthAtLeast } from \"@autometa/asserters\";\n\ntype TimeShortcut =\n | \"now\"\n | \"beforeYesterday\"\n | \"yesterday\"\n | \"today\"\n | \"tomorrow\"\n | \"afterTomorrow\"\n | \"midnight\"\n | \"lastWeek\"\n | \"nextWeek\"\n | \"lastFortnight\"\n | \"nextFortnight\";\n\nfunction isTimeShortcut(text: string): text is TimeShortcut {\n const includes = [\n \"now\",\n \"beforeYesterday\",\n \"yesterday\",\n \"today\",\n \"tomorrow\",\n \"afterTomorrow\",\n \"midnight\",\n \"lastWeek\",\n \"nextWeek\",\n \"lastFortnight\",\n \"nextFortnight\"\n ].includes(text);\n if (!includes) {\n return false\n }\n return true\n}\nexport class DateFactory {\n phraseMap = new Map<TimeShortcut, () => Date>([\n [\"now\", () => this.make(0, \"days\")],\n [\"beforeYesterday\", () => this.make(-2, \"days\")],\n [\"yesterday\", () => this.make(-1, \"days\")],\n [\"today\", () => this.make(0, \"days\")],\n [\"tomorrow\", () => this.make(1, \"days\")],\n [\"afterTomorrow\", () => this.make(2, \"days\")],\n [\"nextWeek\", () => this.make(7, \"days\")],\n [\"lastWeek\", () => this.make(-7, \"days\")],\n [\"nextFortnight\", () => this.make(14, \"days\")],\n [\"lastFortnight\", () => this.make(-14, \"days\")],\n [\"midnight\", midnight]\n ]);\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n find(name: TimeShortcut): Date {\n const result = this.phraseMap.get(name);\n if (result) {\n return result();\n }\n raise(\n `Could not find date shortcut ${name}. Please use a valid date shortcut from the following list: ${Array.from(\n this.phraseMap.keys()\n ).join(\", \")}`\n );\n }\n\n fromPhraseSafe(phrase: string) {\n const name = convertPhrase(phrase, camel);\n if (isTimeShortcut(name)) {\n if (this.phraseMap.has(name)) {\n return this.phraseMap.get(name)?.call(this);\n }\n }\n\n const matchDay = this.#extractTimeFromPhrase(phrase);\n if (matchDay) {\n return matchDay;\n }\n const parsed = new Date(phrase);\n if (isNaN(parsed.getTime())) {\n return new Date(Date.parse(phrase));\n }\n return parsed;\n }\n fromPhrase(phrase: string) {\n const result = this.fromPhraseSafe(phrase);\n if (result) {\n return result;\n }\n raise(\n `Could not parse date from phrase ${phrase}. Please use a valid date string or a phrase from the following list: ${Array.from(\n this.phraseMap.keys()\n ).join(\", \")}`\n );\n }\n make(timeOffset: number, timeunit: TimeUnit) {\n const unit = timeunit.endsWith(\"s\") ? timeunit : `${timeunit}s`;\n switch (unit) {\n case \"years\":\n return this.#addYears(timeOffset);\n case \"months\":\n return this.#addMonths(timeOffset);\n case \"weeks\":\n return this.#addWeeks(timeOffset);\n case \"days\":\n return this.#addDays(timeOffset);\n case \"seconds\":\n return this.#addSeconds(timeOffset);\n case \"milliseconds\":\n return this.#addMilliseconds(timeOffset);\n case \"hours\":\n return this.#addHours(timeOffset);\n case \"minutes\":\n return this.#addMinutes(timeOffset);\n default:\n throw new AutomationError(\n `Invalid timeunit ${timeunit}, options are 'days', 'seconds', 'milliseconds', 'hours', 'minutes'. Non plural equivalents such as 'day' or 'week' are also accepted.`\n );\n }\n }\n #extractTimeFromPhrase(phrase: string) {\n return (\n this.#extractFutureFromPhrase(phrase) ??\n this.#extractPastFromPhrase(phrase)\n );\n }\n #extractFutureFromPhrase(phrase: string) {\n const pastPattern = /(\\d+) (.*)s? from now?/;\n const pastMatch = pastPattern.exec(phrase);\n\n if (ConfirmDefined(pastMatch) && ConfirmLengthAtLeast(pastMatch, 3)) {\n const [_, value, unit] = pastMatch;\n const timeunit = convertPhrase(unit, collapse) as TimeUnit;\n return this.make(Number(value), timeunit);\n }\n }\n #extractPastFromPhrase(phrase: string) {\n const pastPattern = /(\\d+) (.*)(s)? ago?/gm;\n const pastMatch = pastPattern.exec(phrase);\n if (ConfirmDefined(pastMatch) && ConfirmLengthAtLeast(pastMatch, 3)) {\n const [_, value, unit] = pastMatch;\n const timeunit = convertPhrase(unit, camel) as TimeUnit;\n return this.make(-Number(value), timeunit);\n }\n }\n #addYears(yearsOffset: number) {\n const date = new Date();\n date.setFullYear(date.getFullYear() + yearsOffset);\n return date;\n }\n #addMonths(monthOffset: number) {\n const date = new Date();\n date.setMonth(date.getMonth() + monthOffset);\n return date;\n }\n #addWeeks(weekOffset: number) {\n const date = new Date();\n date.setMonth(date.getMonth() + weekOffset / 4);\n return date;\n }\n #addDays(daysOffset: number) {\n const date = new Date();\n date.setDate(date.getDate() + daysOffset);\n return date;\n }\n\n #addSeconds(secondsOffset: number) {\n const date = new Date();\n date.setSeconds(date.getSeconds() + secondsOffset);\n return date;\n }\n\n #addMilliseconds(millisecondsOffset: number) {\n const date = new Date();\n date.setMilliseconds(date.getMilliseconds() + millisecondsOffset);\n return date;\n }\n #addHours(hoursOffset: number) {\n const date = new Date();\n date.setHours(date.getHours() + hoursOffset);\n return date;\n }\n #addMinutes(minutesOffset: number) {\n const date = new Date();\n date.setMinutes(date.getMinutes() + minutesOffset);\n return date;\n }\n}\n","\nexport function midnight() {\n const date = new Date();\n date.setHours(0, 0, 0, 0);\n return date;\n}\n","import { TimeUnit } from '@autometa/phrases';\nimport { midnight } from './midnight';\nimport { DateFactory } from './date-factory';\n\n\nexport class IsoDateFactory {\n constructor(readonly dateFactory: DateFactory) { }\n phraseMap = new Map<string, string>([\n ['beforeYesterday', this.make(-2, 'days')],\n ['yesterday', this.make(-1, 'days')],\n ['today', this.make(0, 'days')],\n ['tomorrow', this.make(1, 'days')],\n ['afterTomorrow', this.make(2, 'days')],\n ['nextWeek', this.make(7, 'days')],\n ['lastWeek', this.make(-7, 'days')],\n ['nextFortnight', this.make(14, 'days')],\n ['lastFortnight', this.make(-14, 'days')],\n ['midnight', midnight().toISOString()],\n ]);\n make(daysOffset: number, timeunit: TimeUnit) {\n return this.dateFactory.make(daysOffset, timeunit).toISOString();\n }\n fromPhrase(phrase: string) {\n return this.dateFactory.fromPhrase(phrase)?.toISOString();\n }\n\n get beforeYesterday() {\n return this.phraseMap.get('beforeYesterday');\n }\n get yesterday() {\n return this.phraseMap.get('yesterday');\n }\n get today() {\n return this.phraseMap.get('today');\n }\n get tomorrow() {\n return this.phraseMap.get('tomorrow');\n }\n get afterTomorrow() {\n return this.phraseMap.get('afterTomorrow');\n }\n get midnight() {\n return this.phraseMap.get('midnight');\n }\n get lastWeek() {\n return this.phraseMap.get('lastWeek');\n }\n get nextWeek() {\n return this.phraseMap.get('nextWeek');\n }\n get lastFortnight() {\n return this.phraseMap.get('lastFortnight');\n }\n get nextFortnight() {\n return this.phraseMap.get('nextFortnight');\n }\n}\n","import { TimeUnit } from '@autometa/phrases';\nimport { DateFactory } from './date-factory';\n\n\nexport class FmtDateFactory {\n constructor(readonly dateFactory: DateFactory) { }\n make(daysOffset: number, timeunit: TimeUnit) {\n return this.dateFactory\n .make(daysOffset, timeunit)\n .toISOString()\n .split('T')[0];\n }\n fromPhrase(phrase: string) {\n return this.dateFactory.fromPhrase(phrase)?.toISOString().split('T')[0];\n }\n}\n","import { DateFactory } from \"./date-factory\";\nimport { IsoDateFactory } from \"./iso-date-factory\";\nimport { FmtDateFactory } from \"./formatted-date-factory\";\nimport { TimeUnit } from \"@autometa/phrases\";\n\nexport class DatesObject {\n #factory: DateFactory = new DateFactory();\n #iso = new IsoDateFactory(this.#factory);\n #fmt = new FmtDateFactory(this.#factory);\n get iso() {\n return this.#iso;\n }\n\n get fmt() {\n return this.#fmt;\n }\n\n get now() {\n return this.#factory.find(\"now\");\n }\n\n get beforeYesterday(): Date {\n return this.#factory.find(\"beforeYesterday\");\n }\n\n get yesterday(): Date {\n return this.#factory.find(\"yesterday\");\n }\n\n get today(): Date {\n return this.#factory.find(\"today\");\n }\n\n get tomorrow(): Date {\n return this.#factory.find(\"tomorrow\");\n }\n\n get afterTomorrow(): Date {\n return this.#factory.find(\"afterTomorrow\");\n }\n\n get midnight(): Date {\n return this.#factory.find(\"midnight\");\n }\n\n get lastWeek(): Date {\n return this.#factory.find(\"lastWeek\");\n }\n\n get nextWeek(): Date {\n return this.#factory.find(\"nextWeek\");\n }\n\n get lastFortnight(): Date {\n return this.#factory.find(\"lastFortnight\");\n }\n\n get nextFortnight(): Date {\n return this.#factory.find(\"nextFortnight\");\n }\n\n fromPhrase(phrase: string) {\n return this.#factory.fromPhrase(phrase);\n }\n\n fromPhraseSafe(phrase: string) {\n return this.#factory.fromPhraseSafe(phrase);\n }\n\n make(timeOffset: number, timeUnit: TimeUnit) {\n return this.#factory.make(timeOffset, timeUnit);\n }\n}\n\nexport const Dates = new DatesObject();\n","import { AssertKey } from \"@autometa/asserters\";\nimport { camel, convertPhrase } from \"@autometa/phrases\";\ntype TimeDiffFn = (date1: Date, date2: Date) => number;\n\nexport class TimeDiff {\n minutes(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 60000;\n }\n seconds(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 1000;\n }\n millis(date1: Date, date2: Date) {\n const d1 = new Date(date1).getTime();\n const d2 = new Date(date2).getTime();\n return Math.abs(Math.round(d2 - d1));\n }\n days(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 86400000;\n }\n hours(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 3600000;\n }\n weeks(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 604800000;\n }\n}\n\nexport class TimeObject {\n #diff = new TimeDiff();\n get diff() {\n return this.#diff;\n }\n\n fromPhrase(phrase: string): TimeDiffFn {\n const propertyKey = convertPhrase(phrase, camel);\n AssertKey(this.diff, propertyKey);\n return Time.diff[propertyKey];\n }\n}\n\nexport const Time = new TimeObject();\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,SAAmB,OAAO,eAAe,gBAAgB;;;ACClD,SAAS,WAAW;AACzB,QAAM,OAAO,oBAAI,KAAK;AACtB,OAAK,SAAS,GAAG,GAAG,GAAG,CAAC;AACxB,SAAO;AACT;;;ADHA,SAAS,iBAAiB,aAAa;AACvC,SAAS,gBAAgB,4BAA4B;AAerD,SAAS,eAAe,MAAoC;AAC1D,QAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,SAAS,IAAI;AACf,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AACA,SAAO;AACT;AApCA;AAqCO,IAAM,cAAN,MAAkB;AAAA,EAAlB;AAkFL;AAMA;AAUA;AASA;AAKA;AAKA;AAKA;AAMA;AAMA;AAKA;AAKA;AA/IA,qBAAY,oBAAI,IAA8B;AAAA,MAC5C,CAAC,OAAO,MAAM,KAAK,KAAK,GAAG,MAAM,CAAC;AAAA,MAClC,CAAC,mBAAmB,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC;AAAA,MAC/C,CAAC,aAAa,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC;AAAA,MACzC,CAAC,SAAS,MAAM,KAAK,KAAK,GAAG,MAAM,CAAC;AAAA,MACpC,CAAC,YAAY,MAAM,KAAK,KAAK,GAAG,MAAM,CAAC;AAAA,MACvC,CAAC,iBAAiB,MAAM,KAAK,KAAK,GAAG,MAAM,CAAC;AAAA,MAC5C,CAAC,YAAY,MAAM,KAAK,KAAK,GAAG,MAAM,CAAC;AAAA,MACvC,CAAC,YAAY,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC;AAAA,MACxC,CAAC,iBAAiB,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC;AAAA,MAC7C,CAAC,iBAAiB,MAAM,KAAK,KAAK,KAAK,MAAM,CAAC;AAAA,MAC9C,CAAC,YAAY,QAAQ;AAAA,IACvB,CAAC;AAAA;AAAA;AAAA,EAGD,KAAK,MAA0B;AAC7B,UAAM,SAAS,KAAK,UAAU,IAAI,IAAI;AACtC,QAAI,QAAQ;AACV,aAAO,OAAO;AAAA,IAChB;AACA;AAAA,MACE,gCAAgC,IAAI,+DAA+D,MAAM;AAAA,QACvG,KAAK,UAAU,KAAK;AAAA,MACtB,EAAE,KAAK,IAAI,CAAC;AAAA,IACd;AAAA,EACF;AAAA,EAEA,eAAe,QAAgB;AAC7B,UAAM,OAAO,cAAc,QAAQ,KAAK;AACxC,QAAI,eAAe,IAAI,GAAG;AACxB,UAAI,KAAK,UAAU,IAAI,IAAI,GAAG;AAC5B,eAAO,KAAK,UAAU,IAAI,IAAI,GAAG,KAAK,IAAI;AAAA,MAC5C;AAAA,IACF;AAEA,UAAM,WAAW,sBAAK,kDAAL,WAA4B;AAC7C,QAAI,UAAU;AACZ,aAAO;AAAA,IACT;AACA,UAAM,SAAS,IAAI,KAAK,MAAM;AAC9B,QAAI,MAAM,OAAO,QAAQ,CAAC,GAAG;AAC3B,aAAO,IAAI,KAAK,KAAK,MAAM,MAAM,CAAC;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAAA,EACA,WAAW,QAAgB;AACzB,UAAM,SAAS,KAAK,eAAe,MAAM;AACzC,QAAI,QAAQ;AACV,aAAO;AAAA,IACT;AACA;AAAA,MACE,oCAAoC,MAAM,yEAAyE,MAAM;AAAA,QACvH,KAAK,UAAU,KAAK;AAAA,MACtB,EAAE,KAAK,IAAI,CAAC;AAAA,IACd;AAAA,EACF;AAAA,EACA,KAAK,YAAoB,UAAoB;AAC3C,UAAM,OAAO,SAAS,SAAS,GAAG,IAAI,WAAW,GAAG,QAAQ;AAC5D,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,eAAO,sBAAK,wBAAL,WAAe;AAAA,MACxB,KAAK;AACH,eAAO,sBAAK,0BAAL,WAAgB;AAAA,MACzB,KAAK;AACH,eAAO,sBAAK,wBAAL,WAAe;AAAA,MACxB,KAAK;AACH,eAAO,sBAAK,sBAAL,WAAc;AAAA,MACvB,KAAK;AACH,eAAO,sBAAK,4BAAL,WAAiB;AAAA,MAC1B,KAAK;AACH,eAAO,sBAAK,sCAAL,WAAsB;AAAA,MAC/B,KAAK;AACH,eAAO,sBAAK,wBAAL,WAAe;AAAA,MACxB,KAAK;AACH,eAAO,sBAAK,4BAAL,WAAiB;AAAA,MAC1B;AACE,cAAM,IAAI;AAAA,UACR,oBAAoB,QAAQ;AAAA,QAC9B;AAAA,IACJ;AAAA,EACF;AAoEF;AAnEE;AAAA,2BAAsB,SAAC,QAAgB;AACrC,SACE,sBAAK,sDAAL,WAA8B,WAC9B,sBAAK,kDAAL,WAA4B;AAEhC;AACA;AAAA,6BAAwB,SAAC,QAAgB;AACvC,QAAM,cAAc;AACpB,QAAM,YAAY,YAAY,KAAK,MAAM;AAEzC,MAAI,eAAe,SAAS,KAAK,qBAAqB,WAAW,CAAC,GAAG;AACnE,UAAM,CAAC,GAAG,OAAO,IAAI,IAAI;AACzB,UAAM,WAAW,cAAc,MAAM,QAAQ;AAC7C,WAAO,KAAK,KAAK,OAAO,KAAK,GAAG,QAAQ;AAAA,EAC1C;AACF;AACA;AAAA,2BAAsB,SAAC,QAAgB;AACrC,QAAM,cAAc;AACpB,QAAM,YAAY,YAAY,KAAK,MAAM;AACzC,MAAI,eAAe,SAAS,KAAK,qBAAqB,WAAW,CAAC,GAAG;AACnE,UAAM,CAAC,GAAG,OAAO,IAAI,IAAI;AACzB,UAAM,WAAW,cAAc,MAAM,KAAK;AAC1C,WAAO,KAAK,KAAK,CAAC,OAAO,KAAK,GAAG,QAAQ;AAAA,EAC3C;AACF;AACA;AAAA,cAAS,SAAC,aAAqB;AAC7B,QAAM,OAAO,oBAAI,KAAK;AACtB,OAAK,YAAY,KAAK,YAAY,IAAI,WAAW;AACjD,SAAO;AACT;AACA;AAAA,eAAU,SAAC,aAAqB;AAC9B,QAAM,OAAO,oBAAI,KAAK;AACtB,OAAK,SAAS,KAAK,SAAS,IAAI,WAAW;AAC3C,SAAO;AACT;AACA;AAAA,cAAS,SAAC,YAAoB;AAC5B,QAAM,OAAO,oBAAI,KAAK;AACtB,OAAK,SAAS,KAAK,SAAS,IAAI,aAAa,CAAC;AAC9C,SAAO;AACT;AACA;AAAA,aAAQ,SAAC,YAAoB;AAC3B,QAAM,OAAO,oBAAI,KAAK;AACtB,OAAK,QAAQ,KAAK,QAAQ,IAAI,UAAU;AACxC,SAAO;AACT;AAEA;AAAA,gBAAW,SAAC,eAAuB;AACjC,QAAM,OAAO,oBAAI,KAAK;AACtB,OAAK,WAAW,KAAK,WAAW,IAAI,aAAa;AACjD,SAAO;AACT;AAEA;AAAA,qBAAgB,SAAC,oBAA4B;AAC3C,QAAM,OAAO,oBAAI,KAAK;AACtB,OAAK,gBAAgB,KAAK,gBAAgB,IAAI,kBAAkB;AAChE,SAAO;AACT;AACA;AAAA,cAAS,SAAC,aAAqB;AAC7B,QAAM,OAAO,oBAAI,KAAK;AACtB,OAAK,SAAS,KAAK,SAAS,IAAI,WAAW;AAC3C,SAAO;AACT;AACA;AAAA,gBAAW,SAAC,eAAuB;AACjC,QAAM,OAAO,oBAAI,KAAK;AACtB,OAAK,WAAW,KAAK,WAAW,IAAI,aAAa;AACjD,SAAO;AACT;;;AEpLK,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAAqB,aAA0B;AAA1B;AACrB,qBAAY,oBAAI,IAAoB;AAAA,MAClC,CAAC,mBAAmB,KAAK,KAAK,IAAI,MAAM,CAAC;AAAA,MACzC,CAAC,aAAa,KAAK,KAAK,IAAI,MAAM,CAAC;AAAA,MACnC,CAAC,SAAS,KAAK,KAAK,GAAG,MAAM,CAAC;AAAA,MAC9B,CAAC,YAAY,KAAK,KAAK,GAAG,MAAM,CAAC;AAAA,MACjC,CAAC,iBAAiB,KAAK,KAAK,GAAG,MAAM,CAAC;AAAA,MACtC,CAAC,YAAY,KAAK,KAAK,GAAG,MAAM,CAAC;AAAA,MACjC,CAAC,YAAY,KAAK,KAAK,IAAI,MAAM,CAAC;AAAA,MAClC,CAAC,iBAAiB,KAAK,KAAK,IAAI,MAAM,CAAC;AAAA,MACvC,CAAC,iBAAiB,KAAK,KAAK,KAAK,MAAM,CAAC;AAAA,MACxC,CAAC,YAAY,SAAS,EAAE,YAAY,CAAC;AAAA,IACvC,CAAC;AAAA,EAZgD;AAAA,EAajD,KAAK,YAAoB,UAAoB;AAC3C,WAAO,KAAK,YAAY,KAAK,YAAY,QAAQ,EAAE,YAAY;AAAA,EACjE;AAAA,EACA,WAAW,QAAgB;AACzB,WAAO,KAAK,YAAY,WAAW,MAAM,GAAG,YAAY;AAAA,EAC1D;AAAA,EAEA,IAAI,kBAAkB;AACpB,WAAO,KAAK,UAAU,IAAI,iBAAiB;AAAA,EAC7C;AAAA,EACA,IAAI,YAAY;AACd,WAAO,KAAK,UAAU,IAAI,WAAW;AAAA,EACvC;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,UAAU,IAAI,OAAO;AAAA,EACnC;AAAA,EACA,IAAI,WAAW;AACb,WAAO,KAAK,UAAU,IAAI,UAAU;AAAA,EACtC;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,UAAU,IAAI,eAAe;AAAA,EAC3C;AAAA,EACA,IAAI,WAAW;AACb,WAAO,KAAK,UAAU,IAAI,UAAU;AAAA,EACtC;AAAA,EACA,IAAI,WAAW;AACb,WAAO,KAAK,UAAU,IAAI,UAAU;AAAA,EACtC;AAAA,EACA,IAAI,WAAW;AACb,WAAO,KAAK,UAAU,IAAI,UAAU;AAAA,EACtC;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,UAAU,IAAI,eAAe;AAAA,EAC3C;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,UAAU,IAAI,eAAe;AAAA,EAC3C;AACF;;;ACpDO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAAqB,aAA0B;AAA1B;AAAA,EAA4B;AAAA,EACjD,KAAK,YAAoB,UAAoB;AAC3C,WAAO,KAAK,YACT,KAAK,YAAY,QAAQ,EACzB,YAAY,EACZ,MAAM,GAAG,EAAE,CAAC;AAAA,EACjB;AAAA,EACA,WAAW,QAAgB;AACzB,WAAO,KAAK,YAAY,WAAW,MAAM,GAAG,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,EACxE;AACF;;;ACfA;AAKO,IAAM,cAAN,MAAkB;AAAA,EAAlB;AACL,iCAAwB,IAAI,YAAY;AACxC,6BAAO,IAAI,eAAe,mBAAK,SAAQ;AACvC,6BAAO,IAAI,eAAe,mBAAK,SAAQ;AAAA;AAAA,EACvC,IAAI,MAAM;AACR,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,IAAI,MAAM;AACR,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,IAAI,MAAM;AACR,WAAO,mBAAK,UAAS,KAAK,KAAK;AAAA,EACjC;AAAA,EAEA,IAAI,kBAAwB;AAC1B,WAAO,mBAAK,UAAS,KAAK,iBAAiB;AAAA,EAC7C;AAAA,EAEA,IAAI,YAAkB;AACpB,WAAO,mBAAK,UAAS,KAAK,WAAW;AAAA,EACvC;AAAA,EAEA,IAAI,QAAc;AAChB,WAAO,mBAAK,UAAS,KAAK,OAAO;AAAA,EACnC;AAAA,EAEA,IAAI,WAAiB;AACnB,WAAO,mBAAK,UAAS,KAAK,UAAU;AAAA,EACtC;AAAA,EAEA,IAAI,gBAAsB;AACxB,WAAO,mBAAK,UAAS,KAAK,eAAe;AAAA,EAC3C;AAAA,EAEA,IAAI,WAAiB;AACnB,WAAO,mBAAK,UAAS,KAAK,UAAU;AAAA,EACtC;AAAA,EAEA,IAAI,WAAiB;AACnB,WAAO,mBAAK,UAAS,KAAK,UAAU;AAAA,EACtC;AAAA,EAEA,IAAI,WAAiB;AACnB,WAAO,mBAAK,UAAS,KAAK,UAAU;AAAA,EACtC;AAAA,EAEA,IAAI,gBAAsB;AACxB,WAAO,mBAAK,UAAS,KAAK,eAAe;AAAA,EAC3C;AAAA,EAEA,IAAI,gBAAsB;AACxB,WAAO,mBAAK,UAAS,KAAK,eAAe;AAAA,EAC3C;AAAA,EAEA,WAAW,QAAgB;AACzB,WAAO,mBAAK,UAAS,WAAW,MAAM;AAAA,EACxC;AAAA,EAEA,eAAe,QAAgB;AAC7B,WAAO,mBAAK,UAAS,eAAe,MAAM;AAAA,EAC5C;AAAA,EAEA,KAAK,YAAoB,UAAoB;AAC3C,WAAO,mBAAK,UAAS,KAAK,YAAY,QAAQ;AAAA,EAChD;AACF;AAlEE;AACA;AACA;AAkEK,IAAM,QAAQ,IAAI,YAAY;;;AC1ErC,SAAS,iBAAiB;AAC1B,SAAS,SAAAA,QAAO,iBAAAC,sBAAqB;AAG9B,IAAM,WAAN,MAAe;AAAA,EACpB,QAAQ,OAAa,OAAa;AAChC,WAAO,KAAK,OAAO,OAAO,KAAK,IAAI;AAAA,EACrC;AAAA,EACA,QAAQ,OAAa,OAAa;AAChC,WAAO,KAAK,OAAO,OAAO,KAAK,IAAI;AAAA,EACrC;AAAA,EACA,OAAO,OAAa,OAAa;AAC/B,UAAM,KAAK,IAAI,KAAK,KAAK,EAAE,QAAQ;AACnC,UAAM,KAAK,IAAI,KAAK,KAAK,EAAE,QAAQ;AACnC,WAAO,KAAK,IAAI,KAAK,MAAM,KAAK,EAAE,CAAC;AAAA,EACrC;AAAA,EACA,KAAK,OAAa,OAAa;AAC7B,WAAO,KAAK,OAAO,OAAO,KAAK,IAAI;AAAA,EACrC;AAAA,EACA,MAAM,OAAa,OAAa;AAC9B,WAAO,KAAK,OAAO,OAAO,KAAK,IAAI;AAAA,EACrC;AAAA,EACA,MAAM,OAAa,OAAa;AAC9B,WAAO,KAAK,OAAO,OAAO,KAAK,IAAI;AAAA,EACrC;AACF;AAzBA;AA2BO,IAAM,aAAN,MAAiB;AAAA,EAAjB;AACL,8BAAQ,IAAI,SAAS;AAAA;AAAA,EACrB,IAAI,OAAO;AACT,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,WAAW,QAA4B;AACrC,UAAM,cAAcC,eAAc,QAAQC,MAAK;AAC/C,cAAU,KAAK,MAAM,WAAW;AAChC,WAAO,KAAK,KAAK,WAAW;AAAA,EAC9B;AACF;AAVE;AAYK,IAAM,OAAO,IAAI,WAAW;","names":["camel","convertPhrase","convertPhrase","camel"]}
|
|
1
|
+
{"version":3,"sources":["../../src/dates/date-factory.ts","../../src/dates/midnight.ts","../../src/dates/iso-date-factory.ts","../../src/dates/formatted-date-factory.ts","../../src/dates/dates.ts","../../src/time/time.ts"],"sourcesContent":["import { TimeUnit, camel, convertPhrase, collapse } from \"@autometa/phrases\";\nimport { midnight } from \"./midnight\";\nimport { AutomationError, raise } from \"@autometa/errors\";\nimport { ConfirmDefined, ConfirmLengthAtLeast } from \"@autometa/asserters\";\n\ntype TimeShortcut =\n | \"now\"\n | \"beforeYesterday\"\n | \"yesterday\"\n | \"today\"\n | \"tomorrow\"\n | \"afterTomorrow\"\n | \"midnight\"\n | \"lastWeek\"\n | \"nextWeek\"\n | \"lastFortnight\"\n | \"nextFortnight\";\n\nfunction isTimeShortcut(text: string): text is TimeShortcut {\n const includes = [\n \"now\",\n \"beforeYesterday\",\n \"yesterday\",\n \"today\",\n \"tomorrow\",\n \"afterTomorrow\",\n \"midnight\",\n \"lastWeek\",\n \"nextWeek\",\n \"lastFortnight\",\n \"nextFortnight\"\n ].includes(text);\n if (!includes) {\n return false\n }\n return true\n}\nexport class DateFactory {\n phraseMap = new Map<TimeShortcut, () => Date>([\n [\"now\", () => this.make(0, \"days\")],\n [\"beforeYesterday\", () => this.make(-2, \"days\")],\n [\"yesterday\", () => this.make(-1, \"days\")],\n [\"today\", () => this.make(0, \"days\")],\n [\"tomorrow\", () => this.make(1, \"days\")],\n [\"afterTomorrow\", () => this.make(2, \"days\")],\n [\"nextWeek\", () => this.make(7, \"days\")],\n [\"lastWeek\", () => this.make(-7, \"days\")],\n [\"nextFortnight\", () => this.make(14, \"days\")],\n [\"lastFortnight\", () => this.make(-14, \"days\")],\n [\"midnight\", midnight]\n ]);\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n find(name: TimeShortcut): Date {\n const result = this.phraseMap.get(name);\n if (result) {\n return result();\n }\n raise(\n `Could not find date shortcut ${name}. Please use a valid date shortcut from the following list: ${Array.from(\n this.phraseMap.keys()\n ).join(\", \")}`\n );\n }\n\n fromPhraseSafe(phrase: string) {\n const name = convertPhrase(phrase, camel);\n if (isTimeShortcut(name)) {\n if (this.phraseMap.has(name)) {\n return this.phraseMap.get(name)?.call(this);\n }\n }\n\n const matchDay = this.#extractTimeFromPhrase(phrase);\n if (matchDay) {\n return matchDay;\n }\n const parsed = new Date(phrase);\n if (isNaN(parsed.getTime())) {\n return new Date(Date.parse(phrase));\n }\n return parsed;\n }\n fromPhrase(phrase: string) {\n const result = this.fromPhraseSafe(phrase);\n if (result) {\n return result;\n }\n raise(\n `Could not parse date from phrase ${phrase}. Please use a valid date string or a phrase from the following list: ${Array.from(\n this.phraseMap.keys()\n ).join(\", \")}`\n );\n }\n make(timeOffset: number, timeunit: TimeUnit) {\n const unit = timeunit.endsWith(\"s\") ? timeunit : `${timeunit}s`;\n switch (unit) {\n case \"years\":\n return this.#addYears(timeOffset);\n case \"months\":\n return this.#addMonths(timeOffset);\n case \"weeks\":\n return this.#addWeeks(timeOffset);\n case \"days\":\n return this.#addDays(timeOffset);\n case \"seconds\":\n return this.#addSeconds(timeOffset);\n case \"milliseconds\":\n return this.#addMilliseconds(timeOffset);\n case \"hours\":\n return this.#addHours(timeOffset);\n case \"minutes\":\n return this.#addMinutes(timeOffset);\n default:\n throw new AutomationError(\n `Invalid timeunit ${timeunit}, options are 'days', 'seconds', 'milliseconds', 'hours', 'minutes'. Non plural equivalents such as 'day' or 'week' are also accepted.`\n );\n }\n }\n #extractTimeFromPhrase(phrase: string) {\n return (\n this.#extractFutureFromPhrase(phrase) ??\n this.#extractPastFromPhrase(phrase)\n );\n }\n #extractFutureFromPhrase(phrase: string) {\n const pastPattern = /(\\d+) (.*)s? from now?/;\n const pastMatch = pastPattern.exec(phrase);\n\n if (ConfirmDefined(pastMatch) && ConfirmLengthAtLeast(pastMatch, 3)) {\n const [_, value, unit] = pastMatch;\n const timeunit = convertPhrase(unit, collapse) as TimeUnit;\n return this.make(Number(value), timeunit);\n }\n }\n #extractPastFromPhrase(phrase: string) {\n const pastPattern = /(\\d+) (.*)(s)? ago?/gm;\n const pastMatch = pastPattern.exec(phrase);\n if (ConfirmDefined(pastMatch) && ConfirmLengthAtLeast(pastMatch, 3)) {\n const [_, value, unit] = pastMatch;\n const timeunit = convertPhrase(unit, camel) as TimeUnit;\n return this.make(-Number(value), timeunit);\n }\n }\n #addYears(yearsOffset: number) {\n const date = new Date();\n date.setFullYear(date.getFullYear() + yearsOffset);\n return date;\n }\n #addMonths(monthOffset: number) {\n const date = new Date();\n date.setMonth(date.getMonth() + monthOffset);\n return date;\n }\n #addWeeks(weekOffset: number) {\n const date = new Date();\n date.setMonth(date.getMonth() + weekOffset / 4);\n return date;\n }\n #addDays(daysOffset: number) {\n const date = new Date();\n date.setDate(date.getDate() + daysOffset);\n return date;\n }\n\n #addSeconds(secondsOffset: number) {\n const date = new Date();\n date.setSeconds(date.getSeconds() + secondsOffset);\n return date;\n }\n\n #addMilliseconds(millisecondsOffset: number) {\n const date = new Date();\n date.setMilliseconds(date.getMilliseconds() + millisecondsOffset);\n return date;\n }\n #addHours(hoursOffset: number) {\n const date = new Date();\n date.setHours(date.getHours() + hoursOffset);\n return date;\n }\n #addMinutes(minutesOffset: number) {\n const date = new Date();\n date.setMinutes(date.getMinutes() + minutesOffset);\n return date;\n }\n}\n","\nexport function midnight() {\n const date = new Date();\n date.setHours(0, 0, 0, 0);\n return date;\n}\n","import { TimeUnit } from '@autometa/phrases';\nimport { midnight } from './midnight';\nimport { DateFactory } from './date-factory';\n\n\nexport class IsoDateFactory {\n constructor(readonly dateFactory: DateFactory) { }\n phraseMap = new Map<string, string>([\n ['beforeYesterday', this.make(-2, 'days')],\n ['yesterday', this.make(-1, 'days')],\n ['today', this.make(0, 'days')],\n ['tomorrow', this.make(1, 'days')],\n ['afterTomorrow', this.make(2, 'days')],\n ['nextWeek', this.make(7, 'days')],\n ['lastWeek', this.make(-7, 'days')],\n ['nextFortnight', this.make(14, 'days')],\n ['lastFortnight', this.make(-14, 'days')],\n ['midnight', midnight().toISOString()],\n ]);\n make(daysOffset: number, timeunit: TimeUnit) {\n return this.dateFactory.make(daysOffset, timeunit).toISOString();\n }\n fromPhrase(phrase: string) {\n return this.dateFactory.fromPhrase(phrase)?.toISOString();\n }\n\n get beforeYesterday() {\n return this.phraseMap.get('beforeYesterday');\n }\n get yesterday() {\n return this.phraseMap.get('yesterday');\n }\n get today() {\n return this.phraseMap.get('today');\n }\n get tomorrow() {\n return this.phraseMap.get('tomorrow');\n }\n get afterTomorrow() {\n return this.phraseMap.get('afterTomorrow');\n }\n get midnight() {\n return this.phraseMap.get('midnight');\n }\n get lastWeek() {\n return this.phraseMap.get('lastWeek');\n }\n get nextWeek() {\n return this.phraseMap.get('nextWeek');\n }\n get lastFortnight() {\n return this.phraseMap.get('lastFortnight');\n }\n get nextFortnight() {\n return this.phraseMap.get('nextFortnight');\n }\n}\n","import { TimeUnit } from '@autometa/phrases';\nimport { DateFactory } from './date-factory';\n\n\nexport class FmtDateFactory {\n constructor(readonly dateFactory: DateFactory) { }\n make(daysOffset: number, timeunit: TimeUnit) {\n return this.dateFactory\n .make(daysOffset, timeunit)\n .toISOString()\n .split('T')[0];\n }\n fromPhrase(phrase: string) {\n return this.dateFactory.fromPhrase(phrase)?.toISOString().split('T')[0];\n }\n}\n","import { DateFactory } from \"./date-factory\";\nimport { IsoDateFactory } from \"./iso-date-factory\";\nimport { FmtDateFactory } from \"./formatted-date-factory\";\nimport { TimeUnit } from \"@autometa/phrases\";\n\nexport class DatesObject {\n #factory: DateFactory = new DateFactory();\n #iso = new IsoDateFactory(this.#factory);\n #fmt = new FmtDateFactory(this.#factory);\n get iso() {\n return this.#iso;\n }\n\n get fmt() {\n return this.#fmt;\n }\n\n get now() {\n return this.#factory.find(\"now\");\n }\n\n get beforeYesterday(): Date {\n return this.#factory.find(\"beforeYesterday\");\n }\n\n get yesterday(): Date {\n return this.#factory.find(\"yesterday\");\n }\n\n get today(): Date {\n return this.#factory.find(\"today\");\n }\n\n get tomorrow(): Date {\n return this.#factory.find(\"tomorrow\");\n }\n\n get afterTomorrow(): Date {\n return this.#factory.find(\"afterTomorrow\");\n }\n\n get midnight(): Date {\n return this.#factory.find(\"midnight\");\n }\n\n get lastWeek(): Date {\n return this.#factory.find(\"lastWeek\");\n }\n\n get nextWeek(): Date {\n return this.#factory.find(\"nextWeek\");\n }\n\n get lastFortnight(): Date {\n return this.#factory.find(\"lastFortnight\");\n }\n\n get nextFortnight(): Date {\n return this.#factory.find(\"nextFortnight\");\n }\n\n fromPhrase(phrase: string) {\n return this.#factory.fromPhrase(phrase);\n }\n\n fromPhraseSafe(phrase: string) {\n return this.#factory.fromPhraseSafe(phrase);\n }\n\n make(timeOffset: number, timeUnit: TimeUnit) {\n return this.#factory.make(timeOffset, timeUnit);\n }\n}\n\nexport const Dates = new DatesObject();\n","import { AssertKey } from \"@autometa/asserters\";\nimport { camel, convertPhrase, lower } from \"@autometa/phrases\";\ntype TimeDiffFn = (date1: Date, date2: Date) => number;\n\nexport class TimeDiff {\n minutes(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 60000;\n }\n seconds(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 1000;\n }\n millis(date1: Date, date2: Date) {\n const d1 = new Date(date1).getTime();\n const d2 = new Date(date2).getTime();\n return Math.abs(Math.round(d2 - d1));\n }\n days(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 86400000;\n }\n hours(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 3600000;\n }\n weeks(date1: Date, date2: Date) {\n return this.millis(date1, date2) / 604800000;\n }\n fromPhrase(phrase: string): TimeDiffFn {\n const propertyKey = convertPhrase(phrase, lower);\n AssertKey(this, propertyKey);\n return (this[propertyKey] as TimeDiffFn).bind(this);\n }\n}\n\nexport class TimeObject {\n #diff = new TimeDiff();\n get diff() {\n return this.#diff;\n }\n}\n\nexport const Time = new TimeObject();\n"],"mappings":"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","names":["convertPhrase","convertPhrase"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -64,11 +64,11 @@ declare class TimeDiff {
|
|
|
64
64
|
days(date1: Date, date2: Date): number;
|
|
65
65
|
hours(date1: Date, date2: Date): number;
|
|
66
66
|
weeks(date1: Date, date2: Date): number;
|
|
67
|
+
fromPhrase(phrase: string): TimeDiffFn;
|
|
67
68
|
}
|
|
68
69
|
declare class TimeObject {
|
|
69
70
|
#private;
|
|
70
71
|
get diff(): TimeDiff;
|
|
71
|
-
fromPhrase(phrase: string): TimeDiffFn;
|
|
72
72
|
}
|
|
73
73
|
declare const Time: TimeObject;
|
|
74
74
|
|