@player-tools/devtools-basic-web-plugin 0.5.3--canary.90.2515
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.
- package/dist/cjs/index.cjs +919 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/index.legacy-esm.js +884 -0
- package/dist/index.mjs +884 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +41 -0
- package/src/WrapperComponent.tsx +169 -0
- package/src/constants/index.ts +27 -0
- package/src/content/common/Screen.tsx +35 -0
- package/src/content/common/index.ts +1 -0
- package/src/content/index.ts +18 -0
- package/src/content/navigation/index.ts +27 -0
- package/src/content/schema/index.ts +39 -0
- package/src/content/views/ConfigView.tsx +16 -0
- package/src/content/views/ConsoleView.tsx +20 -0
- package/src/content/views/FlowView.tsx +23 -0
- package/src/content/views/LogsView.tsx +9 -0
- package/src/content/views/index.ts +6 -0
- package/src/helpers/genDataChangeTransaction.ts +29 -0
- package/src/helpers/getEvaluateExpression.ts +50 -0
- package/src/helpers/index.ts +2 -0
- package/src/index.tsx +96 -0
- package/src/types.ts +35 -0
- package/types/WrapperComponent.d.ts +4 -0
- package/types/constants/index.d.ts +16 -0
- package/types/content/common/Screen.d.ts +7 -0
- package/types/content/common/index.d.ts +2 -0
- package/types/content/index.d.ts +33 -0
- package/types/content/navigation/index.d.ts +7 -0
- package/types/content/schema/index.d.ts +29 -0
- package/types/content/views/ConfigView.d.ts +3 -0
- package/types/content/views/ConsoleView.d.ts +3 -0
- package/types/content/views/FlowView.d.ts +3 -0
- package/types/content/views/LogsView.d.ts +3 -0
- package/types/content/views/index.d.ts +3 -0
- package/types/helpers/genDataChangeTransaction.d.ts +8 -0
- package/types/helpers/getEvaluateExpression.d.ts +4 -0
- package/types/helpers/index.d.ts +3 -0
- package/types/index.d.ts +18 -0
- package/types/types.d.ts +35 -0
|
@@ -0,0 +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\";\n\n/** Basic Web Devtools Plugin */\nexport class BasicWevDevtoolsPlugin implements ReactPlayerPlugin {\n name = \"player_ui_basic_devtools_plugin\";\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 apply(player: Player) {\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 // 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/** Tap into the ReactPlayer hooks and create the content to be rendered into the extension Player UI */\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","import { ExpressionEvaluator } from \"@player-ui/react\";\nimport { v4 as uuid } from \"uuid\";\nimport { Evaluation } from \"../types\";\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\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: -1,\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"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@player-tools/devtools-basic-web-plugin",
|
|
3
|
+
"version": "0.5.3--canary.90.2515",
|
|
4
|
+
"main": "dist/cjs/index.cjs",
|
|
5
|
+
"dependencies": {
|
|
6
|
+
"@player-tools/devtools-types": "0.5.3--canary.90.2515",
|
|
7
|
+
"@player-tools/devtools-desktop-plugins-common": "0.5.3--canary.90.2515",
|
|
8
|
+
"@player-tools/dsl": "0.5.3--canary.90.2515",
|
|
9
|
+
"@player-tools/cli": "0.5.3--canary.90.2515",
|
|
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",
|
|
14
|
+
"@types/react": "^18.2.51",
|
|
15
|
+
"react": "^18.2.0",
|
|
16
|
+
"immer": "^10.0.3",
|
|
17
|
+
"uuid": "^8.3.2",
|
|
18
|
+
"@types/uuid": "^8.3.4",
|
|
19
|
+
"dset": "^3.1.3",
|
|
20
|
+
"dequal": "^2.0.2",
|
|
21
|
+
"tslib": "^2.6.2"
|
|
22
|
+
},
|
|
23
|
+
"module": "dist/index.legacy-esm.js",
|
|
24
|
+
"types": "types/index.d.ts",
|
|
25
|
+
"sideEffects": false,
|
|
26
|
+
"exports": {
|
|
27
|
+
"./package.json": "./package.json",
|
|
28
|
+
"./dist/index.css": "./dist/index.css",
|
|
29
|
+
".": {
|
|
30
|
+
"types": "./types/index.d.ts",
|
|
31
|
+
"import": "./dist/index.mjs",
|
|
32
|
+
"default": "./dist/cjs/index.cjs"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist",
|
|
37
|
+
"src",
|
|
38
|
+
"types"
|
|
39
|
+
],
|
|
40
|
+
"peerDependencies": {}
|
|
41
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { usePluginState } from "@player-tools/devtools-desktop-plugins-common";
|
|
2
|
+
import type {
|
|
3
|
+
DevtoolsPluginInteractionEvent,
|
|
4
|
+
PlayerInitEvent,
|
|
5
|
+
PluginData,
|
|
6
|
+
Transaction,
|
|
7
|
+
} from "@player-tools/devtools-types";
|
|
8
|
+
import type { Flow } from "@player-ui/react";
|
|
9
|
+
import { dequal } from "dequal";
|
|
10
|
+
import { dset } from "dset/merge";
|
|
11
|
+
import { produce } from "immer";
|
|
12
|
+
import React, { useCallback, useEffect } from "react";
|
|
13
|
+
import { BASE_PLUGIN_DATA, INTERACTIONS } from "./constants";
|
|
14
|
+
import type { Evaluation, WrapperComponentProps } from "./types";
|
|
15
|
+
import { genDataChangeTransaction, getEvaluateExpression } from "./helpers";
|
|
16
|
+
import flow from "../_generated/index.json";
|
|
17
|
+
|
|
18
|
+
const pluginData: PluginData = {
|
|
19
|
+
...BASE_PLUGIN_DATA,
|
|
20
|
+
flow: flow as Flow,
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/** Tap into the ReactPlayer hooks and create the content to be rendered into the extension Player UI */
|
|
24
|
+
export const WrapperComponent = ({
|
|
25
|
+
children,
|
|
26
|
+
data,
|
|
27
|
+
playerConfig,
|
|
28
|
+
logs,
|
|
29
|
+
flow,
|
|
30
|
+
expressionEvaluator,
|
|
31
|
+
}: WrapperComponentProps): JSX.Element => {
|
|
32
|
+
const [state, playerID, dispatch] = usePluginState();
|
|
33
|
+
const lastProcessedInteraction = React.useRef(0);
|
|
34
|
+
const expEvaluator = useCallback(getEvaluateExpression(expressionEvaluator), [
|
|
35
|
+
expressionEvaluator,
|
|
36
|
+
]);
|
|
37
|
+
|
|
38
|
+
const id = pluginData.id;
|
|
39
|
+
|
|
40
|
+
const processInteraction = useCallback(
|
|
41
|
+
(interaction: DevtoolsPluginInteractionEvent) => {
|
|
42
|
+
const {
|
|
43
|
+
payload: { type, payload },
|
|
44
|
+
} = interaction;
|
|
45
|
+
if (
|
|
46
|
+
type === INTERACTIONS.EVALUATE_EXPRESSION &&
|
|
47
|
+
expressionEvaluator &&
|
|
48
|
+
payload
|
|
49
|
+
) {
|
|
50
|
+
const result = expEvaluator(payload);
|
|
51
|
+
|
|
52
|
+
const newState = produce(state, (draft) => {
|
|
53
|
+
const current: Array<Evaluation> =
|
|
54
|
+
(state?.plugins?.[id]?.flow?.data?.history as Array<Evaluation>) ||
|
|
55
|
+
[];
|
|
56
|
+
dset(
|
|
57
|
+
draft,
|
|
58
|
+
["plugins", id, "flow", "data", "history"],
|
|
59
|
+
[...current, result]
|
|
60
|
+
);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
dispatch({
|
|
64
|
+
id: -1,
|
|
65
|
+
type: "PLAYER_DEVTOOLS_PLUGIN_DATA_CHANGE",
|
|
66
|
+
payload: {
|
|
67
|
+
pluginID: id,
|
|
68
|
+
data: newState.plugins[id].flow.data,
|
|
69
|
+
},
|
|
70
|
+
sender: playerID,
|
|
71
|
+
context: "player",
|
|
72
|
+
target: "player",
|
|
73
|
+
timestamp: Date.now(),
|
|
74
|
+
_messenger_: true,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
lastProcessedInteraction.current += 1;
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
[dispatch, expressionEvaluator, id, state]
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
// inject playerConfig into the plugin data
|
|
84
|
+
const pluginDataWithPlayerConfig = produce(pluginData, (draft) => {
|
|
85
|
+
dset(draft, ["flow", "data", "playerConfig"], playerConfig);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
// Initial plugin content
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
const transaction: Transaction<PlayerInitEvent> = {
|
|
91
|
+
id: -1,
|
|
92
|
+
type: "PLAYER_DEVTOOLS_PLAYER_INIT",
|
|
93
|
+
payload: {
|
|
94
|
+
plugins: {
|
|
95
|
+
[id]: pluginDataWithPlayerConfig,
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
sender: playerID,
|
|
99
|
+
context: "player",
|
|
100
|
+
target: "player",
|
|
101
|
+
timestamp: Date.now(),
|
|
102
|
+
_messenger_: true,
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
dispatch(transaction);
|
|
106
|
+
}, []);
|
|
107
|
+
|
|
108
|
+
// Process interactions
|
|
109
|
+
useEffect(() => {
|
|
110
|
+
if (lastProcessedInteraction.current < (state.interactions.length ?? 0)) {
|
|
111
|
+
state.interactions
|
|
112
|
+
.slice(lastProcessedInteraction.current)
|
|
113
|
+
.forEach(processInteraction);
|
|
114
|
+
}
|
|
115
|
+
}, [state.interactions.length]);
|
|
116
|
+
|
|
117
|
+
// Data changes
|
|
118
|
+
useEffect(() => {
|
|
119
|
+
if (dequal(state.plugins[id]?.flow?.data?.data, data)) return;
|
|
120
|
+
|
|
121
|
+
const newState = produce(state, (draft) => {
|
|
122
|
+
dset(draft, ["plugins", id, "flow", "data", "data"], data);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
const transaction = genDataChangeTransaction({
|
|
126
|
+
playerID,
|
|
127
|
+
data: newState.plugins[id].flow.data,
|
|
128
|
+
pluginID: id,
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
dispatch(transaction);
|
|
132
|
+
}, [data]);
|
|
133
|
+
|
|
134
|
+
// Logs changes
|
|
135
|
+
useEffect(() => {
|
|
136
|
+
if (dequal(state.plugins[id]?.flow?.data?.logs, logs)) return;
|
|
137
|
+
|
|
138
|
+
const newState = produce(state, (draft) => {
|
|
139
|
+
dset(draft, ["plugins", id, "flow", "data", "logs"], logs);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
const transaction = genDataChangeTransaction({
|
|
143
|
+
playerID,
|
|
144
|
+
data: newState.plugins[id].flow.data,
|
|
145
|
+
pluginID: id,
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
dispatch(transaction);
|
|
149
|
+
}, [logs]);
|
|
150
|
+
|
|
151
|
+
// Flow changes
|
|
152
|
+
useEffect(() => {
|
|
153
|
+
if (dequal(state.plugins[id]?.flow?.data?.flow, flow)) return;
|
|
154
|
+
|
|
155
|
+
const newState = produce(state, (draft) => {
|
|
156
|
+
dset(draft, ["plugins", id, "flow", "data", "flow"], flow);
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
const transaction = genDataChangeTransaction({
|
|
160
|
+
playerID,
|
|
161
|
+
data: newState.plugins[id].flow.data,
|
|
162
|
+
pluginID: id,
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
dispatch(transaction);
|
|
166
|
+
}, [flow]);
|
|
167
|
+
|
|
168
|
+
return children as JSX.Element;
|
|
169
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { PluginData } from "@player-tools/devtools-types";
|
|
2
|
+
|
|
3
|
+
export const PLUGIN_ID = "player-ui-basic-devtools-plugin";
|
|
4
|
+
|
|
5
|
+
export const PLUGIN_NAME = "Standard Devtools";
|
|
6
|
+
|
|
7
|
+
export const PLUGIN_DESCRIPTION = "Standard Player UI Devtools";
|
|
8
|
+
|
|
9
|
+
export const PLUGIN_VERSION = "0.0.1";
|
|
10
|
+
|
|
11
|
+
export const VIEWS_IDS = {
|
|
12
|
+
CONFIG: "Config",
|
|
13
|
+
FLOW: "Flow",
|
|
14
|
+
LOGS: "Logs",
|
|
15
|
+
CONSOLE: "Console",
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export const INTERACTIONS = {
|
|
19
|
+
EVALUATE_EXPRESSION: "evaluate-expression",
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const BASE_PLUGIN_DATA: Omit<PluginData, "flow"> = {
|
|
23
|
+
id: PLUGIN_ID,
|
|
24
|
+
name: PLUGIN_NAME,
|
|
25
|
+
description: PLUGIN_DESCRIPTION,
|
|
26
|
+
version: PLUGIN_VERSION,
|
|
27
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Navigation, Action, Text, StackedView } from "@devtools-ui/plugin";
|
|
3
|
+
import { VIEWS_IDS } from "../../constants";
|
|
4
|
+
|
|
5
|
+
const Nav = () => (
|
|
6
|
+
<Navigation>
|
|
7
|
+
<Navigation.Values>
|
|
8
|
+
{Object.values(VIEWS_IDS).map((viewId) => (
|
|
9
|
+
<Action key={viewId} value={viewId}>
|
|
10
|
+
<Action.Label>
|
|
11
|
+
<Text>{viewId}</Text>
|
|
12
|
+
</Action.Label>
|
|
13
|
+
</Action>
|
|
14
|
+
))}
|
|
15
|
+
</Navigation.Values>
|
|
16
|
+
</Navigation>
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
export const Screen = ({
|
|
20
|
+
main,
|
|
21
|
+
footer,
|
|
22
|
+
id,
|
|
23
|
+
}: {
|
|
24
|
+
id: string;
|
|
25
|
+
main: React.ReactNode;
|
|
26
|
+
footer?: React.ReactNode;
|
|
27
|
+
}) => (
|
|
28
|
+
<StackedView id={id}>
|
|
29
|
+
<StackedView.Header>
|
|
30
|
+
<Nav />
|
|
31
|
+
</StackedView.Header>
|
|
32
|
+
<StackedView.Main>{main}</StackedView.Main>
|
|
33
|
+
{footer && <StackedView.Footer>{footer}</StackedView.Footer>}
|
|
34
|
+
</StackedView>
|
|
35
|
+
);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./Screen";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { PLUGIN_ID } from "../constants";
|
|
2
|
+
import { navigation } from "./navigation";
|
|
3
|
+
import { schema } from "./schema";
|
|
4
|
+
import { views } from "./views";
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
id: PLUGIN_ID,
|
|
8
|
+
views,
|
|
9
|
+
navigation,
|
|
10
|
+
schema,
|
|
11
|
+
data: {
|
|
12
|
+
expression: "",
|
|
13
|
+
flow: {},
|
|
14
|
+
history: [],
|
|
15
|
+
logs: [],
|
|
16
|
+
playerConfig: {},
|
|
17
|
+
},
|
|
18
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { VIEWS_IDS } from "../../constants";
|
|
2
|
+
|
|
3
|
+
const transitions = Object.entries(VIEWS_IDS).reduce(
|
|
4
|
+
(acc, [key, value]) => ({
|
|
5
|
+
...acc,
|
|
6
|
+
[value]: key,
|
|
7
|
+
}),
|
|
8
|
+
{} as Record<string, string>
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
export const navigation = {
|
|
12
|
+
BEGIN: "Plugin",
|
|
13
|
+
Plugin: {
|
|
14
|
+
startState: Object.keys(VIEWS_IDS)[0],
|
|
15
|
+
...Object.entries(VIEWS_IDS).reduce(
|
|
16
|
+
(acc, [key, value]) => ({
|
|
17
|
+
...acc,
|
|
18
|
+
[key]: {
|
|
19
|
+
state_type: "VIEW",
|
|
20
|
+
ref: value,
|
|
21
|
+
transitions,
|
|
22
|
+
},
|
|
23
|
+
}),
|
|
24
|
+
{} as Record<string, unknown>
|
|
25
|
+
),
|
|
26
|
+
},
|
|
27
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { dataTypes } from "@player-ui/common-types-plugin";
|
|
2
|
+
import type { Schema } from "@player-ui/types";
|
|
3
|
+
import { DSLSchema, makeBindingsForObject } from "@player-tools/dsl";
|
|
4
|
+
|
|
5
|
+
const RecordType: Schema.DataType<Record<string, unknown>> = {
|
|
6
|
+
type: "RecordType",
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export const schema = {
|
|
10
|
+
playerConfig: RecordType,
|
|
11
|
+
flow: RecordType,
|
|
12
|
+
expression: dataTypes.StringType,
|
|
13
|
+
history: [
|
|
14
|
+
{
|
|
15
|
+
id: dataTypes.StringType,
|
|
16
|
+
expression: dataTypes.StringType,
|
|
17
|
+
result: dataTypes.StringType,
|
|
18
|
+
severity: dataTypes.StringType,
|
|
19
|
+
},
|
|
20
|
+
] as [DSLSchema],
|
|
21
|
+
logs: [
|
|
22
|
+
{
|
|
23
|
+
id: dataTypes.StringType,
|
|
24
|
+
time: dataTypes.StringType,
|
|
25
|
+
type: dataTypes.StringType,
|
|
26
|
+
message: dataTypes.StringType,
|
|
27
|
+
severity: dataTypes.StringType,
|
|
28
|
+
binding: dataTypes.StringType,
|
|
29
|
+
from: dataTypes.StringType,
|
|
30
|
+
to: dataTypes.StringType,
|
|
31
|
+
state: dataTypes.StringType,
|
|
32
|
+
error: dataTypes.StringType,
|
|
33
|
+
outcome: dataTypes.StringType,
|
|
34
|
+
metricType: dataTypes.StringType,
|
|
35
|
+
},
|
|
36
|
+
] as [DSLSchema],
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export const bindings = makeBindingsForObject(schema);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ObjectInspector } from "@devtools-ui/plugin";
|
|
3
|
+
import { VIEWS_IDS } from "../../constants";
|
|
4
|
+
import { bindings } from "../schema";
|
|
5
|
+
import { Screen } from "../common";
|
|
6
|
+
|
|
7
|
+
export const ConfigView = (
|
|
8
|
+
<Screen
|
|
9
|
+
id={VIEWS_IDS.CONFIG}
|
|
10
|
+
main={
|
|
11
|
+
<ObjectInspector binding={bindings.playerConfig as any}>
|
|
12
|
+
<ObjectInspector.Label>Config</ObjectInspector.Label>
|
|
13
|
+
</ObjectInspector>
|
|
14
|
+
}
|
|
15
|
+
/>
|
|
16
|
+
);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { expression as e } from "@player-tools/dsl";
|
|
2
|
+
import { Console } 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.EVALUATE_EXPRESSION}', ${bindings.expression}) `;
|
|
9
|
+
|
|
10
|
+
export const ConsoleView = (
|
|
11
|
+
<Screen
|
|
12
|
+
id={VIEWS_IDS.CONSOLE}
|
|
13
|
+
main={
|
|
14
|
+
<Console
|
|
15
|
+
exp={evaluateExpression as any}
|
|
16
|
+
binding={bindings.history as any}
|
|
17
|
+
/>
|
|
18
|
+
}
|
|
19
|
+
/>
|
|
20
|
+
);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ObjectInspector, CopyToClipboard } from "@devtools-ui/plugin";
|
|
3
|
+
import { VIEWS_IDS } from "../../constants";
|
|
4
|
+
import { Screen } from "../common";
|
|
5
|
+
import { bindings } from "../schema";
|
|
6
|
+
|
|
7
|
+
export const FlowView = (
|
|
8
|
+
<Screen
|
|
9
|
+
id={VIEWS_IDS.FLOW}
|
|
10
|
+
main={
|
|
11
|
+
<ObjectInspector binding={bindings.flow as any}>
|
|
12
|
+
<ObjectInspector.Label>Flow</ObjectInspector.Label>
|
|
13
|
+
</ObjectInspector>
|
|
14
|
+
}
|
|
15
|
+
footer={
|
|
16
|
+
<CopyToClipboard binding={bindings.flow as any}>
|
|
17
|
+
<CopyToClipboard.Label>
|
|
18
|
+
Copy flow to the clipboard
|
|
19
|
+
</CopyToClipboard.Label>
|
|
20
|
+
</CopyToClipboard>
|
|
21
|
+
}
|
|
22
|
+
/>
|
|
23
|
+
);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Table } from "@devtools-ui/plugin";
|
|
3
|
+
import { VIEWS_IDS } from "../../constants";
|
|
4
|
+
import { Screen } from "../common";
|
|
5
|
+
import { bindings } from "../schema";
|
|
6
|
+
|
|
7
|
+
export const LogsView = (
|
|
8
|
+
<Screen id={VIEWS_IDS.LOGS} main={<Table binding={bindings.logs as any} />} />
|
|
9
|
+
);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
DevtoolsDataChangeEvent,
|
|
3
|
+
Transaction,
|
|
4
|
+
} from "@player-tools/devtools-types";
|
|
5
|
+
import type { Flow } from "@player-ui/react";
|
|
6
|
+
|
|
7
|
+
export const genDataChangeTransaction = ({
|
|
8
|
+
playerID,
|
|
9
|
+
data,
|
|
10
|
+
pluginID,
|
|
11
|
+
}: {
|
|
12
|
+
playerID: string;
|
|
13
|
+
data: Flow["data"];
|
|
14
|
+
pluginID: string;
|
|
15
|
+
}): Transaction<DevtoolsDataChangeEvent> => {
|
|
16
|
+
return {
|
|
17
|
+
id: -1,
|
|
18
|
+
type: "PLAYER_DEVTOOLS_PLUGIN_DATA_CHANGE",
|
|
19
|
+
payload: {
|
|
20
|
+
pluginID,
|
|
21
|
+
data,
|
|
22
|
+
},
|
|
23
|
+
sender: playerID,
|
|
24
|
+
context: "player",
|
|
25
|
+
target: "player",
|
|
26
|
+
timestamp: Date.now(),
|
|
27
|
+
_messenger_: true,
|
|
28
|
+
};
|
|
29
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ExpressionEvaluator } from "@player-ui/react";
|
|
2
|
+
import { v4 as uuid } from "uuid";
|
|
3
|
+
import { Evaluation } from "../types";
|
|
4
|
+
|
|
5
|
+
export const getEvaluateExpression =
|
|
6
|
+
(expressionEvaluator?: WeakRef<ExpressionEvaluator>) =>
|
|
7
|
+
(expression: string): Evaluation => {
|
|
8
|
+
if (!expressionEvaluator) {
|
|
9
|
+
return {
|
|
10
|
+
id: uuid(),
|
|
11
|
+
severity: "error",
|
|
12
|
+
result: "Expression evaluator not available",
|
|
13
|
+
expression,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
let result: Evaluation = {
|
|
18
|
+
id: uuid(),
|
|
19
|
+
severity: "error",
|
|
20
|
+
result: "Something went wrong",
|
|
21
|
+
expression,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
expressionEvaluator.deref()?.hooks.onError.intercept({
|
|
26
|
+
call: (error: Error) => {
|
|
27
|
+
throw error;
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const evaluatorResult = expressionEvaluator.deref()?.evaluate(expression);
|
|
32
|
+
|
|
33
|
+
result = {
|
|
34
|
+
id: uuid(),
|
|
35
|
+
result: evaluatorResult,
|
|
36
|
+
expression,
|
|
37
|
+
};
|
|
38
|
+
} catch (error) {
|
|
39
|
+
if (error instanceof Error) {
|
|
40
|
+
result = {
|
|
41
|
+
id: uuid(),
|
|
42
|
+
severity: "error",
|
|
43
|
+
result: error.message,
|
|
44
|
+
expression,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return result;
|
|
50
|
+
};
|