@reckona/mreact-compat 0.0.180 → 0.0.181

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"flight-parser.d.ts","sourceRoot":"","sources":["../src/flight-parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,cAAc,EAIf,MAAM,mBAAmB,CAAC;AAS3B,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,cAAc,CAYlG"}
1
+ {"version":3,"file":"flight-parser.d.ts","sourceRoot":"","sources":["../src/flight-parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,cAAc,EAIf,MAAM,mBAAmB,CAAC;AAsC3B,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GACzC,cAAc,CAYhB"}
@@ -1,3 +1,21 @@
1
+ const MAX_FLIGHT_DECODE_DEPTH = 256;
2
+ class FlightDecodeError extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = "FlightDecodeError";
6
+ }
7
+ }
8
+ function createFlightDecodeContext() {
9
+ return {
10
+ inProgressChunkIds: new Set(),
11
+ };
12
+ }
13
+ function flightTooDeep() {
14
+ throw new FlightDecodeError(`MR_FLIGHT_TOO_DEEP: nested deeper than ${MAX_FLIGHT_DECODE_DEPTH} levels`);
15
+ }
16
+ function flightCycle(id) {
17
+ throw new FlightDecodeError(`MR_FLIGHT_CYCLE: cyclic chunk reference ${id}`);
18
+ }
1
19
  export function parseReactFlightPayload(payload) {
2
20
  if (typeof payload !== "string") {
3
21
  return parseReactFlightBinaryRows(payload);
@@ -157,7 +175,7 @@ function parseReactFlightRow(line) {
157
175
  };
158
176
  }
159
177
  function looksLikeUnsupportedReactFlightTag(tag, body) {
160
- return /^[A-Z]$/.test(tag) && (body[1] === "{" || body[1] === "[" || body[1] === "\"");
178
+ return /^[A-Z]$/.test(tag) && (body[1] === "{" || body[1] === "[" || body[1] === '"');
161
179
  }
162
180
  function parseReactFlightTextChunk(payload) {
163
181
  const separator = payload.indexOf(",");
@@ -311,7 +329,7 @@ function parseReactFlightServerReference(id, payload, modelChunks = new Map(), e
311
329
  const actionId = String(object.id ?? "");
312
330
  const separator = actionId.lastIndexOf("#");
313
331
  const bound = Array.isArray(object.bound)
314
- ? object.bound.map((entry) => decodeReactFlightModel(entry, modelChunks, errorChunks))
332
+ ? object.bound.map((entry) => decodeReactFlightModel(entry, modelChunks, errorChunks, 0, createFlightDecodeContext()))
315
333
  : undefined;
316
334
  return {
317
335
  id,
@@ -324,12 +342,14 @@ function parseReactFlightServerReference(id, payload, modelChunks = new Map(), e
324
342
  ...(bound === undefined ? {} : { bound }),
325
343
  };
326
344
  }
327
- function decodeReactFlightModel(value, modelChunks = new Map(), errorChunks = new Map()) {
345
+ function decodeReactFlightModel(value, modelChunks = new Map(), errorChunks = new Map(), depth = 0, context = createFlightDecodeContext()) {
346
+ if (depth > MAX_FLIGHT_DECODE_DEPTH)
347
+ flightTooDeep();
328
348
  if (value === null || typeof value === "number" || typeof value === "boolean") {
329
349
  return value;
330
350
  }
331
351
  if (typeof value === "string") {
332
- return decodeReactFlightString(value, modelChunks, errorChunks);
352
+ return decodeReactFlightString(value, modelChunks, errorChunks, depth, context);
333
353
  }
334
354
  if (Array.isArray(value)) {
335
355
  if (value[0] === "$") {
@@ -337,20 +357,20 @@ function decodeReactFlightModel(value, modelChunks = new Map(), errorChunks = ne
337
357
  kind: "element",
338
358
  type: decodeReactFlightElementType(value[1]),
339
359
  key: typeof value[2] === "string" ? value[2] : null,
340
- props: decodeReactFlightProps(valueIsObject(value[3]) ? value[3] : {}, modelChunks, errorChunks),
360
+ props: decodeReactFlightProps(valueIsObject(value[3]) ? value[3] : {}, modelChunks, errorChunks, depth + 1, context),
341
361
  };
342
362
  }
343
- return value.map((item) => decodeReactFlightModel(item, modelChunks, errorChunks));
363
+ return value.map((item) => decodeReactFlightModel(item, modelChunks, errorChunks, depth + 1, context));
344
364
  }
345
365
  if (isReactFlightBinaryModel(value)) {
346
366
  return value;
347
367
  }
348
368
  if (valueIsObject(value)) {
349
- return decodeReactFlightProps(value, modelChunks, errorChunks);
369
+ return decodeReactFlightProps(value, modelChunks, errorChunks, depth + 1, context);
350
370
  }
351
371
  return { kind: "undefined" };
352
372
  }
353
- function decodeReactFlightString(value, modelChunks, errorChunks) {
373
+ function decodeReactFlightString(value, modelChunks, errorChunks, depth, context) {
354
374
  if (value === "$undefined" || value === "$u") {
355
375
  return { kind: "undefined" };
356
376
  }
@@ -388,7 +408,7 @@ function decodeReactFlightString(value, modelChunks, errorChunks) {
388
408
  };
389
409
  }
390
410
  if (/^\$[AOoUSsLlGgMmV][0-9a-f]+$/.test(value)) {
391
- return decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks);
411
+ return decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks, depth + 1, context);
392
412
  }
393
413
  if (value.startsWith("$S")) {
394
414
  return { kind: "symbol", name: value.slice(2) };
@@ -400,7 +420,7 @@ function decodeReactFlightString(value, modelChunks, errorChunks) {
400
420
  };
401
421
  }
402
422
  if (/^\$Q[0-9a-f]+$/i.test(value)) {
403
- const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks);
423
+ const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks, depth + 1, context);
404
424
  const entries = Array.isArray(decoded)
405
425
  ? decoded.map((entry) => Array.isArray(entry)
406
426
  ? [entry[0] ?? { kind: "undefined" }, entry[1] ?? { kind: "undefined" }]
@@ -412,14 +432,14 @@ function decodeReactFlightString(value, modelChunks, errorChunks) {
412
432
  };
413
433
  }
414
434
  if (/^\$W[0-9a-f]+$/i.test(value)) {
415
- const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks);
435
+ const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks, depth + 1, context);
416
436
  return {
417
437
  kind: "set",
418
438
  values: Array.isArray(decoded) ? decoded : [],
419
439
  };
420
440
  }
421
441
  if (/^\$K[0-9a-f]+$/i.test(value)) {
422
- const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks);
442
+ const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks, depth + 1, context);
423
443
  const entries = Array.isArray(decoded)
424
444
  ? decoded.flatMap((entry) => Array.isArray(entry) && typeof entry[0] === "string"
425
445
  ? [[entry[0], entry[1] ?? { kind: "undefined" }]]
@@ -431,28 +451,30 @@ function decodeReactFlightString(value, modelChunks, errorChunks) {
431
451
  };
432
452
  }
433
453
  if (/^\$i[0-9a-f]+$/i.test(value)) {
434
- const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks);
454
+ const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks, depth + 1, context);
435
455
  return {
436
456
  kind: "iterable",
437
457
  values: Array.isArray(decoded) ? decoded : [],
438
458
  };
439
459
  }
440
460
  if (/^\$Z[0-9a-f]+$/i.test(value)) {
441
- return errorChunks.get(parseReactFlightId(value.slice(2))) ?? {
461
+ return (errorChunks.get(parseReactFlightId(value.slice(2))) ?? {
442
462
  kind: "error",
443
463
  name: "Error",
444
464
  message: "Unknown React Flight error.",
445
- };
465
+ });
446
466
  }
447
467
  if (value === "$Y" || value.startsWith("$E")) {
448
468
  return { kind: "undefined" };
449
469
  }
450
470
  if (/^\$[0-9a-f]+$/i.test(value)) {
451
- return decodeReactFlightChunk(value.slice(1), modelChunks, errorChunks);
471
+ return decodeReactFlightChunk(value.slice(1), modelChunks, errorChunks, depth + 1, context);
452
472
  }
453
473
  return value;
454
474
  }
455
- function decodeReactFlightChunk(id, modelChunks, errorChunks) {
475
+ function decodeReactFlightChunk(id, modelChunks, errorChunks, depth, context) {
476
+ if (depth > MAX_FLIGHT_DECODE_DEPTH)
477
+ flightTooDeep();
456
478
  const numericId = parseReactFlightId(id);
457
479
  const error = errorChunks.get(numericId);
458
480
  if (error !== undefined) {
@@ -464,7 +486,16 @@ function decodeReactFlightChunk(id, modelChunks, errorChunks) {
464
486
  id: numericId,
465
487
  };
466
488
  }
467
- return decodeReactFlightModel(modelChunks.get(numericId), modelChunks, errorChunks);
489
+ if (context.inProgressChunkIds.has(numericId)) {
490
+ flightCycle(numericId);
491
+ }
492
+ context.inProgressChunkIds.add(numericId);
493
+ try {
494
+ return decodeReactFlightModel(modelChunks.get(numericId), modelChunks, errorChunks, depth, context);
495
+ }
496
+ finally {
497
+ context.inProgressChunkIds.delete(numericId);
498
+ }
468
499
  }
469
500
  function decodeReactFlightElementType(value) {
470
501
  if (value === "$Sreact.fragment") {
@@ -478,10 +509,12 @@ function decodeReactFlightElementType(value) {
478
509
  }
479
510
  return typeof value === "string" ? value : String(value);
480
511
  }
481
- function decodeReactFlightProps(value, modelChunks, errorChunks) {
512
+ function decodeReactFlightProps(value, modelChunks, errorChunks, depth = 0, context = createFlightDecodeContext()) {
513
+ if (depth > MAX_FLIGHT_DECODE_DEPTH)
514
+ flightTooDeep();
482
515
  return Object.fromEntries(Object.entries(value).map(([key, child]) => [
483
516
  key,
484
- decodeReactFlightModel(child, modelChunks, errorChunks),
517
+ decodeReactFlightModel(child, modelChunks, errorChunks, depth + 1, context),
485
518
  ]));
486
519
  }
487
520
  function isReactFlightBinaryModel(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"flight-parser.js","sourceRoot":"","sources":["../src/flight-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactFlightBinaryRowTag } from \"./flight-protocol.js\";\nimport type {\n FlightArrayBufferModel,\n FlightClientReference,\n FlightDataViewModel,\n FlightElementModel,\n FlightErrorModel,\n FlightModel,\n FlightResponse,\n FlightServerReference,\n FlightTypedArrayModel,\n FlightTypedArrayName,\n} from \"./flight-types.js\";\n\ninterface ReactFlightRow {\n id: number;\n tag?: string;\n payload: string;\n payloadBytes?: Uint8Array;\n}\n\nexport function parseReactFlightPayload(payload: string | ArrayBuffer | Uint8Array): FlightResponse {\n if (typeof payload !== \"string\") {\n return parseReactFlightBinaryRows(payload);\n }\n\n const trimmed = payload.trim();\n\n if (trimmed.startsWith(\"{\")) {\n return JSON.parse(trimmed) as FlightResponse;\n }\n\n return parseReactFlightRows(trimmed);\n}\n\nfunction parseReactFlightRows(rows: string): FlightResponse {\n const lines = rows.split(/\\r?\\n/).filter(Boolean);\n const metadataLine = lines.find((line) => line.startsWith(\"M0:\"));\n const rootLine = lines.find((line) => line.startsWith(\"J0:\"));\n\n if (metadataLine !== undefined && rootLine !== undefined) {\n const metadata = JSON.parse(metadataLine.slice(3)) as Omit<FlightResponse, \"root\">;\n\n return {\n version: metadata.version,\n clientReferences: metadata.clientReferences,\n serverReferences: metadata.serverReferences,\n root: JSON.parse(rootLine.slice(3)) as FlightModel,\n };\n }\n\n return parseReactFlightRowObjects(lines.map((line) => parseReactFlightRow(line)));\n}\n\nfunction parseReactFlightBinaryRows(payload: ArrayBuffer | Uint8Array): FlightResponse {\n const bytes = payload instanceof Uint8Array ? payload : new Uint8Array(payload);\n const decoder = new TextDecoder();\n const rows: ReactFlightRow[] = [];\n let index = 0;\n\n while (index < bytes.length) {\n index = skipReactFlightRowBreak(bytes, index);\n\n if (index >= bytes.length) {\n break;\n }\n\n const idStart = index;\n while (index < bytes.length && bytes[index] !== 58) {\n index += 1;\n }\n\n if (index >= bytes.length) {\n throw new Error(\"Invalid React Flight binary row.\");\n }\n\n const idText = decoder.decode(bytes.subarray(idStart, index));\n const id = idText === \"\" ? 0 : parseReactFlightId(idText);\n index += 1;\n\n if (index >= bytes.length) {\n throw new Error(\"Invalid React Flight binary row.\");\n }\n\n const tag = String.fromCharCode(bytes[index] ?? 0);\n\n if (isReactFlightBinaryRowTag(tag)) {\n index += 1;\n const lengthStart = index;\n\n while (index < bytes.length && bytes[index] !== 44) {\n index += 1;\n }\n\n if (index >= bytes.length) {\n throw new Error(\"Invalid React Flight binary row.\");\n }\n\n const byteLength = parseReactFlightId(decoder.decode(bytes.subarray(lengthStart, index)));\n index += 1;\n\n if (index + byteLength > bytes.length) {\n throw new Error(\"React Flight binary row ended before declared payload length.\");\n }\n\n rows.push({\n id,\n tag,\n payload: `${byteLength.toString(16)},`,\n payloadBytes: bytes.slice(index, index + byteLength),\n });\n index += byteLength;\n index = skipReactFlightRowBreak(bytes, index);\n continue;\n }\n\n const bodyStart = index;\n while (index < bytes.length && bytes[index] !== 10 && bytes[index] !== 13) {\n index += 1;\n }\n\n rows.push(parseReactFlightRow(`${idText}:${decoder.decode(bytes.subarray(bodyStart, index))}`));\n index = skipReactFlightRowBreak(bytes, index);\n }\n\n return parseReactFlightRowObjects(rows);\n}\n\nfunction parseReactFlightRowObjects(rows: ReactFlightRow[]): FlightResponse {\n const clientReferences: FlightClientReference[] = [];\n const serverReferences: FlightServerReference[] = [];\n const modelChunks = new Map<number, unknown>();\n const errorChunks = new Map<number, FlightErrorModel>();\n let root: FlightModel | undefined;\n\n for (const row of rows) {\n if (row.tag === \"I\") {\n clientReferences.push(parseReactFlightClientReference(row.id, row.payload));\n continue;\n }\n\n if (row.tag === \"F\") {\n serverReferences.push(\n parseReactFlightServerReference(row.id, row.payload, modelChunks, errorChunks),\n );\n continue;\n }\n\n if (row.tag === \"E\") {\n const error = parseReactFlightError(row.payload);\n errorChunks.set(row.id, error);\n\n if (row.id === 0) {\n root = error;\n }\n continue;\n }\n\n if (row.tag === \"T\") {\n modelChunks.set(row.id, parseReactFlightTextChunk(row.payload));\n continue;\n }\n\n if (isReactFlightBinaryRowTag(row.tag)) {\n modelChunks.set(row.id, parseReactFlightBinaryChunk(row.tag, row.payload, row.payloadBytes));\n continue;\n }\n\n if (isReactFlightMetadataTag(row.tag)) {\n continue;\n }\n\n if (row.tag === undefined && row.payload !== \"\") {\n modelChunks.set(row.id, JSON.parse(row.payload));\n }\n }\n\n if (root === undefined && modelChunks.has(0)) {\n root = decodeReactFlightModel(modelChunks.get(0), modelChunks, errorChunks);\n }\n\n if (root === undefined) {\n throw new Error(\"Invalid React Flight rows.\");\n }\n\n return {\n version: 1,\n root,\n clientReferences,\n serverReferences,\n };\n}\n\nfunction skipReactFlightRowBreak(bytes: Uint8Array, index: number): number {\n let next = index;\n\n while (next < bytes.length && (bytes[next] === 10 || bytes[next] === 13)) {\n next += 1;\n }\n\n return next;\n}\n\nfunction parseReactFlightRow(line: string): ReactFlightRow {\n const separator = line.indexOf(\":\");\n\n if (separator < 0) {\n throw new Error(\"Invalid React Flight row.\");\n }\n\n const id = separator === 0 ? 0 : parseReactFlightId(line.slice(0, separator));\n const body = line.slice(separator + 1);\n const first = body[0];\n const hasTag = first !== undefined && isReactFlightRowTag(first, body);\n\n if (first !== undefined && !hasTag && looksLikeUnsupportedReactFlightTag(first, body)) {\n throw new Error(`Unsupported React Flight row tag: ${first}`);\n }\n\n return {\n id,\n ...(hasTag ? { tag: first } : {}),\n payload: hasTag ? body.slice(1) : body,\n };\n}\n\nfunction looksLikeUnsupportedReactFlightTag(tag: string, body: string): boolean {\n return /^[A-Z]$/.test(tag) && (body[1] === \"{\" || body[1] === \"[\" || body[1] === \"\\\"\");\n}\n\nfunction parseReactFlightTextChunk(payload: string): string {\n const separator = payload.indexOf(\",\");\n\n if (separator < 0) {\n throw new Error(\"Invalid React Flight text row.\");\n }\n\n return payload.slice(separator + 1);\n}\n\nfunction parseReactFlightBinaryChunk(\n tag: ReactFlightBinaryRowTag,\n payload: string,\n payloadBytes?: Uint8Array,\n): FlightArrayBufferModel | FlightTypedArrayModel | FlightDataViewModel {\n if (payloadBytes !== undefined) {\n return createReactFlightBinaryModel(tag, payloadBytes);\n }\n\n const separator = payload.indexOf(\",\");\n\n if (separator < 0) {\n throw new Error(\"Invalid React Flight binary row.\");\n }\n\n const byteLength = parseReactFlightId(payload.slice(0, separator));\n const bytes = decodeBase64Bytes(payload.slice(separator + 1));\n\n if (bytes.length !== byteLength) {\n throw new Error(\"React Flight binary row length did not match declared payload length.\");\n }\n\n return createReactFlightBinaryModel(tag, bytes);\n}\n\nfunction isReactFlightMetadataTag(tag: string | undefined): boolean {\n return (\n tag === \"H\" ||\n tag === \"N\" ||\n tag === \"P\" ||\n tag === \"D\" ||\n tag === \"J\" ||\n tag === \"W\" ||\n tag === \"R\" ||\n tag === \"r\" ||\n tag === \"X\" ||\n tag === \"x\" ||\n tag === \"C\"\n );\n}\n\nfunction isReactFlightRowTag(tag: string, body: string): boolean {\n if (\n tag === \"I\" ||\n tag === \"F\" ||\n tag === \"E\" ||\n tag === \"T\" ||\n tag === \"H\" ||\n tag === \"N\" ||\n tag === \"P\" ||\n tag === \"D\" ||\n tag === \"J\" ||\n tag === \"W\" ||\n tag === \"R\" ||\n tag === \"r\" ||\n tag === \"X\" ||\n tag === \"x\" ||\n tag === \"C\"\n ) {\n return true;\n }\n\n return isReactFlightBinaryRowTag(tag) && /^[AOoUSsLlGgMmV][0-9a-f]+,/i.test(body);\n}\n\nfunction isReactFlightBinaryRowTag(tag: string | undefined): tag is ReactFlightBinaryRowTag {\n return (\n tag === \"A\" ||\n tag === \"O\" ||\n tag === \"o\" ||\n tag === \"U\" ||\n tag === \"S\" ||\n tag === \"s\" ||\n tag === \"L\" ||\n tag === \"l\" ||\n tag === \"G\" ||\n tag === \"g\" ||\n tag === \"M\" ||\n tag === \"m\" ||\n tag === \"V\"\n );\n}\n\nfunction createReactFlightBinaryModel(\n tag: ReactFlightBinaryRowTag,\n bytes: Uint8Array,\n): FlightArrayBufferModel | FlightTypedArrayModel | FlightDataViewModel {\n const byteValues = Array.from(bytes);\n\n if (tag === \"A\") {\n return {\n kind: \"array-buffer\",\n bytes: byteValues,\n };\n }\n\n if (tag === \"V\") {\n return {\n kind: \"data-view\",\n bytes: byteValues,\n };\n }\n\n return {\n kind: \"typed-array\",\n arrayType: getReactFlightTypedArrayName(tag),\n bytes: byteValues,\n };\n}\n\nfunction getReactFlightTypedArrayName(\n tag: Exclude<ReactFlightBinaryRowTag, \"A\" | \"V\">,\n): FlightTypedArrayName {\n switch (tag) {\n case \"O\":\n return \"Int8Array\";\n case \"o\":\n return \"Uint8Array\";\n case \"U\":\n return \"Uint8ClampedArray\";\n case \"S\":\n return \"Int16Array\";\n case \"s\":\n return \"Uint16Array\";\n case \"L\":\n return \"Int32Array\";\n case \"l\":\n return \"Uint32Array\";\n case \"G\":\n return \"Float32Array\";\n case \"g\":\n return \"Float64Array\";\n case \"M\":\n return \"BigInt64Array\";\n case \"m\":\n return \"BigUint64Array\";\n default:\n throw new Error(`Unsupported React Flight typed array row tag: ${tag}`);\n }\n}\n\nfunction decodeBase64Bytes(value: string): Uint8Array {\n const normalized = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, \"=\");\n const binary = globalThis.atob(padded);\n const bytes = new Uint8Array(binary.length);\n\n for (let index = 0; index < binary.length; index += 1) {\n bytes[index] = binary.charCodeAt(index);\n }\n\n return bytes;\n}\n\nfunction parseReactFlightClientReference(id: number, payload: string): FlightClientReference {\n const value = JSON.parse(payload) as unknown;\n\n if (Array.isArray(value)) {\n return {\n id,\n moduleId: String(value[0]),\n chunks: Array.isArray(value[1]) ? value[1].map(String) : [],\n exportName: String(value[2] ?? \"default\"),\n };\n }\n\n const object = valueIsObject(value) ? value : {};\n\n return {\n id,\n moduleId: String(object.id ?? object.moduleId ?? \"\"),\n chunks: Array.isArray(object.chunks) ? object.chunks.map(String) : [],\n exportName: String(object.name ?? object.exportName ?? \"default\"),\n };\n}\n\nfunction parseReactFlightServerReference(\n id: number,\n payload: string,\n modelChunks: ReadonlyMap<number, unknown> = new Map(),\n errorChunks: ReadonlyMap<number, FlightErrorModel> = new Map(),\n): FlightServerReference {\n const value = JSON.parse(payload) as unknown;\n const object = valueIsObject(value) ? value : {};\n const actionId = String(object.id ?? \"\");\n const separator = actionId.lastIndexOf(\"#\");\n const bound = Array.isArray(object.bound)\n ? object.bound.map((entry) => decodeReactFlightModel(entry, modelChunks, errorChunks))\n : undefined;\n\n return {\n id,\n moduleId: separator < 0 ? actionId : actionId.slice(0, separator),\n exportName:\n typeof object.name === \"string\"\n ? object.name\n : separator < 0\n ? \"default\"\n : actionId.slice(separator + 1),\n ...(bound === undefined ? {} : { bound }),\n };\n}\n\nfunction decodeReactFlightModel(\n value: unknown,\n modelChunks: ReadonlyMap<number, unknown> = new Map(),\n errorChunks: ReadonlyMap<number, FlightErrorModel> = new Map(),\n): FlightModel {\n if (value === null || typeof value === \"number\" || typeof value === \"boolean\") {\n return value;\n }\n\n if (typeof value === \"string\") {\n return decodeReactFlightString(value, modelChunks, errorChunks);\n }\n\n if (Array.isArray(value)) {\n if (value[0] === \"$\") {\n return {\n kind: \"element\",\n type: decodeReactFlightElementType(value[1]),\n key: typeof value[2] === \"string\" ? value[2] : null,\n props: decodeReactFlightProps(\n valueIsObject(value[3]) ? value[3] : {},\n modelChunks,\n errorChunks,\n ),\n };\n }\n\n return value.map((item) => decodeReactFlightModel(item, modelChunks, errorChunks));\n }\n\n if (isReactFlightBinaryModel(value)) {\n return value;\n }\n\n if (valueIsObject(value)) {\n return decodeReactFlightProps(value, modelChunks, errorChunks);\n }\n\n return { kind: \"undefined\" };\n}\n\nfunction decodeReactFlightString(\n value: string,\n modelChunks: ReadonlyMap<number, unknown>,\n errorChunks: ReadonlyMap<number, FlightErrorModel>,\n): FlightModel {\n if (value === \"$undefined\" || value === \"$u\") {\n return { kind: \"undefined\" };\n }\n\n if (value.startsWith(\"$$\")) {\n return value.slice(1);\n }\n\n if (value === \"$I\") {\n return { kind: \"number\", value: \"Infinity\" };\n }\n\n if (value === \"$-Infinity\") {\n return { kind: \"number\", value: \"-Infinity\" };\n }\n\n if (value === \"$-0\") {\n return { kind: \"number\", value: \"-0\" };\n }\n\n if (value === \"$N\") {\n return { kind: \"number\", value: \"NaN\" };\n }\n\n if (value.startsWith(\"$D\")) {\n return { kind: \"date\", value: value.slice(2) };\n }\n\n if (value.startsWith(\"$n\")) {\n return { kind: \"bigint\", value: value.slice(2) };\n }\n\n if (/^\\$F[0-9a-f]+$/i.test(value)) {\n return {\n kind: \"server-reference\",\n id: parseReactFlightId(value.slice(2)),\n };\n }\n\n if (/^\\$L[0-9a-f]+$/i.test(value)) {\n return {\n kind: \"client-reference\",\n id: parseReactFlightId(value.slice(2)),\n };\n }\n\n if (/^\\$[AOoUSsLlGgMmV][0-9a-f]+$/.test(value)) {\n return decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks);\n }\n\n if (value.startsWith(\"$S\")) {\n return { kind: \"symbol\", name: value.slice(2) };\n }\n\n if (/^\\$@[0-9a-f]*$/i.test(value)) {\n return {\n kind: \"promise\",\n id: value.length === 2 ? 0 : parseReactFlightId(value.slice(2)),\n };\n }\n\n if (/^\\$Q[0-9a-f]+$/i.test(value)) {\n const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks);\n const entries = Array.isArray(decoded)\n ? decoded.map((entry): [FlightModel, FlightModel] =>\n Array.isArray(entry)\n ? [entry[0] ?? { kind: \"undefined\" }, entry[1] ?? { kind: \"undefined\" }]\n : [entry, { kind: \"undefined\" }],\n )\n : [];\n\n return {\n kind: \"map\",\n entries,\n };\n }\n\n if (/^\\$W[0-9a-f]+$/i.test(value)) {\n const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks);\n\n return {\n kind: \"set\",\n values: Array.isArray(decoded) ? decoded : [],\n };\n }\n\n if (/^\\$K[0-9a-f]+$/i.test(value)) {\n const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks);\n const entries = Array.isArray(decoded)\n ? decoded.flatMap((entry): [string, FlightModel][] =>\n Array.isArray(entry) && typeof entry[0] === \"string\"\n ? [[entry[0], entry[1] ?? { kind: \"undefined\" }]]\n : [],\n )\n : [];\n\n return {\n kind: \"form-data\",\n entries,\n };\n }\n\n if (/^\\$i[0-9a-f]+$/i.test(value)) {\n const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks);\n\n return {\n kind: \"iterable\",\n values: Array.isArray(decoded) ? decoded : [],\n };\n }\n\n if (/^\\$Z[0-9a-f]+$/i.test(value)) {\n return errorChunks.get(parseReactFlightId(value.slice(2))) ?? {\n kind: \"error\",\n name: \"Error\",\n message: \"Unknown React Flight error.\",\n };\n }\n\n if (value === \"$Y\" || value.startsWith(\"$E\")) {\n return { kind: \"undefined\" };\n }\n\n if (/^\\$[0-9a-f]+$/i.test(value)) {\n return decodeReactFlightChunk(value.slice(1), modelChunks, errorChunks);\n }\n\n return value;\n}\n\nfunction decodeReactFlightChunk(\n id: string,\n modelChunks: ReadonlyMap<number, unknown>,\n errorChunks: ReadonlyMap<number, FlightErrorModel>,\n): FlightModel {\n const numericId = parseReactFlightId(id);\n const error = errorChunks.get(numericId);\n\n if (error !== undefined) {\n return error;\n }\n\n if (!modelChunks.has(numericId)) {\n return {\n kind: \"promise\",\n id: numericId,\n };\n }\n\n return decodeReactFlightModel(modelChunks.get(numericId), modelChunks, errorChunks);\n}\n\nfunction decodeReactFlightElementType(value: unknown): FlightElementModel[\"type\"] {\n if (value === \"$Sreact.fragment\") {\n return { kind: \"fragment\" };\n }\n\n if (typeof value === \"string\" && /^\\$L[0-9a-f]+$/i.test(value)) {\n return {\n kind: \"client-reference\",\n id: parseReactFlightId(value.slice(2)),\n };\n }\n\n return typeof value === \"string\" ? value : String(value);\n}\n\nfunction decodeReactFlightProps(\n value: Record<string, unknown>,\n modelChunks: ReadonlyMap<number, unknown>,\n errorChunks: ReadonlyMap<number, FlightErrorModel>,\n): Record<string, FlightModel> {\n return Object.fromEntries(\n Object.entries(value).map(([key, child]) => [\n key,\n decodeReactFlightModel(child, modelChunks, errorChunks),\n ]),\n );\n}\n\nfunction isReactFlightBinaryModel(\n value: unknown,\n): value is FlightArrayBufferModel | FlightTypedArrayModel | FlightDataViewModel {\n return (\n valueIsObject(value) &&\n (value.kind === \"array-buffer\" || value.kind === \"typed-array\" || value.kind === \"data-view\")\n );\n}\n\nfunction parseReactFlightError(payload: string): FlightErrorModel {\n const value = JSON.parse(payload) as unknown;\n const object = valueIsObject(value) ? value : {};\n const digest = typeof object.digest === \"string\" ? object.digest : undefined;\n\n return {\n kind: \"error\",\n name: typeof object.name === \"string\" ? object.name : \"Error\",\n message: typeof object.message === \"string\" ? object.message : \"React Flight error.\",\n ...(digest === undefined ? {} : { digest }),\n };\n}\n\nfunction valueIsObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseReactFlightId(value: string): number {\n return Number.parseInt(value, 16);\n}\n"]}
1
+ {"version":3,"file":"flight-parser.js","sourceRoot":"","sources":["../src/flight-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactFlightBinaryRowTag } from \"./flight-protocol.js\";\nimport type {\n FlightArrayBufferModel,\n FlightClientReference,\n FlightDataViewModel,\n FlightElementModel,\n FlightErrorModel,\n FlightModel,\n FlightResponse,\n FlightServerReference,\n FlightTypedArrayModel,\n FlightTypedArrayName,\n} from \"./flight-types.js\";\n\ninterface ReactFlightRow {\n id: number;\n tag?: string;\n payload: string;\n payloadBytes?: Uint8Array;\n}\n\nconst MAX_FLIGHT_DECODE_DEPTH = 256;\n\nclass FlightDecodeError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"FlightDecodeError\";\n }\n}\n\ninterface FlightDecodeContext {\n inProgressChunkIds: Set<number>;\n}\n\nfunction createFlightDecodeContext(): FlightDecodeContext {\n return {\n inProgressChunkIds: new Set(),\n };\n}\n\nfunction flightTooDeep(): never {\n throw new FlightDecodeError(\n `MR_FLIGHT_TOO_DEEP: nested deeper than ${MAX_FLIGHT_DECODE_DEPTH} levels`,\n );\n}\n\nfunction flightCycle(id: number): never {\n throw new FlightDecodeError(`MR_FLIGHT_CYCLE: cyclic chunk reference ${id}`);\n}\n\nexport function parseReactFlightPayload(\n payload: string | ArrayBuffer | Uint8Array,\n): FlightResponse {\n if (typeof payload !== \"string\") {\n return parseReactFlightBinaryRows(payload);\n }\n\n const trimmed = payload.trim();\n\n if (trimmed.startsWith(\"{\")) {\n return JSON.parse(trimmed) as FlightResponse;\n }\n\n return parseReactFlightRows(trimmed);\n}\n\nfunction parseReactFlightRows(rows: string): FlightResponse {\n const lines = rows.split(/\\r?\\n/).filter(Boolean);\n const metadataLine = lines.find((line) => line.startsWith(\"M0:\"));\n const rootLine = lines.find((line) => line.startsWith(\"J0:\"));\n\n if (metadataLine !== undefined && rootLine !== undefined) {\n const metadata = JSON.parse(metadataLine.slice(3)) as Omit<FlightResponse, \"root\">;\n\n return {\n version: metadata.version,\n clientReferences: metadata.clientReferences,\n serverReferences: metadata.serverReferences,\n root: JSON.parse(rootLine.slice(3)) as FlightModel,\n };\n }\n\n return parseReactFlightRowObjects(lines.map((line) => parseReactFlightRow(line)));\n}\n\nfunction parseReactFlightBinaryRows(payload: ArrayBuffer | Uint8Array): FlightResponse {\n const bytes = payload instanceof Uint8Array ? payload : new Uint8Array(payload);\n const decoder = new TextDecoder();\n const rows: ReactFlightRow[] = [];\n let index = 0;\n\n while (index < bytes.length) {\n index = skipReactFlightRowBreak(bytes, index);\n\n if (index >= bytes.length) {\n break;\n }\n\n const idStart = index;\n while (index < bytes.length && bytes[index] !== 58) {\n index += 1;\n }\n\n if (index >= bytes.length) {\n throw new Error(\"Invalid React Flight binary row.\");\n }\n\n const idText = decoder.decode(bytes.subarray(idStart, index));\n const id = idText === \"\" ? 0 : parseReactFlightId(idText);\n index += 1;\n\n if (index >= bytes.length) {\n throw new Error(\"Invalid React Flight binary row.\");\n }\n\n const tag = String.fromCharCode(bytes[index] ?? 0);\n\n if (isReactFlightBinaryRowTag(tag)) {\n index += 1;\n const lengthStart = index;\n\n while (index < bytes.length && bytes[index] !== 44) {\n index += 1;\n }\n\n if (index >= bytes.length) {\n throw new Error(\"Invalid React Flight binary row.\");\n }\n\n const byteLength = parseReactFlightId(decoder.decode(bytes.subarray(lengthStart, index)));\n index += 1;\n\n if (index + byteLength > bytes.length) {\n throw new Error(\"React Flight binary row ended before declared payload length.\");\n }\n\n rows.push({\n id,\n tag,\n payload: `${byteLength.toString(16)},`,\n payloadBytes: bytes.slice(index, index + byteLength),\n });\n index += byteLength;\n index = skipReactFlightRowBreak(bytes, index);\n continue;\n }\n\n const bodyStart = index;\n while (index < bytes.length && bytes[index] !== 10 && bytes[index] !== 13) {\n index += 1;\n }\n\n rows.push(parseReactFlightRow(`${idText}:${decoder.decode(bytes.subarray(bodyStart, index))}`));\n index = skipReactFlightRowBreak(bytes, index);\n }\n\n return parseReactFlightRowObjects(rows);\n}\n\nfunction parseReactFlightRowObjects(rows: ReactFlightRow[]): FlightResponse {\n const clientReferences: FlightClientReference[] = [];\n const serverReferences: FlightServerReference[] = [];\n const modelChunks = new Map<number, unknown>();\n const errorChunks = new Map<number, FlightErrorModel>();\n let root: FlightModel | undefined;\n\n for (const row of rows) {\n if (row.tag === \"I\") {\n clientReferences.push(parseReactFlightClientReference(row.id, row.payload));\n continue;\n }\n\n if (row.tag === \"F\") {\n serverReferences.push(\n parseReactFlightServerReference(row.id, row.payload, modelChunks, errorChunks),\n );\n continue;\n }\n\n if (row.tag === \"E\") {\n const error = parseReactFlightError(row.payload);\n errorChunks.set(row.id, error);\n\n if (row.id === 0) {\n root = error;\n }\n continue;\n }\n\n if (row.tag === \"T\") {\n modelChunks.set(row.id, parseReactFlightTextChunk(row.payload));\n continue;\n }\n\n if (isReactFlightBinaryRowTag(row.tag)) {\n modelChunks.set(row.id, parseReactFlightBinaryChunk(row.tag, row.payload, row.payloadBytes));\n continue;\n }\n\n if (isReactFlightMetadataTag(row.tag)) {\n continue;\n }\n\n if (row.tag === undefined && row.payload !== \"\") {\n modelChunks.set(row.id, JSON.parse(row.payload));\n }\n }\n\n if (root === undefined && modelChunks.has(0)) {\n root = decodeReactFlightModel(modelChunks.get(0), modelChunks, errorChunks);\n }\n\n if (root === undefined) {\n throw new Error(\"Invalid React Flight rows.\");\n }\n\n return {\n version: 1,\n root,\n clientReferences,\n serverReferences,\n };\n}\n\nfunction skipReactFlightRowBreak(bytes: Uint8Array, index: number): number {\n let next = index;\n\n while (next < bytes.length && (bytes[next] === 10 || bytes[next] === 13)) {\n next += 1;\n }\n\n return next;\n}\n\nfunction parseReactFlightRow(line: string): ReactFlightRow {\n const separator = line.indexOf(\":\");\n\n if (separator < 0) {\n throw new Error(\"Invalid React Flight row.\");\n }\n\n const id = separator === 0 ? 0 : parseReactFlightId(line.slice(0, separator));\n const body = line.slice(separator + 1);\n const first = body[0];\n const hasTag = first !== undefined && isReactFlightRowTag(first, body);\n\n if (first !== undefined && !hasTag && looksLikeUnsupportedReactFlightTag(first, body)) {\n throw new Error(`Unsupported React Flight row tag: ${first}`);\n }\n\n return {\n id,\n ...(hasTag ? { tag: first } : {}),\n payload: hasTag ? body.slice(1) : body,\n };\n}\n\nfunction looksLikeUnsupportedReactFlightTag(tag: string, body: string): boolean {\n return /^[A-Z]$/.test(tag) && (body[1] === \"{\" || body[1] === \"[\" || body[1] === '\"');\n}\n\nfunction parseReactFlightTextChunk(payload: string): string {\n const separator = payload.indexOf(\",\");\n\n if (separator < 0) {\n throw new Error(\"Invalid React Flight text row.\");\n }\n\n return payload.slice(separator + 1);\n}\n\nfunction parseReactFlightBinaryChunk(\n tag: ReactFlightBinaryRowTag,\n payload: string,\n payloadBytes?: Uint8Array,\n): FlightArrayBufferModel | FlightTypedArrayModel | FlightDataViewModel {\n if (payloadBytes !== undefined) {\n return createReactFlightBinaryModel(tag, payloadBytes);\n }\n\n const separator = payload.indexOf(\",\");\n\n if (separator < 0) {\n throw new Error(\"Invalid React Flight binary row.\");\n }\n\n const byteLength = parseReactFlightId(payload.slice(0, separator));\n const bytes = decodeBase64Bytes(payload.slice(separator + 1));\n\n if (bytes.length !== byteLength) {\n throw new Error(\"React Flight binary row length did not match declared payload length.\");\n }\n\n return createReactFlightBinaryModel(tag, bytes);\n}\n\nfunction isReactFlightMetadataTag(tag: string | undefined): boolean {\n return (\n tag === \"H\" ||\n tag === \"N\" ||\n tag === \"P\" ||\n tag === \"D\" ||\n tag === \"J\" ||\n tag === \"W\" ||\n tag === \"R\" ||\n tag === \"r\" ||\n tag === \"X\" ||\n tag === \"x\" ||\n tag === \"C\"\n );\n}\n\nfunction isReactFlightRowTag(tag: string, body: string): boolean {\n if (\n tag === \"I\" ||\n tag === \"F\" ||\n tag === \"E\" ||\n tag === \"T\" ||\n tag === \"H\" ||\n tag === \"N\" ||\n tag === \"P\" ||\n tag === \"D\" ||\n tag === \"J\" ||\n tag === \"W\" ||\n tag === \"R\" ||\n tag === \"r\" ||\n tag === \"X\" ||\n tag === \"x\" ||\n tag === \"C\"\n ) {\n return true;\n }\n\n return isReactFlightBinaryRowTag(tag) && /^[AOoUSsLlGgMmV][0-9a-f]+,/i.test(body);\n}\n\nfunction isReactFlightBinaryRowTag(tag: string | undefined): tag is ReactFlightBinaryRowTag {\n return (\n tag === \"A\" ||\n tag === \"O\" ||\n tag === \"o\" ||\n tag === \"U\" ||\n tag === \"S\" ||\n tag === \"s\" ||\n tag === \"L\" ||\n tag === \"l\" ||\n tag === \"G\" ||\n tag === \"g\" ||\n tag === \"M\" ||\n tag === \"m\" ||\n tag === \"V\"\n );\n}\n\nfunction createReactFlightBinaryModel(\n tag: ReactFlightBinaryRowTag,\n bytes: Uint8Array,\n): FlightArrayBufferModel | FlightTypedArrayModel | FlightDataViewModel {\n const byteValues = Array.from(bytes);\n\n if (tag === \"A\") {\n return {\n kind: \"array-buffer\",\n bytes: byteValues,\n };\n }\n\n if (tag === \"V\") {\n return {\n kind: \"data-view\",\n bytes: byteValues,\n };\n }\n\n return {\n kind: \"typed-array\",\n arrayType: getReactFlightTypedArrayName(tag),\n bytes: byteValues,\n };\n}\n\nfunction getReactFlightTypedArrayName(\n tag: Exclude<ReactFlightBinaryRowTag, \"A\" | \"V\">,\n): FlightTypedArrayName {\n switch (tag) {\n case \"O\":\n return \"Int8Array\";\n case \"o\":\n return \"Uint8Array\";\n case \"U\":\n return \"Uint8ClampedArray\";\n case \"S\":\n return \"Int16Array\";\n case \"s\":\n return \"Uint16Array\";\n case \"L\":\n return \"Int32Array\";\n case \"l\":\n return \"Uint32Array\";\n case \"G\":\n return \"Float32Array\";\n case \"g\":\n return \"Float64Array\";\n case \"M\":\n return \"BigInt64Array\";\n case \"m\":\n return \"BigUint64Array\";\n default:\n throw new Error(`Unsupported React Flight typed array row tag: ${tag}`);\n }\n}\n\nfunction decodeBase64Bytes(value: string): Uint8Array {\n const normalized = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, \"=\");\n const binary = globalThis.atob(padded);\n const bytes = new Uint8Array(binary.length);\n\n for (let index = 0; index < binary.length; index += 1) {\n bytes[index] = binary.charCodeAt(index);\n }\n\n return bytes;\n}\n\nfunction parseReactFlightClientReference(id: number, payload: string): FlightClientReference {\n const value = JSON.parse(payload) as unknown;\n\n if (Array.isArray(value)) {\n return {\n id,\n moduleId: String(value[0]),\n chunks: Array.isArray(value[1]) ? value[1].map(String) : [],\n exportName: String(value[2] ?? \"default\"),\n };\n }\n\n const object = valueIsObject(value) ? value : {};\n\n return {\n id,\n moduleId: String(object.id ?? object.moduleId ?? \"\"),\n chunks: Array.isArray(object.chunks) ? object.chunks.map(String) : [],\n exportName: String(object.name ?? object.exportName ?? \"default\"),\n };\n}\n\nfunction parseReactFlightServerReference(\n id: number,\n payload: string,\n modelChunks: ReadonlyMap<number, unknown> = new Map(),\n errorChunks: ReadonlyMap<number, FlightErrorModel> = new Map(),\n): FlightServerReference {\n const value = JSON.parse(payload) as unknown;\n const object = valueIsObject(value) ? value : {};\n const actionId = String(object.id ?? \"\");\n const separator = actionId.lastIndexOf(\"#\");\n const bound = Array.isArray(object.bound)\n ? object.bound.map((entry) =>\n decodeReactFlightModel(entry, modelChunks, errorChunks, 0, createFlightDecodeContext()),\n )\n : undefined;\n\n return {\n id,\n moduleId: separator < 0 ? actionId : actionId.slice(0, separator),\n exportName:\n typeof object.name === \"string\"\n ? object.name\n : separator < 0\n ? \"default\"\n : actionId.slice(separator + 1),\n ...(bound === undefined ? {} : { bound }),\n };\n}\n\nfunction decodeReactFlightModel(\n value: unknown,\n modelChunks: ReadonlyMap<number, unknown> = new Map(),\n errorChunks: ReadonlyMap<number, FlightErrorModel> = new Map(),\n depth = 0,\n context: FlightDecodeContext = createFlightDecodeContext(),\n): FlightModel {\n if (depth > MAX_FLIGHT_DECODE_DEPTH) flightTooDeep();\n\n if (value === null || typeof value === \"number\" || typeof value === \"boolean\") {\n return value;\n }\n\n if (typeof value === \"string\") {\n return decodeReactFlightString(value, modelChunks, errorChunks, depth, context);\n }\n\n if (Array.isArray(value)) {\n if (value[0] === \"$\") {\n return {\n kind: \"element\",\n type: decodeReactFlightElementType(value[1]),\n key: typeof value[2] === \"string\" ? value[2] : null,\n props: decodeReactFlightProps(\n valueIsObject(value[3]) ? value[3] : {},\n modelChunks,\n errorChunks,\n depth + 1,\n context,\n ),\n };\n }\n\n return value.map((item) =>\n decodeReactFlightModel(item, modelChunks, errorChunks, depth + 1, context),\n );\n }\n\n if (isReactFlightBinaryModel(value)) {\n return value;\n }\n\n if (valueIsObject(value)) {\n return decodeReactFlightProps(value, modelChunks, errorChunks, depth + 1, context);\n }\n\n return { kind: \"undefined\" };\n}\n\nfunction decodeReactFlightString(\n value: string,\n modelChunks: ReadonlyMap<number, unknown>,\n errorChunks: ReadonlyMap<number, FlightErrorModel>,\n depth: number,\n context: FlightDecodeContext,\n): FlightModel {\n if (value === \"$undefined\" || value === \"$u\") {\n return { kind: \"undefined\" };\n }\n\n if (value.startsWith(\"$$\")) {\n return value.slice(1);\n }\n\n if (value === \"$I\") {\n return { kind: \"number\", value: \"Infinity\" };\n }\n\n if (value === \"$-Infinity\") {\n return { kind: \"number\", value: \"-Infinity\" };\n }\n\n if (value === \"$-0\") {\n return { kind: \"number\", value: \"-0\" };\n }\n\n if (value === \"$N\") {\n return { kind: \"number\", value: \"NaN\" };\n }\n\n if (value.startsWith(\"$D\")) {\n return { kind: \"date\", value: value.slice(2) };\n }\n\n if (value.startsWith(\"$n\")) {\n return { kind: \"bigint\", value: value.slice(2) };\n }\n\n if (/^\\$F[0-9a-f]+$/i.test(value)) {\n return {\n kind: \"server-reference\",\n id: parseReactFlightId(value.slice(2)),\n };\n }\n\n if (/^\\$L[0-9a-f]+$/i.test(value)) {\n return {\n kind: \"client-reference\",\n id: parseReactFlightId(value.slice(2)),\n };\n }\n\n if (/^\\$[AOoUSsLlGgMmV][0-9a-f]+$/.test(value)) {\n return decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks, depth + 1, context);\n }\n\n if (value.startsWith(\"$S\")) {\n return { kind: \"symbol\", name: value.slice(2) };\n }\n\n if (/^\\$@[0-9a-f]*$/i.test(value)) {\n return {\n kind: \"promise\",\n id: value.length === 2 ? 0 : parseReactFlightId(value.slice(2)),\n };\n }\n\n if (/^\\$Q[0-9a-f]+$/i.test(value)) {\n const decoded = decodeReactFlightChunk(\n value.slice(2),\n modelChunks,\n errorChunks,\n depth + 1,\n context,\n );\n const entries = Array.isArray(decoded)\n ? decoded.map((entry): [FlightModel, FlightModel] =>\n Array.isArray(entry)\n ? [entry[0] ?? { kind: \"undefined\" }, entry[1] ?? { kind: \"undefined\" }]\n : [entry, { kind: \"undefined\" }],\n )\n : [];\n\n return {\n kind: \"map\",\n entries,\n };\n }\n\n if (/^\\$W[0-9a-f]+$/i.test(value)) {\n const decoded = decodeReactFlightChunk(\n value.slice(2),\n modelChunks,\n errorChunks,\n depth + 1,\n context,\n );\n\n return {\n kind: \"set\",\n values: Array.isArray(decoded) ? decoded : [],\n };\n }\n\n if (/^\\$K[0-9a-f]+$/i.test(value)) {\n const decoded = decodeReactFlightChunk(\n value.slice(2),\n modelChunks,\n errorChunks,\n depth + 1,\n context,\n );\n const entries = Array.isArray(decoded)\n ? decoded.flatMap((entry): [string, FlightModel][] =>\n Array.isArray(entry) && typeof entry[0] === \"string\"\n ? [[entry[0], entry[1] ?? { kind: \"undefined\" }]]\n : [],\n )\n : [];\n\n return {\n kind: \"form-data\",\n entries,\n };\n }\n\n if (/^\\$i[0-9a-f]+$/i.test(value)) {\n const decoded = decodeReactFlightChunk(\n value.slice(2),\n modelChunks,\n errorChunks,\n depth + 1,\n context,\n );\n\n return {\n kind: \"iterable\",\n values: Array.isArray(decoded) ? decoded : [],\n };\n }\n\n if (/^\\$Z[0-9a-f]+$/i.test(value)) {\n return (\n errorChunks.get(parseReactFlightId(value.slice(2))) ?? {\n kind: \"error\",\n name: \"Error\",\n message: \"Unknown React Flight error.\",\n }\n );\n }\n\n if (value === \"$Y\" || value.startsWith(\"$E\")) {\n return { kind: \"undefined\" };\n }\n\n if (/^\\$[0-9a-f]+$/i.test(value)) {\n return decodeReactFlightChunk(value.slice(1), modelChunks, errorChunks, depth + 1, context);\n }\n\n return value;\n}\n\nfunction decodeReactFlightChunk(\n id: string,\n modelChunks: ReadonlyMap<number, unknown>,\n errorChunks: ReadonlyMap<number, FlightErrorModel>,\n depth: number,\n context: FlightDecodeContext,\n): FlightModel {\n if (depth > MAX_FLIGHT_DECODE_DEPTH) flightTooDeep();\n const numericId = parseReactFlightId(id);\n const error = errorChunks.get(numericId);\n\n if (error !== undefined) {\n return error;\n }\n\n if (!modelChunks.has(numericId)) {\n return {\n kind: \"promise\",\n id: numericId,\n };\n }\n\n if (context.inProgressChunkIds.has(numericId)) {\n flightCycle(numericId);\n }\n\n context.inProgressChunkIds.add(numericId);\n try {\n return decodeReactFlightModel(\n modelChunks.get(numericId),\n modelChunks,\n errorChunks,\n depth,\n context,\n );\n } finally {\n context.inProgressChunkIds.delete(numericId);\n }\n}\n\nfunction decodeReactFlightElementType(value: unknown): FlightElementModel[\"type\"] {\n if (value === \"$Sreact.fragment\") {\n return { kind: \"fragment\" };\n }\n\n if (typeof value === \"string\" && /^\\$L[0-9a-f]+$/i.test(value)) {\n return {\n kind: \"client-reference\",\n id: parseReactFlightId(value.slice(2)),\n };\n }\n\n return typeof value === \"string\" ? value : String(value);\n}\n\nfunction decodeReactFlightProps(\n value: Record<string, unknown>,\n modelChunks: ReadonlyMap<number, unknown>,\n errorChunks: ReadonlyMap<number, FlightErrorModel>,\n depth = 0,\n context: FlightDecodeContext = createFlightDecodeContext(),\n): Record<string, FlightModel> {\n if (depth > MAX_FLIGHT_DECODE_DEPTH) flightTooDeep();\n\n return Object.fromEntries(\n Object.entries(value).map(([key, child]) => [\n key,\n decodeReactFlightModel(child, modelChunks, errorChunks, depth + 1, context),\n ]),\n );\n}\n\nfunction isReactFlightBinaryModel(\n value: unknown,\n): value is FlightArrayBufferModel | FlightTypedArrayModel | FlightDataViewModel {\n return (\n valueIsObject(value) &&\n (value.kind === \"array-buffer\" || value.kind === \"typed-array\" || value.kind === \"data-view\")\n );\n}\n\nfunction parseReactFlightError(payload: string): FlightErrorModel {\n const value = JSON.parse(payload) as unknown;\n const object = valueIsObject(value) ? value : {};\n const digest = typeof object.digest === \"string\" ? object.digest : undefined;\n\n return {\n kind: \"error\",\n name: typeof object.name === \"string\" ? object.name : \"Error\",\n message: typeof object.message === \"string\" ? object.message : \"React Flight error.\",\n ...(digest === undefined ? {} : { digest }),\n };\n}\n\nfunction valueIsObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseReactFlightId(value: string): number {\n return Number.parseInt(value, 16);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reckona/mreact-compat",
3
- "version": "0.0.180",
3
+ "version": "0.0.181",
4
4
  "description": "React-compatible runtime implementation for mreact.",
5
5
  "keywords": [
6
6
  "compatibility",
@@ -69,7 +69,7 @@
69
69
  "access": "public"
70
70
  },
71
71
  "dependencies": {
72
- "@reckona/mreact-reactive-core": "0.0.180",
73
- "@reckona/mreact-shared": "0.0.180"
72
+ "@reckona/mreact-reactive-core": "0.0.181",
73
+ "@reckona/mreact-shared": "0.0.181"
74
74
  }
75
75
  }
@@ -19,7 +19,38 @@ interface ReactFlightRow {
19
19
  payloadBytes?: Uint8Array;
20
20
  }
21
21
 
22
- export function parseReactFlightPayload(payload: string | ArrayBuffer | Uint8Array): FlightResponse {
22
+ const MAX_FLIGHT_DECODE_DEPTH = 256;
23
+
24
+ class FlightDecodeError extends Error {
25
+ constructor(message: string) {
26
+ super(message);
27
+ this.name = "FlightDecodeError";
28
+ }
29
+ }
30
+
31
+ interface FlightDecodeContext {
32
+ inProgressChunkIds: Set<number>;
33
+ }
34
+
35
+ function createFlightDecodeContext(): FlightDecodeContext {
36
+ return {
37
+ inProgressChunkIds: new Set(),
38
+ };
39
+ }
40
+
41
+ function flightTooDeep(): never {
42
+ throw new FlightDecodeError(
43
+ `MR_FLIGHT_TOO_DEEP: nested deeper than ${MAX_FLIGHT_DECODE_DEPTH} levels`,
44
+ );
45
+ }
46
+
47
+ function flightCycle(id: number): never {
48
+ throw new FlightDecodeError(`MR_FLIGHT_CYCLE: cyclic chunk reference ${id}`);
49
+ }
50
+
51
+ export function parseReactFlightPayload(
52
+ payload: string | ArrayBuffer | Uint8Array,
53
+ ): FlightResponse {
23
54
  if (typeof payload !== "string") {
24
55
  return parseReactFlightBinaryRows(payload);
25
56
  }
@@ -225,7 +256,7 @@ function parseReactFlightRow(line: string): ReactFlightRow {
225
256
  }
226
257
 
227
258
  function looksLikeUnsupportedReactFlightTag(tag: string, body: string): boolean {
228
- return /^[A-Z]$/.test(tag) && (body[1] === "{" || body[1] === "[" || body[1] === "\"");
259
+ return /^[A-Z]$/.test(tag) && (body[1] === "{" || body[1] === "[" || body[1] === '"');
229
260
  }
230
261
 
231
262
  function parseReactFlightTextChunk(payload: string): string {
@@ -425,7 +456,9 @@ function parseReactFlightServerReference(
425
456
  const actionId = String(object.id ?? "");
426
457
  const separator = actionId.lastIndexOf("#");
427
458
  const bound = Array.isArray(object.bound)
428
- ? object.bound.map((entry) => decodeReactFlightModel(entry, modelChunks, errorChunks))
459
+ ? object.bound.map((entry) =>
460
+ decodeReactFlightModel(entry, modelChunks, errorChunks, 0, createFlightDecodeContext()),
461
+ )
429
462
  : undefined;
430
463
 
431
464
  return {
@@ -445,13 +478,17 @@ function decodeReactFlightModel(
445
478
  value: unknown,
446
479
  modelChunks: ReadonlyMap<number, unknown> = new Map(),
447
480
  errorChunks: ReadonlyMap<number, FlightErrorModel> = new Map(),
481
+ depth = 0,
482
+ context: FlightDecodeContext = createFlightDecodeContext(),
448
483
  ): FlightModel {
484
+ if (depth > MAX_FLIGHT_DECODE_DEPTH) flightTooDeep();
485
+
449
486
  if (value === null || typeof value === "number" || typeof value === "boolean") {
450
487
  return value;
451
488
  }
452
489
 
453
490
  if (typeof value === "string") {
454
- return decodeReactFlightString(value, modelChunks, errorChunks);
491
+ return decodeReactFlightString(value, modelChunks, errorChunks, depth, context);
455
492
  }
456
493
 
457
494
  if (Array.isArray(value)) {
@@ -464,11 +501,15 @@ function decodeReactFlightModel(
464
501
  valueIsObject(value[3]) ? value[3] : {},
465
502
  modelChunks,
466
503
  errorChunks,
504
+ depth + 1,
505
+ context,
467
506
  ),
468
507
  };
469
508
  }
470
509
 
471
- return value.map((item) => decodeReactFlightModel(item, modelChunks, errorChunks));
510
+ return value.map((item) =>
511
+ decodeReactFlightModel(item, modelChunks, errorChunks, depth + 1, context),
512
+ );
472
513
  }
473
514
 
474
515
  if (isReactFlightBinaryModel(value)) {
@@ -476,7 +517,7 @@ function decodeReactFlightModel(
476
517
  }
477
518
 
478
519
  if (valueIsObject(value)) {
479
- return decodeReactFlightProps(value, modelChunks, errorChunks);
520
+ return decodeReactFlightProps(value, modelChunks, errorChunks, depth + 1, context);
480
521
  }
481
522
 
482
523
  return { kind: "undefined" };
@@ -486,6 +527,8 @@ function decodeReactFlightString(
486
527
  value: string,
487
528
  modelChunks: ReadonlyMap<number, unknown>,
488
529
  errorChunks: ReadonlyMap<number, FlightErrorModel>,
530
+ depth: number,
531
+ context: FlightDecodeContext,
489
532
  ): FlightModel {
490
533
  if (value === "$undefined" || value === "$u") {
491
534
  return { kind: "undefined" };
@@ -534,7 +577,7 @@ function decodeReactFlightString(
534
577
  }
535
578
 
536
579
  if (/^\$[AOoUSsLlGgMmV][0-9a-f]+$/.test(value)) {
537
- return decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks);
580
+ return decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks, depth + 1, context);
538
581
  }
539
582
 
540
583
  if (value.startsWith("$S")) {
@@ -549,7 +592,13 @@ function decodeReactFlightString(
549
592
  }
550
593
 
551
594
  if (/^\$Q[0-9a-f]+$/i.test(value)) {
552
- const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks);
595
+ const decoded = decodeReactFlightChunk(
596
+ value.slice(2),
597
+ modelChunks,
598
+ errorChunks,
599
+ depth + 1,
600
+ context,
601
+ );
553
602
  const entries = Array.isArray(decoded)
554
603
  ? decoded.map((entry): [FlightModel, FlightModel] =>
555
604
  Array.isArray(entry)
@@ -565,7 +614,13 @@ function decodeReactFlightString(
565
614
  }
566
615
 
567
616
  if (/^\$W[0-9a-f]+$/i.test(value)) {
568
- const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks);
617
+ const decoded = decodeReactFlightChunk(
618
+ value.slice(2),
619
+ modelChunks,
620
+ errorChunks,
621
+ depth + 1,
622
+ context,
623
+ );
569
624
 
570
625
  return {
571
626
  kind: "set",
@@ -574,7 +629,13 @@ function decodeReactFlightString(
574
629
  }
575
630
 
576
631
  if (/^\$K[0-9a-f]+$/i.test(value)) {
577
- const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks);
632
+ const decoded = decodeReactFlightChunk(
633
+ value.slice(2),
634
+ modelChunks,
635
+ errorChunks,
636
+ depth + 1,
637
+ context,
638
+ );
578
639
  const entries = Array.isArray(decoded)
579
640
  ? decoded.flatMap((entry): [string, FlightModel][] =>
580
641
  Array.isArray(entry) && typeof entry[0] === "string"
@@ -590,7 +651,13 @@ function decodeReactFlightString(
590
651
  }
591
652
 
592
653
  if (/^\$i[0-9a-f]+$/i.test(value)) {
593
- const decoded = decodeReactFlightChunk(value.slice(2), modelChunks, errorChunks);
654
+ const decoded = decodeReactFlightChunk(
655
+ value.slice(2),
656
+ modelChunks,
657
+ errorChunks,
658
+ depth + 1,
659
+ context,
660
+ );
594
661
 
595
662
  return {
596
663
  kind: "iterable",
@@ -599,11 +666,13 @@ function decodeReactFlightString(
599
666
  }
600
667
 
601
668
  if (/^\$Z[0-9a-f]+$/i.test(value)) {
602
- return errorChunks.get(parseReactFlightId(value.slice(2))) ?? {
603
- kind: "error",
604
- name: "Error",
605
- message: "Unknown React Flight error.",
606
- };
669
+ return (
670
+ errorChunks.get(parseReactFlightId(value.slice(2))) ?? {
671
+ kind: "error",
672
+ name: "Error",
673
+ message: "Unknown React Flight error.",
674
+ }
675
+ );
607
676
  }
608
677
 
609
678
  if (value === "$Y" || value.startsWith("$E")) {
@@ -611,7 +680,7 @@ function decodeReactFlightString(
611
680
  }
612
681
 
613
682
  if (/^\$[0-9a-f]+$/i.test(value)) {
614
- return decodeReactFlightChunk(value.slice(1), modelChunks, errorChunks);
683
+ return decodeReactFlightChunk(value.slice(1), modelChunks, errorChunks, depth + 1, context);
615
684
  }
616
685
 
617
686
  return value;
@@ -621,7 +690,10 @@ function decodeReactFlightChunk(
621
690
  id: string,
622
691
  modelChunks: ReadonlyMap<number, unknown>,
623
692
  errorChunks: ReadonlyMap<number, FlightErrorModel>,
693
+ depth: number,
694
+ context: FlightDecodeContext,
624
695
  ): FlightModel {
696
+ if (depth > MAX_FLIGHT_DECODE_DEPTH) flightTooDeep();
625
697
  const numericId = parseReactFlightId(id);
626
698
  const error = errorChunks.get(numericId);
627
699
 
@@ -636,7 +708,22 @@ function decodeReactFlightChunk(
636
708
  };
637
709
  }
638
710
 
639
- return decodeReactFlightModel(modelChunks.get(numericId), modelChunks, errorChunks);
711
+ if (context.inProgressChunkIds.has(numericId)) {
712
+ flightCycle(numericId);
713
+ }
714
+
715
+ context.inProgressChunkIds.add(numericId);
716
+ try {
717
+ return decodeReactFlightModel(
718
+ modelChunks.get(numericId),
719
+ modelChunks,
720
+ errorChunks,
721
+ depth,
722
+ context,
723
+ );
724
+ } finally {
725
+ context.inProgressChunkIds.delete(numericId);
726
+ }
640
727
  }
641
728
 
642
729
  function decodeReactFlightElementType(value: unknown): FlightElementModel["type"] {
@@ -658,11 +745,15 @@ function decodeReactFlightProps(
658
745
  value: Record<string, unknown>,
659
746
  modelChunks: ReadonlyMap<number, unknown>,
660
747
  errorChunks: ReadonlyMap<number, FlightErrorModel>,
748
+ depth = 0,
749
+ context: FlightDecodeContext = createFlightDecodeContext(),
661
750
  ): Record<string, FlightModel> {
751
+ if (depth > MAX_FLIGHT_DECODE_DEPTH) flightTooDeep();
752
+
662
753
  return Object.fromEntries(
663
754
  Object.entries(value).map(([key, child]) => [
664
755
  key,
665
- decodeReactFlightModel(child, modelChunks, errorChunks),
756
+ decodeReactFlightModel(child, modelChunks, errorChunks, depth + 1, context),
666
757
  ]),
667
758
  );
668
759
  }