@nextera.one/tps-standard 0.5.1 → 0.5.3

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 (39) hide show
  1. package/README.md +91 -467
  2. package/dist/drivers/gregorian.d.ts +18 -0
  3. package/dist/drivers/gregorian.js +157 -0
  4. package/dist/drivers/gregorian.js.map +1 -0
  5. package/dist/drivers/hijri.d.ts +42 -0
  6. package/dist/drivers/hijri.js +281 -0
  7. package/dist/drivers/hijri.js.map +1 -0
  8. package/dist/drivers/holocene.d.ts +25 -0
  9. package/dist/drivers/holocene.js +132 -0
  10. package/dist/drivers/holocene.js.map +1 -0
  11. package/dist/drivers/julian.d.ts +33 -0
  12. package/dist/drivers/julian.js +225 -0
  13. package/dist/drivers/julian.js.map +1 -0
  14. package/dist/drivers/persian.d.ts +33 -0
  15. package/dist/drivers/persian.js +269 -0
  16. package/dist/drivers/persian.js.map +1 -0
  17. package/dist/drivers/tps.d.ts +55 -0
  18. package/dist/drivers/tps.js +235 -0
  19. package/dist/drivers/tps.js.map +1 -0
  20. package/dist/drivers/unix.d.ts +16 -0
  21. package/dist/drivers/unix.js +76 -0
  22. package/dist/drivers/unix.js.map +1 -0
  23. package/dist/index.d.ts +174 -41
  24. package/dist/index.js +803 -321
  25. package/dist/index.js.map +1 -0
  26. package/package.json +9 -3
  27. package/src/drivers/gregorian.ts +191 -0
  28. package/src/drivers/hijri.ts +322 -0
  29. package/src/drivers/holocene.ts +152 -0
  30. package/src/drivers/julian.ts +255 -0
  31. package/src/drivers/persian.ts +298 -0
  32. package/src/drivers/tps.ts +270 -0
  33. package/src/drivers/unix.ts +79 -0
  34. package/src/index.ts +959 -366
  35. package/dist/src/index.js +0 -681
  36. package/dist/test/src/index.js +0 -963
  37. package/dist/test/test/persian-calendar.test.js +0 -488
  38. package/dist/test/test/tps-uid.test.js +0 -295
  39. package/dist/test/tps-uid.test.js +0 -240
@@ -0,0 +1 @@
1
+ {"version":3,"file":"holocene.js","sourceRoot":"","sources":["../../src/drivers/holocene.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Julian Calendar Driver
3
+ *
4
+ * Calendar characteristics:
5
+ * - Predecessor to the Gregorian calendar, used until 1582 CE (and later in some regions)
6
+ * - Identical month structure to Gregorian (12 months, same lengths)
7
+ * - Leap year rule: every 4 years (no century exception)
8
+ * - Diverges from Gregorian by ~1 day every 128 years
9
+ *
10
+ * Conversion uses Julian Day Number algorithms.
11
+ */
12
+ import { CalendarDriver, CalendarMetadata, TPSComponents } from "../index";
13
+ export declare class JulianDriver implements CalendarDriver {
14
+ readonly code = "jul";
15
+ readonly name = "Julian Calendar";
16
+ private readonly MONTH_NAMES;
17
+ private readonly MONTH_NAMES_SHORT;
18
+ private readonly DAYS_IN_MONTH;
19
+ getComponentsFromDate(date: Date): Partial<TPSComponents>;
20
+ getDateFromComponents(components: Partial<TPSComponents>): Date;
21
+ getFromDate(date: Date): string;
22
+ parseDate(input: string, format?: string): Partial<TPSComponents>;
23
+ format(components: Partial<TPSComponents>, format?: string): string;
24
+ validate(input: string | Partial<TPSComponents>): boolean;
25
+ getMetadata(): CalendarMetadata;
26
+ /** Julian leap year: every 4 years, no century exception */
27
+ private isLeapYear;
28
+ private julianToJdn;
29
+ private jdnToJulian;
30
+ /** Gregorian → JDN (for converting incoming Gregorian Date) */
31
+ private gregorianToJdn;
32
+ private jdnToGregorian;
33
+ }
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JulianDriver = void 0;
4
+ /**
5
+ * Julian Calendar Driver
6
+ *
7
+ * Calendar characteristics:
8
+ * - Predecessor to the Gregorian calendar, used until 1582 CE (and later in some regions)
9
+ * - Identical month structure to Gregorian (12 months, same lengths)
10
+ * - Leap year rule: every 4 years (no century exception)
11
+ * - Diverges from Gregorian by ~1 day every 128 years
12
+ *
13
+ * Conversion uses Julian Day Number algorithms.
14
+ */
15
+ const index_1 = require("../index");
16
+ class JulianDriver {
17
+ constructor() {
18
+ this.code = "jul";
19
+ this.name = "Julian Calendar";
20
+ this.MONTH_NAMES = [
21
+ "Januarius",
22
+ "Februarius",
23
+ "Martius",
24
+ "Aprilis",
25
+ "Maius",
26
+ "Junius",
27
+ "Julius",
28
+ "Augustus",
29
+ "September",
30
+ "October",
31
+ "November",
32
+ "December",
33
+ ];
34
+ this.MONTH_NAMES_SHORT = [
35
+ "Jan",
36
+ "Feb",
37
+ "Mar",
38
+ "Apr",
39
+ "May",
40
+ "Jun",
41
+ "Jul",
42
+ "Aug",
43
+ "Sep",
44
+ "Oct",
45
+ "Nov",
46
+ "Dec",
47
+ ];
48
+ this.DAYS_IN_MONTH = [
49
+ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
50
+ ];
51
+ }
52
+ // ── CalendarDriver interface ──────────────────────────────────────────
53
+ getComponentsFromDate(date) {
54
+ const jdn = this.gregorianToJdn(date.getUTCFullYear(), date.getUTCMonth() + 1, date.getUTCDate());
55
+ const { jy, jm, jd } = this.jdnToJulian(jdn);
56
+ return {
57
+ calendar: this.code,
58
+ millennium: Math.floor(jy / 1000) + 1,
59
+ century: Math.floor((jy % 1000) / 100) + 1,
60
+ year: jy % 100,
61
+ month: jm,
62
+ day: jd,
63
+ hour: date.getUTCHours(),
64
+ minute: date.getUTCMinutes(),
65
+ second: date.getUTCSeconds(),
66
+ millisecond: date.getUTCMilliseconds(),
67
+ };
68
+ }
69
+ getDateFromComponents(components) {
70
+ let fullYear;
71
+ if (components.millennium !== undefined) {
72
+ const m = components.millennium ?? 0;
73
+ const c = components.century ?? 1;
74
+ const y = components.year ?? 0;
75
+ fullYear = (m - 1) * 1000 + (c - 1) * 100 + y;
76
+ }
77
+ else {
78
+ fullYear = components.year ?? 1;
79
+ }
80
+ const jm = components.month ?? 1;
81
+ const jd = components.day ?? 1;
82
+ const jdn = this.julianToJdn(fullYear, jm, jd);
83
+ const { gy, gm, gd } = this.jdnToGregorian(jdn);
84
+ return new Date(Date.UTC(gy, gm - 1, gd, components.hour ?? 0, components.minute ?? 0, Math.floor(components.second ?? 0), components.millisecond ?? 0));
85
+ }
86
+ getFromDate(date) {
87
+ const comp = this.getComponentsFromDate(date);
88
+ return index_1.TPS.buildTimePart(comp);
89
+ }
90
+ parseDate(input, format) {
91
+ const trimmed = input.trim();
92
+ const m = trimmed.match(/^(\d{4})-(\d{2})-(\d{2})(?:[ T](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?)?$/);
93
+ if (!m) {
94
+ throw new Error(`JulianDriver.parseDate: unsupported format "${input}"`);
95
+ }
96
+ const fullYear = parseInt(m[1], 10);
97
+ const result = {
98
+ calendar: this.code,
99
+ millennium: Math.floor(fullYear / 1000) + 1,
100
+ century: Math.floor((fullYear % 1000) / 100) + 1,
101
+ year: fullYear % 100,
102
+ month: parseInt(m[2], 10),
103
+ day: parseInt(m[3], 10),
104
+ };
105
+ if (m[4] !== undefined)
106
+ result.hour = parseInt(m[4], 10);
107
+ if (m[5] !== undefined)
108
+ result.minute = parseInt(m[5], 10);
109
+ if (m[6] !== undefined)
110
+ result.second = parseInt(m[6], 10);
111
+ if (m[7] !== undefined)
112
+ result.millisecond = parseInt((m[7] + "000").slice(0, 3), 10);
113
+ return result;
114
+ }
115
+ format(components, format) {
116
+ const pad = (n, w = 2) => String(n ?? 0).padStart(w, "0");
117
+ let fullYear;
118
+ if (components.millennium !== undefined) {
119
+ const m = components.millennium ?? 0;
120
+ const c = components.century ?? 1;
121
+ const y = components.year ?? 0;
122
+ fullYear = (m - 1) * 1000 + (c - 1) * 100 + y;
123
+ }
124
+ else {
125
+ fullYear = components.year ?? 0;
126
+ }
127
+ let out = `${pad(fullYear, 4)}-${pad(components.month)}-${pad(components.day)}`;
128
+ if (components.hour !== undefined ||
129
+ components.minute !== undefined ||
130
+ components.second !== undefined ||
131
+ components.millisecond !== undefined) {
132
+ out += `T${pad(components.hour)}:${pad(components.minute)}:${pad(Math.floor(components.second ?? 0))}`;
133
+ if (components.millisecond !== undefined)
134
+ out += `.${pad(components.millisecond, 3)}`;
135
+ }
136
+ return out;
137
+ }
138
+ validate(input) {
139
+ if (typeof input === "string") {
140
+ return /^\d{4}-\d{2}-\d{2}(?:[ T]\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?)?$/.test(input.trim());
141
+ }
142
+ if (typeof input === "object") {
143
+ // Reconstruct full year for leap check
144
+ let fullYear;
145
+ if (input.millennium !== undefined) {
146
+ fullYear =
147
+ ((input.millennium ?? 0) - 1) * 1000 +
148
+ ((input.century ?? 1) - 1) * 100 +
149
+ (input.year ?? 0);
150
+ }
151
+ else {
152
+ fullYear = input.year ?? 0;
153
+ }
154
+ const { month, day } = input;
155
+ if (month === undefined || day === undefined)
156
+ return false;
157
+ if (month < 1 || month > 12 || day < 1)
158
+ return false;
159
+ let maxDay = this.DAYS_IN_MONTH[month - 1];
160
+ if (month === 2 && this.isLeapYear(fullYear))
161
+ maxDay = 29;
162
+ return day <= maxDay;
163
+ }
164
+ return false;
165
+ }
166
+ getMetadata() {
167
+ return {
168
+ name: "Julian Calendar",
169
+ monthNames: this.MONTH_NAMES,
170
+ monthNamesShort: this.MONTH_NAMES_SHORT,
171
+ isLunar: false,
172
+ monthsPerYear: 12,
173
+ epochYear: 1,
174
+ };
175
+ }
176
+ // ── Internal helpers ──────────────────────────────────────────────────
177
+ /** Julian leap year: every 4 years, no century exception */
178
+ isLeapYear(year) {
179
+ return year % 4 === 0;
180
+ }
181
+ // ── JDN algorithms ────────────────────────────────────────────────────
182
+ julianToJdn(jy, jm, jd) {
183
+ const a = Math.floor((14 - jm) / 12);
184
+ const y = jy + 4800 - a;
185
+ const m = jm + 12 * a - 3;
186
+ return (jd + Math.floor((153 * m + 2) / 5) + 365 * y + Math.floor(y / 4) - 32083);
187
+ }
188
+ jdnToJulian(jdn) {
189
+ const c = jdn + 32082;
190
+ const d = Math.floor((4 * c + 3) / 1461);
191
+ const e = c - Math.floor((1461 * d) / 4);
192
+ const m = Math.floor((5 * e + 2) / 153);
193
+ const jd = e - Math.floor((153 * m + 2) / 5) + 1;
194
+ const jm = m + 3 - 12 * Math.floor(m / 10);
195
+ const jy = d - 4800 + Math.floor(m / 10);
196
+ return { jy, jm, jd };
197
+ }
198
+ /** Gregorian → JDN (for converting incoming Gregorian Date) */
199
+ gregorianToJdn(gy, gm, gd) {
200
+ const a = Math.floor((14 - gm) / 12);
201
+ const y = gy + 4800 - a;
202
+ const m = gm + 12 * a - 3;
203
+ return (gd +
204
+ Math.floor((153 * m + 2) / 5) +
205
+ 365 * y +
206
+ Math.floor(y / 4) -
207
+ Math.floor(y / 100) +
208
+ Math.floor(y / 400) -
209
+ 32045);
210
+ }
211
+ jdnToGregorian(jdn) {
212
+ const a = jdn + 32044;
213
+ const b = Math.floor((4 * a + 3) / 146097);
214
+ const c = a - Math.floor((146097 * b) / 4);
215
+ const d = Math.floor((4 * c + 3) / 1461);
216
+ const e = c - Math.floor((1461 * d) / 4);
217
+ const m = Math.floor((5 * e + 2) / 153);
218
+ const gd = e - Math.floor((153 * m + 2) / 5) + 1;
219
+ const gm = m + 3 - 12 * Math.floor(m / 10);
220
+ const gy = 100 * b + d - 4800 + Math.floor(m / 10);
221
+ return { gy, gm, gd };
222
+ }
223
+ }
224
+ exports.JulianDriver = JulianDriver;
225
+ //# sourceMappingURL=julian.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"julian.js","sourceRoot":"","sources":["../../src/drivers/julian.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Persian (Jalali / Solar Hijri) Calendar Driver
3
+ *
4
+ * Calendar characteristics:
5
+ * - Solar calendar used in Iran and Afghanistan
6
+ * - Year 1 started in 622 CE (same epoch as Islamic Hijri, but solar-based)
7
+ * - 6 months of 31 days, 5 months of 30 days, 1 month of 29 (30 in leap)
8
+ * - Current year ≈ Gregorian year − 621
9
+ *
10
+ * Conversion uses Julian Day Number algorithms based on jalaali-js.
11
+ */
12
+ import { CalendarDriver, CalendarMetadata, TPSComponents } from "../index";
13
+ export declare class PersianDriver implements CalendarDriver {
14
+ readonly code = "per";
15
+ readonly name = "Persian (Jalali/Solar Hijri)";
16
+ private readonly MONTH_NAMES;
17
+ private readonly MONTH_NAMES_SHORT;
18
+ private readonly DAY_NAMES;
19
+ /** Days per month (non-leap): 6×31 + 5×30 + 1×29 = 365 */
20
+ private readonly DAYS_IN_MONTH;
21
+ getComponentsFromDate(date: Date): Partial<TPSComponents>;
22
+ getDateFromComponents(components: Partial<TPSComponents>): Date;
23
+ getFromDate(date: Date): string;
24
+ parseDate(input: string, format?: string): Partial<TPSComponents>;
25
+ format(components: Partial<TPSComponents>, format?: string): string;
26
+ validate(input: string | Partial<TPSComponents>): boolean;
27
+ getMetadata(): CalendarMetadata;
28
+ private isLeapYear;
29
+ private gregorianToJdn;
30
+ private jdnToGregorian;
31
+ private persianToJdn;
32
+ private jdnToPersian;
33
+ }
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PersianDriver = void 0;
4
+ /**
5
+ * Persian (Jalali / Solar Hijri) Calendar Driver
6
+ *
7
+ * Calendar characteristics:
8
+ * - Solar calendar used in Iran and Afghanistan
9
+ * - Year 1 started in 622 CE (same epoch as Islamic Hijri, but solar-based)
10
+ * - 6 months of 31 days, 5 months of 30 days, 1 month of 29 (30 in leap)
11
+ * - Current year ≈ Gregorian year − 621
12
+ *
13
+ * Conversion uses Julian Day Number algorithms based on jalaali-js.
14
+ */
15
+ const index_1 = require("../index");
16
+ class PersianDriver {
17
+ constructor() {
18
+ this.code = "per";
19
+ this.name = "Persian (Jalali/Solar Hijri)";
20
+ this.MONTH_NAMES = [
21
+ "Farvardin",
22
+ "Ordibehesht",
23
+ "Khordad",
24
+ "Tir",
25
+ "Mordad",
26
+ "Shahrivar",
27
+ "Mehr",
28
+ "Aban",
29
+ "Azar",
30
+ "Dey",
31
+ "Bahman",
32
+ "Esfand",
33
+ ];
34
+ this.MONTH_NAMES_SHORT = [
35
+ "Far",
36
+ "Ord",
37
+ "Kho",
38
+ "Tir",
39
+ "Mor",
40
+ "Sha",
41
+ "Meh",
42
+ "Aba",
43
+ "Aza",
44
+ "Dey",
45
+ "Bah",
46
+ "Esf",
47
+ ];
48
+ this.DAY_NAMES = [
49
+ "Yekshanbeh",
50
+ "Doshanbeh",
51
+ "Seshanbeh",
52
+ "Chaharshanbeh",
53
+ "Panjshanbeh",
54
+ "Jomeh",
55
+ "Shanbeh",
56
+ ];
57
+ /** Days per month (non-leap): 6×31 + 5×30 + 1×29 = 365 */
58
+ this.DAYS_IN_MONTH = [
59
+ 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29,
60
+ ];
61
+ }
62
+ // ── CalendarDriver interface ──────────────────────────────────────────
63
+ getComponentsFromDate(date) {
64
+ const jdn = this.gregorianToJdn(date.getUTCFullYear(), date.getUTCMonth() + 1, date.getUTCDate());
65
+ const { jy, jm, jd } = this.jdnToPersian(jdn);
66
+ return {
67
+ calendar: this.code,
68
+ millennium: Math.floor(jy / 1000) + 1,
69
+ century: Math.floor((jy % 1000) / 100) + 1,
70
+ year: jy % 100,
71
+ month: jm,
72
+ day: jd,
73
+ hour: date.getUTCHours(),
74
+ minute: date.getUTCMinutes(),
75
+ second: date.getUTCSeconds(),
76
+ millisecond: date.getUTCMilliseconds(),
77
+ };
78
+ }
79
+ getDateFromComponents(components) {
80
+ // Reconstruct full Persian year from millennium/century/year if available
81
+ let jy;
82
+ if (components.millennium !== undefined) {
83
+ const m = components.millennium ?? 0;
84
+ const c = components.century ?? 1;
85
+ const y = components.year ?? 0;
86
+ jy = (m - 1) * 1000 + (c - 1) * 100 + y;
87
+ }
88
+ else {
89
+ jy = components.year ?? 1;
90
+ }
91
+ const jm = components.month ?? 1;
92
+ const jd = components.day ?? 1;
93
+ const jdn = this.persianToJdn(jy, jm, jd);
94
+ const { gy, gm, gd } = this.jdnToGregorian(jdn);
95
+ return new Date(Date.UTC(gy, gm - 1, gd, components.hour ?? 0, components.minute ?? 0, Math.floor(components.second ?? 0), components.millisecond ?? 0));
96
+ }
97
+ getFromDate(date) {
98
+ const comp = this.getComponentsFromDate(date);
99
+ return index_1.TPS.buildTimePart(comp);
100
+ }
101
+ parseDate(input, format) {
102
+ const trimmed = input.trim();
103
+ // Short format: 19/10/1404 or 1404/10/19
104
+ if (format === "short" ||
105
+ (trimmed.includes("/") && trimmed.split("/")[0].length <= 2)) {
106
+ const parts = trimmed.split("/").map(Number);
107
+ let fullYear, month, day;
108
+ if (parts[0] > 31) {
109
+ [fullYear, month, day] = parts;
110
+ }
111
+ else {
112
+ [day, month, fullYear] = parts;
113
+ }
114
+ return {
115
+ calendar: this.code,
116
+ millennium: Math.floor(fullYear / 1000) + 1,
117
+ century: Math.floor((fullYear % 1000) / 100) + 1,
118
+ year: fullYear % 100,
119
+ month,
120
+ day,
121
+ };
122
+ }
123
+ // ISO-like: 1404-10-19 [HH:MM:SS]
124
+ const segments = trimmed.split(/[\s,T]+/);
125
+ const [parsedYear, month, day] = segments[0].split(/[-/]/).map(Number);
126
+ const result = { calendar: this.code };
127
+ const fullYear = parsedYear;
128
+ result.millennium = Math.floor(fullYear / 1000) + 1;
129
+ result.century = Math.floor((fullYear % 1000) / 100) + 1;
130
+ result.year = fullYear % 100;
131
+ result.month = month;
132
+ result.day = day;
133
+ if (segments[1]) {
134
+ const [h, m, s] = segments[1].split(":").map(Number);
135
+ result.hour = h ?? 0;
136
+ result.minute = m ?? 0;
137
+ result.second = s ?? 0;
138
+ }
139
+ return result;
140
+ }
141
+ format(components, format) {
142
+ const pad = (n) => String(n ?? 0).padStart(2, "0");
143
+ // Reconstruct full year from millennium/century/year
144
+ let fullYear;
145
+ if (components.millennium !== undefined) {
146
+ const m = components.millennium ?? 0;
147
+ const c = components.century ?? 1;
148
+ const y = components.year ?? 0;
149
+ fullYear = (m - 1) * 1000 + (c - 1) * 100 + y;
150
+ }
151
+ else {
152
+ fullYear = components.year ?? 0;
153
+ }
154
+ if (format === "short") {
155
+ return `${components.day}/${pad(components.month)}/${fullYear}`;
156
+ }
157
+ if (format === "long") {
158
+ const mn = this.MONTH_NAMES[(components.month ?? 1) - 1];
159
+ return `${components.day} ${mn} ${fullYear}`;
160
+ }
161
+ let out = `${fullYear}-${pad(components.month)}-${pad(components.day)}`;
162
+ if (components.hour !== undefined) {
163
+ out += ` ${pad(components.hour)}:${pad(components.minute)}:${pad(Math.floor(components.second ?? 0))}`;
164
+ }
165
+ return out;
166
+ }
167
+ validate(input) {
168
+ let comp;
169
+ if (typeof input === "string") {
170
+ try {
171
+ comp = this.parseDate(input);
172
+ }
173
+ catch {
174
+ return false;
175
+ }
176
+ }
177
+ else {
178
+ comp = input;
179
+ }
180
+ const { year, month, day } = comp;
181
+ if (!year || year < 1)
182
+ return false;
183
+ if (!month || month < 1 || month > 12)
184
+ return false;
185
+ if (!day || day < 1)
186
+ return false;
187
+ let max = this.DAYS_IN_MONTH[(month ?? 1) - 1];
188
+ if (month === 12 && this.isLeapYear(year))
189
+ max = 30;
190
+ return day <= max;
191
+ }
192
+ getMetadata() {
193
+ return {
194
+ name: "Persian (Jalali/Solar Hijri)",
195
+ monthNames: this.MONTH_NAMES,
196
+ monthNamesShort: this.MONTH_NAMES_SHORT,
197
+ dayNames: this.DAY_NAMES,
198
+ dayNamesShort: this.DAY_NAMES.map((d) => d.slice(0, 3)),
199
+ isLunar: false,
200
+ monthsPerYear: 12,
201
+ epochYear: 622,
202
+ };
203
+ }
204
+ // ── Internal: leap year (33-year cycle) ───────────────────────────────
205
+ isLeapYear(year) {
206
+ const leapYears = [1, 5, 9, 13, 17, 22, 26, 30];
207
+ const cycle = ((year - 1) % 33) + 1;
208
+ return leapYears.includes(cycle);
209
+ }
210
+ // ── Internal: Julian Day Number algorithms ────────────────────────────
211
+ gregorianToJdn(gy, gm, gd) {
212
+ const a = Math.floor((14 - gm) / 12);
213
+ const y = gy + 4800 - a;
214
+ const m = gm + 12 * a - 3;
215
+ return (gd +
216
+ Math.floor((153 * m + 2) / 5) +
217
+ 365 * y +
218
+ Math.floor(y / 4) -
219
+ Math.floor(y / 100) +
220
+ Math.floor(y / 400) -
221
+ 32045);
222
+ }
223
+ jdnToGregorian(jdn) {
224
+ const a = jdn + 32044;
225
+ const b = Math.floor((4 * a + 3) / 146097);
226
+ const c = a - Math.floor((146097 * b) / 4);
227
+ const d = Math.floor((4 * c + 3) / 1461);
228
+ const e = c - Math.floor((1461 * d) / 4);
229
+ const m = Math.floor((5 * e + 2) / 153);
230
+ const gd = e - Math.floor((153 * m + 2) / 5) + 1;
231
+ const gm = m + 3 - 12 * Math.floor(m / 10);
232
+ const gy = 100 * b + d - 4800 + Math.floor(m / 10);
233
+ return { gy, gm, gd };
234
+ }
235
+ persianToJdn(jy, jm, jd) {
236
+ const EPOCH = 1948320;
237
+ const epbase = jy - (jy >= 0 ? 474 : 473);
238
+ const epyear = 474 + (epbase % 2820);
239
+ return (jd +
240
+ (jm <= 7 ? (jm - 1) * 31 : (jm - 1) * 30 + 6) +
241
+ Math.floor((epyear * 682 - 110) / 2816) +
242
+ (epyear - 1) * 365 +
243
+ Math.floor(epbase / 2820) * 1029983 +
244
+ EPOCH -
245
+ 1);
246
+ }
247
+ jdnToPersian(jdn) {
248
+ const depoch = jdn - this.persianToJdn(475, 1, 1);
249
+ const cycle = Math.floor(depoch / 1029983);
250
+ const cyear = depoch % 1029983;
251
+ let ycycle;
252
+ if (cyear === 1029982) {
253
+ ycycle = 2820;
254
+ }
255
+ else {
256
+ const aux1 = Math.floor(cyear / 366);
257
+ const aux2 = cyear % 366;
258
+ ycycle =
259
+ Math.floor((2134 * aux1 + 2816 * aux2 + 2815) / 1028522) + aux1 + 1;
260
+ }
261
+ const jy = ycycle + 2820 * cycle + 474;
262
+ const yday = jdn - this.persianToJdn(jy, 1, 1) + 1;
263
+ const jm = yday <= 186 ? Math.ceil(yday / 31) : Math.ceil((yday - 6) / 30);
264
+ const jd = jdn - this.persianToJdn(jy, jm, 1) + 1;
265
+ return { jy: jy <= 0 ? jy - 1 : jy, jm, jd };
266
+ }
267
+ }
268
+ exports.PersianDriver = PersianDriver;
269
+ //# sourceMappingURL=persian.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persian.js","sourceRoot":"","sources":["../../src/drivers/persian.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * TPS calendar driver for canonical TPS time strings.
3
+ *
4
+ * TPS Calendar characteristics:
5
+ * - Epoch: August 11, 1999 (00:00 UTC)
6
+ * - Months: Always 28 days (12 months per year = 336 days)
7
+ * - Time offset: 7 hours ahead of Gregorian (00:00 Gregorian = 07:00 TPS)
8
+ *
9
+ * Conversion process:
10
+ * 1. Apply 7-hour offset to Gregorian date
11
+ * 2. Calculate day-of-year in offset date
12
+ * 3. Convert day-of-year to TPS month/day (each month = 28 days)
13
+ * 4. Preserve millennium/century/year structure
14
+ */
15
+ import { CalendarDriver, CalendarMetadata, TPSComponents } from "../index";
16
+ export declare class TpsDriver implements CalendarDriver {
17
+ readonly code = "tps";
18
+ readonly name = "TPS Canonical";
19
+ private readonly TPS_EPOCH;
20
+ private readonly TPS_OFFSET_HOURS;
21
+ private readonly TPS_DAYS_PER_MONTH;
22
+ private readonly TPS_MONTHS_PER_YEAR;
23
+ private readonly gregorian;
24
+ /**
25
+ * Converts a Gregorian Date to TPS components.
26
+ * Applies 7-hour offset and converts day-of-year to TPS month/day (28-day months).
27
+ */
28
+ getComponentsFromDate(date: Date): Partial<TPSComponents>;
29
+ /**
30
+ * Converts TPS components to a Gregorian Date.
31
+ * Converts TPS month/day (28-day months) to day-of-year, then removes 7-hour offset.
32
+ */
33
+ getDateFromComponents(components: Partial<TPSComponents>): Date;
34
+ getFromDate(date: Date): string;
35
+ /**
36
+ * Parse a TPS date string: "YYYY-MM-DD" where MM is 01-12, DD is 01-28.
37
+ * Optional time: "YYYY-MM-DD HH:MM:SS.mmm"
38
+ */
39
+ parseDate(input: string, format?: string): Partial<TPSComponents>;
40
+ /**
41
+ * Format TPS components to "YYYY-MM-DD" where MM is 01-12, DD is 01-28.
42
+ * With time: "YYYY-MM-DD THH:MM:SS.mmm"
43
+ */
44
+ format(components: Partial<TPSComponents>, format?: string): string;
45
+ /**
46
+ * Validate TPS date string or components.
47
+ * TPS has months 1-12, each with 28 days.
48
+ */
49
+ validate(input: string | Partial<TPSComponents>): boolean;
50
+ /**
51
+ * Get TPS calendar metadata.
52
+ * TPS has 12 months, each with 28 days.
53
+ */
54
+ getMetadata(): CalendarMetadata;
55
+ }