@computationalpathologygroup/openslide-js 1.0.0-beta.2
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/LICENSE +501 -0
- package/NOTICE +216 -0
- package/README.md +160 -0
- package/dist/cjs/deep-zoom.d.ts +66 -0
- package/dist/cjs/deep-zoom.d.ts.map +1 -0
- package/dist/cjs/deep-zoom.js +186 -0
- package/dist/cjs/deep-zoom.js.map +1 -0
- package/dist/cjs/errors.d.ts +9 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +26 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/index.d.ts +18 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +27 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/openslide.d.ts +47 -0
- package/dist/cjs/openslide.d.ts.map +1 -0
- package/dist/cjs/openslide.js +191 -0
- package/dist/cjs/openslide.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/slide.d.ts +70 -0
- package/dist/cjs/slide.d.ts.map +1 -0
- package/dist/cjs/slide.js +139 -0
- package/dist/cjs/slide.js.map +1 -0
- package/dist/cjs/types.d.ts +150 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/wasm/openslide.js +2 -0
- package/dist/cjs/wasm/openslide.wasm +0 -0
- package/dist/cjs/worker-api.d.ts +55 -0
- package/dist/cjs/worker-api.d.ts.map +1 -0
- package/dist/cjs/worker-api.js +287 -0
- package/dist/cjs/worker-api.js.map +1 -0
- package/dist/esm/deep-zoom.d.ts +66 -0
- package/dist/esm/deep-zoom.d.ts.map +1 -0
- package/dist/esm/deep-zoom.js +182 -0
- package/dist/esm/deep-zoom.js.map +1 -0
- package/dist/esm/errors.d.ts +9 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +21 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.d.ts +18 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +19 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/openslide.d.ts +47 -0
- package/dist/esm/openslide.d.ts.map +1 -0
- package/dist/esm/openslide.js +187 -0
- package/dist/esm/openslide.js.map +1 -0
- package/dist/esm/slide.d.ts +70 -0
- package/dist/esm/slide.d.ts.map +1 -0
- package/dist/esm/slide.js +135 -0
- package/dist/esm/slide.js.map +1 -0
- package/dist/esm/types.d.ts +150 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/wasm/openslide.js +2 -0
- package/dist/esm/wasm/openslide.wasm +0 -0
- package/dist/esm/worker-api.d.ts +55 -0
- package/dist/esm/worker-api.d.ts.map +1 -0
- package/dist/esm/worker-api.js +283 -0
- package/dist/esm/worker-api.js.map +1 -0
- package/dist/esm/worker.d.ts +8 -0
- package/dist/esm/worker.d.ts.map +1 -0
- package/dist/esm/worker.js +175 -0
- package/dist/esm/worker.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Core classes
|
|
2
|
+
export { OpenSlide } from './openslide.js';
|
|
3
|
+
export { Slide } from './slide.js';
|
|
4
|
+
export { DeepZoomGenerator } from './deep-zoom.js';
|
|
5
|
+
// Errors
|
|
6
|
+
export { OpenSlideError, OpenSlideUnsupportedFormatError } from './errors.js';
|
|
7
|
+
// Property name constants (matching OpenSlide C library)
|
|
8
|
+
export const PROPERTY_NAME_COMMENT = 'openslide.comment';
|
|
9
|
+
export const PROPERTY_NAME_VENDOR = 'openslide.vendor';
|
|
10
|
+
export const PROPERTY_NAME_QUICKHASH1 = 'openslide.quickhash-1';
|
|
11
|
+
export const PROPERTY_NAME_BACKGROUND_COLOR = 'openslide.background-color';
|
|
12
|
+
export const PROPERTY_NAME_OBJECTIVE_POWER = 'openslide.objective-power';
|
|
13
|
+
export const PROPERTY_NAME_MPP_X = 'openslide.mpp-x';
|
|
14
|
+
export const PROPERTY_NAME_MPP_Y = 'openslide.mpp-y';
|
|
15
|
+
export const PROPERTY_NAME_BOUNDS_X = 'openslide.bounds-x';
|
|
16
|
+
export const PROPERTY_NAME_BOUNDS_Y = 'openslide.bounds-y';
|
|
17
|
+
export const PROPERTY_NAME_BOUNDS_WIDTH = 'openslide.bounds-width';
|
|
18
|
+
export const PROPERTY_NAME_BOUNDS_HEIGHT = 'openslide.bounds-height';
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,SAAS;AACT,OAAO,EAAE,cAAc,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAY9E,yDAAyD;AACzD,MAAM,CAAC,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AACzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AACvD,MAAM,CAAC,MAAM,wBAAwB,GAAG,uBAAuB,CAAC;AAChE,MAAM,CAAC,MAAM,8BAA8B,GAAG,4BAA4B,CAAC;AAC3E,MAAM,CAAC,MAAM,6BAA6B,GAAG,2BAA2B,CAAC;AACzE,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AACrD,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AACrD,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAC3D,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAC3D,MAAM,CAAC,MAAM,0BAA0B,GAAG,wBAAwB,CAAC;AACnE,MAAM,CAAC,MAAM,2BAA2B,GAAG,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* openslide.ts
|
|
3
|
+
*
|
|
4
|
+
* Main entry point for the library. Manages a pool of Web Workers,
|
|
5
|
+
* each running an independent WASM instance. Distributes work
|
|
6
|
+
* across workers for parallel tile reads.
|
|
7
|
+
*/
|
|
8
|
+
import type { OpenSlideOptions, SlideSource } from './types.js';
|
|
9
|
+
import { Slide } from './slide.js';
|
|
10
|
+
export declare class OpenSlide {
|
|
11
|
+
private workers;
|
|
12
|
+
private nextId;
|
|
13
|
+
private terminated;
|
|
14
|
+
private constructor();
|
|
15
|
+
/**
|
|
16
|
+
* Create and initialize an OpenSlide instance with a worker pool.
|
|
17
|
+
*
|
|
18
|
+
* @param options.workerCount - Number of workers (default: hardwareConcurrency or 4).
|
|
19
|
+
* @param options.wasmUrl - Custom URL to the WASM module JS loader.
|
|
20
|
+
*/
|
|
21
|
+
static initialize(options?: OpenSlideOptions): Promise<OpenSlide>;
|
|
22
|
+
/**
|
|
23
|
+
* Open a whole-slide image.
|
|
24
|
+
*
|
|
25
|
+
* Accepts:
|
|
26
|
+
* - A single File (dropped or from file input)
|
|
27
|
+
* - An array of Files (for multi-file formats like MIRAX)
|
|
28
|
+
* - An array of VirtualFile objects (files with relative paths)
|
|
29
|
+
* - A URL object or string URL (fetched via HTTP range requests)
|
|
30
|
+
*/
|
|
31
|
+
open(source: SlideSource): Promise<Slide>;
|
|
32
|
+
/**
|
|
33
|
+
* Detect the vendor of a slide file without fully opening it.
|
|
34
|
+
* Returns the vendor string (e.g., "aperio", "hamamatsu") or null.
|
|
35
|
+
*/
|
|
36
|
+
detectVendor(source: SlideSource): Promise<string | null>;
|
|
37
|
+
/** Get the OpenSlide library version string. */
|
|
38
|
+
getVersion(): Promise<string>;
|
|
39
|
+
/** Terminate all workers. The instance cannot be used after this. */
|
|
40
|
+
terminate(): void;
|
|
41
|
+
private leastBusy;
|
|
42
|
+
private sendTo;
|
|
43
|
+
private createSendFn;
|
|
44
|
+
private generateMountId;
|
|
45
|
+
private ensureAlive;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=openslide.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openslide.d.ts","sourceRoot":"","sources":["../../src/openslide.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EAIZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAcnC,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO;IAEP;;;;;OAKG;WACU,UAAU,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC;IAmDvE;;;;;;;;OAQG;IACG,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;IAyC/C;;;OAGG;IACG,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAsB/D,gDAAgD;IAC1C,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAKnC,qEAAqE;IACrE,SAAS,IAAI,IAAI;IAcjB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,WAAW;CAKpB"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* openslide.ts
|
|
3
|
+
*
|
|
4
|
+
* Main entry point for the library. Manages a pool of Web Workers,
|
|
5
|
+
* each running an independent WASM instance. Distributes work
|
|
6
|
+
* across workers for parallel tile reads.
|
|
7
|
+
*/
|
|
8
|
+
import { OpenSlideError } from './errors.js';
|
|
9
|
+
import { Slide } from './slide.js';
|
|
10
|
+
export class OpenSlide {
|
|
11
|
+
workers = [];
|
|
12
|
+
nextId = 1;
|
|
13
|
+
terminated = false;
|
|
14
|
+
constructor() { }
|
|
15
|
+
/**
|
|
16
|
+
* Create and initialize an OpenSlide instance with a worker pool.
|
|
17
|
+
*
|
|
18
|
+
* @param options.workerCount - Number of workers (default: hardwareConcurrency or 4).
|
|
19
|
+
* @param options.wasmUrl - Custom URL to the WASM module JS loader.
|
|
20
|
+
*/
|
|
21
|
+
static async initialize(options) {
|
|
22
|
+
const instance = new OpenSlide();
|
|
23
|
+
const count = options?.workerCount ?? (typeof navigator !== 'undefined' ? navigator.hardwareConcurrency : 4) ?? 4;
|
|
24
|
+
let workerUrl;
|
|
25
|
+
if (options?.workerUrl) {
|
|
26
|
+
workerUrl = new URL(options.workerUrl);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
// @ts-ignore - import.meta.url is valid in ESM; CJS users must pass workerUrl
|
|
30
|
+
workerUrl = new URL('./worker.js', import.meta.url);
|
|
31
|
+
}
|
|
32
|
+
const initPromises = [];
|
|
33
|
+
for (let i = 0; i < count; i++) {
|
|
34
|
+
const worker = new Worker(workerUrl, { type: 'module' });
|
|
35
|
+
const managed = { worker, pending: new Map(), activeTasks: 0 };
|
|
36
|
+
worker.onmessage = (e) => {
|
|
37
|
+
const resp = e.data;
|
|
38
|
+
const req = managed.pending.get(resp.id);
|
|
39
|
+
if (!req)
|
|
40
|
+
return;
|
|
41
|
+
managed.pending.delete(resp.id);
|
|
42
|
+
managed.activeTasks--;
|
|
43
|
+
if (resp.ok) {
|
|
44
|
+
req.resolve(resp.result);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
req.reject(new OpenSlideError(resp.error));
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
worker.onerror = (e) => {
|
|
51
|
+
// Reject all pending requests on this worker
|
|
52
|
+
for (const [, req] of managed.pending) {
|
|
53
|
+
req.reject(new OpenSlideError(`Worker error: ${e.message}`));
|
|
54
|
+
}
|
|
55
|
+
managed.pending.clear();
|
|
56
|
+
managed.activeTasks = 0;
|
|
57
|
+
};
|
|
58
|
+
instance.workers.push(managed);
|
|
59
|
+
initPromises.push(instance.sendTo(managed, { cmd: 'init', wasmUrl: options?.wasmUrl }));
|
|
60
|
+
}
|
|
61
|
+
await Promise.all(initPromises);
|
|
62
|
+
return instance;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Open a whole-slide image.
|
|
66
|
+
*
|
|
67
|
+
* Accepts:
|
|
68
|
+
* - A single File (dropped or from file input)
|
|
69
|
+
* - An array of Files (for multi-file formats like MIRAX)
|
|
70
|
+
* - An array of VirtualFile objects (files with relative paths)
|
|
71
|
+
* - A URL object or string URL (fetched via HTTP range requests)
|
|
72
|
+
*/
|
|
73
|
+
async open(source) {
|
|
74
|
+
this.ensureAlive();
|
|
75
|
+
const worker = this.leastBusy();
|
|
76
|
+
const send = this.createSendFn(worker);
|
|
77
|
+
const mountId = this.generateMountId();
|
|
78
|
+
let slidePath;
|
|
79
|
+
if (typeof source === 'string') {
|
|
80
|
+
slidePath = await send({ cmd: 'mountUrl', url: source, mountId });
|
|
81
|
+
}
|
|
82
|
+
else if (source instanceof URL) {
|
|
83
|
+
slidePath = await send({ cmd: 'mountUrl', url: source.href, mountId });
|
|
84
|
+
}
|
|
85
|
+
else if (source instanceof File) {
|
|
86
|
+
slidePath = await send({ cmd: 'mountFile', files: [source], mountId });
|
|
87
|
+
}
|
|
88
|
+
else if (Array.isArray(source)) {
|
|
89
|
+
if (source.length > 0 && 'file' in source[0]) {
|
|
90
|
+
// VirtualFile[] — multi-file format with directory structure
|
|
91
|
+
const entries = source;
|
|
92
|
+
// Find the index file (the .mrxs, .vms, etc.)
|
|
93
|
+
const indexEntry = entries.find(e => !e.path.includes('/')) ?? entries[0];
|
|
94
|
+
slidePath = await send({ cmd: 'mountDir', entries, indexFile: indexEntry.path, mountId });
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
// File[] — flat list of files
|
|
98
|
+
slidePath = await send({ cmd: 'mountFile', files: source, mountId });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
throw new OpenSlideError('Invalid slide source');
|
|
103
|
+
}
|
|
104
|
+
const handle = await send({ cmd: 'open', mountId: slidePath });
|
|
105
|
+
const info = await send({ cmd: 'getSlideInfo', handle });
|
|
106
|
+
// Reconstruct the Map from the serialized data (postMessage turns Map into plain object)
|
|
107
|
+
const props = info.properties instanceof Map
|
|
108
|
+
? info.properties
|
|
109
|
+
: new Map(Object.entries(info.properties));
|
|
110
|
+
const normalizedInfo = { ...info, properties: props };
|
|
111
|
+
return new Slide(send, handle, mountId, normalizedInfo);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Detect the vendor of a slide file without fully opening it.
|
|
115
|
+
* Returns the vendor string (e.g., "aperio", "hamamatsu") or null.
|
|
116
|
+
*/
|
|
117
|
+
async detectVendor(source) {
|
|
118
|
+
this.ensureAlive();
|
|
119
|
+
const worker = this.leastBusy();
|
|
120
|
+
const send = this.createSendFn(worker);
|
|
121
|
+
const mountId = this.generateMountId();
|
|
122
|
+
let slidePath;
|
|
123
|
+
if (typeof source === 'string') {
|
|
124
|
+
slidePath = await send({ cmd: 'mountUrl', url: source, mountId });
|
|
125
|
+
}
|
|
126
|
+
else if (source instanceof URL) {
|
|
127
|
+
slidePath = await send({ cmd: 'mountUrl', url: source.href, mountId });
|
|
128
|
+
}
|
|
129
|
+
else if (source instanceof File) {
|
|
130
|
+
slidePath = await send({ cmd: 'mountFile', files: [source], mountId });
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
throw new OpenSlideError('detectVendor requires a single file or URL');
|
|
134
|
+
}
|
|
135
|
+
const vendor = await send({ cmd: 'detectVendor', mountId: slidePath });
|
|
136
|
+
await send({ cmd: 'unmount', mountId });
|
|
137
|
+
return vendor;
|
|
138
|
+
}
|
|
139
|
+
/** Get the OpenSlide library version string. */
|
|
140
|
+
async getVersion() {
|
|
141
|
+
this.ensureAlive();
|
|
142
|
+
return await this.sendTo(this.workers[0], { cmd: 'getVersion' });
|
|
143
|
+
}
|
|
144
|
+
/** Terminate all workers. The instance cannot be used after this. */
|
|
145
|
+
terminate() {
|
|
146
|
+
this.terminated = true;
|
|
147
|
+
for (const { worker, pending } of this.workers) {
|
|
148
|
+
for (const [, req] of pending) {
|
|
149
|
+
req.reject(new OpenSlideError('OpenSlide terminated'));
|
|
150
|
+
}
|
|
151
|
+
pending.clear();
|
|
152
|
+
worker.terminate();
|
|
153
|
+
}
|
|
154
|
+
this.workers = [];
|
|
155
|
+
}
|
|
156
|
+
// --- Internal ---
|
|
157
|
+
leastBusy() {
|
|
158
|
+
let best = this.workers[0];
|
|
159
|
+
for (let i = 1; i < this.workers.length; i++) {
|
|
160
|
+
if (this.workers[i].activeTasks < best.activeTasks) {
|
|
161
|
+
best = this.workers[i];
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return best;
|
|
165
|
+
}
|
|
166
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
167
|
+
sendTo(managed, cmd) {
|
|
168
|
+
const id = this.nextId++;
|
|
169
|
+
return new Promise((resolve, reject) => {
|
|
170
|
+
managed.pending.set(id, { resolve, reject });
|
|
171
|
+
managed.activeTasks++;
|
|
172
|
+
managed.worker.postMessage({ ...cmd, id });
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
createSendFn(managed) {
|
|
176
|
+
return (cmd) => this.sendTo(managed, cmd);
|
|
177
|
+
}
|
|
178
|
+
generateMountId() {
|
|
179
|
+
return `m${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
180
|
+
}
|
|
181
|
+
ensureAlive() {
|
|
182
|
+
if (this.terminated) {
|
|
183
|
+
throw new OpenSlideError('OpenSlide has been terminated');
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=openslide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openslide.js","sourceRoot":"","sources":["../../src/openslide.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* slide.ts
|
|
3
|
+
*
|
|
4
|
+
* Represents an opened whole-slide image. Created by OpenSlide.open().
|
|
5
|
+
* Metadata properties are synchronous (eagerly loaded), while pixel
|
|
6
|
+
* operations are async (delegated to a worker).
|
|
7
|
+
*/
|
|
8
|
+
import type { Dimensions, SlideInfo } from './types.js';
|
|
9
|
+
/** Function type for sending a command to a worker and awaiting the response. */
|
|
10
|
+
export type SendCommand = (cmd: Record<string, any>) => Promise<unknown>;
|
|
11
|
+
export declare class Slide {
|
|
12
|
+
/** @internal */ private _send;
|
|
13
|
+
/** @internal */ private _handle;
|
|
14
|
+
/** @internal */ private _mountId;
|
|
15
|
+
/** @internal */ private _info;
|
|
16
|
+
/** @internal */ private _closed;
|
|
17
|
+
/** @internal */
|
|
18
|
+
constructor(send: SendCommand, handle: number, mountId: string, info: SlideInfo);
|
|
19
|
+
/** Number of pyramid levels in the slide. */
|
|
20
|
+
get levelCount(): number;
|
|
21
|
+
/** Dimensions of level 0 (full resolution). */
|
|
22
|
+
get dimensions(): Dimensions;
|
|
23
|
+
/** Dimensions of each pyramid level. */
|
|
24
|
+
get levelDimensions(): readonly Dimensions[];
|
|
25
|
+
/** Downsample factor for each pyramid level. */
|
|
26
|
+
get levelDownsamples(): readonly number[];
|
|
27
|
+
/** Slide metadata properties (vendor, MPP, objective power, etc.). */
|
|
28
|
+
get properties(): ReadonlyMap<string, string>;
|
|
29
|
+
/** Names of associated images (e.g., "label", "thumbnail", "macro"). */
|
|
30
|
+
get associatedImageNames(): readonly string[];
|
|
31
|
+
/**
|
|
32
|
+
* Find the best pyramid level for a given downsample factor.
|
|
33
|
+
* Returns the level index whose downsample is closest to (but not
|
|
34
|
+
* exceeding) the requested factor.
|
|
35
|
+
*/
|
|
36
|
+
getBestLevelForDownsample(downsample: number): number;
|
|
37
|
+
/**
|
|
38
|
+
* Read a region of pixel data from the slide.
|
|
39
|
+
*
|
|
40
|
+
* @param x - Top-left x coordinate in level-0 reference frame.
|
|
41
|
+
* @param y - Top-left y coordinate in level-0 reference frame.
|
|
42
|
+
* @param level - Pyramid level to read from.
|
|
43
|
+
* @param width - Width in pixels at the target level.
|
|
44
|
+
* @param height - Height in pixels at the target level.
|
|
45
|
+
* @returns ImageData containing RGBA pixel data.
|
|
46
|
+
*/
|
|
47
|
+
readRegion(x: number, y: number, level: number, width: number, height: number): Promise<ImageData>;
|
|
48
|
+
/**
|
|
49
|
+
* Read an associated image (e.g., slide label or macro image).
|
|
50
|
+
*
|
|
51
|
+
* @param name - Name of the associated image.
|
|
52
|
+
* @returns ImageData containing RGBA pixel data.
|
|
53
|
+
*/
|
|
54
|
+
readAssociatedImage(name: string): Promise<ImageData>;
|
|
55
|
+
/**
|
|
56
|
+
* Get the dimensions of an associated image.
|
|
57
|
+
*/
|
|
58
|
+
getAssociatedImageDimensions(name: string): Promise<Dimensions>;
|
|
59
|
+
/**
|
|
60
|
+
* Read the ICC color profile embedded in the slide, if any.
|
|
61
|
+
* @returns Raw ICC profile bytes, or null if none.
|
|
62
|
+
*/
|
|
63
|
+
getIccProfile(): Promise<ArrayBuffer | null>;
|
|
64
|
+
/** Close the slide and release WASM resources. */
|
|
65
|
+
close(): Promise<void>;
|
|
66
|
+
/** Support for `await using slide = ...` (explicit resource management). */
|
|
67
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
68
|
+
private ensureOpen;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=slide.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slide.d.ts","sourceRoot":"","sources":["../../src/slide.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGxD,iFAAiF;AAEjF,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEzE,qBAAa,KAAK;IAChB,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAc;IAC5C,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAS;IACzC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAS;IAC1C,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAY;IAC1C,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAS;IAEzC,gBAAgB;gBACJ,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAO/E,6CAA6C;IAC7C,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,+CAA+C;IAC/C,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,wCAAwC;IACxC,IAAI,eAAe,IAAI,SAAS,UAAU,EAAE,CAE3C;IAED,gDAAgD;IAChD,IAAI,gBAAgB,IAAI,SAAS,MAAM,EAAE,CAExC;IAED,sEAAsE;IACtE,IAAI,UAAU,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAE5C;IAED,wEAAwE;IACxE,IAAI,oBAAoB,IAAI,SAAS,MAAM,EAAE,CAE5C;IAED;;;;OAIG;IACH,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAOrD;;;;;;;;;OASG;IACG,UAAU,CACd,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,SAAS,CAAC;IAarB;;;;;OAKG;IACG,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAY3D;;OAEG;IACG,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IASrE;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAQlD,kDAAkD;IAC5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,4EAA4E;IACtE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5C,OAAO,CAAC,UAAU;CAKnB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* slide.ts
|
|
3
|
+
*
|
|
4
|
+
* Represents an opened whole-slide image. Created by OpenSlide.open().
|
|
5
|
+
* Metadata properties are synchronous (eagerly loaded), while pixel
|
|
6
|
+
* operations are async (delegated to a worker).
|
|
7
|
+
*/
|
|
8
|
+
import { OpenSlideError } from './errors.js';
|
|
9
|
+
export class Slide {
|
|
10
|
+
/** @internal */ _send;
|
|
11
|
+
/** @internal */ _handle;
|
|
12
|
+
/** @internal */ _mountId;
|
|
13
|
+
/** @internal */ _info;
|
|
14
|
+
/** @internal */ _closed = false;
|
|
15
|
+
/** @internal */
|
|
16
|
+
constructor(send, handle, mountId, info) {
|
|
17
|
+
this._send = send;
|
|
18
|
+
this._handle = handle;
|
|
19
|
+
this._mountId = mountId;
|
|
20
|
+
this._info = info;
|
|
21
|
+
}
|
|
22
|
+
/** Number of pyramid levels in the slide. */
|
|
23
|
+
get levelCount() {
|
|
24
|
+
return this._info.levelCount;
|
|
25
|
+
}
|
|
26
|
+
/** Dimensions of level 0 (full resolution). */
|
|
27
|
+
get dimensions() {
|
|
28
|
+
return this._info.levelDimensions[0];
|
|
29
|
+
}
|
|
30
|
+
/** Dimensions of each pyramid level. */
|
|
31
|
+
get levelDimensions() {
|
|
32
|
+
return this._info.levelDimensions;
|
|
33
|
+
}
|
|
34
|
+
/** Downsample factor for each pyramid level. */
|
|
35
|
+
get levelDownsamples() {
|
|
36
|
+
return this._info.levelDownsamples;
|
|
37
|
+
}
|
|
38
|
+
/** Slide metadata properties (vendor, MPP, objective power, etc.). */
|
|
39
|
+
get properties() {
|
|
40
|
+
return this._info.properties;
|
|
41
|
+
}
|
|
42
|
+
/** Names of associated images (e.g., "label", "thumbnail", "macro"). */
|
|
43
|
+
get associatedImageNames() {
|
|
44
|
+
return this._info.associatedImageNames;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Find the best pyramid level for a given downsample factor.
|
|
48
|
+
* Returns the level index whose downsample is closest to (but not
|
|
49
|
+
* exceeding) the requested factor.
|
|
50
|
+
*/
|
|
51
|
+
getBestLevelForDownsample(downsample) {
|
|
52
|
+
for (let i = this._info.levelDownsamples.length - 1; i >= 0; i--) {
|
|
53
|
+
if (this._info.levelDownsamples[i] <= downsample)
|
|
54
|
+
return i;
|
|
55
|
+
}
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Read a region of pixel data from the slide.
|
|
60
|
+
*
|
|
61
|
+
* @param x - Top-left x coordinate in level-0 reference frame.
|
|
62
|
+
* @param y - Top-left y coordinate in level-0 reference frame.
|
|
63
|
+
* @param level - Pyramid level to read from.
|
|
64
|
+
* @param width - Width in pixels at the target level.
|
|
65
|
+
* @param height - Height in pixels at the target level.
|
|
66
|
+
* @returns ImageData containing RGBA pixel data.
|
|
67
|
+
*/
|
|
68
|
+
async readRegion(x, y, level, width, height) {
|
|
69
|
+
this.ensureOpen();
|
|
70
|
+
const buffer = await this._send({
|
|
71
|
+
cmd: 'readRegion',
|
|
72
|
+
handle: this._handle,
|
|
73
|
+
x, y, level,
|
|
74
|
+
w: width, h: height,
|
|
75
|
+
});
|
|
76
|
+
const data = new Uint8ClampedArray(buffer);
|
|
77
|
+
return new ImageData(data, width, height);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Read an associated image (e.g., slide label or macro image).
|
|
81
|
+
*
|
|
82
|
+
* @param name - Name of the associated image.
|
|
83
|
+
* @returns ImageData containing RGBA pixel data.
|
|
84
|
+
*/
|
|
85
|
+
async readAssociatedImage(name) {
|
|
86
|
+
this.ensureOpen();
|
|
87
|
+
const result = await this._send({
|
|
88
|
+
cmd: 'readAssociatedImage',
|
|
89
|
+
handle: this._handle,
|
|
90
|
+
name,
|
|
91
|
+
});
|
|
92
|
+
const data = new Uint8ClampedArray(result.buffer);
|
|
93
|
+
return new ImageData(data, result.width, result.height);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get the dimensions of an associated image.
|
|
97
|
+
*/
|
|
98
|
+
async getAssociatedImageDimensions(name) {
|
|
99
|
+
this.ensureOpen();
|
|
100
|
+
return await this._send({
|
|
101
|
+
cmd: 'getAssociatedImageDimensions',
|
|
102
|
+
handle: this._handle,
|
|
103
|
+
name,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Read the ICC color profile embedded in the slide, if any.
|
|
108
|
+
* @returns Raw ICC profile bytes, or null if none.
|
|
109
|
+
*/
|
|
110
|
+
async getIccProfile() {
|
|
111
|
+
this.ensureOpen();
|
|
112
|
+
return await this._send({
|
|
113
|
+
cmd: 'getIccProfile',
|
|
114
|
+
handle: this._handle,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/** Close the slide and release WASM resources. */
|
|
118
|
+
async close() {
|
|
119
|
+
if (this._closed)
|
|
120
|
+
return;
|
|
121
|
+
this._closed = true;
|
|
122
|
+
await this._send({ cmd: 'close', handle: this._handle });
|
|
123
|
+
await this._send({ cmd: 'unmount', mountId: this._mountId });
|
|
124
|
+
}
|
|
125
|
+
/** Support for `await using slide = ...` (explicit resource management). */
|
|
126
|
+
async [Symbol.asyncDispose]() {
|
|
127
|
+
await this.close();
|
|
128
|
+
}
|
|
129
|
+
ensureOpen() {
|
|
130
|
+
if (this._closed) {
|
|
131
|
+
throw new OpenSlideError('Slide has been closed');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=slide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slide.js","sourceRoot":"","sources":["../../src/slide.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/** Width and height in pixels. */
|
|
2
|
+
export interface Dimensions {
|
|
3
|
+
readonly width: number;
|
|
4
|
+
readonly height: number;
|
|
5
|
+
}
|
|
6
|
+
/** Complete metadata returned when a slide is opened. */
|
|
7
|
+
export interface SlideInfo {
|
|
8
|
+
readonly levelCount: number;
|
|
9
|
+
readonly levelDimensions: readonly Dimensions[];
|
|
10
|
+
readonly levelDownsamples: readonly number[];
|
|
11
|
+
readonly properties: ReadonlyMap<string, string>;
|
|
12
|
+
readonly associatedImageNames: readonly string[];
|
|
13
|
+
}
|
|
14
|
+
/** Deep Zoom Image descriptor info. */
|
|
15
|
+
export interface DziInfo {
|
|
16
|
+
readonly tileSize: number;
|
|
17
|
+
readonly overlap: number;
|
|
18
|
+
readonly format: string;
|
|
19
|
+
readonly width: number;
|
|
20
|
+
readonly height: number;
|
|
21
|
+
}
|
|
22
|
+
/** Options for OpenSlide.initialize(). */
|
|
23
|
+
export interface OpenSlideOptions {
|
|
24
|
+
/** Number of Web Workers to spawn (default: navigator.hardwareConcurrency or 4). */
|
|
25
|
+
workerCount?: number;
|
|
26
|
+
/** Custom URL to the WASM module loader JS file. */
|
|
27
|
+
wasmUrl?: string;
|
|
28
|
+
/** Custom URL to the worker JS file (required for CJS/non-ESM environments). */
|
|
29
|
+
workerUrl?: string;
|
|
30
|
+
}
|
|
31
|
+
/** Source that can be opened as a slide. */
|
|
32
|
+
export type SlideSource = File | File[] | VirtualFile[] | URL | string;
|
|
33
|
+
/** A file with a relative path, used for multi-file formats (MIRAX, VMS, DICOM). */
|
|
34
|
+
export interface VirtualFile {
|
|
35
|
+
readonly path: string;
|
|
36
|
+
readonly file: File;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Messages sent from the main thread to a worker.
|
|
40
|
+
* Each command has a unique `id` so responses can be matched.
|
|
41
|
+
*/
|
|
42
|
+
export type WorkerCommand = {
|
|
43
|
+
id: number;
|
|
44
|
+
cmd: 'init';
|
|
45
|
+
wasmUrl?: string;
|
|
46
|
+
} | {
|
|
47
|
+
id: number;
|
|
48
|
+
cmd: 'open';
|
|
49
|
+
mountId: string;
|
|
50
|
+
} | {
|
|
51
|
+
id: number;
|
|
52
|
+
cmd: 'close';
|
|
53
|
+
handle: number;
|
|
54
|
+
} | {
|
|
55
|
+
id: number;
|
|
56
|
+
cmd: 'getSlideInfo';
|
|
57
|
+
handle: number;
|
|
58
|
+
} | {
|
|
59
|
+
id: number;
|
|
60
|
+
cmd: 'readRegion';
|
|
61
|
+
handle: number;
|
|
62
|
+
x: number;
|
|
63
|
+
y: number;
|
|
64
|
+
level: number;
|
|
65
|
+
w: number;
|
|
66
|
+
h: number;
|
|
67
|
+
} | {
|
|
68
|
+
id: number;
|
|
69
|
+
cmd: 'readAssociatedImage';
|
|
70
|
+
handle: number;
|
|
71
|
+
name: string;
|
|
72
|
+
} | {
|
|
73
|
+
id: number;
|
|
74
|
+
cmd: 'getAssociatedImageDimensions';
|
|
75
|
+
handle: number;
|
|
76
|
+
name: string;
|
|
77
|
+
} | {
|
|
78
|
+
id: number;
|
|
79
|
+
cmd: 'detectVendor';
|
|
80
|
+
mountId: string;
|
|
81
|
+
} | {
|
|
82
|
+
id: number;
|
|
83
|
+
cmd: 'getVersion';
|
|
84
|
+
} | {
|
|
85
|
+
id: number;
|
|
86
|
+
cmd: 'getIccProfile';
|
|
87
|
+
handle: number;
|
|
88
|
+
} | {
|
|
89
|
+
id: number;
|
|
90
|
+
cmd: 'mountFile';
|
|
91
|
+
files: File[];
|
|
92
|
+
mountId: string;
|
|
93
|
+
} | {
|
|
94
|
+
id: number;
|
|
95
|
+
cmd: 'mountDir';
|
|
96
|
+
entries: VirtualFile[];
|
|
97
|
+
indexFile: string;
|
|
98
|
+
mountId: string;
|
|
99
|
+
} | {
|
|
100
|
+
id: number;
|
|
101
|
+
cmd: 'mountUrl';
|
|
102
|
+
url: string;
|
|
103
|
+
mountId: string;
|
|
104
|
+
} | {
|
|
105
|
+
id: number;
|
|
106
|
+
cmd: 'unmount';
|
|
107
|
+
mountId: string;
|
|
108
|
+
};
|
|
109
|
+
/** Messages sent from a worker back to the main thread. */
|
|
110
|
+
export type WorkerResponse = {
|
|
111
|
+
id: number;
|
|
112
|
+
ok: true;
|
|
113
|
+
result: unknown;
|
|
114
|
+
} | {
|
|
115
|
+
id: number;
|
|
116
|
+
ok: false;
|
|
117
|
+
error: string;
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Emscripten module shape we expect after createOpenSlideModule() resolves.
|
|
121
|
+
* Only the parts we use are typed here.
|
|
122
|
+
*/
|
|
123
|
+
export interface OpenSlideWasmModule {
|
|
124
|
+
cwrap: (name: string, returnType: string | null, argTypes: string[], opts?: {
|
|
125
|
+
async?: boolean;
|
|
126
|
+
}) => (...args: unknown[]) => unknown;
|
|
127
|
+
UTF8ToString: (ptr: number) => string;
|
|
128
|
+
HEAPU8: Uint8Array;
|
|
129
|
+
HEAP32: Int32Array;
|
|
130
|
+
HEAP64: BigInt64Array;
|
|
131
|
+
_malloc: (size: number) => number;
|
|
132
|
+
_free: (ptr: number) => void;
|
|
133
|
+
FS: EmscriptenFS;
|
|
134
|
+
MEMFS: unknown;
|
|
135
|
+
WORKERFS: unknown;
|
|
136
|
+
}
|
|
137
|
+
export interface EmscriptenFS {
|
|
138
|
+
mkdir: (path: string) => void;
|
|
139
|
+
rmdir: (path: string) => void;
|
|
140
|
+
unlink: (path: string) => void;
|
|
141
|
+
mount: (type: unknown, opts: Record<string, unknown>, mountpoint: string) => unknown;
|
|
142
|
+
unmount: (mountpoint: string) => void;
|
|
143
|
+
readdir: (path: string) => string[];
|
|
144
|
+
readFile: (path: string, opts?: {
|
|
145
|
+
encoding?: string;
|
|
146
|
+
}) => Uint8Array;
|
|
147
|
+
writeFile: (path: string, data: Uint8Array) => void;
|
|
148
|
+
createLazyFile: (parent: string, name: string, url: string, canRead: boolean, canWrite: boolean) => unknown;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|