From e4ebb8d07af6b39d047ff69e4eb2a978244e0d78 Mon Sep 17 00:00:00 2001 From: Aaron Date: Thu, 31 Oct 2024 10:11:34 +0800 Subject: [PATCH] feat: support g6 ssr (#6454) * refactor: canvas support disable mutiple layers * refactor: fix globalThis access * feat: add g6 ssr * chore: config build options * chore: update readme --------- Co-authored-by: antv --- .github/workflows/ci.yml | 7 + package.json | 1 + packages/g6-ssr/README.md | 63 +++++++++ packages/g6-ssr/__tests__/assets/file.pdf | Bin 0 -> 27797 bytes packages/g6-ssr/__tests__/assets/file.svg | 132 ++++++++++++++++++ packages/g6-ssr/__tests__/assets/image.png | Bin 0 -> 116900 bytes packages/g6-ssr/__tests__/graph-options.json | 113 +++++++++++++++ packages/g6-ssr/__tests__/test.spec.ts | 83 +++++++++++ packages/g6-ssr/bin/g6-ssr.js | 62 ++++++++ packages/g6-ssr/jest.config.js | 11 ++ packages/g6-ssr/package.json | 41 ++++++ packages/g6-ssr/rollup.config.mjs | 31 ++++ packages/g6-ssr/src/canvas.ts | 38 +++++ packages/g6-ssr/src/graph.ts | 55 ++++++++ packages/g6-ssr/src/index.ts | 3 + packages/g6-ssr/src/types.ts | 19 +++ packages/g6-ssr/tsconfig.build.json | 7 + packages/g6-ssr/tsconfig.json | 14 ++ packages/g6-ssr/tsconfig.test.json | 7 + packages/g6/__tests__/main.ts | 19 ++- .../g6/__tests__/unit/runtime/canvas.spec.ts | 10 ++ packages/g6/__tests__/utils/create.ts | 17 +-- packages/g6/src/exports.ts | 3 +- packages/g6/src/plugins/fullscreen/index.ts | 4 +- packages/g6/src/runtime/canvas.ts | 69 ++++++--- packages/g6/src/runtime/graph.ts | 17 ++- packages/g6/src/spec/canvas.ts | 12 +- packages/g6/src/utils/shortcut.ts | 4 +- 28 files changed, 800 insertions(+), 42 deletions(-) create mode 100644 packages/g6-ssr/README.md create mode 100644 packages/g6-ssr/__tests__/assets/file.pdf create mode 100644 packages/g6-ssr/__tests__/assets/file.svg create mode 100644 packages/g6-ssr/__tests__/assets/image.png create mode 100644 packages/g6-ssr/__tests__/graph-options.json create mode 100644 packages/g6-ssr/__tests__/test.spec.ts create mode 100755 packages/g6-ssr/bin/g6-ssr.js create mode 100644 packages/g6-ssr/jest.config.js create mode 100644 packages/g6-ssr/package.json create mode 100644 packages/g6-ssr/rollup.config.mjs create mode 100644 packages/g6-ssr/src/canvas.ts create mode 100644 packages/g6-ssr/src/graph.ts create mode 100644 packages/g6-ssr/src/index.ts create mode 100644 packages/g6-ssr/src/types.ts create mode 100644 packages/g6-ssr/tsconfig.build.json create mode 100644 packages/g6-ssr/tsconfig.json create mode 100644 packages/g6-ssr/tsconfig.test.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5395ca2ca46..04c142eb9df 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,6 +18,13 @@ jobs: with: node-version: 18 + - name: Install Dependencies + run: | + brew update + brew install python3 || : # python doesn't need to be linked + brew install pkg-config cairo pango libpng jpeg giflib librsvg + pip install setuptools + - uses: pnpm/action-setup@v4 name: Install pnpm with: diff --git a/package.json b/package.json index 778405918c8..1c5e92c063a 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "@commitlint/config-conventional": "^18.6.3", "@playwright/test": "^1.48.2", "@rollup/plugin-commonjs": "^25.0.8", + "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.3.0", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.6", diff --git a/packages/g6-ssr/README.md b/packages/g6-ssr/README.md new file mode 100644 index 00000000000..c8b4e7687c9 --- /dev/null +++ b/packages/g6-ssr/README.md @@ -0,0 +1,63 @@ +## SSR extension for G6 5.0 + +This extension package provides SSR support for G6 5.0, which supports canvas rendering in server side. + +## Usage + +### Install + +```bash +npm install @antv/g6-ssr +``` + +### Render in JavaScript API + +> For complete options, please refer to [G6 Graph Options](https://g6.antv.antgroup.com/api/graph/option) + +```js +import { createGraph } from '@antv/g6-ssr'; + +const graph = await createGraph({ + width: 500, + height: 500, + data: { + // data + }, + // other options +}); + +graph.exportToFile('image'); +// -> image.png +``` + +### Render in CLI + +```bash +npx g6-ssr export -i [graph-options].json -o ./image +``` + +### Export SVG / PDF + +When render in JavaScript API, you can pass `outputType` option to export SVG or PDF. + +```js +const graph = await createGraph({ + width: 500, + height: 500, + data: { + // data + }, + outputType: 'svg', // or 'pdf' + // other options +}); +``` + +When render in CLI, you can pass `-t` or `--type` option to export SVG or PDF. + +```bash +npx g6-ssr export -i [graph-options].json -o ./file -t pdf +``` + +## License + +MIT diff --git a/packages/g6-ssr/__tests__/assets/file.pdf b/packages/g6-ssr/__tests__/assets/file.pdf new file mode 100644 index 0000000000000000000000000000000000000000..64d3c2f1b1998792b64310b9453cab5feb50a8a1 GIT binary patch literal 27797 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/g6-ssr/__tests__/assets/image.png b/packages/g6-ssr/__tests__/assets/image.png new file mode 100644 index 0000000000000000000000000000000000000000..797b51982a839b58ffa1ab9a1ba31d6e6e2683a6 GIT binary patch literal 116900 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

FZ#+{k}Q&PO)IZP#N$qn{Z=nuLuv*p4Xalw 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

K{t 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 { + toMatchFile(path: string): R; + } + } +} + +describe('createGraph', () => { + const fn = async (outputType?: any) => { + const data = (await fetch('https://assets.antv.antgroup.com/g6/circular.json').then((res) => res.json())) as any; + + return await createGraph({ + width: 500, + height: 500, + outputType, + autoFit: 'view', + background: 'rgba(100, 80, 180, 0.4)', + data, + node: { + style: { + labelText: (d) => d.id, + labelFill: '#fff', + labelPlacement: 'center', + }, + }, + layout: { + type: 'circular', + }, + }); + }; + + expect.extend({ + toMatchFile: (received: Graph, path: string) => { + const pass = existsSync(path) ? received.toBuffer().equals(readFileSync(path)) : true; + if (pass) { + return { + message: () => 'passed', + pass: true, + }; + } else { + return { + message: () => 'expected files are equal', + pass: false, + }; + } + }, + }); + + it('image image', async () => { + const graph = await fn(); + + expect(graph).toMatchFile('./assets/image.png'); + + graph.exportToFile(join(__dirname, './assets/image')); + + graph.destroy(); + }); + + it('file pdf', async () => { + const graph = await fn('pdf'); + + graph.exportToFile(join(__dirname, '/assets/file')); + + graph.destroy(); + }); + + it('file svg', async () => { + const graph = await fn('svg'); + + expect(graph).toMatchFile('./assets/file.svg'); + + graph.exportToFile(join(__dirname, './assets/file')); + + graph.destroy(); + }); +}); diff --git a/packages/g6-ssr/bin/g6-ssr.js b/packages/g6-ssr/bin/g6-ssr.js new file mode 100755 index 00000000000..3b0e023f8bc --- /dev/null +++ b/packages/g6-ssr/bin/g6-ssr.js @@ -0,0 +1,62 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +/* eslint-disable no-console */ +const cac = require('cac'); +const fs = require('fs'); +const { createGraph } = require('../dist/g6-ssr.cjs'); +const { version } = require('../package.json'); + +const cli = cac(); + +cli.version(version); + +cli.command('version', 'Show version').action(() => { + console.log(version); +}); + +cli + .command('export', 'Export G6 Options to Image, PDF or SVG') + .option('-i, --input ', 'Path to the G6 options file') + .option('-o, --output ', 'Path to the export file') + .option('-t, --type [type]', 'File type, default is image') + .action(async (options) => { + const { input, output, type } = options; + + if (!input) { + console.log('\x1b[31m%s\x1b[0m', 'Please provide a path to the G6 options file'); + process.exit(1); + } + + if (!fs.existsSync(input)) { + console.log('\x1b[31m%s\x1b[0m', 'File does not exist: ', input); + process.exit(1); + } + + let graphOptions; + + try { + graphOptions = JSON.parse(fs.readFileSync(input, 'utf-8')); + } catch (e) { + console.log('\x1b[31m%s\x1b[0m', 'Invalid JSON file'); + process.exit(1); + } + + if (!graphOptions.outputType) { + if (type === 'svg' || type === 'pdf') { + graphOptions.outputType = type; + } + } + + console.log(`Exporting to ${type || 'image'}...`); + + const graph = await createGraph(graphOptions); + + graph.exportToFile(output, type); + + console.log('\x1b[32m%s\x1b[0m', 'Exported successfully!'); + + process.exit(0); + }); + +cli.help(); + +cli.parse(); diff --git a/packages/g6-ssr/jest.config.js b/packages/g6-ssr/jest.config.js new file mode 100644 index 00000000000..be420483aa6 --- /dev/null +++ b/packages/g6-ssr/jest.config.js @@ -0,0 +1,11 @@ +module.exports = { + transform: { + '^.+\\.[tj]s$': ['@swc/jest'], + }, + collectCoverageFrom: ['src/**/*.ts'], + moduleFileExtensions: ['ts', 'tsx', 'js', 'json'], + transformIgnorePatterns: [`/node_modules/.pnpm/(?!(d3-*))`], + moduleNameMapper: { + '@antv/g6': '/../g6/src', + }, +}; diff --git a/packages/g6-ssr/package.json b/packages/g6-ssr/package.json new file mode 100644 index 00000000000..7490e97b30f --- /dev/null +++ b/packages/g6-ssr/package.json @@ -0,0 +1,41 @@ +{ + "name": "@antv/g6-ssr", + "version": "0.0.1", + "description": "", + "keywords": [ + "antv", + "g6", + "ssr" + ], + "license": "MIT", + "author": "Aarebecca", + "main": "./dist/g6-ssr.cjs", + "types": "./dist/lib/index.d.ts", + "bin": "./bin/g6-ssr.cjs", + "files": [ + "dist", + "bin" + ], + "scripts": { + "build": "rimraf ./dist && rollup -c", + "ci": "run-s lint type-check build test", + "dev": "tsx ./src/index.ts", + "lint": "eslint ./src __tests__ --quiet && prettier ./src __tests__ --check", + "prepublishOnly": "npm run ci", + "test": "jest", + "type-check": "tsc --noEmit -p tsconfig.test.json" + }, + "dependencies": { + "@antv/g": "^6.1.3", + "@antv/g-canvas": "^2.0.12", + "@antv/g6": "5.0.28-alpha.1", + "cac": "^6.7.14", + "canvas": "^2.11.2", + "webpack-cli": "^5.1.4" + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "type11": "module" +} diff --git a/packages/g6-ssr/rollup.config.mjs b/packages/g6-ssr/rollup.config.mjs new file mode 100644 index 00000000000..caa46baec6e --- /dev/null +++ b/packages/g6-ssr/rollup.config.mjs @@ -0,0 +1,31 @@ +import commonjs from '@rollup/plugin-commonjs'; +import json from '@rollup/plugin-json'; +import resolve from '@rollup/plugin-node-resolve'; +import terser from '@rollup/plugin-terser'; +import typescript from '@rollup/plugin-typescript'; +import nodePolyfills from 'rollup-plugin-polyfill-node'; + +export default [ + { + input: 'src/index.ts', + output: { + file: 'dist/g6-ssr.cjs', + format: 'cjs', + exports: 'named', + // format: 'umd', + // name: 'G6SSR', + sourcemap: true, + }, + plugins: [ + nodePolyfills(), + resolve(), + commonjs(), + json(), + typescript({ + tsconfig: 'tsconfig.build.json', + }), + terser(), + ], + external: ['fs', 'path', 'canvas'], + }, +]; diff --git a/packages/g6-ssr/src/canvas.ts b/packages/g6-ssr/src/canvas.ts new file mode 100644 index 00000000000..eb213c363da --- /dev/null +++ b/packages/g6-ssr/src/canvas.ts @@ -0,0 +1,38 @@ +import { Renderer } from '@antv/g-canvas'; +import { Canvas as G6Canvas } from '@antv/g6'; +import type { Canvas as NodeCanvas } from 'canvas'; +import { createCanvas as createNodeCanvas } from 'canvas'; +import type { Options } from './types'; + +/** + * 创建画布 + * + * create canvas + * @param options options 画布配置 | options canvas configuration + * @returns [G6 画布, NodeCanvas 画布] | [G6Canvas, NodeCanvas] + */ +export function createCanvas(options: Options): [G6Canvas, NodeCanvas] { + const { width, height, background, outputType } = options; + const nodeCanvas = createNodeCanvas(width, height, outputType as any); + const offscreenNodeCanvas = createNodeCanvas(1, 1); + + const g6Canvas = new G6Canvas({ + width, + height, + background, + // @ts-expect-error missing types + canvas: nodeCanvas as any, + offscreenCanvas: offscreenNodeCanvas as any, + enableMultiLayer: false, + renderer: () => { + const renderer = new Renderer(); + const htmlRendererPlugin = renderer.getPlugin('html-renderer'); + const domInteractionPlugin = renderer.getPlugin('dom-interaction'); + renderer.unregisterPlugin(htmlRendererPlugin); + renderer.unregisterPlugin(domInteractionPlugin); + return renderer; + }, + }); + + return [g6Canvas, nodeCanvas]; +} diff --git a/packages/g6-ssr/src/graph.ts b/packages/g6-ssr/src/graph.ts new file mode 100644 index 00000000000..8466b257ea3 --- /dev/null +++ b/packages/g6-ssr/src/graph.ts @@ -0,0 +1,55 @@ +import { Graph as G6Graph } from '@antv/g6'; +import { existsSync, lstatSync, writeFileSync } from 'fs'; +import { createCanvas } from './canvas'; +import type { Graph, Options } from './types'; + +/** + * 获取输出文件的扩展名 + * + * Get the extension name of the output file + * @param options - 配置项 | options + * @returns 输出文件的扩展名 | The extension name of the output file + */ +function getExtendNameOf(options: Options) { + const { outputType } = options; + if (outputType === 'pdf') return '.pdf'; + if (outputType === 'svg') return '.svg'; + return '.png'; +} + +/** + * 创建图并等待渲染完成 + * + * Create a graph and wait for the rendering to complete + * @param options - 图配置项 | Graph options + * @returns 扩展图实例 | Extended graph instance + */ +export async function createGraph(options: Options) { + const [g6Canvas, nodeCanvas] = createCanvas(options); + + const { outputType, ...restOptions } = options; + const graph = new G6Graph({ + animation: false, + ...restOptions, + container: g6Canvas, + }); + + // @ts-expect-error extend Graph + graph.exportToFile = (file: string) => { + const extendName = getExtendNameOf(options); + if (!file.endsWith(extendName)) { + if (!existsSync(file)) file += extendName; + else if (lstatSync(file).isDirectory()) file = `${file}/image${extendName}`; + else file += extendName; + } + + writeFileSync(file, nodeCanvas.toBuffer()); + }; + + // @ts-expect-error extend Graph + graph.toBuffer = () => nodeCanvas.toBuffer(); + + await graph.render(); + + return graph as Graph; +} diff --git a/packages/g6-ssr/src/index.ts b/packages/g6-ssr/src/index.ts new file mode 100644 index 00000000000..7cbe2d27f1b --- /dev/null +++ b/packages/g6-ssr/src/index.ts @@ -0,0 +1,3 @@ +export { createCanvas } from './canvas'; +export { createGraph } from './graph'; +export type { Graph, Options } from './types'; diff --git a/packages/g6-ssr/src/types.ts b/packages/g6-ssr/src/types.ts new file mode 100644 index 00000000000..647d40c4843 --- /dev/null +++ b/packages/g6-ssr/src/types.ts @@ -0,0 +1,19 @@ +import type { GraphOptions } from '@antv/g6'; +import { Graph as G6Graph } from '@antv/g6'; + +export interface Options extends Omit { + width: number; + height: number; + /** + * 输出文件类型,默认导出为图片 + * + * output file type, default export as image + * @defaultValue 'image' + */ + outputType?: 'image' | 'pdf' | 'svg'; +} + +export interface Graph extends G6Graph { + exportToFile: (file: string) => void; + toBuffer: () => Buffer; +} diff --git a/packages/g6-ssr/tsconfig.build.json b/packages/g6-ssr/tsconfig.build.json new file mode 100644 index 00000000000..5790ea55085 --- /dev/null +++ b/packages/g6-ssr/tsconfig.build.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "paths": {} + }, + "include": ["src/**/*"], + "extends": "./tsconfig.json" +} diff --git a/packages/g6-ssr/tsconfig.json b/packages/g6-ssr/tsconfig.json new file mode 100644 index 00000000000..62743c6198e --- /dev/null +++ b/packages/g6-ssr/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "strict": true, + "outDir": "lib", + "target": "ESNext", + "module": "CommonJS", + "lib": ["ESNext"], + "paths": { + "@antv/g6": ["../g6/src/index.ts"] + } + }, + "extends": "../../tsconfig.json", + "include": ["src/**/*", "__tests__/**/*"] +} diff --git a/packages/g6-ssr/tsconfig.test.json b/packages/g6-ssr/tsconfig.test.json new file mode 100644 index 00000000000..74e04566a17 --- /dev/null +++ b/packages/g6-ssr/tsconfig.test.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "paths": {} + }, + "include": ["src/**/*", "__tests__/**/*"], + "extends": "./tsconfig.json" +} diff --git a/packages/g6/__tests__/main.ts b/packages/g6/__tests__/main.ts index 66340d7e670..896b1082be0 100644 --- a/packages/g6/__tests__/main.ts +++ b/packages/g6/__tests__/main.ts @@ -10,6 +10,7 @@ type Options = { Renderer: string; Theme: string; Animation: boolean; + MultiLayers: boolean; [keys: string]: any; }; @@ -20,6 +21,7 @@ const options: Options = { GridLine: true, Theme: 'light', Animation: true, + MultiLayers: true, interval: 0, Reload: () => {}, forms: [], @@ -48,8 +50,9 @@ function initPanel() { applyGridLine(); }); const Animation = panel.add(options, 'Animation').onChange(render); + const MultiLayers = panel.add(options, 'MultiLayers').onChange(render); const reload = panel.add(options, 'Reload').onChange(render); - return { panel, Demo, Search, Renderer, GridLine, Theme, Animation, reload }; + return { panel, Demo, Search, Renderer, GridLine, Theme, Animation, MultiLayers, reload }; } async function render() { @@ -62,13 +65,21 @@ async function render() { applyGridLine(); // render - const { Renderer, Demo, Animation, Theme } = options; - const canvas = createGraphCanvas($container, 500, 500, Renderer); + const { Renderer, Demo, Animation, Theme, MultiLayers } = options; + + const canvasOptions = { enableMultiLayer: MultiLayers }; + + const canvas = createGraphCanvas($container, 500, 500, Renderer, canvasOptions); await canvas.ready; const testCase = demos[Demo as keyof typeof demos]; if (!testCase) return; - const graph = await testCase({ container: canvas, animation: Animation, theme: Theme }); + const graph = await testCase({ + container: canvas, + animation: Animation, + theme: Theme, + canvas: canvasOptions, + }); Object.assign(window, { graph, __g_instances__: Object.values(graph.getCanvas().getLayers()) }); diff --git a/packages/g6/__tests__/unit/runtime/canvas.spec.ts b/packages/g6/__tests__/unit/runtime/canvas.spec.ts index fffe7ba6274..665a811c4f7 100644 --- a/packages/g6/__tests__/unit/runtime/canvas.spec.ts +++ b/packages/g6/__tests__/unit/runtime/canvas.spec.ts @@ -98,4 +98,14 @@ describe('Canvas', () => { expect(graph.getCanvas().getConfig().cursor).toEqual('progress'); }); + + it('layers', () => { + const singleLayerCanvas = createGraphCanvas(document.getElementById('container'), 500, 500, 'svg', { + enableMultiLayer: false, + }); + expect(Object.keys(singleLayerCanvas.getLayers())).toEqual(['main']); + + const multiLayerCanvas = createGraphCanvas(document.getElementById('container'), 500, 500, 'svg'); + expect(Object.keys(multiLayerCanvas.getLayers())).toEqual(['background', 'main', 'label', 'transient']); + }); }); diff --git a/packages/g6/__tests__/utils/create.ts b/packages/g6/__tests__/utils/create.ts index 9235bae63a8..386623dd1f3 100644 --- a/packages/g6/__tests__/utils/create.ts +++ b/packages/g6/__tests__/utils/create.ts @@ -1,12 +1,9 @@ -import type { GraphOptions } from '@/src'; -import { Graph } from '@/src'; -import { Circle } from '@/src/elements'; -import { Canvas } from '@/src/runtime/canvas'; -import type { Node, Point } from '@/src/types'; import { resetEntityCounter } from '@antv/g'; import { Renderer as CanvasRenderer } from '@antv/g-canvas'; import { Renderer as SVGRenderer } from '@antv/g-svg'; import { Renderer as WebGLRenderer } from '@antv/g-webgl'; +import type { CanvasConfig, GraphOptions, Node, Point } from '@antv/g6'; +import { Canvas, Circle, Graph } from '@antv/g6'; import { OffscreenCanvasContext } from './offscreen-canvas-context'; function getRenderer(renderer: string) { @@ -28,6 +25,7 @@ function getRenderer(renderer: string) { * @param width - width * @param height - height * @param renderer - render + * @param options - options * @returns instance */ export function createGraphCanvas( @@ -35,6 +33,7 @@ export function createGraphCanvas( width: number = 500, height: number = 500, renderer: string = 'svg', + options?: Partial, ) { const container = dom || document.createElement('div'); container.style.width = `${width}px`; @@ -42,7 +41,9 @@ export function createGraphCanvas( resetEntityCounter(); - let extraOptions = {}; + const extraOptions: Record = { + ...options, + }; if (globalThis.process) { const offscreenNodeCanvas = { @@ -50,10 +51,10 @@ export function createGraphCanvas( } as unknown as HTMLCanvasElement; const context = new OffscreenCanvasContext(offscreenNodeCanvas); // 下列参数仅在 node 环境下需要传入 / These parameters only need to be passed in the node environment - extraOptions = { + Object.assign(extraOptions, { document: container.ownerDocument, offscreenCanvas: offscreenNodeCanvas, - }; + }); } const offscreenNodeCanvas = { diff --git a/packages/g6/src/exports.ts b/packages/g6/src/exports.ts index 5658e080eaf..5e90cb767af 100644 --- a/packages/g6/src/exports.ts +++ b/packages/g6/src/exports.ts @@ -95,6 +95,7 @@ export { } from './plugins'; export { getExtension, getExtensions } from './registry/get'; export { register } from './registry/register'; +export { Canvas } from './runtime/canvas'; export { Graph } from './runtime/graph'; export { BaseTransform, MapNodeSize, PlaceRadialLabels, ProcessParallelEdges } from './transforms'; export { isCollapsed } from './utils/collapsibility'; @@ -200,7 +201,7 @@ export type { TooltipOptions, WatermarkOptions, } from './plugins'; -export type { DataURLOptions } from './runtime/canvas'; +export type { CanvasConfig, DataURLOptions } from './runtime/canvas'; export type { RuntimeContext } from './runtime/types'; export type { BehaviorOptions, diff --git a/packages/g6/src/plugins/fullscreen/index.ts b/packages/g6/src/plugins/fullscreen/index.ts index 3b7078b96b2..d3dee049ee0 100644 --- a/packages/g6/src/plugins/fullscreen/index.ts +++ b/packages/g6/src/plugins/fullscreen/index.ts @@ -105,8 +105,8 @@ export class Fullscreen extends BasePlugin { private setGraphSize(fullScreen = true) { let width, height; if (fullScreen) { - width = window.screen.width; - height = window.screen.height; + width = globalThis.screen?.width || 0; + height = globalThis.screen?.height || 0; this.graphSize = this.context.graph.getSize(); } else { [width, height] = this.graphSize; diff --git a/packages/g6/src/runtime/canvas.ts b/packages/g6/src/runtime/canvas.ts index 6def2386783..c4c4b1bbd5b 100644 --- a/packages/g6/src/runtime/canvas.ts +++ b/packages/g6/src/runtime/canvas.ts @@ -10,7 +10,23 @@ import { parsePoint, toPointObject } from '../utils/point'; export interface CanvasConfig extends Pick { + /** + * 渲染器 + * + * renderer + */ renderer?: CanvasOptions['renderer']; + /** + * 是否启用多图层 + * + * Whether to enable multiple layers + * @defaultValue true + * @remarks + * 非动态参数,仅在初始化时生效 + * + * Non-dynamic parameters, only take effect during initialization + */ + enableMultiLayer?: boolean; } export interface DataURLOptions { @@ -39,7 +55,19 @@ export interface DataURLOptions { encoderOptions: number; } -const layersName: CanvasLayer[] = ['background', 'main', 'label', 'transient']; +const SINGLE_LAYER_NAME: CanvasLayer[] = ['main']; +const MULTI_LAYER_NAME: CanvasLayer[] = ['background', 'main', 'label', 'transient']; + +/** + * 获取主画布图层 + * + * Get the main canvas layer + * @param layers - 画布图层 | Canvas layer + * @returns 主画布图层 | Main canvas layer + */ +function getMainLayerOf(layers: Record) { + return layers.main; +} export class Canvas { private extends: { @@ -49,14 +77,16 @@ export class Canvas { layers: Record; }; - private config: CanvasConfig; + private config: CanvasConfig = { + enableMultiLayer: true, + }; public getConfig() { return this.config; } public getLayer(layer: CanvasLayer = 'main') { - return this.extends.layers[layer]; + return this.extends.layers[layer] || getMainLayerOf(this.getLayers()); } /** @@ -113,18 +143,18 @@ export class Canvas { } constructor(config: CanvasConfig) { - this.config = config; - - const { renderer, background, cursor, ...restConfig } = config; - const renderers = createRenderers(renderer); + Object.assign(this.config, config); + const { renderer, background, cursor, enableMultiLayer, ...restConfig } = this.config; + const layersName = enableMultiLayer ? MULTI_LAYER_NAME : SINGLE_LAYER_NAME; + const renderers = createRenderers(renderer, layersName); const layers = Object.fromEntries( layersName.map((layer) => { const canvas = new GCanvas({ ...restConfig, - supportsMutipleCanvasesInOneContainer: true, + supportsMutipleCanvasesInOneContainer: enableMultiLayer, renderer: renderers[layer], - background: layer === 'background' ? background : undefined, + background: enableMultiLayer ? (layer === 'background' ? background : undefined) : background, }); return [layer, canvas]; @@ -134,7 +164,7 @@ export class Canvas { configCanvasDom(layers); this.extends = { - config, + config: this.config, renderer, renderers, layers, @@ -207,7 +237,7 @@ export class Canvas { public setRenderer(renderer: CanvasOptions['renderer']) { if (renderer === this.extends.renderer) return; - const renderers = createRenderers(renderer); + const renderers = createRenderers(renderer, this.config.enableMultiLayer ? MULTI_LAYER_NAME : SINGLE_LAYER_NAME); this.extends.renderers = renderers; Object.entries(renderers).forEach(([layer, instance]) => this.getLayer(layer as CanvasLayer).setRenderer(instance)); configCanvasDom(this.getLayers()); @@ -240,7 +270,7 @@ export class Canvas { } public async toDataURL(options: Partial = {}) { - const devicePixelRatio = window.devicePixelRatio || 1; + const devicePixelRatio = globalThis.devicePixelRatio || 1; const { mode = 'viewport', ...restOptions } = options; let [startX, startY, width, height] = [0, 0, 0, 0]; @@ -322,9 +352,10 @@ export class Canvas { * * Create renderers * @param renderer - 渲染器创建器 Renderer creator + * @param layersName - 图层名称 Layer name * @returns 渲染器 Renderer */ -function createRenderers(renderer: CanvasConfig['renderer']) { +function createRenderers(renderer: CanvasConfig['renderer'], layersName: CanvasLayer[]) { return Object.fromEntries( layersName.map((layer) => { const instance = renderer?.(layer) || new CanvasRenderer(); @@ -357,10 +388,14 @@ function configCanvasDom(layers: Record) { Object.entries(layers).forEach(([layer, canvas]) => { const domElement = canvas.getContextService().getDomElement() as unknown as HTMLElement; - domElement.style.position = 'absolute'; - domElement.style.outline = 'none'; - domElement.tabIndex = 1; + // 浏览器环境下,设置画布样式 + // Set canvas style in browser environment + if (domElement?.style) { + domElement.style.position = 'absolute'; + domElement.style.outline = 'none'; + domElement.tabIndex = 1; - if (layer !== 'main') domElement.style.pointerEvents = 'none'; + if (layer !== 'main') domElement.style.pointerEvents = 'none'; + } }); } diff --git a/packages/g6/src/runtime/graph.ts b/packages/g6/src/runtime/graph.ts index 4f77867a603..36df5904ae0 100644 --- a/packages/g6/src/runtime/graph.ts +++ b/packages/g6/src/runtime/graph.ts @@ -91,8 +91,8 @@ export class Graph extends EventEmitter { this._setOptions(this.options, true); this.context.graph = this; - // Listening window.resize to autoResize. - this.options.autoResize && window.addEventListener('resize', this.onResize); + // Listening resize to autoResize. + this.options.autoResize && globalThis.addEventListener?.('resize', this.onResize); } /** @@ -1031,7 +1031,8 @@ export class Graph extends EventEmitter { renderer, cursor, background, - devicePixelRatio = window.devicePixelRatio ?? 1, + canvas: canvasOptions, + devicePixelRatio = globalThis.devicePixelRatio ?? 1, } = this.options; if (container instanceof Canvas) { this.context.canvas = container; @@ -1043,8 +1044,8 @@ export class Graph extends EventEmitter { const containerSize = sizeOf($container!); this.emit(GraphEvent.BEFORE_CANVAS_INIT, { container: $container, width, height }); - - const canvas = new Canvas({ + const options = { + ...canvasOptions, container: $container!, width: width || containerSize[0], height: height || containerSize[1], @@ -1052,7 +1053,9 @@ export class Graph extends EventEmitter { renderer, cursor, devicePixelRatio, - }); + }; + + const canvas = new Canvas(options); this.context.canvas = canvas; await canvas.ready; @@ -1204,7 +1207,7 @@ export class Graph extends EventEmitter { this.context = {}; this.off(); - window.removeEventListener('resize', this.onResize); + globalThis.removeEventListener?.('resize', this.onResize); this.destroyed = true; diff --git a/packages/g6/src/spec/canvas.ts b/packages/g6/src/spec/canvas.ts index 30acd8972c0..95c8e154c17 100644 --- a/packages/g6/src/spec/canvas.ts +++ b/packages/g6/src/spec/canvas.ts @@ -1,5 +1,5 @@ import type { Cursor, IRenderer } from '@antv/g'; -import type { Canvas } from '../runtime/canvas'; +import type { Canvas, CanvasConfig } from '../runtime/canvas'; /** * 画布配置项 @@ -57,4 +57,14 @@ export interface CanvasOptions { * cursor style */ cursor?: Cursor; + /** + * 画布配置 + * + * canvas config + * @remarks + * GraphOptions 下相关配置项为快捷配置项,会被转换为 canvas 配置项 + * + * The related configuration items under GraphOptions are shortcut configuration items, which will be converted to canvas configuration items + */ + canvas?: CanvasConfig; } diff --git a/packages/g6/src/utils/shortcut.ts b/packages/g6/src/utils/shortcut.ts index f7dbe24713f..c19c998d548 100644 --- a/packages/g6/src/utils/shortcut.ts +++ b/packages/g6/src/utils/shortcut.ts @@ -57,7 +57,7 @@ export class Shortcut { // 窗口重新获得焦点后清空按键,避免按键状态异常 // Clear the keys when the window regains focus to avoid abnormal key states - window.addEventListener('focus', this.onFocus); + globalThis.addEventListener?.('focus', this.onFocus); } private onKeyDown = (event: KeyboardEvent) => { @@ -117,6 +117,6 @@ export class Shortcut { this.emitter.off(CommonEvent.KEY_UP, this.onKeyUp); this.emitter.off(CommonEvent.WHEEL, this.onWheel); this.emitter.off(CommonEvent.DRAG, this.onDrag); - window.removeEventListener('blur', this.onFocus); + globalThis.removeEventListener?.('blur', this.onFocus); } }