@wisemen/wise-date 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.
Files changed (44) hide show
  1. package/README.md +302 -0
  2. package/dist/future-infinity-date.d.ts +31 -0
  3. package/dist/future-infinity-date.js +87 -0
  4. package/dist/future-infinity-date.js.map +1 -0
  5. package/dist/index.d.ts +9 -0
  6. package/dist/index.js +12 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/init-dayjs.d.ts +1 -0
  9. package/dist/init-dayjs.js +24 -0
  10. package/dist/init-dayjs.js.map +1 -0
  11. package/dist/invalid-date.d.ts +5 -0
  12. package/dist/invalid-date.js +8 -0
  13. package/dist/invalid-date.js.map +1 -0
  14. package/dist/month.d.ts +15 -0
  15. package/dist/month.js +21 -0
  16. package/dist/month.js.map +1 -0
  17. package/dist/past-infinity-date.d.ts +31 -0
  18. package/dist/past-infinity-date.js +87 -0
  19. package/dist/past-infinity-date.js.map +1 -0
  20. package/dist/plain-date-object.d.ts +6 -0
  21. package/dist/plain-date-object.js +2 -0
  22. package/dist/plain-date-object.js.map +1 -0
  23. package/dist/tests/wise-date.constructor.unit.test.d.ts +1 -0
  24. package/dist/tests/wise-date.constructor.unit.test.js +31 -0
  25. package/dist/tests/wise-date.constructor.unit.test.js.map +1 -0
  26. package/dist/tests/wise-date.manipulation.unit.test.d.ts +1 -0
  27. package/dist/tests/wise-date.manipulation.unit.test.js +92 -0
  28. package/dist/tests/wise-date.manipulation.unit.test.js.map +1 -0
  29. package/dist/tests/wise-date.ordering.unit.test.d.ts +1 -0
  30. package/dist/tests/wise-date.ordering.unit.test.js +174 -0
  31. package/dist/tests/wise-date.ordering.unit.test.js.map +1 -0
  32. package/dist/units.d.ts +4 -0
  33. package/dist/units.js +2 -0
  34. package/dist/units.js.map +1 -0
  35. package/dist/wise-date.column.d.ts +3 -0
  36. package/dist/wise-date.column.js +31 -0
  37. package/dist/wise-date.column.js.map +1 -0
  38. package/dist/wise-date.d.ts +52 -0
  39. package/dist/wise-date.factory.d.ts +4 -0
  40. package/dist/wise-date.factory.js +14 -0
  41. package/dist/wise-date.factory.js.map +1 -0
  42. package/dist/wise-date.js +156 -0
  43. package/dist/wise-date.js.map +1 -0
  44. package/package.json +40 -0
@@ -0,0 +1,156 @@
1
+ import dayjs from 'dayjs';
2
+ import customParseFormat from 'dayjs/plugin/customParseFormat.js';
3
+ import { InvalidDate } from './invalid-date.js';
4
+ dayjs.extend(customParseFormat);
5
+ export class WiseDate {
6
+ static today() {
7
+ return new WiseDate();
8
+ }
9
+ static tomorrow() {
10
+ return new WiseDate(dayjs().add(1, 'day'));
11
+ }
12
+ static yesterday() {
13
+ return new WiseDate(dayjs().subtract(1, 'day'));
14
+ }
15
+ static max(date, otherDate) {
16
+ return date.isAfter(otherDate) ? date : otherDate;
17
+ }
18
+ static min(date, otherDate) {
19
+ return date.isBefore(otherDate) ? date : otherDate;
20
+ }
21
+ date;
22
+ constructor(input, format = 'YYYY-MM-DD') {
23
+ if (input === undefined) {
24
+ this.date = dayjs();
25
+ }
26
+ else if (input instanceof WiseDate) {
27
+ this.date = dayjs(input.date);
28
+ }
29
+ else if (input instanceof Date) {
30
+ this.date = dayjs(input);
31
+ }
32
+ else if (dayjs.isDayjs(input)) {
33
+ this.date = input.clone();
34
+ }
35
+ else if (typeof input === 'string') {
36
+ this.date = dayjs(input, format, true);
37
+ }
38
+ else {
39
+ this.date = dayjs(`${input.year}-${input.month}-${input.day}`, 'YYYY-M-D', true);
40
+ }
41
+ if (!this.date.isValid()) {
42
+ throw new InvalidDate(this);
43
+ }
44
+ this.date = this.date.startOf('day');
45
+ }
46
+ isSame(otherDate, unit = 'day') {
47
+ return this.date.isSame(otherDate.date, unit);
48
+ }
49
+ isAfter(otherDate, unit = 'day') {
50
+ if (otherDate.isFutureInfinity()) {
51
+ return false;
52
+ }
53
+ else if (otherDate.isPastInfinity()) {
54
+ return true;
55
+ }
56
+ else {
57
+ return this.date.isAfter(otherDate.date, unit);
58
+ }
59
+ }
60
+ isSameOrAfter(otherDate, unit = 'day') {
61
+ return this.isAfter(otherDate, unit) || this.isSame(otherDate, unit);
62
+ }
63
+ isBefore(otherDate, unit) {
64
+ if (otherDate.isPastInfinity()) {
65
+ return false;
66
+ }
67
+ else if (otherDate.isFutureInfinity()) {
68
+ return true;
69
+ }
70
+ else {
71
+ return this.date.isBefore(otherDate.date, unit);
72
+ }
73
+ }
74
+ isSameOrBefore(otherDate, unit = 'day') {
75
+ return this.isBefore(otherDate, unit) || this.isSame(otherDate, unit);
76
+ }
77
+ startOf(unit) {
78
+ return new WiseDate(this.date.startOf(unit));
79
+ }
80
+ endOf(unit) {
81
+ return new WiseDate(this.date.endOf(unit));
82
+ }
83
+ get year() {
84
+ return this.date.get('year');
85
+ }
86
+ get month() {
87
+ return this.date.get('month') + 1;
88
+ }
89
+ get dayOfMonth() {
90
+ return this.date.get('day');
91
+ }
92
+ get weekOfYear() {
93
+ return this.date.week();
94
+ }
95
+ get dayOfYear() {
96
+ return this.date.dayOfYear();
97
+ }
98
+ isToday() {
99
+ return this.date.isToday();
100
+ }
101
+ isTomorrow() {
102
+ return this.date.isTomorrow();
103
+ }
104
+ isYesterday() {
105
+ return this.date.isYesterday();
106
+ }
107
+ add(amount, unit) {
108
+ return new WiseDate(this.date.add(amount, unit));
109
+ }
110
+ subtract(amount, unit) {
111
+ return new WiseDate(this.date.subtract(amount, unit));
112
+ }
113
+ diff(withOther, unit, precise = false) {
114
+ if (withOther.isFutureInfinity() || withOther.isPastInfinity()) {
115
+ return Infinity;
116
+ }
117
+ else {
118
+ return this.date.diff(withOther.date, unit, precise);
119
+ }
120
+ }
121
+ /**
122
+ * @see https://day.js.org/docs/en/display/format
123
+ */
124
+ format(template) {
125
+ return this.date.format(template);
126
+ }
127
+ clone() {
128
+ return new WiseDate(this.date);
129
+ }
130
+ toPlainObject() {
131
+ return {
132
+ year: this.year,
133
+ month: this.month,
134
+ day: this.dayOfMonth
135
+ };
136
+ }
137
+ toDate() {
138
+ return this.date.toDate();
139
+ }
140
+ toString() {
141
+ return this.format('YYYY-MM-DD');
142
+ }
143
+ isFutureInfinity() {
144
+ return false;
145
+ }
146
+ isPastInfinity() {
147
+ return false;
148
+ }
149
+ isInfinity() {
150
+ return this.isFutureInfinity() || this.isPastInfinity();
151
+ }
152
+ valueOf() {
153
+ return this.toString();
154
+ }
155
+ }
156
+ //# sourceMappingURL=wise-date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wise-date.js","sourceRoot":"","sources":["../lib/wise-date.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@wisemen/wise-date",
3
+ "version": "0.0.1",
4
+ "main": "./dist/index.js",
5
+ "types": "./dist/index.d.ts",
6
+ "type": "module",
7
+ "files": [
8
+ "dist/"
9
+ ],
10
+ "scripts": {
11
+ "prebuild": "rm -rf ./dist",
12
+ "clean": "rm -rf ./dist",
13
+ "build": "tsc",
14
+ "pretest": "npm run clean && npm run build",
15
+ "test": "node --test",
16
+ "lint": "eslint --cache",
17
+ "prerelease": "npm run build",
18
+ "release": "pnpx release-it"
19
+ },
20
+ "dependencies": {
21
+ "dayjs": "^1.11.13",
22
+ "typeorm": "^0.3.22"
23
+ },
24
+ "devDependencies": {
25
+ "@types/node": "^22.14.0",
26
+ "expect": "^29.7.0",
27
+ "typescript": "^5.8.3",
28
+ "@stylistic/eslint-plugin": "^4.2.0",
29
+ "@typescript-eslint/eslint-plugin": "^8.29.1",
30
+ "@wisemen/eslint-config-nestjs": "^0.1.7",
31
+ "eslint": "^9.24.0"
32
+ },
33
+ "author": "Kobe Kwanten",
34
+ "contributors": [],
35
+ "license": "GPL",
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "git@github.com:wisemen-digital/node-core.git"
39
+ }
40
+ }