Skip to content

Commit aacb8ff

Browse files
authored
Merge pull request #1328 from mathjax/refactor/adaptors
Move the node createWorker() method to the NodeMixin.
2 parents 7dfe1cb + 71da86f commit aacb8ff

File tree

2 files changed

+49
-41
lines changed

2 files changed

+49
-41
lines changed

ts/adaptors/NodeMixin.ts

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,18 @@
2323
* @author dpvc@mathjax.org (Davide Cervone)
2424
*/
2525

26-
import { DOMAdaptor } from '../core/DOMAdaptor.js';
26+
import { DOMAdaptor, minWorker } from '../core/DOMAdaptor.js';
2727
import { userOptions, defaultOptions, OptionList } from '../util/Options.js';
28+
import { asyncLoad } from '../util/AsyncLoad.js';
29+
30+
/**
31+
* A minimal worker thread interface
32+
*/
33+
export interface WebWorker {
34+
on(kind: string, listener: (event: Event) => void): void;
35+
postMessage(msg: any): void;
36+
terminate(): void;
37+
}
2838

2939
/**
3040
* A constructor for a given class
@@ -169,5 +179,38 @@ export function NodeMixin<N, T, D, A extends AdaptorConstructor<N, T, D>>(
169179
? { left: 0, right: 0, top: 0, bottom: 0 }
170180
: super.nodeBBox(node);
171181
}
182+
183+
/**
184+
* @override
185+
*/
186+
public async createWorker(
187+
listener: (event: any) => void,
188+
options: OptionList
189+
): Promise<minWorker> {
190+
const { Worker } = await asyncLoad('node:worker_threads');
191+
class LiteWorker {
192+
protected worker: WebWorker;
193+
constructor(url: string, options: OptionList = {}) {
194+
this.worker = new Worker(url, options);
195+
}
196+
addEventListener(kind: string, listener: (event: any) => void) {
197+
this.worker.on(kind, listener);
198+
}
199+
postMessage(msg: any) {
200+
this.worker.postMessage({ data: msg });
201+
}
202+
terminate() {
203+
this.worker.terminate();
204+
}
205+
}
206+
const { path, maps } = options;
207+
const url = `${path}/${options.worker}`;
208+
const worker = new LiteWorker(url, {
209+
type: 'module',
210+
workerData: { maps },
211+
});
212+
worker.addEventListener('message', listener);
213+
return worker;
214+
}
172215
};
173216
}

ts/adaptors/liteAdaptor.ts

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
* @author dpvc@mathjax.org (Davide Cervone)
2222
*/
2323

24-
import { AbstractDOMAdaptor, minWorker } from '../core/DOMAdaptor.js';
24+
import { AbstractDOMAdaptor } from '../core/DOMAdaptor.js';
2525
import { NodeMixin, Constructor } from './NodeMixin.js';
2626
import { LiteDocument } from './lite/Document.js';
2727
import { LiteElement, LiteNode } from './lite/Element.js';
@@ -32,17 +32,6 @@ import { LiteParser } from './lite/Parser.js';
3232
import { Styles } from '../util/Styles.js';
3333
import { OptionList } from '../util/Options.js';
3434

35-
import { asyncLoad } from '../util/AsyncLoad.js';
36-
37-
/**
38-
* A minimal worker thread interface
39-
*/
40-
export interface WebWorker {
41-
on(kind: string, listener: (event: Event) => void): void;
42-
postMessage(msg: any): void;
43-
terminate(): void;
44-
}
45-
4635
/************************************************************/
4736

4837
/**
@@ -710,36 +699,12 @@ export class LiteBase extends AbstractDOMAdaptor<
710699
}
711700

712701
/**
702+
* This will be overridden by the NodeMixin below.
703+
*
713704
* @override
714705
*/
715-
public async createWorker(
716-
listener: (event: any) => void,
717-
options: OptionList
718-
): Promise<minWorker> {
719-
const { Worker } = await asyncLoad('node:worker_threads');
720-
class LiteWorker {
721-
protected worker: WebWorker;
722-
constructor(url: string, options: OptionList = {}) {
723-
this.worker = new Worker(url, options);
724-
}
725-
addEventListener(kind: string, listener: (event: any) => void) {
726-
this.worker.on(kind, listener);
727-
}
728-
postMessage(msg: any) {
729-
this.worker.postMessage({ data: msg });
730-
}
731-
terminate() {
732-
this.worker.terminate();
733-
}
734-
}
735-
const { path, maps } = options;
736-
const url = `${path}/${options.worker}`;
737-
const worker = new LiteWorker(url, {
738-
type: 'module',
739-
workerData: { maps },
740-
});
741-
worker.addEventListener('message', listener);
742-
return worker;
706+
public async createWorker(): Promise<any> {
707+
return null;
743708
}
744709
}
745710

0 commit comments

Comments
 (0)