edfcore 0.6.217 → 0.6.218
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/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/recording.d.ts.map +1 -1
- package/dist/recording.js +28 -2
- package/dist/recording.js.map +1 -1
- package/docs/CHANGELOG.md +19 -0
- package/package.json +1 -1
- package/src/constants.ts +1 -1
- package/src/recording.ts +29 -2
package/dist/constants.d.ts
CHANGED
|
@@ -109,5 +109,5 @@ export declare const SIGNAL_FIELD_BLOCK_OFFSETS: {
|
|
|
109
109
|
readonly reserved: 224;
|
|
110
110
|
};
|
|
111
111
|
/** Published package version. Kept in sync with package.json by a test. */
|
|
112
|
-
export declare const VERSION = "0.6.
|
|
112
|
+
export declare const VERSION = "0.6.218";
|
|
113
113
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.js
CHANGED
package/dist/recording.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recording.d.ts","sourceRoot":"","sources":["../src/recording.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"recording.d.ts","sourceRoot":"","sources":["../src/recording.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAStD,OAAO,KAAK,EACV,UAAU,EACV,wBAAwB,EACxB,oBAAoB,EACpB,QAAQ,EAER,MAAM,EACN,SAAS,EACT,cAAc,EACd,YAAY,EACZ,SAAS,EAET,WAAW,EACX,WAAW,EACX,WAAW,EACX,eAAe,EACf,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAM9F;AAmBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CA+DrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,OAAO,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,IAAI,YAAY,CAyBnC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI,CAQhE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,uBAAuB,CAsD/F;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,SAAS,SAAS,EAAE,CAmCtB;AA0CD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQxF;AAoFD,kGAAkG;AAClG,wBAAsB,WAAW,CAC/B,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,eAAe,EAC1B,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,QAAQ,CAAC,CAInB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,eAAe,EAC1B,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,SAAS,QAAQ,EAAE,CAAC,CA6B9B;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,YAAY,EACvB,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,wBAAwB,GAAG,WAAW,GAC/C,OAAO,CAAC,oBAAoB,CAAC,CAW/B"}
|
package/dist/recording.js
CHANGED
|
@@ -29,6 +29,7 @@ import { assertByteSource } from './io/source.js';
|
|
|
29
29
|
import { buildTimeline } from './record-index.js';
|
|
30
30
|
import { decodeAnnotations } from './tal/annotations.js';
|
|
31
31
|
import { ticksToSeconds } from './tal/ticks.js';
|
|
32
|
+
import { describeValue } from './text/describe.js';
|
|
32
33
|
import { assertMonotonicOnsetArray } from './time/timeline.js';
|
|
33
34
|
import { resolveTimeWindow } from './time/window.js';
|
|
34
35
|
/**
|
|
@@ -222,8 +223,33 @@ export function channelNotFound(header, signalIndex) {
|
|
|
222
223
|
'signals, and the index is one field on each. Next: pass signal.index for every channel ' +
|
|
223
224
|
'you matched, or header.dataSignalIndices for all of the data signals.', { selector: signalIndex, availableLabels: header.signals.map((s) => s.label) });
|
|
224
225
|
}
|
|
225
|
-
|
|
226
|
-
|
|
226
|
+
/*
|
|
227
|
+
* WHY it was refused, in the third place this package resolves a signal by index.
|
|
228
|
+
*
|
|
229
|
+
* 0.6.93 drew the distinction in `getSignal`: 1.5 "is not a whole number, so it falls between
|
|
230
|
+
* two signals rather than outside them". 0.6.133 carried it to `sample-locate.ts`, whose comment
|
|
231
|
+
* says a label "is not outside anything" and calls itself "the other copy of that message". It
|
|
232
|
+
* was not the other copy — the five reading calls share THIS one, and it still answered
|
|
233
|
+
* `signalIndex EEG Fpz-Cz is outside the 3 signals this file declares` for a label, one clause
|
|
234
|
+
* above advice naming the function that takes labels, and the same sentence for `1.5` and for a
|
|
235
|
+
* bare object: the raw interpolation the branch above quotes as the defect it was fixing.
|
|
236
|
+
*/
|
|
237
|
+
// The canonical decimal string is a SPELLING of an index here, not text: `header.signals['9']`
|
|
238
|
+
// is the property access `header.signals[9]` is, which is the coercion
|
|
239
|
+
// `a-selection-from-json.test.ts` names and 0.6.135 deduplicates against. Diagnosed as the index
|
|
240
|
+
// it spells, so `'9'` stays out of range rather than becoming not a number. Nothing else coerces:
|
|
241
|
+
// `' 9 '` and `''` are not spellings this header can be indexed by, and saying 9 or 0 for them
|
|
242
|
+
// would name a signal the caller never wrote.
|
|
243
|
+
const index = typeof signalIndex === 'string' && signalIndex === String(Number(signalIndex))
|
|
244
|
+
? Number(signalIndex)
|
|
245
|
+
: signalIndex;
|
|
246
|
+
const problem = !Number.isFinite(index)
|
|
247
|
+
? `signalIndex is ${describeValue(signalIndex)}, not a number this header can be indexed by`
|
|
248
|
+
: Number.isInteger(index)
|
|
249
|
+
? `signalIndex ${index} is outside the ${header.signals.length} signals this file declares`
|
|
250
|
+
: `signalIndex ${index} is not a whole number, so it falls between two signals ` +
|
|
251
|
+
'rather than outside them';
|
|
252
|
+
return new EdfChannelNotFoundError(`${problem}. Next: pass an index from header.dataSignalIndices, or resolve one with ` +
|
|
227
253
|
'getSignal(header, label).', { selector: signalIndex, availableLabels: header.signals.map((s) => s.label) });
|
|
228
254
|
}
|
|
229
255
|
export function resolveSignals(header, signalIndices) {
|
package/dist/recording.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recording.js","sourceRoot":"","sources":["../src/recording.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"recording.js","sourceRoot":"","sources":["../src/recording.ts"],"names":[],"mappings":"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"}
|
package/docs/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,25 @@ alone does not tell you whether you were affected.
|
|
|
6
6
|
edfcore is pre-1.0. Patch releases have carried behaviour changes where the old behaviour was a
|
|
7
7
|
defect; those are called out below.
|
|
8
8
|
|
|
9
|
+
## 0.6.218
|
|
10
|
+
|
|
11
|
+
- **Fixed** the refusal the five reading calls share telling a LABEL it was outside a range it was
|
|
12
|
+
never in. `readWindow`, `readRecords`, `streamRecords` and both envelope calls answer a signal
|
|
13
|
+
index they cannot resolve through one message, and for `signalIndices: ['EEG Fpz-Cz']` it read
|
|
14
|
+
`signalIndex EEG Fpz-Cz is outside the 3 signals this file declares` — one clause above "resolve
|
|
15
|
+
one with getSignal(header, label)", the function that would have taken it.
|
|
16
|
+
- `1.5` got the same sentence, though a fraction falls between two signals rather than outside them,
|
|
17
|
+
and a bare object got `signalIndex [object Object] is outside` — the raw interpolation
|
|
18
|
+
`describeValue` exists to remove, still standing one branch below the 0.6.174 fix that quotes it.
|
|
19
|
+
- 0.6.93 drew this distinction in `getSignal` and 0.6.133 carried it to `sample-locate.ts`, whose
|
|
20
|
+
comment calls that module "the other copy of that message". It was not: this is the third place
|
|
21
|
+
the package resolves a signal by index, and the one behind every read.
|
|
22
|
+
- The canonical decimal string is unchanged. `header.signals['9']` is the property access
|
|
23
|
+
`header.signals[9]` is, so `'9'` is still an index that is out of range; `' 9 '` and `''` are
|
|
24
|
+
not spellings this header can be indexed by, and naming 9 or 0 for them would name a signal the
|
|
25
|
+
caller never wrote.
|
|
26
|
+
- An index that really is out of range keeps its sentence, because for that one it was true.
|
|
27
|
+
|
|
9
28
|
## 0.6.217
|
|
10
29
|
|
|
11
30
|
- **Fixed** `getSignal`, `findSignals` and `matchSignals` describing a header that had not arrived as
|
package/package.json
CHANGED
package/src/constants.ts
CHANGED
package/src/recording.ts
CHANGED
|
@@ -30,6 +30,7 @@ import { assertByteSource } from './io/source.js';
|
|
|
30
30
|
import { buildTimeline } from './record-index.js';
|
|
31
31
|
import { decodeAnnotations } from './tal/annotations.js';
|
|
32
32
|
import { ticksToSeconds } from './tal/ticks.js';
|
|
33
|
+
import { describeValue } from './text/describe.js';
|
|
33
34
|
import { assertMonotonicOnsetArray } from './time/timeline.js';
|
|
34
35
|
import { resolveTimeWindow } from './time/window.js';
|
|
35
36
|
import type {
|
|
@@ -268,9 +269,35 @@ export function channelNotFound(header: EdfHeader, signalIndex: number): EdfChan
|
|
|
268
269
|
{ selector: signalIndex, availableLabels: header.signals.map((s) => s.label) },
|
|
269
270
|
);
|
|
270
271
|
}
|
|
272
|
+
/*
|
|
273
|
+
* WHY it was refused, in the third place this package resolves a signal by index.
|
|
274
|
+
*
|
|
275
|
+
* 0.6.93 drew the distinction in `getSignal`: 1.5 "is not a whole number, so it falls between
|
|
276
|
+
* two signals rather than outside them". 0.6.133 carried it to `sample-locate.ts`, whose comment
|
|
277
|
+
* says a label "is not outside anything" and calls itself "the other copy of that message". It
|
|
278
|
+
* was not the other copy — the five reading calls share THIS one, and it still answered
|
|
279
|
+
* `signalIndex EEG Fpz-Cz is outside the 3 signals this file declares` for a label, one clause
|
|
280
|
+
* above advice naming the function that takes labels, and the same sentence for `1.5` and for a
|
|
281
|
+
* bare object: the raw interpolation the branch above quotes as the defect it was fixing.
|
|
282
|
+
*/
|
|
283
|
+
// The canonical decimal string is a SPELLING of an index here, not text: `header.signals['9']`
|
|
284
|
+
// is the property access `header.signals[9]` is, which is the coercion
|
|
285
|
+
// `a-selection-from-json.test.ts` names and 0.6.135 deduplicates against. Diagnosed as the index
|
|
286
|
+
// it spells, so `'9'` stays out of range rather than becoming not a number. Nothing else coerces:
|
|
287
|
+
// `' 9 '` and `''` are not spellings this header can be indexed by, and saying 9 or 0 for them
|
|
288
|
+
// would name a signal the caller never wrote.
|
|
289
|
+
const index =
|
|
290
|
+
typeof signalIndex === 'string' && signalIndex === String(Number(signalIndex))
|
|
291
|
+
? Number(signalIndex)
|
|
292
|
+
: signalIndex;
|
|
293
|
+
const problem = !Number.isFinite(index)
|
|
294
|
+
? `signalIndex is ${describeValue(signalIndex)}, not a number this header can be indexed by`
|
|
295
|
+
: Number.isInteger(index)
|
|
296
|
+
? `signalIndex ${index} is outside the ${header.signals.length} signals this file declares`
|
|
297
|
+
: `signalIndex ${index} is not a whole number, so it falls between two signals ` +
|
|
298
|
+
'rather than outside them';
|
|
271
299
|
return new EdfChannelNotFoundError(
|
|
272
|
-
|
|
273
|
-
'declares. Next: pass an index from header.dataSignalIndices, or resolve one with ' +
|
|
300
|
+
`${problem}. Next: pass an index from header.dataSignalIndices, or resolve one with ` +
|
|
274
301
|
'getSignal(header, label).',
|
|
275
302
|
{ selector: signalIndex, availableLabels: header.signals.map((s) => s.label) },
|
|
276
303
|
);
|