@nextera.one/tps-standard 0.5.3 → 0.5.34

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 (57) hide show
  1. package/dist/date.d.ts +54 -0
  2. package/dist/date.js +174 -0
  3. package/dist/date.js.map +1 -0
  4. package/dist/drivers/gregorian.d.ts +3 -5
  5. package/dist/drivers/gregorian.js +26 -19
  6. package/dist/drivers/gregorian.js.map +1 -1
  7. package/dist/drivers/hijri.d.ts +1 -16
  8. package/dist/drivers/hijri.js +9 -102
  9. package/dist/drivers/hijri.js.map +1 -1
  10. package/dist/drivers/holocene.d.ts +6 -3
  11. package/dist/drivers/holocene.js +7 -20
  12. package/dist/drivers/holocene.js.map +1 -1
  13. package/dist/drivers/julian.d.ts +3 -10
  14. package/dist/drivers/julian.js +11 -71
  15. package/dist/drivers/julian.js.map +1 -1
  16. package/dist/drivers/persian.d.ts +1 -6
  17. package/dist/drivers/persian.js +17 -92
  18. package/dist/drivers/persian.js.map +1 -1
  19. package/dist/drivers/tps.d.ts +11 -28
  20. package/dist/drivers/tps.js +8 -58
  21. package/dist/drivers/tps.js.map +1 -1
  22. package/dist/drivers/unix.d.ts +5 -6
  23. package/dist/drivers/unix.js +10 -32
  24. package/dist/drivers/unix.js.map +1 -1
  25. package/dist/index.d.ts +6 -477
  26. package/dist/index.js +33 -978
  27. package/dist/index.js.map +1 -1
  28. package/dist/types.d.ts +85 -0
  29. package/dist/types.js +30 -0
  30. package/dist/types.js.map +1 -0
  31. package/dist/uid.d.ts +48 -0
  32. package/dist/uid.js +225 -0
  33. package/dist/uid.js.map +1 -0
  34. package/dist/utils/calendar.d.ts +55 -0
  35. package/dist/utils/calendar.js +136 -0
  36. package/dist/utils/calendar.js.map +1 -0
  37. package/dist/utils/env.d.ts +12 -0
  38. package/dist/utils/env.js +79 -0
  39. package/dist/utils/env.js.map +1 -0
  40. package/dist/utils/tps-string.d.ts +12 -0
  41. package/dist/utils/tps-string.js +164 -0
  42. package/dist/utils/tps-string.js.map +1 -0
  43. package/package.json +1 -1
  44. package/src/date.ts +243 -0
  45. package/src/drivers/gregorian.ts +29 -27
  46. package/src/drivers/hijri.ts +13 -113
  47. package/src/drivers/holocene.ts +11 -12
  48. package/src/drivers/julian.ts +18 -72
  49. package/src/drivers/persian.ts +25 -92
  50. package/src/drivers/tps.ts +16 -55
  51. package/src/drivers/unix.ts +12 -33
  52. package/src/index.ts +18 -1446
  53. package/src/types.ts +107 -0
  54. package/src/uid.ts +308 -0
  55. package/src/utils/calendar.ts +161 -0
  56. package/src/utils/env.ts +88 -0
  57. package/src/utils/tps-string.ts +166 -0
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ /**
3
+ * Shared Calendar Math Utilities
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.gregorianToJdn = gregorianToJdn;
7
+ exports.jdnToGregorian = jdnToGregorian;
8
+ exports.julianToJdn = julianToJdn;
9
+ exports.jdnToJulian = jdnToJulian;
10
+ exports.persianToJdn = persianToJdn;
11
+ exports.jdnToPersian = jdnToPersian;
12
+ exports.gregorianToHijri = gregorianToHijri;
13
+ exports.hijriToGregorian = hijriToGregorian;
14
+ /**
15
+ * Gregorian -> Julian Day Number
16
+ */
17
+ function gregorianToJdn(gy, gm, gd) {
18
+ const a = Math.floor((14 - gm) / 12);
19
+ const y = gy + 4800 - a;
20
+ const m = gm + 12 * a - 3;
21
+ return (gd +
22
+ Math.floor((153 * m + 2) / 5) +
23
+ 365 * y +
24
+ Math.floor(y / 4) -
25
+ Math.floor(y / 100) +
26
+ Math.floor(y / 400) -
27
+ 32045);
28
+ }
29
+ /**
30
+ * Julian Day Number -> Gregorian
31
+ */
32
+ function jdnToGregorian(jdn) {
33
+ const a = jdn + 32044;
34
+ const b = Math.floor((4 * a + 3) / 146097);
35
+ const c = a - Math.floor((146097 * b) / 4);
36
+ const d = Math.floor((4 * c + 3) / 1461);
37
+ const e = c - Math.floor((1461 * d) / 4);
38
+ const m = Math.floor((5 * e + 2) / 153);
39
+ const gd = e - Math.floor((153 * m + 2) / 5) + 1;
40
+ const gm = m + 3 - 12 * Math.floor(m / 10);
41
+ const gy = 100 * b + d - 4800 + Math.floor(m / 10);
42
+ return { gy, gm, gd };
43
+ }
44
+ /**
45
+ * Julian -> Julian Day Number
46
+ */
47
+ function julianToJdn(jy, jm, jd) {
48
+ const a = Math.floor((14 - jm) / 12);
49
+ const y = jy + 4800 - a;
50
+ const m = jm + 12 * a - 3;
51
+ return (jd + Math.floor((153 * m + 2) / 5) + 365 * y + Math.floor(y / 4) - 32083);
52
+ }
53
+ /**
54
+ * Julian Day Number -> Julian
55
+ */
56
+ function jdnToJulian(jdn) {
57
+ const c = jdn + 32082;
58
+ const d = Math.floor((4 * c + 3) / 1461);
59
+ const e = c - Math.floor((1461 * d) / 4);
60
+ const m = Math.floor((5 * e + 2) / 153);
61
+ const jd = e - Math.floor((153 * m + 2) / 5) + 1;
62
+ const jm = m + 3 - 12 * Math.floor(m / 10);
63
+ const jy = d - 4800 + Math.floor(m / 10);
64
+ return { jy, jm, jd };
65
+ }
66
+ /**
67
+ * Persian -> Julian Day Number
68
+ */
69
+ function persianToJdn(jy, jm, jd) {
70
+ const EPOCH = 1948320;
71
+ const epbase = jy - (jy >= 0 ? 474 : 473);
72
+ const epyear = 474 + (epbase % 2820);
73
+ return (jd +
74
+ (jm <= 7 ? (jm - 1) * 31 : (jm - 1) * 30 + 6) +
75
+ Math.floor((epyear * 682 - 110) / 2816) +
76
+ (epyear - 1) * 365 +
77
+ Math.floor(epbase / 2820) * 1029983 +
78
+ EPOCH -
79
+ 1);
80
+ }
81
+ /**
82
+ * Julian Day Number -> Persian
83
+ */
84
+ function jdnToPersian(jdn) {
85
+ const depoch = jdn - persianToJdn(475, 1, 1);
86
+ const cycle = Math.floor(depoch / 1029983);
87
+ const cyear = depoch % 1029983;
88
+ let ycycle;
89
+ if (cyear === 1029982) {
90
+ ycycle = 2820;
91
+ }
92
+ else {
93
+ const aux1 = Math.floor(cyear / 366);
94
+ const aux2 = cyear % 366;
95
+ ycycle =
96
+ Math.floor((2134 * aux1 + 2816 * aux2 + 2815) / 1028522) + aux1 + 1;
97
+ }
98
+ const jy = ycycle + 2820 * cycle + 474;
99
+ const yday = jdn - persianToJdn(jy, 1, 1) + 1;
100
+ const jm = yday <= 186 ? Math.ceil(yday / 31) : Math.ceil((yday - 6) / 30);
101
+ const jd = jdn - persianToJdn(jy, jm, 1) + 1;
102
+ return { jy: jy <= 0 ? jy - 1 : jy, jm, jd };
103
+ }
104
+ /**
105
+ * Convert Gregorian to Hijri (Tabular Islamic Calendar).
106
+ */
107
+ function gregorianToHijri(gy, gm, gd) {
108
+ const jdn = gregorianToJdn(gy, gm, gd);
109
+ const L = jdn - 1948440 + 10632;
110
+ const N = Math.floor((L - 1) / 10631);
111
+ const L2 = L - 10631 * N + 354;
112
+ const J = Math.floor((10985 - L2) / 5316) * Math.floor((50 * L2) / 17719) +
113
+ Math.floor(L2 / 5670) * Math.floor((43 * L2) / 15238);
114
+ const L3 = L2 -
115
+ Math.floor((30 - J) / 15) * Math.floor((17719 * J) / 50) -
116
+ Math.floor(J / 16) * Math.floor((15238 * J) / 43) +
117
+ 29;
118
+ const hm = Math.floor((24 * L3) / 709);
119
+ const hd = L3 - Math.floor((709 * hm) / 24);
120
+ const hy = 30 * N + J - 30;
121
+ return { hy, hm, hd };
122
+ }
123
+ /**
124
+ * Convert Hijri to Gregorian.
125
+ */
126
+ function hijriToGregorian(hy, hm, hd) {
127
+ const jdn = Math.floor((11 * hy + 3) / 30) +
128
+ 354 * hy +
129
+ 30 * hm -
130
+ Math.floor((hm - 1) / 2) +
131
+ hd +
132
+ 1948440 -
133
+ 385;
134
+ return jdnToGregorian(jdn);
135
+ }
136
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../src/utils/calendar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Environment & Compatibility Layer
3
+ * Abstracts Node.js vs Browser differences.
4
+ */
5
+ export declare const Env: {
6
+ isNode: boolean;
7
+ randomBytes(length: number): Uint8Array;
8
+ deflate(data: Uint8Array): Uint8Array;
9
+ inflate(data: Uint8Array): Uint8Array;
10
+ signEd25519(data: Uint8Array, privateKey: any): Uint8Array;
11
+ verifyEd25519(data: Uint8Array, signature: Uint8Array, publicKey: any): boolean;
12
+ };
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ /**
3
+ * Environment & Compatibility Layer
4
+ * Abstracts Node.js vs Browser differences.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.Env = void 0;
8
+ /* eslint-disable @typescript-eslint/no-require-imports */
9
+ const isNode = typeof require !== "undefined";
10
+ /**
11
+ * Node.js crypto module (conditional)
12
+ */
13
+ const crypto = isNode ? require("crypto") : null;
14
+ /**
15
+ * Node.js zlib module (conditional)
16
+ */
17
+ const zlib = isNode ? require("zlib") : null;
18
+ exports.Env = {
19
+ isNode,
20
+ randomBytes(length) {
21
+ if (isNode && crypto) {
22
+ return new Uint8Array(crypto.randomBytes(length));
23
+ }
24
+ if (typeof window !== "undefined" && window.crypto) {
25
+ return window.crypto.getRandomValues(new Uint8Array(length));
26
+ }
27
+ throw new Error("TPS: randomBytes not available in this environment");
28
+ },
29
+ deflate(data) {
30
+ if (isNode && zlib) {
31
+ return new Uint8Array(zlib.deflateRawSync(data));
32
+ }
33
+ throw new Error("TPS: deflate not available in this environment");
34
+ },
35
+ inflate(data) {
36
+ if (isNode && zlib) {
37
+ return new Uint8Array(zlib.inflateRawSync(data));
38
+ }
39
+ throw new Error("TPS: inflate not available in this environment");
40
+ },
41
+ signEd25519(data, privateKey) {
42
+ if (isNode && crypto) {
43
+ let key;
44
+ if (typeof privateKey === "string") {
45
+ if (privateKey.includes("PRIVATE KEY")) {
46
+ key = privateKey;
47
+ }
48
+ else {
49
+ key = crypto.createPrivateKey({
50
+ key: Buffer.from(privateKey, "hex"),
51
+ format: "der",
52
+ type: "pkcs8",
53
+ });
54
+ }
55
+ }
56
+ else if (typeof privateKey === "object" &&
57
+ privateKey !== null &&
58
+ "asymmetricKeyType" in privateKey) {
59
+ key = privateKey;
60
+ }
61
+ else {
62
+ key = crypto.createPrivateKey({
63
+ key: Buffer.from(privateKey),
64
+ format: "der",
65
+ type: "pkcs8",
66
+ });
67
+ }
68
+ return new Uint8Array(crypto.sign(null, data, key));
69
+ }
70
+ throw new Error("TPS: signEd25519 not available in this environment");
71
+ },
72
+ verifyEd25519(data, signature, publicKey) {
73
+ if (isNode && crypto) {
74
+ return crypto.verify(null, data, publicKey, signature);
75
+ }
76
+ throw new Error("TPS: verifyEd25519 not available in this environment");
77
+ },
78
+ };
79
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { TPSComponents, TimeOrder } from "../types";
2
+ /**
3
+ * Generate the canonical `T:` time string for a set of components.
4
+ */
5
+ export declare function buildTimePart(comp: TPSComponents): string;
6
+ /**
7
+ * Parse the time portion of a TPS string into components.
8
+ */
9
+ export declare function parseTimeString(input: string): {
10
+ components: Partial<TPSComponents>;
11
+ order: TimeOrder;
12
+ } | null;
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildTimePart = buildTimePart;
4
+ exports.parseTimeString = parseTimeString;
5
+ const types_1 = require("../types");
6
+ /**
7
+ * Generate the canonical `T:` time string for a set of components.
8
+ */
9
+ function buildTimePart(comp) {
10
+ const calendar = (comp.calendar || "").toLowerCase();
11
+ if (!/^[a-z]{3,4}$/.test(calendar)) {
12
+ throw new Error(`Invalid calendar code '${comp.calendar}'. Calendar code width must be 3–4 lowercase letters.`);
13
+ }
14
+ let time = `T:${calendar}`;
15
+ if (calendar === types_1.DefaultCalendars.UNIX) {
16
+ if (comp.unixSeconds !== undefined) {
17
+ time += `.s${comp.unixSeconds}`;
18
+ }
19
+ return time;
20
+ }
21
+ const tokens = [
22
+ ["m", comp.millennium, 8],
23
+ ["c", comp.century, 7],
24
+ ["y", comp.year, 6],
25
+ ["m", comp.month, 5],
26
+ ["d", comp.day, 4],
27
+ ["h", comp.hour, 3],
28
+ ["m", comp.minute, 2],
29
+ ["s", comp.second, 1],
30
+ ["m", comp.millisecond, 0],
31
+ ];
32
+ const order = comp.order || types_1.TimeOrder.DESC;
33
+ const activeTokens = order === types_1.TimeOrder.ASC ? [...tokens].reverse() : tokens;
34
+ for (const [pref, val] of activeTokens) {
35
+ if (val !== undefined) {
36
+ time += `.${pref}${val}`;
37
+ }
38
+ }
39
+ if (comp.signature) {
40
+ time += `!${comp.signature}`;
41
+ }
42
+ return time;
43
+ }
44
+ /**
45
+ * Parse the time portion of a TPS string into components.
46
+ */
47
+ function parseTimeString(input) {
48
+ let s = input.trim();
49
+ s = s.split(/[!;?#]/)[0];
50
+ if (s.startsWith("T:"))
51
+ s = s.slice(2);
52
+ const parts = s.split(".");
53
+ if (parts.length === 0)
54
+ return null;
55
+ const calendar = parts[0];
56
+ const comp = { calendar };
57
+ const fixedRankMap = {
58
+ c: 7,
59
+ y: 6,
60
+ d: 4,
61
+ h: 3,
62
+ s: 1,
63
+ };
64
+ let initialOrder = types_1.TimeOrder.DESC;
65
+ if (calendar !== types_1.DefaultCalendars.UNIX) {
66
+ const nonMRanks = [];
67
+ for (let i = 1; i < parts.length; i++) {
68
+ const pr = parts[i]?.charAt(0);
69
+ if (pr && pr in fixedRankMap)
70
+ nonMRanks.push(fixedRankMap[pr]);
71
+ }
72
+ if (nonMRanks.length >= 2) {
73
+ const isAsc = nonMRanks.every((v, i, a) => i === 0 || a[i - 1] <= v);
74
+ if (isAsc)
75
+ initialOrder = types_1.TimeOrder.ASC;
76
+ }
77
+ }
78
+ const assignMRank = (lastRank, ord) => {
79
+ if (ord === types_1.TimeOrder.DESC) {
80
+ if (lastRank === null)
81
+ return 8;
82
+ if (lastRank > 5)
83
+ return 5;
84
+ if (lastRank > 2)
85
+ return 2;
86
+ return 0;
87
+ }
88
+ else {
89
+ if (lastRank === null)
90
+ return 0;
91
+ if (lastRank < 2)
92
+ return 2;
93
+ if (lastRank < 5)
94
+ return 5;
95
+ return 8;
96
+ }
97
+ };
98
+ const ranks = [];
99
+ let lastAssignedRank = null;
100
+ for (let i = 1; i < parts.length; i++) {
101
+ const token = parts[i];
102
+ if (!token)
103
+ continue;
104
+ const prefix = token.charAt(0);
105
+ const value = token.slice(1);
106
+ if (calendar === types_1.DefaultCalendars.UNIX && prefix === "s") {
107
+ comp.unixSeconds = parseFloat(value);
108
+ ranks.push(9);
109
+ continue;
110
+ }
111
+ if (prefix === "m") {
112
+ const rank = assignMRank(lastAssignedRank, initialOrder);
113
+ switch (rank) {
114
+ case 8:
115
+ comp.millennium = parseInt(value, 10);
116
+ break;
117
+ case 5:
118
+ comp.month = parseInt(value, 10);
119
+ break;
120
+ case 2:
121
+ comp.minute = parseInt(value, 10);
122
+ break;
123
+ case 0:
124
+ comp.millisecond = parseInt(value, 10);
125
+ break;
126
+ }
127
+ ranks.push(rank);
128
+ lastAssignedRank = rank;
129
+ }
130
+ else {
131
+ const rank = fixedRankMap[prefix];
132
+ if (rank !== undefined) {
133
+ switch (prefix) {
134
+ case "c":
135
+ comp.century = parseInt(value, 10);
136
+ break;
137
+ case "y":
138
+ comp.year = parseInt(value, 10);
139
+ break;
140
+ case "d":
141
+ comp.day = parseInt(value, 10);
142
+ break;
143
+ case "h":
144
+ comp.hour = parseInt(value, 10);
145
+ break;
146
+ case "s":
147
+ comp.second = parseFloat(value);
148
+ break;
149
+ }
150
+ ranks.push(rank);
151
+ lastAssignedRank = rank;
152
+ }
153
+ }
154
+ }
155
+ let order = types_1.TimeOrder.DESC;
156
+ if (ranks.length > 1) {
157
+ const isAsc = ranks.every((v, i, a) => i === 0 || a[i - 1] <= v);
158
+ const isDesc = ranks.every((v, i, a) => i === 0 || a[i - 1] >= v);
159
+ if (isAsc && !isDesc)
160
+ order = types_1.TimeOrder.ASC;
161
+ }
162
+ return { components: comp, order };
163
+ }
164
+ //# sourceMappingURL=tps-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tps-string.js","sourceRoot":"","sources":["../../src/utils/tps-string.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextera.one/tps-standard",
3
- "version": "0.5.3",
3
+ "version": "0.5.34",
4
4
  "description": "The Universal Protocol for Space-Time Coordinates. A standard URI scheme (tps://) combining WGS84 spatial data with hierarchical, multi-calendar temporal coordinates. Includes TPS-UID: time-first, reversible event identifiers.",
5
5
  "keywords": [
6
6
  "tps",
package/src/date.ts ADDED
@@ -0,0 +1,243 @@
1
+ /**
2
+ * TpsDate Date-like wrapper with native TPS conversion helpers.
3
+ */
4
+
5
+ import { TPSComponents, DefaultCalendars, TimeOrder } from "./types";
6
+ import { TPS } from "./index";
7
+
8
+ export class TpsDate {
9
+ private readonly internal: Date;
10
+ private _cachedComponents: TPSComponents | null = null;
11
+ private _cachedTps: string | null = null;
12
+
13
+ constructor();
14
+ constructor(value: string | number | Date | TpsDate);
15
+ constructor(
16
+ year: number,
17
+ monthIndex: number,
18
+ day?: number,
19
+ hours?: number,
20
+ minutes?: number,
21
+ seconds?: number,
22
+ ms?: number,
23
+ );
24
+ constructor(
25
+ ...args:
26
+ | []
27
+ | [string | number | Date | TpsDate]
28
+ | [number, number, number?, number?, number?, number?, number?]
29
+ ) {
30
+ if (args.length === 0) {
31
+ this.internal = new Date();
32
+ return;
33
+ }
34
+
35
+ if (args.length === 1) {
36
+ const value = args[0];
37
+ if (value instanceof TpsDate) {
38
+ this.internal = new Date(value.getTime());
39
+ return;
40
+ }
41
+ if (value instanceof Date) {
42
+ this.internal = new Date(value.getTime());
43
+ return;
44
+ }
45
+ if (typeof value === "string" && TpsDate.looksLikeTPS(value)) {
46
+ const parsed = TPS.toDate(value);
47
+ if (!parsed) {
48
+ throw new RangeError(`Invalid TPS date string: ${value}`);
49
+ }
50
+ this.internal = parsed;
51
+ return;
52
+ }
53
+
54
+ this.internal = new Date(value);
55
+ return;
56
+ }
57
+
58
+ const [year, monthIndex, day, hours, minutes, seconds, ms] = args;
59
+ this.internal = new Date(
60
+ year,
61
+ monthIndex,
62
+ day ?? 1,
63
+ hours ?? 0,
64
+ minutes ?? 0,
65
+ seconds ?? 0,
66
+ ms ?? 0,
67
+ );
68
+ }
69
+
70
+ private static looksLikeTPS(input: string): boolean {
71
+ const s = input.trim();
72
+ return s.startsWith("tps://") || s.startsWith("T:") || s.startsWith("t:");
73
+ }
74
+
75
+ private getTpsComponents(): TPSComponents {
76
+ const currentTps = this.toTPS(DefaultCalendars.TPS);
77
+ if (this._cachedTps === currentTps && this._cachedComponents) {
78
+ return this._cachedComponents;
79
+ }
80
+
81
+ const parsed = TPS.parse(currentTps);
82
+ if (!parsed) {
83
+ throw new Error("TpsDate: failed to derive TPS components");
84
+ }
85
+
86
+ this._cachedTps = currentTps;
87
+ this._cachedComponents = parsed;
88
+ return parsed;
89
+ }
90
+
91
+ private getTpsFullYear(): number {
92
+ const comp = this.getTpsComponents();
93
+ return (comp.millennium - 1) * 1000 + (comp.century - 1) * 100 + comp.year;
94
+ }
95
+
96
+ static now(): number {
97
+ return Date.now();
98
+ }
99
+
100
+ static parse(input: string): number {
101
+ if (this.looksLikeTPS(input)) {
102
+ const d = TPS.toDate(input);
103
+ return d ? d.getTime() : Number.NaN;
104
+ }
105
+ return Date.parse(input);
106
+ }
107
+
108
+ static UTC(
109
+ year: number,
110
+ monthIndex: number,
111
+ day?: number,
112
+ hours?: number,
113
+ minutes?: number,
114
+ seconds?: number,
115
+ ms?: number,
116
+ ): number {
117
+ return Date.UTC(
118
+ year,
119
+ monthIndex,
120
+ day ?? 1,
121
+ hours ?? 0,
122
+ minutes ?? 0,
123
+ seconds ?? 0,
124
+ ms ?? 0,
125
+ );
126
+ }
127
+
128
+ static fromTPS(tps: string): TpsDate {
129
+ return new TpsDate(tps);
130
+ }
131
+
132
+ toGregorianDate(): Date {
133
+ return new Date(this.internal.getTime());
134
+ }
135
+
136
+ toDate(): Date {
137
+ return this.toGregorianDate();
138
+ }
139
+
140
+ toTPS(
141
+ calendar: string = DefaultCalendars.TPS,
142
+ opts?: { order?: TimeOrder },
143
+ ): string {
144
+ return TPS.fromDate(this.internal, calendar, opts);
145
+ }
146
+
147
+ toTPSURI(
148
+ calendar: string = DefaultCalendars.TPS,
149
+ opts?: {
150
+ order?: TimeOrder;
151
+ latitude?: number;
152
+ longitude?: number;
153
+ altitude?: number;
154
+ isUnknownLocation?: boolean;
155
+ isHiddenLocation?: boolean;
156
+ isRedactedLocation?: boolean;
157
+ },
158
+ ): string {
159
+ const time = this.toTPS(calendar, { order: opts?.order });
160
+ const comp = TPS.parse(time) as TPSComponents;
161
+
162
+ if (opts?.latitude !== undefined && opts?.longitude !== undefined) {
163
+ comp.latitude = opts.latitude;
164
+ comp.longitude = opts.longitude;
165
+ if (opts.altitude !== undefined) comp.altitude = opts.altitude;
166
+ } else if (opts?.isHiddenLocation) {
167
+ comp.isHiddenLocation = true;
168
+ } else if (opts?.isRedactedLocation) {
169
+ comp.isRedactedLocation = true;
170
+ } else {
171
+ comp.isUnknownLocation = true;
172
+ }
173
+
174
+ return TPS.toURI(comp);
175
+ }
176
+
177
+ getTime(): number {
178
+ return this.internal.getTime();
179
+ }
180
+ valueOf(): number {
181
+ return this.internal.valueOf();
182
+ }
183
+ toString(): string {
184
+ return this.toTPS(DefaultCalendars.TPS);
185
+ }
186
+ toISOString(): string {
187
+ return this.internal.toISOString();
188
+ }
189
+ toUTCString(): string {
190
+ return this.internal.toUTCString();
191
+ }
192
+ toJSON(): string | null {
193
+ return this.internal.toJSON();
194
+ }
195
+
196
+ getFullYear(): number {
197
+ return this.getTpsFullYear();
198
+ }
199
+ getUTCFullYear(): number {
200
+ return this.getTpsFullYear();
201
+ }
202
+ getMonth(): number {
203
+ return this.getTpsComponents().month - 1;
204
+ }
205
+ getUTCMonth(): number {
206
+ return this.getTpsComponents().month - 1;
207
+ }
208
+ getDate(): number {
209
+ return this.getTpsComponents().day;
210
+ }
211
+ getUTCDate(): number {
212
+ return this.getTpsComponents().day;
213
+ }
214
+ getHours(): number {
215
+ return this.getTpsComponents().hour;
216
+ }
217
+ getUTCHours(): number {
218
+ return this.getTpsComponents().hour;
219
+ }
220
+ getMinutes(): number {
221
+ return this.getTpsComponents().minute;
222
+ }
223
+ getUTCMinutes(): number {
224
+ return this.getTpsComponents().minute;
225
+ }
226
+ getSeconds(): number {
227
+ return this.getTpsComponents().second;
228
+ }
229
+ getUTCSeconds(): number {
230
+ return this.getTpsComponents().second;
231
+ }
232
+ getMilliseconds(): number {
233
+ return this.getTpsComponents().millisecond;
234
+ }
235
+ getUTCMilliseconds(): number {
236
+ return this.getTpsComponents().millisecond;
237
+ }
238
+
239
+ [Symbol.toPrimitive](hint: string): string | number {
240
+ if (hint === "number") return this.valueOf();
241
+ return this.toString();
242
+ }
243
+ }