edfcore 0.3.83 → 0.3.85

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,45 @@ 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.85
10
+
11
+ - **Fixed** four pages denying a comparison the test suite performs on every run.
12
+ - `api-primitives.md` — the page a caller reads to decide whether to trust the pinned scaling
13
+ expression — said the float64 parity with pyEDFlib "isn't yet demonstrated by a golden-value
14
+ harness, so treat it as intent rather than a measured guarantee". `api-validate.md` and
15
+ `validation.md` said edfcore's output "has not been compared element by element" against
16
+ pyEDFlib or MNE. `comparison.md` said validation against the public corpora "has not happened
17
+ yet".
18
+ - `tests/corpus/golden-values.test.ts` writes its fixtures with pyEDFlib's own writer, reads them
19
+ back with pyEDFlib, and compares every physical sample against the IEEE-754 bits it produced
20
+ using `Object.is` — a one-ULP difference fails. `mne-parity.test.ts` does the same for MNE. The
21
+ goldens are committed, so both run on a fresh clone. The harness has existed since 0.2.34-0.2.48.
22
+ - The pages now say what is measured and what is not, and `comparison.md` says plainly that the
23
+ corpus tests SKIP without `npm run corpus:fetch` — so a fresh clone proves the golden comparison
24
+ and not the corpus one. Understating a guarantee is still a false statement about the package.
25
+ - Same class as 0.3.64, which removed this wording from three other pages and missed these four. The
26
+ guard now sweeps every page for both retired phrasings.
27
+
28
+ ## 0.3.84
29
+
30
+ - **Fixed** four statements that the `node:` import lives in exactly one file. `src/cli.ts` imports
31
+ `node:fs/promises` and `node:process` and ships as the package's `bin`.
32
+ - `src/node.ts` called itself "the ONLY module in edfcore that imports anything from `node:`" and
33
+ said "keeping the import in exactly one file" is what makes the browser build work.
34
+ `installation.md` repeated both. The invariant the packaging test actually checks is narrower and
35
+ is the one that matters: nothing **reachable from the universal entry** imports `node:`, which
36
+ is why `edfcore` bundles for a browser without a polyfill.
37
+ - The `bin` program is a Node program by definition and no import path reaches it, so the code is
38
+ right and only the claims were wrong. All four now state the reachability rule, and
39
+ `installation.md` names the CLI's imports outright rather than leaving a reader to discover a
40
+ fourth published entry that contradicts the page.
41
+ - **Also fixed** `src/node.ts` saying "edfcore has no other lifetime mechanism in v0.1". Because
42
+ `tsconfig.build.json` keeps comments, that sentence ships in `dist/node.d.ts` as the hover text
43
+ for `fileHandleSource` — the same "v0.1" scoping 0.3.64 removed from three website pages, still
44
+ reaching every consumer of the subpath.
45
+ - The version guard from 0.3.53 swept the website only. It now sweeps `src/` too, since those
46
+ docblocks are published, and it catches the exact sentence this release removed.
47
+
9
48
  ## 0.3.83
10
49
 
11
50
  - **Fixed** two pages calling `buildRecordIndex` "the only function in edfcore that reads the whole
@@ -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.83";
112
+ export declare const VERSION = "0.3.85";
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.83';
82
+ export const VERSION = '0.3.85';
83
83
  //# sourceMappingURL=constants.js.map
package/dist/node.d.ts CHANGED
@@ -1,9 +1,15 @@
1
1
  /**
2
- * The Node adapters — the ONLY module in edfcore that imports anything from `node:`.
2
+ * The Node adapters — the only module REACHABLE FROM THE UNIVERSAL ENTRY that imports anything
3
+ * from `node:`.
3
4
  *
4
- * Layer 7, published as `edfcore/node`. Keeping the import in exactly one file is what lets the
5
- * universal entry (`edfcore`) be bundled for a browser without a polyfill and without a
6
- * resolution alias, and a packaging test greps the built universal bundle for `node:` to prove it.
5
+ * Layer 7, published as `edfcore/node`. Keeping it out of everything `edfcore` can reach is what
6
+ * lets the universal entry be bundled for a browser without a polyfill and without a resolution
7
+ * alias, and a packaging test greps the built universal bundle for `node:` to prove exactly that.
8
+ *
9
+ * Not "the only file in the package": `src/cli.ts` imports `node:fs/promises` and `node:process`
10
+ * and ships as the `bin` entry, which is a Node program by definition and is reachable from no
11
+ * import path. This said "the ONLY module in edfcore" until 0.3.84, and the sentence shipped in
12
+ * `dist/node.d.ts` as the hover text for this subpath.
7
13
  *
8
14
  * Two decisions are load-bearing.
9
15
  *
@@ -59,7 +65,7 @@ export interface FileHandleLike {
59
65
  * opened, while a caller wrapping a handle it already had may know something better (a range it
60
66
  * intends to expose, a size it verified). Neither is guessed here.
61
67
  *
62
- * `close()` closes the handle. edfcore has no other lifetime mechanism in v0.1
68
+ * `close()` closes the handle. edfcore has no other lifetime mechanism yet
63
69
  * `Symbol.asyncDispose` is not Baseline yet — so a caller that opened a file is the one that
64
70
  * closes it.
65
71
  */
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,YAAY,CAAC;AAE1D;;;;;;GAMG;AACH,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,CACF,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAYD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAgCvF;AAED;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAqBlE"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,YAAY,CAAC;AAE1D;;;;;;GAMG;AACH,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,CACF,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAYD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAgCvF;AAED;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAqBlE"}
package/dist/node.js CHANGED
@@ -1,9 +1,15 @@
1
1
  /**
2
- * The Node adapters — the ONLY module in edfcore that imports anything from `node:`.
2
+ * The Node adapters — the only module REACHABLE FROM THE UNIVERSAL ENTRY that imports anything
3
+ * from `node:`.
3
4
  *
4
- * Layer 7, published as `edfcore/node`. Keeping the import in exactly one file is what lets the
5
- * universal entry (`edfcore`) be bundled for a browser without a polyfill and without a
6
- * resolution alias, and a packaging test greps the built universal bundle for `node:` to prove it.
5
+ * Layer 7, published as `edfcore/node`. Keeping it out of everything `edfcore` can reach is what
6
+ * lets the universal entry be bundled for a browser without a polyfill and without a resolution
7
+ * alias, and a packaging test greps the built universal bundle for `node:` to prove exactly that.
8
+ *
9
+ * Not "the only file in the package": `src/cli.ts` imports `node:fs/promises` and `node:process`
10
+ * and ships as the `bin` entry, which is a Node program by definition and is reachable from no
11
+ * import path. This said "the ONLY module in edfcore" until 0.3.84, and the sentence shipped in
12
+ * `dist/node.d.ts` as the hover text for this subpath.
7
13
  *
8
14
  * Two decisions are load-bearing.
9
15
  *
@@ -44,7 +50,7 @@ const fs = nodeFsPromises;
44
50
  * opened, while a caller wrapping a handle it already had may know something better (a range it
45
51
  * intends to expose, a size it verified). Neither is guessed here.
46
52
  *
47
- * `close()` closes the handle. edfcore has no other lifetime mechanism in v0.1
53
+ * `close()` closes the handle. edfcore has no other lifetime mechanism yet
48
54
  * `Symbol.asyncDispose` is not Baseline yet — so a caller that opened a file is the one that
49
55
  * closes it.
50
56
  */
package/dist/node.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,4FAA4F;AAC5F,2FAA2F;AAC3F,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAoClF,MAAM,EAAE,GAAmB,cAA2C,CAAC;AAEvE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAsB,EAAE,UAAkB;IACzE,OAAO;QACL,UAAU;QACV,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,MAAc,EAAE,OAAqB;YAC9D,cAAc,CAAC,OAAO,CAAC,CAAC;YACxB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAC5C,IAAI,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;YAE3C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,OAAO,MAAM,GAAG,MAAM,EAAE,CAAC;gBACvB,cAAc,CAAC,OAAO,CAAC,CAAC;gBACxB,wFAAwF;gBACxF,0DAA0D;gBAC1D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;gBAC1F,mFAAmF;gBACnF,4EAA4E;gBAC5E,IAAI,SAAS,IAAI,CAAC;oBAAE,MAAM;gBAC1B,MAAM,IAAI,SAAS,CAAC;YACtB,CAAC;YACD,0FAA0F;YAC1F,4FAA4F;YAC5F,oFAAoF;YACpF,yFAAyF;YACzF,qEAAqE;YACrE,cAAc,CAAC,OAAO,CAAC,CAAC;YACxB,OAAO,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,CAAC,KAAK;YACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,cAAc,CACtB,yDAAyD,UAAU,aAAa;gBAC9E,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,+DAA+D;gBACtF,iFAAiF,EACnF,EAAE,MAAM,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,CAClC,CAAC;QACJ,CAAC;QACD,OAAO,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wFAAwF;QACxF,0FAA0F;QAC1F,kFAAkF;QAClF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,4FAA4F;AAC5F,2FAA2F;AAC3F,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAoClF,MAAM,EAAE,GAAmB,cAA2C,CAAC;AAEvE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAsB,EAAE,UAAkB;IACzE,OAAO;QACL,UAAU;QACV,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,MAAc,EAAE,OAAqB;YAC9D,cAAc,CAAC,OAAO,CAAC,CAAC;YACxB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAC5C,IAAI,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;YAE3C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,OAAO,MAAM,GAAG,MAAM,EAAE,CAAC;gBACvB,cAAc,CAAC,OAAO,CAAC,CAAC;gBACxB,wFAAwF;gBACxF,0DAA0D;gBAC1D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;gBAC1F,mFAAmF;gBACnF,4EAA4E;gBAC5E,IAAI,SAAS,IAAI,CAAC;oBAAE,MAAM;gBAC1B,MAAM,IAAI,SAAS,CAAC;YACtB,CAAC;YACD,0FAA0F;YAC1F,4FAA4F;YAC5F,oFAAoF;YACpF,yFAAyF;YACzF,qEAAqE;YACrE,cAAc,CAAC,OAAO,CAAC,CAAC;YACxB,OAAO,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,CAAC,KAAK;YACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,cAAc,CACtB,yDAAyD,UAAU,aAAa;gBAC9E,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,+DAA+D;gBACtF,iFAAiF,EACnF,EAAE,MAAM,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,CAClC,CAAC;QACJ,CAAC;QACD,OAAO,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wFAAwF;QACxF,0FAA0F;QAC1F,kFAAkF;QAClF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "edfcore",
3
- "version": "0.3.83",
3
+ "version": "0.3.85",
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.3.83';
96
+ export const VERSION = '0.3.85';
package/src/node.ts CHANGED
@@ -1,9 +1,15 @@
1
1
  /**
2
- * The Node adapters — the ONLY module in edfcore that imports anything from `node:`.
2
+ * The Node adapters — the only module REACHABLE FROM THE UNIVERSAL ENTRY that imports anything
3
+ * from `node:`.
3
4
  *
4
- * Layer 7, published as `edfcore/node`. Keeping the import in exactly one file is what lets the
5
- * universal entry (`edfcore`) be bundled for a browser without a polyfill and without a
6
- * resolution alias, and a packaging test greps the built universal bundle for `node:` to prove it.
5
+ * Layer 7, published as `edfcore/node`. Keeping it out of everything `edfcore` can reach is what
6
+ * lets the universal entry be bundled for a browser without a polyfill and without a resolution
7
+ * alias, and a packaging test greps the built universal bundle for `node:` to prove exactly that.
8
+ *
9
+ * Not "the only file in the package": `src/cli.ts` imports `node:fs/promises` and `node:process`
10
+ * and ships as the `bin` entry, which is a Node program by definition and is reachable from no
11
+ * import path. This said "the ONLY module in edfcore" until 0.3.84, and the sentence shipped in
12
+ * `dist/node.d.ts` as the hover text for this subpath.
7
13
  *
8
14
  * Two decisions are load-bearing.
9
15
  *
@@ -81,7 +87,7 @@ const fs: NodeFsPromises = nodeFsPromises as unknown as NodeFsPromises;
81
87
  * opened, while a caller wrapping a handle it already had may know something better (a range it
82
88
  * intends to expose, a size it verified). Neither is guessed here.
83
89
  *
84
- * `close()` closes the handle. edfcore has no other lifetime mechanism in v0.1
90
+ * `close()` closes the handle. edfcore has no other lifetime mechanism yet
85
91
  * `Symbol.asyncDispose` is not Baseline yet — so a caller that opened a file is the one that
86
92
  * closes it.
87
93
  */