@nextera.one/tps-standard 0.5.33 → 0.6.0
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/CHANGELOG.md +88 -0
- package/README.md +133 -56
- package/dist/date.d.ts +54 -0
- package/dist/date.js +174 -0
- package/dist/date.js.map +1 -0
- package/dist/driver-manager.d.ts +34 -0
- package/dist/driver-manager.js +53 -0
- package/dist/driver-manager.js.map +1 -0
- package/dist/drivers/chinese.d.ts +25 -0
- package/dist/drivers/chinese.js +485 -0
- package/dist/drivers/chinese.js.map +1 -0
- package/dist/drivers/gregorian.d.ts +3 -5
- package/dist/drivers/gregorian.js +26 -19
- package/dist/drivers/gregorian.js.map +1 -1
- package/dist/drivers/hijri.d.ts +1 -16
- package/dist/drivers/hijri.js +9 -102
- package/dist/drivers/hijri.js.map +1 -1
- package/dist/drivers/holocene.d.ts +6 -3
- package/dist/drivers/holocene.js +7 -20
- package/dist/drivers/holocene.js.map +1 -1
- package/dist/drivers/julian.d.ts +3 -10
- package/dist/drivers/julian.js +11 -71
- package/dist/drivers/julian.js.map +1 -1
- package/dist/drivers/persian.d.ts +1 -6
- package/dist/drivers/persian.js +17 -92
- package/dist/drivers/persian.js.map +1 -1
- package/dist/drivers/tps.d.ts +11 -28
- package/dist/drivers/tps.js +8 -58
- package/dist/drivers/tps.js.map +1 -1
- package/dist/drivers/unix.d.ts +5 -6
- package/dist/drivers/unix.js +10 -32
- package/dist/drivers/unix.js.map +1 -1
- package/dist/esm/date.js +170 -0
- package/dist/esm/date.js.map +1 -0
- package/dist/esm/driver-manager.js +49 -0
- package/dist/esm/driver-manager.js.map +1 -0
- package/dist/esm/drivers/chinese.js +481 -0
- package/dist/esm/drivers/chinese.js.map +1 -0
- package/dist/esm/drivers/gregorian.js +160 -0
- package/dist/esm/drivers/gregorian.js.map +1 -0
- package/dist/esm/drivers/hijri.js +184 -0
- package/dist/esm/drivers/hijri.js.map +1 -0
- package/dist/esm/drivers/holocene.js +115 -0
- package/dist/esm/drivers/holocene.js.map +1 -0
- package/dist/esm/drivers/julian.js +161 -0
- package/dist/esm/drivers/julian.js.map +1 -0
- package/dist/esm/drivers/persian.js +190 -0
- package/dist/esm/drivers/persian.js.map +1 -0
- package/dist/esm/drivers/tps.js +181 -0
- package/dist/esm/drivers/tps.js.map +1 -0
- package/dist/esm/drivers/unix.js +50 -0
- package/dist/esm/drivers/unix.js.map +1 -0
- package/dist/esm/index.js +873 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/types.js +28 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/uid.js +221 -0
- package/dist/esm/uid.js.map +1 -0
- package/dist/esm/utils/calendar.js +126 -0
- package/dist/esm/utils/calendar.js.map +1 -0
- package/dist/esm/utils/env.js +76 -0
- package/dist/esm/utils/env.js.map +1 -0
- package/dist/esm/utils/timezone.js +168 -0
- package/dist/esm/utils/timezone.js.map +1 -0
- package/dist/esm/utils/tps-string.js +160 -0
- package/dist/esm/utils/tps-string.js.map +1 -0
- package/dist/index.d.ts +84 -466
- package/dist/index.js +430 -1095
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +103 -0
- package/dist/types.js +31 -0
- package/dist/types.js.map +1 -0
- package/dist/uid.d.ts +48 -0
- package/dist/uid.js +225 -0
- package/dist/uid.js.map +1 -0
- package/dist/utils/calendar.d.ts +55 -0
- package/dist/utils/calendar.js +136 -0
- package/dist/utils/calendar.js.map +1 -0
- package/dist/utils/env.d.ts +12 -0
- package/dist/utils/env.js +79 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/timezone.d.ts +32 -0
- package/dist/utils/timezone.js +173 -0
- package/dist/utils/timezone.js.map +1 -0
- package/dist/utils/tps-string.d.ts +12 -0
- package/dist/utils/tps-string.js +164 -0
- package/dist/utils/tps-string.js.map +1 -0
- package/package.json +20 -5
- package/src/date.ts +243 -0
- package/src/driver-manager.ts +54 -0
- package/src/drivers/chinese.ts +542 -0
- package/src/drivers/gregorian.ts +29 -27
- package/src/drivers/hijri.ts +13 -113
- package/src/drivers/holocene.ts +11 -12
- package/src/drivers/julian.ts +18 -72
- package/src/drivers/persian.ts +25 -92
- package/src/drivers/tps.ts +16 -55
- package/src/drivers/unix.ts +12 -33
- package/src/index.ts +384 -1556
- package/src/types.ts +131 -0
- package/src/uid.ts +308 -0
- package/src/utils/calendar.ts +161 -0
- package/src/utils/env.ts +88 -0
- package/src/utils/timezone.ts +182 -0
- 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,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timezone Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides lightweight, zero-dependency helpers for converting between
|
|
5
|
+
* UTC timestamps and local timestamps in a given IANA timezone or
|
|
6
|
+
* fixed UTC offset.
|
|
7
|
+
*
|
|
8
|
+
* Used by `TPS.toDate()` when the parsed extensions include a `tz` key.
|
|
9
|
+
*
|
|
10
|
+
* Examples:
|
|
11
|
+
* tz=Asia/Tehran → IANA timezone name
|
|
12
|
+
* tz=+03:30 → fixed UTC offset
|
|
13
|
+
* tz=IRST → abbreviated names (best-effort, common ones mapped)
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Given a UTC timestamp (ms), returns the equivalent *local* millisecond
|
|
17
|
+
* value for the given `tz` string.
|
|
18
|
+
*
|
|
19
|
+
* This is useful for display: `utcMs + offsetMs` gives local wall-clock time.
|
|
20
|
+
*/
|
|
21
|
+
export declare function utcToLocal(utcMs: number, tz: string): number;
|
|
22
|
+
/**
|
|
23
|
+
* Given a *local* timestamp (ms) in `tz`, returns the equivalent UTC ms.
|
|
24
|
+
*
|
|
25
|
+
* Used when converting a calendar date expressed in local time back to UTC.
|
|
26
|
+
*/
|
|
27
|
+
export declare function localToUtc(localMs: number, tz: string): number;
|
|
28
|
+
/**
|
|
29
|
+
* Returns the UTC offset string (e.g. "+03:30") for a given IANA timezone
|
|
30
|
+
* at the current moment. Useful for formatting and display.
|
|
31
|
+
*/
|
|
32
|
+
export declare function getOffsetString(tz: string, atUtcMs?: number): string;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Timezone Utilities
|
|
4
|
+
*
|
|
5
|
+
* Provides lightweight, zero-dependency helpers for converting between
|
|
6
|
+
* UTC timestamps and local timestamps in a given IANA timezone or
|
|
7
|
+
* fixed UTC offset.
|
|
8
|
+
*
|
|
9
|
+
* Used by `TPS.toDate()` when the parsed extensions include a `tz` key.
|
|
10
|
+
*
|
|
11
|
+
* Examples:
|
|
12
|
+
* tz=Asia/Tehran → IANA timezone name
|
|
13
|
+
* tz=+03:30 → fixed UTC offset
|
|
14
|
+
* tz=IRST → abbreviated names (best-effort, common ones mapped)
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.utcToLocal = utcToLocal;
|
|
18
|
+
exports.localToUtc = localToUtc;
|
|
19
|
+
exports.getOffsetString = getOffsetString;
|
|
20
|
+
/** Map of common abbreviated timezone names to IANA names. */
|
|
21
|
+
const TZ_ABBR = {
|
|
22
|
+
// Middle East
|
|
23
|
+
IRST: "Asia/Tehran",
|
|
24
|
+
IRDT: "Asia/Tehran",
|
|
25
|
+
AST: "Asia/Riyadh",
|
|
26
|
+
AST3: "Asia/Riyadh",
|
|
27
|
+
// Europe
|
|
28
|
+
CET: "Europe/Paris",
|
|
29
|
+
CEST: "Europe/Paris",
|
|
30
|
+
EET: "Europe/Athens",
|
|
31
|
+
EEST: "Europe/Athens",
|
|
32
|
+
WET: "Europe/Lisbon",
|
|
33
|
+
WEST: "Europe/Lisbon",
|
|
34
|
+
// Americas
|
|
35
|
+
EST: "America/New_York",
|
|
36
|
+
EDT: "America/New_York",
|
|
37
|
+
CST: "America/Chicago",
|
|
38
|
+
CDT: "America/Chicago",
|
|
39
|
+
MST: "America/Denver",
|
|
40
|
+
MDT: "America/Denver",
|
|
41
|
+
PST: "America/Los_Angeles",
|
|
42
|
+
PDT: "America/Los_Angeles",
|
|
43
|
+
// Asia Pacific
|
|
44
|
+
JST: "Asia/Tokyo",
|
|
45
|
+
KST: "Asia/Seoul",
|
|
46
|
+
IST: "Asia/Kolkata",
|
|
47
|
+
CST8: "Asia/Shanghai",
|
|
48
|
+
AEST: "Australia/Sydney",
|
|
49
|
+
AEDT: "Australia/Sydney",
|
|
50
|
+
// UTC variants
|
|
51
|
+
UTC: "UTC",
|
|
52
|
+
GMT: "UTC",
|
|
53
|
+
Z: "UTC",
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Parse a `tz` string into an IANA timezone name, or return null if unrecognized.
|
|
57
|
+
*/
|
|
58
|
+
function resolveIANA(tz) {
|
|
59
|
+
if (!tz)
|
|
60
|
+
return null;
|
|
61
|
+
// Direct IANA name (e.g. "Asia/Tehran")
|
|
62
|
+
if (tz.includes("/"))
|
|
63
|
+
return tz;
|
|
64
|
+
// Common abbreviation lookup
|
|
65
|
+
const abbr = TZ_ABBR[tz.toUpperCase()];
|
|
66
|
+
if (abbr)
|
|
67
|
+
return abbr;
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Parses a fixed offset string like "+03:30", "-05:00", "+0530" into ms.
|
|
72
|
+
* Returns NaN if the string is not a valid offset.
|
|
73
|
+
*/
|
|
74
|
+
function parseFixedOffset(tz) {
|
|
75
|
+
const m = tz.match(/^([+-])(\d{1,2}):?(\d{2})$/);
|
|
76
|
+
if (!m)
|
|
77
|
+
return NaN;
|
|
78
|
+
const sign = m[1] === "+" ? 1 : -1;
|
|
79
|
+
const h = parseInt(m[2], 10);
|
|
80
|
+
const min = parseInt(m[3], 10);
|
|
81
|
+
return sign * (h * 60 + min) * 60000;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Returns the UTC offset in milliseconds for a given IANA timezone at a
|
|
85
|
+
* specific UTC moment. Uses `Intl.DateTimeFormat` for correctness.
|
|
86
|
+
*
|
|
87
|
+
* Returns 0 (UTC) if the timezone is unrecognised by the runtime.
|
|
88
|
+
*/
|
|
89
|
+
function getIANAOffsetMs(ianaName, atUtcMs) {
|
|
90
|
+
try {
|
|
91
|
+
// Build a formatter that reports both UTC and local time parts
|
|
92
|
+
const fmt = new Intl.DateTimeFormat("en-US", {
|
|
93
|
+
timeZone: ianaName,
|
|
94
|
+
year: "numeric",
|
|
95
|
+
month: "2-digit",
|
|
96
|
+
day: "2-digit",
|
|
97
|
+
hour: "2-digit",
|
|
98
|
+
minute: "2-digit",
|
|
99
|
+
second: "2-digit",
|
|
100
|
+
hour12: false,
|
|
101
|
+
});
|
|
102
|
+
const parts = Object.fromEntries(fmt.formatToParts(new Date(atUtcMs)).map((p) => [p.type, p.value]));
|
|
103
|
+
// Reconstruct the local time as UTC
|
|
104
|
+
const localMs = Date.UTC(parseInt(parts.year), parseInt(parts.month) - 1, parseInt(parts.day), parseInt(parts.hour === "24" ? "0" : parts.hour), parseInt(parts.minute), parseInt(parts.second));
|
|
105
|
+
return localMs - atUtcMs;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return 0;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Given a UTC timestamp (ms), returns the equivalent *local* millisecond
|
|
113
|
+
* value for the given `tz` string.
|
|
114
|
+
*
|
|
115
|
+
* This is useful for display: `utcMs + offsetMs` gives local wall-clock time.
|
|
116
|
+
*/
|
|
117
|
+
function utcToLocal(utcMs, tz) {
|
|
118
|
+
// Try fixed offset first (e.g. "+03:30")
|
|
119
|
+
const fixed = parseFixedOffset(tz);
|
|
120
|
+
if (!isNaN(fixed))
|
|
121
|
+
return utcMs + fixed;
|
|
122
|
+
const iana = resolveIANA(tz);
|
|
123
|
+
if (!iana)
|
|
124
|
+
return utcMs; // Unknown tz — return UTC unchanged
|
|
125
|
+
return utcMs + getIANAOffsetMs(iana, utcMs);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Given a *local* timestamp (ms) in `tz`, returns the equivalent UTC ms.
|
|
129
|
+
*
|
|
130
|
+
* Used when converting a calendar date expressed in local time back to UTC.
|
|
131
|
+
*/
|
|
132
|
+
function localToUtc(localMs, tz) {
|
|
133
|
+
// Try fixed offset first
|
|
134
|
+
const fixed = parseFixedOffset(tz);
|
|
135
|
+
if (!isNaN(fixed))
|
|
136
|
+
return localMs - fixed;
|
|
137
|
+
const iana = resolveIANA(tz);
|
|
138
|
+
if (!iana)
|
|
139
|
+
return localMs;
|
|
140
|
+
// Approximation: compute the offset at the approximate UTC moment
|
|
141
|
+
// (offset iteration is overkill for a scheduling library)
|
|
142
|
+
const approxUtcMs = localMs - getIANAOffsetMs(iana, localMs);
|
|
143
|
+
// One correction pass for DST edge-cases
|
|
144
|
+
const correctedOffset = getIANAOffsetMs(iana, approxUtcMs);
|
|
145
|
+
return localMs - correctedOffset;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Returns the UTC offset string (e.g. "+03:30") for a given IANA timezone
|
|
149
|
+
* at the current moment. Useful for formatting and display.
|
|
150
|
+
*/
|
|
151
|
+
function getOffsetString(tz, atUtcMs = Date.now()) {
|
|
152
|
+
// Fast-path for UTC/GMT/Z
|
|
153
|
+
const upper = tz.toUpperCase();
|
|
154
|
+
if (upper === "UTC" || upper === "GMT" || upper === "Z")
|
|
155
|
+
return "+00:00";
|
|
156
|
+
const fixed = parseFixedOffset(tz);
|
|
157
|
+
if (!isNaN(fixed))
|
|
158
|
+
return tz;
|
|
159
|
+
const iana = resolveIANA(tz);
|
|
160
|
+
if (!iana)
|
|
161
|
+
return "+00:00";
|
|
162
|
+
const offsetMs = getIANAOffsetMs(iana, atUtcMs);
|
|
163
|
+
const sign = offsetMs >= 0 ? "+" : "-";
|
|
164
|
+
const abs = Math.abs(offsetMs);
|
|
165
|
+
const h = Math.floor(abs / 3600000)
|
|
166
|
+
.toString()
|
|
167
|
+
.padStart(2, "0");
|
|
168
|
+
const m = Math.floor((abs % 3600000) / 60000)
|
|
169
|
+
.toString()
|
|
170
|
+
.padStart(2, "0");
|
|
171
|
+
return `${sign}${h}:${m}`;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=timezone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timezone.js","sourceRoot":"","sources":["../../src/utils/timezone.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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"}
|