Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
/node_modules
/dist
/demo-dist
/worker-dist
/typings
/test-results
/playwright-report
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,8 @@
/node_modules
/dist
/demo-dist
/worker-dist
/middleware
/typings
/test-results
/playwright-report
/graphql-voyager-*.tgz
/graphql-voyager-*.tgz
4 changes: 1 addition & 3 deletions cspell.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ ignorePaths:
- cspell.yml
- package.json
- demo/presets
- worker/viz.cpp
- worker/Dockerfile
- tests/*-snapshots/
dictionaries:
- html
Expand All @@ -22,6 +20,7 @@ overrides:
- requestfailed

words:
- dotviz
- graphviz
- svgr
- reactroot # FIXME https://github.com/facebook/react/issues/10971
Expand All @@ -43,4 +42,3 @@ words:
- pageview
- jsdelivr
- GraphiQL
- nojekyll
6 changes: 0 additions & 6 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
services:
build-worker:
build:
context: .
dockerfile: ./worker/Dockerfile
stdin_open: true
tty: true
serve-webpack-example:
build:
context: .
Expand Down
7 changes: 7 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,11 @@
"preversion": "npm ci --ignore-scripts && npm test",
"changelog": "node scripts/gen-changelog.ts",
"test": "npm run lint && npm run check && npm run testonly && npm run prettier:check && npm run check:spell",
"start": "npm run build:worker && webpack serve --mode=development",
"start": "webpack serve --mode=development",
"serve": "node ./scripts/serve-directory.ts -p 9090 demo-dist/graphql-voyager",
"bundle": "rm -rf dist && webpack --mode=production",
"build:ts": "tsc --project tsconfig.build.json",
"build:worker": "node scripts/bundle_worker.ts",
"build:release": "npm run build:worker && npm run bundle && npm run build:ts",
"build:release": "npm run bundle && npm run build:ts",
"build:demo": "npm run build:release && rm -rf demo-dist && mkdir demo-dist && cp -R demo/ demo-dist/graphql-voyager/ && cp dist/voyager.css* dist/voyager.standalone.js* demo-dist/graphql-voyager/",
"stats": "NODE_ENV=production webpack --json --mode=production > stats.json",
"lint": "eslint --cache --max-warnings 0 .",
Expand All @@ -65,6 +64,7 @@
"@mui/lab": "7.0.0-beta.13",
"@mui/material": "7.1.1",
"commonmark": "0.31.2",
"dotviz": "0.0.6",
"svg-pan-zoom": "3.6.2"
},
"devDependencies": {
Expand Down
34 changes: 0 additions & 34 deletions scripts/bundle_worker.ts

This file was deleted.

66 changes: 40 additions & 26 deletions src/graph/graphviz-worker.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import {
RenderRequest,
RenderResponse,
RenderResult,
VizWorkerHash,
VizWorkerSource,
// eslint-disable-next-line import/no-unresolved
} from '../../worker/voyager.worker.ts';
// eslint-disable-next-line import/no-unresolved
import { type RenderResult, WASM_HASH as DotVizWorkerHash } from 'dotviz';
import DotVizWorkerSource from 'dotviz/dotviz-inline-worker';
import { type RenderRequest, type RenderResponse } from 'dotviz/dotviz-worker';

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

Expand All @@ -18,13 +15,20 @@ export class VizWorker {
private _listeners: Map<number, (result: RenderResult) => void> = new Map();

constructor() {
const blob = new Blob([VizWorkerSource], {
const blob = new Blob([DotVizWorkerSource], {
type: 'application/javascript',
});
const url = URL.createObjectURL(blob);
this._worker = new Worker(url, { name: 'graphql-voyager-worker' });
this._worker = new Worker(url, {
name: 'graphql-voyager-worker',
type: 'module',
});
URL.revokeObjectURL(url);

this._worker.addEventListener('error', (event) => {
// FIXME: better error handling
console.error('unexpected error from dotviz worker: ', event);
});
this._worker.addEventListener('message', (event) => {
const { id, result } = event.data as RenderResponse;

Expand Down Expand Up @@ -62,29 +66,39 @@ export class VizWorker {

async generateCacheKey(dot: string): Promise<string | null> {
const dotHash = await computeHash(dot);
return dotHash == null ? null : `worker:${VizWorkerHash}:dot:${dotHash}`;
return dotHash == null ? null : `worker:${DotVizWorkerHash}:dot:${dotHash}`;
}

_renderString(src: string): Promise<string> {
const id = this._listeners.size;
const renderRequest: RenderRequest = {
id,
input: src,
options: { engine: 'dot', format: 'svg' },
};

return new Promise((resolve, reject) => {
const id = this._listeners.size;

this._listeners.set(id, function (result): void {
if ('error' in result) {
const { error } = result;
const e = new Error(error.message);
if (error.fileName) (e as any).fileName = error.fileName;
if (error.lineNumber) (e as any).lineNumber = error.lineNumber;
if (error.stack) (e as any).stack = error.stack;
return reject(e);
}
console.timeEnd('graphql-voyager: Rendering SVG');
resolve(result.value);
});
this._listeners.set(id, RenderResponseListener);

console.time('graphql-voyager: Rendering SVG');
const renderRequest: RenderRequest = { id, src };
this._worker.postMessage(renderRequest);

function RenderResponseListener(result: RenderResult): void {
console.timeEnd('graphql-voyager: Rendering SVG');
if (result.errors.length !== 0) {
return reject(
AggregateError([
result.errors.map(
(error) => new Error(`${error.level} : ${error.message}`),
),
]),
);
}
if (result.status === 'success') {
return resolve(result.output);
}
return reject(new Error('invalid response from dotviz worker'));
}
});
}
}
Expand Down
Binary file modified tests/demo.spec.ts-snapshots/choose-github-preset-Demo-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified tests/demo.spec.ts-snapshots/choose-star-wars-preset-Demo-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified tests/demo.spec.ts-snapshots/choose-yelp-preset-Demo-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 5 additions & 2 deletions tests/demo.spec.ts-snapshots/custom-sdl-graph-Demo-linux.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified tests/demo.spec.ts-snapshots/demo-after-resize-Demo-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified tests/demo.spec.ts-snapshots/demo-before-resize-Demo-linux.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading