| import { InvariantError } from '../../shared/lib/invariant-error' | |
| import { | |
| HMR_MESSAGE_SENT_TO_BROWSER, | |
| type BinaryHmrMessageSentToBrowser, | |
| } from './hot-reloader-types' | |
| export const FAST_REFRESH_RUNTIME_RELOAD = | |
| 'Fast Refresh had to perform a full reload due to a runtime error.' | |
| const textEncoder = new TextEncoder() | |
| export function createBinaryHmrMessageData( | |
| message: BinaryHmrMessageSentToBrowser | |
| ): Uint8Array { | |
| switch (message.type) { | |
| case HMR_MESSAGE_SENT_TO_BROWSER.ERRORS_TO_SHOW_IN_BROWSER: { | |
| const { serializedErrors } = message | |
| const totalLength = 1 + serializedErrors.length | |
| const data = new Uint8Array(totalLength) | |
| const view = new DataView(data.buffer) | |
| view.setUint8(0, HMR_MESSAGE_SENT_TO_BROWSER.ERRORS_TO_SHOW_IN_BROWSER) | |
| data.set(serializedErrors, 1) | |
| return data | |
| } | |
| case HMR_MESSAGE_SENT_TO_BROWSER.REACT_DEBUG_CHUNK: { | |
| const { requestId, chunk } = message | |
| const requestIdBytes = textEncoder.encode(requestId) | |
| const requestIdLength = requestIdBytes.length | |
| if (requestIdLength > 255) { | |
| throw new InvariantError( | |
| 'Request ID is too long for the binary HMR message.' | |
| ) | |
| } | |
| const chunkLength = chunk ? chunk.length : 0 | |
| const totalLength = 2 + requestIdLength + chunkLength | |
| const data = new Uint8Array(totalLength) | |
| const view = new DataView(data.buffer) | |
| view.setUint8(0, HMR_MESSAGE_SENT_TO_BROWSER.REACT_DEBUG_CHUNK) | |
| view.setUint8(1, requestIdLength) | |
| textEncoder.encodeInto(requestId, data.subarray(2, 2 + requestIdLength)) | |
| if (chunk) { | |
| data.set(chunk, 2 + requestIdLength) | |
| } | |
| return data | |
| } | |
| default: { | |
| throw new InvariantError( | |
| `Invalid binary HMR message of type ${(message as any).type}` | |
| ) | |
| } | |
| } | |
| } | |