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/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
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types-public.js.map
@@ -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.2",
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": {