Skip to content

Commit d66b672

Browse files
committed
Expose dotviz options up the call stack
1 parent e61a7b2 commit d66b672

File tree

2 files changed

+25
-18
lines changed

2 files changed

+25
-18
lines changed

src/graph/graphviz-worker.ts

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,21 @@
1-
// eslint-disable-next-line import/no-unresolved
2-
import { type RenderResult, WASM_HASH as DotVizWorkerHash } from 'dotviz';
1+
import {
2+
type Graph,
3+
RenderOptions,
4+
type RenderResult,
5+
WASM_HASH as DotVizWorkerHash,
6+
// eslint-disable-next-line import/no-unresolved
7+
} from 'dotviz';
38
import DotVizWorkerSource from 'dotviz/dotviz-inline-worker';
4-
import { type RenderRequest, type RenderResponse } from 'dotviz/dotviz-worker';
9+
import { type RenderResponse } from 'dotviz/dotviz-worker';
510

611
import { computeHash } from '../utils/compute-hash.ts';
712
import { LocalStorageLRUCache } from '../utils/local-storage-lru-cache.ts';
813

14+
export interface RenderArgs {
15+
input: string | Graph;
16+
options: RenderOptions;
17+
}
18+
919
export class VizWorker {
1020
private _cache = new LocalStorageLRUCache({
1121
localStorageKey: 'VoyagerSVGCache',
@@ -37,8 +47,8 @@ export class VizWorker {
3747
});
3848
}
3949

40-
async renderString(dot: string): Promise<string> {
41-
const cacheKey = await this.generateCacheKey(dot);
50+
async render(renderArgs: RenderArgs): Promise<string> {
51+
const cacheKey = await this.generateCacheKey(renderArgs);
4252

4353
if (cacheKey != null) {
4454
try {
@@ -52,7 +62,7 @@ export class VizWorker {
5262
}
5363
}
5464

55-
const svg = await this._renderString(dot);
65+
const svg = await this._render(renderArgs);
5666

5767
if (cacheKey != null) {
5868
try {
@@ -64,24 +74,18 @@ export class VizWorker {
6474
return svg;
6575
}
6676

67-
async generateCacheKey(dot: string): Promise<string | null> {
68-
const dotHash = await computeHash(dot);
77+
async generateCacheKey(renderArgs: RenderArgs): Promise<string | null> {
78+
const dotHash = await computeHash(JSON.stringify(renderArgs));
6979
return dotHash == null ? null : `worker:${DotVizWorkerHash}:dot:${dotHash}`;
7080
}
7181

72-
_renderString(src: string): Promise<string> {
73-
const id = this._listeners.size;
74-
const renderRequest: RenderRequest = {
75-
id,
76-
input: src,
77-
options: { engine: 'dot', format: 'svg' },
78-
};
79-
82+
_render(renderArgs: RenderArgs): Promise<string> {
8083
return new Promise((resolve, reject) => {
84+
const id = this._listeners.size;
8185
this._listeners.set(id, RenderResponseListener);
8286

8387
console.time('graphql-voyager: Rendering SVG');
84-
this._worker.postMessage(renderRequest);
88+
this._worker.postMessage({ id, ...renderArgs });
8589

8690
function RenderResponseListener(result: RenderResult): void {
8791
console.timeEnd('graphql-voyager: Rendering SVG');

src/graph/svg-renderer.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ const vizWorker = new VizWorker();
1111

1212
export async function renderSvg(typeGraph: TypeGraph) {
1313
const dot = getDot(typeGraph);
14-
const rawSVG = await vizWorker.renderString(dot);
14+
const rawSVG = await vizWorker.render({
15+
input: dot,
16+
options: { engine: 'dot', format: 'svg' },
17+
});
1518
const svg = preprocessVizSVG(rawSVG);
1619
return svg;
1720
}

0 commit comments

Comments
 (0)