edfcore 0.2.12 → 0.2.13
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 +7 -0
- package/dist/cli-run.d.ts +1 -0
- package/dist/cli-run.d.ts.map +1 -1
- package/dist/cli-run.js +23 -2
- package/dist/cli-run.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/package.json +1 -1
- package/src/cli-run.ts +27 -2
- package/src/constants.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,13 @@ 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.2.13
|
|
10
|
+
|
|
11
|
+
- **Added** `edfcore events <file> --list`: one tab-separated event per line instead of counts by
|
|
12
|
+
text. The onset column is `onsetSecondsFromFirstRecord`, the axis `gaps` and every read already
|
|
13
|
+
use — printing the on-disk value here would put two lines of the same CLI on different clocks. A
|
|
14
|
+
truncated listing says how many it withheld.
|
|
15
|
+
|
|
9
16
|
## 0.2.12
|
|
10
17
|
|
|
11
18
|
- **Added** documentation for everything shipped since 0.1.19: `matchSignals`,
|
package/dist/cli-run.d.ts
CHANGED
package/dist/cli-run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-run.d.ts","sourceRoot":"","sources":["../src/cli-run.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,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;
|
|
1
|
+
{"version":3,"file":"cli-run.d.ts","sourceRoot":"","sources":["../src/cli-run.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,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;AAqBD,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,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAwBvD;AAQD,wBAAsB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAmJnE"}
|
package/dist/cli-run.js
CHANGED
|
@@ -26,7 +26,8 @@ const USAGE = `edfcore — read EDF, EDF+, BDF and BDF+ files
|
|
|
26
26
|
|
|
27
27
|
Options
|
|
28
28
|
--patient include patient identification (header, json)
|
|
29
|
-
--
|
|
29
|
+
--list list events one per line instead of counting (events)
|
|
30
|
+
--limit <n> individual diagnostics or events to print (default 20)
|
|
30
31
|
|
|
31
32
|
--version print the version and exit
|
|
32
33
|
|
|
@@ -35,12 +36,15 @@ Exit codes: 0 success, 1 the file is unreadable or failed validation, 2 bad usag
|
|
|
35
36
|
export function parseArgs(argv) {
|
|
36
37
|
const positional = [];
|
|
37
38
|
let patient = false;
|
|
39
|
+
let list = false;
|
|
38
40
|
let version = false;
|
|
39
41
|
let limit;
|
|
40
42
|
for (let i = 0; i < argv.length; i += 1) {
|
|
41
43
|
const arg = argv[i];
|
|
42
44
|
if (arg === '--patient')
|
|
43
45
|
patient = true;
|
|
46
|
+
else if (arg === '--list')
|
|
47
|
+
list = true;
|
|
44
48
|
else if (arg === '--version' || arg === '-v')
|
|
45
49
|
version = true;
|
|
46
50
|
else if (arg === '--limit') {
|
|
@@ -55,7 +59,7 @@ export function parseArgs(argv) {
|
|
|
55
59
|
else if (arg !== undefined && !arg.startsWith('-'))
|
|
56
60
|
positional.push(arg);
|
|
57
61
|
}
|
|
58
|
-
return { command: positional[0], file: positional[1], patient, version, limit };
|
|
62
|
+
return { command: positional[0], file: positional[1], patient, list, version, limit };
|
|
59
63
|
}
|
|
60
64
|
async function open(io, file) {
|
|
61
65
|
// Read whole rather than fileSource: a CLI invocation is one pass over one file, and holding
|
|
@@ -105,6 +109,23 @@ export async function runCli(args, io) {
|
|
|
105
109
|
return 0;
|
|
106
110
|
}
|
|
107
111
|
io.out(`${annotations.length} annotation(s)\n\n`);
|
|
112
|
+
if (args.list) {
|
|
113
|
+
const limit = args.limit ?? 20;
|
|
114
|
+
// `onsetSecondsFromFirstRecord`, because that is the axis the rest of this CLI reports on:
|
|
115
|
+
// `gaps` prints it, `header` counts records from it, and t = 0 is the start of record 0.
|
|
116
|
+
// The on-disk value is `onsetSecondsFromHeaderStart`, and mixing the two in one output
|
|
117
|
+
// would put two lines of the same listing on different clocks.
|
|
118
|
+
for (const event of annotations.slice(0, limit)) {
|
|
119
|
+
const duration = event.durationSeconds === undefined ? '' : `${event.durationSeconds}`;
|
|
120
|
+
io.out(`${event.onsetSecondsFromFirstRecord}\t${duration}\t${event.text}\t` +
|
|
121
|
+
`${event.channelLabel ?? ''}\n`);
|
|
122
|
+
}
|
|
123
|
+
// Say what was withheld. A silently truncated listing reads as a complete one.
|
|
124
|
+
if (annotations.length > limit) {
|
|
125
|
+
io.out(`\n... ${annotations.length - limit} more (raise --limit to see them)\n`);
|
|
126
|
+
}
|
|
127
|
+
return 0;
|
|
128
|
+
}
|
|
108
129
|
for (const { text, count } of countAnnotationsByText(annotations)) {
|
|
109
130
|
io.out(`${String(count).padStart(8)} ${text}\n`);
|
|
110
131
|
}
|
package/dist/cli-run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-run.js","sourceRoot":"","sources":["../src/cli-run.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AASlD,MAAM,KAAK,GAAG
|
|
1
|
+
{"version":3,"file":"cli-run.js","sourceRoot":"","sources":["../src/cli-run.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.2.
|
|
112
|
+
export declare const VERSION = "0.2.13";
|
|
113
113
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.js
CHANGED
package/package.json
CHANGED
package/src/cli-run.ts
CHANGED
|
@@ -35,7 +35,8 @@ const USAGE = `edfcore — read EDF, EDF+, BDF and BDF+ files
|
|
|
35
35
|
|
|
36
36
|
Options
|
|
37
37
|
--patient include patient identification (header, json)
|
|
38
|
-
--
|
|
38
|
+
--list list events one per line instead of counting (events)
|
|
39
|
+
--limit <n> individual diagnostics or events to print (default 20)
|
|
39
40
|
|
|
40
41
|
--version print the version and exit
|
|
41
42
|
|
|
@@ -46,6 +47,7 @@ export interface Args {
|
|
|
46
47
|
readonly command: string | undefined;
|
|
47
48
|
readonly file: string | undefined;
|
|
48
49
|
readonly patient: boolean;
|
|
50
|
+
readonly list: boolean;
|
|
49
51
|
readonly version: boolean;
|
|
50
52
|
readonly limit: number | undefined;
|
|
51
53
|
}
|
|
@@ -53,12 +55,14 @@ export interface Args {
|
|
|
53
55
|
export function parseArgs(argv: readonly string[]): Args {
|
|
54
56
|
const positional: string[] = [];
|
|
55
57
|
let patient = false;
|
|
58
|
+
let list = false;
|
|
56
59
|
let version = false;
|
|
57
60
|
let limit: number | undefined;
|
|
58
61
|
|
|
59
62
|
for (let i = 0; i < argv.length; i += 1) {
|
|
60
63
|
const arg = argv[i];
|
|
61
64
|
if (arg === '--patient') patient = true;
|
|
65
|
+
else if (arg === '--list') list = true;
|
|
62
66
|
else if (arg === '--version' || arg === '-v') version = true;
|
|
63
67
|
else if (arg === '--limit') {
|
|
64
68
|
const value = Number(argv[i + 1]);
|
|
@@ -71,7 +75,7 @@ export function parseArgs(argv: readonly string[]): Args {
|
|
|
71
75
|
} else if (arg !== undefined && !arg.startsWith('-')) positional.push(arg);
|
|
72
76
|
}
|
|
73
77
|
|
|
74
|
-
return { command: positional[0], file: positional[1], patient, version, limit };
|
|
78
|
+
return { command: positional[0], file: positional[1], patient, list, version, limit };
|
|
75
79
|
}
|
|
76
80
|
|
|
77
81
|
async function open(io: CliIo, file: string) {
|
|
@@ -130,6 +134,27 @@ export async function runCli(args: Args, io: CliIo): Promise<number> {
|
|
|
130
134
|
return 0;
|
|
131
135
|
}
|
|
132
136
|
io.out(`${annotations.length} annotation(s)\n\n`);
|
|
137
|
+
|
|
138
|
+
if (args.list) {
|
|
139
|
+
const limit = args.limit ?? 20;
|
|
140
|
+
// `onsetSecondsFromFirstRecord`, because that is the axis the rest of this CLI reports on:
|
|
141
|
+
// `gaps` prints it, `header` counts records from it, and t = 0 is the start of record 0.
|
|
142
|
+
// The on-disk value is `onsetSecondsFromHeaderStart`, and mixing the two in one output
|
|
143
|
+
// would put two lines of the same listing on different clocks.
|
|
144
|
+
for (const event of annotations.slice(0, limit)) {
|
|
145
|
+
const duration = event.durationSeconds === undefined ? '' : `${event.durationSeconds}`;
|
|
146
|
+
io.out(
|
|
147
|
+
`${event.onsetSecondsFromFirstRecord}\t${duration}\t${event.text}\t` +
|
|
148
|
+
`${event.channelLabel ?? ''}\n`,
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
// Say what was withheld. A silently truncated listing reads as a complete one.
|
|
152
|
+
if (annotations.length > limit) {
|
|
153
|
+
io.out(`\n... ${annotations.length - limit} more (raise --limit to see them)\n`);
|
|
154
|
+
}
|
|
155
|
+
return 0;
|
|
156
|
+
}
|
|
157
|
+
|
|
133
158
|
for (const { text, count } of countAnnotationsByText(annotations)) {
|
|
134
159
|
io.out(`${String(count).padStart(8)} ${text}\n`);
|
|
135
160
|
}
|
package/src/constants.ts
CHANGED