edfcore 0.3.47 → 0.3.49

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 CHANGED
@@ -6,6 +6,41 @@ 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.49
10
+
11
+ - **Fixed** `splitSubfields` splitting the EDF+ identification fields on JavaScript's `\s` instead
12
+ of on the ASCII space the spec names, so a NO-BREAK SPACE inside a subfield silently cut it in
13
+ two.
14
+ - EDF+ tells a writer to replace a space inside a subfield with another character and mandates
15
+ neither the character nor a way back. NBSP is one of the choices that leaves, and it is header
16
+ byte 0xA0 — which `decodeHeaderLatin1` turns into U+00A0, which `\s` matches. `Mac<NBSP>Donald`
17
+ parsed as `name: 'Mac'` with `'Donald'` demoted to `extraSubfields`.
18
+ - Nothing warned. The split **adds** a subfield rather than removing one, trailing extras are
19
+ legal under EDF+, so the count check passed and `conformant` stayed `true`.
20
+ - In `parseRecordingId` it was worse than a truncation: every code after the NBSP shifted one
21
+ position left, so `investigationCode`, `technicianCode` and `equipmentCode` each held the
22
+ previous field's value and all three looked plausible.
23
+ - The module docblock says `raw` and the subfields "both keep what the file wrote". That was true
24
+ of `raw` only. A tab or a CR in the field now also stays inside its subfield, where
25
+ `NON_ASCII_HEADER_FIELD` reports it, rather than acting as a separator the spec never named.
26
+
27
+ ## 0.3.48
28
+
29
+ - **Fixed** the identification lines in `formatHeader` and in `edfcore json --patient` using
30
+ `String.prototype.trim` on the raw 80-byte fields, which does not strip U+0000.
31
+ - A large share of real writers pad those fields with NUL rather than with space. The padding
32
+ therefore survived, and `printable` rendered every NUL as a `.`: an **empty** patient field
33
+ printed as eighty dots — which reads as redaction, not as an absent value — and a populated one
34
+ trailed dozens of dots that read as truncation. The `|| 'unknown'` fallback beside it could
35
+ never fire, because the string was never empty.
36
+ - Both now use `trimEdfField`, which strips 0x20 **and** 0x00, and which every other consumer of
37
+ these same bytes already used: `parsePatientId`, `validateRecording` and `redactDiagnostic`.
38
+ `edfcore json --patient` was leaking the same padding into JSON as a run of `\u0000`.
39
+ - This is the gap `redactDiagnostic` already names in `diagnostics/format.ts`, where the same
40
+ `.trim()`-is-not-`trimEdfField` mismatch made a redacted diagnostic print the name it had just
41
+ withheld (fixed there in 0.3.31). The module docblock's "It never invents a value: a field
42
+ edfcore could not resolve prints as `unknown`" is true again.
43
+
9
44
  ## 0.3.47
10
45
 
11
46
  - **Fixed** `formatHeader` printing a signal's `physicalDimension` unsanitised, so eight header
@@ -1 +1 @@
1
- {"version":3,"file":"cli-run.d.ts","sourceRoot":"","sources":["../src/cli-run.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH;;;;;;;;;;;GAWG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAC3C,QAAQ,CAAC,KAAK,EAAG,IAAI,CAAU;gBAEnB,OAAO,EAAE,MAAM;CAI5B;AAED,iDAAiD;AACjD,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAmCD,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAkDvD;AAwBD,wBAAsB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CA2NnE"}
1
+ {"version":3,"file":"cli-run.d.ts","sourceRoot":"","sources":["../src/cli-run.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH;;;;;;;;;;;GAWG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAC3C,QAAQ,CAAC,KAAK,EAAG,IAAI,CAAU;gBAEnB,OAAO,EAAE,MAAM;CAI5B;AAED,iDAAiD;AACjD,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAmCD,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAkDvD;AAwBD,wBAAsB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CA6NnE"}
package/dist/cli-run.js CHANGED
@@ -7,6 +7,7 @@
7
7
  * binary. This way the exit codes and the output are ordinary unit tests.
8
8
  */
9
9
  import { countAnnotationsByText } from './annotations-query.js';
10
+ import { trimEdfField } from './bytes/latin1.js';
10
11
  import { VERSION } from './constants.js';
11
12
  import { formatDiagnostics } from './diagnostics/format.js';
12
13
  import { formatHeader } from './format-header.js';
@@ -305,7 +306,9 @@ export async function runCli(args, io) {
305
306
  spanSeconds: recording.timeline.spanSeconds,
306
307
  // Patient identification is opt-in here for the same reason it is in formatHeader:
307
308
  // the obvious thing to do with this output is pipe it somewhere.
308
- ...(args.patient ? { patient: header.patient.raw.trim() } : {}),
309
+ // `trimEdfField`, for the reason formatHeader uses it: `.trim()` leaves NUL padding
310
+ // in place, and JSON.stringify escapes it into a run of `\u0000` in the value.
311
+ ...(args.patient ? { patient: trimEdfField(header.patient.raw) } : {}),
309
312
  signals: header.signals.map((signal) => ({
310
313
  index: signal.index,
311
314
  label: signal.label,
@@ -1 +1 @@
1
- {"version":3,"file":"cli-run.js","sourceRoot":"","sources":["../src/cli-run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-run.js","sourceRoot":"","sources":["../src/cli-run.ts"],"names":[],"mappings":"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"}
@@ -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.47";
112
+ export declare const VERSION = "0.3.49";
113
113
  //# sourceMappingURL=constants.d.ts.map
package/dist/constants.js CHANGED
@@ -79,5 +79,5 @@ export const SIGNAL_FIELD_BLOCK_OFFSETS = {
79
79
  reserved: 224,
80
80
  };
81
81
  /** Published package version. Kept in sync with package.json by a test. */
82
- export const VERSION = '0.3.47';
82
+ export const VERSION = '0.3.49';
83
83
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format-header.d.ts","sourceRoot":"","sources":["../src/format-header.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAmB,SAAS,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAgClF;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAsGrF"}
1
+ {"version":3,"file":"format-header.d.ts","sourceRoot":"","sources":["../src/format-header.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,KAAK,EAAmB,SAAS,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAgClF;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CA8GrF"}
@@ -11,6 +11,7 @@
11
11
  * identification unless asked — a header carries a name and a birth date, and a summary that
12
12
  * lands in a chat log or an issue tracker should not carry them by default.
13
13
  */
14
+ import { trimEdfField } from './bytes/latin1.js';
14
15
  import { TICKS_PER_SECOND } from './constants.js';
15
16
  import { summarizeDiagnostics } from './diagnostics/summary.js';
16
17
  import { printable } from './text/printable.js';
@@ -94,8 +95,16 @@ export function formatHeader(header, options) {
94
95
  // the signal-table shape exactly — ` 0 99 signals · 0 records` — and one in the recording
95
96
  // field forged a `record 9 s` line at the left margin, contradicting the real geometry
96
97
  // three lines above it (fixed in 0.3.16).
97
- lines.push(`patient ${printable(header.patient.raw.trim()) || 'unknown'}`);
98
- lines.push(`recording ${printable(header.recording.raw.trim()) || 'unknown'}`);
98
+ // `trimEdfField`, not `String.prototype.trim`. These are the untrimmed 80 bytes, and `.trim()`
99
+ // strips whitespace but NOT U+0000 — so on the NUL-padded identification fields a large share
100
+ // of real writers emit, the padding survived and `printable` turned every NUL into a `.`. An
101
+ // empty patient field printed as eighty dots, which made the `|| 'unknown'` below unreachable
102
+ // and read as redaction; a populated one trailed dots that read as truncation. It is the same
103
+ // gap `redactDiagnostic` names in diagnostics/format.ts, and every other consumer of these
104
+ // bytes — `parsePatientId`, `validateRecording`, `redactDiagnostic` — already used
105
+ // `trimEdfField` (fixed in 0.3.48).
106
+ lines.push(`patient ${printable(trimEdfField(header.patient.raw)) || 'unknown'}`);
107
+ lines.push(`recording ${printable(trimEdfField(header.recording.raw)) || 'unknown'}`);
99
108
  }
100
109
  lines.push('');
101
110
  lines.push(' # label kind rate range');
@@ -1 +1 @@
1
- {"version":3,"file":"format-header.js","sourceRoot":"","sources":["../src/format-header.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"format-header.js","sourceRoot":"","sources":["../src/format-header.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"identification.d.ts","sourceRoot":"","sources":["../../src/header/identification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAmB,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAejF,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAoCD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE,cAAc,GACnB,YAAY,CA0Cd;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE,cAAc,GACnB,cAAc,CA+ChB"}
1
+ {"version":3,"file":"identification.d.ts","sourceRoot":"","sources":["../../src/header/identification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAmB,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAejF,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AA+CD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE,cAAc,GACnB,YAAY,CA0Cd;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE,cAAc,GACnB,cAAc,CA+ChB"}
@@ -30,12 +30,23 @@ const PATIENT_SUBFIELD_COUNT = 4;
30
30
  const RECORDING_SUBFIELD_COUNT = 5;
31
31
  const PATIENT_GRAMMAR = 'code sex(F|M) birthdate(dd-MMM-yyyy) name';
32
32
  const RECORDING_GRAMMAR = 'Startdate startdate(dd-MMM-yyyy) investigationCode technicianCode equipmentCode';
33
- /** Subfields are separated by spaces and may not contain one. Runs are tolerated. */
33
+ /**
34
+ * Subfields are separated by spaces and may not contain one. Runs are tolerated.
35
+ *
36
+ * The ASCII space the spec names, not `/\s+/`. JavaScript's `\s` also matches U+00A0, which is
37
+ * what header byte 0xA0 decodes to — and NO-BREAK SPACE is one of the characters a writer may
38
+ * legitimately pick when EDF+ tells it to replace a space inside a subfield. Splitting on it cut
39
+ * `Mac Donald` into two subfields, so `name` held only `Mac`; and because the split ADDS a
40
+ * subfield rather than removing one, the count check still passed and `conformant` stayed true
41
+ * with no diagnostic. In `parseRecordingId` it shifted every code after it by one position. The
42
+ * docblock's "`raw` and the subfields both keep what the file wrote" was not true of the
43
+ * subfields (fixed in 0.3.49).
44
+ */
34
45
  function splitSubfields(raw) {
35
46
  const text = trimEdfField(raw);
36
47
  if (text.length === 0)
37
48
  return [];
38
- return text.split(/\s+/).filter((part) => part.length > 0);
49
+ return text.split(' ').filter((part) => part.length > 0);
39
50
  }
40
51
  /** `'X'` is the spec's "unknown", and an absent subfield is unknown too. */
41
52
  function subfieldValue(subfields, index) {
@@ -1 +1 @@
1
- {"version":3,"file":"identification.js","sourceRoot":"","sources":["../../src/header/identification.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"identification.js","sourceRoot":"","sources":["../../src/header/identification.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "edfcore",
3
- "version": "0.3.47",
3
+ "version": "0.3.49",
4
4
  "description": "Modern, typed, zero-dependency reader for EDF, EDF+, BDF and BDF+ biosignal files. Works in browsers and Node with true random access.",
5
5
  "keywords": [
6
6
  "edf",
package/src/cli-run.ts CHANGED
@@ -8,6 +8,7 @@
8
8
  */
9
9
 
10
10
  import { countAnnotationsByText } from './annotations-query.js';
11
+ import { trimEdfField } from './bytes/latin1.js';
11
12
  import { VERSION } from './constants.js';
12
13
  import { formatDiagnostics } from './diagnostics/format.js';
13
14
  import { formatHeader } from './format-header.js';
@@ -358,7 +359,9 @@ export async function runCli(args: Args, io: CliIo): Promise<number> {
358
359
  spanSeconds: recording.timeline.spanSeconds,
359
360
  // Patient identification is opt-in here for the same reason it is in formatHeader:
360
361
  // the obvious thing to do with this output is pipe it somewhere.
361
- ...(args.patient ? { patient: header.patient.raw.trim() } : {}),
362
+ // `trimEdfField`, for the reason formatHeader uses it: `.trim()` leaves NUL padding
363
+ // in place, and JSON.stringify escapes it into a run of `\u0000` in the value.
364
+ ...(args.patient ? { patient: trimEdfField(header.patient.raw) } : {}),
362
365
  signals: header.signals.map((signal) => ({
363
366
  index: signal.index,
364
367
  label: signal.label,
package/src/constants.ts CHANGED
@@ -93,4 +93,4 @@ export const SIGNAL_FIELD_BLOCK_OFFSETS = {
93
93
  } as const;
94
94
 
95
95
  /** Published package version. Kept in sync with package.json by a test. */
96
- export const VERSION = '0.3.47';
96
+ export const VERSION = '0.3.49';
@@ -12,6 +12,7 @@
12
12
  * lands in a chat log or an issue tracker should not carry them by default.
13
13
  */
14
14
 
15
+ import { trimEdfField } from './bytes/latin1.js';
15
16
  import { TICKS_PER_SECOND } from './constants.js';
16
17
  import { summarizeDiagnostics } from './diagnostics/summary.js';
17
18
  import { printable } from './text/printable.js';
@@ -107,8 +108,16 @@ export function formatHeader(header: EdfHeader, options?: FormatHeaderOptions):
107
108
  // the signal-table shape exactly — ` 0 99 signals · 0 records` — and one in the recording
108
109
  // field forged a `record 9 s` line at the left margin, contradicting the real geometry
109
110
  // three lines above it (fixed in 0.3.16).
110
- lines.push(`patient ${printable(header.patient.raw.trim()) || 'unknown'}`);
111
- lines.push(`recording ${printable(header.recording.raw.trim()) || 'unknown'}`);
111
+ // `trimEdfField`, not `String.prototype.trim`. These are the untrimmed 80 bytes, and `.trim()`
112
+ // strips whitespace but NOT U+0000 — so on the NUL-padded identification fields a large share
113
+ // of real writers emit, the padding survived and `printable` turned every NUL into a `.`. An
114
+ // empty patient field printed as eighty dots, which made the `|| 'unknown'` below unreachable
115
+ // and read as redaction; a populated one trailed dots that read as truncation. It is the same
116
+ // gap `redactDiagnostic` names in diagnostics/format.ts, and every other consumer of these
117
+ // bytes — `parsePatientId`, `validateRecording`, `redactDiagnostic` — already used
118
+ // `trimEdfField` (fixed in 0.3.48).
119
+ lines.push(`patient ${printable(trimEdfField(header.patient.raw)) || 'unknown'}`);
120
+ lines.push(`recording ${printable(trimEdfField(header.recording.raw)) || 'unknown'}`);
112
121
  }
113
122
 
114
123
  lines.push('');
@@ -47,11 +47,22 @@ export interface IdentificationOptions {
47
47
  readonly edfPlus: boolean;
48
48
  }
49
49
 
50
- /** Subfields are separated by spaces and may not contain one. Runs are tolerated. */
50
+ /**
51
+ * Subfields are separated by spaces and may not contain one. Runs are tolerated.
52
+ *
53
+ * The ASCII space the spec names, not `/\s+/`. JavaScript's `\s` also matches U+00A0, which is
54
+ * what header byte 0xA0 decodes to — and NO-BREAK SPACE is one of the characters a writer may
55
+ * legitimately pick when EDF+ tells it to replace a space inside a subfield. Splitting on it cut
56
+ * `Mac Donald` into two subfields, so `name` held only `Mac`; and because the split ADDS a
57
+ * subfield rather than removing one, the count check still passed and `conformant` stayed true
58
+ * with no diagnostic. In `parseRecordingId` it shifted every code after it by one position. The
59
+ * docblock's "`raw` and the subfields both keep what the file wrote" was not true of the
60
+ * subfields (fixed in 0.3.49).
61
+ */
51
62
  function splitSubfields(raw: string): readonly string[] {
52
63
  const text = trimEdfField(raw);
53
64
  if (text.length === 0) return [];
54
- return text.split(/\s+/).filter((part) => part.length > 0);
65
+ return text.split(' ').filter((part) => part.length > 0);
55
66
  }
56
67
 
57
68
  /** `'X'` is the spec's "unknown", and an absent subfield is unknown too. */