react-server-dom-webpack 19.2.2 → 19.2.4

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.
@@ -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,15 +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;
2271
+ var inspectedValue = this.value,
2272
+ cycleProtection = 0,
2273
+ visited = new Set();
2272
2274
  inspectedValue instanceof ReactPromise;
2273
2275
 
2274
2276
  ) {
2275
- if (inspectedValue === this) {
2277
+ cycleProtection++;
2278
+ if (
2279
+ inspectedValue === this ||
2280
+ visited.has(inspectedValue) ||
2281
+ 1e3 < cycleProtection
2282
+ ) {
2276
2283
  "function" === typeof reject &&
2277
2284
  reject(Error("Cannot have cyclic thenables."));
2278
2285
  return;
2279
2286
  }
2287
+ visited.add(inspectedValue);
2280
2288
  if ("fulfilled" === inspectedValue.status)
2281
2289
  inspectedValue = inspectedValue.value;
2282
2290
  else break;
@@ -2295,12 +2303,14 @@ ReactPromise.prototype.then = function (resolve, reject) {
2295
2303
  "function" === typeof reject && reject(this.reason);
2296
2304
  }
2297
2305
  };
2298
- function wakeChunk(response, listeners, value) {
2306
+ var ObjectPrototype = Object.prototype,
2307
+ ArrayPrototype = Array.prototype;
2308
+ function wakeChunk(response, listeners, value, chunk) {
2299
2309
  for (var i = 0; i < listeners.length; i++) {
2300
2310
  var listener = listeners[i];
2301
2311
  "function" === typeof listener
2302
2312
  ? listener(value)
2303
- : fulfillReference(response, listener, value);
2313
+ : fulfillReference(response, listener, value, chunk.reason);
2304
2314
  }
2305
2315
  }
2306
2316
  function rejectChunk(response, listeners, error) {
@@ -2311,27 +2321,6 @@ function rejectChunk(response, listeners, error) {
2311
2321
  : rejectReference(response, listener.handler, error);
2312
2322
  }
2313
2323
  }
2314
- function resolveBlockedCycle(resolvedChunk, reference) {
2315
- var referencedChunk = reference.handler.chunk;
2316
- if (null === referencedChunk) return null;
2317
- if (referencedChunk === resolvedChunk) return reference.handler;
2318
- reference = referencedChunk.value;
2319
- if (null !== reference)
2320
- for (
2321
- referencedChunk = 0;
2322
- referencedChunk < reference.length;
2323
- referencedChunk++
2324
- ) {
2325
- var listener = reference[referencedChunk];
2326
- if (
2327
- "function" !== typeof listener &&
2328
- ((listener = resolveBlockedCycle(resolvedChunk, listener)),
2329
- null !== listener)
2330
- )
2331
- return listener;
2332
- }
2333
- return null;
2334
- }
2335
2324
  function triggerErrorOnChunk(response, chunk, error) {
2336
2325
  if ("pending" !== chunk.status && "blocked" !== chunk.status)
2337
2326
  chunk.reason.error(error);
@@ -2367,33 +2356,11 @@ function resolveModelChunk(response, chunk, value, id) {
2367
2356
  chunk.reason =
2368
2357
  ((value.id = id), (value[RESPONSE_SYMBOL] = response), value);
2369
2358
  if (null !== resolveListeners)
2370
- a: switch ((initializeModelChunk(chunk), chunk.status)) {
2359
+ switch ((initializeModelChunk(chunk), chunk.status)) {
2371
2360
  case "fulfilled":
2372
- wakeChunk(response, resolveListeners, chunk.value);
2361
+ wakeChunk(response, resolveListeners, chunk.value, chunk);
2373
2362
  break;
2374
2363
  case "blocked":
2375
- for (value = 0; value < resolveListeners.length; value++)
2376
- if (((id = resolveListeners[value]), "function" !== typeof id)) {
2377
- var cyclicHandler = resolveBlockedCycle(chunk, id);
2378
- if (null !== cyclicHandler)
2379
- switch (
2380
- (fulfillReference(response, id, cyclicHandler.value),
2381
- resolveListeners.splice(value, 1),
2382
- value--,
2383
- null !== rejectListeners &&
2384
- ((id = rejectListeners.indexOf(id)),
2385
- -1 !== id && rejectListeners.splice(id, 1)),
2386
- chunk.status)
2387
- ) {
2388
- case "fulfilled":
2389
- wakeChunk(response, resolveListeners, chunk.value);
2390
- break a;
2391
- case "rejected":
2392
- null !== rejectListeners &&
2393
- rejectChunk(response, rejectListeners, chunk.reason);
2394
- break a;
2395
- }
2396
- }
2397
2364
  case "pending":
2398
2365
  if (chunk.value)
2399
2366
  for (response = 0; response < resolveListeners.length; response++)
@@ -2410,7 +2377,8 @@ function resolveModelChunk(response, chunk, value, id) {
2410
2377
  } else chunk.reason = rejectListeners;
2411
2378
  break;
2412
2379
  case "rejected":
2413
- rejectListeners && wakeChunk(response, rejectListeners, chunk.reason);
2380
+ rejectListeners &&
2381
+ rejectChunk(response, rejectListeners, chunk.reason);
2414
2382
  }
2415
2383
  }
2416
2384
  }
@@ -2433,15 +2401,50 @@ function resolveIteratorResultChunk(response, chunk, value, done) {
2433
2401
  );
2434
2402
  }
2435
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
+ }
2436
2413
  var id = metaData.id;
2437
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;
2438
2434
  var serverReference = resolveServerReference(response._bundlerConfig, id);
2439
- id = metaData.bound;
2440
- var promise = preloadModule(serverReference);
2441
- if (promise)
2442
- id instanceof ReactPromise && (promise = Promise.all([promise, id]));
2443
- else if (id instanceof ReactPromise) promise = Promise.resolve(id);
2444
- 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
+ );
2445
2448
  if (initializingHandler) {
2446
2449
  var handler = initializingHandler;
2447
2450
  handler.deps++;
@@ -2453,74 +2456,105 @@ function loadServerReference$1(response, metaData, parentObject, key) {
2453
2456
  deps: 1,
2454
2457
  errored: !1
2455
2458
  };
2456
- promise.then(
2457
- function () {
2458
- var resolvedValue = requireModule(serverReference);
2459
- if (metaData.bound) {
2460
- var promiseValue = metaData.bound.value;
2461
- promiseValue = Array.isArray(promiseValue) ? promiseValue.slice(0) : [];
2462
- promiseValue.unshift(null);
2463
- resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue);
2464
- }
2465
- parentObject[key] = resolvedValue;
2466
- "" === key && null === handler.value && (handler.value = resolvedValue);
2467
- handler.deps--;
2468
- 0 === handler.deps &&
2469
- ((resolvedValue = handler.chunk),
2470
- null !== resolvedValue &&
2471
- "blocked" === resolvedValue.status &&
2472
- ((promiseValue = resolvedValue.value),
2473
- (resolvedValue.status = "fulfilled"),
2474
- (resolvedValue.value = handler.value),
2475
- (resolvedValue.reason = null),
2476
- null !== promiseValue &&
2477
- wakeChunk(response, promiseValue, handler.value)));
2478
- },
2479
- function (error) {
2480
- if (!handler.errored) {
2481
- handler.errored = !0;
2482
- handler.value = null;
2483
- handler.reason = error;
2484
- var chunk = handler.chunk;
2485
- null !== chunk &&
2486
- "blocked" === chunk.status &&
2487
- 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;
2488
2473
  }
2474
+ promiseValue.unshift(null);
2475
+ resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue);
2489
2476
  }
2490
- );
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);
2491
2486
  return null;
2492
2487
  }
2493
- function reviveModel(response, parentObj, parentKey, value, reference) {
2488
+ function reviveModel(
2489
+ response,
2490
+ parentObj,
2491
+ parentKey,
2492
+ value,
2493
+ reference,
2494
+ arrayRoot
2495
+ ) {
2494
2496
  if ("string" === typeof value)
2495
- return parseModelString(response, parentObj, parentKey, value, reference);
2497
+ return parseModelString(
2498
+ response,
2499
+ parentObj,
2500
+ parentKey,
2501
+ value,
2502
+ reference,
2503
+ arrayRoot
2504
+ );
2496
2505
  if ("object" === typeof value && null !== value)
2497
2506
  if (
2498
2507
  (void 0 !== reference &&
2499
2508
  void 0 !== response._temporaryReferences &&
2500
2509
  response._temporaryReferences.set(value, reference),
2501
- Array.isArray(value))
2502
- )
2503
- for (var i = 0; i < value.length; i++)
2504
- 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(
2505
2520
  response,
2506
2521
  value,
2507
- "" + i,
2508
- value[i],
2509
- void 0 !== reference ? reference + ":" + i : void 0
2522
+ "" + parentObj,
2523
+ value[parentObj],
2524
+ void 0 !== reference ? reference + ":" + parentObj : void 0,
2525
+ childContext
2510
2526
  );
2511
- else
2512
- for (i in value)
2513
- hasOwnProperty.call(value, i) &&
2514
- ((parentObj =
2515
- void 0 !== reference && -1 === i.indexOf(":")
2516
- ? reference + ":" + i
2517
- : void 0),
2518
- (parentObj = reviveModel(response, value, i, value[i], parentObj)),
2519
- void 0 !== parentObj || "__proto__" === i
2520
- ? (value[i] = parentObj)
2521
- : 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]));
2522
2547
  return value;
2523
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
+ }
2524
2558
  var initializingHandler = null;
2525
2559
  function initializeModelChunk(chunk) {
2526
2560
  var prevHandler = initializingHandler;
@@ -2534,13 +2568,15 @@ function initializeModelChunk(chunk) {
2534
2568
  chunk.value = null;
2535
2569
  chunk.reason = null;
2536
2570
  try {
2537
- var rawModel = JSON.parse(resolvedModel),
2538
- value = reviveModel(
2571
+ var rawModel = JSON.parse(resolvedModel);
2572
+ resolvedModel = { count: 0, fork: !1 };
2573
+ var value = reviveModel(
2539
2574
  response,
2540
2575
  { "": rawModel },
2541
2576
  "",
2542
2577
  rawModel,
2543
- _chunk$reason
2578
+ _chunk$reason,
2579
+ resolvedModel
2544
2580
  ),
2545
2581
  resolveListeners = chunk.value;
2546
2582
  if (null !== resolveListeners)
@@ -2552,19 +2588,20 @@ function initializeModelChunk(chunk) {
2552
2588
  var listener = resolveListeners[rawModel];
2553
2589
  "function" === typeof listener
2554
2590
  ? listener(value)
2555
- : fulfillReference(response, listener, value);
2591
+ : fulfillReference(response, listener, value, resolvedModel);
2556
2592
  }
2557
2593
  if (null !== initializingHandler) {
2558
2594
  if (initializingHandler.errored) throw initializingHandler.reason;
2559
2595
  if (0 < initializingHandler.deps) {
2560
2596
  initializingHandler.value = value;
2597
+ initializingHandler.reason = resolvedModel;
2561
2598
  initializingHandler.chunk = chunk;
2562
2599
  return;
2563
2600
  }
2564
2601
  }
2565
2602
  chunk.status = "fulfilled";
2566
2603
  chunk.value = value;
2567
- chunk.reason = null;
2604
+ chunk.reason = resolvedModel;
2568
2605
  } catch (error) {
2569
2606
  (chunk.status = "rejected"), (chunk.reason = error);
2570
2607
  } finally {
@@ -2579,7 +2616,8 @@ function reportGlobalError(response, error) {
2579
2616
  ? triggerErrorOnChunk(response, chunk, error)
2580
2617
  : "fulfilled" === chunk.status &&
2581
2618
  null !== chunk.reason &&
2582
- chunk.reason.error(error);
2619
+ ((chunk = chunk.reason),
2620
+ "function" === typeof chunk.error && chunk.error(error));
2583
2621
  });
2584
2622
  }
2585
2623
  function getChunk(response, id) {
@@ -2596,40 +2634,67 @@ function getChunk(response, id) {
2596
2634
  chunks.set(id, chunk));
2597
2635
  return chunk;
2598
2636
  }
2599
- function fulfillReference(response, reference, value) {
2637
+ function fulfillReference(response, reference, value, arrayRoot) {
2600
2638
  var handler = reference.handler,
2601
2639
  parentObject = reference.parentObject,
2602
2640
  key = reference.key,
2603
2641
  map = reference.map,
2604
2642
  path = reference.path;
2605
2643
  try {
2606
- 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
+ ) {
2607
2651
  var name = path[i];
2608
2652
  if (
2609
2653
  "object" !== typeof value ||
2610
- !hasOwnProperty.call(value, name) ||
2611
- value instanceof Promise
2654
+ null === value ||
2655
+ (getPrototypeOf(value) !== ObjectPrototype &&
2656
+ getPrototypeOf(value) !== ArrayPrototype) ||
2657
+ !hasOwnProperty.call(value, name)
2612
2658
  )
2613
2659
  throw Error("Invalid reference.");
2614
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;
2615
2670
  }
2616
- var mappedValue = map(response, value, parentObject, key);
2617
- parentObject[key] = mappedValue;
2618
- "" === 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));
2619
2679
  } catch (error) {
2620
- rejectReference(response, reference.handler, error);
2680
+ rejectReference(response, handler, error);
2621
2681
  return;
2622
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);
2623
2688
  handler.deps--;
2624
2689
  0 === handler.deps &&
2625
- ((reference = handler.chunk),
2626
- null !== reference &&
2627
- "blocked" === reference.status &&
2628
- ((value = reference.value),
2629
- (reference.status = "fulfilled"),
2630
- (reference.value = handler.value),
2631
- (reference.reason = handler.reason),
2632
- 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)));
2633
2698
  }
2634
2699
  function rejectReference(response, handler, error) {
2635
2700
  handler.errored ||
@@ -2641,60 +2706,97 @@ function rejectReference(response, handler, error) {
2641
2706
  "blocked" === handler.status &&
2642
2707
  triggerErrorOnChunk(response, handler, error));
2643
2708
  }
2644
- function getOutlinedModel(response, reference, parentObject, key, map) {
2709
+ function getOutlinedModel(
2710
+ response,
2711
+ reference,
2712
+ parentObject,
2713
+ key,
2714
+ referenceArrayRoot,
2715
+ map
2716
+ ) {
2645
2717
  reference = reference.split(":");
2646
- var id = parseInt(reference[0], 16);
2647
- id = getChunk(response, id);
2648
- switch (id.status) {
2718
+ var id = parseInt(reference[0], 16),
2719
+ chunk = getChunk(response, id);
2720
+ switch (chunk.status) {
2649
2721
  case "resolved_model":
2650
- initializeModelChunk(id);
2722
+ initializeModelChunk(chunk);
2651
2723
  }
2652
- switch (id.status) {
2724
+ switch (chunk.status) {
2653
2725
  case "fulfilled":
2654
- id = id.value;
2655
- for (var i = 1; i < reference.length; i++) {
2656
- 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];
2657
2736
  if (
2658
2737
  "object" !== typeof id ||
2659
- !hasOwnProperty.call(id, name) ||
2660
- id instanceof Promise
2738
+ null === id ||
2739
+ (getPrototypeOf(id) !== ObjectPrototype &&
2740
+ getPrototypeOf(id) !== ArrayPrototype) ||
2741
+ !hasOwnProperty.call(id, localLength)
2661
2742
  )
2662
2743
  throw Error("Invalid reference.");
2663
- 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));
2664
2757
  }
2665
- return map(response, id, parentObject, key);
2666
- 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;
2667
2766
  case "blocked":
2668
2767
  return (
2669
2768
  initializingHandler
2670
2769
  ? ((response = initializingHandler), response.deps++)
2671
2770
  : (response = initializingHandler =
2672
2771
  { chunk: null, value: null, reason: null, deps: 1, errored: !1 }),
2673
- (parentObject = {
2772
+ (referenceArrayRoot = {
2674
2773
  handler: response,
2675
2774
  parentObject: parentObject,
2676
2775
  key: key,
2677
2776
  map: map,
2678
- path: reference
2777
+ path: reference,
2778
+ arrayRoot: referenceArrayRoot
2679
2779
  }),
2680
- null === id.value
2681
- ? (id.value = [parentObject])
2682
- : id.value.push(parentObject),
2683
- null === id.reason
2684
- ? (id.reason = [parentObject])
2685
- : 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),
2686
2786
  null
2687
2787
  );
2788
+ case "pending":
2789
+ throw Error("Invalid forward reference.");
2688
2790
  default:
2689
2791
  return (
2690
2792
  initializingHandler
2691
2793
  ? ((initializingHandler.errored = !0),
2692
2794
  (initializingHandler.value = null),
2693
- (initializingHandler.reason = id.reason))
2795
+ (initializingHandler.reason = chunk.reason))
2694
2796
  : (initializingHandler = {
2695
2797
  chunk: null,
2696
2798
  value: null,
2697
- reason: id.reason,
2799
+ reason: chunk.reason,
2698
2800
  deps: 0,
2699
2801
  errored: !0
2700
2802
  }),
@@ -2703,13 +2805,25 @@ function getOutlinedModel(response, reference, parentObject, key, map) {
2703
2805
  }
2704
2806
  }
2705
2807
  function createMap(response, model) {
2706
- 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;
2707
2813
  }
2708
2814
  function createSet(response, model) {
2709
- 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;
2710
2820
  }
2711
2821
  function extractIterator(response, model) {
2712
- 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;
2713
2827
  }
2714
2828
  function createModel(response, model, parentObject, key) {
2715
2829
  return "then" === key && "function" === typeof model ? null : model;
@@ -2720,13 +2834,34 @@ function parseTypedArray(
2720
2834
  constructor,
2721
2835
  bytesPerElement,
2722
2836
  parentObject,
2723
- parentKey
2837
+ parentKey,
2838
+ referenceArrayRoot
2724
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
+ }
2725
2851
  reference = parseInt(reference.slice(2), 16);
2726
- bytesPerElement = response._prefix + reference;
2727
- if (response._chunks.has(reference))
2852
+ var key = response._prefix + reference;
2853
+ bytesPerElement = response._chunks;
2854
+ if (bytesPerElement.has(reference))
2728
2855
  throw Error("Already initialized typed array.");
2729
- 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();
2730
2865
  if (initializingHandler) {
2731
2866
  var handler = initializingHandler;
2732
2867
  handler.deps++;
@@ -2738,37 +2873,32 @@ function parseTypedArray(
2738
2873
  deps: 1,
2739
2874
  errored: !1
2740
2875
  };
2741
- reference.then(
2742
- function (buffer) {
2743
- buffer = constructor === ArrayBuffer ? buffer : new constructor(buffer);
2744
- parentObject[parentKey] = buffer;
2745
- "" === parentKey && null === handler.value && (handler.value = buffer);
2746
- handler.deps--;
2747
- if (
2748
- 0 === handler.deps &&
2749
- ((buffer = handler.chunk),
2750
- null !== buffer && "blocked" === buffer.status)
2751
- ) {
2752
- var resolveListeners = buffer.value;
2753
- buffer.status = "fulfilled";
2754
- buffer.value = handler.value;
2755
- buffer.reason = null;
2756
- null !== resolveListeners &&
2757
- wakeChunk(response, resolveListeners, handler.value);
2758
- }
2759
- },
2760
- function (error) {
2761
- if (!handler.errored) {
2762
- handler.errored = !0;
2763
- handler.value = null;
2764
- handler.reason = error;
2765
- var chunk = handler.chunk;
2766
- null !== chunk &&
2767
- "blocked" === chunk.status &&
2768
- triggerErrorOnChunk(response, chunk, error);
2769
- }
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;
2770
2889
  }
2771
- );
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);
2772
2902
  return null;
2773
2903
  }
2774
2904
  function resolveStream(response, id, stream, controller) {
@@ -2784,86 +2914,78 @@ function resolveStream(response, id, stream, controller) {
2784
2914
  : controller.enqueueModel(chunks));
2785
2915
  }
2786
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
+ }
2787
2922
  reference = parseInt(reference.slice(2), 16);
2788
2923
  if (response._chunks.has(reference))
2789
2924
  throw Error("Already initialized stream.");
2790
2925
  var controller = null,
2791
- closed = !1;
2792
- type = new ReadableStream({
2793
- type: type,
2794
- start: function (c) {
2795
- controller = c;
2796
- }
2797
- });
2798
- var previousBlockedChunk = null;
2799
- resolveStream(response, reference, type, {
2800
- enqueueModel: function (json) {
2801
- if (null === previousBlockedChunk) {
2802
- var chunk = createResolvedModelChunk(response, json, -1);
2803
- initializeModelChunk(chunk);
2804
- "fulfilled" === chunk.status
2805
- ? controller.enqueue(chunk.value)
2806
- : (chunk.then(
2807
- function (v) {
2808
- return controller.enqueue(v);
2809
- },
2810
- function (e) {
2811
- return controller.error(e);
2812
- }
2813
- ),
2814
- (previousBlockedChunk = chunk));
2815
- } else {
2816
- chunk = previousBlockedChunk;
2817
- var chunk$30 = new ReactPromise("pending", null, null);
2818
- chunk$30.then(
2819
- function (v) {
2820
- return controller.enqueue(v);
2821
- },
2822
- function (e) {
2823
- return controller.error(e);
2824
- }
2825
- );
2826
- previousBlockedChunk = chunk$30;
2827
- chunk.then(function () {
2828
- previousBlockedChunk === chunk$30 && (previousBlockedChunk = null);
2829
- resolveModelChunk(response, chunk$30, json, -1);
2830
- });
2926
+ closed = !1,
2927
+ stream = new ReadableStream({
2928
+ type: type,
2929
+ start: function (c) {
2930
+ controller = c;
2831
2931
  }
2832
- },
2833
- close: function () {
2834
- if (!closed)
2835
- if (((closed = !0), null === previousBlockedChunk)) controller.close();
2836
- else {
2837
- var blockedChunk = previousBlockedChunk;
2838
- previousBlockedChunk = null;
2839
- blockedChunk.then(function () {
2840
- return controller.close();
2841
- });
2842
- }
2843
- },
2844
- error: function (error) {
2845
- if (!closed)
2846
- if (((closed = !0), null === previousBlockedChunk))
2847
- controller.error(error);
2848
- else {
2849
- var blockedChunk = previousBlockedChunk;
2850
- previousBlockedChunk = null;
2851
- blockedChunk.then(function () {
2852
- 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);
2853
2951
  });
2854
2952
  }
2855
- }
2856
- });
2857
- return type;
2858
- }
2859
- function asyncIterator() {
2860
- 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;
2861
2981
  }
2862
- function createIterator(next) {
2863
- next = { next: next };
2864
- next[ASYNC_ITERATOR] = asyncIterator;
2865
- return next;
2982
+ function FlightIterator(next) {
2983
+ this.next = next;
2866
2984
  }
2985
+ FlightIterator.prototype = {};
2986
+ FlightIterator.prototype[ASYNC_ITERATOR] = function () {
2987
+ return this;
2988
+ };
2867
2989
  function parseAsyncIterable(response, reference, iterator) {
2868
2990
  reference = parseInt(reference.slice(2), 16);
2869
2991
  if (response._chunks.has(reference))
@@ -2875,7 +2997,7 @@ function parseAsyncIterable(response, reference, iterator) {
2875
2997
  $jscomp$compprop5 =
2876
2998
  (($jscomp$compprop5[ASYNC_ITERATOR] = function () {
2877
2999
  var nextReadIndex = 0;
2878
- return createIterator(function (arg) {
3000
+ return new FlightIterator(function (arg) {
2879
3001
  if (void 0 !== arg)
2880
3002
  throw Error(
2881
3003
  "Values cannot be passed to next() of AsyncIterables passed to Client Components."
@@ -2955,17 +3077,28 @@ function parseAsyncIterable(response, reference, iterator) {
2955
3077
  });
2956
3078
  return iterator;
2957
3079
  }
2958
- function parseModelString(response, obj, key, value, reference) {
3080
+ function parseModelString(response, obj, key, value, reference, arrayRoot) {
2959
3081
  if ("$" === value[0]) {
2960
3082
  switch (value[1]) {
2961
3083
  case "$":
2962
- return value.slice(1);
3084
+ return (
3085
+ null !== arrayRoot &&
3086
+ bumpArrayCount(arrayRoot, value.length - 1, response),
3087
+ value.slice(1)
3088
+ );
2963
3089
  case "@":
2964
3090
  return (obj = parseInt(value.slice(2), 16)), getChunk(response, obj);
2965
3091
  case "h":
2966
3092
  return (
2967
- (value = value.slice(2)),
2968
- 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
+ )
2969
3102
  );
2970
3103
  case "T":
2971
3104
  if (void 0 === reference || void 0 === response._temporaryReferences)
@@ -2978,27 +3111,37 @@ function parseModelString(response, obj, key, value, reference) {
2978
3111
  );
2979
3112
  case "Q":
2980
3113
  return (
2981
- (value = value.slice(2)),
2982
- getOutlinedModel(response, value, obj, key, createMap)
3114
+ (arrayRoot = value.slice(2)),
3115
+ getOutlinedModel(response, arrayRoot, obj, key, null, createMap)
2983
3116
  );
2984
3117
  case "W":
2985
3118
  return (
2986
- (value = value.slice(2)),
2987
- getOutlinedModel(response, value, obj, key, createSet)
3119
+ (arrayRoot = value.slice(2)),
3120
+ getOutlinedModel(response, arrayRoot, obj, key, null, createSet)
2988
3121
  );
2989
3122
  case "K":
2990
3123
  obj = value.slice(2);
2991
- var formPrefix = response._prefix + obj + "_",
2992
- data = new FormData();
2993
- response._formData.forEach(function (entry, entryKey) {
2994
- entryKey.startsWith(formPrefix) &&
2995
- data.append(entryKey.slice(formPrefix.length), entry);
2996
- });
2997
- 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;
2998
3141
  case "i":
2999
3142
  return (
3000
- (value = value.slice(2)),
3001
- getOutlinedModel(response, value, obj, key, extractIterator)
3143
+ (arrayRoot = value.slice(2)),
3144
+ getOutlinedModel(response, arrayRoot, obj, key, null, extractIterator)
3002
3145
  );
3003
3146
  case "I":
3004
3147
  return Infinity;
@@ -3011,42 +3154,150 @@ function parseModelString(response, obj, key, value, reference) {
3011
3154
  case "D":
3012
3155
  return new Date(Date.parse(value.slice(2)));
3013
3156
  case "n":
3014
- return BigInt(value.slice(2));
3015
- }
3016
- 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);
3017
3166
  case "A":
3018
- 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
+ );
3019
3176
  case "O":
3020
- 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
+ );
3021
3186
  case "o":
3022
- 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
+ );
3023
3196
  case "U":
3024
- 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
+ );
3025
3206
  case "S":
3026
- 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
+ );
3027
3216
  case "s":
3028
- 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
+ );
3029
3226
  case "L":
3030
- 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
+ );
3031
3236
  case "l":
3032
- 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
+ );
3033
3246
  case "G":
3034
- 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
+ );
3035
3256
  case "g":
3036
- 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
+ );
3037
3266
  case "M":
3038
- 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
+ );
3039
3276
  case "m":
3040
- 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
+ );
3041
3286
  case "V":
3042
- 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
+ );
3043
3296
  case "B":
3044
3297
  return (
3045
3298
  (obj = parseInt(value.slice(2), 16)),
3046
3299
  response._formData.get(response._prefix + obj)
3047
3300
  );
3048
- }
3049
- switch (value[1]) {
3050
3301
  case "R":
3051
3302
  return parseReadableStream(response, value, void 0);
3052
3303
  case "r":
@@ -3057,8 +3308,9 @@ function parseModelString(response, obj, key, value, reference) {
3057
3308
  return parseAsyncIterable(response, value, !0);
3058
3309
  }
3059
3310
  value = value.slice(1);
3060
- return getOutlinedModel(response, value, obj, key, createModel);
3311
+ return getOutlinedModel(response, value, obj, key, arrayRoot, createModel);
3061
3312
  }
3313
+ null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response);
3062
3314
  return value;
3063
3315
  }
3064
3316
  function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) {
@@ -3066,6 +3318,8 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) {
3066
3318
  3 < arguments.length && void 0 !== arguments[3]
3067
3319
  ? arguments[3]
3068
3320
  : new FormData(),
3321
+ arraySizeLimit =
3322
+ 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6,
3069
3323
  chunks = new Map();
3070
3324
  return {
3071
3325
  _bundlerConfig: bundlerConfig,
@@ -3074,19 +3328,30 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) {
3074
3328
  _chunks: chunks,
3075
3329
  _closed: !1,
3076
3330
  _closedReason: null,
3077
- _temporaryReferences: temporaryReferences
3331
+ _temporaryReferences: temporaryReferences,
3332
+ _rootArrayContexts: new WeakMap(),
3333
+ _arraySizeLimit: arraySizeLimit
3078
3334
  };
3079
3335
  }
3080
3336
  function close(response) {
3081
3337
  reportGlobalError(response, Error("Connection closed."));
3082
3338
  }
3083
- function loadServerReference(bundlerConfig, id, bound) {
3339
+ function loadServerReference(bundlerConfig, metaData) {
3340
+ var id = metaData.id;
3341
+ if ("string" !== typeof id) return null;
3084
3342
  var serverReference = resolveServerReference(bundlerConfig, id);
3085
3343
  bundlerConfig = preloadModule(serverReference);
3086
- return bound
3087
- ? Promise.all([bound, bundlerConfig]).then(function (_ref) {
3344
+ metaData = metaData.bound;
3345
+ return metaData instanceof Promise
3346
+ ? Promise.all([metaData, bundlerConfig]).then(function (_ref) {
3088
3347
  _ref = _ref[0];
3089
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
+ );
3090
3355
  return fn.bind.apply(fn, [null].concat(_ref));
3091
3356
  })
3092
3357
  : bundlerConfig
@@ -3095,8 +3360,19 @@ function loadServerReference(bundlerConfig, id, bound) {
3095
3360
  })
3096
3361
  : Promise.resolve(requireModule(serverReference));
3097
3362
  }
3098
- function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) {
3099
- 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
+ );
3100
3376
  close(body);
3101
3377
  body = getChunk(body, 0);
3102
3378
  body.then(function () {});
@@ -3112,16 +3388,24 @@ exports.createTemporaryReferenceSet = function () {
3112
3388
  };
3113
3389
  exports.decodeAction = function (body, serverManifest) {
3114
3390
  var formData = new FormData(),
3115
- action = null;
3391
+ action = null,
3392
+ seenActions = new Set();
3116
3393
  body.forEach(function (value, key) {
3117
3394
  key.startsWith("$ACTION_")
3118
3395
  ? key.startsWith("$ACTION_REF_")
3119
- ? ((value = "$ACTION_" + key.slice(12) + ":"),
3396
+ ? seenActions.has(key) ||
3397
+ (seenActions.add(key),
3398
+ (value = "$ACTION_" + key.slice(12) + ":"),
3120
3399
  (value = decodeBoundActionMetaData(body, serverManifest, value)),
3121
- (action = loadServerReference(serverManifest, value.id, value.bound)))
3400
+ (action = loadServerReference(serverManifest, value)))
3122
3401
  : key.startsWith("$ACTION_ID_") &&
3123
- ((value = key.slice(11)),
3124
- (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
+ })))
3125
3409
  : formData.append(key, value);
3126
3410
  });
3127
3411
  return null === action
@@ -3157,7 +3441,8 @@ exports.decodeReply = function (body, webpackMap, options) {
3157
3441
  webpackMap,
3158
3442
  "",
3159
3443
  options ? options.temporaryReferences : void 0,
3160
- body
3444
+ body,
3445
+ options ? options.arraySizeLimit : void 0
3161
3446
  );
3162
3447
  webpackMap = getChunk(body, 0);
3163
3448
  close(body);