edfcore 0.4.274 → 0.4.276

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.
@@ -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.4.274";
112
+ export declare const VERSION = "0.4.276";
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.4.274';
82
+ export const VERSION = '0.4.276';
83
83
  //# sourceMappingURL=constants.js.map
package/docs/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.4.276
10
+
11
+ - **Added** the check for the other ban `AGENTS.md` lists: "No `Date` anywhere. EDF stores local
12
+ time with no zone." An EDF header gives a wall-clock date and time and names no zone, because
13
+ the machine that wrote it was in a sleep lab and the field is whatever the clock on the wall
14
+ said. A `Date` cannot hold that — constructing one applies the running machine's zone, so a
15
+ recording started at 23:14 in Leiden becomes a different instant on a laptop in California and
16
+ every derived time moves with it. `EdfCalendarDate` is three numbers precisely so there is
17
+ nothing to interpret.
18
+ - Two halves, and only one existed. `dates.test.ts` asserted a parsed HEADER holds no `Date`;
19
+ this adds the source, where `Date.now()` would also make output non-deterministic, and a deep
20
+ sweep of a whole read — recording, timeline, index, annotations, validation report — for any
21
+ `Date` instance at all.
22
+ - **Extracted** the comment-and-string stripper both bans need into
23
+ `tests/support/code-only.ts`. It was written for 0.4.275 a release ago, and a second copy is how
24
+ the barrel type parser ended up with two that disagreed (0.4.224). Stripping strings is the part
25
+ that matters: this codebase discusses dates constantly, and a file explaining why it avoids
26
+ `Date` must not read as a file that uses one.
27
+
28
+ ## 0.4.275
29
+
30
+ - **Added** the check for a ban `AGENTS.md` lists under things that look like bugs and are not:
31
+ `TextDecoder` belongs in `src/tal/` and nowhere else. Verified on Node v24.4.0, every `latin1`
32
+ label it accepts reports `windows-1252` and decodes byte `0x80` as `U+0080`, while the WHATWG
33
+ standard mandates `U+20AC` — so a `TextDecoder` on the header path would make the same file
34
+ produce different strings in Node and in a browser, from a library whose claim is that it reads
35
+ the same bytes the same way everywhere. `src/tal/` is exempt because annotation text really is
36
+ UTF-8, the one encoding every runtime agrees on.
37
+ - The stripper removes string literals as well as comments, and that is not tidiness:
38
+ `header/fields.ts` contains the word `TextDecoder` inside a diagnostic message explaining this
39
+ rule to a user, so a comments-only sweep reads the file that documents the ban as the file that
40
+ breaks it. It looked like a live violation until the line was read.
41
+ - A second test asserts the consequence rather than the rule — `0x80` in a real signal label,
42
+ read back through `openEdf`, comes out `U+0080` and not a euro sign. `latin1.test.ts` pins the
43
+ decoder in isolation; this is the path a header actually takes.
44
+
9
45
  ## 0.4.274
10
46
 
11
47
  - **Added** the check that edfcore never writes to the console. The README says it twice, and the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "edfcore",
3
- "version": "0.4.274",
3
+ "version": "0.4.276",
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/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.4.274';
96
+ export const VERSION = '0.4.276';