From 711ae183f7b61be36128e9da0e424d874d836015 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E8=B1=AA?= Date: Fri, 18 Nov 2022 05:24:15 +0800 Subject: [PATCH] fix: remove @parcel/utils dep in @parcel/graph (#8630) --- packages/core/graph/package.json | 1 - packages/core/graph/src/AdjacencyList.js | 2 +- packages/core/graph/src/shared-buffer.js | 24 ++++++++++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 packages/core/graph/src/shared-buffer.js diff --git a/packages/core/graph/package.json b/packages/core/graph/package.json index dde6e479995..38ed9abce37 100644 --- a/packages/core/graph/package.json +++ b/packages/core/graph/package.json @@ -20,7 +20,6 @@ "node": ">= 12.0.0" }, "dependencies": { - "@parcel/utils": "2.8.0", "nullthrows": "^1.1.1" } } diff --git a/packages/core/graph/src/AdjacencyList.js b/packages/core/graph/src/AdjacencyList.js index 803655099ab..73a18ae7d5f 100644 --- a/packages/core/graph/src/AdjacencyList.js +++ b/packages/core/graph/src/AdjacencyList.js @@ -1,7 +1,7 @@ // @flow import assert from 'assert'; import nullthrows from 'nullthrows'; -import {SharedBuffer} from '@parcel/utils'; +import {SharedBuffer} from './shared-buffer'; import {fromNodeId, toNodeId} from './types'; import {ALL_EDGE_TYPES, type NullEdgeType, type AllEdgeTypes} from './Graph'; import type {NodeId} from './types'; diff --git a/packages/core/graph/src/shared-buffer.js b/packages/core/graph/src/shared-buffer.js new file mode 100644 index 00000000000..64cadd68682 --- /dev/null +++ b/packages/core/graph/src/shared-buffer.js @@ -0,0 +1,24 @@ +// @flow +/* global MessageChannel:readonly */ +// Copy from @parcel/utils to fix: https://github.com/stackblitz/core/issues/1855 +export let SharedBuffer: Class | Class; + +// $FlowFixMe[prop-missing] +if (process.browser) { + SharedBuffer = ArrayBuffer; + // Safari has removed the constructor + if (typeof SharedArrayBuffer !== 'undefined') { + let channel = new MessageChannel(); + try { + // Firefox might throw when sending the Buffer over a MessagePort + channel.port1.postMessage(new SharedArrayBuffer(0)); + SharedBuffer = SharedArrayBuffer; + } catch (_) { + // NOOP + } + channel.port1.close(); + channel.port2.close(); + } +} else { + SharedBuffer = SharedArrayBuffer; +}