@vitejs/plugin-rsc 0.5.16 → 0.5.18

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.
Files changed (55) hide show
  1. package/dist/browser.d.ts +2 -2
  2. package/dist/{cjs-DH9Oa3zy.js → cjs-D2v1gYgq.js} +33 -24
  3. package/dist/core/browser.d.ts +1 -1
  4. package/dist/core/browser.js +2 -2
  5. package/dist/core/plugin.js +1 -1
  6. package/dist/core/rsc.d.ts +1 -1
  7. package/dist/core/rsc.js +1 -1
  8. package/dist/core/ssr.d.ts +1 -1
  9. package/dist/core/ssr.js +2 -2
  10. package/dist/{dist-DZUJDIM2.js → dist-yW9-EeG1.js} +1 -1
  11. package/dist/index-CLmWsR1c.d.ts +584 -0
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.js +4 -4
  14. package/dist/{picocolors-kt7Y18A3.js → picocolors-BRyoHAlU.js} +1 -1
  15. package/dist/plugin-BGmSmdwL.js +27 -0
  16. package/dist/{plugin-DBWiu_Dx.js → plugin-Cp12dr0Z.js} +408 -329
  17. package/dist/{plugin-V6VFxi_0.d.ts → plugin-K7i9F4Fd.d.ts} +6 -12
  18. package/dist/plugin.d.ts +2 -2
  19. package/dist/plugin.js +4 -4
  20. package/dist/plugins/cjs.js +1 -1
  21. package/dist/react/browser.d.ts +2 -2
  22. package/dist/react/rsc.js +1 -1
  23. package/dist/{rsc-BCFg12vs.js → rsc-Bhp6O2qz.js} +3 -3
  24. package/dist/rsc.d.ts +2 -2
  25. package/dist/rsc.js +2 -2
  26. package/dist/ssr.d.ts +2 -3
  27. package/dist/ssr.js +1 -1
  28. package/dist/transforms/index.d.ts +1 -1
  29. package/dist/transforms/index.js +1 -1
  30. package/dist/{transforms-D4jDIHgD.js → transforms-B2EJTNXG.js} +2 -2
  31. package/dist/utils/encryption-runtime.js +3 -3
  32. package/dist/utils/rpc.js +1 -1
  33. package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-client.browser.development.js +129 -110
  34. package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-client.browser.production.js +67 -55
  35. package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-client.edge.development.js +127 -108
  36. package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-client.edge.production.js +67 -55
  37. package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-client.node.development.js +127 -108
  38. package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-client.node.production.js +67 -55
  39. package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-server.browser.development.js +625 -351
  40. package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-server.browser.production.js +598 -314
  41. package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-server.edge.development.js +628 -352
  42. package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-server.edge.production.js +601 -315
  43. package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-server.node.development.js +634 -356
  44. package/dist/vendor/react-server-dom/cjs/react-server-dom-webpack-server.node.production.js +607 -319
  45. package/dist/vendor/react-server-dom/package.json +3 -3
  46. package/package.json +10 -8
  47. package/dist/index-DJ0AhQ9B.d.ts +0 -90
  48. package/dist/plugin-B1AJWrMi.js +0 -24
  49. /package/dist/{browser-BmyjVnfA.d.ts → browser-s-WcB8A7.d.ts} +0 -0
  50. /package/dist/{chunk-BFhhoFQb.js → chunk-Dj_d7TT4.js} +0 -0
  51. /package/dist/{encryption-utils-BPYvebX4.js → encryption-utils-DdqSKS_O.js} +0 -0
  52. /package/dist/{index-DqoQPvhP.d.ts → index-now_lP2V.d.ts} +0 -0
  53. /package/dist/{rpc-DbBe389F.js → rpc-EIuXyQpO.js} +0 -0
  54. /package/dist/{shared-Chot7h9j.js → shared-CGK4coF3.js} +0 -0
  55. /package/dist/{shared-DEpnONZf.js → shared-rtJPs0Yj.js} +0 -0
@@ -824,7 +824,7 @@ function describeObjectForErrorMessage(objectOrArray, expandedName) {
824
824
  : "\n " + str;
825
825
  }
826
826
  var hasOwnProperty = Object.prototype.hasOwnProperty,
827
- ObjectPrototype = Object.prototype,
827
+ ObjectPrototype$1 = Object.prototype,
828
828
  stringify = JSON.stringify;
829
829
  function defaultErrorHandler(error) {
830
830
  console.error(error);
@@ -1688,7 +1688,7 @@ function renderModelDestructive(
1688
1688
  if (value instanceof Date) return "$D" + value.toJSON();
1689
1689
  request = getPrototypeOf(value);
1690
1690
  if (
1691
- request !== ObjectPrototype &&
1691
+ request !== ObjectPrototype$1 &&
1692
1692
  (null === request || null !== getPrototypeOf(request))
1693
1693
  )
1694
1694
  throw Error(
@@ -2268,16 +2268,23 @@ ReactPromise.prototype.then = function (resolve, reject) {
2268
2268
  case "fulfilled":
2269
2269
  if ("function" === typeof resolve) {
2270
2270
  for (
2271
- var inspectedValue = this.value, cycleProtection = 0;
2271
+ var inspectedValue = this.value,
2272
+ cycleProtection = 0,
2273
+ visited = new Set();
2272
2274
  inspectedValue instanceof ReactPromise;
2273
2275
 
2274
2276
  ) {
2275
2277
  cycleProtection++;
2276
- if (inspectedValue === this || 1e3 < cycleProtection) {
2278
+ if (
2279
+ inspectedValue === this ||
2280
+ visited.has(inspectedValue) ||
2281
+ 1e3 < cycleProtection
2282
+ ) {
2277
2283
  "function" === typeof reject &&
2278
2284
  reject(Error("Cannot have cyclic thenables."));
2279
2285
  return;
2280
2286
  }
2287
+ visited.add(inspectedValue);
2281
2288
  if ("fulfilled" === inspectedValue.status)
2282
2289
  inspectedValue = inspectedValue.value;
2283
2290
  else break;
@@ -2296,12 +2303,14 @@ ReactPromise.prototype.then = function (resolve, reject) {
2296
2303
  "function" === typeof reject && reject(this.reason);
2297
2304
  }
2298
2305
  };
2299
- function wakeChunk(response, listeners, value) {
2306
+ var ObjectPrototype = Object.prototype,
2307
+ ArrayPrototype = Array.prototype;
2308
+ function wakeChunk(response, listeners, value, chunk) {
2300
2309
  for (var i = 0; i < listeners.length; i++) {
2301
2310
  var listener = listeners[i];
2302
2311
  "function" === typeof listener
2303
2312
  ? listener(value)
2304
- : fulfillReference(response, listener, value);
2313
+ : fulfillReference(response, listener, value, chunk.reason);
2305
2314
  }
2306
2315
  }
2307
2316
  function rejectChunk(response, listeners, error) {
@@ -2312,27 +2321,6 @@ function rejectChunk(response, listeners, error) {
2312
2321
  : rejectReference(response, listener.handler, error);
2313
2322
  }
2314
2323
  }
2315
- function resolveBlockedCycle(resolvedChunk, reference) {
2316
- var referencedChunk = reference.handler.chunk;
2317
- if (null === referencedChunk) return null;
2318
- if (referencedChunk === resolvedChunk) return reference.handler;
2319
- reference = referencedChunk.value;
2320
- if (null !== reference)
2321
- for (
2322
- referencedChunk = 0;
2323
- referencedChunk < reference.length;
2324
- referencedChunk++
2325
- ) {
2326
- var listener = reference[referencedChunk];
2327
- if (
2328
- "function" !== typeof listener &&
2329
- ((listener = resolveBlockedCycle(resolvedChunk, listener)),
2330
- null !== listener)
2331
- )
2332
- return listener;
2333
- }
2334
- return null;
2335
- }
2336
2324
  function triggerErrorOnChunk(response, chunk, error) {
2337
2325
  if ("pending" !== chunk.status && "blocked" !== chunk.status)
2338
2326
  chunk.reason.error(error);
@@ -2368,33 +2356,11 @@ function resolveModelChunk(response, chunk, value, id) {
2368
2356
  chunk.reason =
2369
2357
  ((value.id = id), (value[RESPONSE_SYMBOL] = response), value);
2370
2358
  if (null !== resolveListeners)
2371
- a: switch ((initializeModelChunk(chunk), chunk.status)) {
2359
+ switch ((initializeModelChunk(chunk), chunk.status)) {
2372
2360
  case "fulfilled":
2373
- wakeChunk(response, resolveListeners, chunk.value);
2361
+ wakeChunk(response, resolveListeners, chunk.value, chunk);
2374
2362
  break;
2375
2363
  case "blocked":
2376
- for (value = 0; value < resolveListeners.length; value++)
2377
- if (((id = resolveListeners[value]), "function" !== typeof id)) {
2378
- var cyclicHandler = resolveBlockedCycle(chunk, id);
2379
- if (null !== cyclicHandler)
2380
- switch (
2381
- (fulfillReference(response, id, cyclicHandler.value),
2382
- resolveListeners.splice(value, 1),
2383
- value--,
2384
- null !== rejectListeners &&
2385
- ((id = rejectListeners.indexOf(id)),
2386
- -1 !== id && rejectListeners.splice(id, 1)),
2387
- chunk.status)
2388
- ) {
2389
- case "fulfilled":
2390
- wakeChunk(response, resolveListeners, chunk.value);
2391
- break a;
2392
- case "rejected":
2393
- null !== rejectListeners &&
2394
- rejectChunk(response, rejectListeners, chunk.reason);
2395
- break a;
2396
- }
2397
- }
2398
2364
  case "pending":
2399
2365
  if (chunk.value)
2400
2366
  for (response = 0; response < resolveListeners.length; response++)
@@ -2411,7 +2377,8 @@ function resolveModelChunk(response, chunk, value, id) {
2411
2377
  } else chunk.reason = rejectListeners;
2412
2378
  break;
2413
2379
  case "rejected":
2414
- rejectListeners && wakeChunk(response, rejectListeners, chunk.reason);
2380
+ rejectListeners &&
2381
+ rejectChunk(response, rejectListeners, chunk.reason);
2415
2382
  }
2416
2383
  }
2417
2384
  }
@@ -2434,15 +2401,50 @@ function resolveIteratorResultChunk(response, chunk, value, done) {
2434
2401
  );
2435
2402
  }
2436
2403
  function loadServerReference$1(response, metaData, parentObject, key) {
2404
+ function reject(error) {
2405
+ var rejectListeners = blockedPromise.reason,
2406
+ erroredPromise = blockedPromise;
2407
+ erroredPromise.status = "rejected";
2408
+ erroredPromise.value = null;
2409
+ erroredPromise.reason = error;
2410
+ null !== rejectListeners && rejectChunk(response, rejectListeners, error);
2411
+ rejectReference(response, handler, error);
2412
+ }
2437
2413
  var id = metaData.id;
2438
2414
  if ("string" !== typeof id || "then" === key) return null;
2415
+ var cachedPromise = metaData.$$promise;
2416
+ if (void 0 !== cachedPromise) {
2417
+ if ("fulfilled" === cachedPromise.status)
2418
+ return (
2419
+ (cachedPromise = cachedPromise.value),
2420
+ "__proto__" === key ? null : (parentObject[key] = cachedPromise)
2421
+ );
2422
+ initializingHandler
2423
+ ? ((id = initializingHandler), id.deps++)
2424
+ : (id = initializingHandler =
2425
+ { chunk: null, value: null, reason: null, deps: 1, errored: !1 });
2426
+ cachedPromise.then(
2427
+ resolveReference.bind(null, response, id, parentObject, key),
2428
+ rejectReference.bind(null, response, id)
2429
+ );
2430
+ return null;
2431
+ }
2432
+ var blockedPromise = new ReactPromise("blocked", null, null);
2433
+ metaData.$$promise = blockedPromise;
2439
2434
  var serverReference = resolveServerReference(response._bundlerConfig, id);
2440
- id = metaData.bound;
2441
- var promise = preloadModule(serverReference);
2442
- if (promise)
2443
- id instanceof ReactPromise && (promise = Promise.all([promise, id]));
2444
- else if (id instanceof ReactPromise) promise = Promise.resolve(id);
2445
- else return requireModule(serverReference);
2435
+ cachedPromise = metaData.bound;
2436
+ if ((id = preloadModule(serverReference)))
2437
+ cachedPromise instanceof ReactPromise &&
2438
+ (id = Promise.all([id, cachedPromise]));
2439
+ else if (cachedPromise instanceof ReactPromise)
2440
+ id = Promise.resolve(cachedPromise);
2441
+ else
2442
+ return (
2443
+ (cachedPromise = requireModule(serverReference)),
2444
+ (id = blockedPromise),
2445
+ (id.status = "fulfilled"),
2446
+ (id.value = cachedPromise)
2447
+ );
2446
2448
  if (initializingHandler) {
2447
2449
  var handler = initializingHandler;
2448
2450
  handler.deps++;
@@ -2454,74 +2456,105 @@ function loadServerReference$1(response, metaData, parentObject, key) {
2454
2456
  deps: 1,
2455
2457
  errored: !1
2456
2458
  };
2457
- promise.then(
2458
- function () {
2459
- var resolvedValue = requireModule(serverReference);
2460
- if (metaData.bound) {
2461
- var promiseValue = metaData.bound.value;
2462
- promiseValue = Array.isArray(promiseValue) ? promiseValue.slice(0) : [];
2463
- promiseValue.unshift(null);
2464
- resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue);
2465
- }
2466
- parentObject[key] = resolvedValue;
2467
- "" === key && null === handler.value && (handler.value = resolvedValue);
2468
- handler.deps--;
2469
- 0 === handler.deps &&
2470
- ((resolvedValue = handler.chunk),
2471
- null !== resolvedValue &&
2472
- "blocked" === resolvedValue.status &&
2473
- ((promiseValue = resolvedValue.value),
2474
- (resolvedValue.status = "fulfilled"),
2475
- (resolvedValue.value = handler.value),
2476
- (resolvedValue.reason = null),
2477
- null !== promiseValue &&
2478
- wakeChunk(response, promiseValue, handler.value)));
2479
- },
2480
- function (error) {
2481
- if (!handler.errored) {
2482
- handler.errored = !0;
2483
- handler.value = null;
2484
- handler.reason = error;
2485
- var chunk = handler.chunk;
2486
- null !== chunk &&
2487
- "blocked" === chunk.status &&
2488
- triggerErrorOnChunk(response, chunk, error);
2459
+ id.then(function () {
2460
+ var resolvedValue = requireModule(serverReference);
2461
+ if (metaData.bound) {
2462
+ var promiseValue = metaData.bound.value;
2463
+ promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : [];
2464
+ if (1e3 < promiseValue.length) {
2465
+ reject(
2466
+ Error(
2467
+ "Server Function has too many bound arguments. Received " +
2468
+ promiseValue.length +
2469
+ " but the limit is 1000."
2470
+ )
2471
+ );
2472
+ return;
2489
2473
  }
2474
+ promiseValue.unshift(null);
2475
+ resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue);
2490
2476
  }
2491
- );
2477
+ promiseValue = blockedPromise.value;
2478
+ var initializedPromise = blockedPromise;
2479
+ initializedPromise.status = "fulfilled";
2480
+ initializedPromise.value = resolvedValue;
2481
+ initializedPromise.reason = null;
2482
+ null !== promiseValue &&
2483
+ wakeChunk(response, promiseValue, resolvedValue, initializedPromise);
2484
+ resolveReference(response, handler, parentObject, key, resolvedValue);
2485
+ }, reject);
2492
2486
  return null;
2493
2487
  }
2494
- function reviveModel(response, parentObj, parentKey, value, reference) {
2488
+ function reviveModel(
2489
+ response,
2490
+ parentObj,
2491
+ parentKey,
2492
+ value,
2493
+ reference,
2494
+ arrayRoot
2495
+ ) {
2495
2496
  if ("string" === typeof value)
2496
- return parseModelString(response, parentObj, parentKey, value, reference);
2497
+ return parseModelString(
2498
+ response,
2499
+ parentObj,
2500
+ parentKey,
2501
+ value,
2502
+ reference,
2503
+ arrayRoot
2504
+ );
2497
2505
  if ("object" === typeof value && null !== value)
2498
2506
  if (
2499
2507
  (void 0 !== reference &&
2500
2508
  void 0 !== response._temporaryReferences &&
2501
2509
  response._temporaryReferences.set(value, reference),
2502
- Array.isArray(value))
2503
- )
2504
- for (var i = 0; i < value.length; i++)
2505
- value[i] = reviveModel(
2510
+ isArrayImpl(value))
2511
+ ) {
2512
+ if (null === arrayRoot) {
2513
+ var childContext = { count: 0, fork: !1 };
2514
+ response._rootArrayContexts.set(value, childContext);
2515
+ } else childContext = arrayRoot;
2516
+ 1 < value.length && (childContext.fork = !0);
2517
+ bumpArrayCount(childContext, value.length + 1, response);
2518
+ for (parentObj = 0; parentObj < value.length; parentObj++)
2519
+ value[parentObj] = reviveModel(
2506
2520
  response,
2507
2521
  value,
2508
- "" + i,
2509
- value[i],
2510
- void 0 !== reference ? reference + ":" + i : void 0
2522
+ "" + parentObj,
2523
+ value[parentObj],
2524
+ void 0 !== reference ? reference + ":" + parentObj : void 0,
2525
+ childContext
2511
2526
  );
2512
- else
2513
- for (i in value)
2514
- hasOwnProperty.call(value, i) &&
2515
- ((parentObj =
2516
- void 0 !== reference && -1 === i.indexOf(":")
2517
- ? reference + ":" + i
2518
- : void 0),
2519
- (parentObj = reviveModel(response, value, i, value[i], parentObj)),
2520
- void 0 !== parentObj || "__proto__" === i
2521
- ? (value[i] = parentObj)
2522
- : delete value[i]);
2527
+ } else
2528
+ for (childContext in value)
2529
+ hasOwnProperty.call(value, childContext) &&
2530
+ ("__proto__" === childContext
2531
+ ? delete value[childContext]
2532
+ : ((parentObj =
2533
+ void 0 !== reference && -1 === childContext.indexOf(":")
2534
+ ? reference + ":" + childContext
2535
+ : void 0),
2536
+ (parentObj = reviveModel(
2537
+ response,
2538
+ value,
2539
+ childContext,
2540
+ value[childContext],
2541
+ parentObj,
2542
+ null
2543
+ )),
2544
+ void 0 !== parentObj
2545
+ ? (value[childContext] = parentObj)
2546
+ : delete value[childContext]));
2523
2547
  return value;
2524
2548
  }
2549
+ function bumpArrayCount(arrayContext, slots, response) {
2550
+ if (
2551
+ (arrayContext.count += slots) > response._arraySizeLimit &&
2552
+ arrayContext.fork
2553
+ )
2554
+ throw Error(
2555
+ "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects."
2556
+ );
2557
+ }
2525
2558
  var initializingHandler = null;
2526
2559
  function initializeModelChunk(chunk) {
2527
2560
  var prevHandler = initializingHandler;
@@ -2535,13 +2568,15 @@ function initializeModelChunk(chunk) {
2535
2568
  chunk.value = null;
2536
2569
  chunk.reason = null;
2537
2570
  try {
2538
- var rawModel = JSON.parse(resolvedModel),
2539
- value = reviveModel(
2571
+ var rawModel = JSON.parse(resolvedModel);
2572
+ resolvedModel = { count: 0, fork: !1 };
2573
+ var value = reviveModel(
2540
2574
  response,
2541
2575
  { "": rawModel },
2542
2576
  "",
2543
2577
  rawModel,
2544
- _chunk$reason
2578
+ _chunk$reason,
2579
+ resolvedModel
2545
2580
  ),
2546
2581
  resolveListeners = chunk.value;
2547
2582
  if (null !== resolveListeners)
@@ -2553,19 +2588,20 @@ function initializeModelChunk(chunk) {
2553
2588
  var listener = resolveListeners[rawModel];
2554
2589
  "function" === typeof listener
2555
2590
  ? listener(value)
2556
- : fulfillReference(response, listener, value);
2591
+ : fulfillReference(response, listener, value, resolvedModel);
2557
2592
  }
2558
2593
  if (null !== initializingHandler) {
2559
2594
  if (initializingHandler.errored) throw initializingHandler.reason;
2560
2595
  if (0 < initializingHandler.deps) {
2561
2596
  initializingHandler.value = value;
2597
+ initializingHandler.reason = resolvedModel;
2562
2598
  initializingHandler.chunk = chunk;
2563
2599
  return;
2564
2600
  }
2565
2601
  }
2566
2602
  chunk.status = "fulfilled";
2567
2603
  chunk.value = value;
2568
- chunk.reason = null;
2604
+ chunk.reason = resolvedModel;
2569
2605
  } catch (error) {
2570
2606
  (chunk.status = "rejected"), (chunk.reason = error);
2571
2607
  } finally {
@@ -2580,7 +2616,8 @@ function reportGlobalError(response, error) {
2580
2616
  ? triggerErrorOnChunk(response, chunk, error)
2581
2617
  : "fulfilled" === chunk.status &&
2582
2618
  null !== chunk.reason &&
2583
- chunk.reason.error(error);
2619
+ ((chunk = chunk.reason),
2620
+ "function" === typeof chunk.error && chunk.error(error));
2584
2621
  });
2585
2622
  }
2586
2623
  function getChunk(response, id) {
@@ -2597,40 +2634,67 @@ function getChunk(response, id) {
2597
2634
  chunks.set(id, chunk));
2598
2635
  return chunk;
2599
2636
  }
2600
- function fulfillReference(response, reference, value) {
2637
+ function fulfillReference(response, reference, value, arrayRoot) {
2601
2638
  var handler = reference.handler,
2602
2639
  parentObject = reference.parentObject,
2603
2640
  key = reference.key,
2604
2641
  map = reference.map,
2605
2642
  path = reference.path;
2606
2643
  try {
2607
- for (var i = 1; i < path.length; i++) {
2644
+ for (
2645
+ var localLength = 0,
2646
+ rootArrayContexts = response._rootArrayContexts,
2647
+ i = 1;
2648
+ i < path.length;
2649
+ i++
2650
+ ) {
2608
2651
  var name = path[i];
2609
2652
  if (
2610
2653
  "object" !== typeof value ||
2611
- !hasOwnProperty.call(value, name) ||
2612
- value instanceof Promise
2654
+ null === value ||
2655
+ (getPrototypeOf(value) !== ObjectPrototype &&
2656
+ getPrototypeOf(value) !== ArrayPrototype) ||
2657
+ !hasOwnProperty.call(value, name)
2613
2658
  )
2614
2659
  throw Error("Invalid reference.");
2615
2660
  value = value[name];
2661
+ if (isArrayImpl(value))
2662
+ (localLength = 0),
2663
+ (arrayRoot = rootArrayContexts.get(value) || arrayRoot);
2664
+ else if (((arrayRoot = null), "string" === typeof value))
2665
+ localLength = value.length;
2666
+ else if ("bigint" === typeof value) {
2667
+ var n = Math.abs(Number(value));
2668
+ localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1;
2669
+ } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0;
2616
2670
  }
2617
- var mappedValue = map(response, value, parentObject, key);
2618
- parentObject[key] = mappedValue;
2619
- "" === key && null === handler.value && (handler.value = mappedValue);
2671
+ var resolvedValue = map(response, value, parentObject, key);
2672
+ var referenceArrayRoot = reference.arrayRoot;
2673
+ null !== referenceArrayRoot &&
2674
+ (null !== arrayRoot
2675
+ ? (arrayRoot.fork && (referenceArrayRoot.fork = !0),
2676
+ bumpArrayCount(referenceArrayRoot, arrayRoot.count, response))
2677
+ : 0 < localLength &&
2678
+ bumpArrayCount(referenceArrayRoot, localLength, response));
2620
2679
  } catch (error) {
2621
- rejectReference(response, reference.handler, error);
2680
+ rejectReference(response, handler, error);
2622
2681
  return;
2623
2682
  }
2683
+ resolveReference(response, handler, parentObject, key, resolvedValue);
2684
+ }
2685
+ function resolveReference(response, handler, parentObject, key, resolvedValue) {
2686
+ "__proto__" !== key && (parentObject[key] = resolvedValue);
2687
+ "" === key && null === handler.value && (handler.value = resolvedValue);
2624
2688
  handler.deps--;
2625
2689
  0 === handler.deps &&
2626
- ((reference = handler.chunk),
2627
- null !== reference &&
2628
- "blocked" === reference.status &&
2629
- ((value = reference.value),
2630
- (reference.status = "fulfilled"),
2631
- (reference.value = handler.value),
2632
- (reference.reason = handler.reason),
2633
- null !== value && wakeChunk(response, value, handler.value)));
2690
+ ((parentObject = handler.chunk),
2691
+ null !== parentObject &&
2692
+ "blocked" === parentObject.status &&
2693
+ ((key = parentObject.value),
2694
+ (parentObject.status = "fulfilled"),
2695
+ (parentObject.value = handler.value),
2696
+ (parentObject.reason = handler.reason),
2697
+ null !== key && wakeChunk(response, key, handler.value, parentObject)));
2634
2698
  }
2635
2699
  function rejectReference(response, handler, error) {
2636
2700
  handler.errored ||
@@ -2642,60 +2706,97 @@ function rejectReference(response, handler, error) {
2642
2706
  "blocked" === handler.status &&
2643
2707
  triggerErrorOnChunk(response, handler, error));
2644
2708
  }
2645
- function getOutlinedModel(response, reference, parentObject, key, map) {
2709
+ function getOutlinedModel(
2710
+ response,
2711
+ reference,
2712
+ parentObject,
2713
+ key,
2714
+ referenceArrayRoot,
2715
+ map
2716
+ ) {
2646
2717
  reference = reference.split(":");
2647
- var id = parseInt(reference[0], 16);
2648
- id = getChunk(response, id);
2649
- switch (id.status) {
2718
+ var id = parseInt(reference[0], 16),
2719
+ chunk = getChunk(response, id);
2720
+ switch (chunk.status) {
2650
2721
  case "resolved_model":
2651
- initializeModelChunk(id);
2722
+ initializeModelChunk(chunk);
2652
2723
  }
2653
- switch (id.status) {
2724
+ switch (chunk.status) {
2654
2725
  case "fulfilled":
2655
- id = id.value;
2656
- for (var i = 1; i < reference.length; i++) {
2657
- var name = reference[i];
2726
+ id = chunk.value;
2727
+ chunk = chunk.reason;
2728
+ for (
2729
+ var localLength = 0,
2730
+ rootArrayContexts = response._rootArrayContexts,
2731
+ i = 1;
2732
+ i < reference.length;
2733
+ i++
2734
+ ) {
2735
+ localLength = reference[i];
2658
2736
  if (
2659
2737
  "object" !== typeof id ||
2660
- !hasOwnProperty.call(id, name) ||
2661
- id instanceof Promise
2738
+ null === id ||
2739
+ (getPrototypeOf(id) !== ObjectPrototype &&
2740
+ getPrototypeOf(id) !== ArrayPrototype) ||
2741
+ !hasOwnProperty.call(id, localLength)
2662
2742
  )
2663
2743
  throw Error("Invalid reference.");
2664
- id = id[name];
2744
+ id = id[localLength];
2745
+ isArrayImpl(id)
2746
+ ? ((localLength = 0), (chunk = rootArrayContexts.get(id) || chunk))
2747
+ : ((chunk = null),
2748
+ "string" === typeof id
2749
+ ? (localLength = id.length)
2750
+ : "bigint" === typeof id
2751
+ ? ((localLength = Math.abs(Number(id))),
2752
+ (localLength =
2753
+ 0 === localLength
2754
+ ? 1
2755
+ : Math.floor(Math.log10(localLength)) + 1))
2756
+ : (localLength = ArrayBuffer.isView(id) ? id.byteLength : 0));
2665
2757
  }
2666
- return map(response, id, parentObject, key);
2667
- case "pending":
2758
+ parentObject = map(response, id, parentObject, key);
2759
+ null !== referenceArrayRoot &&
2760
+ (null !== chunk
2761
+ ? (chunk.fork && (referenceArrayRoot.fork = !0),
2762
+ bumpArrayCount(referenceArrayRoot, chunk.count, response))
2763
+ : 0 < localLength &&
2764
+ bumpArrayCount(referenceArrayRoot, localLength, response));
2765
+ return parentObject;
2668
2766
  case "blocked":
2669
2767
  return (
2670
2768
  initializingHandler
2671
2769
  ? ((response = initializingHandler), response.deps++)
2672
2770
  : (response = initializingHandler =
2673
2771
  { chunk: null, value: null, reason: null, deps: 1, errored: !1 }),
2674
- (parentObject = {
2772
+ (referenceArrayRoot = {
2675
2773
  handler: response,
2676
2774
  parentObject: parentObject,
2677
2775
  key: key,
2678
2776
  map: map,
2679
- path: reference
2777
+ path: reference,
2778
+ arrayRoot: referenceArrayRoot
2680
2779
  }),
2681
- null === id.value
2682
- ? (id.value = [parentObject])
2683
- : id.value.push(parentObject),
2684
- null === id.reason
2685
- ? (id.reason = [parentObject])
2686
- : id.reason.push(parentObject),
2780
+ null === chunk.value
2781
+ ? (chunk.value = [referenceArrayRoot])
2782
+ : chunk.value.push(referenceArrayRoot),
2783
+ null === chunk.reason
2784
+ ? (chunk.reason = [referenceArrayRoot])
2785
+ : chunk.reason.push(referenceArrayRoot),
2687
2786
  null
2688
2787
  );
2788
+ case "pending":
2789
+ throw Error("Invalid forward reference.");
2689
2790
  default:
2690
2791
  return (
2691
2792
  initializingHandler
2692
2793
  ? ((initializingHandler.errored = !0),
2693
2794
  (initializingHandler.value = null),
2694
- (initializingHandler.reason = id.reason))
2795
+ (initializingHandler.reason = chunk.reason))
2695
2796
  : (initializingHandler = {
2696
2797
  chunk: null,
2697
2798
  value: null,
2698
- reason: id.reason,
2799
+ reason: chunk.reason,
2699
2800
  deps: 0,
2700
2801
  errored: !0
2701
2802
  }),
@@ -2704,13 +2805,25 @@ function getOutlinedModel(response, reference, parentObject, key, map) {
2704
2805
  }
2705
2806
  }
2706
2807
  function createMap(response, model) {
2707
- return new Map(model);
2808
+ if (!isArrayImpl(model)) throw Error("Invalid Map initializer.");
2809
+ if (!0 === model.$$consumed) throw Error("Already initialized Map.");
2810
+ response = new Map(model);
2811
+ model.$$consumed = !0;
2812
+ return response;
2708
2813
  }
2709
2814
  function createSet(response, model) {
2710
- return new Set(model);
2815
+ if (!isArrayImpl(model)) throw Error("Invalid Set initializer.");
2816
+ if (!0 === model.$$consumed) throw Error("Already initialized Set.");
2817
+ response = new Set(model);
2818
+ model.$$consumed = !0;
2819
+ return response;
2711
2820
  }
2712
2821
  function extractIterator(response, model) {
2713
- return model[Symbol.iterator]();
2822
+ if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer.");
2823
+ if (!0 === model.$$consumed) throw Error("Already initialized Iterator.");
2824
+ response = model[Symbol.iterator]();
2825
+ model.$$consumed = !0;
2826
+ return response;
2714
2827
  }
2715
2828
  function createModel(response, model, parentObject, key) {
2716
2829
  return "then" === key && "function" === typeof model ? null : model;
@@ -2721,13 +2834,34 @@ function parseTypedArray(
2721
2834
  constructor,
2722
2835
  bytesPerElement,
2723
2836
  parentObject,
2724
- parentKey
2837
+ parentKey,
2838
+ referenceArrayRoot
2725
2839
  ) {
2840
+ function reject(error) {
2841
+ if (!handler.errored) {
2842
+ handler.errored = !0;
2843
+ handler.value = null;
2844
+ handler.reason = error;
2845
+ var chunk = handler.chunk;
2846
+ null !== chunk &&
2847
+ "blocked" === chunk.status &&
2848
+ triggerErrorOnChunk(response, chunk, error);
2849
+ }
2850
+ }
2726
2851
  reference = parseInt(reference.slice(2), 16);
2727
- bytesPerElement = response._prefix + reference;
2728
- if (response._chunks.has(reference))
2852
+ var key = response._prefix + reference;
2853
+ bytesPerElement = response._chunks;
2854
+ if (bytesPerElement.has(reference))
2729
2855
  throw Error("Already initialized typed array.");
2730
- reference = response._formData.get(bytesPerElement).arrayBuffer();
2856
+ bytesPerElement.set(
2857
+ reference,
2858
+ new ReactPromise(
2859
+ "rejected",
2860
+ null,
2861
+ Error("Already initialized typed array.")
2862
+ )
2863
+ );
2864
+ reference = response._formData.get(key).arrayBuffer();
2731
2865
  if (initializingHandler) {
2732
2866
  var handler = initializingHandler;
2733
2867
  handler.deps++;
@@ -2739,37 +2873,32 @@ function parseTypedArray(
2739
2873
  deps: 1,
2740
2874
  errored: !1
2741
2875
  };
2742
- reference.then(
2743
- function (buffer) {
2744
- buffer = constructor === ArrayBuffer ? buffer : new constructor(buffer);
2745
- parentObject[parentKey] = buffer;
2746
- "" === parentKey && null === handler.value && (handler.value = buffer);
2747
- handler.deps--;
2748
- if (
2749
- 0 === handler.deps &&
2750
- ((buffer = handler.chunk),
2751
- null !== buffer && "blocked" === buffer.status)
2752
- ) {
2753
- var resolveListeners = buffer.value;
2754
- buffer.status = "fulfilled";
2755
- buffer.value = handler.value;
2756
- buffer.reason = null;
2757
- null !== resolveListeners &&
2758
- wakeChunk(response, resolveListeners, handler.value);
2759
- }
2760
- },
2761
- function (error) {
2762
- if (!handler.errored) {
2763
- handler.errored = !0;
2764
- handler.value = null;
2765
- handler.reason = error;
2766
- var chunk = handler.chunk;
2767
- null !== chunk &&
2768
- "blocked" === chunk.status &&
2769
- triggerErrorOnChunk(response, chunk, error);
2770
- }
2876
+ reference.then(function (buffer) {
2877
+ try {
2878
+ null !== referenceArrayRoot &&
2879
+ bumpArrayCount(referenceArrayRoot, buffer.byteLength, response);
2880
+ var resolvedValue =
2881
+ constructor === ArrayBuffer ? buffer : new constructor(buffer);
2882
+ "__proto__" !== key && (parentObject[parentKey] = resolvedValue);
2883
+ "" === parentKey &&
2884
+ null === handler.value &&
2885
+ (handler.value = resolvedValue);
2886
+ } catch (x) {
2887
+ reject(x);
2888
+ return;
2771
2889
  }
2772
- );
2890
+ handler.deps--;
2891
+ 0 === handler.deps &&
2892
+ ((buffer = handler.chunk),
2893
+ null !== buffer &&
2894
+ "blocked" === buffer.status &&
2895
+ ((resolvedValue = buffer.value),
2896
+ (buffer.status = "fulfilled"),
2897
+ (buffer.value = handler.value),
2898
+ (buffer.reason = null),
2899
+ null !== resolvedValue &&
2900
+ wakeChunk(response, resolvedValue, handler.value, buffer)));
2901
+ }, reject);
2773
2902
  return null;
2774
2903
  }
2775
2904
  function resolveStream(response, id, stream, controller) {
@@ -2785,86 +2914,78 @@ function resolveStream(response, id, stream, controller) {
2785
2914
  : controller.enqueueModel(chunks));
2786
2915
  }
2787
2916
  function parseReadableStream(response, reference, type) {
2917
+ function enqueue(value) {
2918
+ "bytes" !== type || ArrayBuffer.isView(value)
2919
+ ? controller.enqueue(value)
2920
+ : flightController.error(Error("Invalid data for bytes stream."));
2921
+ }
2788
2922
  reference = parseInt(reference.slice(2), 16);
2789
2923
  if (response._chunks.has(reference))
2790
2924
  throw Error("Already initialized stream.");
2791
2925
  var controller = null,
2792
- closed = !1;
2793
- type = new ReadableStream({
2794
- type: type,
2795
- start: function (c) {
2796
- controller = c;
2797
- }
2798
- });
2799
- var previousBlockedChunk = null;
2800
- resolveStream(response, reference, type, {
2801
- enqueueModel: function (json) {
2802
- if (null === previousBlockedChunk) {
2803
- var chunk = createResolvedModelChunk(response, json, -1);
2804
- initializeModelChunk(chunk);
2805
- "fulfilled" === chunk.status
2806
- ? controller.enqueue(chunk.value)
2807
- : (chunk.then(
2808
- function (v) {
2809
- return controller.enqueue(v);
2810
- },
2811
- function (e) {
2812
- return controller.error(e);
2813
- }
2814
- ),
2815
- (previousBlockedChunk = chunk));
2816
- } else {
2817
- chunk = previousBlockedChunk;
2818
- var chunk$30 = new ReactPromise("pending", null, null);
2819
- chunk$30.then(
2820
- function (v) {
2821
- return controller.enqueue(v);
2822
- },
2823
- function (e) {
2824
- return controller.error(e);
2825
- }
2826
- );
2827
- previousBlockedChunk = chunk$30;
2828
- chunk.then(function () {
2829
- previousBlockedChunk === chunk$30 && (previousBlockedChunk = null);
2830
- resolveModelChunk(response, chunk$30, json, -1);
2831
- });
2926
+ closed = !1,
2927
+ stream = new ReadableStream({
2928
+ type: type,
2929
+ start: function (c) {
2930
+ controller = c;
2832
2931
  }
2833
- },
2834
- close: function () {
2835
- if (!closed)
2836
- if (((closed = !0), null === previousBlockedChunk)) controller.close();
2837
- else {
2838
- var blockedChunk = previousBlockedChunk;
2839
- previousBlockedChunk = null;
2840
- blockedChunk.then(function () {
2841
- return controller.close();
2842
- });
2843
- }
2844
- },
2845
- error: function (error) {
2846
- if (!closed)
2847
- if (((closed = !0), null === previousBlockedChunk))
2848
- controller.error(error);
2849
- else {
2850
- var blockedChunk = previousBlockedChunk;
2851
- previousBlockedChunk = null;
2852
- blockedChunk.then(function () {
2853
- return controller.error(error);
2932
+ }),
2933
+ previousBlockedChunk = null,
2934
+ flightController = {
2935
+ enqueueModel: function (json) {
2936
+ if (null === previousBlockedChunk) {
2937
+ var chunk = createResolvedModelChunk(response, json, -1);
2938
+ initializeModelChunk(chunk);
2939
+ "fulfilled" === chunk.status
2940
+ ? enqueue(chunk.value)
2941
+ : (chunk.then(enqueue, flightController.error),
2942
+ (previousBlockedChunk = chunk));
2943
+ } else {
2944
+ chunk = previousBlockedChunk;
2945
+ var chunk$31 = new ReactPromise("pending", null, null);
2946
+ chunk$31.then(enqueue, flightController.error);
2947
+ previousBlockedChunk = chunk$31;
2948
+ chunk.then(function () {
2949
+ previousBlockedChunk === chunk$31 && (previousBlockedChunk = null);
2950
+ resolveModelChunk(response, chunk$31, json, -1);
2854
2951
  });
2855
2952
  }
2856
- }
2857
- });
2858
- return type;
2859
- }
2860
- function asyncIterator() {
2861
- return this;
2953
+ },
2954
+ close: function () {
2955
+ if (!closed)
2956
+ if (((closed = !0), null === previousBlockedChunk))
2957
+ controller.close();
2958
+ else {
2959
+ var blockedChunk = previousBlockedChunk;
2960
+ previousBlockedChunk = null;
2961
+ blockedChunk.then(function () {
2962
+ return controller.close();
2963
+ });
2964
+ }
2965
+ },
2966
+ error: function (error) {
2967
+ if (!closed)
2968
+ if (((closed = !0), null === previousBlockedChunk))
2969
+ controller.error(error);
2970
+ else {
2971
+ var blockedChunk = previousBlockedChunk;
2972
+ previousBlockedChunk = null;
2973
+ blockedChunk.then(function () {
2974
+ return controller.error(error);
2975
+ });
2976
+ }
2977
+ }
2978
+ };
2979
+ resolveStream(response, reference, stream, flightController);
2980
+ return stream;
2862
2981
  }
2863
- function createIterator(next) {
2864
- next = { next: next };
2865
- next[ASYNC_ITERATOR] = asyncIterator;
2866
- return next;
2982
+ function FlightIterator(next) {
2983
+ this.next = next;
2867
2984
  }
2985
+ FlightIterator.prototype = {};
2986
+ FlightIterator.prototype[ASYNC_ITERATOR] = function () {
2987
+ return this;
2988
+ };
2868
2989
  function parseAsyncIterable(response, reference, iterator) {
2869
2990
  reference = parseInt(reference.slice(2), 16);
2870
2991
  if (response._chunks.has(reference))
@@ -2876,7 +2997,7 @@ function parseAsyncIterable(response, reference, iterator) {
2876
2997
  $jscomp$compprop5 =
2877
2998
  (($jscomp$compprop5[ASYNC_ITERATOR] = function () {
2878
2999
  var nextReadIndex = 0;
2879
- return createIterator(function (arg) {
3000
+ return new FlightIterator(function (arg) {
2880
3001
  if (void 0 !== arg)
2881
3002
  throw Error(
2882
3003
  "Values cannot be passed to next() of AsyncIterables passed to Client Components."
@@ -2956,17 +3077,28 @@ function parseAsyncIterable(response, reference, iterator) {
2956
3077
  });
2957
3078
  return iterator;
2958
3079
  }
2959
- function parseModelString(response, obj, key, value, reference) {
3080
+ function parseModelString(response, obj, key, value, reference, arrayRoot) {
2960
3081
  if ("$" === value[0]) {
2961
3082
  switch (value[1]) {
2962
3083
  case "$":
2963
- return value.slice(1);
3084
+ return (
3085
+ null !== arrayRoot &&
3086
+ bumpArrayCount(arrayRoot, value.length - 1, response),
3087
+ value.slice(1)
3088
+ );
2964
3089
  case "@":
2965
3090
  return (obj = parseInt(value.slice(2), 16)), getChunk(response, obj);
2966
3091
  case "h":
2967
3092
  return (
2968
- (value = value.slice(2)),
2969
- getOutlinedModel(response, value, obj, key, loadServerReference$1)
3093
+ (arrayRoot = value.slice(2)),
3094
+ getOutlinedModel(
3095
+ response,
3096
+ arrayRoot,
3097
+ obj,
3098
+ key,
3099
+ null,
3100
+ loadServerReference$1
3101
+ )
2970
3102
  );
2971
3103
  case "T":
2972
3104
  if (void 0 === reference || void 0 === response._temporaryReferences)
@@ -2979,27 +3111,37 @@ function parseModelString(response, obj, key, value, reference) {
2979
3111
  );
2980
3112
  case "Q":
2981
3113
  return (
2982
- (value = value.slice(2)),
2983
- getOutlinedModel(response, value, obj, key, createMap)
3114
+ (arrayRoot = value.slice(2)),
3115
+ getOutlinedModel(response, arrayRoot, obj, key, null, createMap)
2984
3116
  );
2985
3117
  case "W":
2986
3118
  return (
2987
- (value = value.slice(2)),
2988
- getOutlinedModel(response, value, obj, key, createSet)
3119
+ (arrayRoot = value.slice(2)),
3120
+ getOutlinedModel(response, arrayRoot, obj, key, null, createSet)
2989
3121
  );
2990
3122
  case "K":
2991
3123
  obj = value.slice(2);
2992
- var formPrefix = response._prefix + obj + "_",
2993
- data = new FormData();
2994
- response._formData.forEach(function (entry, entryKey) {
2995
- entryKey.startsWith(formPrefix) &&
2996
- data.append(entryKey.slice(formPrefix.length), entry);
2997
- });
2998
- return data;
3124
+ obj = response._prefix + obj + "_";
3125
+ key = new FormData();
3126
+ response = response._formData;
3127
+ arrayRoot = Array.from(response.keys());
3128
+ for (value = 0; value < arrayRoot.length; value++)
3129
+ if (((reference = arrayRoot[value]), reference.startsWith(obj))) {
3130
+ for (
3131
+ var entries = response.getAll(reference),
3132
+ newKey = reference.slice(obj.length),
3133
+ j = 0;
3134
+ j < entries.length;
3135
+ j++
3136
+ )
3137
+ key.append(newKey, entries[j]);
3138
+ response.delete(reference);
3139
+ }
3140
+ return key;
2999
3141
  case "i":
3000
3142
  return (
3001
- (value = value.slice(2)),
3002
- getOutlinedModel(response, value, obj, key, extractIterator)
3143
+ (arrayRoot = value.slice(2)),
3144
+ getOutlinedModel(response, arrayRoot, obj, key, null, extractIterator)
3003
3145
  );
3004
3146
  case "I":
3005
3147
  return Infinity;
@@ -3012,42 +3154,150 @@ function parseModelString(response, obj, key, value, reference) {
3012
3154
  case "D":
3013
3155
  return new Date(Date.parse(value.slice(2)));
3014
3156
  case "n":
3015
- return BigInt(value.slice(2));
3016
- }
3017
- switch (value[1]) {
3157
+ obj = value.slice(2);
3158
+ if (300 < obj.length)
3159
+ throw Error(
3160
+ "BigInt is too large. Received " +
3161
+ obj.length +
3162
+ " digits but the limit is 300."
3163
+ );
3164
+ null !== arrayRoot && bumpArrayCount(arrayRoot, obj.length, response);
3165
+ return BigInt(obj);
3018
3166
  case "A":
3019
- return parseTypedArray(response, value, ArrayBuffer, 1, obj, key);
3167
+ return parseTypedArray(
3168
+ response,
3169
+ value,
3170
+ ArrayBuffer,
3171
+ 1,
3172
+ obj,
3173
+ key,
3174
+ arrayRoot
3175
+ );
3020
3176
  case "O":
3021
- return parseTypedArray(response, value, Int8Array, 1, obj, key);
3177
+ return parseTypedArray(
3178
+ response,
3179
+ value,
3180
+ Int8Array,
3181
+ 1,
3182
+ obj,
3183
+ key,
3184
+ arrayRoot
3185
+ );
3022
3186
  case "o":
3023
- return parseTypedArray(response, value, Uint8Array, 1, obj, key);
3187
+ return parseTypedArray(
3188
+ response,
3189
+ value,
3190
+ Uint8Array,
3191
+ 1,
3192
+ obj,
3193
+ key,
3194
+ arrayRoot
3195
+ );
3024
3196
  case "U":
3025
- return parseTypedArray(response, value, Uint8ClampedArray, 1, obj, key);
3197
+ return parseTypedArray(
3198
+ response,
3199
+ value,
3200
+ Uint8ClampedArray,
3201
+ 1,
3202
+ obj,
3203
+ key,
3204
+ arrayRoot
3205
+ );
3026
3206
  case "S":
3027
- return parseTypedArray(response, value, Int16Array, 2, obj, key);
3207
+ return parseTypedArray(
3208
+ response,
3209
+ value,
3210
+ Int16Array,
3211
+ 2,
3212
+ obj,
3213
+ key,
3214
+ arrayRoot
3215
+ );
3028
3216
  case "s":
3029
- return parseTypedArray(response, value, Uint16Array, 2, obj, key);
3217
+ return parseTypedArray(
3218
+ response,
3219
+ value,
3220
+ Uint16Array,
3221
+ 2,
3222
+ obj,
3223
+ key,
3224
+ arrayRoot
3225
+ );
3030
3226
  case "L":
3031
- return parseTypedArray(response, value, Int32Array, 4, obj, key);
3227
+ return parseTypedArray(
3228
+ response,
3229
+ value,
3230
+ Int32Array,
3231
+ 4,
3232
+ obj,
3233
+ key,
3234
+ arrayRoot
3235
+ );
3032
3236
  case "l":
3033
- return parseTypedArray(response, value, Uint32Array, 4, obj, key);
3237
+ return parseTypedArray(
3238
+ response,
3239
+ value,
3240
+ Uint32Array,
3241
+ 4,
3242
+ obj,
3243
+ key,
3244
+ arrayRoot
3245
+ );
3034
3246
  case "G":
3035
- return parseTypedArray(response, value, Float32Array, 4, obj, key);
3247
+ return parseTypedArray(
3248
+ response,
3249
+ value,
3250
+ Float32Array,
3251
+ 4,
3252
+ obj,
3253
+ key,
3254
+ arrayRoot
3255
+ );
3036
3256
  case "g":
3037
- return parseTypedArray(response, value, Float64Array, 8, obj, key);
3257
+ return parseTypedArray(
3258
+ response,
3259
+ value,
3260
+ Float64Array,
3261
+ 8,
3262
+ obj,
3263
+ key,
3264
+ arrayRoot
3265
+ );
3038
3266
  case "M":
3039
- return parseTypedArray(response, value, BigInt64Array, 8, obj, key);
3267
+ return parseTypedArray(
3268
+ response,
3269
+ value,
3270
+ BigInt64Array,
3271
+ 8,
3272
+ obj,
3273
+ key,
3274
+ arrayRoot
3275
+ );
3040
3276
  case "m":
3041
- return parseTypedArray(response, value, BigUint64Array, 8, obj, key);
3277
+ return parseTypedArray(
3278
+ response,
3279
+ value,
3280
+ BigUint64Array,
3281
+ 8,
3282
+ obj,
3283
+ key,
3284
+ arrayRoot
3285
+ );
3042
3286
  case "V":
3043
- return parseTypedArray(response, value, DataView, 1, obj, key);
3287
+ return parseTypedArray(
3288
+ response,
3289
+ value,
3290
+ DataView,
3291
+ 1,
3292
+ obj,
3293
+ key,
3294
+ arrayRoot
3295
+ );
3044
3296
  case "B":
3045
3297
  return (
3046
3298
  (obj = parseInt(value.slice(2), 16)),
3047
3299
  response._formData.get(response._prefix + obj)
3048
3300
  );
3049
- }
3050
- switch (value[1]) {
3051
3301
  case "R":
3052
3302
  return parseReadableStream(response, value, void 0);
3053
3303
  case "r":
@@ -3058,8 +3308,9 @@ function parseModelString(response, obj, key, value, reference) {
3058
3308
  return parseAsyncIterable(response, value, !0);
3059
3309
  }
3060
3310
  value = value.slice(1);
3061
- return getOutlinedModel(response, value, obj, key, createModel);
3311
+ return getOutlinedModel(response, value, obj, key, arrayRoot, createModel);
3062
3312
  }
3313
+ null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response);
3063
3314
  return value;
3064
3315
  }
3065
3316
  function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) {
@@ -3067,6 +3318,8 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) {
3067
3318
  3 < arguments.length && void 0 !== arguments[3]
3068
3319
  ? arguments[3]
3069
3320
  : new FormData(),
3321
+ arraySizeLimit =
3322
+ 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6,
3070
3323
  chunks = new Map();
3071
3324
  return {
3072
3325
  _bundlerConfig: bundlerConfig,
@@ -3075,19 +3328,30 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) {
3075
3328
  _chunks: chunks,
3076
3329
  _closed: !1,
3077
3330
  _closedReason: null,
3078
- _temporaryReferences: temporaryReferences
3331
+ _temporaryReferences: temporaryReferences,
3332
+ _rootArrayContexts: new WeakMap(),
3333
+ _arraySizeLimit: arraySizeLimit
3079
3334
  };
3080
3335
  }
3081
3336
  function close(response) {
3082
3337
  reportGlobalError(response, Error("Connection closed."));
3083
3338
  }
3084
- function loadServerReference(bundlerConfig, id, bound) {
3339
+ function loadServerReference(bundlerConfig, metaData) {
3340
+ var id = metaData.id;
3341
+ if ("string" !== typeof id) return null;
3085
3342
  var serverReference = resolveServerReference(bundlerConfig, id);
3086
3343
  bundlerConfig = preloadModule(serverReference);
3087
- return bound
3088
- ? Promise.all([bound, bundlerConfig]).then(function (_ref) {
3344
+ metaData = metaData.bound;
3345
+ return metaData instanceof Promise
3346
+ ? Promise.all([metaData, bundlerConfig]).then(function (_ref) {
3089
3347
  _ref = _ref[0];
3090
3348
  var fn = requireModule(serverReference);
3349
+ if (1e3 < _ref.length)
3350
+ throw Error(
3351
+ "Server Function has too many bound arguments. Received " +
3352
+ _ref.length +
3353
+ " but the limit is 1000."
3354
+ );
3091
3355
  return fn.bind.apply(fn, [null].concat(_ref));
3092
3356
  })
3093
3357
  : bundlerConfig
@@ -3096,8 +3360,19 @@ function loadServerReference(bundlerConfig, id, bound) {
3096
3360
  })
3097
3361
  : Promise.resolve(requireModule(serverReference));
3098
3362
  }
3099
- function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) {
3100
- body = createResponse(serverManifest, formFieldPrefix, void 0, body);
3363
+ function decodeBoundActionMetaData(
3364
+ body,
3365
+ serverManifest,
3366
+ formFieldPrefix,
3367
+ arraySizeLimit
3368
+ ) {
3369
+ body = createResponse(
3370
+ serverManifest,
3371
+ formFieldPrefix,
3372
+ void 0,
3373
+ body,
3374
+ arraySizeLimit
3375
+ );
3101
3376
  close(body);
3102
3377
  body = getChunk(body, 0);
3103
3378
  body.then(function () {});
@@ -3113,16 +3388,24 @@ exports.createTemporaryReferenceSet = function () {
3113
3388
  };
3114
3389
  exports.decodeAction = function (body, serverManifest) {
3115
3390
  var formData = new FormData(),
3116
- action = null;
3391
+ action = null,
3392
+ seenActions = new Set();
3117
3393
  body.forEach(function (value, key) {
3118
3394
  key.startsWith("$ACTION_")
3119
3395
  ? key.startsWith("$ACTION_REF_")
3120
- ? ((value = "$ACTION_" + key.slice(12) + ":"),
3396
+ ? seenActions.has(key) ||
3397
+ (seenActions.add(key),
3398
+ (value = "$ACTION_" + key.slice(12) + ":"),
3121
3399
  (value = decodeBoundActionMetaData(body, serverManifest, value)),
3122
- (action = loadServerReference(serverManifest, value.id, value.bound)))
3400
+ (action = loadServerReference(serverManifest, value)))
3123
3401
  : key.startsWith("$ACTION_ID_") &&
3124
- ((value = key.slice(11)),
3125
- (action = loadServerReference(serverManifest, value, null)))
3402
+ !seenActions.has(key) &&
3403
+ (seenActions.add(key),
3404
+ (value = key.slice(11)),
3405
+ (action = loadServerReference(serverManifest, {
3406
+ id: value,
3407
+ bound: null
3408
+ })))
3126
3409
  : formData.append(key, value);
3127
3410
  });
3128
3411
  return null === action
@@ -3158,7 +3441,8 @@ exports.decodeReply = function (body, webpackMap, options) {
3158
3441
  webpackMap,
3159
3442
  "",
3160
3443
  options ? options.temporaryReferences : void 0,
3161
- body
3444
+ body,
3445
+ options ? options.arraySizeLimit : void 0
3162
3446
  );
3163
3447
  webpackMap = getChunk(body, 0);
3164
3448
  close(body);