pond-ts 0.1.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/LICENSE +21 -0
- package/README.md +348 -0
- package/dist/BoundedSequence.d.ts +28 -0
- package/dist/BoundedSequence.d.ts.map +1 -0
- package/dist/BoundedSequence.js +70 -0
- package/dist/BoundedSequence.js.map +1 -0
- package/dist/Event.d.ts +84 -0
- package/dist/Event.d.ts.map +1 -0
- package/dist/Event.js +162 -0
- package/dist/Event.js.map +1 -0
- package/dist/Interval.d.ts +51 -0
- package/dist/Interval.d.ts.map +1 -0
- package/dist/Interval.js +130 -0
- package/dist/Interval.js.map +1 -0
- package/dist/Sequence.d.ts +80 -0
- package/dist/Sequence.d.ts.map +1 -0
- package/dist/Sequence.js +197 -0
- package/dist/Sequence.js.map +1 -0
- package/dist/Time.d.ts +43 -0
- package/dist/Time.d.ts.map +1 -0
- package/dist/Time.js +78 -0
- package/dist/Time.js.map +1 -0
- package/dist/TimeRange.d.ts +45 -0
- package/dist/TimeRange.d.ts.map +1 -0
- package/dist/TimeRange.js +144 -0
- package/dist/TimeRange.js.map +1 -0
- package/dist/TimeSeries.d.ts +337 -0
- package/dist/TimeSeries.d.ts.map +1 -0
- package/dist/TimeSeries.js +1217 -0
- package/dist/TimeSeries.js.map +1 -0
- package/dist/calendar.d.ts +24 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +96 -0
- package/dist/calendar.js.map +1 -0
- package/dist/errors.d.ts +4 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +7 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/temporal.d.ts +37 -0
- package/dist/temporal.d.ts.map +1 -0
- package/dist/temporal.js +29 -0
- package/dist/temporal.js.map +1 -0
- package/dist/types.d.ts +175 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validate.d.ts +3 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +145 -0
- package/dist/validate.js.map +1 -0
- package/package.json +44 -0
package/dist/validate.js
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { Interval } from './Interval.js';
|
|
2
|
+
import { Event } from './Event.js';
|
|
3
|
+
import { Time } from './Time.js';
|
|
4
|
+
import { TimeRange } from './TimeRange.js';
|
|
5
|
+
import { ValidationError } from './errors.js';
|
|
6
|
+
const FIRST_COLUMN_KINDS = new Set([
|
|
7
|
+
'time',
|
|
8
|
+
'interval',
|
|
9
|
+
'timeRange',
|
|
10
|
+
]);
|
|
11
|
+
function assertCellKind(kind, value, row, col) {
|
|
12
|
+
if (value === undefined) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
switch (kind) {
|
|
16
|
+
case 'time': {
|
|
17
|
+
const ok = value instanceof Time ||
|
|
18
|
+
(value instanceof Date && Number.isFinite(value.getTime())) ||
|
|
19
|
+
(typeof value === 'number' && Number.isFinite(value));
|
|
20
|
+
if (!ok) {
|
|
21
|
+
throw new ValidationError(`row ${row} col ${col}: expected time as Time, Date or finite number`);
|
|
22
|
+
}
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
case 'interval': {
|
|
26
|
+
const ok = value instanceof Interval ||
|
|
27
|
+
(Array.isArray(value) &&
|
|
28
|
+
value.length === 3 &&
|
|
29
|
+
(typeof value[0] === 'string' || typeof value[0] === 'number')) ||
|
|
30
|
+
(!Array.isArray(value) &&
|
|
31
|
+
typeof value === 'object' &&
|
|
32
|
+
value !== null &&
|
|
33
|
+
'value' in value &&
|
|
34
|
+
'start' in value &&
|
|
35
|
+
'end' in value);
|
|
36
|
+
if (!ok) {
|
|
37
|
+
throw new ValidationError(`row ${row} col ${col}: expected interval as Interval or { value, start, end }`);
|
|
38
|
+
}
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
case 'timeRange': {
|
|
42
|
+
const ok = value instanceof TimeRange ||
|
|
43
|
+
(Array.isArray(value) && value.length === 2) ||
|
|
44
|
+
(!Array.isArray(value) &&
|
|
45
|
+
typeof value === 'object' &&
|
|
46
|
+
value !== null &&
|
|
47
|
+
'start' in value &&
|
|
48
|
+
'end' in value);
|
|
49
|
+
if (!ok) {
|
|
50
|
+
throw new ValidationError(`row ${row} col ${col}: expected timeRange as TimeRange or { start, end }`);
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
case 'number': {
|
|
55
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
56
|
+
throw new ValidationError(`row ${row} col ${col}: expected finite number`);
|
|
57
|
+
}
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
case 'string': {
|
|
61
|
+
if (typeof value !== 'string') {
|
|
62
|
+
throw new ValidationError(`row ${row} col ${col}: expected string`);
|
|
63
|
+
}
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
case 'boolean': {
|
|
67
|
+
if (typeof value !== 'boolean') {
|
|
68
|
+
throw new ValidationError(`row ${row} col ${col}: expected boolean`);
|
|
69
|
+
}
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
default:
|
|
73
|
+
throw new ValidationError(`row ${row} col ${col}: unknown kind '${kind}'`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function normalizeKey(kind, value, row, col) {
|
|
77
|
+
try {
|
|
78
|
+
switch (kind) {
|
|
79
|
+
case 'time':
|
|
80
|
+
return value instanceof Time ? value : new Time(value);
|
|
81
|
+
case 'timeRange':
|
|
82
|
+
return value instanceof TimeRange
|
|
83
|
+
? value
|
|
84
|
+
: new TimeRange(value);
|
|
85
|
+
case 'interval':
|
|
86
|
+
return value instanceof Interval
|
|
87
|
+
? value
|
|
88
|
+
: new Interval(value);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
const message = error instanceof Error ? error.message : 'invalid key';
|
|
93
|
+
throw new ValidationError(`row ${row} col ${col}: ${message}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function compareKeys(left, right) {
|
|
97
|
+
if (left.begin() !== right.begin()) {
|
|
98
|
+
return left.begin() - right.begin();
|
|
99
|
+
}
|
|
100
|
+
return left.end() - right.end();
|
|
101
|
+
}
|
|
102
|
+
export function validateAndNormalize(input) {
|
|
103
|
+
const { schema, rows } = input;
|
|
104
|
+
if (!schema.length) {
|
|
105
|
+
throw new ValidationError('schema must have at least one column');
|
|
106
|
+
}
|
|
107
|
+
if (!FIRST_COLUMN_KINDS.has(schema[0].kind)) {
|
|
108
|
+
throw new ValidationError('first column must be one of: time, interval, timeRange');
|
|
109
|
+
}
|
|
110
|
+
for (let col = 1; col < schema.length; col += 1) {
|
|
111
|
+
const kind = schema[col].kind;
|
|
112
|
+
if (kind !== 'number' && kind !== 'string' && kind !== 'boolean') {
|
|
113
|
+
throw new ValidationError(`column ${col} has unsupported value kind '${kind}'`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const normalized = rows.map((row, rowIndex) => {
|
|
117
|
+
if (row.length !== schema.length) {
|
|
118
|
+
throw new ValidationError(`row ${rowIndex} expected ${schema.length} values, got ${row.length}`);
|
|
119
|
+
}
|
|
120
|
+
const keyDef = schema[0];
|
|
121
|
+
const rawKey = row[0];
|
|
122
|
+
const normalizedKey = normalizeKey(keyDef.kind, rawKey, rowIndex, 0);
|
|
123
|
+
const data = {};
|
|
124
|
+
for (let col = 1; col < schema.length; col += 1) {
|
|
125
|
+
const def = schema[col];
|
|
126
|
+
const value = row[col];
|
|
127
|
+
const required = def.required !== false;
|
|
128
|
+
if (value === undefined && required) {
|
|
129
|
+
throw new ValidationError(`row ${rowIndex} col ${col} (${def.name}) is required`);
|
|
130
|
+
}
|
|
131
|
+
assertCellKind(def.kind, value, rowIndex, col);
|
|
132
|
+
data[def.name] = value;
|
|
133
|
+
}
|
|
134
|
+
return new Event(normalizedKey, data);
|
|
135
|
+
});
|
|
136
|
+
for (let index = 1; index < normalized.length; index += 1) {
|
|
137
|
+
const previous = normalized[index - 1];
|
|
138
|
+
const current = normalized[index];
|
|
139
|
+
if (compareKeys(previous.key(), current.key()) > 0) {
|
|
140
|
+
throw new ValidationError(`row ${index} is out of order`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return Object.freeze(normalized.slice());
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "pond-ts",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "TypeScript-first time series primitives",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/pjm17971/pond-ts.git"
|
|
9
|
+
},
|
|
10
|
+
"type": "module",
|
|
11
|
+
"main": "dist/index.js",
|
|
12
|
+
"types": "dist/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">=18"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "tsc -p tsconfig.json",
|
|
27
|
+
"format": "prettier --write .",
|
|
28
|
+
"format:check": "prettier --check .",
|
|
29
|
+
"prepack": "npm run build",
|
|
30
|
+
"test": "npm run test:type && npm run test:runtime",
|
|
31
|
+
"test:runtime": "vitest run",
|
|
32
|
+
"test:type": "tsc -p tsconfig.types.json",
|
|
33
|
+
"verify": "npm run format:check && npm run build && npm test"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "^20.17.0",
|
|
37
|
+
"prettier": "^3.8.3",
|
|
38
|
+
"typescript": "^5.6.3",
|
|
39
|
+
"vitest": "^2.1.4"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@js-temporal/polyfill": "^0.5.1"
|
|
43
|
+
}
|
|
44
|
+
}
|