@player-ui/react 1.1.1--canary.934.41671 → 1.1.1--canary.936.41682

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.
@@ -37,7 +37,6 @@ __export(src_exports, {
37
37
  PlayerContext: () => PlayerContext,
38
38
  ReactAsset: () => ReactAsset,
39
39
  ReactPlayer: () => ReactPlayer2,
40
- ReactPlayerPropsContext: () => ReactPlayerPropsContext,
41
40
  WebPlayer: () => WebPlayer,
42
41
  buildUrl: () => buildUrl,
43
42
  callOrReturn: () => callOrReturn,
@@ -62,7 +61,7 @@ var import_react4 = __toESM(require("react"));
62
61
  var import_tapable_ts = require("tapable-ts");
63
62
  var import_react_subscribe = require("@player-ui/react-subscribe");
64
63
  var import_partial_match_registry = require("@player-ui/partial-match-registry");
65
- var import_player3 = require("@player-ui/player");
64
+ var import_player2 = require("@player-ui/player");
66
65
  var import_react_error_boundary2 = require("react-error-boundary");
67
66
 
68
67
  // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/asset/index.tsx
@@ -71,18 +70,12 @@ var import_leven = __toESM(require("leven"));
71
70
  var import_react_error_boundary = require("react-error-boundary");
72
71
 
73
72
  // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/asset/AssetRenderError.ts
74
- var import_player = require("@player-ui/player");
75
73
  var AssetRenderError = class extends Error {
76
74
  constructor(rootAsset, message, innerException) {
77
75
  super(message);
78
76
  this.rootAsset = rootAsset;
79
77
  this.innerException = innerException;
80
78
  this.assetParentPath = [];
81
- this.type = import_player.ErrorTypes.RENDER;
82
- this.severity = import_player.ErrorSeverity.ERROR;
83
- this.metadata = {
84
- assetId: rootAsset.id
85
- };
86
79
  this.initialMessage = message ?? "";
87
80
  this.innerExceptionMessage = innerException instanceof Error ? innerException.message : String(innerException);
88
81
  if (this.innerExceptionMessage) {
@@ -186,7 +179,6 @@ var ReactAsset = (props) => {
186
179
  error
187
180
  );
188
181
  }
189
- return null;
190
182
  }
191
183
  },
192
184
  /* @__PURE__ */ import_react.default.createElement(Impl, { key: unwrapped.id, ...unwrapped })
@@ -202,8 +194,8 @@ var usePlayer = () => {
202
194
  };
203
195
 
204
196
  // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/utils/use-logger.ts
205
- var import_player2 = require("@player-ui/player");
206
- var noopLogger = new import_player2.NoopLogger();
197
+ var import_player = require("@player-ui/player");
198
+ var noopLogger = new import_player.NoopLogger();
207
199
  function useLogger() {
208
200
  const player = usePlayer();
209
201
  return player?.logger ?? noopLogger;
@@ -304,7 +296,6 @@ var OnUpdatePlugin = class {
304
296
  };
305
297
 
306
298
  // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/player.tsx
307
- var ReactPlayerPropsContext = import_react4.default.createContext({ isInErrorState: false });
308
299
  var _window = typeof window === "undefined" ? void 0 : window;
309
300
  var ReactPlayer2 = class {
310
301
  constructor(options) {
@@ -326,7 +317,6 @@ var ReactPlayer2 = class {
326
317
  onBeforeViewReset: new import_tapable_ts.AsyncParallelHook()
327
318
  };
328
319
  this.viewUpdateSubscription = new import_react_subscribe.Subscribe();
329
- const startTime = performance.now();
330
320
  this.options = options ?? {};
331
321
  const Devtools = _window?.__PLAYER_DEVTOOLS_PLUGIN;
332
322
  const onUpdatePlugin = new OnUpdatePlugin(
@@ -339,7 +329,7 @@ var ReactPlayer2 = class {
339
329
  const playerPlugins = plugins.filter(
340
330
  (p) => Boolean(p.apply)
341
331
  );
342
- this.player = options?.player ?? new import_player3.Player({ plugins: playerPlugins });
332
+ this.player = options?.player ?? new import_player2.Player({ plugins: playerPlugins });
343
333
  plugins.forEach((plugin) => {
344
334
  if (plugin.applyReact) {
345
335
  plugin.applyReact(this);
@@ -351,8 +341,6 @@ var ReactPlayer2 = class {
351
341
  version: this.player.getVersion(),
352
342
  commit: this.player.getCommit()
353
343
  };
354
- const coldStartTime = Math.round(performance.now() - startTime);
355
- this.player.logger.info(`ReactPlayer initialized in ${coldStartTime} ms.`);
356
344
  }
357
345
  /** Returns the current version Player */
358
346
  getPlayerVersion() {
@@ -368,16 +356,10 @@ var ReactPlayer2 = class {
368
356
  }
369
357
  /** Register and apply [Plugin] if one with the same symbol is not already registered. */
370
358
  registerPlugin(plugin) {
371
- if (plugin.apply) {
372
- this.player.registerPlugin(plugin);
373
- }
374
- if (plugin.applyReact) {
375
- plugin.applyReact?.(this);
376
- }
377
- if (!this.options.plugins) {
378
- this.options.plugins = [];
379
- }
380
- this.options.plugins.push(plugin);
359
+ if (!plugin.applyReact)
360
+ return;
361
+ plugin.applyReact(this);
362
+ this.options.plugins?.push(plugin);
381
363
  }
382
364
  /**
383
365
  * Returns the current version of the running React Player
@@ -396,84 +378,18 @@ var ReactPlayer2 = class {
396
378
  createReactPlayerComponent() {
397
379
  const BaseComp = this.hooks.webComponent.call(this.createReactComp());
398
380
  const ReactPlayerComponent = (props) => {
399
- const trackedErrors = import_react4.default.useRef(/* @__PURE__ */ new Map());
400
- const [errorSubId, setErrorSubId] = import_react4.default.useState(
401
- void 0
402
- );
403
- const { subscribe, unsubscribe } = (0, import_react_subscribe.useSubscriber)(
404
- this.viewUpdateSubscription
405
- );
406
- const componentProps = import_react4.default.useMemo(
407
- () => ({
408
- ...props,
409
- isInErrorState: errorSubId !== void 0
410
- }),
411
- [props, errorSubId]
412
- );
413
- const clearErrorTracking = import_react4.default.useCallback(() => {
414
- trackedErrors.current.clear();
415
- setErrorSubId((prev) => {
416
- if (prev !== void 0) {
417
- unsubscribe(prev);
418
- }
419
- return void 0;
420
- });
421
- }, []);
422
- import_react4.default.useEffect(() => {
423
- return clearErrorTracking;
424
- }, [clearErrorTracking]);
425
- const captureError = import_react4.default.useCallback(
426
- (err) => {
427
- const playerState = this.player.getState();
428
- if (playerState.status !== "in-progress") {
429
- this.player.logger.warn(
430
- `[ReactPlayer]: An error occurred during rendering but was ignored due to a change in the player state (current state: '${playerState.status}'). Error Details:`,
431
- err
432
- );
433
- return false;
434
- }
435
- const currentError = trackedErrors.current.get(err);
436
- if (currentError !== void 0) {
437
- return currentError;
438
- }
439
- let isRecovering = false;
440
- setErrorSubId((prev) => {
441
- const subId = prev === void 0 ? subscribe(clearErrorTracking, {
442
- initializeWithPreviousValue: false
443
- }) : prev;
444
- isRecovering = playerState.controllers.error.captureError(err);
445
- trackedErrors.current.set(err, isRecovering);
446
- if (!isRecovering) {
447
- if (subId !== prev) {
448
- unsubscribe(subId);
449
- }
450
- return prev;
451
- }
452
- return subId;
453
- });
454
- return isRecovering;
455
- },
456
- [errorSubId]
457
- );
458
381
  return /* @__PURE__ */ import_react4.default.createElement(
459
382
  import_react_error_boundary2.ErrorBoundary,
460
383
  {
461
- fallbackRender: (fallbackProps) => {
462
- const isRecovering = captureError(fallbackProps.error);
463
- if (!isRecovering) {
464
- return null;
384
+ fallbackRender: () => null,
385
+ onError: (err) => {
386
+ const playerState = this.player.getState();
387
+ if (playerState.status === "in-progress") {
388
+ playerState.fail(err);
465
389
  }
466
- fallbackProps.resetErrorBoundary();
467
- return /* @__PURE__ */ import_react4.default.createElement(
468
- ReactPlayerPropsContext.Provider,
469
- {
470
- value: { ...componentProps, isInErrorState: true }
471
- },
472
- /* @__PURE__ */ import_react4.default.createElement(PlayerContext.Provider, { value: { player: this.player } }, /* @__PURE__ */ import_react4.default.createElement(BaseComp, { ...componentProps, isInErrorState: true }))
473
- );
474
390
  }
475
391
  },
476
- /* @__PURE__ */ import_react4.default.createElement(ReactPlayerPropsContext.Provider, { value: { ...componentProps } }, /* @__PURE__ */ import_react4.default.createElement(PlayerContext.Provider, { value: { player: this.player } }, /* @__PURE__ */ import_react4.default.createElement(BaseComp, { ...componentProps })))
392
+ /* @__PURE__ */ import_react4.default.createElement(PlayerContext.Provider, { value: { player: this.player } }, /* @__PURE__ */ import_react4.default.createElement(BaseComp, { ...props }))
477
393
  );
478
394
  };
479
395
  return ReactPlayerComponent;
@@ -481,16 +397,8 @@ var ReactPlayer2 = class {
481
397
  createReactComp() {
482
398
  const ActualPlayerComp = this.hooks.playerComponent.call(ReactPlayer);
483
399
  const WebPlayerComponent = () => {
484
- const { isInErrorState } = import_react4.default.useContext(ReactPlayerPropsContext);
485
400
  const view = (0, import_react_subscribe.useSubscribedState)(this.viewUpdateSubscription);
486
- const lastSuccessfulView = import_react4.default.useRef(void 0);
487
401
  this.viewUpdateSubscription.suspend();
488
- import_react4.default.useEffect(() => {
489
- if (!isInErrorState) {
490
- lastSuccessfulView.current = view;
491
- }
492
- }, [isInErrorState, view]);
493
- const displayedView = isInErrorState ? lastSuccessfulView.current : view;
494
402
  return /* @__PURE__ */ import_react4.default.createElement(
495
403
  AssetContext.Provider,
496
404
  {
@@ -498,7 +406,7 @@ var ReactPlayer2 = class {
498
406
  registry: this.assetRegistry
499
407
  }
500
408
  },
501
- displayedView && /* @__PURE__ */ import_react4.default.createElement(ActualPlayerComp, { view: displayedView })
409
+ view && /* @__PURE__ */ import_react4.default.createElement(ActualPlayerComp, { view })
502
410
  );
503
411
  };
504
412
  return WebPlayerComponent;
@@ -513,9 +421,9 @@ var ReactPlayer2 = class {
513
421
  shouldCallResetHook ? this.hooks.onBeforeViewReset.call() : void 0
514
422
  );
515
423
  }
516
- start(payload, options) {
424
+ start(flow) {
517
425
  this.setWaitForNextViewUpdate();
518
- return this.player.start(payload, options).finally(async () => {
426
+ return this.player.start(flow).finally(async () => {
519
427
  await this.setWaitForNextViewUpdate();
520
428
  });
521
429
  }
@@ -523,7 +431,7 @@ var ReactPlayer2 = class {
523
431
  var WebPlayer = ReactPlayer2;
524
432
 
525
433
  // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/hooks.tsx
526
- var import_player4 = require("@player-ui/player");
434
+ var import_player3 = require("@player-ui/player");
527
435
  var import_react5 = __toESM(require("react"));
528
436
 
529
437
  // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/plugins/tapstate-plugin.ts
@@ -541,7 +449,7 @@ var StateTapPlugin = class {
541
449
 
542
450
  // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/hooks.tsx
543
451
  var useReactPlayer = (options) => {
544
- const [playerState, setPlayerState] = import_react5.default.useState(import_player4.NOT_STARTED_STATE);
452
+ const [playerState, setPlayerState] = import_react5.default.useState(import_player3.NOT_STARTED_STATE);
545
453
  const reactPlayer = import_react5.default.useMemo(() => {
546
454
  const rp = new ReactPlayer2({
547
455
  player: options?.player,
@@ -631,8 +539,7 @@ var ManagedState = class {
631
539
  context: {
632
540
  playerConfig: options.playerConfig,
633
541
  reactPlayer: new ReactPlayer2(options.playerConfig),
634
- manager: options.manager,
635
- startOptions: options.startOptions
542
+ manager: options.manager
636
543
  }
637
544
  };
638
545
  this.setState(initialState);
@@ -641,8 +548,8 @@ var ManagedState = class {
641
548
  /** reset starts from nothing */
642
549
  reset() {
643
550
  if (this.state?.value === "error") {
644
- const { playerConfig, manager, startOptions } = this.state.context;
645
- this.start({ playerConfig, manager, startOptions });
551
+ const { playerConfig, manager } = this.state.context;
552
+ this.start({ playerConfig, manager });
646
553
  } else {
647
554
  throw new Error("Flow must be in error state to reset");
648
555
  }
@@ -650,15 +557,14 @@ var ManagedState = class {
650
557
  /** restart starts from the last result */
651
558
  restart() {
652
559
  if (this.state?.value === "error") {
653
- const { playerConfig, manager, prevResult, reactPlayer, startOptions } = this.state.context;
560
+ const { playerConfig, manager, prevResult, reactPlayer } = this.state.context;
654
561
  this.setState({
655
562
  value: "completed",
656
563
  context: {
657
564
  playerConfig,
658
565
  manager,
659
566
  result: prevResult,
660
- reactPlayer,
661
- startOptions
567
+ reactPlayer
662
568
  }
663
569
  });
664
570
  } else {
@@ -672,13 +578,12 @@ var ManagedState = class {
672
578
  c(this.state);
673
579
  }
674
580
  });
675
- const { manager, reactPlayer, playerConfig, startOptions } = state.context;
581
+ const { manager, reactPlayer, playerConfig } = state.context;
676
582
  try {
677
583
  const nextState = await this.processState(state, {
678
584
  manager,
679
585
  reactPlayer,
680
- playerConfig,
681
- startOptions
586
+ playerConfig
682
587
  });
683
588
  if (nextState) {
684
589
  this.setState(nextState);
@@ -690,7 +595,6 @@ var ManagedState = class {
690
595
  manager,
691
596
  reactPlayer,
692
597
  playerConfig,
693
- startOptions,
694
598
  error: e
695
599
  }
696
600
  });
@@ -736,10 +640,7 @@ var ManagedState = class {
736
640
  ...context,
737
641
  flow: state.context.flow,
738
642
  prevResult: state.context.prevResult,
739
- result: state.context.reactPlayer.start(
740
- state.context.flow,
741
- state.context.startOptions
742
- )
643
+ result: state.context.reactPlayer.start(state.context.flow)
743
644
  }
744
645
  };
745
646
  }
@@ -777,7 +678,9 @@ var usePersistentStateMachine = (options) => {
777
678
  if (oldManagedState) {
778
679
  const playerState = oldManagedState.state?.context.reactPlayer.player.getState();
779
680
  if (oldManagedState.state?.value === "running" && playerState?.status === "in-progress") {
780
- previousManager.current.terminate?.(playerState);
681
+ previousManager.current.terminate?.(
682
+ playerState.controllers.data.serialize()
683
+ );
781
684
  }
782
685
  }
783
686
  const newKey = createKey();
@@ -825,8 +728,7 @@ var ManagedPlayer = (props) => {
825
728
  playerConfig: {
826
729
  plugins: [...props?.plugins ?? [], RequestTimeMetricsPlugin],
827
730
  player: props.player
828
- },
829
- startOptions: props.startOptions
731
+ }
830
732
  });
831
733
  const previousState = import_react7.default.useRef();
832
734
  if (state?.value !== previousState.current?.value) {
@@ -835,7 +737,7 @@ var ManagedPlayer = (props) => {
835
737
  } else if (state?.value === "error") {
836
738
  props.onError?.(state?.context.error);
837
739
  } else if (state?.value === "running") {
838
- props.onStartedFlow?.(state.context.flow);
740
+ props.onStartedFlow?.();
839
741
  }
840
742
  }
841
743
  previousState.current = state;
@@ -843,7 +745,7 @@ var ManagedPlayer = (props) => {
843
745
  return () => {
844
746
  const playerState = state?.context.reactPlayer.player.getState();
845
747
  if (state?.value === "running" && playerState?.status === "in-progress") {
846
- props.manager.terminate?.(playerState);
748
+ props.manager.terminate?.(playerState.controllers.data.serialize());
847
749
  }
848
750
  };
849
751
  }, [props.manager, state?.context.reactPlayer.player, state?.value]);
@@ -880,7 +782,6 @@ var ManagedPlayer = (props) => {
880
782
  PlayerContext,
881
783
  ReactAsset,
882
784
  ReactPlayer,
883
- ReactPlayerPropsContext,
884
785
  WebPlayer,
885
786
  buildUrl,
886
787
  callOrReturn,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/index.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/player.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/asset/index.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/asset/AssetRenderError.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/utils/player-context.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/utils/use-logger.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/utils/use-asset-props.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/utils/helpers.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/utils/url.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/utils/shared-constants.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/app.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/plugins/onupdate-plugin.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/hooks.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/plugins/tapstate-plugin.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/manager/managed-player.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/manager/request-time.tsx"],"sourcesContent":["export * from \"@player-ui/player\";\nexport * from \"./player\";\nexport * from \"./hooks\";\nexport * from \"./manager/managed-player\";\nexport * from \"./manager/request-time\";\nexport * from \"./manager/types\";\nexport * from \"./asset\";\nexport * from \"./utils\";\n","import React from \"react\";\nimport { SyncWaterfallHook, AsyncParallelHook } from \"tapable-ts\";\nimport {\n Subscribe,\n useSubscribedState,\n useSubscriber,\n} from \"@player-ui/react-subscribe\";\nimport { Registry } from \"@player-ui/partial-match-registry\";\nimport type {\n CompletedState,\n PlayerPlugin,\n View,\n PlayerInfo,\n StartOptions,\n} from \"@player-ui/player\";\nimport { Player } from \"@player-ui/player\";\nimport { ErrorBoundary, FallbackProps } from \"react-error-boundary\";\nimport type { AssetRegistryType } from \"./asset\";\nimport { AssetContext } from \"./asset\";\nimport { PlayerContext } from \"./utils\";\n\nimport type { ReactPlayerProps } from \"./app\";\nimport { ReactPlayer as PlayerComp } from \"./app\";\nimport { OnUpdatePlugin } from \"./plugins/onupdate-plugin\";\n\n/** Backup context for receiving ReactPlayerComponentProps when components setup in the webComponent call don't pass the props down to their inner components. */\nexport const ReactPlayerPropsContext: React.Context<ReactPlayerComponentProps> =\n React.createContext<ReactPlayerComponentProps>({ isInErrorState: false });\n\nexport interface DevtoolsGlobals {\n /** A global for a plugin to load to Player for devtools */\n __PLAYER_DEVTOOLS_PLUGIN?: {\n new (): ReactPlayerPlugin;\n };\n}\n\nexport type DevtoolsWindow = typeof window & DevtoolsGlobals;\n\nconst _window: DevtoolsWindow | undefined =\n typeof window === \"undefined\" ? undefined : window;\n\n// Alias until more properties are added\nexport type ReactPlayerInfo = PlayerInfo;\n\nexport interface ReactPlayerPlugin extends Partial<PlayerPlugin> {\n /** The name of this plugin */\n name: string;\n\n /**\n * Attach listeners to the web-player instance\n */\n applyReact?: (reactPlayer: ReactPlayer) => void;\n}\n\nexport interface ReactPlayerOptions {\n /** A headless player instance to use */\n player?: Player;\n\n /** A set of plugins to apply to this player */\n plugins?: Array<ReactPlayerPlugin>;\n}\n\nexport type ReactPlayerComponentProps = {\n /** Whether or not player is currently recovering from an error. */\n isInErrorState?: boolean;\n [key: string]: unknown;\n};\n\n/** A Player that renders UI through React */\nexport class ReactPlayer {\n public readonly options: ReactPlayerOptions;\n public readonly player: Player;\n public readonly assetRegistry: AssetRegistryType = new Registry();\n public readonly Component: React.ComponentType<ReactPlayerComponentProps>;\n public readonly hooks: {\n /**\n * A hook to create a React Component to be used for Player, regardless of the current flow state\n */\n webComponent: SyncWaterfallHook<\n [React.ComponentType<any>],\n Record<string, any>\n >;\n /**\n * A hook to create a React Component that's used to render a specific view.\n * It will be called for each view update from the core player.\n * Typically this will just be `Asset`\n */\n playerComponent: SyncWaterfallHook<\n [React.ComponentType<ReactPlayerProps>],\n Record<string, any>\n >;\n /**\n * A hook to execute async tasks before the view resets to undefined\n */\n onBeforeViewReset: AsyncParallelHook<[], Record<string, any>>;\n } = {\n /**\n * A hook to create a React Component to be used for Player, regardless of the current flow state\n */\n webComponent: new SyncWaterfallHook(),\n\n /**\n * A hook to create a React Component that's used to render a specific view.\n * It will be called for each view update from the core player.\n * Typically this will just be `Asset`\n */\n playerComponent: new SyncWaterfallHook(),\n\n /**\n * A hook to execute async tasks before the view resets to undefined\n */\n onBeforeViewReset: new AsyncParallelHook(),\n };\n\n public readonly viewUpdateSubscription: Subscribe<View> =\n new Subscribe<View>();\n private reactPlayerInfo: ReactPlayerInfo;\n\n constructor(options?: ReactPlayerOptions) {\n const startTime = performance.now();\n this.options = options ?? {};\n\n const Devtools = _window?.__PLAYER_DEVTOOLS_PLUGIN;\n const onUpdatePlugin = new OnUpdatePlugin(\n this.viewUpdateSubscription.publish,\n );\n\n const plugins = options?.plugins ?? [];\n\n if (Devtools) {\n plugins.push(new Devtools());\n }\n\n const playerPlugins = plugins.filter((p) =>\n Boolean(p.apply),\n ) as PlayerPlugin[];\n\n this.player = options?.player ?? new Player({ plugins: playerPlugins });\n\n plugins.forEach((plugin) => {\n if (plugin.applyReact) {\n plugin.applyReact(this);\n }\n });\n\n onUpdatePlugin.apply(this.player);\n\n this.Component = this.createReactPlayerComponent();\n this.reactPlayerInfo = {\n version: this.player.getVersion(),\n commit: this.player.getCommit(),\n };\n\n // Log the time it took to initialize Player\n const coldStartTime = Math.round(performance.now() - startTime);\n this.player.logger.info(`ReactPlayer initialized in ${coldStartTime} ms.`);\n }\n\n /** Returns the current version Player */\n public getPlayerVersion(): string {\n return this.reactPlayerInfo.version;\n }\n\n /** Returns the git commit used to build this Player version */\n public getPlayerCommit(): string {\n return this.reactPlayerInfo.commit;\n }\n\n /** Find instance of [Plugin] that has been registered to the web player */\n public findPlugin<Plugin extends ReactPlayerPlugin>(\n symbol: symbol,\n ): Plugin | undefined {\n return this.options.plugins?.find((el) => el.symbol === symbol) as Plugin;\n }\n\n /** Register and apply [Plugin] if one with the same symbol is not already registered. */\n public registerPlugin(plugin: ReactPlayerPlugin | PlayerPlugin): void {\n if (plugin.apply) {\n this.player.registerPlugin(plugin as PlayerPlugin);\n }\n\n if ((plugin as ReactPlayerPlugin).applyReact) {\n (plugin as ReactPlayerPlugin).applyReact?.(this);\n }\n\n if (!this.options.plugins) {\n this.options.plugins = [];\n }\n\n this.options.plugins.push(plugin);\n }\n\n /**\n * Returns the current version of the running React Player\n * @deprecated use `getPlayerVersion()` instead. Will be removed next major\n */\n public getReactPlayerVersion(): string {\n return this.reactPlayerInfo.version;\n }\n\n /**\n * Returns the git commit used to build the React Player version\n * @deprecated use `getPlayerCommit()` instead. Will be removed next major\n */\n public getReactPlayerCommit(): string {\n return this.reactPlayerInfo.commit;\n }\n\n private createReactPlayerComponent(): React.ComponentType<ReactPlayerComponentProps> {\n const BaseComp = this.hooks.webComponent.call(this.createReactComp());\n\n /** Wrap the Error boundary and context provider after the hook call to catch anything wrapped by the hook */\n const ReactPlayerComponent = (props: ReactPlayerComponentProps) => {\n const trackedErrors = React.useRef(new Map<Error, boolean>());\n const [errorSubId, setErrorSubId] = React.useState<number | undefined>(\n undefined,\n );\n const { subscribe, unsubscribe } = useSubscriber(\n this.viewUpdateSubscription,\n );\n\n const componentProps: ReactPlayerComponentProps = React.useMemo(\n () => ({\n ...props,\n isInErrorState: errorSubId !== undefined,\n }),\n [props, errorSubId],\n );\n\n /** Callback to remove all tracked errors and unsub from */\n const clearErrorTracking = React.useCallback(() => {\n trackedErrors.current.clear();\n setErrorSubId((prev) => {\n if (prev !== undefined) {\n unsubscribe(prev);\n }\n\n return undefined;\n });\n }, []);\n\n React.useEffect(() => {\n // Clear errors and error subscription on unmount\n return clearErrorTracking;\n }, [clearErrorTracking]);\n\n /** capture error and return true or false to represent if we are recovering from the error or not. */\n const captureError = React.useCallback(\n (err: Error) => {\n // If player isn't in progress we can't actually render anything so render errors are irrelevant.\n const playerState = this.player.getState();\n if (playerState.status !== \"in-progress\") {\n this.player.logger.warn(\n `[ReactPlayer]: An error occurred during rendering but was ignored due to a change in the player state (current state: '${playerState.status}'). Error Details:`,\n err,\n );\n return false;\n }\n\n // Only capture each error once.\n const currentError = trackedErrors.current.get(err);\n if (currentError !== undefined) {\n return currentError;\n }\n\n let isRecovering = false;\n setErrorSubId((prev) => {\n // subscribe only if no subscription available.\n // Needs to happen before capture error to ensure error recovery isn't missed\n const subId =\n prev === undefined\n ? subscribe(clearErrorTracking, {\n initializeWithPreviousValue: false,\n })\n : prev;\n\n // Get skipped state after trying to capture.\n isRecovering = playerState.controllers.error.captureError(err);\n trackedErrors.current.set(err, isRecovering);\n\n // If we can't recover from the error, avoid updating state to stay in error boundary\n if (!isRecovering) {\n // Unsub if not previously subbed since we don't need to reset the view\n if (subId !== prev) {\n unsubscribe(subId);\n }\n return prev;\n }\n\n return subId;\n });\n\n return isRecovering;\n },\n [errorSubId],\n );\n\n return (\n <ErrorBoundary\n fallbackRender={(fallbackProps: FallbackProps) => {\n const isRecovering = captureError(fallbackProps.error);\n\n if (!isRecovering) {\n // Display nothing if not recovering. Let the player state fail and handle what the view will be.\n return null;\n }\n fallbackProps.resetErrorBoundary();\n\n // Render the same as on success when recovering to preserve the react tree.\n return (\n <ReactPlayerPropsContext.Provider\n value={{ ...componentProps, isInErrorState: true }}\n >\n <PlayerContext.Provider value={{ player: this.player }}>\n <BaseComp {...componentProps} isInErrorState />\n </PlayerContext.Provider>\n </ReactPlayerPropsContext.Provider>\n );\n }}\n >\n <ReactPlayerPropsContext.Provider value={{ ...componentProps }}>\n <PlayerContext.Provider value={{ player: this.player }}>\n <BaseComp {...componentProps} />\n </PlayerContext.Provider>\n </ReactPlayerPropsContext.Provider>\n </ErrorBoundary>\n );\n };\n\n return ReactPlayerComponent;\n }\n\n private createReactComp(): React.ComponentType<ReactPlayerComponentProps> {\n const ActualPlayerComp = this.hooks.playerComponent.call(PlayerComp);\n\n /** the component to use to render the player */\n const WebPlayerComponent: React.ComponentType = (): React.ReactElement => {\n const { isInErrorState } = React.useContext(ReactPlayerPropsContext);\n const view = useSubscribedState<View>(this.viewUpdateSubscription);\n const lastSuccessfulView = React.useRef<View | undefined>(undefined);\n this.viewUpdateSubscription.suspend();\n\n React.useEffect(() => {\n if (!isInErrorState) {\n lastSuccessfulView.current = view;\n }\n }, [isInErrorState, view]);\n\n const displayedView = isInErrorState ? lastSuccessfulView.current : view;\n\n return (\n <AssetContext.Provider\n value={{\n registry: this.assetRegistry,\n }}\n >\n {displayedView && <ActualPlayerComp view={displayedView} />}\n </AssetContext.Provider>\n );\n };\n\n return WebPlayerComponent;\n }\n\n /**\n * Call this method to force the ReactPlayer to wait for the next view-update before performing the next render.\n * If the `suspense` option is set, this will suspend while an update is pending, otherwise nothing will be rendered.\n */\n public setWaitForNextViewUpdate(): Promise<void> {\n const shouldCallResetHook = this.hooks.onBeforeViewReset.isUsed();\n\n return this.viewUpdateSubscription.reset(\n shouldCallResetHook ? this.hooks.onBeforeViewReset.call() : undefined,\n );\n }\n\n public start(\n payload: unknown,\n options?: StartOptions,\n ): Promise<CompletedState> {\n this.setWaitForNextViewUpdate();\n\n return this.player.start(payload, options).finally(async () => {\n await this.setWaitForNextViewUpdate();\n });\n }\n}\n\n// For compatibility\nexport const WebPlayer: typeof ReactPlayer = ReactPlayer;\n","import React from \"react\";\nimport leven from \"leven\";\nimport type { Asset as AssetType, AssetWrapper } from \"@player-ui/player\";\nimport type { Registry } from \"@player-ui/partial-match-registry\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { AssetRenderError } from \"./AssetRenderError\";\n\nexport * from \"./AssetRenderError\";\n\nexport type AssetRegistryType = Registry<React.ComponentType<any>>;\n\nexport interface ContextType {\n /**\n * A registry of Asset -> React Components\n */\n registry?: AssetRegistryType;\n}\n\nexport const AssetContext: React.Context<ContextType> =\n React.createContext<ContextType>({});\n\nconst isAssetUnwrapped = (\n props: AssetType<string> | AssetWrapper<AssetType<string>>,\n): props is AssetType<string> => {\n return \"type\" in props && \"id\" in props;\n};\n\n/**\n * A React Component that looks up an implementation from a registry\n */\nexport const ReactAsset = (\n props: AssetType<string> | AssetWrapper<AssetType<string>>,\n): React.ReactElement => {\n const { registry } = React.useContext(AssetContext);\n\n let unwrapped: AssetType<string> | undefined;\n\n if (isAssetUnwrapped(props)) {\n unwrapped = props;\n } else if (\"asset\" in props) {\n unwrapped = props.asset;\n }\n\n if (!unwrapped) {\n throw Error(\n `Cannot determine asset type for props: ${JSON.stringify(props)}`,\n );\n }\n\n if (typeof unwrapped !== \"object\") {\n throw Error(\n `Asset was not an object got (${typeof unwrapped}) instead: ${unwrapped}`,\n );\n }\n\n if (unwrapped.type === undefined) {\n const info =\n unwrapped.id === undefined\n ? JSON.stringify(props)\n : `id: ${unwrapped.id}`;\n throw Error(`Asset is missing type for ${info}`);\n }\n\n if (!registry || registry.isRegistryEmpty()) {\n throw Error(`No asset found in registry. This could happen for one of the following reasons: \\n\n 1. You might have no assets registered or no plugins added to the Player instance. \\n\n 2. You might have mismatching versions of React Asset Registry Context. \\n\n See https://player-ui.github.io/latest/tools/cli#player-dependency-versions-check for tips about how to debug and fix this problem`);\n }\n\n const Impl = registry?.get(unwrapped);\n\n if (!Impl) {\n const matchList: object[] = [];\n\n registry.forEach((asset) => {\n matchList.push(asset.key);\n });\n\n const typeList = matchList.map(\n (match) => JSON.parse(JSON.stringify(match)).type,\n );\n\n const similarType = typeList.reduce((prev, curr) => {\n const next = {\n value: leven(unwrapped.type, curr),\n type: curr,\n };\n\n if (prev !== undefined && prev.value < next.value) {\n return prev;\n }\n\n return next;\n }, undefined);\n\n throw Error(\n `No implementation found for id: ${unwrapped.id} type: ${unwrapped.type}. Did you mean ${similarType.type}? \\n \n Registered Asset matching functions are listed below: \\n\n ${JSON.stringify(matchList)}`,\n );\n }\n\n return (\n <ErrorBoundary\n fallbackRender={(props) => {\n const { error } = props;\n\n if (error instanceof AssetRenderError) {\n error.addAssetParent(unwrapped);\n throw error;\n } else {\n throw new AssetRenderError(\n unwrapped,\n \"Failed to render asset\",\n error,\n );\n }\n return null;\n }}\n >\n <Impl key={unwrapped.id} {...unwrapped} />\n </ErrorBoundary>\n );\n};\n","import {\n ErrorSeverity,\n ErrorTypes,\n type Asset,\n type PlayerErrorMetadata,\n} from \"@player-ui/player\";\n\nexport type AssetRenderErrorMetadata = {\n assetId: string;\n};\nexport class AssetRenderError\n extends Error\n implements PlayerErrorMetadata<AssetRenderErrorMetadata>\n{\n private assetParentPath: Array<Asset> = [];\n initialMessage: string;\n innerExceptionMessage: string;\n\n readonly type: string = ErrorTypes.RENDER;\n readonly severity: ErrorSeverity = ErrorSeverity.ERROR;\n readonly metadata: AssetRenderErrorMetadata;\n\n constructor(\n readonly rootAsset: Asset,\n message?: string,\n readonly innerException?: unknown,\n ) {\n super(message);\n this.metadata = {\n assetId: rootAsset.id,\n };\n this.initialMessage = message ?? \"\";\n this.innerExceptionMessage =\n innerException instanceof Error\n ? innerException.message\n : String(innerException);\n\n if (this.innerExceptionMessage) {\n this.initialMessage = this.initialMessage.concat(\n \"\\nCaused by: \",\n this.innerExceptionMessage,\n );\n }\n\n this.message = this.initialMessage;\n }\n\n private updateMessage() {\n this.message = `${this.initialMessage}\n${this.getAssetPathMessage()}\n`;\n }\n\n getAssetPathMessage() {\n return `Exception occurred in asset with id '${this.rootAsset.id}' of type '${this.rootAsset.type}'${this.assetParentPath.map((c) => `\\n\\tFound in (id: '${c.id}', type: '${c.type}')`)}`;\n }\n\n addAssetParent(asset: Asset): void {\n this.assetParentPath.push(asset);\n this.updateMessage();\n }\n}\n","import React from \"react\";\nimport type { Player, NavigationFlowViewState } from \"@player-ui/player\";\n\nexport interface PlayerContextType {\n /**\n * An instance of a headless player\n */\n player?: Player;\n\n /** The currently rendered view state */\n viewState?: NavigationFlowViewState;\n}\n\nexport const PlayerContext = React.createContext<PlayerContextType>({});\n\n/**\n * A hook to get the current player\n */\nexport const usePlayer = () => {\n const { player } = React.useContext(PlayerContext);\n\n return player;\n};\n","import type { Logger } from \"@player-ui/player\";\nimport { NoopLogger } from \"@player-ui/player\";\nimport { usePlayer } from \"./player-context\";\n\nconst noopLogger = new NoopLogger();\n\n/**\n * A hook to get the logger instance from the current player\n */\nexport function useLogger(): Logger {\n const player = usePlayer();\n\n return player?.logger ?? noopLogger;\n}\n","import type { Asset } from \"@player-ui/player\";\n\n/** Common props for any dom node */\nexport function useAssetProps(asset: Asset) {\n return {\n id: asset.id,\n \"data-asset-type\": asset.type,\n };\n}\n","/**\n * Trim leading and trailing slashes from string\n */\nexport function trimSlashes(str: string) {\n return str.replace(/^\\/+|\\/+$/g, \"\");\n}\n\n/**\n * Removes any key: value pairs from an object when the value is null or undefined\n */\nexport function removeEmptyValuesFromObject(\n obj: Record<string, any>,\n): Record<string, NonNullable<any>> {\n return Object.keys(obj).reduce(\n (acc, key) => {\n const value = obj[key];\n\n if (value !== null && value !== undefined) {\n acc[key] = value;\n }\n\n return acc;\n },\n {} as Record<string, any>,\n );\n}\n\n/** Check if the object has no keys */\nexport function isEmptyObject(obj: Record<string, unknown>) {\n return Object.keys(obj).length === 0 && obj.constructor === Object;\n}\n\n/** Check if the argument is a function */\nexport function isFunction<ReturnType>(\n maybeFn: ReturnType | ((...args: unknown[]) => ReturnType),\n): maybeFn is (...args: unknown[]) => ReturnType {\n return Boolean(maybeFn instanceof Function || typeof maybeFn === \"function\");\n}\n\n/**\n * Calls function with provided data or returns original value\n */\nexport function callOrReturn<\n ReturnType,\n FnArgs extends Array<unknown> = unknown[],\n FnType = (...args: FnArgs) => ReturnType,\n>(maybeFn: FnType | ReturnType, fnArgs: FnArgs): ReturnType {\n if (isFunction(maybeFn)) {\n return maybeFn(fnArgs) as ReturnType;\n }\n\n return maybeFn as ReturnType;\n}\n","import { isEmptyObject } from \"./helpers\";\n\n/**\n * Combines a URL with any additional parameters\n */\nexport function buildUrl(\n url: string,\n params: Record<string, unknown> = {},\n): string {\n const baseUrl = new URL(url);\n\n if (params && isEmptyObject(params)) {\n return baseUrl.toString();\n }\n\n Object.keys(params).forEach((key) => {\n const value = params[key];\n baseUrl.searchParams.append(key, String(value));\n });\n\n return baseUrl.toString();\n}\n","import { usePlayer } from \"./player-context\";\n\n/** Hook to get a constant under a specific namespace */\nexport function useGetConstantByType(type: string, key: string): unknown {\n const player = usePlayer();\n\n return player?.constantsController.getConstants(key, type);\n}\n\n/** Get a constant under the default namespace */\nexport function useGetConstant(key: string): unknown {\n const player = usePlayer();\n\n return player?.constantsController.getConstants(key, \"constants\");\n}\n","import React from \"react\";\nimport type { View } from \"@player-ui/player\";\nimport { ReactAsset } from \"./asset\";\n\nexport interface ReactPlayerProps {\n /**\n * The Content view object to render\n */\n view: View;\n}\n\n/**\n * The entry for the ReactPlayer's React tree\n */\nexport const ReactPlayer = ({ view }: ReactPlayerProps) => {\n return <ReactAsset {...view} />;\n};\n","import type { Player, PlayerPlugin, ViewInstance } from \"@player-ui/player\";\n\nexport type OnUpdateCallback = (update: any) => void;\n\n/**\n * A plugin that listens for view updates and publishes an event for when a view is updated\n */\nexport class OnUpdatePlugin implements PlayerPlugin {\n name = \"view-update\";\n\n private readonly onUpdateCallback: OnUpdateCallback;\n\n constructor(onUpdate: OnUpdateCallback) {\n this.onUpdateCallback = onUpdate;\n }\n\n apply(player: Player) {\n /** Trigger the callback for the view update */\n const updateTap = (updatedView: any) => {\n this.onUpdateCallback(updatedView);\n };\n\n /** Trigger the callback for the view creation */\n const viewTap = (view: ViewInstance) => {\n view.hooks.onUpdate.tap(this.name, updateTap);\n };\n\n // Attach hooks for any new vc that gets created\n player.hooks.view.tap(this.name, viewTap);\n\n // Attach listeners and publish an update event for a view already in progress\n const currentPlayerState = player.getState();\n\n if (currentPlayerState.status === \"in-progress\") {\n const { currentView } = currentPlayerState.controllers.view;\n\n if (currentView) {\n viewTap(currentView);\n const { lastUpdate } = currentView;\n\n if (lastUpdate) {\n this.onUpdateCallback(lastUpdate);\n }\n }\n }\n }\n}\n","import type { Player, PlayerFlowState } from \"@player-ui/player\";\nimport { NOT_STARTED_STATE } from \"@player-ui/player\";\nimport React from \"react\";\nimport type { ReactPlayerOptions } from \"./player\";\nimport { ReactPlayer } from \"./player\";\nimport { StateTapPlugin } from \"./plugins/tapstate-plugin\";\n\nexport interface UseReactPlayerReturn {\n /** The web-player instance */\n reactPlayer: ReactPlayer;\n /** Player instance */\n player: Player;\n /** The state of Player */\n playerState: PlayerFlowState;\n}\n\n/**\n * The `useReactPlayer` hook is an easy way to integrate the web-player into your React app.\n * Simply supply your config, plugins, and an optional flow, which will be automatically started for you when changed.\n */\nexport const useReactPlayer = (\n options?: ReactPlayerOptions,\n): UseReactPlayerReturn => {\n const [playerState, setPlayerState] =\n React.useState<PlayerFlowState>(NOT_STARTED_STATE);\n\n const reactPlayer = React.useMemo(() => {\n const rp = new ReactPlayer({\n player: options?.player,\n plugins: [\n ...(options?.plugins ?? []),\n new StateTapPlugin(setPlayerState),\n ],\n });\n\n return rp;\n }, []);\n\n const { player } = reactPlayer;\n\n return {\n reactPlayer,\n player,\n playerState,\n };\n};\n","import type { PlayerFlowState, Player } from \"@player-ui/player\";\nimport type { ReactPlayerPlugin } from \"../player\";\n\n/**\n * A plugin to tap into state transition changes and call an arbitrary update function\n */\nexport class StateTapPlugin implements ReactPlayerPlugin {\n name = \"statetap\";\n private callbackFunction: (state: PlayerFlowState) => void;\n\n constructor(callback: (state: PlayerFlowState) => void) {\n this.callbackFunction = callback;\n }\n\n apply(player: Player) {\n player.hooks.state.tap(\"usePlayer\", (newPlayerState: PlayerFlowState) => {\n this.callbackFunction(newPlayerState);\n });\n }\n}\n","import React from \"react\";\nimport { useSyncExternalStore } from \"use-sync-external-store/shim\";\nimport type {\n FlowManager,\n ManagedPlayerProps,\n ManagedPlayerState,\n ManagerMiddleware,\n ManagedPlayerContext,\n} from \"./types\";\nimport type { StartOptions } from \"@player-ui/player\";\nimport { useRequestTime } from \"./request-time\";\nimport type { ReactPlayerOptions } from \"../player\";\nimport { ReactPlayer } from \"../player\";\n\n/** noop middleware */\nfunction identityMiddleware<T>(next: Promise<T>) {\n return next;\n}\n\ninterface ManagedPlayerStateKey {\n /** the storage key for the state (outside of the react tree) */\n _key: symbol;\n}\n\nexport type StateChangeCallback = (state?: ManagedPlayerState) => void;\n\n/**\n * An object to store the state of the managed player\n */\nclass ManagedState {\n public state?: ManagedPlayerState;\n private callbacks: Array<StateChangeCallback>;\n private middleware?: ManagerMiddleware;\n\n constructor({\n middleware,\n }: {\n /** middleware to use in the managed player */\n middleware?: ManagerMiddleware;\n }) {\n this.middleware = middleware;\n this.callbacks = [];\n }\n\n /** Add a listener to state changes */\n public addListener(callback: StateChangeCallback): () => void {\n this.callbacks.push(callback);\n\n return () => {\n this.callbacks = this.callbacks.filter((s) => s !== callback);\n };\n }\n\n /** start the managed flow */\n public start(options: {\n /** the flow manager to use */\n manager: FlowManager;\n\n /** the config to use when creating a player */\n playerConfig: ReactPlayerOptions;\n\n /** options forwarded to `player.start()` for each flow */\n startOptions?: StartOptions;\n }): this {\n const initialState: ManagedPlayerState = {\n value: \"not_started\",\n context: {\n playerConfig: options.playerConfig,\n reactPlayer: new ReactPlayer(options.playerConfig),\n manager: options.manager,\n startOptions: options.startOptions,\n },\n };\n\n this.setState(initialState);\n\n return this;\n }\n\n /** reset starts from nothing */\n public reset(): void {\n if (this.state?.value === \"error\") {\n const { playerConfig, manager, startOptions } = this.state.context;\n this.start({ playerConfig, manager, startOptions });\n } else {\n throw new Error(\"Flow must be in error state to reset\");\n }\n }\n\n /** restart starts from the last result */\n public restart(): void {\n if (this.state?.value === \"error\") {\n const { playerConfig, manager, prevResult, reactPlayer, startOptions } =\n this.state.context;\n this.setState({\n value: \"completed\",\n context: {\n playerConfig,\n manager,\n result: prevResult,\n reactPlayer,\n startOptions,\n },\n });\n } else {\n throw new Error(\"Flow must be in error state to restart\");\n }\n }\n\n private async setState(state: ManagedPlayerState) {\n this.state = state;\n this.callbacks.forEach((c) => {\n if (c && typeof c === \"function\") {\n c(this.state);\n }\n });\n\n const { manager, reactPlayer, playerConfig, startOptions } = state.context;\n\n try {\n const nextState = await this.processState(state, {\n manager,\n reactPlayer,\n playerConfig,\n startOptions,\n });\n\n if (nextState) {\n this.setState(nextState);\n }\n } catch (e) {\n this.setState({\n value: \"error\",\n context: {\n manager,\n reactPlayer,\n playerConfig,\n startOptions,\n error: e as Error,\n },\n });\n }\n }\n\n private async processState(\n state: ManagedPlayerState,\n context: ManagedPlayerContext,\n ): Promise<ManagedPlayerState | undefined> {\n if (state.value === \"not_started\" || state.value === \"completed\") {\n const prevResult =\n state.value === \"completed\" ? state.context.result : undefined;\n\n const middleware = this.middleware?.next ?? identityMiddleware;\n\n return {\n value: \"pending\",\n context: {\n ...context,\n prevResult,\n next: middleware(state.context.manager.next(prevResult)),\n },\n };\n }\n\n if (state.value === \"pending\") {\n const nextResult = await state.context.next;\n\n if (nextResult.done) {\n return {\n value: \"ended\",\n context: {\n ...context,\n result: state.context.prevResult,\n },\n };\n }\n\n return {\n value: \"loaded\",\n context: {\n ...context,\n prevResult: state.context.prevResult,\n flow: nextResult.value,\n },\n };\n }\n\n if (state.value === \"loaded\") {\n return {\n value: \"running\",\n context: {\n ...context,\n flow: state.context.flow,\n prevResult: state.context.prevResult,\n result: state.context.reactPlayer.start(\n state.context.flow,\n state.context.startOptions,\n ),\n },\n };\n }\n\n if (state.value === \"running\") {\n const result = await state.context.result;\n\n return {\n value: \"completed\",\n context: {\n ...context,\n result,\n },\n };\n }\n }\n}\n\nconst managedPlayerStateMachines = new WeakMap<\n ManagedPlayerStateKey,\n ManagedState\n>();\n\nfunction createKey(): ManagedPlayerStateKey {\n return {\n _key: Symbol(\"managed-player\"),\n };\n}\n\n/** Creates an x-state state machine that persists when this component is no longer renders (due to Suspense) */\nexport const usePersistentStateMachine = (options: {\n /** the flow manager to use */\n manager: FlowManager;\n\n /** Player config */\n playerConfig: ReactPlayerOptions;\n\n /** Any middleware for the manager */\n middleware?: ManagerMiddleware;\n\n /** Options forwarded to `player.start()` for each flow */\n startOptions?: StartOptions;\n}): { managedState: ManagedState; state?: ManagedPlayerState } => {\n const mounted = React.useRef(false);\n const previousManager = React.useRef(options.manager);\n const keyRef = React.useRef<ManagedPlayerStateKey>(createKey());\n const managedStateRef = React.useRef(\n new ManagedState({ middleware: options.middleware }),\n );\n\n if (!mounted.current) {\n managedPlayerStateMachines.set(keyRef.current, managedStateRef.current);\n mounted.current = true;\n }\n\n if (previousManager.current !== options.manager) {\n const oldManagedState = managedPlayerStateMachines.get(keyRef.current);\n\n /**\n * We have to handle terminate here as well as the useEffect in the\n * ManagedPlayer since it won't have the instance of the previous manager\n */\n if (oldManagedState) {\n const playerState =\n oldManagedState.state?.context.reactPlayer.player.getState();\n\n if (\n oldManagedState.state?.value === \"running\" &&\n playerState?.status === \"in-progress\"\n ) {\n previousManager.current.terminate?.(playerState);\n }\n }\n\n const newKey = createKey();\n const newManagedState = new ManagedState({\n middleware: options.middleware,\n });\n\n managedPlayerStateMachines.set(newKey, newManagedState);\n keyRef.current = newKey;\n managedStateRef.current = newManagedState;\n previousManager.current = options.manager;\n }\n\n const managedState =\n managedPlayerStateMachines.get(keyRef.current) ?? managedStateRef.current;\n\n /**\n * There are times where the managedState the external store references no\n * longer exists, so we have to wrap instead of calling addListener directly.\n */\n function subscription(callback: (val?: ManagedPlayerState) => void) {\n if (managedState) {\n const unsub = managedState.addListener((s) => {\n callback(s);\n });\n\n return () => {\n if (managedState) {\n unsub();\n }\n };\n }\n\n return () => {};\n }\n\n function getSnapshot() {\n return managedState.state;\n }\n\n const state = useSyncExternalStore(\n subscription,\n getSnapshot,\n () => undefined,\n );\n\n /**\n * This needs to come after useSyncExternalStore, otherwise it causes\n * a weird state update and none of the refs in this hook persist\n */\n if (managedState.state === undefined) {\n managedState.start(options);\n }\n\n return { managedState, state };\n};\n\n/**\n * A ManagedPlayer is a component responsible for orchestrating multi-flow experiences using Player.\n * Provide a valid `FlowManager` to handle fetching the next flow.\n *\n * `suspense` must be enabled to wait for results in flight.\n */\nexport const ManagedPlayer = (\n props: ManagedPlayerProps,\n): React.JSX.Element | null => {\n const { withRequestTime, RequestTimeMetricsPlugin } = useRequestTime();\n\n const { state, managedState } = usePersistentStateMachine({\n manager: props.manager,\n middleware: { next: withRequestTime },\n playerConfig: {\n plugins: [...(props?.plugins ?? []), RequestTimeMetricsPlugin],\n player: props.player,\n },\n startOptions: props.startOptions,\n });\n\n const previousState = React.useRef<ManagedPlayerState | undefined>();\n\n if (state?.value !== previousState.current?.value) {\n if (state?.value === \"ended\") {\n props.onComplete?.(state?.context.result);\n } else if (state?.value === \"error\") {\n props.onError?.(state?.context.error);\n } else if (state?.value === \"running\") {\n props.onStartedFlow?.(state.context.flow);\n }\n }\n\n previousState.current = state;\n\n React.useEffect(() => {\n return () => {\n const playerState = state?.context.reactPlayer.player.getState();\n\n if (state?.value === \"running\" && playerState?.status === \"in-progress\") {\n props.manager.terminate?.(playerState);\n }\n };\n }, [props.manager, state?.context.reactPlayer.player, state?.value]);\n\n if (state?.value === \"error\") {\n if (props.fallbackComponent) {\n return (\n <props.fallbackComponent\n reset={() => {\n managedState.reset();\n }}\n retry={() => {\n managedState.restart();\n }}\n error={state.context.error}\n />\n );\n }\n\n if (!props.onError) {\n throw state.context.error;\n }\n }\n\n if (state?.context.reactPlayer) {\n const { Component } = state.context.reactPlayer;\n\n return <Component />;\n }\n\n return null;\n};\n","import { useCallback, useEffect, useRef, useMemo } from \"react\";\nimport type { Player } from \"@player-ui/player\";\nimport type { MetricsCorePlugin } from \"@player-ui/metrics-plugin\";\nimport {\n MetricsCorePluginSymbol,\n RequestTimeWebPlugin,\n} from \"@player-ui/metrics-plugin\";\nimport type { ReactPlayerPlugin } from \"../player\";\n\ntype RequestTime = {\n /** request start time */\n start?: number;\n /** request end time */\n end?: number;\n};\n\n/** hook to time a promise and add it to the metrics plugin */\nexport const useRequestTime = () => {\n const requestTimeRef = useRef<RequestTime>({});\n\n useEffect(() => {\n return () => {\n requestTimeRef.current = {};\n };\n }, [requestTimeRef]);\n\n const getRequestTime = useCallback(() => {\n const { end, start } = requestTimeRef.current;\n\n if (end && start) {\n return end - start;\n }\n }, [requestTimeRef]);\n\n /** wrap a promise with tracking it's time in flight */\n function withRequestTime<Type>(nextPromise: Promise<Type>): Promise<Type> {\n const getTime = typeof performance === \"undefined\" ? Date : performance;\n requestTimeRef.current = { start: getTime.now() };\n\n return nextPromise.finally(() => {\n requestTimeRef.current = {\n ...requestTimeRef.current,\n end: getTime.now(),\n };\n });\n }\n\n const RequestTimeMetricsPlugin: ReactPlayerPlugin = useMemo(() => {\n return {\n name: \"RequestTimeMetricsPlugin\",\n apply(player: Player): void {\n player.applyTo<MetricsCorePlugin>(\n MetricsCorePluginSymbol,\n (metricsCorePlugin) => {\n new RequestTimeWebPlugin(getRequestTime).apply(metricsCorePlugin);\n },\n );\n },\n };\n }, [getRequestTime]);\n\n return { withRequestTime, RequestTimeMetricsPlugin };\n};\n"],"mappings":"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","names":["ReactPlayer","import_react","import_player","import_react_error_boundary","React","leven","props","import_react","React","import_player","import_react","React","React","ReactPlayer","import_player","import_react","React","ReactPlayer","import_react","import_react","ReactPlayer","React"]}
1
+ {"version":3,"sources":["../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/index.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/player.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/asset/index.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/asset/AssetRenderError.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/utils/player-context.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/utils/use-logger.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/utils/use-asset-props.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/utils/helpers.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/utils/url.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/utils/shared-constants.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/app.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/plugins/onupdate-plugin.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/hooks.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/plugins/tapstate-plugin.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/manager/managed-player.tsx","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/manager/request-time.tsx"],"sourcesContent":["export * from \"@player-ui/player\";\nexport * from \"./player\";\nexport * from \"./hooks\";\nexport * from \"./manager/managed-player\";\nexport * from \"./manager/request-time\";\nexport * from \"./manager/types\";\nexport * from \"./asset\";\nexport * from \"./utils\";\n","import React from \"react\";\nimport { SyncWaterfallHook, AsyncParallelHook } from \"tapable-ts\";\nimport { Subscribe, useSubscribedState } from \"@player-ui/react-subscribe\";\nimport { Registry } from \"@player-ui/partial-match-registry\";\nimport type {\n CompletedState,\n PlayerPlugin,\n Flow,\n View,\n PlayerInfo,\n} from \"@player-ui/player\";\nimport { Player } from \"@player-ui/player\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport type { AssetRegistryType } from \"./asset\";\nimport { AssetContext } from \"./asset\";\nimport { PlayerContext } from \"./utils\";\n\nimport type { ReactPlayerProps } from \"./app\";\nimport { ReactPlayer as PlayerComp } from \"./app\";\nimport { OnUpdatePlugin } from \"./plugins/onupdate-plugin\";\n\nexport interface DevtoolsGlobals {\n /** A global for a plugin to load to Player for devtools */\n __PLAYER_DEVTOOLS_PLUGIN?: {\n new (): ReactPlayerPlugin;\n };\n}\n\nexport type DevtoolsWindow = typeof window & DevtoolsGlobals;\n\nconst _window: DevtoolsWindow | undefined =\n typeof window === \"undefined\" ? undefined : window;\n\n// Alias until more properties are added\nexport type ReactPlayerInfo = PlayerInfo;\n\nexport interface ReactPlayerPlugin extends Partial<PlayerPlugin> {\n /** The name of this plugin */\n name: string;\n\n /**\n * Attach listeners to the web-player instance\n */\n applyReact?: (reactPlayer: ReactPlayer) => void;\n}\n\nexport interface ReactPlayerOptions {\n /** A headless player instance to use */\n player?: Player;\n\n /** A set of plugins to apply to this player */\n plugins?: Array<ReactPlayerPlugin>;\n}\n\nexport type ReactPlayerComponentProps = Record<string, unknown>;\n\n/** A Player that renders UI through React */\nexport class ReactPlayer {\n public readonly options: ReactPlayerOptions;\n public readonly player: Player;\n public readonly assetRegistry: AssetRegistryType = new Registry();\n public readonly Component: React.ComponentType<ReactPlayerComponentProps>;\n public readonly hooks: {\n /**\n * A hook to create a React Component to be used for Player, regardless of the current flow state\n */\n webComponent: SyncWaterfallHook<[React.ComponentType], Record<string, any>>;\n /**\n * A hook to create a React Component that's used to render a specific view.\n * It will be called for each view update from the core player.\n * Typically this will just be `Asset`\n */\n playerComponent: SyncWaterfallHook<\n [React.ComponentType<ReactPlayerProps>],\n Record<string, any>\n >;\n /**\n * A hook to execute async tasks before the view resets to undefined\n */\n onBeforeViewReset: AsyncParallelHook<[], Record<string, any>>;\n } = {\n /**\n * A hook to create a React Component to be used for Player, regardless of the current flow state\n */\n webComponent: new SyncWaterfallHook(),\n\n /**\n * A hook to create a React Component that's used to render a specific view.\n * It will be called for each view update from the core player.\n * Typically this will just be `Asset`\n */\n playerComponent: new SyncWaterfallHook(),\n\n /**\n * A hook to execute async tasks before the view resets to undefined\n */\n onBeforeViewReset: new AsyncParallelHook(),\n };\n\n public readonly viewUpdateSubscription = new Subscribe<View>();\n private reactPlayerInfo: ReactPlayerInfo;\n\n constructor(options?: ReactPlayerOptions) {\n this.options = options ?? {};\n\n const Devtools = _window?.__PLAYER_DEVTOOLS_PLUGIN;\n const onUpdatePlugin = new OnUpdatePlugin(\n this.viewUpdateSubscription.publish,\n );\n\n const plugins = options?.plugins ?? [];\n\n if (Devtools) {\n plugins.push(new Devtools());\n }\n\n const playerPlugins = plugins.filter((p) =>\n Boolean(p.apply),\n ) as PlayerPlugin[];\n\n this.player = options?.player ?? new Player({ plugins: playerPlugins });\n\n plugins.forEach((plugin) => {\n if (plugin.applyReact) {\n plugin.applyReact(this);\n }\n });\n\n onUpdatePlugin.apply(this.player);\n\n this.Component = this.createReactPlayerComponent();\n this.reactPlayerInfo = {\n version: this.player.getVersion(),\n commit: this.player.getCommit(),\n };\n }\n\n /** Returns the current version Player */\n public getPlayerVersion(): string {\n return this.reactPlayerInfo.version;\n }\n\n /** Returns the git commit used to build this Player version */\n public getPlayerCommit(): string {\n return this.reactPlayerInfo.commit;\n }\n\n /** Find instance of [Plugin] that has been registered to the web player */\n public findPlugin<Plugin extends ReactPlayerPlugin>(\n symbol: symbol,\n ): Plugin | undefined {\n return this.options.plugins?.find((el) => el.symbol === symbol) as Plugin;\n }\n\n /** Register and apply [Plugin] if one with the same symbol is not already registered. */\n public registerPlugin(plugin: ReactPlayerPlugin): void {\n if (!plugin.applyReact) return;\n\n plugin.applyReact(this);\n this.options.plugins?.push(plugin);\n }\n\n /**\n * Returns the current version of the running React Player\n * @deprecated use `getPlayerVersion()` instead. Will be removed next major\n */\n public getReactPlayerVersion(): string {\n return this.reactPlayerInfo.version;\n }\n\n /**\n * Returns the git commit used to build the React Player version\n * @deprecated use `getPlayerCommit()` instead. Will be removed next major\n */\n public getReactPlayerCommit(): string {\n return this.reactPlayerInfo.commit;\n }\n\n private createReactPlayerComponent(): React.ComponentType<ReactPlayerComponentProps> {\n const BaseComp = this.hooks.webComponent.call(this.createReactComp());\n\n /** Wrap the Error boundary and context provider after the hook call to catch anything wrapped by the hook */\n const ReactPlayerComponent = (props: ReactPlayerComponentProps) => {\n return (\n <ErrorBoundary\n fallbackRender={() => null}\n onError={(err) => {\n const playerState = this.player.getState();\n\n if (playerState.status === \"in-progress\") {\n playerState.fail(err);\n }\n }}\n >\n <PlayerContext.Provider value={{ player: this.player }}>\n <BaseComp {...props} />\n </PlayerContext.Provider>\n </ErrorBoundary>\n );\n };\n\n return ReactPlayerComponent;\n }\n\n private createReactComp(): React.ComponentType<ReactPlayerComponentProps> {\n const ActualPlayerComp = this.hooks.playerComponent.call(PlayerComp);\n\n /** the component to use to render the player */\n const WebPlayerComponent = () => {\n const view = useSubscribedState<View>(this.viewUpdateSubscription);\n this.viewUpdateSubscription.suspend();\n\n return (\n <AssetContext.Provider\n value={{\n registry: this.assetRegistry,\n }}\n >\n {view && <ActualPlayerComp view={view} />}\n </AssetContext.Provider>\n );\n };\n\n return WebPlayerComponent;\n }\n\n /**\n * Call this method to force the ReactPlayer to wait for the next view-update before performing the next render.\n * If the `suspense` option is set, this will suspend while an update is pending, otherwise nothing will be rendered.\n */\n public setWaitForNextViewUpdate(): Promise<void> {\n const shouldCallResetHook = this.hooks.onBeforeViewReset.isUsed();\n\n return this.viewUpdateSubscription.reset(\n shouldCallResetHook ? this.hooks.onBeforeViewReset.call() : undefined,\n );\n }\n\n public start(flow: Flow): Promise<CompletedState> {\n this.setWaitForNextViewUpdate();\n\n return this.player.start(flow).finally(async () => {\n await this.setWaitForNextViewUpdate();\n });\n }\n}\n\n// For compatibility\nexport const WebPlayer: typeof ReactPlayer = ReactPlayer;\n","import React from \"react\";\nimport leven from \"leven\";\nimport type { Asset as AssetType, AssetWrapper } from \"@player-ui/player\";\nimport type { Registry } from \"@player-ui/partial-match-registry\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { AssetRenderError } from \"./AssetRenderError\";\n\nexport * from \"./AssetRenderError\";\n\nexport type AssetRegistryType = Registry<React.ComponentType<any>>;\n\nexport interface ContextType {\n /**\n * A registry of Asset -> React Components\n */\n registry?: AssetRegistryType;\n}\n\nexport const AssetContext: React.Context<ContextType> =\n React.createContext<ContextType>({});\n\nconst isAssetUnwrapped = (\n props: AssetType<string> | AssetWrapper<AssetType<string>>,\n): props is AssetType<string> => {\n return \"type\" in props && \"id\" in props;\n};\n\n/**\n * A React Component that looks up an implementation from a registry\n */\nexport const ReactAsset = (\n props: AssetType<string> | AssetWrapper<AssetType<string>>,\n): React.ReactElement => {\n const { registry } = React.useContext(AssetContext);\n\n let unwrapped: AssetType<string> | undefined;\n\n if (isAssetUnwrapped(props)) {\n unwrapped = props;\n } else if (\"asset\" in props) {\n unwrapped = props.asset;\n }\n\n if (!unwrapped) {\n throw Error(\n `Cannot determine asset type for props: ${JSON.stringify(props)}`,\n );\n }\n\n if (typeof unwrapped !== \"object\") {\n throw Error(\n `Asset was not an object got (${typeof unwrapped}) instead: ${unwrapped}`,\n );\n }\n\n if (unwrapped.type === undefined) {\n const info =\n unwrapped.id === undefined\n ? JSON.stringify(props)\n : `id: ${unwrapped.id}`;\n throw Error(`Asset is missing type for ${info}`);\n }\n\n if (!registry || registry.isRegistryEmpty()) {\n throw Error(`No asset found in registry. This could happen for one of the following reasons: \\n\n 1. You might have no assets registered or no plugins added to the Player instance. \\n\n 2. You might have mismatching versions of React Asset Registry Context. \\n\n See https://player-ui.github.io/latest/tools/cli#player-dependency-versions-check for tips about how to debug and fix this problem`);\n }\n\n const Impl = registry?.get(unwrapped);\n\n if (!Impl) {\n const matchList: object[] = [];\n\n registry.forEach((asset) => {\n matchList.push(asset.key);\n });\n\n const typeList = matchList.map(\n (match) => JSON.parse(JSON.stringify(match)).type,\n );\n\n const similarType = typeList.reduce((prev, curr) => {\n const next = {\n value: leven(unwrapped.type, curr),\n type: curr,\n };\n\n if (prev !== undefined && prev.value < next.value) {\n return prev;\n }\n\n return next;\n }, undefined);\n\n throw Error(\n `No implementation found for id: ${unwrapped.id} type: ${unwrapped.type}. Did you mean ${similarType.type}? \\n \n Registered Asset matching functions are listed below: \\n\n ${JSON.stringify(matchList)}`,\n );\n }\n\n return (\n <ErrorBoundary\n fallbackRender={(props) => {\n const { error } = props;\n if (error instanceof AssetRenderError) {\n error.addAssetParent(unwrapped);\n throw error;\n } else {\n throw new AssetRenderError(\n unwrapped,\n \"Failed to render asset\",\n error,\n );\n }\n }}\n >\n <Impl key={unwrapped.id} {...unwrapped} />\n </ErrorBoundary>\n );\n};\n","import type { Asset } from \"@player-ui/player\";\n\nexport class AssetRenderError extends Error {\n private assetParentPath: Array<Asset> = [];\n initialMessage: string;\n innerExceptionMessage: string;\n\n constructor(\n readonly rootAsset: Asset,\n message?: string,\n readonly innerException?: unknown,\n ) {\n super(message);\n this.initialMessage = message ?? \"\";\n this.innerExceptionMessage =\n innerException instanceof Error\n ? innerException.message\n : String(innerException);\n\n if (this.innerExceptionMessage) {\n this.initialMessage = this.initialMessage.concat(\n \"\\nCaused by: \",\n this.innerExceptionMessage,\n );\n }\n\n this.message = this.initialMessage;\n }\n\n private updateMessage() {\n this.message = `${this.initialMessage}\n${this.getAssetPathMessage()}\n`;\n }\n\n getAssetPathMessage() {\n return `Exception occurred in asset with id '${this.rootAsset.id}' of type '${this.rootAsset.type}'${this.assetParentPath.map((c) => `\\n\\tFound in (id: '${c.id}', type: '${c.type}')`)}`;\n }\n\n addAssetParent(asset: Asset): void {\n this.assetParentPath.push(asset);\n this.updateMessage();\n }\n}\n","import React from \"react\";\nimport type { Player, NavigationFlowViewState } from \"@player-ui/player\";\n\nexport interface PlayerContextType {\n /**\n * An instance of a headless player\n */\n player?: Player;\n\n /** The currently rendered view state */\n viewState?: NavigationFlowViewState;\n}\n\nexport const PlayerContext = React.createContext<PlayerContextType>({});\n\n/**\n * A hook to get the current player\n */\nexport const usePlayer = () => {\n const { player } = React.useContext(PlayerContext);\n\n return player;\n};\n","import type { Logger } from \"@player-ui/player\";\nimport { NoopLogger } from \"@player-ui/player\";\nimport { usePlayer } from \"./player-context\";\n\nconst noopLogger = new NoopLogger();\n\n/**\n * A hook to get the logger instance from the current player\n */\nexport function useLogger(): Logger {\n const player = usePlayer();\n\n return player?.logger ?? noopLogger;\n}\n","import type { Asset } from \"@player-ui/player\";\n\n/** Common props for any dom node */\nexport function useAssetProps(asset: Asset) {\n return {\n id: asset.id,\n \"data-asset-type\": asset.type,\n };\n}\n","/**\n * Trim leading and trailing slashes from string\n */\nexport function trimSlashes(str: string) {\n return str.replace(/^\\/+|\\/+$/g, \"\");\n}\n\n/**\n * Removes any key: value pairs from an object when the value is null or undefined\n */\nexport function removeEmptyValuesFromObject(\n obj: Record<string, any>,\n): Record<string, NonNullable<any>> {\n return Object.keys(obj).reduce(\n (acc, key) => {\n const value = obj[key];\n\n if (value !== null && value !== undefined) {\n acc[key] = value;\n }\n\n return acc;\n },\n {} as Record<string, any>,\n );\n}\n\n/** Check if the object has no keys */\nexport function isEmptyObject(obj: Record<string, unknown>) {\n return Object.keys(obj).length === 0 && obj.constructor === Object;\n}\n\n/** Check if the argument is a function */\nexport function isFunction<ReturnType>(\n maybeFn: ReturnType | ((...args: unknown[]) => ReturnType),\n): maybeFn is (...args: unknown[]) => ReturnType {\n return Boolean(maybeFn instanceof Function || typeof maybeFn === \"function\");\n}\n\n/**\n * Calls function with provided data or returns original value\n */\nexport function callOrReturn<\n ReturnType,\n FnArgs extends Array<unknown> = unknown[],\n FnType = (...args: FnArgs) => ReturnType,\n>(maybeFn: FnType | ReturnType, fnArgs: FnArgs): ReturnType {\n if (isFunction(maybeFn)) {\n return maybeFn(fnArgs) as ReturnType;\n }\n\n return maybeFn as ReturnType;\n}\n","import { isEmptyObject } from \"./helpers\";\n\n/**\n * Combines a URL with any additional parameters\n */\nexport function buildUrl(\n url: string,\n params: Record<string, unknown> = {},\n): string {\n const baseUrl = new URL(url);\n\n if (params && isEmptyObject(params)) {\n return baseUrl.toString();\n }\n\n Object.keys(params).forEach((key) => {\n const value = params[key];\n baseUrl.searchParams.append(key, String(value));\n });\n\n return baseUrl.toString();\n}\n","import { usePlayer } from \"./player-context\";\n\n/** Hook to get a constant under a specific namespace */\nexport function useGetConstantByType(type: string, key: string): unknown {\n const player = usePlayer();\n\n return player?.constantsController.getConstants(key, type);\n}\n\n/** Get a constant under the default namespace */\nexport function useGetConstant(key: string): unknown {\n const player = usePlayer();\n\n return player?.constantsController.getConstants(key, \"constants\");\n}\n","import React from \"react\";\nimport type { View } from \"@player-ui/player\";\nimport { ReactAsset } from \"./asset\";\n\nexport interface ReactPlayerProps {\n /**\n * The Content view object to render\n */\n view: View;\n}\n\n/**\n * The entry for the ReactPlayer's React tree\n */\nexport const ReactPlayer = ({ view }: ReactPlayerProps) => {\n return <ReactAsset {...view} />;\n};\n","import type { Player, PlayerPlugin, ViewInstance } from \"@player-ui/player\";\n\nexport type OnUpdateCallback = (update: any) => void;\n\n/**\n * A plugin that listens for view updates and publishes an event for when a view is updated\n */\nexport class OnUpdatePlugin implements PlayerPlugin {\n name = \"view-update\";\n\n private readonly onUpdateCallback: OnUpdateCallback;\n\n constructor(onUpdate: OnUpdateCallback) {\n this.onUpdateCallback = onUpdate;\n }\n\n apply(player: Player) {\n /** Trigger the callback for the view update */\n const updateTap = (updatedView: any) => {\n this.onUpdateCallback(updatedView);\n };\n\n /** Trigger the callback for the view creation */\n const viewTap = (view: ViewInstance) => {\n view.hooks.onUpdate.tap(this.name, updateTap);\n };\n\n // Attach hooks for any new vc that gets created\n player.hooks.view.tap(this.name, viewTap);\n\n // Attach listeners and publish an update event for a view already in progress\n const currentPlayerState = player.getState();\n\n if (currentPlayerState.status === \"in-progress\") {\n const { currentView } = currentPlayerState.controllers.view;\n\n if (currentView) {\n viewTap(currentView);\n const { lastUpdate } = currentView;\n\n if (lastUpdate) {\n this.onUpdateCallback(lastUpdate);\n }\n }\n }\n }\n}\n","import type { Player, PlayerFlowState } from \"@player-ui/player\";\nimport { NOT_STARTED_STATE } from \"@player-ui/player\";\nimport React from \"react\";\nimport type { ReactPlayerOptions } from \"./player\";\nimport { ReactPlayer } from \"./player\";\nimport { StateTapPlugin } from \"./plugins/tapstate-plugin\";\n\nexport interface UseReactPlayerReturn {\n /** The web-player instance */\n reactPlayer: ReactPlayer;\n /** Player instance */\n player: Player;\n /** The state of Player */\n playerState: PlayerFlowState;\n}\n\n/**\n * The `useReactPlayer` hook is an easy way to integrate the web-player into your React app.\n * Simply supply your config, plugins, and an optional flow, which will be automatically started for you when changed.\n */\nexport const useReactPlayer = (\n options?: ReactPlayerOptions,\n): UseReactPlayerReturn => {\n const [playerState, setPlayerState] =\n React.useState<PlayerFlowState>(NOT_STARTED_STATE);\n\n const reactPlayer = React.useMemo(() => {\n const rp = new ReactPlayer({\n player: options?.player,\n plugins: [\n ...(options?.plugins ?? []),\n new StateTapPlugin(setPlayerState),\n ],\n });\n\n return rp;\n }, []);\n\n const { player } = reactPlayer;\n\n return {\n reactPlayer,\n player,\n playerState,\n };\n};\n","import type { PlayerFlowState, Player } from \"@player-ui/player\";\nimport type { ReactPlayerPlugin } from \"../player\";\n\n/**\n * A plugin to tap into state transition changes and call an arbitrary update function\n */\nexport class StateTapPlugin implements ReactPlayerPlugin {\n name = \"statetap\";\n private callbackFunction: (state: PlayerFlowState) => void;\n\n constructor(callback: (state: PlayerFlowState) => void) {\n this.callbackFunction = callback;\n }\n\n apply(player: Player) {\n player.hooks.state.tap(\"usePlayer\", (newPlayerState: PlayerFlowState) => {\n this.callbackFunction(newPlayerState);\n });\n }\n}\n","import React from \"react\";\nimport { useSyncExternalStore } from \"use-sync-external-store/shim\";\nimport type {\n FlowManager,\n ManagedPlayerProps,\n ManagedPlayerState,\n ManagerMiddleware,\n ManagedPlayerContext,\n} from \"./types\";\nimport { useRequestTime } from \"./request-time\";\nimport type { ReactPlayerOptions } from \"../player\";\nimport { ReactPlayer } from \"../player\";\n\n/** noop middleware */\nfunction identityMiddleware<T>(next: Promise<T>) {\n return next;\n}\n\ninterface ManagedPlayerStateKey {\n /** the storage key for the state (outside of the react tree) */\n _key: symbol;\n}\n\nexport type StateChangeCallback = (state?: ManagedPlayerState) => void;\n\n/**\n * An object to store the state of the managed player\n */\nclass ManagedState {\n public state?: ManagedPlayerState;\n private callbacks: Array<StateChangeCallback>;\n private middleware?: ManagerMiddleware;\n\n constructor({\n middleware,\n }: {\n /** middleware to use in the managed player */\n middleware?: ManagerMiddleware;\n }) {\n this.middleware = middleware;\n this.callbacks = [];\n }\n\n /** Add a listener to state changes */\n public addListener(callback: StateChangeCallback): () => void {\n this.callbacks.push(callback);\n\n return () => {\n this.callbacks = this.callbacks.filter((s) => s !== callback);\n };\n }\n\n /** start the managed flow */\n public start(options: {\n /** the flow manager to use */\n manager: FlowManager;\n\n /** the config to use when creating a player */\n playerConfig: ReactPlayerOptions;\n }): this {\n const initialState: ManagedPlayerState = {\n value: \"not_started\",\n context: {\n playerConfig: options.playerConfig,\n reactPlayer: new ReactPlayer(options.playerConfig),\n manager: options.manager,\n },\n };\n\n this.setState(initialState);\n\n return this;\n }\n\n /** reset starts from nothing */\n public reset(): void {\n if (this.state?.value === \"error\") {\n const { playerConfig, manager } = this.state.context;\n this.start({ playerConfig, manager });\n } else {\n throw new Error(\"Flow must be in error state to reset\");\n }\n }\n\n /** restart starts from the last result */\n public restart(): void {\n if (this.state?.value === \"error\") {\n const { playerConfig, manager, prevResult, reactPlayer } =\n this.state.context;\n this.setState({\n value: \"completed\",\n context: {\n playerConfig,\n manager,\n result: prevResult,\n reactPlayer,\n },\n });\n } else {\n throw new Error(\"Flow must be in error state to restart\");\n }\n }\n\n private async setState(state: ManagedPlayerState) {\n this.state = state;\n this.callbacks.forEach((c) => {\n if (c && typeof c === \"function\") {\n c(this.state);\n }\n });\n\n const { manager, reactPlayer, playerConfig } = state.context;\n\n try {\n const nextState = await this.processState(state, {\n manager,\n reactPlayer,\n playerConfig,\n });\n\n if (nextState) {\n this.setState(nextState);\n }\n } catch (e) {\n this.setState({\n value: \"error\",\n context: {\n manager,\n reactPlayer,\n playerConfig,\n error: e as Error,\n },\n });\n }\n }\n\n private async processState(\n state: ManagedPlayerState,\n context: ManagedPlayerContext,\n ): Promise<ManagedPlayerState | undefined> {\n if (state.value === \"not_started\" || state.value === \"completed\") {\n const prevResult =\n state.value === \"completed\" ? state.context.result : undefined;\n\n const middleware = this.middleware?.next ?? identityMiddleware;\n\n return {\n value: \"pending\",\n context: {\n ...context,\n prevResult,\n next: middleware(state.context.manager.next(prevResult)),\n },\n };\n }\n\n if (state.value === \"pending\") {\n const nextResult = await state.context.next;\n\n if (nextResult.done) {\n return {\n value: \"ended\",\n context: {\n ...context,\n result: state.context.prevResult,\n },\n };\n }\n\n return {\n value: \"loaded\",\n context: {\n ...context,\n prevResult: state.context.prevResult,\n flow: nextResult.value,\n },\n };\n }\n\n if (state.value === \"loaded\") {\n return {\n value: \"running\",\n context: {\n ...context,\n flow: state.context.flow,\n prevResult: state.context.prevResult,\n result: state.context.reactPlayer.start(state.context.flow),\n },\n };\n }\n\n if (state.value === \"running\") {\n const result = await state.context.result;\n\n return {\n value: \"completed\",\n context: {\n ...context,\n result,\n },\n };\n }\n }\n}\n\nconst managedPlayerStateMachines = new WeakMap<\n ManagedPlayerStateKey,\n ManagedState\n>();\n\nfunction createKey(): ManagedPlayerStateKey {\n return {\n _key: Symbol(\"managed-player\"),\n };\n}\n\n/** Creates an x-state state machine that persists when this component is no longer renders (due to Suspense) */\nexport const usePersistentStateMachine = (options: {\n /** the flow manager to use */\n manager: FlowManager;\n\n /** Player config */\n playerConfig: ReactPlayerOptions;\n\n /** Any middleware for the manager */\n middleware?: ManagerMiddleware;\n}): { managedState: ManagedState; state?: ManagedPlayerState } => {\n const mounted = React.useRef(false);\n const previousManager = React.useRef(options.manager);\n const keyRef = React.useRef<ManagedPlayerStateKey>(createKey());\n const managedStateRef = React.useRef(\n new ManagedState({ middleware: options.middleware }),\n );\n\n if (!mounted.current) {\n managedPlayerStateMachines.set(keyRef.current, managedStateRef.current);\n mounted.current = true;\n }\n\n if (previousManager.current !== options.manager) {\n const oldManagedState = managedPlayerStateMachines.get(keyRef.current);\n\n /**\n * We have to handle terminate here as well as the useEffect in the\n * ManagedPlayer since it won't have the instance of the previous manager\n */\n if (oldManagedState) {\n const playerState =\n oldManagedState.state?.context.reactPlayer.player.getState();\n\n if (\n oldManagedState.state?.value === \"running\" &&\n playerState?.status === \"in-progress\"\n ) {\n previousManager.current.terminate?.(\n playerState.controllers.data.serialize(),\n );\n }\n }\n\n const newKey = createKey();\n const newManagedState = new ManagedState({\n middleware: options.middleware,\n });\n\n managedPlayerStateMachines.set(newKey, newManagedState);\n keyRef.current = newKey;\n managedStateRef.current = newManagedState;\n previousManager.current = options.manager;\n }\n\n const managedState =\n managedPlayerStateMachines.get(keyRef.current) ?? managedStateRef.current;\n\n /**\n * There are times where the managedState the external store references no\n * longer exists, so we have to wrap instead of calling addListener directly.\n */\n function subscription(callback: (val?: ManagedPlayerState) => void) {\n if (managedState) {\n const unsub = managedState.addListener((s) => {\n callback(s);\n });\n\n return () => {\n if (managedState) {\n unsub();\n }\n };\n }\n\n return () => {};\n }\n\n function getSnapshot() {\n return managedState.state;\n }\n\n const state = useSyncExternalStore(\n subscription,\n getSnapshot,\n () => undefined,\n );\n\n /**\n * This needs to come after useSyncExternalStore, otherwise it causes\n * a weird state update and none of the refs in this hook persist\n */\n if (managedState.state === undefined) {\n managedState.start(options);\n }\n\n return { managedState, state };\n};\n\n/**\n * A ManagedPlayer is a component responsible for orchestrating multi-flow experiences using Player.\n * Provide a valid `FlowManager` to handle fetching the next flow.\n *\n * `suspense` must be enabled to wait for results in flight.\n */\nexport const ManagedPlayer = (\n props: ManagedPlayerProps,\n): React.JSX.Element | null => {\n const { withRequestTime, RequestTimeMetricsPlugin } = useRequestTime();\n\n const { state, managedState } = usePersistentStateMachine({\n manager: props.manager,\n middleware: { next: withRequestTime },\n playerConfig: {\n plugins: [...(props?.plugins ?? []), RequestTimeMetricsPlugin],\n player: props.player,\n },\n });\n\n const previousState = React.useRef<ManagedPlayerState | undefined>();\n\n if (state?.value !== previousState.current?.value) {\n if (state?.value === \"ended\") {\n props.onComplete?.(state?.context.result);\n } else if (state?.value === \"error\") {\n props.onError?.(state?.context.error);\n } else if (state?.value === \"running\") {\n props.onStartedFlow?.();\n }\n }\n\n previousState.current = state;\n\n React.useEffect(() => {\n return () => {\n const playerState = state?.context.reactPlayer.player.getState();\n\n if (state?.value === \"running\" && playerState?.status === \"in-progress\") {\n props.manager.terminate?.(playerState.controllers.data.serialize());\n }\n };\n }, [props.manager, state?.context.reactPlayer.player, state?.value]);\n\n if (state?.value === \"error\") {\n if (props.fallbackComponent) {\n return (\n <props.fallbackComponent\n reset={() => {\n managedState.reset();\n }}\n retry={() => {\n managedState.restart();\n }}\n error={state.context.error}\n />\n );\n }\n\n if (!props.onError) {\n throw state.context.error;\n }\n }\n\n if (state?.context.reactPlayer) {\n const { Component } = state.context.reactPlayer;\n\n return <Component />;\n }\n\n return null;\n};\n","import { useCallback, useEffect, useRef, useMemo } from \"react\";\nimport type { Player } from \"@player-ui/player\";\nimport type { MetricsCorePlugin } from \"@player-ui/metrics-plugin\";\nimport {\n MetricsCorePluginSymbol,\n RequestTimeWebPlugin,\n} from \"@player-ui/metrics-plugin\";\nimport type { ReactPlayerPlugin } from \"../player\";\n\ntype RequestTime = {\n /** request start time */\n start?: number;\n /** request end time */\n end?: number;\n};\n\n/** hook to time a promise and add it to the metrics plugin */\nexport const useRequestTime = () => {\n const requestTimeRef = useRef<RequestTime>({});\n\n useEffect(() => {\n return () => {\n requestTimeRef.current = {};\n };\n }, [requestTimeRef]);\n\n const getRequestTime = useCallback(() => {\n const { end, start } = requestTimeRef.current;\n\n if (end && start) {\n return end - start;\n }\n }, [requestTimeRef]);\n\n /** wrap a promise with tracking it's time in flight */\n function withRequestTime<Type>(nextPromise: Promise<Type>): Promise<Type> {\n const getTime = typeof performance === \"undefined\" ? Date : performance;\n requestTimeRef.current = { start: getTime.now() };\n\n return nextPromise.finally(() => {\n requestTimeRef.current = {\n ...requestTimeRef.current,\n end: getTime.now(),\n };\n });\n }\n\n const RequestTimeMetricsPlugin: ReactPlayerPlugin = useMemo(() => {\n return {\n name: \"RequestTimeMetricsPlugin\",\n apply(player: Player): void {\n player.applyTo<MetricsCorePlugin>(\n MetricsCorePluginSymbol,\n (metricsCorePlugin) => {\n new RequestTimeWebPlugin(getRequestTime).apply(metricsCorePlugin);\n },\n );\n },\n };\n }, [getRequestTime]);\n\n return { withRequestTime, RequestTimeMetricsPlugin };\n};\n"],"mappings":"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","names":["ReactPlayer","import_react","import_player","import_react_error_boundary","React","leven","props","import_react","React","import_react","React","ReactPlayer","React","import_player","import_react","React","ReactPlayer","import_react","import_react","ReactPlayer","React"]}