@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
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@nextera.one/tps-standard` are documented here.
|
|
4
|
+
|
|
5
|
+
Format: [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## [0.5.35] — 2026-03-04
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **`TPS.now(calendar?, opts?)`** — shorthand for `TPS.fromDate(new Date(), calendar, opts)`.
|
|
14
|
+
- **`TPS.diff(t1, t2)`** — returns elapsed time in milliseconds between two TPS strings (`t2 − t1`).
|
|
15
|
+
- **`TPS.add(tpsStr, duration)`** — returns a new TPS string shifted by a `{days, hours, minutes, seconds, milliseconds}` duration object. Preserves original calendar and time order.
|
|
16
|
+
- **Chinese Lunisolar calendar driver** (`chin`) — Huangdi year numbering (≈4722 = 2024 CE), Sexagenary ganzhi cycle, month formatting in romanized and Chinese character form (`zh` format).
|
|
17
|
+
- **`DriverManager` class** — dedicated driver registry. `TPS.driverManager` exposes `register()`, `get()`, `has()`, `list()`, and `unregister()`. The static `TPS.registerDriver()` / `TPS.getDriver()` methods are preserved as convenience shorthands.
|
|
18
|
+
- **`src/utils/timezone.ts`** — zero-dependency timezone utility using `Intl.DateTimeFormat`. Supports IANA names (`Asia/Tehran`), fixed offsets (`+03:30`), and common abbreviations (`IRST`, `JST`, `EST`, …).
|
|
19
|
+
- **Timezone-aware `TPS.toDate()`** — when a parsed TPS URI has a `;tz=` extension, the returned `Date` is automatically converted from local → UTC.
|
|
20
|
+
- **ESM dual-mode build** — `dist/esm/index.js` emitted via `tsconfig.esm.json`. `package.json` `"exports"` field routes `import` to ESM and `require` to CJS.
|
|
21
|
+
- **Browser IIFE bundle** — `dist/tps.min.js` (global `window.TPS`) built via Rollup (`npm run bundle`).
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- Internal driver registry moved from a private `Map` in `TPS` to `DriverManager`.
|
|
26
|
+
- `package.json`: added `"module"`, `"browser"`, `"exports"` fields; build script now also emits ESM.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## [0.5.34] — 2026-03-04
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- Version bump after authentication issue during 0.5.4 publish attempt.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## [0.5.33] — 2026-03-03
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- Full library modularization:
|
|
43
|
+
- `src/types.ts` — shared interfaces and enums.
|
|
44
|
+
- `src/uid.ts` — `TPSUID7RB` binary UID logic.
|
|
45
|
+
- `src/date.ts` — `TpsDate` wrapper with component caching.
|
|
46
|
+
- `src/utils/env.ts` — Node.js / Browser polyfill layer.
|
|
47
|
+
- `src/utils/calendar.ts` — centralized JDN math.
|
|
48
|
+
- `src/utils/tps-string.ts` — TPS string build / parse utilities (breaks circular deps).
|
|
49
|
+
- Calendar drivers: **Persian** (`per`), **Hijri** (`hij`), **Julian** (`jul`), **Holocene** (`holo`).
|
|
50
|
+
- `TPS.parseCalendarDate()`, `TPS.fromCalendarDate()`, `TPS.formatCalendarDate()` convenience helpers.
|
|
51
|
+
- `TPS.sanitizeTimeInput()` — normalizes casing, whitespace, legacy `/T:` separator, and detects ascending order.
|
|
52
|
+
|
|
53
|
+
### Fixed
|
|
54
|
+
|
|
55
|
+
- Persian calendar JDN → month calculation typo (divisor 108 → 31).
|
|
56
|
+
- All circular dependencies between drivers and the main TPS class.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## [0.5.3] — 2026-03-02
|
|
61
|
+
|
|
62
|
+
### Changed
|
|
63
|
+
|
|
64
|
+
- Minor internal refactoring and stability fixes.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## [0.5.2] — 2026-02-28
|
|
69
|
+
|
|
70
|
+
### Added
|
|
71
|
+
|
|
72
|
+
- `TPSUID7RB` binary reversible IDs.
|
|
73
|
+
- Ascending (`TimeOrder.ASC`) time string support.
|
|
74
|
+
- Pre-`@` generic space anchors (`adm:`, `node:`, `net:ip4:`, `planet:`, …).
|
|
75
|
+
- Structural anchors (`bldg=`, `floor=`, `room=`, `zone=`).
|
|
76
|
+
- Geospatial cell anchors (`s2=`, `h3=`, `plus=`, `w3w=`).
|
|
77
|
+
- Actor anchor (`A:`), cryptographic signature (`!`).
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## [0.5.0] — 2026-02-01
|
|
82
|
+
|
|
83
|
+
### Added
|
|
84
|
+
|
|
85
|
+
- Initial public release.
|
|
86
|
+
- Core TPS URI parsing, validation, and serialization.
|
|
87
|
+
- Gregorian (`greg`) and Unix (`unix`) built-in calendar drivers.
|
|
88
|
+
- `TpsDate` — Date-like wrapper with TPS conversion helpers.
|
package/README.md
CHANGED
|
@@ -21,14 +21,18 @@ import {
|
|
|
21
21
|
TPSUID7RB,
|
|
22
22
|
} from "@nextera.one/tps-standard";
|
|
23
23
|
|
|
24
|
-
//
|
|
24
|
+
// Current time in Gregorian
|
|
25
|
+
const now = TPS.now();
|
|
26
|
+
// "T:greg.m3.c1.y26.m3.d4.h06.m30.s00.m0"
|
|
27
|
+
|
|
28
|
+
// Convert a Date to TPS
|
|
25
29
|
const tpsTime = TPS.fromDate(
|
|
26
30
|
new Date("2026-01-09T14:30:25Z"),
|
|
27
31
|
DefaultCalendars.GREG,
|
|
28
32
|
);
|
|
29
|
-
// T:greg.m3.c1.y26.m1.d9.h14.m30.s25.m0
|
|
33
|
+
// "T:greg.m3.c1.y26.m1.d9.h14.m30.s25.m0"
|
|
30
34
|
|
|
31
|
-
//
|
|
35
|
+
// Build a full TPS URI with coordinates
|
|
32
36
|
const uri = TPS.toURI({
|
|
33
37
|
calendar: "greg",
|
|
34
38
|
millennium: 3,
|
|
@@ -44,113 +48,186 @@ const uri = TPS.toURI({
|
|
|
44
48
|
longitude: 35.91,
|
|
45
49
|
altitude: 800,
|
|
46
50
|
});
|
|
47
|
-
// tps://L:31.95,35.91,800m@T:greg.m3.c1.y26.m1.d9.h14.m30.s25.m0
|
|
51
|
+
// "tps://L:31.95,35.91,800m@T:greg.m3.c1.y26.m1.d9.h14.m30.s25.m0"
|
|
48
52
|
|
|
49
|
-
//
|
|
53
|
+
// Parse back
|
|
50
54
|
const parsed = TPS.parse(uri);
|
|
51
55
|
|
|
52
|
-
//
|
|
56
|
+
// Generate reversible TPS UID (binary base64url)
|
|
53
57
|
const uid = TPSUID7RB.encodeBinaryB64(uri);
|
|
54
58
|
const decoded = TPSUID7RB.decodeBinaryB64(uid);
|
|
55
59
|
```
|
|
56
60
|
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Calendars
|
|
64
|
+
|
|
65
|
+
8 built-in calendar drivers are registered automatically:
|
|
66
|
+
|
|
67
|
+
| Code | Calendar | Notes |
|
|
68
|
+
| ------ | ---------------------------- | ------------------------------------------------ |
|
|
69
|
+
| `tps` | TPS Native | Hierarchical millennium/century/year tokens |
|
|
70
|
+
| `greg` | Gregorian | ISO proleptic calendar |
|
|
71
|
+
| `unix` | Unix Epoch | seconds since 1970-01-01T00:00:00Z |
|
|
72
|
+
| `per` | Persian (Jalali/Solar Hijri) | Solar calendar, used in Iran & Afghanistan |
|
|
73
|
+
| `hij` | Hijri (Islamic Tabular) | Lunar calendar, 12 months × 29/30 days |
|
|
74
|
+
| `jul` | Julian | Historical proleptic; Gregorian is 13d ahead now |
|
|
75
|
+
| `holo` | Holocene (Human Era) | Gregorian + 10,000 |
|
|
76
|
+
| `chin` | Chinese Lunisolar | Huangdi year numbering + Ganzhi cycle |
|
|
77
|
+
|
|
78
|
+
### Examples
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
// Persian
|
|
82
|
+
TPS.fromDate(new Date(), "per"); // "T:per.y1404.m12.d14.h10.m0.s0"
|
|
83
|
+
|
|
84
|
+
// Hijri
|
|
85
|
+
TPS.fromDate(new Date(), "hij"); // "T:hij.y1447.m09.d04.h10.m0.s0"
|
|
86
|
+
|
|
87
|
+
// Chinese
|
|
88
|
+
TPS.fromDate(new Date(), "chin"); // "T:chin.m5.c5.y26.m1.d14.h10.m0.s0"
|
|
89
|
+
TPS.getDriver("chin")!.format(
|
|
90
|
+
{ millennium: 5, century: 5, year: 26, month: 1, day: 14 },
|
|
91
|
+
"zh",
|
|
92
|
+
);
|
|
93
|
+
// "4726年正月14日"
|
|
94
|
+
|
|
95
|
+
// Julian
|
|
96
|
+
TPS.fromDate(new Date(), "jul"); // "T:jul.m3.c1.y26.m2.d19.h10.m0.s0"
|
|
97
|
+
|
|
98
|
+
// Holocene
|
|
99
|
+
TPS.fromDate(new Date(), "holo"); // "T:holo.m4.c3.y26.m3.d4.h10.m0.s0" (12026 HE)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Custom drivers can be registered via:
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
TPS.registerDriver(myDriver);
|
|
106
|
+
// or via the DriverManager:
|
|
107
|
+
TPS.driverManager.register(myDriver);
|
|
108
|
+
console.log(TPS.driverManager.list()); // ["tps","greg","unix","per","hij","jul","holo","chin",...]
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
57
113
|
## Time Format
|
|
58
114
|
|
|
59
|
-
Canonical
|
|
115
|
+
Canonical token order is **descending hierarchy**:
|
|
60
116
|
|
|
61
|
-
```
|
|
117
|
+
```
|
|
62
118
|
T:greg.m3.c1.y26.m01.d13.h09.m30.s12.m0
|
|
63
119
|
```
|
|
64
120
|
|
|
65
|
-
|
|
121
|
+
| Token | Meaning |
|
|
122
|
+
| ------------ | --------------- |
|
|
123
|
+
| `m` (rank 8) | millennium |
|
|
124
|
+
| `c` | century |
|
|
125
|
+
| `y` | year in century |
|
|
126
|
+
| `m` (rank 5) | month |
|
|
127
|
+
| `d` | day |
|
|
128
|
+
| `h` | hour |
|
|
129
|
+
| `m` (rank 2) | minute |
|
|
130
|
+
| `s` | second |
|
|
131
|
+
| `m` (rank 0) | millisecond |
|
|
66
132
|
|
|
67
|
-
|
|
68
|
-
- `c` = century
|
|
69
|
-
- `y` = year in century
|
|
70
|
-
- `m` (rank 5) = month
|
|
71
|
-
- `d` = day
|
|
72
|
-
- `h` = hour
|
|
73
|
-
- `m` (rank 2) = minute
|
|
74
|
-
- `s` = second
|
|
75
|
-
- `m` (rank 0) = millisecond
|
|
133
|
+
Ascending order is supported via `TimeOrder.ASC` and auto-detected during parsing.
|
|
76
134
|
|
|
77
|
-
|
|
135
|
+
---
|
|
78
136
|
|
|
79
137
|
## URI Format
|
|
80
138
|
|
|
81
|
-
```
|
|
82
|
-
tps://[SPACE][
|
|
139
|
+
```
|
|
140
|
+
tps://[SPACE][/A:actor]@T:[calendar].[tokens][!signature][;extensions][?query][#fragment]
|
|
83
141
|
```
|
|
84
142
|
|
|
85
|
-
###
|
|
86
|
-
|
|
87
|
-
- Privacy: `L:-`, `L:~`, `L:redacted`, `unknown`, `hidden`, `redacted`
|
|
88
|
-
- Coordinates: `L:lat,lon[,alt]m`
|
|
89
|
-
- Cells: `L:s2=...`, `L:h3=...`, `L:plus=...`, `L:w3w=...`
|
|
90
|
-
- Structural: `L:bldg=...(.floor=...)(.room=...)(.zone=...)`
|
|
91
|
-
- Generic pre-`@` anchors: `adm:...`, `node:...`, `net:ip4:...`, `net:ip6:...`, `planet:...`, `P:...`
|
|
143
|
+
### Space Anchors
|
|
92
144
|
|
|
93
|
-
|
|
145
|
+
| Pattern | Meaning |
|
|
146
|
+
| -------------------------------------- | ------------------------------------- |
|
|
147
|
+
| `L:-`, `L:unknown` | Unknown / anonymous location |
|
|
148
|
+
| `L:~`, `L:hidden` | Hidden location |
|
|
149
|
+
| `L:redacted` | Redacted location |
|
|
150
|
+
| `L:lat,lon[,alt]m` | GPS coordinates |
|
|
151
|
+
| `L:s2=...` | S2 Cell |
|
|
152
|
+
| `L:h3=...` | H3 Cell |
|
|
153
|
+
| `L:plus=...` | Plus Code |
|
|
154
|
+
| `L:w3w=...` | What3Words |
|
|
155
|
+
| `L:bldg=...` | Structural (building/floor/room/zone) |
|
|
156
|
+
| `adm:`, `node:`, `net:ip4:`, `planet:` | Generic pre-`@` anchors |
|
|
94
157
|
|
|
95
|
-
|
|
158
|
+
### Timezone Extension
|
|
96
159
|
|
|
97
|
-
|
|
98
|
-
- `greg`
|
|
99
|
-
- `unix`
|
|
160
|
+
Add `;tz=` to have `TPS.toDate()` interpret the calendar components as local time:
|
|
100
161
|
|
|
101
|
-
|
|
162
|
+
```ts
|
|
163
|
+
// 14:30 in Tehran time → UTC 11:00
|
|
164
|
+
TPS.toDate("tps://unknown@T:greg.m3.c1.y26.m1.d9.h14.m30.s0.m0;tz=Asia/Tehran");
|
|
165
|
+
// or
|
|
166
|
+
TPS.toDate("T:greg.m3.c1.y26.m1.d9.h14.m30.s0.m0;tz=+03:30");
|
|
167
|
+
```
|
|
102
168
|
|
|
103
|
-
|
|
169
|
+
Supported: IANA names (`Asia/Tehran`), fixed offsets (`+03:30`, `-05:00`), and common abbreviations (`IRST`, `JST`, `EST`, …).
|
|
104
170
|
|
|
105
|
-
|
|
171
|
+
---
|
|
106
172
|
|
|
107
|
-
|
|
173
|
+
## Convenience Methods
|
|
108
174
|
|
|
109
175
|
```ts
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
176
|
+
// Current time
|
|
177
|
+
TPS.now(); // Gregorian by default
|
|
178
|
+
TPS.now("hij"); // Current time in Hijri
|
|
179
|
+
|
|
180
|
+
// Time difference
|
|
181
|
+
const ms = TPS.diff(
|
|
182
|
+
"T:greg.m3.c1.y26.m1.d1.h0.m0.s0.m0",
|
|
183
|
+
"T:greg.m3.c1.y26.m1.d2.h0.m0.s0.m0",
|
|
184
|
+
); // 86_400_000 (one day)
|
|
185
|
+
|
|
186
|
+
// Shift by duration
|
|
187
|
+
const t = "T:greg.m3.c1.y26.m1.d9.h14.m30.s25.m0";
|
|
188
|
+
TPS.add(t, { days: 7 }); // one week later
|
|
189
|
+
TPS.add(t, { hours: -2 }); // two hours earlier
|
|
190
|
+
TPS.add(t, { minutes: 90, seconds: 30 }); // +1h 30m 30s
|
|
191
|
+
```
|
|
115
192
|
|
|
116
|
-
|
|
193
|
+
---
|
|
117
194
|
|
|
118
|
-
|
|
119
|
-
const gregorian = td.toGregorianDate();
|
|
195
|
+
## TpsDate
|
|
120
196
|
|
|
121
|
-
|
|
122
|
-
const
|
|
197
|
+
```ts
|
|
198
|
+
const td = new TpsDate("tps://unknown@T:greg.m3.c1.y26.m01.d09.h14.m30.s25.m0");
|
|
123
199
|
|
|
124
|
-
//
|
|
200
|
+
const gregorian = td.toGregorianDate(); // native JS Date clone
|
|
125
201
|
const asTps = td.toTPS(DefaultCalendars.TPS, { order: TimeOrder.DESC });
|
|
126
|
-
|
|
127
|
-
// Full URI
|
|
128
202
|
const uri = td.toTPSURI(DefaultCalendars.GREG, {
|
|
129
203
|
latitude: 31.95,
|
|
130
204
|
longitude: 35.91,
|
|
131
|
-
altitude: 800,
|
|
132
205
|
});
|
|
133
206
|
```
|
|
134
207
|
|
|
208
|
+
---
|
|
209
|
+
|
|
135
210
|
## TPSUID7RB (Reversible Binary ID)
|
|
136
211
|
|
|
137
212
|
```ts
|
|
138
|
-
import { TPSUID7RB } from "@nextera.one/tps-standard";
|
|
139
|
-
|
|
140
213
|
const tps = "tps://node:api-1@T:greg.m3.c1.y26.m01.d09.h14.m30.s25.m0";
|
|
141
|
-
|
|
142
214
|
const id = TPSUID7RB.encodeBinaryB64(tps, { compress: true });
|
|
143
215
|
const out = TPSUID7RB.decodeBinaryB64(id);
|
|
144
216
|
// out.tps === tps
|
|
145
217
|
```
|
|
146
218
|
|
|
219
|
+
---
|
|
220
|
+
|
|
147
221
|
## Scripts
|
|
148
222
|
|
|
149
223
|
```bash
|
|
150
|
-
npm run build
|
|
151
|
-
npm run
|
|
224
|
+
npm run build # CJS + ESM TypeScript compilation
|
|
225
|
+
npm run bundle # Browser IIFE bundle (dist/tps.min.js)
|
|
226
|
+
npm run tests # Run all test suites
|
|
152
227
|
```
|
|
153
228
|
|
|
229
|
+
---
|
|
230
|
+
|
|
154
231
|
## License
|
|
155
232
|
|
|
156
233
|
Apache-2.0
|
package/dist/date.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TpsDate Date-like wrapper with native TPS conversion helpers.
|
|
3
|
+
*/
|
|
4
|
+
import { TimeOrder } from "./types";
|
|
5
|
+
export declare class TpsDate {
|
|
6
|
+
private readonly internal;
|
|
7
|
+
private _cachedComponents;
|
|
8
|
+
private _cachedTps;
|
|
9
|
+
constructor();
|
|
10
|
+
constructor(value: string | number | Date | TpsDate);
|
|
11
|
+
constructor(year: number, monthIndex: number, day?: number, hours?: number, minutes?: number, seconds?: number, ms?: number);
|
|
12
|
+
private static looksLikeTPS;
|
|
13
|
+
private getTpsComponents;
|
|
14
|
+
private getTpsFullYear;
|
|
15
|
+
static now(): number;
|
|
16
|
+
static parse(input: string): number;
|
|
17
|
+
static UTC(year: number, monthIndex: number, day?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number;
|
|
18
|
+
static fromTPS(tps: string): TpsDate;
|
|
19
|
+
toGregorianDate(): Date;
|
|
20
|
+
toDate(): Date;
|
|
21
|
+
toTPS(calendar?: string, opts?: {
|
|
22
|
+
order?: TimeOrder;
|
|
23
|
+
}): string;
|
|
24
|
+
toTPSURI(calendar?: string, opts?: {
|
|
25
|
+
order?: TimeOrder;
|
|
26
|
+
latitude?: number;
|
|
27
|
+
longitude?: number;
|
|
28
|
+
altitude?: number;
|
|
29
|
+
isUnknownLocation?: boolean;
|
|
30
|
+
isHiddenLocation?: boolean;
|
|
31
|
+
isRedactedLocation?: boolean;
|
|
32
|
+
}): string;
|
|
33
|
+
getTime(): number;
|
|
34
|
+
valueOf(): number;
|
|
35
|
+
toString(): string;
|
|
36
|
+
toISOString(): string;
|
|
37
|
+
toUTCString(): string;
|
|
38
|
+
toJSON(): string | null;
|
|
39
|
+
getFullYear(): number;
|
|
40
|
+
getUTCFullYear(): number;
|
|
41
|
+
getMonth(): number;
|
|
42
|
+
getUTCMonth(): number;
|
|
43
|
+
getDate(): number;
|
|
44
|
+
getUTCDate(): number;
|
|
45
|
+
getHours(): number;
|
|
46
|
+
getUTCHours(): number;
|
|
47
|
+
getMinutes(): number;
|
|
48
|
+
getUTCMinutes(): number;
|
|
49
|
+
getSeconds(): number;
|
|
50
|
+
getUTCSeconds(): number;
|
|
51
|
+
getMilliseconds(): number;
|
|
52
|
+
getUTCMilliseconds(): number;
|
|
53
|
+
[Symbol.toPrimitive](hint: string): string | number;
|
|
54
|
+
}
|
package/dist/date.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TpsDate Date-like wrapper with native TPS conversion helpers.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TpsDate = void 0;
|
|
7
|
+
const types_1 = require("./types");
|
|
8
|
+
const index_1 = require("./index");
|
|
9
|
+
class TpsDate {
|
|
10
|
+
constructor(...args) {
|
|
11
|
+
this._cachedComponents = null;
|
|
12
|
+
this._cachedTps = null;
|
|
13
|
+
if (args.length === 0) {
|
|
14
|
+
this.internal = new Date();
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (args.length === 1) {
|
|
18
|
+
const value = args[0];
|
|
19
|
+
if (value instanceof TpsDate) {
|
|
20
|
+
this.internal = new Date(value.getTime());
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (value instanceof Date) {
|
|
24
|
+
this.internal = new Date(value.getTime());
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (typeof value === "string" && TpsDate.looksLikeTPS(value)) {
|
|
28
|
+
const parsed = index_1.TPS.toDate(value);
|
|
29
|
+
if (!parsed) {
|
|
30
|
+
throw new RangeError(`Invalid TPS date string: ${value}`);
|
|
31
|
+
}
|
|
32
|
+
this.internal = parsed;
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
this.internal = new Date(value);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const [year, monthIndex, day, hours, minutes, seconds, ms] = args;
|
|
39
|
+
this.internal = new Date(year, monthIndex, day ?? 1, hours ?? 0, minutes ?? 0, seconds ?? 0, ms ?? 0);
|
|
40
|
+
}
|
|
41
|
+
static looksLikeTPS(input) {
|
|
42
|
+
const s = input.trim();
|
|
43
|
+
return s.startsWith("tps://") || s.startsWith("T:") || s.startsWith("t:");
|
|
44
|
+
}
|
|
45
|
+
getTpsComponents() {
|
|
46
|
+
const currentTps = this.toTPS(types_1.DefaultCalendars.TPS);
|
|
47
|
+
if (this._cachedTps === currentTps && this._cachedComponents) {
|
|
48
|
+
return this._cachedComponents;
|
|
49
|
+
}
|
|
50
|
+
const parsed = index_1.TPS.parse(currentTps);
|
|
51
|
+
if (!parsed) {
|
|
52
|
+
throw new Error("TpsDate: failed to derive TPS components");
|
|
53
|
+
}
|
|
54
|
+
this._cachedTps = currentTps;
|
|
55
|
+
this._cachedComponents = parsed;
|
|
56
|
+
return parsed;
|
|
57
|
+
}
|
|
58
|
+
getTpsFullYear() {
|
|
59
|
+
const comp = this.getTpsComponents();
|
|
60
|
+
return (comp.millennium - 1) * 1000 + (comp.century - 1) * 100 + comp.year;
|
|
61
|
+
}
|
|
62
|
+
static now() {
|
|
63
|
+
return Date.now();
|
|
64
|
+
}
|
|
65
|
+
static parse(input) {
|
|
66
|
+
if (this.looksLikeTPS(input)) {
|
|
67
|
+
const d = index_1.TPS.toDate(input);
|
|
68
|
+
return d ? d.getTime() : Number.NaN;
|
|
69
|
+
}
|
|
70
|
+
return Date.parse(input);
|
|
71
|
+
}
|
|
72
|
+
static UTC(year, monthIndex, day, hours, minutes, seconds, ms) {
|
|
73
|
+
return Date.UTC(year, monthIndex, day ?? 1, hours ?? 0, minutes ?? 0, seconds ?? 0, ms ?? 0);
|
|
74
|
+
}
|
|
75
|
+
static fromTPS(tps) {
|
|
76
|
+
return new TpsDate(tps);
|
|
77
|
+
}
|
|
78
|
+
toGregorianDate() {
|
|
79
|
+
return new Date(this.internal.getTime());
|
|
80
|
+
}
|
|
81
|
+
toDate() {
|
|
82
|
+
return this.toGregorianDate();
|
|
83
|
+
}
|
|
84
|
+
toTPS(calendar = types_1.DefaultCalendars.TPS, opts) {
|
|
85
|
+
return index_1.TPS.fromDate(this.internal, calendar, opts);
|
|
86
|
+
}
|
|
87
|
+
toTPSURI(calendar = types_1.DefaultCalendars.TPS, opts) {
|
|
88
|
+
const time = this.toTPS(calendar, { order: opts?.order });
|
|
89
|
+
const comp = index_1.TPS.parse(time);
|
|
90
|
+
if (opts?.latitude !== undefined && opts?.longitude !== undefined) {
|
|
91
|
+
comp.latitude = opts.latitude;
|
|
92
|
+
comp.longitude = opts.longitude;
|
|
93
|
+
if (opts.altitude !== undefined)
|
|
94
|
+
comp.altitude = opts.altitude;
|
|
95
|
+
}
|
|
96
|
+
else if (opts?.isHiddenLocation) {
|
|
97
|
+
comp.isHiddenLocation = true;
|
|
98
|
+
}
|
|
99
|
+
else if (opts?.isRedactedLocation) {
|
|
100
|
+
comp.isRedactedLocation = true;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
comp.isUnknownLocation = true;
|
|
104
|
+
}
|
|
105
|
+
return index_1.TPS.toURI(comp);
|
|
106
|
+
}
|
|
107
|
+
getTime() {
|
|
108
|
+
return this.internal.getTime();
|
|
109
|
+
}
|
|
110
|
+
valueOf() {
|
|
111
|
+
return this.internal.valueOf();
|
|
112
|
+
}
|
|
113
|
+
toString() {
|
|
114
|
+
return this.toTPS(types_1.DefaultCalendars.TPS);
|
|
115
|
+
}
|
|
116
|
+
toISOString() {
|
|
117
|
+
return this.internal.toISOString();
|
|
118
|
+
}
|
|
119
|
+
toUTCString() {
|
|
120
|
+
return this.internal.toUTCString();
|
|
121
|
+
}
|
|
122
|
+
toJSON() {
|
|
123
|
+
return this.internal.toJSON();
|
|
124
|
+
}
|
|
125
|
+
getFullYear() {
|
|
126
|
+
return this.getTpsFullYear();
|
|
127
|
+
}
|
|
128
|
+
getUTCFullYear() {
|
|
129
|
+
return this.getTpsFullYear();
|
|
130
|
+
}
|
|
131
|
+
getMonth() {
|
|
132
|
+
return this.getTpsComponents().month - 1;
|
|
133
|
+
}
|
|
134
|
+
getUTCMonth() {
|
|
135
|
+
return this.getTpsComponents().month - 1;
|
|
136
|
+
}
|
|
137
|
+
getDate() {
|
|
138
|
+
return this.getTpsComponents().day;
|
|
139
|
+
}
|
|
140
|
+
getUTCDate() {
|
|
141
|
+
return this.getTpsComponents().day;
|
|
142
|
+
}
|
|
143
|
+
getHours() {
|
|
144
|
+
return this.getTpsComponents().hour;
|
|
145
|
+
}
|
|
146
|
+
getUTCHours() {
|
|
147
|
+
return this.getTpsComponents().hour;
|
|
148
|
+
}
|
|
149
|
+
getMinutes() {
|
|
150
|
+
return this.getTpsComponents().minute;
|
|
151
|
+
}
|
|
152
|
+
getUTCMinutes() {
|
|
153
|
+
return this.getTpsComponents().minute;
|
|
154
|
+
}
|
|
155
|
+
getSeconds() {
|
|
156
|
+
return this.getTpsComponents().second;
|
|
157
|
+
}
|
|
158
|
+
getUTCSeconds() {
|
|
159
|
+
return this.getTpsComponents().second;
|
|
160
|
+
}
|
|
161
|
+
getMilliseconds() {
|
|
162
|
+
return this.getTpsComponents().millisecond;
|
|
163
|
+
}
|
|
164
|
+
getUTCMilliseconds() {
|
|
165
|
+
return this.getTpsComponents().millisecond;
|
|
166
|
+
}
|
|
167
|
+
[Symbol.toPrimitive](hint) {
|
|
168
|
+
if (hint === "number")
|
|
169
|
+
return this.valueOf();
|
|
170
|
+
return this.toString();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
exports.TpsDate = TpsDate;
|
|
174
|
+
//# sourceMappingURL=date.js.map
|
package/dist/date.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.js","sourceRoot":"","sources":["../src/date.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TPS DriverManager
|
|
3
|
+
* Manages the registry of calendar driver plugins.
|
|
4
|
+
*/
|
|
5
|
+
import { CalendarDriver } from "./types";
|
|
6
|
+
/**
|
|
7
|
+
* A dedicated registry for TPS calendar driver plugins.
|
|
8
|
+
* The global `TPS` class exposes a shared singleton instance (`TPS.driverManager`).
|
|
9
|
+
*/
|
|
10
|
+
export declare class DriverManager {
|
|
11
|
+
private readonly registry;
|
|
12
|
+
/**
|
|
13
|
+
* Registers a calendar driver.
|
|
14
|
+
* Overwrites any previously registered driver with the same code.
|
|
15
|
+
*/
|
|
16
|
+
register(driver: CalendarDriver): void;
|
|
17
|
+
/**
|
|
18
|
+
* Returns the driver registered for the given calendar code, or `undefined`.
|
|
19
|
+
*/
|
|
20
|
+
get(code: string): CalendarDriver | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Returns `true` if a driver with the given code has been registered.
|
|
23
|
+
*/
|
|
24
|
+
has(code: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Returns an array of all registered calendar codes.
|
|
27
|
+
*/
|
|
28
|
+
list(): string[];
|
|
29
|
+
/**
|
|
30
|
+
* Removes a driver from the registry.
|
|
31
|
+
* Returns `true` if the driver existed and was removed.
|
|
32
|
+
*/
|
|
33
|
+
unregister(code: string): boolean;
|
|
34
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TPS DriverManager
|
|
4
|
+
* Manages the registry of calendar driver plugins.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.DriverManager = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* A dedicated registry for TPS calendar driver plugins.
|
|
10
|
+
* The global `TPS` class exposes a shared singleton instance (`TPS.driverManager`).
|
|
11
|
+
*/
|
|
12
|
+
class DriverManager {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.registry = new Map();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Registers a calendar driver.
|
|
18
|
+
* Overwrites any previously registered driver with the same code.
|
|
19
|
+
*/
|
|
20
|
+
register(driver) {
|
|
21
|
+
if (!driver || !driver.code) {
|
|
22
|
+
throw new Error("DriverManager: driver must have a valid `code` string.");
|
|
23
|
+
}
|
|
24
|
+
this.registry.set(driver.code, driver);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Returns the driver registered for the given calendar code, or `undefined`.
|
|
28
|
+
*/
|
|
29
|
+
get(code) {
|
|
30
|
+
return this.registry.get(code);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Returns `true` if a driver with the given code has been registered.
|
|
34
|
+
*/
|
|
35
|
+
has(code) {
|
|
36
|
+
return this.registry.has(code);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Returns an array of all registered calendar codes.
|
|
40
|
+
*/
|
|
41
|
+
list() {
|
|
42
|
+
return Array.from(this.registry.keys());
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Removes a driver from the registry.
|
|
46
|
+
* Returns `true` if the driver existed and was removed.
|
|
47
|
+
*/
|
|
48
|
+
unregister(code) {
|
|
49
|
+
return this.registry.delete(code);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.DriverManager = DriverManager;
|
|
53
|
+
//# sourceMappingURL=driver-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver-manager.js","sourceRoot":"","sources":["../src/driver-manager.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH;;;GAGG;AACH,MAAa,aAAa;IAA1B;QACmB,aAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IAyChE,CAAC;IAvCC;;;OAGG;IACH,QAAQ,CAAC,MAAsB;QAC7B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;CACF;AA1CD,sCA0CC"}
|