pond-ts 0.11.2 → 0.11.4
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/dist/Event.d.ts +53 -0
- package/dist/Event.d.ts.map +1 -1
- package/dist/Event.js +53 -0
- package/dist/Event.js.map +1 -1
- package/dist/LiveSeries.d.ts +99 -1
- package/dist/LiveSeries.d.ts.map +1 -1
- package/dist/LiveSeries.js +116 -0
- package/dist/LiveSeries.js.map +1 -1
- package/dist/TimeSeries.d.ts +9 -0
- package/dist/TimeSeries.d.ts.map +1 -1
- package/dist/TimeSeries.js +14 -102
- package/dist/TimeSeries.js.map +1 -1
- package/dist/json.d.ts +35 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +142 -0
- package/dist/json.js.map +1 -0
- package/dist/types-public.d.ts +45 -0
- package/dist/types-public.d.ts.map +1 -0
- package/dist/types-public.js +2 -0
- package/dist/types-public.js.map +1 -0
- package/package.json +5 -1
package/dist/json.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON ↔ typed-row conversion primitives.
|
|
3
|
+
*
|
|
4
|
+
* Used by `TimeSeries.{toJSON,fromJSON}`, `LiveSeries.{toJSON,fromJSON,pushJson}`,
|
|
5
|
+
* and `Event.{toJsonRow}`. Extracted into its own module so `Event`
|
|
6
|
+
* can import the serialization helpers without depending on
|
|
7
|
+
* `TimeSeries` (which depends on `Event`, creating a cycle).
|
|
8
|
+
*/
|
|
9
|
+
import { Interval } from './Interval.js';
|
|
10
|
+
import { Time } from './Time.js';
|
|
11
|
+
import { TimeRange } from './TimeRange.js';
|
|
12
|
+
import { parseTimestampString } from './calendar.js';
|
|
13
|
+
/**
|
|
14
|
+
* Detects the object-shape variant of a JSON row.
|
|
15
|
+
*/
|
|
16
|
+
export function isJsonObjectRow(value) {
|
|
17
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
18
|
+
}
|
|
19
|
+
function parseJsonTimestamp(value, options = {}) {
|
|
20
|
+
if (typeof value === 'number') {
|
|
21
|
+
if (!Number.isFinite(value)) {
|
|
22
|
+
throw new TypeError('expected finite timestamp');
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
if (typeof value === 'string') {
|
|
27
|
+
return parseTimestampString(value, options);
|
|
28
|
+
}
|
|
29
|
+
if (value instanceof Date) {
|
|
30
|
+
return value.getTime();
|
|
31
|
+
}
|
|
32
|
+
throw new TypeError('expected timestamp as number or string');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Translate a JSON-shape key into a typed `EventKey` instance.
|
|
36
|
+
* Mirrors `TimeSeries.fromJSON`'s parsing rules: numeric/string/Date
|
|
37
|
+
* for time keys; tuple or object form for timeRange/interval.
|
|
38
|
+
*/
|
|
39
|
+
export function parseJsonKey(kind, value, options = {}) {
|
|
40
|
+
if (value instanceof Time ||
|
|
41
|
+
value instanceof TimeRange ||
|
|
42
|
+
value instanceof Interval) {
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
switch (kind) {
|
|
46
|
+
case 'time':
|
|
47
|
+
return new Time(parseJsonTimestamp(value, options));
|
|
48
|
+
case 'timeRange':
|
|
49
|
+
if (Array.isArray(value) && value.length === 2) {
|
|
50
|
+
return new TimeRange({
|
|
51
|
+
start: parseJsonTimestamp(value[0], options),
|
|
52
|
+
end: parseJsonTimestamp(value[1], options),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if (typeof value === 'object' &&
|
|
56
|
+
value !== null &&
|
|
57
|
+
'start' in value &&
|
|
58
|
+
'end' in value &&
|
|
59
|
+
!('value' in value)) {
|
|
60
|
+
return new TimeRange({
|
|
61
|
+
start: parseJsonTimestamp(value.start, options),
|
|
62
|
+
end: parseJsonTimestamp(value.end, options),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
throw new TypeError('expected timeRange as [start, end] or { start, end }');
|
|
66
|
+
case 'interval':
|
|
67
|
+
if (Array.isArray(value) && value.length === 3) {
|
|
68
|
+
return new Interval({
|
|
69
|
+
value: value[0],
|
|
70
|
+
start: parseJsonTimestamp(value[1], options),
|
|
71
|
+
end: parseJsonTimestamp(value[2], options),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (typeof value === 'object' &&
|
|
75
|
+
value !== null &&
|
|
76
|
+
'value' in value &&
|
|
77
|
+
'start' in value &&
|
|
78
|
+
'end' in value) {
|
|
79
|
+
return new Interval({
|
|
80
|
+
value: value.value,
|
|
81
|
+
start: parseJsonTimestamp(value.start, options),
|
|
82
|
+
end: parseJsonTimestamp(value.end, options),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
throw new TypeError('expected interval as [value, start, end] or { value, start, end }');
|
|
86
|
+
default:
|
|
87
|
+
throw new TypeError(`unsupported first-column kind '${kind}'`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Translate one JSON-shape row (array or object form) into a typed
|
|
92
|
+
* row tuple. Nulls become `undefined`; the key is parsed via
|
|
93
|
+
* {@link parseJsonKey}.
|
|
94
|
+
*/
|
|
95
|
+
export function parseJsonRow(schema, row, options = {}) {
|
|
96
|
+
const values = isJsonObjectRow(row)
|
|
97
|
+
? schema.map((column) => row[column.name])
|
|
98
|
+
: row;
|
|
99
|
+
return Object.freeze(values.map((value, index) => {
|
|
100
|
+
if (value === null) {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
const column = schema[index];
|
|
104
|
+
if (index === 0) {
|
|
105
|
+
return parseJsonKey(column.kind, value, options);
|
|
106
|
+
}
|
|
107
|
+
return value;
|
|
108
|
+
}));
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Translate an array of JSON-shape rows into typed rows.
|
|
112
|
+
*/
|
|
113
|
+
export function parseJsonRows(schema, rows, options = {}) {
|
|
114
|
+
return rows.map((row) => parseJsonRow(schema, row, options));
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Serialize an `EventKey` into the JSON-shape representation used
|
|
118
|
+
* on the wire.
|
|
119
|
+
*/
|
|
120
|
+
export function serializeJsonKey(kind, key, rowFormat) {
|
|
121
|
+
if (kind === 'time') {
|
|
122
|
+
return key.begin();
|
|
123
|
+
}
|
|
124
|
+
if (kind === 'timeRange') {
|
|
125
|
+
return rowFormat === 'object'
|
|
126
|
+
? { start: key.begin(), end: key.end() }
|
|
127
|
+
: [key.begin(), key.end()];
|
|
128
|
+
}
|
|
129
|
+
const interval = key;
|
|
130
|
+
return rowFormat === 'object'
|
|
131
|
+
? { value: interval.value, start: interval.begin(), end: interval.end() }
|
|
132
|
+
: [interval.value, interval.begin(), interval.end()];
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Translate a column cell to its JSON-shape representation:
|
|
136
|
+
* `undefined` becomes `null` so wire messages round-trip through
|
|
137
|
+
* `JSON.stringify`.
|
|
138
|
+
*/
|
|
139
|
+
export function serializeJsonValue(value) {
|
|
140
|
+
return value === undefined ? null : value;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=json.js.map
|
package/dist/json.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-only entry point at `pond-ts/types`.
|
|
3
|
+
*
|
|
4
|
+
* Lets schema-as-contract consumers — packages whose only job is to
|
|
5
|
+
* declare the `as const` schema that flows through producer /
|
|
6
|
+
* aggregator / web — constrain literals via `satisfies SeriesSchema`
|
|
7
|
+
* without taking a runtime dependency on `pond-ts`. The emitted JS
|
|
8
|
+
* for this entry is `export {};` (zero runtime); the .d.ts is a
|
|
9
|
+
* curated re-export of `types.ts`, so the source of truth doesn't
|
|
10
|
+
* drift.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* import type { SeriesSchema } from 'pond-ts/types';
|
|
15
|
+
*
|
|
16
|
+
* export const schema = [
|
|
17
|
+
* { name: 'time', kind: 'time' },
|
|
18
|
+
* { name: 'cpu', kind: 'number' },
|
|
19
|
+
* { name: 'host', kind: 'string' },
|
|
20
|
+
* ] as const satisfies SeriesSchema;
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* **What's included:** schema-shape types (`SeriesSchema`,
|
|
24
|
+
* `ColumnDef`, `FirstColumn`, `ValueColumn`, `ScalarKind`,
|
|
25
|
+
* `ColumnValue`, `ArrayValue`, ...), row-shape types (`RowForSchema`,
|
|
26
|
+
* `EventDataForSchema`, `EventForSchema`, `EventKeyForKind`,
|
|
27
|
+
* `EventKeyForSchema`), and wire (JSON-shape) types
|
|
28
|
+
* (`TimeSeriesJsonInput`, `JsonRowForSchema`,
|
|
29
|
+
* `JsonObjectRowForSchema`, `JsonValueForKind`, `JsonRowFormat`,
|
|
30
|
+
* `JsonTimestampInput`, `JsonTimeRangeInput`, `JsonIntervalInput`).
|
|
31
|
+
*
|
|
32
|
+
* **What's deliberately not included:**
|
|
33
|
+
* - **Operator-derived schema types** (`RollingSchema`,
|
|
34
|
+
* `AggregateSchema`, etc.) — if you're using rolling, you're using
|
|
35
|
+
* the runtime, and the main entry already covers you.
|
|
36
|
+
* - **`LiveSource` and other source interfaces** — they describe a
|
|
37
|
+
* runtime contract (event subscription, dispatch). Schema-as-
|
|
38
|
+
* contract consumers don't implement sources; if you're writing
|
|
39
|
+
* one, import from the main entry.
|
|
40
|
+
*
|
|
41
|
+
* Existing `import { SeriesSchema } from 'pond-ts'` calls keep
|
|
42
|
+
* working unchanged.
|
|
43
|
+
*/
|
|
44
|
+
export type { ArrayValue, ColumnDef, ColumnValue, EventDataForSchema, EventForSchema, EventKeyForKind, EventKeyForSchema, FirstColKind, FirstColumn, JsonIntervalInput, JsonObjectRowForSchema, JsonRowForSchema, JsonRowFormat, JsonTimeRangeInput, JsonTimestampInput, JsonValueForKind, RowForSchema, ScalarKind, ScalarValue, SeriesSchema, TimeSeriesInput, TimeSeriesJsonInput, ValueColumn, ValueForKind, } from './types.js';
|
|
45
|
+
//# sourceMappingURL=types-public.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-public.d.ts","sourceRoot":"","sources":["../src/types-public.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,YAAY,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-public.js","sourceRoot":"","sources":["../src/types-public.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pond-ts",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.4",
|
|
4
4
|
"description": "TypeScript-first time series primitives",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
".": {
|
|
16
16
|
"types": "./dist/index.d.ts",
|
|
17
17
|
"import": "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./types": {
|
|
20
|
+
"types": "./dist/types-public.d.ts",
|
|
21
|
+
"import": "./dist/types-public.js"
|
|
18
22
|
}
|
|
19
23
|
},
|
|
20
24
|
"engines": {
|