@player-tools/devtools-basic-web-plugin 0.6.1--canary.110.2690 → 0.6.1-next.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/basic/src/index.tsx","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/basic/src/WrapperComponent.tsx","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/basic/src/constants/index.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/basic/src/helpers/getEvaluateExpression.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/basic/src/helpers/genDataChangeTransaction.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/basic/_generated/index.json"],"sourcesContent":["import type {\n DataController,\n ExpressionEvaluator,\n Flow,\n Player,\n ReactPlayer,\n ReactPlayerPlugin,\n ViewInstance,\n} from \"@player-ui/react\";\nimport { dset } from \"dset/merge\";\nimport { produce } from \"immer\";\nimport React from \"react\";\nimport { WrapperComponent } from \"./WrapperComponent\";\nimport { PLUGIN_ID, PLUGIN_INACTIVE_WARNING } from \"./constants\";\n\n/** Taps into the Player and ReactPlayer hooks and leverage the WrapperComponent to define and process the content. */\nexport class BasicWevDevtoolsPlugin implements ReactPlayerPlugin {\n name = PLUGIN_ID;\n\n data: Record<string, unknown> = {};\n\n playerConfig: Record<string, unknown> = {};\n\n logs: {\n severity: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n message: any;\n }[] = [];\n\n flow?: Flow;\n\n expressionEvaluator?: WeakRef<ExpressionEvaluator>;\n\n view?: WeakRef<ViewInstance>;\n\n dataController?: WeakRef<DataController>;\n\n checkIfDevtoolsIsActive() {\n return localStorage.getItem(\"player-ui-devtools-active\") === \"true\";\n }\n\n apply(player: Player) {\n if (!this.checkIfDevtoolsIsActive()) {\n console.log(PLUGIN_INACTIVE_WARNING);\n return;\n }\n\n // Config\n this.playerConfig = {\n version: player.getVersion(),\n plugins: player.getPlugins().map((plugin) => plugin.name),\n };\n\n // Data\n player.hooks.dataController.tap(this.name, (dataController) => {\n dataController.hooks.onUpdate.tap(this.name, (updates) => {\n const newPlayerState = produce(this.data, (draft) => {\n updates.forEach(({ binding, newValue }) => {\n dset(draft, [\"data\", ...binding.asArray()], newValue);\n });\n });\n this.data = newPlayerState;\n });\n });\n\n // Logs\n player.logger.hooks.log.tap(this.name, (severity, message) => {\n this.logs = [...this.logs, { severity, message }];\n });\n\n // Flow\n player.hooks.onStart.tap(this.name, (f) => {\n this.flow = f;\n });\n\n // View\n player.hooks.view.tap(this.name, (view) => {\n this.view = new WeakRef(view);\n });\n\n // Expression evaluator\n player.hooks.expressionEvaluator.tap(this.name, (evaluator) => {\n this.expressionEvaluator = new WeakRef(evaluator);\n });\n }\n\n applyReact(reactPlayer: ReactPlayer) {\n if (!this.checkIfDevtoolsIsActive()) {\n return;\n }\n\n // eslint-disable-next-line react/display-name\n reactPlayer.hooks.webComponent.tap(this.name, (Comp) => () => {\n const Component = Comp as React.FC;\n\n return (\n <WrapperComponent\n playerConfig={this.playerConfig}\n data={this.data}\n logs={this.logs}\n flow={this.flow}\n view={this.view}\n expressionEvaluator={this.expressionEvaluator}\n >\n <Component />\n </WrapperComponent>\n );\n });\n }\n}\n","import { usePluginState } from \"@player-tools/devtools-desktop-plugins-common\";\nimport type {\n DevtoolsPluginInteractionEvent,\n PlayerInitEvent,\n PluginData,\n Transaction,\n} from \"@player-tools/devtools-types\";\nimport type { Flow } from \"@player-ui/react\";\nimport { dequal } from \"dequal\";\nimport { dset } from \"dset/merge\";\nimport { produce } from \"immer\";\nimport React, { useCallback, useEffect } from \"react\";\nimport { BASE_PLUGIN_DATA, INTERACTIONS } from \"./constants\";\nimport type { Evaluation, WrapperComponentProps } from \"./types\";\nimport { genDataChangeTransaction, getEvaluateExpression } from \"./helpers\";\nimport flow from \"../_generated/index.json\";\n\nconst pluginData: PluginData = {\n ...BASE_PLUGIN_DATA,\n flow: flow as Flow,\n};\n\n/** Defines the content to be rendered into the extension Player UI and process changes */\nexport const WrapperComponent = ({\n children,\n data,\n playerConfig,\n logs,\n flow,\n expressionEvaluator,\n}: WrapperComponentProps): JSX.Element => {\n const [state, playerID, dispatch] = usePluginState();\n const lastProcessedInteraction = React.useRef(0);\n const expEvaluator = useCallback(getEvaluateExpression(expressionEvaluator), [\n expressionEvaluator,\n ]);\n\n const id = pluginData.id;\n\n const processInteraction = useCallback(\n (interaction: DevtoolsPluginInteractionEvent) => {\n const {\n payload: { type, payload },\n } = interaction;\n if (\n type === INTERACTIONS.EVALUATE_EXPRESSION &&\n expressionEvaluator &&\n payload\n ) {\n const result = expEvaluator(payload);\n\n const newState = produce(state, (draft) => {\n const current: Array<Evaluation> =\n (state?.plugins?.[id]?.flow?.data?.history as Array<Evaluation>) ||\n [];\n dset(\n draft,\n [\"plugins\", id, \"flow\", \"data\", \"history\"],\n [...current, result]\n );\n });\n\n dispatch({\n id: -1,\n type: \"PLAYER_DEVTOOLS_PLUGIN_DATA_CHANGE\",\n payload: {\n pluginID: id,\n data: newState.plugins[id].flow.data,\n },\n sender: playerID,\n context: \"player\",\n target: \"player\",\n timestamp: Date.now(),\n _messenger_: true,\n });\n\n lastProcessedInteraction.current += 1;\n }\n },\n [dispatch, expressionEvaluator, id, state]\n );\n\n // inject playerConfig into the plugin data\n const pluginDataWithPlayerConfig = produce(pluginData, (draft) => {\n dset(draft, [\"flow\", \"data\", \"playerConfig\"], playerConfig);\n });\n\n // Initial plugin content\n useEffect(() => {\n const transaction: Transaction<PlayerInitEvent> = {\n id: -1,\n type: \"PLAYER_DEVTOOLS_PLAYER_INIT\",\n payload: {\n plugins: {\n [id]: pluginDataWithPlayerConfig,\n },\n },\n sender: playerID,\n context: \"player\",\n target: \"player\",\n timestamp: Date.now(),\n _messenger_: true,\n };\n\n dispatch(transaction);\n }, []);\n\n // Process interactions\n useEffect(() => {\n if (lastProcessedInteraction.current < (state.interactions.length ?? 0)) {\n state.interactions\n .slice(lastProcessedInteraction.current)\n .forEach(processInteraction);\n }\n }, [state.interactions.length]);\n\n // Data changes\n useEffect(() => {\n if (dequal(state.plugins[id]?.flow?.data?.data, data)) return;\n\n const newState = produce(state, (draft) => {\n dset(draft, [\"plugins\", id, \"flow\", \"data\", \"data\"], data);\n });\n\n const transaction = genDataChangeTransaction({\n playerID,\n data: newState.plugins[id].flow.data,\n pluginID: id,\n });\n\n dispatch(transaction);\n }, [data]);\n\n // Logs changes\n useEffect(() => {\n if (dequal(state.plugins[id]?.flow?.data?.logs, logs)) return;\n\n const newState = produce(state, (draft) => {\n dset(draft, [\"plugins\", id, \"flow\", \"data\", \"logs\"], logs);\n });\n\n const transaction = genDataChangeTransaction({\n playerID,\n data: newState.plugins[id].flow.data,\n pluginID: id,\n });\n\n dispatch(transaction);\n }, [logs]);\n\n // Flow changes\n useEffect(() => {\n if (dequal(state.plugins[id]?.flow?.data?.flow, flow)) return;\n\n const newState = produce(state, (draft) => {\n dset(draft, [\"plugins\", id, \"flow\", \"data\", \"flow\"], flow);\n });\n\n const transaction = genDataChangeTransaction({\n playerID,\n data: newState.plugins[id].flow.data,\n pluginID: id,\n });\n\n dispatch(transaction);\n }, [flow]);\n\n return children as JSX.Element;\n};\n","import type { PluginData } from \"@player-tools/devtools-types\";\n\nexport const PLUGIN_ID = \"player-ui-basic-devtools-plugin\";\n\nexport const PLUGIN_NAME = \"Standard Devtools\";\n\nexport const PLUGIN_DESCRIPTION = \"Standard Player UI Devtools\";\n\nexport const PLUGIN_VERSION = \"0.0.1\";\n\nexport const VIEWS_IDS = {\n CONFIG: \"Config\",\n FLOW: \"Flow\",\n LOGS: \"Logs\",\n CONSOLE: \"Console\",\n};\n\nexport const INTERACTIONS = {\n EVALUATE_EXPRESSION: \"evaluate-expression\",\n};\n\nexport const BASE_PLUGIN_DATA: Omit<PluginData, \"flow\"> = {\n id: PLUGIN_ID,\n name: PLUGIN_NAME,\n description: PLUGIN_DESCRIPTION,\n version: PLUGIN_VERSION,\n};\n\nexport const PLUGIN_INACTIVE_WARNING =\n \"The plugin has been registered, but the Player development tools are not active. If you are working in a production environment, it is recommended to remove the plugin. Either way, you can activate the Player development tools by clicking on the extension popup and refreshing the page.\";\n","import { ExpressionEvaluator } from \"@player-ui/react\";\nimport { v4 as uuid } from \"uuid\";\nimport { Evaluation } from \"../types\";\n\n/**\n * Creates a function to evaluate expressions using an nullable Player-UI's ExpressionEvaluator.\n *\n * This function factory takes an nullable WeakRef to an ExpressionEvaluator and returns\n * a new function that can be used to evaluate expressions. If the ExpressionEvaluator is\n * not available, it returns an error Evaluation. Otherwise, it attempts to evaluate the\n * expression. If the evaluation is successful, it returns the result. If there's an error\n * during evaluation, it captures the error and returns it as part of the Evaluation object.\n */\nexport const getEvaluateExpression =\n (expressionEvaluator?: WeakRef<ExpressionEvaluator>) =>\n (expression: string): Evaluation => {\n if (!expressionEvaluator) {\n return {\n id: uuid(),\n severity: \"error\",\n result: \"Expression evaluator not available\",\n expression,\n };\n }\n\n let result: Evaluation = {\n id: uuid(),\n severity: \"error\",\n result: \"Something went wrong\",\n expression,\n };\n\n try {\n expressionEvaluator.deref()?.hooks.onError.intercept({\n call: (error: Error) => {\n throw error;\n },\n });\n\n const evaluatorResult = expressionEvaluator.deref()?.evaluate(expression);\n\n result = {\n id: uuid(),\n result: evaluatorResult,\n expression,\n };\n } catch (error) {\n if (error instanceof Error) {\n result = {\n id: uuid(),\n severity: \"error\",\n result: error.message,\n expression,\n };\n }\n }\n\n return result;\n };\n","import type {\n DevtoolsDataChangeEvent,\n Transaction,\n} from \"@player-tools/devtools-types\";\nimport type { Flow } from \"@player-ui/react\";\n\nconst NOOP_ID = -1;\n\n/**\n * Generates a data change transaction for the player devtools plugin.\n *\n * This function creates a transaction object that represents a change in data\n * within a player devtools plugin. The transaction includes details such as the\n * plugin ID, the changed data, and the player ID. It is used to communicate\n * changes between the plugin and devtools.\n */\nexport const genDataChangeTransaction = ({\n playerID,\n data,\n pluginID,\n}: {\n playerID: string;\n data: Flow[\"data\"];\n pluginID: string;\n}): Transaction<DevtoolsDataChangeEvent> => {\n return {\n id: NOOP_ID,\n type: \"PLAYER_DEVTOOLS_PLUGIN_DATA_CHANGE\",\n payload: {\n pluginID,\n data,\n },\n sender: playerID,\n context: \"player\",\n target: \"player\",\n timestamp: Date.now(),\n _messenger_: true,\n };\n};\n","{\n \"id\": \"player-ui-basic-devtools-plugin\",\n \"views\": [\n {\n \"id\": \"Config\",\n \"type\": \"stacked-view\",\n \"header\": {\n \"asset\": {\n \"id\": \"Config-header\",\n \"type\": \"navigation\",\n \"values\": [\n {\n \"asset\": {\n \"id\": \"Config-header-values-0\",\n \"type\": \"action\",\n \"value\": \"Config\",\n \"label\": {\n \"asset\": {\n \"id\": \"Config-header-values-0-label\",\n \"type\": \"text\",\n \"value\": \"Config\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Config-header-values-1\",\n \"type\": \"action\",\n \"value\": \"Flow\",\n \"label\": {\n \"asset\": {\n \"id\": \"Config-header-values-1-label\",\n \"type\": \"text\",\n \"value\": \"Flow\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Config-header-values-2\",\n \"type\": \"action\",\n \"value\": \"Logs\",\n \"label\": {\n \"asset\": {\n \"id\": \"Config-header-values-2-label\",\n \"type\": \"text\",\n \"value\": \"Logs\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Config-header-values-3\",\n \"type\": \"action\",\n \"value\": \"Console\",\n \"label\": {\n \"asset\": {\n \"id\": \"Config-header-values-3-label\",\n \"type\": \"text\",\n \"value\": \"Console\"\n }\n }\n }\n }\n ]\n }\n },\n \"main\": {\n \"asset\": {\n \"id\": \"Config-main\",\n \"type\": \"object-inspector\",\n \"binding\": \"playerConfig\",\n \"label\": {\n \"asset\": {\n \"id\": \"Config-main-label\",\n \"type\": \"text\",\n \"value\": \"Config\"\n }\n }\n }\n }\n },\n {\n \"id\": \"Flow\",\n \"type\": \"stacked-view\",\n \"header\": {\n \"asset\": {\n \"id\": \"Flow-header\",\n \"type\": \"navigation\",\n \"values\": [\n {\n \"asset\": {\n \"id\": \"Flow-header-values-0\",\n \"type\": \"action\",\n \"value\": \"Config\",\n \"label\": {\n \"asset\": {\n \"id\": \"Flow-header-values-0-label\",\n \"type\": \"text\",\n \"value\": \"Config\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Flow-header-values-1\",\n \"type\": \"action\",\n \"value\": \"Flow\",\n \"label\": {\n \"asset\": {\n \"id\": \"Flow-header-values-1-label\",\n \"type\": \"text\",\n \"value\": \"Flow\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Flow-header-values-2\",\n \"type\": \"action\",\n \"value\": \"Logs\",\n \"label\": {\n \"asset\": {\n \"id\": \"Flow-header-values-2-label\",\n \"type\": \"text\",\n \"value\": \"Logs\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Flow-header-values-3\",\n \"type\": \"action\",\n \"value\": \"Console\",\n \"label\": {\n \"asset\": {\n \"id\": \"Flow-header-values-3-label\",\n \"type\": \"text\",\n \"value\": \"Console\"\n }\n }\n }\n }\n ]\n }\n },\n \"main\": {\n \"asset\": {\n \"id\": \"Flow-main\",\n \"type\": \"object-inspector\",\n \"binding\": \"flow\",\n \"label\": {\n \"asset\": {\n \"id\": \"Flow-main-label\",\n \"type\": \"text\",\n \"value\": \"Flow\"\n }\n }\n }\n },\n \"footer\": {\n \"asset\": {\n \"id\": \"Flow-footer\",\n \"type\": \"copy-to-clipboard\",\n \"binding\": \"flow\",\n \"label\": {\n \"asset\": {\n \"id\": \"Flow-footer-label\",\n \"type\": \"text\",\n \"value\": \"Copy flow to the clipboard\"\n }\n }\n }\n }\n },\n {\n \"id\": \"Logs\",\n \"type\": \"stacked-view\",\n \"header\": {\n \"asset\": {\n \"id\": \"Logs-header\",\n \"type\": \"navigation\",\n \"values\": [\n {\n \"asset\": {\n \"id\": \"Logs-header-values-0\",\n \"type\": \"action\",\n \"value\": \"Config\",\n \"label\": {\n \"asset\": {\n \"id\": \"Logs-header-values-0-label\",\n \"type\": \"text\",\n \"value\": \"Config\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Logs-header-values-1\",\n \"type\": \"action\",\n \"value\": \"Flow\",\n \"label\": {\n \"asset\": {\n \"id\": \"Logs-header-values-1-label\",\n \"type\": \"text\",\n \"value\": \"Flow\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Logs-header-values-2\",\n \"type\": \"action\",\n \"value\": \"Logs\",\n \"label\": {\n \"asset\": {\n \"id\": \"Logs-header-values-2-label\",\n \"type\": \"text\",\n \"value\": \"Logs\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Logs-header-values-3\",\n \"type\": \"action\",\n \"value\": \"Console\",\n \"label\": {\n \"asset\": {\n \"id\": \"Logs-header-values-3-label\",\n \"type\": \"text\",\n \"value\": \"Console\"\n }\n }\n }\n }\n ]\n }\n },\n \"main\": {\n \"asset\": {\n \"id\": \"Logs-main\",\n \"type\": \"table\",\n \"binding\": \"logs\"\n }\n }\n },\n {\n \"id\": \"Console\",\n \"type\": \"stacked-view\",\n \"header\": {\n \"asset\": {\n \"id\": \"Console-header\",\n \"type\": \"navigation\",\n \"values\": [\n {\n \"asset\": {\n \"id\": \"Console-header-values-0\",\n \"type\": \"action\",\n \"value\": \"Config\",\n \"label\": {\n \"asset\": {\n \"id\": \"Console-header-values-0-label\",\n \"type\": \"text\",\n \"value\": \"Config\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Console-header-values-1\",\n \"type\": \"action\",\n \"value\": \"Flow\",\n \"label\": {\n \"asset\": {\n \"id\": \"Console-header-values-1-label\",\n \"type\": \"text\",\n \"value\": \"Flow\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Console-header-values-2\",\n \"type\": \"action\",\n \"value\": \"Logs\",\n \"label\": {\n \"asset\": {\n \"id\": \"Console-header-values-2-label\",\n \"type\": \"text\",\n \"value\": \"Logs\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Console-header-values-3\",\n \"type\": \"action\",\n \"value\": \"Console\",\n \"label\": {\n \"asset\": {\n \"id\": \"Console-header-values-3-label\",\n \"type\": \"text\",\n \"value\": \"Console\"\n }\n }\n }\n }\n ]\n }\n },\n \"main\": {\n \"asset\": {\n \"id\": \"Console-main\",\n \"type\": \"console\",\n \"exp\": \" publish('evaluate-expression', {{expression}}) \",\n \"binding\": \"history\"\n }\n }\n }\n ],\n \"navigation\": {\n \"BEGIN\": \"Plugin\",\n \"Plugin\": {\n \"startState\": \"CONFIG\",\n \"CONFIG\": {\n \"state_type\": \"VIEW\",\n \"ref\": \"Config\",\n \"transitions\": {\n \"Config\": \"CONFIG\",\n \"Flow\": \"FLOW\",\n \"Logs\": \"LOGS\",\n \"Console\": \"CONSOLE\"\n }\n },\n \"FLOW\": {\n \"state_type\": \"VIEW\",\n \"ref\": \"Flow\",\n \"transitions\": {\n \"Config\": \"CONFIG\",\n \"Flow\": \"FLOW\",\n \"Logs\": \"LOGS\",\n \"Console\": \"CONSOLE\"\n }\n },\n \"LOGS\": {\n \"state_type\": \"VIEW\",\n \"ref\": \"Logs\",\n \"transitions\": {\n \"Config\": \"CONFIG\",\n \"Flow\": \"FLOW\",\n \"Logs\": \"LOGS\",\n \"Console\": \"CONSOLE\"\n }\n },\n \"CONSOLE\": {\n \"state_type\": \"VIEW\",\n \"ref\": \"Console\",\n \"transitions\": {\n \"Config\": \"CONFIG\",\n \"Flow\": \"FLOW\",\n \"Logs\": \"LOGS\",\n \"Console\": \"CONSOLE\"\n }\n }\n }\n },\n \"schema\": {\n \"ROOT\": {\n \"playerConfig\": {\n \"type\": \"RecordType\"\n },\n \"flow\": {\n \"type\": \"RecordType\"\n },\n \"expression\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"history\": {\n \"type\": \"historyType\",\n \"isArray\": true\n },\n \"logs\": {\n \"type\": \"logsType\",\n \"isArray\": true\n }\n },\n \"logsType\": {\n \"id\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"time\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"type\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"message\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"severity\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"binding\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"from\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"to\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"state\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"error\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"outcome\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"metricType\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n }\n },\n \"historyType\": {\n \"id\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"expression\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"result\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"severity\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"data\": {\n \"expression\": \"\",\n \"flow\": {},\n \"history\": [],\n \"logs\": [],\n \"playerConfig\": {}\n }\n}"],"mappings":"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","names":["dset","produce","React","produce","dset","React"]}
1
+ {"version":3,"sources":["../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/basic/src/index.tsx","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/basic/src/WrapperComponent.tsx","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/basic/src/constants/index.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/basic/src/helpers/getEvaluateExpression.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/basic/src/helpers/genDataChangeTransaction.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/basic/_generated/index.json"],"sourcesContent":["import type {\n DataController,\n ExpressionEvaluator,\n Flow,\n Player,\n ReactPlayer,\n ReactPlayerPlugin,\n ViewInstance,\n} from \"@player-ui/react\";\nimport { dset } from \"dset/merge\";\nimport { produce } from \"immer\";\nimport React from \"react\";\nimport { WrapperComponent } from \"./WrapperComponent\";\nimport { PLUGIN_ID, PLUGIN_INACTIVE_WARNING } from \"./constants\";\n\n/** Taps into the Player and ReactPlayer hooks and leverage the WrapperComponent to define and process the content. */\nexport class BasicWevDevtoolsPlugin implements ReactPlayerPlugin {\n name = PLUGIN_ID;\n\n data: Record<string, unknown> = {};\n\n playerConfig: Record<string, unknown> = {};\n\n logs: {\n severity: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n message: any;\n }[] = [];\n\n flow?: Flow;\n\n expressionEvaluator?: WeakRef<ExpressionEvaluator>;\n\n view?: WeakRef<ViewInstance>;\n\n dataController?: WeakRef<DataController>;\n\n overrideFlow?: ReactPlayer[\"start\"];\n\n checkIfDevtoolsIsActive() {\n return localStorage.getItem(\"player-ui-devtools-active\") === \"true\";\n }\n\n apply(player: Player) {\n if (!this.checkIfDevtoolsIsActive()) {\n console.log(PLUGIN_INACTIVE_WARNING);\n return;\n }\n\n // Config\n this.playerConfig = {\n version: player.getVersion(),\n plugins: player.getPlugins().map((plugin) => plugin.name),\n };\n\n // Data\n player.hooks.dataController.tap(this.name, (dataController) => {\n dataController.hooks.onUpdate.tap(this.name, (updates) => {\n const newPlayerState = produce(this.data, (draft) => {\n updates.forEach(({ binding, newValue }) => {\n dset(draft, [\"data\", ...binding.asArray()], newValue);\n });\n });\n this.data = newPlayerState;\n });\n });\n\n // Logs\n player.logger.hooks.log.tap(this.name, (severity, message) => {\n this.logs = [...this.logs, { severity, message }];\n });\n\n // Flow\n player.hooks.onStart.tap(this.name, (f) => {\n this.flow = f;\n });\n\n // View\n player.hooks.view.tap(this.name, (view) => {\n this.view = new WeakRef(view);\n });\n\n // Expression evaluator\n player.hooks.expressionEvaluator.tap(this.name, (evaluator) => {\n this.expressionEvaluator = new WeakRef(evaluator);\n });\n\n // Override flow\n this.overrideFlow = player.start.bind(player);\n }\n\n applyReact(reactPlayer: ReactPlayer) {\n if (!this.checkIfDevtoolsIsActive()) {\n return;\n }\n\n // eslint-disable-next-line react/display-name\n reactPlayer.hooks.webComponent.tap(this.name, (Comp) => () => {\n const Component = Comp as React.FC;\n\n return (\n <WrapperComponent\n playerConfig={this.playerConfig}\n data={this.data}\n logs={this.logs}\n flow={this.flow}\n view={this.view}\n overrideFlow={this.overrideFlow}\n expressionEvaluator={this.expressionEvaluator}\n >\n <Component />\n </WrapperComponent>\n );\n });\n }\n}\n","import { usePluginState } from \"@player-tools/devtools-desktop-plugins-common\";\nimport type {\n DevtoolsPluginInteractionEvent,\n PlayerInitEvent,\n PluginData,\n Transaction,\n} from \"@player-tools/devtools-types\";\nimport type { Flow } from \"@player-ui/react\";\nimport { dequal } from \"dequal\";\nimport { dset } from \"dset/merge\";\nimport { produce } from \"immer\";\nimport React, { useCallback, useEffect } from \"react\";\nimport { BASE_PLUGIN_DATA, INTERACTIONS } from \"./constants\";\nimport type { Evaluation, WrapperComponentProps } from \"./types\";\nimport { genDataChangeTransaction, getEvaluateExpression } from \"./helpers\";\nimport flow from \"../_generated/index.json\";\n\nconst pluginData: PluginData = {\n ...BASE_PLUGIN_DATA,\n flow: flow as Flow,\n};\n\n/** Defines the content to be rendered into the extension Player UI and process changes */\nexport const WrapperComponent = ({\n children,\n data,\n playerConfig,\n logs,\n flow,\n expressionEvaluator,\n overrideFlow,\n}: WrapperComponentProps): JSX.Element => {\n const [state, playerID, dispatch] = usePluginState();\n const lastProcessedInteraction = React.useRef(0);\n const expEvaluator = useCallback(getEvaluateExpression(expressionEvaluator), [\n expressionEvaluator,\n ]);\n\n const id = pluginData.id;\n\n const processInteraction = useCallback(\n (interaction: DevtoolsPluginInteractionEvent) => {\n const {\n payload: { type, payload },\n } = interaction;\n if (\n type === INTERACTIONS.EVALUATE_EXPRESSION &&\n expressionEvaluator &&\n payload\n ) {\n const result = expEvaluator(payload);\n\n const newState = produce(state, (draft) => {\n const current: Array<Evaluation> =\n (state?.plugins?.[id]?.flow?.data?.history as Array<Evaluation>) ||\n [];\n dset(\n draft,\n [\"plugins\", id, \"flow\", \"data\", \"history\"],\n [...current, result]\n );\n });\n\n dispatch({\n id: -1,\n type: \"PLAYER_DEVTOOLS_PLUGIN_DATA_CHANGE\",\n payload: {\n pluginID: id,\n data: newState.plugins[id].flow.data,\n },\n sender: playerID,\n context: \"player\",\n target: \"player\",\n timestamp: Date.now(),\n _messenger_: true,\n });\n\n lastProcessedInteraction.current += 1;\n }\n\n if (type === INTERACTIONS.OVERRIDE_FLOW && payload && overrideFlow) {\n let newFlow: Flow | undefined;\n\n try {\n newFlow = JSON.parse(payload);\n } catch (e) {\n console.error(\"Error parsing new flow\", e);\n }\n\n newFlow && overrideFlow(newFlow);\n }\n },\n [dispatch, expressionEvaluator, id, state]\n );\n\n // inject playerConfig into the plugin data\n const pluginDataWithPlayerConfig = produce(pluginData, (draft) => {\n dset(draft, [\"flow\", \"data\", \"playerConfig\"], playerConfig);\n });\n\n // Initial plugin content\n useEffect(() => {\n const transaction: Transaction<PlayerInitEvent> = {\n id: -1,\n type: \"PLAYER_DEVTOOLS_PLAYER_INIT\",\n payload: {\n plugins: {\n [id]: pluginDataWithPlayerConfig,\n },\n },\n sender: playerID,\n context: \"player\",\n target: \"player\",\n timestamp: Date.now(),\n _messenger_: true,\n };\n\n dispatch(transaction);\n }, []);\n\n // Process interactions\n useEffect(() => {\n if (lastProcessedInteraction.current < (state.interactions.length ?? 0)) {\n state.interactions\n .slice(lastProcessedInteraction.current)\n .forEach(processInteraction);\n }\n }, [state.interactions.length]);\n\n // Data changes\n useEffect(() => {\n if (dequal(state.plugins[id]?.flow?.data?.data, data)) return;\n\n const newState = produce(state, (draft) => {\n dset(draft, [\"plugins\", id, \"flow\", \"data\", \"data\"], data);\n });\n\n const transaction = genDataChangeTransaction({\n playerID,\n data: newState.plugins[id].flow.data,\n pluginID: id,\n });\n\n dispatch(transaction);\n }, [data]);\n\n // Logs changes\n useEffect(() => {\n if (dequal(state.plugins[id]?.flow?.data?.logs, logs)) return;\n\n const newState = produce(state, (draft) => {\n dset(draft, [\"plugins\", id, \"flow\", \"data\", \"logs\"], logs);\n });\n\n const transaction = genDataChangeTransaction({\n playerID,\n data: newState.plugins[id].flow.data,\n pluginID: id,\n });\n\n dispatch(transaction);\n }, [logs]);\n\n // Flow changes\n useEffect(() => {\n if (dequal(state.plugins[id]?.flow?.data?.flow, flow)) return;\n\n const newState = produce(state, (draft) => {\n dset(draft, [\"plugins\", id, \"flow\", \"data\", \"flow\"], flow);\n });\n\n const transaction = genDataChangeTransaction({\n playerID,\n data: newState.plugins[id].flow.data,\n pluginID: id,\n });\n\n dispatch(transaction);\n }, [flow]);\n\n return children as JSX.Element;\n};\n","import type { PluginData } from \"@player-tools/devtools-types\";\n\nexport const PLUGIN_ID = \"player-ui-basic-devtools-plugin\";\n\nexport const PLUGIN_NAME = \"Standard Devtools\";\n\nexport const PLUGIN_DESCRIPTION = \"Standard Player UI Devtools\";\n\nexport const PLUGIN_VERSION = \"0.0.1\";\n\nexport const VIEWS_IDS = {\n CONFIG: \"Config\",\n FLOW: \"Flow\",\n LOGS: \"Logs\",\n CONSOLE: \"Console\",\n EDITOR: \"Editor\",\n};\n\nexport const INTERACTIONS = {\n EVALUATE_EXPRESSION: \"evaluate-expression\",\n OVERRIDE_FLOW: \"override-flow\",\n};\n\nexport const BASE_PLUGIN_DATA: Omit<PluginData, \"flow\"> = {\n id: PLUGIN_ID,\n name: PLUGIN_NAME,\n description: PLUGIN_DESCRIPTION,\n version: PLUGIN_VERSION,\n};\n\nexport const PLUGIN_INACTIVE_WARNING =\n \"The plugin has been registered, but the Player development tools are not active. If you are working in a production environment, it is recommended to remove the plugin. Either way, you can activate the Player development tools by clicking on the extension popup and refreshing the page.\";\n","import { ExpressionEvaluator } from \"@player-ui/react\";\nimport { v4 as uuid } from \"uuid\";\nimport { Evaluation } from \"../types\";\n\n/**\n * Creates a function to evaluate expressions using an nullable Player-UI's ExpressionEvaluator.\n *\n * This function factory takes an nullable WeakRef to an ExpressionEvaluator and returns\n * a new function that can be used to evaluate expressions. If the ExpressionEvaluator is\n * not available, it returns an error Evaluation. Otherwise, it attempts to evaluate the\n * expression. If the evaluation is successful, it returns the result. If there's an error\n * during evaluation, it captures the error and returns it as part of the Evaluation object.\n */\nexport const getEvaluateExpression =\n (expressionEvaluator?: WeakRef<ExpressionEvaluator>) =>\n (expression: string): Evaluation => {\n if (!expressionEvaluator) {\n return {\n id: uuid(),\n severity: \"error\",\n result: \"Expression evaluator not available\",\n expression,\n };\n }\n\n let result: Evaluation = {\n id: uuid(),\n severity: \"error\",\n result: \"Something went wrong\",\n expression,\n };\n\n try {\n expressionEvaluator.deref()?.hooks.onError.intercept({\n call: (error: Error) => {\n throw error;\n },\n });\n\n const evaluatorResult = expressionEvaluator.deref()?.evaluate(expression);\n\n result = {\n id: uuid(),\n result: evaluatorResult,\n expression,\n };\n } catch (error) {\n if (error instanceof Error) {\n result = {\n id: uuid(),\n severity: \"error\",\n result: error.message,\n expression,\n };\n }\n }\n\n return result;\n };\n","import type {\n DevtoolsDataChangeEvent,\n Transaction,\n} from \"@player-tools/devtools-types\";\nimport type { Flow } from \"@player-ui/react\";\n\nconst NOOP_ID = -1;\n\n/**\n * Generates a data change transaction for the player devtools plugin.\n *\n * This function creates a transaction object that represents a change in data\n * within a player devtools plugin. The transaction includes details such as the\n * plugin ID, the changed data, and the player ID. It is used to communicate\n * changes between the plugin and devtools.\n */\nexport const genDataChangeTransaction = ({\n playerID,\n data,\n pluginID,\n}: {\n playerID: string;\n data: Flow[\"data\"];\n pluginID: string;\n}): Transaction<DevtoolsDataChangeEvent> => {\n return {\n id: NOOP_ID,\n type: \"PLAYER_DEVTOOLS_PLUGIN_DATA_CHANGE\",\n payload: {\n pluginID,\n data,\n },\n sender: playerID,\n context: \"player\",\n target: \"player\",\n timestamp: Date.now(),\n _messenger_: true,\n };\n};\n","{\n \"id\": \"player-ui-basic-devtools-plugin\",\n \"views\": [\n {\n \"id\": \"Config\",\n \"type\": \"stacked-view\",\n \"header\": {\n \"asset\": {\n \"id\": \"Config-header\",\n \"type\": \"navigation\",\n \"values\": [\n {\n \"asset\": {\n \"id\": \"Config-header-values-0\",\n \"type\": \"action\",\n \"value\": \"Config\",\n \"label\": {\n \"asset\": {\n \"id\": \"Config-header-values-0-label\",\n \"type\": \"text\",\n \"value\": \"Config\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Config-header-values-1\",\n \"type\": \"action\",\n \"value\": \"Flow\",\n \"label\": {\n \"asset\": {\n \"id\": \"Config-header-values-1-label\",\n \"type\": \"text\",\n \"value\": \"Flow\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Config-header-values-2\",\n \"type\": \"action\",\n \"value\": \"Logs\",\n \"label\": {\n \"asset\": {\n \"id\": \"Config-header-values-2-label\",\n \"type\": \"text\",\n \"value\": \"Logs\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Config-header-values-3\",\n \"type\": \"action\",\n \"value\": \"Console\",\n \"label\": {\n \"asset\": {\n \"id\": \"Config-header-values-3-label\",\n \"type\": \"text\",\n \"value\": \"Console\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Config-header-values-4\",\n \"type\": \"action\",\n \"value\": \"Editor\",\n \"label\": {\n \"asset\": {\n \"id\": \"Config-header-values-4-label\",\n \"type\": \"text\",\n \"value\": \"Editor\"\n }\n }\n }\n }\n ]\n }\n },\n \"main\": {\n \"asset\": {\n \"id\": \"Config-main\",\n \"type\": \"object-inspector\",\n \"binding\": \"playerConfig\",\n \"label\": {\n \"asset\": {\n \"id\": \"Config-main-label\",\n \"type\": \"text\",\n \"value\": \"Config\"\n }\n }\n }\n }\n },\n {\n \"id\": \"Flow\",\n \"type\": \"stacked-view\",\n \"header\": {\n \"asset\": {\n \"id\": \"Flow-header\",\n \"type\": \"navigation\",\n \"values\": [\n {\n \"asset\": {\n \"id\": \"Flow-header-values-0\",\n \"type\": \"action\",\n \"value\": \"Config\",\n \"label\": {\n \"asset\": {\n \"id\": \"Flow-header-values-0-label\",\n \"type\": \"text\",\n \"value\": \"Config\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Flow-header-values-1\",\n \"type\": \"action\",\n \"value\": \"Flow\",\n \"label\": {\n \"asset\": {\n \"id\": \"Flow-header-values-1-label\",\n \"type\": \"text\",\n \"value\": \"Flow\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Flow-header-values-2\",\n \"type\": \"action\",\n \"value\": \"Logs\",\n \"label\": {\n \"asset\": {\n \"id\": \"Flow-header-values-2-label\",\n \"type\": \"text\",\n \"value\": \"Logs\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Flow-header-values-3\",\n \"type\": \"action\",\n \"value\": \"Console\",\n \"label\": {\n \"asset\": {\n \"id\": \"Flow-header-values-3-label\",\n \"type\": \"text\",\n \"value\": \"Console\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Flow-header-values-4\",\n \"type\": \"action\",\n \"value\": \"Editor\",\n \"label\": {\n \"asset\": {\n \"id\": \"Flow-header-values-4-label\",\n \"type\": \"text\",\n \"value\": \"Editor\"\n }\n }\n }\n }\n ]\n }\n },\n \"main\": {\n \"asset\": {\n \"id\": \"Flow-main\",\n \"type\": \"object-inspector\",\n \"binding\": \"flow\",\n \"label\": {\n \"asset\": {\n \"id\": \"Flow-main-label\",\n \"type\": \"text\",\n \"value\": \"Flow\"\n }\n }\n }\n },\n \"footer\": {\n \"asset\": {\n \"id\": \"Flow-footer\",\n \"type\": \"copy-to-clipboard\",\n \"binding\": \"flow\",\n \"label\": {\n \"asset\": {\n \"id\": \"Flow-footer-label\",\n \"type\": \"text\",\n \"value\": \"Copy flow to the clipboard\"\n }\n }\n }\n }\n },\n {\n \"id\": \"Logs\",\n \"type\": \"stacked-view\",\n \"header\": {\n \"asset\": {\n \"id\": \"Logs-header\",\n \"type\": \"navigation\",\n \"values\": [\n {\n \"asset\": {\n \"id\": \"Logs-header-values-0\",\n \"type\": \"action\",\n \"value\": \"Config\",\n \"label\": {\n \"asset\": {\n \"id\": \"Logs-header-values-0-label\",\n \"type\": \"text\",\n \"value\": \"Config\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Logs-header-values-1\",\n \"type\": \"action\",\n \"value\": \"Flow\",\n \"label\": {\n \"asset\": {\n \"id\": \"Logs-header-values-1-label\",\n \"type\": \"text\",\n \"value\": \"Flow\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Logs-header-values-2\",\n \"type\": \"action\",\n \"value\": \"Logs\",\n \"label\": {\n \"asset\": {\n \"id\": \"Logs-header-values-2-label\",\n \"type\": \"text\",\n \"value\": \"Logs\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Logs-header-values-3\",\n \"type\": \"action\",\n \"value\": \"Console\",\n \"label\": {\n \"asset\": {\n \"id\": \"Logs-header-values-3-label\",\n \"type\": \"text\",\n \"value\": \"Console\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Logs-header-values-4\",\n \"type\": \"action\",\n \"value\": \"Editor\",\n \"label\": {\n \"asset\": {\n \"id\": \"Logs-header-values-4-label\",\n \"type\": \"text\",\n \"value\": \"Editor\"\n }\n }\n }\n }\n ]\n }\n },\n \"main\": {\n \"asset\": {\n \"id\": \"Logs-main\",\n \"type\": \"table\",\n \"binding\": \"logs\"\n }\n }\n },\n {\n \"id\": \"Console\",\n \"type\": \"stacked-view\",\n \"header\": {\n \"asset\": {\n \"id\": \"Console-header\",\n \"type\": \"navigation\",\n \"values\": [\n {\n \"asset\": {\n \"id\": \"Console-header-values-0\",\n \"type\": \"action\",\n \"value\": \"Config\",\n \"label\": {\n \"asset\": {\n \"id\": \"Console-header-values-0-label\",\n \"type\": \"text\",\n \"value\": \"Config\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Console-header-values-1\",\n \"type\": \"action\",\n \"value\": \"Flow\",\n \"label\": {\n \"asset\": {\n \"id\": \"Console-header-values-1-label\",\n \"type\": \"text\",\n \"value\": \"Flow\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Console-header-values-2\",\n \"type\": \"action\",\n \"value\": \"Logs\",\n \"label\": {\n \"asset\": {\n \"id\": \"Console-header-values-2-label\",\n \"type\": \"text\",\n \"value\": \"Logs\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Console-header-values-3\",\n \"type\": \"action\",\n \"value\": \"Console\",\n \"label\": {\n \"asset\": {\n \"id\": \"Console-header-values-3-label\",\n \"type\": \"text\",\n \"value\": \"Console\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Console-header-values-4\",\n \"type\": \"action\",\n \"value\": \"Editor\",\n \"label\": {\n \"asset\": {\n \"id\": \"Console-header-values-4-label\",\n \"type\": \"text\",\n \"value\": \"Editor\"\n }\n }\n }\n }\n ]\n }\n },\n \"main\": {\n \"asset\": {\n \"id\": \"Console-main\",\n \"type\": \"console\",\n \"exp\": \" publish('evaluate-expression', {{expression}}) \",\n \"binding\": \"history\"\n }\n }\n },\n {\n \"id\": \"Editor\",\n \"type\": \"stacked-view\",\n \"header\": {\n \"asset\": {\n \"id\": \"Editor-header\",\n \"type\": \"navigation\",\n \"values\": [\n {\n \"asset\": {\n \"id\": \"Editor-header-values-0\",\n \"type\": \"action\",\n \"value\": \"Config\",\n \"label\": {\n \"asset\": {\n \"id\": \"Editor-header-values-0-label\",\n \"type\": \"text\",\n \"value\": \"Config\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Editor-header-values-1\",\n \"type\": \"action\",\n \"value\": \"Flow\",\n \"label\": {\n \"asset\": {\n \"id\": \"Editor-header-values-1-label\",\n \"type\": \"text\",\n \"value\": \"Flow\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Editor-header-values-2\",\n \"type\": \"action\",\n \"value\": \"Logs\",\n \"label\": {\n \"asset\": {\n \"id\": \"Editor-header-values-2-label\",\n \"type\": \"text\",\n \"value\": \"Logs\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Editor-header-values-3\",\n \"type\": \"action\",\n \"value\": \"Console\",\n \"label\": {\n \"asset\": {\n \"id\": \"Editor-header-values-3-label\",\n \"type\": \"text\",\n \"value\": \"Console\"\n }\n }\n }\n },\n {\n \"asset\": {\n \"id\": \"Editor-header-values-4\",\n \"type\": \"action\",\n \"value\": \"Editor\",\n \"label\": {\n \"asset\": {\n \"id\": \"Editor-header-values-4-label\",\n \"type\": \"text\",\n \"value\": \"Editor\"\n }\n }\n }\n }\n ]\n }\n },\n \"main\": {\n \"asset\": {\n \"id\": \"Editor-main\",\n \"type\": \"code-editor\",\n \"binding\": \"flow\",\n \"exp\": \" publish('override-flow', {{code}}) \"\n }\n }\n }\n ],\n \"navigation\": {\n \"BEGIN\": \"Plugin\",\n \"Plugin\": {\n \"startState\": \"CONFIG\",\n \"CONFIG\": {\n \"state_type\": \"VIEW\",\n \"ref\": \"Config\",\n \"transitions\": {\n \"Config\": \"CONFIG\",\n \"Flow\": \"FLOW\",\n \"Logs\": \"LOGS\",\n \"Console\": \"CONSOLE\",\n \"Editor\": \"EDITOR\"\n }\n },\n \"FLOW\": {\n \"state_type\": \"VIEW\",\n \"ref\": \"Flow\",\n \"transitions\": {\n \"Config\": \"CONFIG\",\n \"Flow\": \"FLOW\",\n \"Logs\": \"LOGS\",\n \"Console\": \"CONSOLE\",\n \"Editor\": \"EDITOR\"\n }\n },\n \"LOGS\": {\n \"state_type\": \"VIEW\",\n \"ref\": \"Logs\",\n \"transitions\": {\n \"Config\": \"CONFIG\",\n \"Flow\": \"FLOW\",\n \"Logs\": \"LOGS\",\n \"Console\": \"CONSOLE\",\n \"Editor\": \"EDITOR\"\n }\n },\n \"CONSOLE\": {\n \"state_type\": \"VIEW\",\n \"ref\": \"Console\",\n \"transitions\": {\n \"Config\": \"CONFIG\",\n \"Flow\": \"FLOW\",\n \"Logs\": \"LOGS\",\n \"Console\": \"CONSOLE\",\n \"Editor\": \"EDITOR\"\n }\n },\n \"EDITOR\": {\n \"state_type\": \"VIEW\",\n \"ref\": \"Editor\",\n \"transitions\": {\n \"Config\": \"CONFIG\",\n \"Flow\": \"FLOW\",\n \"Logs\": \"LOGS\",\n \"Console\": \"CONSOLE\",\n \"Editor\": \"EDITOR\"\n }\n }\n }\n },\n \"schema\": {\n \"ROOT\": {\n \"playerConfig\": {\n \"type\": \"RecordType\"\n },\n \"flow\": {\n \"type\": \"RecordType\"\n },\n \"expression\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"code\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"history\": {\n \"type\": \"historyType\",\n \"isArray\": true\n },\n \"logs\": {\n \"type\": \"logsType\",\n \"isArray\": true\n }\n },\n \"logsType\": {\n \"id\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"time\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"type\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"message\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"severity\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"binding\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"from\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"to\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"state\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"error\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"outcome\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"metricType\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n }\n },\n \"historyType\": {\n \"id\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"expression\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"result\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n },\n \"severity\": {\n \"type\": \"StringType\",\n \"default\": \"\",\n \"validation\": [\n {\n \"type\": \"string\"\n }\n ],\n \"format\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"data\": {\n \"expression\": \"\",\n \"flow\": {},\n \"history\": [],\n \"logs\": [],\n \"playerConfig\": {}\n }\n}"],"mappings":"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","names":["dset","produce","React","produce","dset","React"]}
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@player-tools/devtools-basic-web-plugin",
3
- "version": "0.6.1--canary.110.2690",
3
+ "version": "0.6.1-next.1",
4
4
  "main": "dist/cjs/index.cjs",
5
5
  "dependencies": {
6
- "@player-tools/devtools-types": "0.6.1--canary.110.2690",
7
- "@player-tools/devtools-desktop-plugins-common": "0.6.1--canary.110.2690",
8
- "@player-tools/dsl": "0.6.1--canary.110.2690",
9
- "@player-tools/cli": "0.6.1--canary.110.2690",
10
- "@player-ui/common-types-plugin": "0.7.2-next.4",
11
- "@player-ui/react": "0.7.2-next.4",
12
- "@devtools-ui/plugin": "0.0.2--canary.15.697",
13
- "@player-ui/types": "0.7.2-next.4",
6
+ "@player-tools/devtools-types": "0.6.1-next.1",
7
+ "@player-tools/devtools-desktop-plugins-common": "0.6.1-next.1",
8
+ "@player-tools/dsl": "0.6.1-next.1",
9
+ "@player-tools/cli": "0.6.1-next.1",
10
+ "@player-ui/common-types-plugin": "0.7.3",
11
+ "@player-ui/react": "0.7.3",
12
+ "@devtools-ui/plugin": "0.1.1",
13
+ "@player-ui/types": "0.7.3",
14
14
  "@types/react": "^18.2.51",
15
15
  "react": "^18.2.0",
16
16
  "immer": "^10.0.3",
@@ -28,6 +28,7 @@ export const WrapperComponent = ({
28
28
  logs,
29
29
  flow,
30
30
  expressionEvaluator,
31
+ overrideFlow,
31
32
  }: WrapperComponentProps): JSX.Element => {
32
33
  const [state, playerID, dispatch] = usePluginState();
33
34
  const lastProcessedInteraction = React.useRef(0);
@@ -76,6 +77,18 @@ export const WrapperComponent = ({
76
77
 
77
78
  lastProcessedInteraction.current += 1;
78
79
  }
80
+
81
+ if (type === INTERACTIONS.OVERRIDE_FLOW && payload && overrideFlow) {
82
+ let newFlow: Flow | undefined;
83
+
84
+ try {
85
+ newFlow = JSON.parse(payload);
86
+ } catch (e) {
87
+ console.error("Error parsing new flow", e);
88
+ }
89
+
90
+ newFlow && overrideFlow(newFlow);
91
+ }
79
92
  },
80
93
  [dispatch, expressionEvaluator, id, state]
81
94
  );
@@ -13,10 +13,12 @@ export const VIEWS_IDS = {
13
13
  FLOW: "Flow",
14
14
  LOGS: "Logs",
15
15
  CONSOLE: "Console",
16
+ EDITOR: "Editor",
16
17
  };
17
18
 
18
19
  export const INTERACTIONS = {
19
20
  EVALUATE_EXPRESSION: "evaluate-expression",
21
+ OVERRIDE_FLOW: "override-flow",
20
22
  };
21
23
 
22
24
  export const BASE_PLUGIN_DATA: Omit<PluginData, "flow"> = {
@@ -10,6 +10,7 @@ export const schema = {
10
10
  playerConfig: RecordType,
11
11
  flow: RecordType,
12
12
  expression: dataTypes.StringType,
13
+ code: dataTypes.StringType,
13
14
  history: [
14
15
  {
15
16
  id: dataTypes.StringType,
@@ -0,0 +1,20 @@
1
+ import { expression as e } from "@player-tools/dsl";
2
+ import { CodeEditor } from "@devtools-ui/plugin";
3
+ import React from "react";
4
+ import { VIEWS_IDS, INTERACTIONS } from "../../constants";
5
+ import { Screen } from "../common";
6
+ import { bindings } from "../schema";
7
+
8
+ const evaluateExpression = e` publish('${INTERACTIONS.OVERRIDE_FLOW}', ${bindings.code}) `;
9
+
10
+ export const EditorView = (
11
+ <Screen
12
+ id={VIEWS_IDS.EDITOR}
13
+ main={
14
+ <CodeEditor
15
+ exp={evaluateExpression as any}
16
+ binding={bindings.flow as any}
17
+ />
18
+ }
19
+ />
20
+ );
@@ -2,5 +2,6 @@ import { ConfigView } from "./ConfigView";
2
2
  import { ConsoleView } from "./ConsoleView";
3
3
  import { FlowView } from "./FlowView";
4
4
  import { LogsView } from "./LogsView";
5
+ import { EditorView } from "./EditorView";
5
6
 
6
- export const views = [ConfigView, FlowView, LogsView, ConsoleView];
7
+ export const views = [ConfigView, FlowView, LogsView, ConsoleView, EditorView];
package/src/index.tsx CHANGED
@@ -35,6 +35,8 @@ export class BasicWevDevtoolsPlugin implements ReactPlayerPlugin {
35
35
 
36
36
  dataController?: WeakRef<DataController>;
37
37
 
38
+ overrideFlow?: ReactPlayer["start"];
39
+
38
40
  checkIfDevtoolsIsActive() {
39
41
  return localStorage.getItem("player-ui-devtools-active") === "true";
40
42
  }
@@ -82,6 +84,9 @@ export class BasicWevDevtoolsPlugin implements ReactPlayerPlugin {
82
84
  player.hooks.expressionEvaluator.tap(this.name, (evaluator) => {
83
85
  this.expressionEvaluator = new WeakRef(evaluator);
84
86
  });
87
+
88
+ // Override flow
89
+ this.overrideFlow = player.start.bind(player);
85
90
  }
86
91
 
87
92
  applyReact(reactPlayer: ReactPlayer) {
@@ -100,6 +105,7 @@ export class BasicWevDevtoolsPlugin implements ReactPlayerPlugin {
100
105
  logs={this.logs}
101
106
  flow={this.flow}
102
107
  view={this.view}
108
+ overrideFlow={this.overrideFlow}
103
109
  expressionEvaluator={this.expressionEvaluator}
104
110
  >
105
111
  <Component />
package/src/types.ts CHANGED
@@ -1,4 +1,8 @@
1
- import { ExpressionEvaluator, ViewInstance } from "@player-ui/react";
1
+ import type {
2
+ ExpressionEvaluator,
3
+ Player,
4
+ ViewInstance,
5
+ } from "@player-ui/react";
2
6
  import { Flow } from "@player-ui/types";
3
7
 
4
8
  export interface Evaluation {
@@ -32,4 +36,6 @@ export interface WrapperComponentProps {
32
36
  expressionEvaluator?: WeakRef<ExpressionEvaluator>;
33
37
  /** view instace */
34
38
  view?: WeakRef<ViewInstance>;
39
+ /** override flow */
40
+ overrideFlow?: Player["start"];
35
41
  }
@@ -1,4 +1,4 @@
1
1
  import type { WrapperComponentProps } from "./types";
2
2
  /** Defines the content to be rendered into the extension Player UI and process changes */
3
- export declare const WrapperComponent: ({ children, data, playerConfig, logs, flow, expressionEvaluator, }: WrapperComponentProps) => JSX.Element;
3
+ export declare const WrapperComponent: ({ children, data, playerConfig, logs, flow, expressionEvaluator, overrideFlow, }: WrapperComponentProps) => JSX.Element;
4
4
  //# sourceMappingURL=WrapperComponent.d.ts.map
@@ -8,9 +8,11 @@ export declare const VIEWS_IDS: {
8
8
  FLOW: string;
9
9
  LOGS: string;
10
10
  CONSOLE: string;
11
+ EDITOR: string;
11
12
  };
12
13
  export declare const INTERACTIONS: {
13
14
  EVALUATE_EXPRESSION: string;
15
+ OVERRIDE_FLOW: string;
14
16
  };
15
17
  export declare const BASE_PLUGIN_DATA: Omit<PluginData, "flow">;
16
18
  export declare const PLUGIN_INACTIVE_WARNING = "The plugin has been registered, but the Player development tools are not active. If you are working in a production environment, it is recommended to remove the plugin. Either way, you can activate the Player development tools by clicking on the extension popup and refreshing the page.";
@@ -12,6 +12,7 @@ declare const _default: {
12
12
  playerConfig: import("@player-ui/types").Schema.DataType<Record<string, unknown>>;
13
13
  flow: import("@player-ui/types").Schema.DataType<Record<string, unknown>>;
14
14
  expression: import("@player-ui/types").Schema.DataType<string>;
15
+ code: import("@player-ui/types").Schema.DataType<string>;
15
16
  history: [import("@player-tools/dsl").DSLSchema<Omit<import("@player-ui/types").Schema.DataType<unknown>, "type" | "validation"> & {
16
17
  type: string | number;
17
18
  validation?: import("@player-ui/types").Validation.Reference[] | undefined;
@@ -4,6 +4,7 @@ export declare const schema: {
4
4
  playerConfig: Schema.DataType<Record<string, unknown>>;
5
5
  flow: Schema.DataType<Record<string, unknown>>;
6
6
  expression: Schema.DataType<string>;
7
+ code: Schema.DataType<string>;
7
8
  history: [DSLSchema<Omit<Schema.DataType<unknown>, "type" | "validation"> & {
8
9
  type: string | number;
9
10
  validation?: import("@player-ui/types").Validation.Reference[] | undefined;
@@ -17,6 +18,7 @@ export declare const bindings: import("@player-tools/dsl").MakeBindingRefable<{
17
18
  playerConfig: Schema.DataType<Record<string, unknown>>;
18
19
  flow: Schema.DataType<Record<string, unknown>>;
19
20
  expression: Schema.DataType<string>;
21
+ code: Schema.DataType<string>;
20
22
  history: [DSLSchema<Omit<Schema.DataType<unknown>, "type" | "validation"> & {
21
23
  type: string | number;
22
24
  validation?: import("@player-ui/types").Validation.Reference[] | undefined;
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ export declare const EditorView: React.JSX.Element;
3
+ //# sourceMappingURL=EditorView.d.ts.map
package/types/index.d.ts CHANGED
@@ -12,6 +12,7 @@ export declare class BasicWevDevtoolsPlugin implements ReactPlayerPlugin {
12
12
  expressionEvaluator?: WeakRef<ExpressionEvaluator>;
13
13
  view?: WeakRef<ViewInstance>;
14
14
  dataController?: WeakRef<DataController>;
15
+ overrideFlow?: ReactPlayer["start"];
15
16
  checkIfDevtoolsIsActive(): boolean;
16
17
  apply(player: Player): void;
17
18
  applyReact(reactPlayer: ReactPlayer): void;
package/types/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { ExpressionEvaluator, ViewInstance } from "@player-ui/react";
2
+ import type { ExpressionEvaluator, Player, ViewInstance } from "@player-ui/react";
3
3
  import { Flow } from "@player-ui/types";
4
4
  export interface Evaluation {
5
5
  /** A unique key for this expression */
@@ -31,5 +31,7 @@ export interface WrapperComponentProps {
31
31
  expressionEvaluator?: WeakRef<ExpressionEvaluator>;
32
32
  /** view instace */
33
33
  view?: WeakRef<ViewInstance>;
34
+ /** override flow */
35
+ overrideFlow?: Player["start"];
34
36
  }
35
37
  //# sourceMappingURL=types.d.ts.map