edfcore 0.4.411 → 0.4.413

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.411";
112
+ export declare const VERSION = "0.4.413";
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.411';
82
+ export const VERSION = '0.4.413';
83
83
  //# sourceMappingURL=constants.js.map
package/docs/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.4.413
10
+
11
+ - **Added** tests for the calendar edfcore validates against. `isValidCalendarDate` exists because
12
+ a `Date` is the wrong tool: real files carry 31 April and 29 February in common years, and
13
+ `new Date(1997, 3, 31)` rolls both forward into a neighbouring month rather than rejecting them.
14
+ A recording silently dated a day later than it was made is the kind of error nobody finds,
15
+ because the wrong answer is a perfectly ordinary date.
16
+ - `date-ban.test.ts` proves no `Date` is constructed anywhere. That left the arithmetic which
17
+ replaced it, exercised only through the parser, where a rejected date is indistinguishable from a
18
+ rejected field.
19
+ - The month lengths are not restated — restating a table checks a transcription, and the
20
+ transcription is what would already be wrong. The properties it must satisfy are checked instead,
21
+ from the Gregorian calendar rather than from this file: the twelve months sum to 365 or 366 for
22
+ every year from 1 to 9999; four hundred consecutive years hold exactly 97 leap years and 146,097
23
+ days, which is a whole number of weeks; and a century not divisible by 400 holds 24, not 25.
24
+ - A table with a month a day short fails the first for every year, and a leap rule missing its
25
+ century exception fails the second by three days a cycle.
26
+
27
+ ## 0.4.412
28
+
29
+ - **Added** tests for four header fields that are all finite and imply a gain that is not. An EDF
30
+ physical bound is eight bytes of ASCII, which is room for an exponent, so a physical range can
31
+ underflow against the digital range — `0` to `5E-324` over -1..1 puts `bitValue` at zero and
32
+ `offset` at infinity — or overflow it, where `-9.9E307` to `9.9E307` exceeds float64 before the
33
+ division happens.
34
+ - Nothing about such a file looks wrong. The header parses, every field is in range for its width,
35
+ and a reader who does not check `signal.scale` gets a column of `NaN` where microvolts should be
36
+ — which plots as an empty panel, or silently poisons a mean. The scale is refused exactly as the
37
+ obvious degeneracies are, and `decodeDigital` keeps working, which is the whole reason
38
+ `toPhysical` is a separate call.
39
+ - A signal declaring a negative `samplesPerRecord` is the other shape of "parses and cannot be
40
+ used", and it is fatal rather than diagnosed: every later signal's byte offset inside a record is
41
+ a running sum of that field, so a negative one does not make one signal wrong, it makes every
42
+ signal after it point at the wrong bytes.
43
+
9
44
  ## 0.4.411
10
45
 
11
46
  - **Added** tests for the envelope of the files and selections a viewer produces by accident.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "edfcore",
3
- "version": "0.4.411",
3
+ "version": "0.4.413",
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.411';
96
+ export const VERSION = '0.4.413';