edfcore 0.3.49 → 0.3.51
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 +36 -0
- package/dist/annotations-query.d.ts +9 -1
- package/dist/annotations-query.d.ts.map +1 -1
- package/dist/annotations-query.js +9 -1
- package/dist/annotations-query.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/package.json +1 -1
- package/src/annotations-query.ts +9 -1
- package/src/constants.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,42 @@ 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.3.51
|
|
10
|
+
|
|
11
|
+
- **Corrected** the `filterAnnotationsByText` docblock, which said a string "matches on the exact
|
|
12
|
+
trimmed text". Nothing is trimmed: `annotation.text` is the TAL's bytes as written — `api-types.md`
|
|
13
|
+
calls the field "verbatim; never trimmed, never case-folded" — and the comparison is a bare `===`.
|
|
14
|
+
- The word mattered because the failure it hides is silent. An event a scorer spelled
|
|
15
|
+
`'Sleep stage W '` is not matched by `'Sleep stage W'`, and the call returns an empty list
|
|
16
|
+
rather than an error, so a hypnogram over a file with a padded vocabulary comes back with no
|
|
17
|
+
stages and no explanation.
|
|
18
|
+
- Both the docblock and `api-helpers.md` now say verbatim on both sides, and both name the
|
|
19
|
+
one-liner for the other question: `filterAnnotationsByText(events, (t) => t.trim() === label)`.
|
|
20
|
+
- No behaviour change — `edfcore` matched verbatim before and matches verbatim now. The exact rule
|
|
21
|
+
is pinned by a test in both directions, so the comment cannot drift away from it again.
|
|
22
|
+
|
|
23
|
+
## 0.3.50
|
|
24
|
+
|
|
25
|
+
- **Fixed** the "Renamed in 0.3.0" note in `api-helpers.md`, which was attached to the wrong family
|
|
26
|
+
of functions and so told a reader migrating from 0.2 to call a function that answers a different
|
|
27
|
+
question.
|
|
28
|
+
- The note sat at the end of **The recording-aware form**, saying that `sampleAt`,
|
|
29
|
+
`sampleStartTicksOf` and `sampleStartSecondsOf` "were `sampleIndexAt`, `sampleStartTicks` and
|
|
30
|
+
`sampleStartSeconds`" and that "the behaviour did not change". The rename table in
|
|
31
|
+
`migrating-to-0-3.md` and the 0.3.0 CHANGELOG entry both say those became **`gridSampleIndexAt`,
|
|
32
|
+
`gridSampleStartTicks` and `gridSampleStartSeconds`** — the family documented in the section
|
|
33
|
+
above.
|
|
34
|
+
- The two families are exactly the distinction the rename existed to make. On a six-record file
|
|
35
|
+
with a seven-second hole, `gridSampleStartSeconds(signal, 12, d)` is `3` and
|
|
36
|
+
`sampleStartSecondsOf(recording, i, 12)` is `10`. A reader who followed the note moved every
|
|
37
|
+
answer by the gaps, under a sentence promising nothing had changed. On a file with gaps and a
|
|
38
|
+
probed index, `sampleStartTicksOf` throws instead.
|
|
39
|
+
- The note now sits under the grid functions, and says out loud that the recording-aware family
|
|
40
|
+
below is a different one.
|
|
41
|
+
- `tests/integration/rename-note.test.ts` derives the rename from the migration table, checks the
|
|
42
|
+
CHANGELOG spells it the same way, and requires the code block the note is attached to to import
|
|
43
|
+
the names the table produces. A note that drifts onto the wrong family is a test failure.
|
|
44
|
+
|
|
9
45
|
## 0.3.49
|
|
10
46
|
|
|
11
47
|
- **Fixed** `splitSubfields` splitting the EDF+ identification fields on JavaScript's `\s` instead
|
|
@@ -31,10 +31,18 @@ export declare function filterAnnotationsByTime(annotations: readonly EdfAnnotat
|
|
|
31
31
|
/**
|
|
32
32
|
* The annotations whose text matches.
|
|
33
33
|
*
|
|
34
|
-
* A string matches
|
|
34
|
+
* A string matches the text VERBATIM, because annotation vocabularies are controlled —
|
|
35
35
|
* `Sleep stage W` is a fixed token, and a substring match on `W` would also catch `Sleep stage
|
|
36
36
|
* REM` in files that spell it `W/REM`. Pass a predicate or a RegExp when you want something
|
|
37
37
|
* looser; edfcore does not guess which you meant.
|
|
38
|
+
*
|
|
39
|
+
* Verbatim means verbatim, in both directions: `annotation.text` is the TAL's bytes as written and
|
|
40
|
+
* is never trimmed (`api-types.md` says so of the field itself), so an event a scorer spelled
|
|
41
|
+
* `'Sleep stage W '` is not matched by `'Sleep stage W'`, and a query with its own stray space
|
|
42
|
+
* matches nothing. This docblock used to say "the exact trimmed text", which is neither what this
|
|
43
|
+
* function does nor what the field holds, and the failure it describes is silent: a padded
|
|
44
|
+
* vocabulary returns an empty list rather than an error (corrected in 0.3.51). For such a file,
|
|
45
|
+
* pass the predicate that says what you mean — `(text) => text.trim() === label`.
|
|
38
46
|
*/
|
|
39
47
|
export declare function filterAnnotationsByText(annotations: readonly EdfAnnotation[], match: string | RegExp | ((text: string) => boolean)): readonly EdfAnnotation[];
|
|
40
48
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotations-query.d.ts","sourceRoot":"","sources":["../src/annotations-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAErE;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,SAAS,aAAa,EAAE,EACrC,MAAM,EAAE,mBAAmB,GAC1B,SAAS,aAAa,EAAE,CAsB1B;AAED
|
|
1
|
+
{"version":3,"file":"annotations-query.d.ts","sourceRoot":"","sources":["../src/annotations-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAErE;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,SAAS,aAAa,EAAE,EACrC,MAAM,EAAE,mBAAmB,GAC1B,SAAS,aAAa,EAAE,CAsB1B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,SAAS,aAAa,EAAE,EACrC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,GACnD,SAAS,aAAa,EAAE,CAU1B;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,SAAS,aAAa,EAAE,GACpC,aAAa,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAQlE;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,SAAS,aAAa,EAAE,EACrC,OAAO,EAAE,MAAM,GACd,SAAS,aAAa,EAAE,CAS1B"}
|
|
@@ -52,10 +52,18 @@ export function filterAnnotationsByTime(annotations, window) {
|
|
|
52
52
|
/**
|
|
53
53
|
* The annotations whose text matches.
|
|
54
54
|
*
|
|
55
|
-
* A string matches
|
|
55
|
+
* A string matches the text VERBATIM, because annotation vocabularies are controlled —
|
|
56
56
|
* `Sleep stage W` is a fixed token, and a substring match on `W` would also catch `Sleep stage
|
|
57
57
|
* REM` in files that spell it `W/REM`. Pass a predicate or a RegExp when you want something
|
|
58
58
|
* looser; edfcore does not guess which you meant.
|
|
59
|
+
*
|
|
60
|
+
* Verbatim means verbatim, in both directions: `annotation.text` is the TAL's bytes as written and
|
|
61
|
+
* is never trimmed (`api-types.md` says so of the field itself), so an event a scorer spelled
|
|
62
|
+
* `'Sleep stage W '` is not matched by `'Sleep stage W'`, and a query with its own stray space
|
|
63
|
+
* matches nothing. This docblock used to say "the exact trimmed text", which is neither what this
|
|
64
|
+
* function does nor what the field holds, and the failure it describes is silent: a padded
|
|
65
|
+
* vocabulary returns an empty list rather than an error (corrected in 0.3.51). For such a file,
|
|
66
|
+
* pass the predicate that says what you mean — `(text) => text.trim() === label`.
|
|
59
67
|
*/
|
|
60
68
|
export function filterAnnotationsByText(annotations, match) {
|
|
61
69
|
const test = typeof match === 'string'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotations-query.js","sourceRoot":"","sources":["../src/annotations-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,WAAqC,EACrC,MAA2B;IAE3B,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACzD,IAAI,EAAE,IAAI,IAAI;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEzC,OAAO,MAAM,CAAC,MAAM,CAClB,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE;QAChC,MAAM,KAAK,GAAG,UAAU,CAAC,yBAAyB,CAAC;QACnD,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,UAAU,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;QACrD,0FAA0F;QAC1F,yFAAyF;QACzF,EAAE;QACF,4EAA4E;QAC5E,2FAA2F;QAC3F,4FAA4F;QAC5F,4FAA4F;QAC5F,0FAA0F;QAC1F,2FAA2F;QAC3F,yCAAyC;QACzC,OAAO,KAAK,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"annotations-query.js","sourceRoot":"","sources":["../src/annotations-query.ts"],"names":[],"mappings":"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"}
|
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.3.
|
|
112
|
+
export declare const VERSION = "0.3.51";
|
|
113
113
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.js
CHANGED
package/package.json
CHANGED
package/src/annotations-query.ts
CHANGED
|
@@ -61,10 +61,18 @@ export function filterAnnotationsByTime(
|
|
|
61
61
|
/**
|
|
62
62
|
* The annotations whose text matches.
|
|
63
63
|
*
|
|
64
|
-
* A string matches
|
|
64
|
+
* A string matches the text VERBATIM, because annotation vocabularies are controlled —
|
|
65
65
|
* `Sleep stage W` is a fixed token, and a substring match on `W` would also catch `Sleep stage
|
|
66
66
|
* REM` in files that spell it `W/REM`. Pass a predicate or a RegExp when you want something
|
|
67
67
|
* looser; edfcore does not guess which you meant.
|
|
68
|
+
*
|
|
69
|
+
* Verbatim means verbatim, in both directions: `annotation.text` is the TAL's bytes as written and
|
|
70
|
+
* is never trimmed (`api-types.md` says so of the field itself), so an event a scorer spelled
|
|
71
|
+
* `'Sleep stage W '` is not matched by `'Sleep stage W'`, and a query with its own stray space
|
|
72
|
+
* matches nothing. This docblock used to say "the exact trimmed text", which is neither what this
|
|
73
|
+
* function does nor what the field holds, and the failure it describes is silent: a padded
|
|
74
|
+
* vocabulary returns an empty list rather than an error (corrected in 0.3.51). For such a file,
|
|
75
|
+
* pass the predicate that says what you mean — `(text) => text.trim() === label`.
|
|
68
76
|
*/
|
|
69
77
|
export function filterAnnotationsByText(
|
|
70
78
|
annotations: readonly EdfAnnotation[],
|
package/src/constants.ts
CHANGED