@player-ui/react 0.15.0 → 0.15.1--canary.802.31569

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.
@@ -36,6 +36,7 @@ __export(src_exports, {
36
36
  ManagedPlayer: () => ManagedPlayer,
37
37
  PlayerContext: () => PlayerContext,
38
38
  ReactAsset: () => ReactAsset,
39
+ ReactAssetClass: () => ReactAssetClass,
39
40
  ReactPlayer: () => ReactPlayer2,
40
41
  WebPlayer: () => WebPlayer,
41
42
  buildUrl: () => buildUrl,
@@ -168,7 +169,8 @@ var ReactAsset = (props) => {
168
169
  import_react_error_boundary.ErrorBoundary,
169
170
  {
170
171
  fallbackRender: (props2) => {
171
- const { error } = props2;
172
+ const { error, resetErrorBoundary } = props2;
173
+ resetErrorBoundary();
172
174
  if (error instanceof AssetRenderError) {
173
175
  error.addAssetParent(unwrapped);
174
176
  throw error;
@@ -179,11 +181,92 @@ var ReactAsset = (props) => {
179
181
  error
180
182
  );
181
183
  }
184
+ return null;
182
185
  }
183
186
  },
184
187
  /* @__PURE__ */ import_react.default.createElement(Impl, { key: unwrapped.id, ...unwrapped })
185
188
  );
186
189
  };
190
+ var ReactAssetClass = class extends import_react.default.Component {
191
+ static getDerivedStateFromError(err) {
192
+ return { currentError: err };
193
+ }
194
+ componentDidCatch(error, errorInfo) {
195
+ }
196
+ getUnwrappedAssetFromProps() {
197
+ const props = this.props;
198
+ if (isAssetUnwrapped(props)) {
199
+ return props;
200
+ } else if ("asset" in props) {
201
+ return props.asset;
202
+ }
203
+ throw Error(
204
+ `Cannot determine asset type for props: ${JSON.stringify(props)}`
205
+ );
206
+ }
207
+ render() {
208
+ const props = this.props;
209
+ const { registry } = this.context;
210
+ const unwrapped = this.getUnwrappedAssetFromProps();
211
+ if (typeof unwrapped !== "object") {
212
+ throw Error(
213
+ `Asset was not an object got (${typeof unwrapped}) instead: ${unwrapped}`
214
+ );
215
+ }
216
+ if (unwrapped.type === void 0) {
217
+ const info = unwrapped.id === void 0 ? JSON.stringify(props) : `id: ${unwrapped.id}`;
218
+ throw Error(`Asset is missing type for ${info}`);
219
+ }
220
+ if (!registry || registry.isRegistryEmpty()) {
221
+ throw Error(`No asset found in registry. This could happen for one of the following reasons:
222
+
223
+ 1. You might have no assets registered or no plugins added to the Player instance.
224
+
225
+ 2. You might have mismatching versions of React Asset Registry Context.
226
+
227
+ See https://player-ui.github.io/latest/tools/cli#player-dependency-versions-check for tips about how to debug and fix this problem`);
228
+ }
229
+ const Impl = registry?.get(unwrapped);
230
+ if (!Impl) {
231
+ const matchList = [];
232
+ registry.forEach((asset) => {
233
+ matchList.push(asset.key);
234
+ });
235
+ const typeList = matchList.map(
236
+ (match) => JSON.parse(JSON.stringify(match)).type
237
+ );
238
+ const similarType = typeList.reduce((prev, curr) => {
239
+ const next = {
240
+ value: (0, import_leven.default)(unwrapped.type, curr),
241
+ type: curr
242
+ };
243
+ if (prev !== void 0 && prev.value < next.value) {
244
+ return prev;
245
+ }
246
+ return next;
247
+ }, void 0);
248
+ throw Error(
249
+ `No implementation found for id: ${unwrapped.id} type: ${unwrapped.type}. Did you mean ${similarType.type}?
250
+
251
+ Registered Asset matching functions are listed below:
252
+
253
+ ${JSON.stringify(matchList)}`
254
+ );
255
+ }
256
+ const error = this.state?.currentError;
257
+ if (error) {
258
+ this.setState({});
259
+ if (error instanceof AssetRenderError) {
260
+ error.addAssetParent(unwrapped);
261
+ throw error;
262
+ } else {
263
+ throw new AssetRenderError(unwrapped, "Failed to render asset", error);
264
+ }
265
+ }
266
+ return /* @__PURE__ */ import_react.default.createElement(Impl, { key: unwrapped.id, ...unwrapped });
267
+ }
268
+ };
269
+ ReactAssetClass.contextType = AssetContext;
187
270
 
188
271
  // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/utils/player-context.ts
189
272
  var import_react2 = __toESM(require("react"));
@@ -381,12 +464,36 @@ var ReactPlayer2 = class {
381
464
  return /* @__PURE__ */ import_react4.default.createElement(
382
465
  import_react_error_boundary2.ErrorBoundary,
383
466
  {
384
- fallbackRender: () => null,
385
- onError: (err) => {
386
- const playerState = this.player.getState();
387
- if (playerState.status === "in-progress") {
388
- playerState.fail(err);
467
+ FallbackComponent: (pops) => {
468
+ const { error, resetErrorBoundary } = pops;
469
+ const pErr = import_react4.default.useMemo(() => {
470
+ const playerState = this.player.getState();
471
+ if (playerState.status === "in-progress") {
472
+ const id = this.viewUpdateSubscription.add(
473
+ () => {
474
+ this.viewUpdateSubscription.remove(id);
475
+ resetErrorBoundary();
476
+ },
477
+ {
478
+ initializeWithPreviousValue: false
479
+ }
480
+ );
481
+ const assetId = error instanceof AssetRenderError ? error.rootAsset.id : void 0;
482
+ return playerState.controllers.error.captureError(
483
+ error,
484
+ import_player2.ErrorTypes.RENDER,
485
+ import_player2.ErrorSeverity.ERROR,
486
+ {
487
+ assetId
488
+ }
489
+ );
490
+ }
491
+ return void 0;
492
+ }, [error]);
493
+ if (!pErr?.skipped) {
494
+ return /* @__PURE__ */ import_react4.default.createElement("div", null, "WE ARE NOT RECOVERING");
389
495
  }
496
+ return /* @__PURE__ */ import_react4.default.createElement("div", null, "WE ARE RECOVERING");
390
497
  }
391
498
  },
392
499
  /* @__PURE__ */ import_react4.default.createElement(PlayerContext.Provider, { value: { player: this.player } }, /* @__PURE__ */ import_react4.default.createElement(BaseComp, { ...props }))
@@ -781,6 +888,7 @@ var ManagedPlayer = (props) => {
781
888
  ManagedPlayer,
782
889
  PlayerContext,
783
890
  ReactAsset,
891
+ ReactAssetClass,
784
892
  ReactPlayer,
785
893
  WebPlayer,
786
894
  buildUrl,
@@ -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 { 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"]}
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 { ErrorSeverity, ErrorTypes, Player } from \"@player-ui/player\";\nimport { ErrorBoundary, FallbackProps } from \"react-error-boundary\";\nimport type { AssetRegistryType } from \"./asset\";\nimport { AssetContext, AssetRenderError } 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 FallbackComponent={(pops: FallbackProps) => {\n const { error, resetErrorBoundary } = pops;\n const pErr = React.useMemo(() => {\n const playerState = this.player.getState();\n\n if (playerState.status === \"in-progress\") {\n const id = this.viewUpdateSubscription.add(\n () => {\n this.viewUpdateSubscription.remove(id);\n resetErrorBoundary();\n },\n {\n initializeWithPreviousValue: false,\n },\n );\n\n const assetId =\n error instanceof AssetRenderError\n ? error.rootAsset.id\n : undefined;\n\n return playerState.controllers.error.captureError(\n error,\n ErrorTypes.RENDER,\n ErrorSeverity.ERROR,\n {\n assetId,\n },\n );\n }\n\n return undefined;\n }, [error]);\n\n // If error unhandled or will be handled with a transition show nothing\n if (!pErr?.skipped) {\n return <div>WE ARE NOT RECOVERING</div>;\n }\n\n // If error handled through onError hook, I dunno, show something\n return <div>WE ARE RECOVERING</div>;\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, resetErrorBoundary } = props;\n\n resetErrorBoundary();\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\ntype AssetClassState = { currentError: Error };\nexport class ReactAssetClass extends React.Component<\n AssetType<string> | AssetWrapper<AssetType<string>>,\n AssetClassState\n> {\n static contextType: typeof AssetContext = AssetContext;\n declare context: React.ContextType<typeof AssetContext>;\n\n static getDerivedStateFromError(err: Error): AssetClassState {\n return { currentError: err };\n }\n\n override componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n // const unwrapped = this.getUnwrappedAssetFromProps();\n // if (error instanceof AssetRenderError) {\n // error.addAssetParent(unwrapped);\n // throw error;\n // } else {\n // throw new AssetRenderError(unwrapped, \"Failed to render asset\", error);\n // }\n }\n\n private getUnwrappedAssetFromProps(): AssetType<string> {\n const props: AssetType<string> | AssetWrapper<AssetType<string>> =\n this.props;\n\n if (isAssetUnwrapped(props)) {\n return props;\n } else if (\"asset\" in props) {\n return props.asset;\n }\n\n throw Error(\n `Cannot determine asset type for props: ${JSON.stringify(props)}`,\n );\n }\n\n render(): React.ReactNode {\n const props = this.props;\n const { registry } = this.context;\n\n const unwrapped = this.getUnwrappedAssetFromProps();\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 const error = this.state?.currentError;\n if (error) {\n this.setState({});\n if (error instanceof AssetRenderError) {\n error.addAssetParent(unwrapped);\n throw error;\n } else {\n throw new AssetRenderError(unwrapped, \"Failed to render asset\", error);\n }\n }\n\n return <Impl key={unwrapped.id} {...unwrapped} />;\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"]}
@@ -6,7 +6,7 @@ import React4 from "react";
6
6
  import { SyncWaterfallHook, AsyncParallelHook } from "tapable-ts";
7
7
  import { Subscribe, useSubscribedState } from "@player-ui/react-subscribe";
8
8
  import { Registry } from "@player-ui/partial-match-registry";
9
- import { Player } from "@player-ui/player";
9
+ import { ErrorSeverity, ErrorTypes, Player } from "@player-ui/player";
10
10
  import { ErrorBoundary as ErrorBoundary2 } from "react-error-boundary";
11
11
 
12
12
  // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/asset/index.tsx
@@ -113,7 +113,8 @@ var ReactAsset = (props) => {
113
113
  ErrorBoundary,
114
114
  {
115
115
  fallbackRender: (props2) => {
116
- const { error } = props2;
116
+ const { error, resetErrorBoundary } = props2;
117
+ resetErrorBoundary();
117
118
  if (error instanceof AssetRenderError) {
118
119
  error.addAssetParent(unwrapped);
119
120
  throw error;
@@ -124,11 +125,92 @@ var ReactAsset = (props) => {
124
125
  error
125
126
  );
126
127
  }
128
+ return null;
127
129
  }
128
130
  },
129
131
  /* @__PURE__ */ React.createElement(Impl, { key: unwrapped.id, ...unwrapped })
130
132
  );
131
133
  };
134
+ var ReactAssetClass = class extends React.Component {
135
+ static getDerivedStateFromError(err) {
136
+ return { currentError: err };
137
+ }
138
+ componentDidCatch(error, errorInfo) {
139
+ }
140
+ getUnwrappedAssetFromProps() {
141
+ const props = this.props;
142
+ if (isAssetUnwrapped(props)) {
143
+ return props;
144
+ } else if ("asset" in props) {
145
+ return props.asset;
146
+ }
147
+ throw Error(
148
+ `Cannot determine asset type for props: ${JSON.stringify(props)}`
149
+ );
150
+ }
151
+ render() {
152
+ const props = this.props;
153
+ const { registry } = this.context;
154
+ const unwrapped = this.getUnwrappedAssetFromProps();
155
+ if (typeof unwrapped !== "object") {
156
+ throw Error(
157
+ `Asset was not an object got (${typeof unwrapped}) instead: ${unwrapped}`
158
+ );
159
+ }
160
+ if (unwrapped.type === void 0) {
161
+ const info = unwrapped.id === void 0 ? JSON.stringify(props) : `id: ${unwrapped.id}`;
162
+ throw Error(`Asset is missing type for ${info}`);
163
+ }
164
+ if (!registry || registry.isRegistryEmpty()) {
165
+ throw Error(`No asset found in registry. This could happen for one of the following reasons:
166
+
167
+ 1. You might have no assets registered or no plugins added to the Player instance.
168
+
169
+ 2. You might have mismatching versions of React Asset Registry Context.
170
+
171
+ See https://player-ui.github.io/latest/tools/cli#player-dependency-versions-check for tips about how to debug and fix this problem`);
172
+ }
173
+ const Impl = registry?.get(unwrapped);
174
+ if (!Impl) {
175
+ const matchList = [];
176
+ registry.forEach((asset) => {
177
+ matchList.push(asset.key);
178
+ });
179
+ const typeList = matchList.map(
180
+ (match) => JSON.parse(JSON.stringify(match)).type
181
+ );
182
+ const similarType = typeList.reduce((prev, curr) => {
183
+ const next = {
184
+ value: leven(unwrapped.type, curr),
185
+ type: curr
186
+ };
187
+ if (prev !== void 0 && prev.value < next.value) {
188
+ return prev;
189
+ }
190
+ return next;
191
+ }, void 0);
192
+ throw Error(
193
+ `No implementation found for id: ${unwrapped.id} type: ${unwrapped.type}. Did you mean ${similarType.type}?
194
+
195
+ Registered Asset matching functions are listed below:
196
+
197
+ ${JSON.stringify(matchList)}`
198
+ );
199
+ }
200
+ const error = this.state?.currentError;
201
+ if (error) {
202
+ this.setState({});
203
+ if (error instanceof AssetRenderError) {
204
+ error.addAssetParent(unwrapped);
205
+ throw error;
206
+ } else {
207
+ throw new AssetRenderError(unwrapped, "Failed to render asset", error);
208
+ }
209
+ }
210
+ return /* @__PURE__ */ React.createElement(Impl, { key: unwrapped.id, ...unwrapped });
211
+ }
212
+ };
213
+ ReactAssetClass.contextType = AssetContext;
132
214
 
133
215
  // ../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/react/player/src/utils/player-context.ts
134
216
  import React2 from "react";
@@ -326,12 +408,36 @@ var ReactPlayer2 = class {
326
408
  return /* @__PURE__ */ React4.createElement(
327
409
  ErrorBoundary2,
328
410
  {
329
- fallbackRender: () => null,
330
- onError: (err) => {
331
- const playerState = this.player.getState();
332
- if (playerState.status === "in-progress") {
333
- playerState.fail(err);
411
+ FallbackComponent: (pops) => {
412
+ const { error, resetErrorBoundary } = pops;
413
+ const pErr = React4.useMemo(() => {
414
+ const playerState = this.player.getState();
415
+ if (playerState.status === "in-progress") {
416
+ const id = this.viewUpdateSubscription.add(
417
+ () => {
418
+ this.viewUpdateSubscription.remove(id);
419
+ resetErrorBoundary();
420
+ },
421
+ {
422
+ initializeWithPreviousValue: false
423
+ }
424
+ );
425
+ const assetId = error instanceof AssetRenderError ? error.rootAsset.id : void 0;
426
+ return playerState.controllers.error.captureError(
427
+ error,
428
+ ErrorTypes.RENDER,
429
+ ErrorSeverity.ERROR,
430
+ {
431
+ assetId
432
+ }
433
+ );
434
+ }
435
+ return void 0;
436
+ }, [error]);
437
+ if (!pErr?.skipped) {
438
+ return /* @__PURE__ */ React4.createElement("div", null, "WE ARE NOT RECOVERING");
334
439
  }
440
+ return /* @__PURE__ */ React4.createElement("div", null, "WE ARE RECOVERING");
335
441
  }
336
442
  },
337
443
  /* @__PURE__ */ React4.createElement(PlayerContext.Provider, { value: { player: this.player } }, /* @__PURE__ */ React4.createElement(BaseComp, { ...props }))
@@ -728,6 +834,7 @@ export {
728
834
  ManagedPlayer,
729
835
  PlayerContext,
730
836
  ReactAsset,
837
+ ReactAssetClass,
731
838
  ReactPlayer2 as ReactPlayer,
732
839
  WebPlayer,
733
840
  buildUrl,