@player-ui/reference-assets-plugin 0.15.5--canary.888.37918 → 0.15.5

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.
@@ -204,12 +204,6 @@ var import_meta_plugin = require("@player-ui/meta-plugin");
204
204
  var import_async_node_plugin2 = require("@player-ui/async-node-plugin");
205
205
  var import_player = require("@player-ui/player");
206
206
  var import_expression_plugin = require("@player-ui/expression-plugin");
207
- var isInChatDemo = (node) => {
208
- if (node.parent?.parent?.type === import_player.NodeType.View && node.parent.parent.value.id === "chat-view") {
209
- return true;
210
- }
211
- return node.parent?.parent?.type === import_player.NodeType.Asset && node.parent.parent.value.id.startsWith("collection-async-chat-demo");
212
- };
213
207
  var createContentFromMessage = (message, id) => ({
214
208
  asset: {
215
209
  type: "chat-message",
@@ -223,23 +217,6 @@ var createContentFromMessage = (message, id) => ({
223
217
  }
224
218
  }
225
219
  });
226
- var createBrokenRenderContent = (id) => ({
227
- asset: {
228
- id,
229
- type: "input",
230
- binding: "binding",
231
- label: 100
232
- }
233
- });
234
- var createBrokenTransformContent = (id) => ({
235
- asset: {
236
- id,
237
- type: "input",
238
- binding: {
239
- prop: "value"
240
- }
241
- }
242
- });
243
220
  var ChatUiDemoPlugin = class {
244
221
  constructor() {
245
222
  this.name = "chat-ui-demo-plugin";
@@ -257,7 +234,7 @@ var ChatUiDemoPlugin = class {
257
234
  let deferredPromises = {};
258
235
  let allPromiseKeys = [];
259
236
  let counter = 0;
260
- const sendMessage = (context, nodeId, getContent) => {
237
+ const sendMessage = (context, message, nodeId) => {
261
238
  if (nodeId && !(nodeId in deferredPromises)) {
262
239
  context.logger?.warn(
263
240
  `'send' expression called with unrecognized id '${nodeId}'`
@@ -270,8 +247,12 @@ var ChatUiDemoPlugin = class {
270
247
  }
271
248
  const keys = nodeId ? [nodeId] : allPromiseKeys;
272
249
  for (const id of keys) {
250
+ const content = createContentFromMessage(
251
+ message,
252
+ `chat-demo-${counter++}`
253
+ );
273
254
  const resolveFunction = deferredPromises[id];
274
- resolveFunction?.(getContent?.());
255
+ resolveFunction?.(content);
275
256
  delete deferredPromises[id];
276
257
  }
277
258
  if (nodeId) {
@@ -282,7 +263,7 @@ var ChatUiDemoPlugin = class {
282
263
  }
283
264
  };
284
265
  asyncNodePlugin.hooks.onAsyncNode.tap(this.name, (node) => {
285
- if (!isInChatDemo(node)) {
266
+ if (node.parent?.parent?.type !== import_player.NodeType.Asset && node.parent?.parent?.type !== import_player.NodeType.View || !node.parent.parent.value.id.startsWith("collection-async-chat-demo")) {
286
267
  return Promise.resolve(void 0);
287
268
  }
288
269
  return new Promise((res) => {
@@ -290,38 +271,13 @@ var ChatUiDemoPlugin = class {
290
271
  allPromiseKeys.push(node.id);
291
272
  });
292
273
  });
293
- const sendRealMessage = (context, message, nodeId) => {
294
- return sendMessage(
295
- context,
296
- nodeId,
297
- () => createContentFromMessage(message, `chat-demo-${counter++}`)
298
- );
299
- };
300
- const sendBrokenMessage = (context, _, nodeId) => {
301
- return sendMessage(
302
- context,
303
- nodeId,
304
- () => createBrokenRenderContent(`chat-demo-${counter++}`)
305
- );
306
- };
307
- const sendBrokenTransformMessage = (context, _, nodeId) => {
308
- return sendMessage(
309
- context,
310
- nodeId,
311
- () => createBrokenTransformContent(`chat-demo-${counter++}`)
312
- );
313
- };
314
274
  player.hooks.view.tap(this.name, (_) => {
315
275
  deferredPromises = {};
316
276
  allPromiseKeys = [];
317
277
  counter = 0;
318
278
  });
319
279
  const expressionPlugin = new import_expression_plugin.ExpressionPlugin(
320
- /* @__PURE__ */ new Map([
321
- ["send", sendRealMessage],
322
- ["sendBroken", sendBrokenMessage],
323
- ["sendBrokenTransform", sendBrokenTransformMessage]
324
- ])
280
+ /* @__PURE__ */ new Map([["send", sendMessage]])
325
281
  );
326
282
  player.registerPlugin(expressionPlugin);
327
283
  }
@@ -348,61 +304,16 @@ var ReferenceAssetsTransformPlugin = class {
348
304
  };
349
305
 
350
306
  // ../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugin.ts
351
- var import_async_node_plugin4 = require("@player-ui/async-node-plugin");
352
-
353
- // ../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugins/error-recovery-plugin.ts
354
307
  var import_async_node_plugin3 = require("@player-ui/async-node-plugin");
355
- var ErrorRecoveryPlugin = class {
356
- constructor() {
357
- this.name = "ErrorRecoveryPlugin";
358
- }
359
- /** */
360
- apply(player) {
361
- player.applyTo(import_async_node_plugin3.AsyncNodePlugin.Symbol, (plugin) => {
362
- plugin.hooks.onAsyncNodeError.tap(this.name, (err, node) => {
363
- const playerState = player.getState();
364
- if (playerState.status !== "in-progress") {
365
- return;
366
- }
367
- const viewId = playerState.controllers.view.currentView?.initialView.id;
368
- if (viewId !== "chat-view") {
369
- return;
370
- }
371
- return {
372
- asset: {
373
- type: "chat-message",
374
- id: `${node.id}-recovery`,
375
- value: {
376
- asset: {
377
- id: `${node.id}-recovery-text`,
378
- type: "text",
379
- value: "Something went wrong, please try again."
380
- }
381
- }
382
- }
383
- };
384
- });
385
- });
386
- }
387
- };
388
-
389
- // ../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugin.ts
390
- var import_common_types_plugin = require("@player-ui/common-types-plugin");
391
- var import_common_expressions_plugin = require("@player-ui/common-expressions-plugin");
392
- var import_computed_properties_plugin = require("@player-ui/computed-properties-plugin");
393
308
  var ReferenceAssetsPlugin = class {
394
309
  constructor() {
395
310
  this.name = "reference-assets-plugin";
396
311
  this.metaPlugin = new import_meta_plugin.MetaPlugin([
397
- new import_common_types_plugin.CommonTypesPlugin(),
398
- new import_common_expressions_plugin.CommonExpressionsPlugin(),
399
- new import_computed_properties_plugin.ComputedPropertiesPlugin(),
400
- new import_async_node_plugin4.AsyncNodePlugin({
401
- plugins: [new import_async_node_plugin4.AsyncNodePluginPlugin()]
312
+ new import_async_node_plugin3.AsyncNodePlugin({
313
+ plugins: [new import_async_node_plugin3.AsyncNodePluginPlugin()]
402
314
  }),
403
315
  new ReferenceAssetsTransformPlugin(),
404
- new ChatUiDemoPlugin(),
405
- new ErrorRecoveryPlugin()
316
+ new ChatUiDemoPlugin()
406
317
  ]);
407
318
  }
408
319
  apply(player) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/index.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/assets/input/transform.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/assets/action/transform.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/assets/info/transform.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/assets/image/transform.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/assets/choice/transform.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/assets/chat-message/transform.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugin.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugins/chat-ui-demo-plugin.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugins/reference-assets-transform-plugin.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugins/error-recovery-plugin.ts"],"sourcesContent":["export * from \"./assets\";\nexport * from \"./plugin\";\n","import type { TransformFunction } from \"@player-ui/player\";\nimport type { InputAsset, TransformedInput } from \"./types\";\n\n/**\n * Docs about the asset transform\n */\nexport const inputTransform: TransformFunction<InputAsset, TransformedInput> = (\n asset,\n options,\n) => {\n return {\n ...asset,\n format(val) {\n if (asset.binding === undefined) {\n return val;\n }\n\n return options.data.format(asset.binding, val);\n },\n set(val) {\n if (asset.binding === undefined) {\n return;\n }\n\n return options.data.model.set([[asset.binding, val]], {\n formatted: true,\n });\n },\n value:\n asset.binding === undefined\n ? \"\"\n : options.data.model.get(asset.binding, {\n includeInvalid: true,\n formatted: true,\n }),\n validation:\n asset.binding === undefined\n ? undefined\n : options.validation?.get(asset.binding, { track: true }),\n dataType:\n asset.binding === undefined\n ? undefined\n : options.validation?.type(asset.binding),\n };\n};\n","import type {\n Asset,\n TransformFunction,\n BeforeTransformFunction,\n} from \"@player-ui/player\";\nimport { compose, composeBefore } from \"@player-ui/asset-transform-plugin\";\nimport type { ActionAsset, TransformedAction } from \"./types\";\n\n/**\n * Function to find prev button\n */\nexport function isBackAction(action: ActionAsset): boolean {\n return action.value === \"Prev\";\n}\n\n/**\n * Attaches the methods to execute an action to an action\n */\nconst transform: TransformFunction<ActionAsset, TransformedAction> = (\n action,\n options,\n) => {\n return {\n ...action,\n run() {\n if (action.exp) {\n options.evaluate(action.exp);\n }\n\n if (action.value) {\n const skipValidation = action.metaData?.skipValidation;\n options.transition?.(action.value, { force: skipValidation });\n }\n },\n };\n};\n\n/**\n * De couples back button from the back icon\n */\nconst backIconTransform: TransformFunction<ActionAsset, ActionAsset> = (\n action,\n) => {\n /** For previous versions of player, the back button would already have the back icon.\n * This ensures that the old functionality does not break and back button is still visible when they update the player.\n */\n if (isBackAction(action) && action?.metaData?.role === undefined) {\n return {\n ...action,\n metaData: {\n ...action?.metaData,\n role: \"back\",\n },\n };\n }\n\n return action;\n};\n\n/**\n * Appends `exp` to the plugins.stringResolver.propertiesToSkip array or creates it if it doesn't exist\n *\n * @param asset - Asset to apply the transform to\n */\nexport const expPropTransform: BeforeTransformFunction<Asset> = (asset) => {\n const skipArray = asset.plugins?.stringResolver?.propertiesToSkip;\n\n if (skipArray && skipArray.indexOf(\"exp\") > 1) {\n return asset;\n }\n\n return {\n ...asset,\n plugins: {\n ...asset.plugins,\n stringResolver: {\n ...asset?.plugins?.stringResolver,\n propertiesToSkip: [\n ...(asset.plugins?.stringResolver?.propertiesToSkip ?? []),\n \"exp\",\n ],\n },\n },\n };\n};\n\nexport const actionTransform = compose(\n transform,\n backIconTransform,\n composeBefore(expPropTransform),\n);\n","import type { TransformFunction } from \"@player-ui/player\";\nimport type { AssetWrapper } from \"@player-ui/player\";\nimport type { InfoAsset, InfoAssetTransform } from \"./types\";\nimport type { ActionAsset } from \"../action/types\";\nimport { isBackAction } from \"../action/transform\";\n\n/**\n * This transform should add segmentedActions to the info asset.\n * Segmented actions display side by side in larger viewports. Segmented Actions is an object of next and prev actions\n */\nexport const infoTransform: TransformFunction<InfoAsset, InfoAssetTransform> = (\n infoAsset,\n) => {\n const actions = infoAsset?.actions;\n const segmentedActions = actions?.reduce(\n (segmentedActionsArray, action) => {\n segmentedActionsArray[\n isBackAction(action.asset as ActionAsset) ? \"prev\" : \"next\"\n ].push(action as AssetWrapper<ActionAsset>);\n return segmentedActionsArray;\n },\n { next: [], prev: [] } as {\n /**\n * next is an array of next actions\n */\n next: Array<AssetWrapper<ActionAsset>>;\n /**\n * prev is an array of prev actions\n */\n prev: Array<AssetWrapper<ActionAsset>>;\n },\n );\n\n return {\n ...infoAsset,\n segmentedActions,\n };\n};\n","import type { TransformFunction } from \"@player-ui/player\";\nimport type { ImageAsset, TransformedImage } from \"./types\";\n\n/**\n * Function to retrieve the desired alt text based on passed in props.\n * @param props Image props\n * @returns The alt text for the image asset\n */\nconst getImageAlt = (props: ImageAsset): string => {\n const { metaData, placeholder } = props;\n if (metaData.accessibility) return metaData.accessibility;\n\n if (placeholder) return placeholder;\n\n return \"Image\";\n};\n\n/**\n * Sets the Image's placeholder and accessibilty\n */\nexport const imageTransform: TransformFunction<ImageAsset, TransformedImage> = (\n props,\n) => {\n const altText = getImageAlt(props);\n\n const newImage = {\n ...props,\n altText,\n };\n\n return newImage;\n};\n","import type { TransformFunction } from \"@player-ui/player\";\nimport type {\n ChoiceAsset,\n TransformedChoice,\n TransformedChoiceItem,\n} from \"./types\";\n\n/**\n * Docs about the asset transform\n */\nexport const choiceTransform: TransformFunction<\n ChoiceAsset,\n TransformedChoice\n> = (asset, options) => {\n const { items, binding, ...rest } = asset;\n\n const assetHasBinding = binding !== undefined;\n\n const currentValue = assetHasBinding\n ? options.data.model.get(binding, {\n includeInvalid: true,\n })\n : undefined;\n\n const resetValue = () => {\n if (assetHasBinding) {\n return options.data.model.set([[binding, null]]);\n }\n };\n\n const transformedChoiceItems: TransformedChoiceItem[] = (items || []).map(\n (item, index) => ({\n ...item,\n id: item.id ?? `${asset.id}-choice-${index}`,\n select() {\n if (assetHasBinding) {\n return options.data.model.set([[binding, item.value]]);\n }\n },\n unselect: resetValue,\n }),\n );\n\n return {\n ...rest,\n binding,\n clearSelection: resetValue,\n items: transformedChoiceItems,\n value: currentValue,\n validation: assetHasBinding\n ? options.validation?.get(binding, { track: true })\n : undefined,\n dataType: assetHasBinding ? options.validation?.type(binding) : undefined,\n };\n};\n","import type {\n BeforeTransformFunction,\n TransformFunctions,\n} from \"@player-ui/player\";\nimport { composeBefore, compose } from \"@player-ui/asset-transform-plugin\";\nimport { createAsyncTransform } from \"@player-ui/async-node-plugin\";\nimport { ChatMessageAsset } from \"./types\";\n/**\n * In beforeTransform function, pass in flatten marker and call beforeResolve function.\n * Flatten default value is true.\n * input: ChatMessageAsset\n * @param asset - Asset to apply the transform to\n * @returns - transformed asset with async node and asset node\n */\nexport const transform: BeforeTransformFunction<ChatMessageAsset> =\n createAsyncTransform({\n transformAssetType: \"chat-message\",\n wrapperAssetType: \"collection\",\n getNestedAsset: (node) => node.children?.[0]?.value,\n });\n\nexport const chatMessageTransform: TransformFunctions = compose(\n composeBefore(transform),\n);\n","import type { Player, PlayerPlugin } from \"@player-ui/player\";\nimport { MetaPlugin } from \"@player-ui/meta-plugin\";\nimport { ChatUiDemoPlugin, ReferenceAssetsTransformPlugin } from \"./plugins\";\nimport {\n AsyncNodePlugin,\n AsyncNodePluginPlugin,\n} from \"@player-ui/async-node-plugin\";\nimport { ErrorRecoveryPlugin } from \"./plugins/error-recovery-plugin\";\nimport { CommonTypesPlugin } from \"@player-ui/common-types-plugin\";\nimport { CommonExpressionsPlugin } from \"@player-ui/common-expressions-plugin\";\nimport { ComputedPropertiesPlugin } from \"@player-ui/computed-properties-plugin\";\n\n/**\n * A plugin to add transforms for the reference assets\n */\nexport class ReferenceAssetsPlugin implements PlayerPlugin {\n name = \"reference-assets-plugin\";\n\n private readonly metaPlugin = new MetaPlugin([\n new CommonTypesPlugin(),\n new CommonExpressionsPlugin(),\n new ComputedPropertiesPlugin(),\n new AsyncNodePlugin({\n plugins: [new AsyncNodePluginPlugin()],\n }),\n new ReferenceAssetsTransformPlugin(),\n new ChatUiDemoPlugin(),\n new ErrorRecoveryPlugin(),\n ]);\n\n apply(player: Player): void {\n player.registerPlugin(this.metaPlugin);\n }\n}\n","import { AsyncNodePlugin } from \"@player-ui/async-node-plugin\";\nimport {\n ExpressionContext,\n ExtendedPlayerPlugin,\n NodeType,\n Player,\n Node,\n} from \"@player-ui/player\";\nimport { ExpressionPlugin } from \"@player-ui/expression-plugin\";\nimport { send } from \"./send\";\n\nconst isInChatDemo = (node: Node.Node) => {\n if (\n node.parent?.parent?.type === NodeType.View &&\n node.parent.parent.value.id === \"chat-view\"\n ) {\n return true;\n }\n\n return (\n node.parent?.parent?.type === NodeType.Asset &&\n node.parent.parent.value.id.startsWith(\"collection-async-chat-demo\")\n );\n};\n\nconst createContentFromMessage = (message: string, id: string): any => ({\n asset: {\n type: \"chat-message\",\n id,\n value: {\n asset: {\n type: \"text\",\n id: `${id}-value`,\n value: message,\n },\n },\n },\n});\n\n/** This content will fail to display its label since it isn't a valid asset */\nconst createBrokenRenderContent = (id: string): any => ({\n asset: {\n id,\n type: \"input\",\n binding: \"binding\",\n label: 100,\n },\n});\n\n/** this content will fail to fetch from the data model since the binding is an object */\nconst createBrokenTransformContent = (id: string): any => ({\n asset: {\n id,\n type: \"input\",\n binding: {\n prop: \"value\",\n },\n },\n});\n\nexport class ChatUiDemoPlugin implements ExtendedPlayerPlugin<[], [], [send]> {\n public readonly name = \"chat-ui-demo-plugin\";\n\n public apply(player: Player): void {\n const asyncNodePlugin = player.findPlugin<AsyncNodePlugin>(\n AsyncNodePlugin.Symbol,\n );\n\n if (!asyncNodePlugin) {\n player.logger.warn(\n `Failed to apply '${this.name}'. Reason: Could not find AsyncNodePlugin.`,\n );\n return;\n }\n\n let deferredPromises: Record<string, (val: string) => void> = {};\n let allPromiseKeys: string[] = [];\n let counter = 0;\n\n const sendMessage = (\n context: ExpressionContext,\n nodeId?: string,\n getContent?: () => any,\n ): void => {\n if (nodeId && !(nodeId in deferredPromises)) {\n context.logger?.warn(\n `'send' expression called with unrecognized id '${nodeId}'`,\n );\n return;\n }\n\n if (!nodeId && allPromiseKeys.length === 0) {\n context.logger?.warn(`'send' called with no waiting async nodes`);\n return;\n }\n\n // Either resolve the node by the id or resolve all of them if no id provided\n const keys = nodeId ? [nodeId] : allPromiseKeys;\n\n for (const id of keys) {\n const resolveFunction = deferredPromises[id];\n resolveFunction?.(getContent?.());\n delete deferredPromises[id];\n }\n\n if (nodeId) {\n const index = allPromiseKeys.indexOf(nodeId);\n allPromiseKeys.splice(index, 1);\n } else {\n allPromiseKeys = [];\n }\n };\n\n asyncNodePlugin.hooks.onAsyncNode.tap(this.name, (node) => {\n // Ensure this is only used on the chat-ui.tsx mock to prevent the promise from setting up during tests.\n if (!isInChatDemo(node)) {\n return Promise.resolve(undefined);\n }\n\n return new Promise((res) => {\n deferredPromises[node.id] = res;\n allPromiseKeys.push(node.id);\n });\n });\n\n const sendRealMessage: send = (\n context: ExpressionContext,\n message: string,\n nodeId?: string,\n ) => {\n return sendMessage(context, nodeId, () =>\n createContentFromMessage(message, `chat-demo-${counter++}`),\n );\n };\n\n /** These expressions are used as examples in the storybook to allow broken content through and show the error recovery fallback pattern. */\n const sendBrokenMessage: send = (\n context: ExpressionContext,\n _: string,\n nodeId?: string,\n ) => {\n return sendMessage(context, nodeId, () =>\n createBrokenRenderContent(`chat-demo-${counter++}`),\n );\n };\n\n const sendBrokenTransformMessage: send = (\n context: ExpressionContext,\n _: string,\n nodeId?: string,\n ) => {\n return sendMessage(context, nodeId, () =>\n createBrokenTransformContent(`chat-demo-${counter++}`),\n );\n };\n\n // Reset at the start of a new view.\n player.hooks.view.tap(this.name, (_) => {\n deferredPromises = {};\n allPromiseKeys = [];\n counter = 0;\n });\n\n // Register 'send' expression\n const expressionPlugin = new ExpressionPlugin(\n new Map([\n [\"send\", sendRealMessage],\n [\"sendBroken\", sendBrokenMessage],\n [\"sendBrokenTransform\", sendBrokenTransformMessage],\n ]),\n );\n player.registerPlugin(expressionPlugin);\n }\n}\n","import type { ExtendedPlayerPlugin, Player } from \"@player-ui/player\";\nimport { AssetTransformPlugin } from \"@player-ui/asset-transform-plugin\";\nimport {\n actionTransform,\n chatMessageTransform,\n choiceTransform,\n imageTransform,\n infoTransform,\n inputTransform,\n} from \"../assets\";\nimport type {\n ActionAsset,\n ChatMessageAsset,\n ChoiceAsset,\n CollectionAsset,\n ImageAsset,\n InfoAsset,\n InputAsset,\n TextAsset,\n} from \"../assets\";\n\nexport class ReferenceAssetsTransformPlugin\n implements\n ExtendedPlayerPlugin<\n [\n ActionAsset,\n InputAsset,\n ImageAsset,\n TextAsset,\n CollectionAsset,\n ChoiceAsset,\n ChatMessageAsset,\n ],\n [InfoAsset]\n >\n{\n name = \"reference-assets-transforms\";\n\n apply(player: Player): void {\n player.registerPlugin(\n new AssetTransformPlugin([\n [{ type: \"action\" }, actionTransform],\n [{ type: \"input\" }, inputTransform],\n [{ type: \"image\" }, imageTransform],\n [{ type: \"info\" }, infoTransform],\n [{ type: \"choice\" }, choiceTransform],\n [{ type: \"chat-message\" }, chatMessageTransform],\n ]),\n );\n }\n}\n","import { AsyncNodePlugin } from \"@player-ui/async-node-plugin\";\nimport { Player, PlayerPlugin } from \"@player-ui/player\";\n\nexport class ErrorRecoveryPlugin implements PlayerPlugin {\n readonly name = \"ErrorRecoveryPlugin\";\n /** */\n apply(player: Player): void {\n player.applyTo<AsyncNodePlugin>(AsyncNodePlugin.Symbol, (plugin) => {\n plugin.hooks.onAsyncNodeError.tap(this.name, (err, node) => {\n const playerState = player.getState();\n if (playerState.status !== \"in-progress\") {\n return;\n }\n\n // Limit error recovery to chat-ui view example to avoid breaking tests.\n const viewId = playerState.controllers.view.currentView?.initialView.id;\n if (viewId !== \"chat-view\") {\n return;\n }\n\n return {\n asset: {\n type: \"chat-message\",\n id: `${node.id}-recovery`,\n value: {\n asset: {\n id: `${node.id}-recovery-text`,\n type: \"text\",\n value: \"Something went wrong, please try again.\",\n },\n },\n },\n };\n });\n });\n }\n}\n"],"mappings":"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","names":["transform","import_asset_transform_plugin","transform","import_async_node_plugin","import_asset_transform_plugin","import_async_node_plugin","import_async_node_plugin"]}
1
+ {"version":3,"sources":["../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/index.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/assets/input/transform.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/assets/action/transform.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/assets/info/transform.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/assets/image/transform.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/assets/choice/transform.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/assets/chat-message/transform.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugin.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugins/chat-ui-demo-plugin.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugins/reference-assets-transform-plugin.ts"],"sourcesContent":["export * from \"./assets\";\nexport * from \"./plugin\";\n","import type { TransformFunction } from \"@player-ui/player\";\nimport type { InputAsset, TransformedInput } from \"./types\";\n\n/**\n * Docs about the asset transform\n */\nexport const inputTransform: TransformFunction<InputAsset, TransformedInput> = (\n asset,\n options,\n) => {\n return {\n ...asset,\n format(val) {\n if (asset.binding === undefined) {\n return val;\n }\n\n return options.data.format(asset.binding, val);\n },\n set(val) {\n if (asset.binding === undefined) {\n return;\n }\n\n return options.data.model.set([[asset.binding, val]], {\n formatted: true,\n });\n },\n value:\n asset.binding === undefined\n ? \"\"\n : options.data.model.get(asset.binding, {\n includeInvalid: true,\n formatted: true,\n }),\n validation:\n asset.binding === undefined\n ? undefined\n : options.validation?.get(asset.binding, { track: true }),\n dataType:\n asset.binding === undefined\n ? undefined\n : options.validation?.type(asset.binding),\n };\n};\n","import type {\n Asset,\n TransformFunction,\n BeforeTransformFunction,\n} from \"@player-ui/player\";\nimport { compose, composeBefore } from \"@player-ui/asset-transform-plugin\";\nimport type { ActionAsset, TransformedAction } from \"./types\";\n\n/**\n * Function to find prev button\n */\nexport function isBackAction(action: ActionAsset): boolean {\n return action.value === \"Prev\";\n}\n\n/**\n * Attaches the methods to execute an action to an action\n */\nconst transform: TransformFunction<ActionAsset, TransformedAction> = (\n action,\n options,\n) => {\n return {\n ...action,\n run() {\n if (action.exp) {\n options.evaluate(action.exp);\n }\n\n if (action.value) {\n const skipValidation = action.metaData?.skipValidation;\n options.transition?.(action.value, { force: skipValidation });\n }\n },\n };\n};\n\n/**\n * De couples back button from the back icon\n */\nconst backIconTransform: TransformFunction<ActionAsset, ActionAsset> = (\n action,\n) => {\n /** For previous versions of player, the back button would already have the back icon.\n * This ensures that the old functionality does not break and back button is still visible when they update the player.\n */\n if (isBackAction(action) && action?.metaData?.role === undefined) {\n return {\n ...action,\n metaData: {\n ...action?.metaData,\n role: \"back\",\n },\n };\n }\n\n return action;\n};\n\n/**\n * Appends `exp` to the plugins.stringResolver.propertiesToSkip array or creates it if it doesn't exist\n *\n * @param asset - Asset to apply the transform to\n */\nexport const expPropTransform: BeforeTransformFunction<Asset> = (asset) => {\n const skipArray = asset.plugins?.stringResolver?.propertiesToSkip;\n\n if (skipArray && skipArray.indexOf(\"exp\") > 1) {\n return asset;\n }\n\n return {\n ...asset,\n plugins: {\n ...asset.plugins,\n stringResolver: {\n ...asset?.plugins?.stringResolver,\n propertiesToSkip: [\n ...(asset.plugins?.stringResolver?.propertiesToSkip ?? []),\n \"exp\",\n ],\n },\n },\n };\n};\n\nexport const actionTransform = compose(\n transform,\n backIconTransform,\n composeBefore(expPropTransform),\n);\n","import type { TransformFunction } from \"@player-ui/player\";\nimport type { AssetWrapper } from \"@player-ui/player\";\nimport type { InfoAsset, InfoAssetTransform } from \"./types\";\nimport type { ActionAsset } from \"../action/types\";\nimport { isBackAction } from \"../action/transform\";\n\n/**\n * This transform should add segmentedActions to the info asset.\n * Segmented actions display side by side in larger viewports. Segmented Actions is an object of next and prev actions\n */\nexport const infoTransform: TransformFunction<InfoAsset, InfoAssetTransform> = (\n infoAsset,\n) => {\n const actions = infoAsset?.actions;\n const segmentedActions = actions?.reduce(\n (segmentedActionsArray, action) => {\n segmentedActionsArray[\n isBackAction(action.asset as ActionAsset) ? \"prev\" : \"next\"\n ].push(action as AssetWrapper<ActionAsset>);\n return segmentedActionsArray;\n },\n { next: [], prev: [] } as {\n /**\n * next is an array of next actions\n */\n next: Array<AssetWrapper<ActionAsset>>;\n /**\n * prev is an array of prev actions\n */\n prev: Array<AssetWrapper<ActionAsset>>;\n },\n );\n\n return {\n ...infoAsset,\n segmentedActions,\n };\n};\n","import type { TransformFunction } from \"@player-ui/player\";\nimport type { ImageAsset, TransformedImage } from \"./types\";\n\n/**\n * Function to retrieve the desired alt text based on passed in props.\n * @param props Image props\n * @returns The alt text for the image asset\n */\nconst getImageAlt = (props: ImageAsset): string => {\n const { metaData, placeholder } = props;\n if (metaData.accessibility) return metaData.accessibility;\n\n if (placeholder) return placeholder;\n\n return \"Image\";\n};\n\n/**\n * Sets the Image's placeholder and accessibilty\n */\nexport const imageTransform: TransformFunction<ImageAsset, TransformedImage> = (\n props,\n) => {\n const altText = getImageAlt(props);\n\n const newImage = {\n ...props,\n altText,\n };\n\n return newImage;\n};\n","import type { TransformFunction } from \"@player-ui/player\";\nimport type {\n ChoiceAsset,\n TransformedChoice,\n TransformedChoiceItem,\n} from \"./types\";\n\n/**\n * Docs about the asset transform\n */\nexport const choiceTransform: TransformFunction<\n ChoiceAsset,\n TransformedChoice\n> = (asset, options) => {\n const { items, binding, ...rest } = asset;\n\n const assetHasBinding = binding !== undefined;\n\n const currentValue = assetHasBinding\n ? options.data.model.get(binding, {\n includeInvalid: true,\n })\n : undefined;\n\n const resetValue = () => {\n if (assetHasBinding) {\n return options.data.model.set([[binding, null]]);\n }\n };\n\n const transformedChoiceItems: TransformedChoiceItem[] = (items || []).map(\n (item, index) => ({\n ...item,\n id: item.id ?? `${asset.id}-choice-${index}`,\n select() {\n if (assetHasBinding) {\n return options.data.model.set([[binding, item.value]]);\n }\n },\n unselect: resetValue,\n }),\n );\n\n return {\n ...rest,\n binding,\n clearSelection: resetValue,\n items: transformedChoiceItems,\n value: currentValue,\n validation: assetHasBinding\n ? options.validation?.get(binding, { track: true })\n : undefined,\n dataType: assetHasBinding ? options.validation?.type(binding) : undefined,\n };\n};\n","import type {\n BeforeTransformFunction,\n TransformFunctions,\n} from \"@player-ui/player\";\nimport { composeBefore, compose } from \"@player-ui/asset-transform-plugin\";\nimport { createAsyncTransform } from \"@player-ui/async-node-plugin\";\nimport { ChatMessageAsset } from \"./types\";\n/**\n * In beforeTransform function, pass in flatten marker and call beforeResolve function.\n * Flatten default value is true.\n * input: ChatMessageAsset\n * @param asset - Asset to apply the transform to\n * @returns - transformed asset with async node and asset node\n */\nexport const transform: BeforeTransformFunction<ChatMessageAsset> =\n createAsyncTransform({\n transformAssetType: \"chat-message\",\n wrapperAssetType: \"collection\",\n getNestedAsset: (node) => node.children?.[0]?.value,\n });\n\nexport const chatMessageTransform: TransformFunctions = compose(\n composeBefore(transform),\n);\n","import type { Player, PlayerPlugin } from \"@player-ui/player\";\nimport { MetaPlugin } from \"@player-ui/meta-plugin\";\nimport { ChatUiDemoPlugin, ReferenceAssetsTransformPlugin } from \"./plugins\";\nimport {\n AsyncNodePlugin,\n AsyncNodePluginPlugin,\n} from \"@player-ui/async-node-plugin\";\n\n/**\n * A plugin to add transforms for the reference assets\n */\nexport class ReferenceAssetsPlugin implements PlayerPlugin {\n name = \"reference-assets-plugin\";\n\n private readonly metaPlugin = new MetaPlugin([\n new AsyncNodePlugin({\n plugins: [new AsyncNodePluginPlugin()],\n }),\n new ReferenceAssetsTransformPlugin(),\n new ChatUiDemoPlugin(),\n ]);\n\n apply(player: Player): void {\n player.registerPlugin(this.metaPlugin);\n }\n}\n","import { AsyncNodePlugin } from \"@player-ui/async-node-plugin\";\nimport {\n ExpressionContext,\n ExtendedPlayerPlugin,\n NodeType,\n Player,\n} from \"@player-ui/player\";\nimport { ExpressionPlugin } from \"@player-ui/expression-plugin\";\nimport { send } from \"./send\";\n\nconst createContentFromMessage = (message: string, id: string): any => ({\n asset: {\n type: \"chat-message\",\n id,\n value: {\n asset: {\n type: \"text\",\n id: `${id}-value`,\n value: message,\n },\n },\n },\n});\n\nexport class ChatUiDemoPlugin implements ExtendedPlayerPlugin<[], [], [send]> {\n public readonly name = \"chat-ui-demo-plugin\";\n\n public apply(player: Player): void {\n const asyncNodePlugin = player.findPlugin<AsyncNodePlugin>(\n AsyncNodePlugin.Symbol,\n );\n\n if (!asyncNodePlugin) {\n player.logger.warn(\n `Failed to apply '${this.name}'. Reason: Could not find AsyncNodePlugin.`,\n );\n return;\n }\n\n let deferredPromises: Record<string, (val: string) => void> = {};\n let allPromiseKeys: string[] = [];\n let counter = 0;\n\n const sendMessage: send = (\n context: ExpressionContext,\n message: string,\n nodeId?: string,\n ): void => {\n if (nodeId && !(nodeId in deferredPromises)) {\n context.logger?.warn(\n `'send' expression called with unrecognized id '${nodeId}'`,\n );\n return;\n }\n\n if (!nodeId && allPromiseKeys.length === 0) {\n context.logger?.warn(`'send' called with no waiting async nodes`);\n return;\n }\n\n // Either resolve the node by the id or resolve all of them if no id provided\n const keys = nodeId ? [nodeId] : allPromiseKeys;\n\n for (const id of keys) {\n const content = createContentFromMessage(\n message,\n `chat-demo-${counter++}`,\n );\n const resolveFunction = deferredPromises[id];\n resolveFunction?.(content);\n delete deferredPromises[id];\n }\n\n if (nodeId) {\n const index = allPromiseKeys.indexOf(nodeId);\n allPromiseKeys.splice(index, 1);\n } else {\n allPromiseKeys = [];\n }\n };\n\n asyncNodePlugin.hooks.onAsyncNode.tap(this.name, (node) => {\n // Ensure this is only used on the chat-ui.tsx mock to prevent the promise from setting up during tests.\n if (\n (node.parent?.parent?.type !== NodeType.Asset &&\n node.parent?.parent?.type !== NodeType.View) ||\n !node.parent.parent.value.id.startsWith(\"collection-async-chat-demo\")\n ) {\n return Promise.resolve(undefined);\n }\n\n return new Promise((res) => {\n deferredPromises[node.id] = res;\n allPromiseKeys.push(node.id);\n });\n });\n\n // Reset at the start of a new view.\n player.hooks.view.tap(this.name, (_) => {\n deferredPromises = {};\n allPromiseKeys = [];\n counter = 0;\n });\n\n // Register 'send' expression\n const expressionPlugin = new ExpressionPlugin(\n new Map([[\"send\", sendMessage]]),\n );\n player.registerPlugin(expressionPlugin);\n }\n}\n","import type { ExtendedPlayerPlugin, Player } from \"@player-ui/player\";\nimport { AssetTransformPlugin } from \"@player-ui/asset-transform-plugin\";\nimport {\n actionTransform,\n chatMessageTransform,\n choiceTransform,\n imageTransform,\n infoTransform,\n inputTransform,\n} from \"../assets\";\nimport type {\n ActionAsset,\n ChatMessageAsset,\n ChoiceAsset,\n CollectionAsset,\n ImageAsset,\n InfoAsset,\n InputAsset,\n TextAsset,\n} from \"../assets\";\n\nexport class ReferenceAssetsTransformPlugin implements ExtendedPlayerPlugin<\n [\n ActionAsset,\n InputAsset,\n ImageAsset,\n TextAsset,\n CollectionAsset,\n ChoiceAsset,\n ChatMessageAsset,\n ],\n [InfoAsset]\n> {\n name = \"reference-assets-transforms\";\n\n apply(player: Player): void {\n player.registerPlugin(\n new AssetTransformPlugin([\n [{ type: \"action\" }, actionTransform],\n [{ type: \"input\" }, inputTransform],\n [{ type: \"image\" }, imageTransform],\n [{ type: \"info\" }, infoTransform],\n [{ type: \"choice\" }, choiceTransform],\n [{ type: \"chat-message\" }, chatMessageTransform],\n ]),\n );\n }\n}\n"],"mappings":"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","names":["transform","import_asset_transform_plugin","transform","import_async_node_plugin","import_asset_transform_plugin","import_async_node_plugin"]}
@@ -171,12 +171,6 @@ import {
171
171
  NodeType
172
172
  } from "@player-ui/player";
173
173
  import { ExpressionPlugin } from "@player-ui/expression-plugin";
174
- var isInChatDemo = (node) => {
175
- if (node.parent?.parent?.type === NodeType.View && node.parent.parent.value.id === "chat-view") {
176
- return true;
177
- }
178
- return node.parent?.parent?.type === NodeType.Asset && node.parent.parent.value.id.startsWith("collection-async-chat-demo");
179
- };
180
174
  var createContentFromMessage = (message, id) => ({
181
175
  asset: {
182
176
  type: "chat-message",
@@ -190,23 +184,6 @@ var createContentFromMessage = (message, id) => ({
190
184
  }
191
185
  }
192
186
  });
193
- var createBrokenRenderContent = (id) => ({
194
- asset: {
195
- id,
196
- type: "input",
197
- binding: "binding",
198
- label: 100
199
- }
200
- });
201
- var createBrokenTransformContent = (id) => ({
202
- asset: {
203
- id,
204
- type: "input",
205
- binding: {
206
- prop: "value"
207
- }
208
- }
209
- });
210
187
  var ChatUiDemoPlugin = class {
211
188
  constructor() {
212
189
  this.name = "chat-ui-demo-plugin";
@@ -224,7 +201,7 @@ var ChatUiDemoPlugin = class {
224
201
  let deferredPromises = {};
225
202
  let allPromiseKeys = [];
226
203
  let counter = 0;
227
- const sendMessage = (context, nodeId, getContent) => {
204
+ const sendMessage = (context, message, nodeId) => {
228
205
  if (nodeId && !(nodeId in deferredPromises)) {
229
206
  context.logger?.warn(
230
207
  `'send' expression called with unrecognized id '${nodeId}'`
@@ -237,8 +214,12 @@ var ChatUiDemoPlugin = class {
237
214
  }
238
215
  const keys = nodeId ? [nodeId] : allPromiseKeys;
239
216
  for (const id of keys) {
217
+ const content = createContentFromMessage(
218
+ message,
219
+ `chat-demo-${counter++}`
220
+ );
240
221
  const resolveFunction = deferredPromises[id];
241
- resolveFunction?.(getContent?.());
222
+ resolveFunction?.(content);
242
223
  delete deferredPromises[id];
243
224
  }
244
225
  if (nodeId) {
@@ -249,7 +230,7 @@ var ChatUiDemoPlugin = class {
249
230
  }
250
231
  };
251
232
  asyncNodePlugin.hooks.onAsyncNode.tap(this.name, (node) => {
252
- if (!isInChatDemo(node)) {
233
+ if (node.parent?.parent?.type !== NodeType.Asset && node.parent?.parent?.type !== NodeType.View || !node.parent.parent.value.id.startsWith("collection-async-chat-demo")) {
253
234
  return Promise.resolve(void 0);
254
235
  }
255
236
  return new Promise((res) => {
@@ -257,38 +238,13 @@ var ChatUiDemoPlugin = class {
257
238
  allPromiseKeys.push(node.id);
258
239
  });
259
240
  });
260
- const sendRealMessage = (context, message, nodeId) => {
261
- return sendMessage(
262
- context,
263
- nodeId,
264
- () => createContentFromMessage(message, `chat-demo-${counter++}`)
265
- );
266
- };
267
- const sendBrokenMessage = (context, _, nodeId) => {
268
- return sendMessage(
269
- context,
270
- nodeId,
271
- () => createBrokenRenderContent(`chat-demo-${counter++}`)
272
- );
273
- };
274
- const sendBrokenTransformMessage = (context, _, nodeId) => {
275
- return sendMessage(
276
- context,
277
- nodeId,
278
- () => createBrokenTransformContent(`chat-demo-${counter++}`)
279
- );
280
- };
281
241
  player.hooks.view.tap(this.name, (_) => {
282
242
  deferredPromises = {};
283
243
  allPromiseKeys = [];
284
244
  counter = 0;
285
245
  });
286
246
  const expressionPlugin = new ExpressionPlugin(
287
- /* @__PURE__ */ new Map([
288
- ["send", sendRealMessage],
289
- ["sendBroken", sendBrokenMessage],
290
- ["sendBrokenTransform", sendBrokenTransformMessage]
291
- ])
247
+ /* @__PURE__ */ new Map([["send", sendMessage]])
292
248
  );
293
249
  player.registerPlugin(expressionPlugin);
294
250
  }
@@ -316,63 +272,18 @@ var ReferenceAssetsTransformPlugin = class {
316
272
 
317
273
  // ../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugin.ts
318
274
  import {
319
- AsyncNodePlugin as AsyncNodePlugin3,
275
+ AsyncNodePlugin as AsyncNodePlugin2,
320
276
  AsyncNodePluginPlugin
321
277
  } from "@player-ui/async-node-plugin";
322
-
323
- // ../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugins/error-recovery-plugin.ts
324
- import { AsyncNodePlugin as AsyncNodePlugin2 } from "@player-ui/async-node-plugin";
325
- var ErrorRecoveryPlugin = class {
326
- constructor() {
327
- this.name = "ErrorRecoveryPlugin";
328
- }
329
- /** */
330
- apply(player) {
331
- player.applyTo(AsyncNodePlugin2.Symbol, (plugin) => {
332
- plugin.hooks.onAsyncNodeError.tap(this.name, (err, node) => {
333
- const playerState = player.getState();
334
- if (playerState.status !== "in-progress") {
335
- return;
336
- }
337
- const viewId = playerState.controllers.view.currentView?.initialView.id;
338
- if (viewId !== "chat-view") {
339
- return;
340
- }
341
- return {
342
- asset: {
343
- type: "chat-message",
344
- id: `${node.id}-recovery`,
345
- value: {
346
- asset: {
347
- id: `${node.id}-recovery-text`,
348
- type: "text",
349
- value: "Something went wrong, please try again."
350
- }
351
- }
352
- }
353
- };
354
- });
355
- });
356
- }
357
- };
358
-
359
- // ../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugin.ts
360
- import { CommonTypesPlugin } from "@player-ui/common-types-plugin";
361
- import { CommonExpressionsPlugin } from "@player-ui/common-expressions-plugin";
362
- import { ComputedPropertiesPlugin } from "@player-ui/computed-properties-plugin";
363
278
  var ReferenceAssetsPlugin = class {
364
279
  constructor() {
365
280
  this.name = "reference-assets-plugin";
366
281
  this.metaPlugin = new MetaPlugin([
367
- new CommonTypesPlugin(),
368
- new CommonExpressionsPlugin(),
369
- new ComputedPropertiesPlugin(),
370
- new AsyncNodePlugin3({
282
+ new AsyncNodePlugin2({
371
283
  plugins: [new AsyncNodePluginPlugin()]
372
284
  }),
373
285
  new ReferenceAssetsTransformPlugin(),
374
- new ChatUiDemoPlugin(),
375
- new ErrorRecoveryPlugin()
286
+ new ChatUiDemoPlugin()
376
287
  ]);
377
288
  }
378
289
  apply(player) {
package/dist/index.mjs CHANGED
@@ -171,12 +171,6 @@ import {
171
171
  NodeType
172
172
  } from "@player-ui/player";
173
173
  import { ExpressionPlugin } from "@player-ui/expression-plugin";
174
- var isInChatDemo = (node) => {
175
- if (node.parent?.parent?.type === NodeType.View && node.parent.parent.value.id === "chat-view") {
176
- return true;
177
- }
178
- return node.parent?.parent?.type === NodeType.Asset && node.parent.parent.value.id.startsWith("collection-async-chat-demo");
179
- };
180
174
  var createContentFromMessage = (message, id) => ({
181
175
  asset: {
182
176
  type: "chat-message",
@@ -190,23 +184,6 @@ var createContentFromMessage = (message, id) => ({
190
184
  }
191
185
  }
192
186
  });
193
- var createBrokenRenderContent = (id) => ({
194
- asset: {
195
- id,
196
- type: "input",
197
- binding: "binding",
198
- label: 100
199
- }
200
- });
201
- var createBrokenTransformContent = (id) => ({
202
- asset: {
203
- id,
204
- type: "input",
205
- binding: {
206
- prop: "value"
207
- }
208
- }
209
- });
210
187
  var ChatUiDemoPlugin = class {
211
188
  constructor() {
212
189
  this.name = "chat-ui-demo-plugin";
@@ -224,7 +201,7 @@ var ChatUiDemoPlugin = class {
224
201
  let deferredPromises = {};
225
202
  let allPromiseKeys = [];
226
203
  let counter = 0;
227
- const sendMessage = (context, nodeId, getContent) => {
204
+ const sendMessage = (context, message, nodeId) => {
228
205
  if (nodeId && !(nodeId in deferredPromises)) {
229
206
  context.logger?.warn(
230
207
  `'send' expression called with unrecognized id '${nodeId}'`
@@ -237,8 +214,12 @@ var ChatUiDemoPlugin = class {
237
214
  }
238
215
  const keys = nodeId ? [nodeId] : allPromiseKeys;
239
216
  for (const id of keys) {
217
+ const content = createContentFromMessage(
218
+ message,
219
+ `chat-demo-${counter++}`
220
+ );
240
221
  const resolveFunction = deferredPromises[id];
241
- resolveFunction?.(getContent?.());
222
+ resolveFunction?.(content);
242
223
  delete deferredPromises[id];
243
224
  }
244
225
  if (nodeId) {
@@ -249,7 +230,7 @@ var ChatUiDemoPlugin = class {
249
230
  }
250
231
  };
251
232
  asyncNodePlugin.hooks.onAsyncNode.tap(this.name, (node) => {
252
- if (!isInChatDemo(node)) {
233
+ if (node.parent?.parent?.type !== NodeType.Asset && node.parent?.parent?.type !== NodeType.View || !node.parent.parent.value.id.startsWith("collection-async-chat-demo")) {
253
234
  return Promise.resolve(void 0);
254
235
  }
255
236
  return new Promise((res) => {
@@ -257,38 +238,13 @@ var ChatUiDemoPlugin = class {
257
238
  allPromiseKeys.push(node.id);
258
239
  });
259
240
  });
260
- const sendRealMessage = (context, message, nodeId) => {
261
- return sendMessage(
262
- context,
263
- nodeId,
264
- () => createContentFromMessage(message, `chat-demo-${counter++}`)
265
- );
266
- };
267
- const sendBrokenMessage = (context, _, nodeId) => {
268
- return sendMessage(
269
- context,
270
- nodeId,
271
- () => createBrokenRenderContent(`chat-demo-${counter++}`)
272
- );
273
- };
274
- const sendBrokenTransformMessage = (context, _, nodeId) => {
275
- return sendMessage(
276
- context,
277
- nodeId,
278
- () => createBrokenTransformContent(`chat-demo-${counter++}`)
279
- );
280
- };
281
241
  player.hooks.view.tap(this.name, (_) => {
282
242
  deferredPromises = {};
283
243
  allPromiseKeys = [];
284
244
  counter = 0;
285
245
  });
286
246
  const expressionPlugin = new ExpressionPlugin(
287
- /* @__PURE__ */ new Map([
288
- ["send", sendRealMessage],
289
- ["sendBroken", sendBrokenMessage],
290
- ["sendBrokenTransform", sendBrokenTransformMessage]
291
- ])
247
+ /* @__PURE__ */ new Map([["send", sendMessage]])
292
248
  );
293
249
  player.registerPlugin(expressionPlugin);
294
250
  }
@@ -316,63 +272,18 @@ var ReferenceAssetsTransformPlugin = class {
316
272
 
317
273
  // ../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugin.ts
318
274
  import {
319
- AsyncNodePlugin as AsyncNodePlugin3,
275
+ AsyncNodePlugin as AsyncNodePlugin2,
320
276
  AsyncNodePluginPlugin
321
277
  } from "@player-ui/async-node-plugin";
322
-
323
- // ../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugins/error-recovery-plugin.ts
324
- import { AsyncNodePlugin as AsyncNodePlugin2 } from "@player-ui/async-node-plugin";
325
- var ErrorRecoveryPlugin = class {
326
- constructor() {
327
- this.name = "ErrorRecoveryPlugin";
328
- }
329
- /** */
330
- apply(player) {
331
- player.applyTo(AsyncNodePlugin2.Symbol, (plugin) => {
332
- plugin.hooks.onAsyncNodeError.tap(this.name, (err, node) => {
333
- const playerState = player.getState();
334
- if (playerState.status !== "in-progress") {
335
- return;
336
- }
337
- const viewId = playerState.controllers.view.currentView?.initialView.id;
338
- if (viewId !== "chat-view") {
339
- return;
340
- }
341
- return {
342
- asset: {
343
- type: "chat-message",
344
- id: `${node.id}-recovery`,
345
- value: {
346
- asset: {
347
- id: `${node.id}-recovery-text`,
348
- type: "text",
349
- value: "Something went wrong, please try again."
350
- }
351
- }
352
- }
353
- };
354
- });
355
- });
356
- }
357
- };
358
-
359
- // ../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/reference-assets/core/src/plugin.ts
360
- import { CommonTypesPlugin } from "@player-ui/common-types-plugin";
361
- import { CommonExpressionsPlugin } from "@player-ui/common-expressions-plugin";
362
- import { ComputedPropertiesPlugin } from "@player-ui/computed-properties-plugin";
363
278
  var ReferenceAssetsPlugin = class {
364
279
  constructor() {
365
280
  this.name = "reference-assets-plugin";
366
281
  this.metaPlugin = new MetaPlugin([
367
- new CommonTypesPlugin(),
368
- new CommonExpressionsPlugin(),
369
- new ComputedPropertiesPlugin(),
370
- new AsyncNodePlugin3({
282
+ new AsyncNodePlugin2({
371
283
  plugins: [new AsyncNodePluginPlugin()]
372
284
  }),
373
285
  new ReferenceAssetsTransformPlugin(),
374
- new ChatUiDemoPlugin(),
375
- new ErrorRecoveryPlugin()
286
+ new ChatUiDemoPlugin()
376
287
  ]);
377
288
  }
378
289
  apply(player) {