@player-ui/player 0.8.0-next.4 → 0.8.0-next.6

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 (37) hide show
  1. package/dist/Player.native.js +240 -252
  2. package/dist/Player.native.js.map +1 -1
  3. package/dist/cjs/index.cjs +208 -268
  4. package/dist/cjs/index.cjs.map +1 -1
  5. package/dist/index.legacy-esm.js +206 -270
  6. package/dist/index.mjs +206 -270
  7. package/dist/index.mjs.map +1 -1
  8. package/package.json +4 -4
  9. package/src/plugins/default-view-plugin.ts +4 -0
  10. package/src/view/__tests__/view.immutable.test.ts +8 -1
  11. package/src/view/__tests__/view.test.ts +59 -1
  12. package/src/view/parser/__tests__/parser.test.ts +16 -1
  13. package/src/view/parser/index.ts +46 -262
  14. package/src/view/parser/utils.ts +23 -3
  15. package/src/view/plugins/__tests__/__snapshots__/asset.test.ts.snap +215 -0
  16. package/src/view/plugins/__tests__/__snapshots__/multi-node.test.ts.snap +67 -0
  17. package/src/view/plugins/__tests__/__snapshots__/template.test.ts.snap +56 -54
  18. package/src/view/plugins/__tests__/applicability.test.ts +24 -16
  19. package/src/view/plugins/__tests__/asset.test.ts +140 -0
  20. package/src/view/plugins/__tests__/multi-node.test.ts +38 -0
  21. package/src/view/plugins/__tests__/template.test.ts +48 -388
  22. package/src/view/plugins/applicability.ts +39 -23
  23. package/src/view/plugins/asset.ts +42 -0
  24. package/src/view/plugins/index.ts +3 -1
  25. package/src/view/plugins/multi-node.ts +73 -0
  26. package/src/view/plugins/switch.ts +81 -50
  27. package/src/view/plugins/{template-plugin.ts → template.ts} +38 -24
  28. package/src/view/resolver/__tests__/edgecases.test.ts +14 -1
  29. package/src/view/view.ts +2 -7
  30. package/types/view/parser/index.d.ts +6 -11
  31. package/types/view/parser/utils.d.ts +11 -2
  32. package/types/view/plugins/applicability.d.ts +1 -0
  33. package/types/view/plugins/asset.d.ts +8 -0
  34. package/types/view/plugins/index.d.ts +3 -1
  35. package/types/view/plugins/multi-node.d.ts +8 -0
  36. package/types/view/plugins/switch.d.ts +2 -1
  37. package/types/view/plugins/{template-plugin.d.ts → template.d.ts} +2 -2
@@ -32,6 +32,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
32
32
  var src_exports = {};
33
33
  __export(src_exports, {
34
34
  ApplicabilityPlugin: () => ApplicabilityPlugin,
35
+ AssetPlugin: () => AssetPlugin,
35
36
  AssetTransformCorePlugin: () => AssetTransformCorePlugin,
36
37
  BINDING_BRACKETS_REGEX: () => BINDING_BRACKETS_REGEX,
37
38
  BindingInstance: () => BindingInstance,
@@ -51,6 +52,7 @@ __export(src_exports, {
51
52
  FlowInstance: () => FlowInstance,
52
53
  LocalModel: () => LocalModel,
53
54
  LocalStateStore: () => LocalStateStore,
55
+ MultiNodePlugin: () => MultiNodePlugin,
54
56
  NOOPDataModel: () => NOOPDataModel,
55
57
  NOOP_MODEL: () => NOOP_MODEL,
56
58
  NOT_STARTED_STATE: () => NOT_STARTED_STATE,
@@ -84,7 +86,9 @@ __export(src_exports, {
84
86
  findNextExp: () => findNextExp,
85
87
  getBindingSegments: () => getBindingSegments,
86
88
  getNodeID: () => getNodeID,
87
- hasAsync: () => hasAsync,
89
+ hasSwitchKey: () => hasSwitchKey,
90
+ hasTemplateKey: () => hasTemplateKey,
91
+ hasTemplateValues: () => hasTemplateValues,
88
92
  isBinding: () => isBinding,
89
93
  isErrorWithLocation: () => isErrorWithLocation,
90
94
  isExpressionNode: () => isExpressionNode,
@@ -2504,8 +2508,14 @@ var NodeType = /* @__PURE__ */ ((NodeType2) => {
2504
2508
  })(NodeType || {});
2505
2509
 
2506
2510
  // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/core/player/src/view/parser/utils.ts
2507
- function hasAsync(obj) {
2508
- return Object.prototype.hasOwnProperty.call(obj, "async");
2511
+ function hasTemplateValues(obj, localKey) {
2512
+ return Object.hasOwnProperty.call(obj, "template") && Array.isArray(obj?.template) && obj.template.length && obj.template.find((tmpl) => tmpl.output === localKey);
2513
+ }
2514
+ function hasSwitchKey(localKey) {
2515
+ return localKey === "staticSwitch" || localKey === "dynamicSwitch";
2516
+ }
2517
+ function hasTemplateKey(localKey) {
2518
+ return localKey === "template";
2509
2519
  }
2510
2520
  function getNodeID(node) {
2511
2521
  if (!node) {
@@ -2542,7 +2552,6 @@ var Parser = class {
2542
2552
  * If null, we ignore this node all together
2543
2553
  */
2544
2554
  onCreateASTNode: new import_tapable_ts6.SyncWaterfallHook(),
2545
- determineNodeType: new import_tapable_ts6.SyncBailHook(),
2546
2555
  parseNode: new import_tapable_ts6.SyncBailHook()
2547
2556
  };
2548
2557
  }
@@ -2553,21 +2562,6 @@ var Parser = class {
2553
2562
  }
2554
2563
  return viewNode;
2555
2564
  }
2556
- parseAsync(obj, type, options) {
2557
- const parsedAsync = this.parseObject((0, import_timm4.omit)(obj, "async"), type, options);
2558
- const parsedNodeId = getNodeID(parsedAsync);
2559
- if (parsedAsync !== null && parsedNodeId) {
2560
- return this.createASTNode(
2561
- {
2562
- id: parsedNodeId,
2563
- type: "async" /* Async */,
2564
- value: parsedAsync
2565
- },
2566
- obj
2567
- );
2568
- }
2569
- return null;
2570
- }
2571
2565
  createASTNode(node, value) {
2572
2566
  const tapped = this.hooks.onCreateASTNode.call(node, value);
2573
2567
  if (tapped === void 0) {
@@ -2575,30 +2569,14 @@ var Parser = class {
2575
2569
  }
2576
2570
  return tapped;
2577
2571
  }
2578
- /**
2579
- * Checks if there are templated values in the object
2580
- *
2581
- * @param obj - The Parsed Object to check to see if we have a template array type for
2582
- * @param localKey - The key being checked
2583
- */
2584
- hasTemplateValues(obj, localKey) {
2585
- return Object.hasOwnProperty.call(obj, "template") && Array.isArray(obj?.template) && obj.template.length && obj.template.find((tmpl) => tmpl.output === localKey);
2586
- }
2587
- hasSwitchKey(localKey) {
2588
- return localKey === "staticSwitch";
2589
- }
2590
2572
  parseObject(obj, type = "value" /* Value */, options = { templateDepth: 0 }) {
2591
- const nodeType = this.hooks.determineNodeType.call(obj);
2592
- if (nodeType !== void 0) {
2593
- const parsedNode = this.hooks.parseNode.call(
2594
- obj,
2595
- type,
2596
- options,
2597
- nodeType
2598
- );
2599
- if (parsedNode) {
2600
- return parsedNode;
2601
- }
2573
+ const parsedNode = this.hooks.parseNode.call(
2574
+ obj,
2575
+ type,
2576
+ options
2577
+ );
2578
+ if (parsedNode || parsedNode === null) {
2579
+ return parsedNode;
2602
2580
  }
2603
2581
  const parseLocalObject = (currentValue, objToParse, path = []) => {
2604
2582
  if (typeof objToParse !== "object" || objToParse === null) {
@@ -2620,182 +2598,44 @@ var Parser = class {
2620
2598
  value: currentValue
2621
2599
  };
2622
2600
  const newValue = objEntries.reduce((accumulation, current) => {
2623
- const { children: children2, ...rest } = accumulation;
2601
+ let { value: value2 } = accumulation;
2602
+ const { children: children2 } = accumulation;
2624
2603
  const [localKey, localValue] = current;
2625
- if (localKey === "asset" && typeof localValue === "object") {
2626
- const assetAST = this.parseObject(
2627
- localValue,
2628
- "asset" /* Asset */,
2629
- options
2630
- );
2631
- if (assetAST) {
2632
- return {
2633
- ...rest,
2634
- children: [
2635
- ...children2,
2636
- {
2637
- path: [...path, "asset"],
2638
- value: assetAST
2639
- }
2640
- ]
2641
- };
2642
- }
2643
- } else if (this.hooks.determineNodeType.call(localKey) === "template" /* Template */ && Array.isArray(localValue)) {
2644
- const templateChildren = localValue.map((template) => {
2645
- const templateAST = this.hooks.onCreateASTNode.call(
2646
- {
2647
- type: "template" /* Template */,
2648
- depth: options.templateDepth ?? 0,
2649
- data: template.data,
2650
- template: template.value,
2651
- dynamic: template.dynamic ?? false
2652
- },
2653
- template
2654
- );
2655
- if (templateAST?.type === "multi-node" /* MultiNode */) {
2656
- templateAST.values.forEach((v) => {
2657
- v.parent = templateAST;
2658
- });
2659
- }
2660
- if (templateAST) {
2661
- return {
2662
- path: [...path, template.output],
2663
- value: templateAST
2664
- };
2665
- }
2666
- return;
2667
- }).filter((element) => !!element);
2668
- return {
2669
- ...rest,
2670
- children: [...children2, ...templateChildren]
2671
- };
2672
- } else if (localValue && this.hooks.determineNodeType.call(localValue) === "switch" /* Switch */ || this.hasSwitchKey(localKey)) {
2673
- const localSwitch = this.hooks.parseNode.call(
2674
- this.hasSwitchKey(localKey) ? { [localKey]: localValue } : localValue,
2675
- "value" /* Value */,
2676
- options,
2677
- "switch" /* Switch */
2678
- );
2679
- if (localSwitch && localSwitch.type === "value" /* Value */ && localSwitch.children?.length === 1 && localSwitch.value === void 0) {
2680
- const firstChild = localSwitch.children[0];
2681
- return {
2682
- ...rest,
2683
- children: [
2684
- ...children2,
2685
- {
2686
- path: [...path, localKey, ...firstChild.path],
2687
- value: firstChild.value
2688
- }
2689
- ]
2690
- };
2691
- }
2692
- if (localSwitch) {
2693
- return {
2694
- ...rest,
2695
- children: [
2696
- ...children2,
2697
- {
2698
- path: [...path, localKey],
2699
- value: localSwitch
2700
- }
2701
- ]
2702
- };
2703
- }
2704
- } else if (localValue && hasAsync(localValue)) {
2705
- const localAsync = this.parseAsync(
2706
- localValue,
2707
- "value" /* Value */,
2708
- options
2709
- );
2710
- if (localAsync) {
2711
- children2.push({
2712
- path: [...path, localKey],
2713
- value: localAsync
2714
- });
2715
- }
2716
- } else if (localValue && Array.isArray(localValue)) {
2717
- const childValues = localValue.map(
2718
- (childVal) => this.parseObject(childVal, "value" /* Value */, options)
2719
- ).filter((child) => !!child);
2720
- if (childValues.length > 0) {
2721
- const multiNode = this.hooks.onCreateASTNode.call(
2722
- {
2723
- type: "multi-node" /* MultiNode */,
2724
- override: !this.hasTemplateValues(localObj, localKey),
2725
- values: childValues
2726
- },
2727
- localValue
2728
- );
2729
- if (multiNode?.type === "multi-node" /* MultiNode */) {
2730
- multiNode.values.forEach((v) => {
2731
- v.parent = multiNode;
2732
- });
2733
- }
2734
- if (multiNode) {
2735
- return {
2736
- ...rest,
2737
- children: [
2738
- ...children2,
2739
- {
2740
- path: [...path, localKey],
2741
- value: multiNode
2742
- }
2743
- ]
2744
- };
2745
- }
2604
+ const newChildren = this.hooks.parseNode.call(
2605
+ localValue,
2606
+ "value" /* Value */,
2607
+ options,
2608
+ {
2609
+ path,
2610
+ key: localKey,
2611
+ parentObj: localObj
2746
2612
  }
2613
+ );
2614
+ if (newChildren) {
2615
+ children2.push(...newChildren);
2747
2616
  } else if (localValue && typeof localValue === "object") {
2748
- const determineNodeType = this.hooks.determineNodeType.call(localValue);
2749
- if (determineNodeType === "applicability" /* Applicability */) {
2750
- const parsedNode = this.hooks.parseNode.call(
2751
- localValue,
2752
- "value" /* Value */,
2753
- options,
2754
- determineNodeType
2755
- );
2756
- if (parsedNode) {
2757
- return {
2758
- ...rest,
2759
- children: [
2760
- ...children2,
2761
- {
2762
- path: [...path, localKey],
2763
- value: parsedNode
2764
- }
2765
- ]
2766
- };
2767
- }
2768
- } else {
2769
- const result = parseLocalObject(accumulation.value, localValue, [
2770
- ...path,
2771
- localKey
2772
- ]);
2773
- return {
2774
- value: result.value,
2775
- children: [...children2, ...result.children]
2776
- };
2777
- }
2617
+ const result = parseLocalObject(accumulation.value, localValue, [
2618
+ ...path,
2619
+ localKey
2620
+ ]);
2621
+ value2 = result.value;
2622
+ children2.push(...result.children);
2778
2623
  } else {
2779
- const value2 = (0, import_timm4.setIn)(
2780
- accumulation.value,
2781
- [...path, localKey],
2782
- localValue
2783
- );
2784
- return {
2785
- children: children2,
2786
- value: value2
2787
- };
2624
+ value2 = (0, import_timm4.setIn)(accumulation.value, [...path, localKey], localValue);
2788
2625
  }
2789
- return accumulation;
2626
+ return {
2627
+ value: value2,
2628
+ children: children2
2629
+ };
2790
2630
  }, defaultValue);
2791
2631
  return newValue;
2792
2632
  };
2793
2633
  const { value, children } = parseLocalObject(void 0, obj);
2794
- const baseAst = value === void 0 && children.length === 0 ? void 0 : {
2634
+ const baseAst = value === void 0 && !children.length ? void 0 : {
2795
2635
  type,
2796
2636
  value
2797
2637
  };
2798
- if (baseAst !== void 0 && children.length > 0) {
2638
+ if (baseAst && children.length) {
2799
2639
  const parent = baseAst;
2800
2640
  parent.children = children;
2801
2641
  children.forEach((child) => {
@@ -3305,7 +3145,7 @@ var Builder = class {
3305
3145
  }
3306
3146
  };
3307
3147
 
3308
- // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/core/player/src/view/plugins/template-plugin.ts
3148
+ // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/core/player/src/view/plugins/template.ts
3309
3149
  var import_tapable_ts9 = require("tapable-ts");
3310
3150
  var TemplatePlugin = class {
3311
3151
  constructor(options) {
@@ -3371,28 +3211,33 @@ var TemplatePlugin = class {
3371
3211
  }
3372
3212
  return node;
3373
3213
  });
3374
- parser.hooks.determineNodeType.tap("template", (obj) => {
3375
- if (obj === "template") {
3376
- return "template" /* Template */;
3377
- }
3378
- });
3379
3214
  parser.hooks.parseNode.tap(
3380
3215
  "template",
3381
- (obj, _nodeType, options, determinedNodeType) => {
3382
- if (determinedNodeType === "template" /* Template */) {
3383
- const templateNode = parser.createASTNode(
3384
- {
3385
- type: "template" /* Template */,
3386
- depth: options.templateDepth ?? 0,
3387
- data: obj.data,
3388
- template: obj.value,
3389
- dynamic: obj.dynamic ?? false
3390
- },
3391
- obj
3392
- );
3393
- if (templateNode) {
3394
- return templateNode;
3395
- }
3216
+ (obj, _nodeType, options, childOptions) => {
3217
+ if (childOptions && hasTemplateKey(childOptions.key)) {
3218
+ return obj.map((template) => {
3219
+ const templateAST = parser.createASTNode(
3220
+ {
3221
+ type: "template" /* Template */,
3222
+ depth: options.templateDepth ?? 0,
3223
+ data: template.data,
3224
+ template: template.value,
3225
+ dynamic: template.dynamic ?? false
3226
+ },
3227
+ template
3228
+ );
3229
+ if (!templateAST)
3230
+ return;
3231
+ if (templateAST.type === "multi-node" /* MultiNode */) {
3232
+ templateAST.values.forEach((v) => {
3233
+ v.parent = templateAST;
3234
+ });
3235
+ }
3236
+ return {
3237
+ path: [...childOptions.path, template.output],
3238
+ value: templateAST
3239
+ };
3240
+ }).filter(Boolean);
3396
3241
  }
3397
3242
  }
3398
3243
  );
@@ -3518,6 +3363,9 @@ var StringResolverPlugin = class {
3518
3363
  // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/core/player/src/view/plugins/applicability.ts
3519
3364
  var import_timm7 = require("timm");
3520
3365
  var ApplicabilityPlugin = class {
3366
+ isApplicability(obj) {
3367
+ return obj && Object.prototype.hasOwnProperty.call(obj, "applicability");
3368
+ }
3521
3369
  applyResolver(resolver) {
3522
3370
  resolver.hooks.beforeResolve.tap(
3523
3371
  "applicability",
@@ -3535,34 +3383,38 @@ var ApplicabilityPlugin = class {
3535
3383
  );
3536
3384
  }
3537
3385
  applyParser(parser) {
3538
- parser.hooks.determineNodeType.tap("applicability", (obj) => {
3539
- if (Object.prototype.hasOwnProperty.call(obj, "applicability")) {
3540
- return "applicability" /* Applicability */;
3541
- }
3542
- });
3543
3386
  parser.hooks.parseNode.tap(
3544
3387
  "applicability",
3545
- (obj, nodeType, options, determinedNodeType) => {
3546
- if (determinedNodeType === "applicability" /* Applicability */) {
3388
+ (obj, nodeType, options, childOptions) => {
3389
+ if (this.isApplicability(obj)) {
3547
3390
  const parsedApplicability = parser.parseObject(
3548
3391
  (0, import_timm7.omit)(obj, "applicability"),
3549
3392
  nodeType,
3550
3393
  options
3551
3394
  );
3552
- if (parsedApplicability !== null) {
3553
- const applicabilityNode = parser.createASTNode(
3554
- {
3555
- type: "applicability" /* Applicability */,
3556
- expression: obj.applicability,
3557
- value: parsedApplicability
3558
- },
3559
- obj
3560
- );
3561
- if (applicabilityNode?.type === "applicability" /* Applicability */) {
3562
- applicabilityNode.value.parent = applicabilityNode;
3563
- }
3564
- return applicabilityNode;
3395
+ if (!parsedApplicability) {
3396
+ return childOptions ? [] : null;
3397
+ }
3398
+ const applicabilityNode = parser.createASTNode(
3399
+ {
3400
+ type: "applicability" /* Applicability */,
3401
+ expression: obj.applicability,
3402
+ value: parsedApplicability
3403
+ },
3404
+ obj
3405
+ );
3406
+ if (!applicabilityNode) {
3407
+ return childOptions ? [] : null;
3408
+ }
3409
+ if (applicabilityNode.type === "applicability" /* Applicability */) {
3410
+ applicabilityNode.value.parent = applicabilityNode;
3565
3411
  }
3412
+ return childOptions ? [
3413
+ {
3414
+ path: [...childOptions.path, childOptions.key],
3415
+ value: applicabilityNode
3416
+ }
3417
+ ] : applicabilityNode;
3566
3418
  }
3567
3419
  }
3568
3420
  );
@@ -3587,6 +3439,9 @@ var SwitchPlugin = class {
3587
3439
  }
3588
3440
  return EMPTY_NODE;
3589
3441
  }
3442
+ isSwitch(obj) {
3443
+ return obj && (Object.prototype.hasOwnProperty.call(obj, "dynamicSwitch") || Object.prototype.hasOwnProperty.call(obj, "staticSwitch"));
3444
+ }
3590
3445
  applyParser(parser) {
3591
3446
  parser.hooks.onCreateASTNode.tap("switch", (node) => {
3592
3447
  if (node && node.type === "switch" /* Switch */ && !node.dynamic) {
@@ -3594,19 +3449,14 @@ var SwitchPlugin = class {
3594
3449
  }
3595
3450
  return node;
3596
3451
  });
3597
- parser.hooks.determineNodeType.tap("switch", (obj) => {
3598
- if (Object.prototype.hasOwnProperty.call(obj, "dynamicSwitch") || Object.prototype.hasOwnProperty.call(obj, "staticSwitch")) {
3599
- return "switch" /* Switch */;
3600
- }
3601
- });
3602
3452
  parser.hooks.parseNode.tap(
3603
3453
  "switch",
3604
- (obj, _nodeType, options, determinedNodeType) => {
3605
- if (determinedNodeType === "switch" /* Switch */) {
3606
- const dynamic = "dynamicSwitch" in obj;
3607
- const switchContent = "dynamicSwitch" in obj ? obj.dynamicSwitch : obj.staticSwitch;
3608
- const cases = [];
3609
- switchContent.forEach(
3454
+ (obj, _nodeType, options, childOptions) => {
3455
+ if (this.isSwitch(obj) || childOptions && hasSwitchKey(childOptions.key)) {
3456
+ const objToParse = childOptions && hasSwitchKey(childOptions.key) ? { [childOptions.key]: obj } : obj;
3457
+ const dynamic = "dynamicSwitch" in objToParse;
3458
+ const switchContent = dynamic ? objToParse.dynamicSwitch : objToParse.staticSwitch;
3459
+ const cases = switchContent.map(
3610
3460
  (switchCase) => {
3611
3461
  const { case: switchCaseExpr, ...switchBody } = switchCase;
3612
3462
  const value = parser.parseObject(
@@ -3615,30 +3465,41 @@ var SwitchPlugin = class {
3615
3465
  options
3616
3466
  );
3617
3467
  if (value) {
3618
- cases.push({
3468
+ return {
3619
3469
  case: switchCaseExpr,
3620
3470
  value
3621
- });
3471
+ };
3622
3472
  }
3473
+ return;
3623
3474
  }
3624
- );
3625
- const switchAST = parser.hooks.onCreateASTNode.call(
3475
+ ).filter(Boolean);
3476
+ const switchAST = parser.createASTNode(
3626
3477
  {
3627
3478
  type: "switch" /* Switch */,
3628
3479
  dynamic,
3629
3480
  cases
3630
3481
  },
3631
- obj
3482
+ objToParse
3632
3483
  );
3633
- if (switchAST?.type === "switch" /* Switch */) {
3484
+ if (!switchAST || switchAST.type === "empty" /* Empty */) {
3485
+ return childOptions ? [] : null;
3486
+ }
3487
+ if (switchAST.type === "switch" /* Switch */) {
3634
3488
  switchAST.cases.forEach((sCase) => {
3635
3489
  sCase.value.parent = switchAST;
3636
3490
  });
3637
3491
  }
3638
- if (switchAST?.type === "empty" /* Empty */) {
3639
- return null;
3492
+ if (childOptions) {
3493
+ let path = [...childOptions.path, childOptions.key];
3494
+ let value = switchAST;
3495
+ if (switchAST.type === "value" /* Value */ && switchAST.children?.length === 1 && switchAST.value === void 0) {
3496
+ const firstChild = switchAST.children[0];
3497
+ path = [...path, ...firstChild.path];
3498
+ value = firstChild.value;
3499
+ }
3500
+ return [{ path, value }];
3640
3501
  }
3641
- return switchAST ?? null;
3502
+ return switchAST;
3642
3503
  }
3643
3504
  }
3644
3505
  );
@@ -3657,6 +3518,79 @@ var SwitchPlugin = class {
3657
3518
  }
3658
3519
  };
3659
3520
 
3521
+ // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/core/player/src/view/plugins/multi-node.ts
3522
+ var MultiNodePlugin = class {
3523
+ applyParser(parser) {
3524
+ parser.hooks.parseNode.tap(
3525
+ "multi-node",
3526
+ (obj, nodeType, options, childOptions) => {
3527
+ if (childOptions && !hasTemplateKey(childOptions.key) && Array.isArray(obj)) {
3528
+ const values = obj.map(
3529
+ (childVal) => parser.parseObject(childVal, "value" /* Value */, options)
3530
+ ).filter((child) => !!child);
3531
+ if (!values.length) {
3532
+ return [];
3533
+ }
3534
+ const multiNode = parser.createASTNode(
3535
+ {
3536
+ type: "multi-node" /* MultiNode */,
3537
+ override: !hasTemplateValues(
3538
+ childOptions.parentObj,
3539
+ childOptions.key
3540
+ ),
3541
+ values
3542
+ },
3543
+ obj
3544
+ );
3545
+ if (!multiNode) {
3546
+ return [];
3547
+ }
3548
+ if (multiNode.type === "multi-node" /* MultiNode */) {
3549
+ multiNode.values.forEach((v) => {
3550
+ v.parent = multiNode;
3551
+ });
3552
+ }
3553
+ return [
3554
+ {
3555
+ path: [...childOptions.path, childOptions.key],
3556
+ value: multiNode
3557
+ }
3558
+ ];
3559
+ }
3560
+ }
3561
+ );
3562
+ }
3563
+ apply(view) {
3564
+ view.hooks.parser.tap("multi-node", this.applyParser.bind(this));
3565
+ }
3566
+ };
3567
+
3568
+ // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/core/player/src/view/plugins/asset.ts
3569
+ var AssetPlugin = class {
3570
+ applyParser(parser) {
3571
+ parser.hooks.parseNode.tap(
3572
+ "asset",
3573
+ (obj, nodeType, options, childOptions) => {
3574
+ if (childOptions?.key === "asset" && typeof obj === "object") {
3575
+ const assetAST = parser.parseObject(obj, "asset" /* Asset */, options);
3576
+ if (!assetAST) {
3577
+ return [];
3578
+ }
3579
+ return [
3580
+ {
3581
+ path: [...childOptions.path, childOptions.key],
3582
+ value: assetAST
3583
+ }
3584
+ ];
3585
+ }
3586
+ }
3587
+ );
3588
+ }
3589
+ apply(view) {
3590
+ view.hooks.parser.tap("asset", this.applyParser.bind(this));
3591
+ }
3592
+ };
3593
+
3660
3594
  // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/core/player/src/player.ts
3661
3595
  var import_timm9 = require("timm");
3662
3596
  var import_p_defer2 = __toESM(require("p-defer"));
@@ -5146,12 +5080,14 @@ var DefaultViewPlugin = class {
5146
5080
  player.hooks.viewController.tap(this.name, (viewController) => {
5147
5081
  viewController.hooks.view.tap(this.name, (view) => {
5148
5082
  const pluginOptions = toNodeResolveOptions(view.resolverOptions);
5083
+ new AssetPlugin().apply(view);
5149
5084
  new SwitchPlugin(pluginOptions).apply(view);
5150
5085
  new ApplicabilityPlugin().apply(view);
5151
5086
  new StringResolverPlugin().apply(view);
5152
5087
  const templatePlugin = new TemplatePlugin(pluginOptions);
5153
5088
  templatePlugin.apply(view);
5154
5089
  view.hooks.onTemplatePluginCreated.call(templatePlugin);
5090
+ new MultiNodePlugin().apply(view);
5155
5091
  });
5156
5092
  });
5157
5093
  }
@@ -5497,6 +5433,7 @@ var Player = _Player;
5497
5433
  // Annotate the CommonJS export names for ESM import in node:
5498
5434
  0 && (module.exports = {
5499
5435
  ApplicabilityPlugin,
5436
+ AssetPlugin,
5500
5437
  AssetTransformCorePlugin,
5501
5438
  BINDING_BRACKETS_REGEX,
5502
5439
  BindingInstance,
@@ -5516,6 +5453,7 @@ var Player = _Player;
5516
5453
  FlowInstance,
5517
5454
  LocalModel,
5518
5455
  LocalStateStore,
5456
+ MultiNodePlugin,
5519
5457
  NOOPDataModel,
5520
5458
  NOOP_MODEL,
5521
5459
  NOT_STARTED_STATE,
@@ -5549,7 +5487,9 @@ var Player = _Player;
5549
5487
  findNextExp,
5550
5488
  getBindingSegments,
5551
5489
  getNodeID,
5552
- hasAsync,
5490
+ hasSwitchKey,
5491
+ hasTemplateKey,
5492
+ hasTemplateValues,
5553
5493
  isBinding,
5554
5494
  isErrorWithLocation,
5555
5495
  isExpressionNode,