@quenty/studio-bridge 0.21.0 → 0.22.0
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/CHANGELOG.md +12 -0
- package/README.md +109 -17
- package/build-scripts/transform-add-session-attribute.lua +1 -0
- package/deploy.nevermore.json +10 -0
- package/dist/src/bridge/bridge-connection.d.ts +26 -2
- package/dist/src/bridge/bridge-connection.d.ts.map +1 -1
- package/dist/src/bridge/bridge-connection.js +159 -14
- package/dist/src/bridge/bridge-connection.js.map +1 -1
- package/dist/src/bridge/bridge-connection.test.js +81 -0
- package/dist/src/bridge/bridge-connection.test.js.map +1 -1
- package/dist/src/bridge/bridge-session.d.ts +35 -2
- package/dist/src/bridge/bridge-session.d.ts.map +1 -1
- package/dist/src/bridge/bridge-session.js +185 -28
- package/dist/src/bridge/bridge-session.js.map +1 -1
- package/dist/src/bridge/bridge-session.test.js +6 -4
- package/dist/src/bridge/bridge-session.test.js.map +1 -1
- package/dist/src/bridge/index.d.ts +1 -1
- package/dist/src/bridge/index.d.ts.map +1 -1
- package/dist/src/bridge/index.js.map +1 -1
- package/dist/src/bridge/internal/bridge-client.d.ts +4 -0
- package/dist/src/bridge/internal/bridge-client.d.ts.map +1 -1
- package/dist/src/bridge/internal/bridge-client.js +20 -7
- package/dist/src/bridge/internal/bridge-client.js.map +1 -1
- package/dist/src/bridge/internal/bridge-client.test.js +18 -0
- package/dist/src/bridge/internal/bridge-client.test.js.map +1 -1
- package/dist/src/bridge/internal/bridge-host.d.ts +13 -1
- package/dist/src/bridge/internal/bridge-host.d.ts.map +1 -1
- package/dist/src/bridge/internal/bridge-host.js +35 -0
- package/dist/src/bridge/internal/bridge-host.js.map +1 -1
- package/dist/src/bridge/internal/bridge-host.test.js +31 -0
- package/dist/src/bridge/internal/bridge-host.test.js.map +1 -1
- package/dist/src/bridge/internal/hand-off.d.ts.map +1 -1
- package/dist/src/bridge/internal/hand-off.js +4 -1
- package/dist/src/bridge/internal/hand-off.js.map +1 -1
- package/dist/src/bridge/internal/host-protocol.d.ts +8 -0
- package/dist/src/bridge/internal/host-protocol.d.ts.map +1 -1
- package/dist/src/bridge/internal/host-protocol.js +120 -13
- package/dist/src/bridge/internal/host-protocol.js.map +1 -1
- package/dist/src/bridge/internal/host-protocol.test.js +13 -0
- package/dist/src/bridge/internal/host-protocol.test.js.map +1 -1
- package/dist/src/bridge/internal/instance-state.d.ts +9 -0
- package/dist/src/bridge/internal/instance-state.d.ts.map +1 -0
- package/dist/src/bridge/internal/instance-state.js +28 -0
- package/dist/src/bridge/internal/instance-state.js.map +1 -0
- package/dist/src/bridge/internal/transport-client.d.ts.map +1 -1
- package/dist/src/bridge/internal/transport-client.js +2 -1
- package/dist/src/bridge/internal/transport-client.js.map +1 -1
- package/dist/src/bridge/internal/transport-server.d.ts.map +1 -1
- package/dist/src/bridge/internal/transport-server.js +5 -1
- package/dist/src/bridge/internal/transport-server.js.map +1 -1
- package/dist/src/bridge/types.d.ts +43 -4
- package/dist/src/bridge/types.d.ts.map +1 -1
- package/dist/src/bridge/types.js.map +1 -1
- package/dist/src/cli/adapters/cli-command-adapter-handler.test.js +24 -0
- package/dist/src/cli/adapters/cli-command-adapter-handler.test.js.map +1 -1
- package/dist/src/cli/adapters/cli-command-adapter.d.ts +6 -0
- package/dist/src/cli/adapters/cli-command-adapter.d.ts.map +1 -1
- package/dist/src/cli/adapters/cli-command-adapter.js +107 -11
- package/dist/src/cli/adapters/cli-command-adapter.js.map +1 -1
- package/dist/src/cli/adapters/group-builder.d.ts +3 -0
- package/dist/src/cli/adapters/group-builder.d.ts.map +1 -1
- package/dist/src/cli/adapters/group-builder.js +34 -15
- package/dist/src/cli/adapters/group-builder.js.map +1 -1
- package/dist/src/cli/adapters/group-builder.test.js +26 -2
- package/dist/src/cli/adapters/group-builder.test.js.map +1 -1
- package/dist/src/cli/adapters/help-formatter.d.ts.map +1 -1
- package/dist/src/cli/adapters/help-formatter.js +4 -3
- package/dist/src/cli/adapters/help-formatter.js.map +1 -1
- package/dist/src/cli/adapters/help-formatter.test.js +1 -1
- package/dist/src/cli/adapters/help-formatter.test.js.map +1 -1
- package/dist/src/cli/adapters/playtest-edit-guard.test.d.ts +2 -0
- package/dist/src/cli/adapters/playtest-edit-guard.test.d.ts.map +1 -0
- package/dist/src/cli/adapters/playtest-edit-guard.test.js +28 -0
- package/dist/src/cli/adapters/playtest-edit-guard.test.js.map +1 -0
- package/dist/src/cli/args/global-args.d.ts +1 -1
- package/dist/src/cli/args/global-args.d.ts.map +1 -1
- package/dist/src/cli/cli-output-context.d.ts +14 -0
- package/dist/src/cli/cli-output-context.d.ts.map +1 -0
- package/dist/src/cli/cli-output-context.js +39 -0
- package/dist/src/cli/cli-output-context.js.map +1 -0
- package/dist/src/cli/cli-output-context.test.d.ts +2 -0
- package/dist/src/cli/cli-output-context.test.d.ts.map +1 -0
- package/dist/src/cli/cli-output-context.test.js +38 -0
- package/dist/src/cli/cli-output-context.test.js.map +1 -0
- package/dist/src/cli/cli.js +40 -17
- package/dist/src/cli/cli.js.map +1 -1
- package/dist/src/cli/managed-studio-run.d.ts +21 -0
- package/dist/src/cli/managed-studio-run.d.ts.map +1 -0
- package/dist/src/cli/managed-studio-run.js +75 -0
- package/dist/src/cli/managed-studio-run.js.map +1 -0
- package/dist/src/cli/managed-studio-run.test.d.ts +2 -0
- package/dist/src/cli/managed-studio-run.test.d.ts.map +1 -0
- package/dist/src/cli/managed-studio-run.test.js +52 -0
- package/dist/src/cli/managed-studio-run.test.js.map +1 -0
- package/dist/src/cli/resolve-session.js +1 -1
- package/dist/src/cli/resolve-session.js.map +1 -1
- package/dist/src/cli/resolve-session.test.js +1 -1
- package/dist/src/cli/resolve-session.test.js.map +1 -1
- package/dist/src/cli/script-executor.d.ts +13 -1
- package/dist/src/cli/script-executor.d.ts.map +1 -1
- package/dist/src/cli/script-executor.js +77 -47
- package/dist/src/cli/script-executor.js.map +1 -1
- package/dist/src/commands/console/exec/exec.d.ts +17 -0
- package/dist/src/commands/console/exec/exec.d.ts.map +1 -1
- package/dist/src/commands/console/exec/exec.js +39 -7
- package/dist/src/commands/console/exec/exec.js.map +1 -1
- package/dist/src/commands/console/exec/exec.test.js +62 -3
- package/dist/src/commands/console/exec/exec.test.js.map +1 -1
- package/dist/src/commands/console/logs/logs.d.ts +30 -2
- package/dist/src/commands/console/logs/logs.d.ts.map +1 -1
- package/dist/src/commands/console/logs/logs.js +82 -7
- package/dist/src/commands/console/logs/logs.js.map +1 -1
- package/dist/src/commands/console/logs/logs.test.js +63 -4
- package/dist/src/commands/console/logs/logs.test.js.map +1 -1
- package/dist/src/commands/explorer/export/export.d.ts +19 -0
- package/dist/src/commands/explorer/export/export.d.ts.map +1 -0
- package/dist/src/commands/explorer/export/export.js +37 -0
- package/dist/src/commands/explorer/export/export.js.map +1 -0
- package/dist/src/commands/explorer/export/export.test.d.ts +2 -0
- package/dist/src/commands/explorer/export/export.test.d.ts.map +1 -0
- package/dist/src/commands/explorer/export/export.test.js +25 -0
- package/dist/src/commands/explorer/export/export.test.js.map +1 -0
- package/dist/src/commands/explorer/find/find.d.ts +28 -0
- package/dist/src/commands/explorer/find/find.d.ts.map +1 -0
- package/dist/src/commands/explorer/find/find.js +75 -0
- package/dist/src/commands/explorer/find/find.js.map +1 -0
- package/dist/src/commands/explorer/find/find.test.d.ts +2 -0
- package/dist/src/commands/explorer/find/find.test.d.ts.map +1 -0
- package/dist/src/commands/explorer/find/find.test.js +44 -0
- package/dist/src/commands/explorer/find/find.test.js.map +1 -0
- package/dist/src/commands/explorer/grep/grep.d.ts +24 -0
- package/dist/src/commands/explorer/grep/grep.d.ts.map +1 -0
- package/dist/src/commands/explorer/grep/grep.js +63 -0
- package/dist/src/commands/explorer/grep/grep.js.map +1 -0
- package/dist/src/commands/explorer/grep/grep.test.d.ts +2 -0
- package/dist/src/commands/explorer/grep/grep.test.d.ts.map +1 -0
- package/dist/src/commands/explorer/grep/grep.test.js +42 -0
- package/dist/src/commands/explorer/grep/grep.test.js.map +1 -0
- package/dist/src/commands/explorer/import/import.d.ts +21 -0
- package/dist/src/commands/explorer/import/import.d.ts.map +1 -0
- package/dist/src/commands/explorer/import/import.js +37 -0
- package/dist/src/commands/explorer/import/import.js.map +1 -0
- package/dist/src/commands/explorer/import/import.test.d.ts +2 -0
- package/dist/src/commands/explorer/import/import.test.d.ts.map +1 -0
- package/dist/src/commands/explorer/import/import.test.js +45 -0
- package/dist/src/commands/explorer/import/import.test.js.map +1 -0
- package/dist/src/commands/formatters.test.js +7 -1
- package/dist/src/commands/formatters.test.js.map +1 -1
- package/dist/src/commands/framework/action-loader.d.ts +5 -1
- package/dist/src/commands/framework/action-loader.d.ts.map +1 -1
- package/dist/src/commands/framework/action-loader.js +9 -2
- package/dist/src/commands/framework/action-loader.js.map +1 -1
- package/dist/src/commands/framework/action-loader.test.js +23 -0
- package/dist/src/commands/framework/action-loader.test.js.map +1 -1
- package/dist/src/commands/framework/arg-builder.d.ts +15 -2
- package/dist/src/commands/framework/arg-builder.d.ts.map +1 -1
- package/dist/src/commands/framework/arg-builder.js +22 -2
- package/dist/src/commands/framework/arg-builder.js.map +1 -1
- package/dist/src/commands/framework/define-command.d.ts +19 -3
- package/dist/src/commands/framework/define-command.d.ts.map +1 -1
- package/dist/src/commands/framework/define-command.js.map +1 -1
- package/dist/src/commands/framework/index.d.ts +1 -1
- package/dist/src/commands/framework/index.d.ts.map +1 -1
- package/dist/src/commands/framework/index.js.map +1 -1
- package/dist/src/commands/index.d.ts +11 -0
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +11 -0
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/linux/inject-credentials/inject-credentials.d.ts.map +1 -1
- package/dist/src/commands/linux/inject-credentials/inject-credentials.js +1 -3
- package/dist/src/commands/linux/inject-credentials/inject-credentials.js.map +1 -1
- package/dist/src/commands/linux/setup/setup.d.ts.map +1 -1
- package/dist/src/commands/linux/setup/setup.js +1 -3
- package/dist/src/commands/linux/setup/setup.js.map +1 -1
- package/dist/src/commands/linux/status/status.d.ts +9 -1
- package/dist/src/commands/linux/status/status.d.ts.map +1 -1
- package/dist/src/commands/linux/status/status.js +66 -86
- package/dist/src/commands/linux/status/status.js.map +1 -1
- package/dist/src/commands/playtest/player/add/add.d.ts +17 -0
- package/dist/src/commands/playtest/player/add/add.d.ts.map +1 -0
- package/dist/src/commands/playtest/player/add/add.js +45 -0
- package/dist/src/commands/playtest/player/add/add.js.map +1 -0
- package/dist/src/commands/playtest/player/list/list.d.ts +13 -0
- package/dist/src/commands/playtest/player/list/list.d.ts.map +1 -0
- package/dist/src/commands/playtest/player/list/list.js +33 -0
- package/dist/src/commands/playtest/player/list/list.js.map +1 -0
- package/dist/src/commands/playtest/player/playtest-players.d.ts +36 -0
- package/dist/src/commands/playtest/player/playtest-players.d.ts.map +1 -0
- package/dist/src/commands/playtest/player/playtest-players.js +187 -0
- package/dist/src/commands/playtest/player/playtest-players.js.map +1 -0
- package/dist/src/commands/playtest/player/playtest-players.test.d.ts +2 -0
- package/dist/src/commands/playtest/player/playtest-players.test.d.ts.map +1 -0
- package/dist/src/commands/playtest/player/playtest-players.test.js +89 -0
- package/dist/src/commands/playtest/player/playtest-players.test.js.map +1 -0
- package/dist/src/commands/playtest/player/remove/remove.d.ts +17 -0
- package/dist/src/commands/playtest/player/remove/remove.d.ts.map +1 -0
- package/dist/src/commands/playtest/player/remove/remove.js +42 -0
- package/dist/src/commands/playtest/player/remove/remove.js.map +1 -0
- package/dist/src/commands/playtest/playtest-sessions.d.ts +49 -0
- package/dist/src/commands/playtest/playtest-sessions.d.ts.map +1 -0
- package/dist/src/commands/playtest/playtest-sessions.js +283 -0
- package/dist/src/commands/playtest/playtest-sessions.js.map +1 -0
- package/dist/src/commands/playtest/playtest-sessions.test.d.ts +2 -0
- package/dist/src/commands/playtest/playtest-sessions.test.d.ts.map +1 -0
- package/dist/src/commands/playtest/playtest-sessions.test.js +87 -0
- package/dist/src/commands/playtest/playtest-sessions.test.js.map +1 -0
- package/dist/src/commands/playtest/restart/restart.d.ts +23 -0
- package/dist/src/commands/playtest/restart/restart.d.ts.map +1 -0
- package/dist/src/commands/playtest/restart/restart.js +105 -0
- package/dist/src/commands/playtest/restart/restart.js.map +1 -0
- package/dist/src/commands/playtest/run/run.d.ts +47 -0
- package/dist/src/commands/playtest/run/run.d.ts.map +1 -0
- package/dist/src/commands/playtest/run/run.js +137 -0
- package/dist/src/commands/playtest/run/run.js.map +1 -0
- package/dist/src/commands/playtest/start/start.d.ts +42 -0
- package/dist/src/commands/playtest/start/start.d.ts.map +1 -0
- package/dist/src/commands/playtest/start/start.js +70 -0
- package/dist/src/commands/playtest/start/start.js.map +1 -0
- package/dist/src/commands/playtest/stop/stop.d.ts +15 -0
- package/dist/src/commands/playtest/stop/stop.d.ts.map +1 -0
- package/dist/src/commands/playtest/stop/stop.js +24 -0
- package/dist/src/commands/playtest/stop/stop.js.map +1 -0
- package/dist/src/commands/process/close/close.d.ts +19 -10
- package/dist/src/commands/process/close/close.d.ts.map +1 -1
- package/dist/src/commands/process/close/close.js +118 -15
- package/dist/src/commands/process/close/close.js.map +1 -1
- package/dist/src/commands/process/close/close.test.d.ts +2 -0
- package/dist/src/commands/process/close/close.test.d.ts.map +1 -0
- package/dist/src/commands/process/close/close.test.js +190 -0
- package/dist/src/commands/process/close/close.test.js.map +1 -0
- package/dist/src/commands/process/info/info.d.ts +45 -5
- package/dist/src/commands/process/info/info.d.ts.map +1 -1
- package/dist/src/commands/process/info/info.js +117 -13
- package/dist/src/commands/process/info/info.js.map +1 -1
- package/dist/src/commands/process/info/info.test.js +140 -38
- package/dist/src/commands/process/info/info.test.js.map +1 -1
- package/dist/src/commands/process/launch/launch.d.ts +11 -1
- package/dist/src/commands/process/launch/launch.d.ts.map +1 -1
- package/dist/src/commands/process/launch/launch.js +37 -7
- package/dist/src/commands/process/launch/launch.js.map +1 -1
- package/dist/src/commands/process/launch/launch.test.js +99 -20
- package/dist/src/commands/process/launch/launch.test.js.map +1 -1
- package/dist/src/commands/process/list/list.d.ts +2 -1
- package/dist/src/commands/process/list/list.d.ts.map +1 -1
- package/dist/src/commands/process/list/list.js +9 -6
- package/dist/src/commands/process/list/list.js.map +1 -1
- package/dist/src/commands/process/list/list.test.js +1 -0
- package/dist/src/commands/process/list/list.test.js.map +1 -1
- package/dist/src/commands/process/run/run.d.ts +9 -0
- package/dist/src/commands/process/run/run.d.ts.map +1 -1
- package/dist/src/commands/process/run/run.js +15 -5
- package/dist/src/commands/process/run/run.js.map +1 -1
- package/dist/src/commands/serve/serve.d.ts +2 -0
- package/dist/src/commands/serve/serve.d.ts.map +1 -1
- package/dist/src/commands/serve/serve.js +17 -4
- package/dist/src/commands/serve/serve.js.map +1 -1
- package/dist/src/commands/serve/serve.test.js +9 -2
- package/dist/src/commands/serve/serve.test.js.map +1 -1
- package/dist/src/commands/viewport/screenshot/screenshot.d.ts.map +1 -1
- package/dist/src/commands/viewport/screenshot/screenshot.js +4 -1
- package/dist/src/commands/viewport/screenshot/screenshot.js.map +1 -1
- package/dist/src/commands/viewport/screenshot/screenshot.test.js +5 -9
- package/dist/src/commands/viewport/screenshot/screenshot.test.js.map +1 -1
- package/dist/src/deploy/deploy-places.d.ts +39 -0
- package/dist/src/deploy/deploy-places.d.ts.map +1 -0
- package/dist/src/deploy/deploy-places.js +162 -0
- package/dist/src/deploy/deploy-places.js.map +1 -0
- package/dist/src/deploy/deploy-places.test.d.ts +2 -0
- package/dist/src/deploy/deploy-places.test.d.ts.map +1 -0
- package/dist/src/deploy/deploy-places.test.js +96 -0
- package/dist/src/deploy/deploy-places.test.js.map +1 -0
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/linux/linux-studio-launcher.d.ts.map +1 -1
- package/dist/src/linux/linux-studio-launcher.js +10 -0
- package/dist/src/linux/linux-studio-launcher.js.map +1 -1
- package/dist/src/linux/linux-studio-launcher.test.d.ts +2 -0
- package/dist/src/linux/linux-studio-launcher.test.d.ts.map +1 -0
- package/dist/src/linux/linux-studio-launcher.test.js +68 -0
- package/dist/src/linux/linux-studio-launcher.test.js.map +1 -0
- package/dist/src/plugin/persistent-plugin-installer.d.ts.map +1 -1
- package/dist/src/plugin/persistent-plugin-installer.js +2 -1
- package/dist/src/plugin/persistent-plugin-installer.js.map +1 -1
- package/dist/src/plugin/persistent-plugin-installer.test.js +3 -0
- package/dist/src/plugin/persistent-plugin-installer.test.js.map +1 -1
- package/dist/src/plugin/plugin-build-version.d.ts +7 -0
- package/dist/src/plugin/plugin-build-version.d.ts.map +1 -0
- package/dist/src/plugin/plugin-build-version.js +42 -0
- package/dist/src/plugin/plugin-build-version.js.map +1 -0
- package/dist/src/plugin/plugin-build-version.test.d.ts +2 -0
- package/dist/src/plugin/plugin-build-version.test.d.ts.map +1 -0
- package/dist/src/plugin/plugin-build-version.test.js +41 -0
- package/dist/src/plugin/plugin-build-version.test.js.map +1 -0
- package/dist/src/plugin/plugin-injector.d.ts.map +1 -1
- package/dist/src/plugin/plugin-injector.js +7 -1
- package/dist/src/plugin/plugin-injector.js.map +1 -1
- package/dist/src/process/studio-process-closer.d.ts +35 -0
- package/dist/src/process/studio-process-closer.d.ts.map +1 -0
- package/dist/src/process/studio-process-closer.js +129 -0
- package/dist/src/process/studio-process-closer.js.map +1 -0
- package/dist/src/process/studio-process-closer.test.d.ts +2 -0
- package/dist/src/process/studio-process-closer.test.d.ts.map +1 -0
- package/dist/src/process/studio-process-closer.test.js +80 -0
- package/dist/src/process/studio-process-closer.test.js.map +1 -0
- package/dist/src/process/studio-settings.d.ts +14 -0
- package/dist/src/process/studio-settings.d.ts.map +1 -0
- package/dist/src/process/studio-settings.js +50 -0
- package/dist/src/process/studio-settings.js.map +1 -0
- package/dist/src/process/studio-settings.test.d.ts +2 -0
- package/dist/src/process/studio-settings.test.d.ts.map +1 -0
- package/dist/src/process/studio-settings.test.js +16 -0
- package/dist/src/process/studio-settings.test.js.map +1 -0
- package/dist/src/process/studio-window-state.d.ts +13 -0
- package/dist/src/process/studio-window-state.d.ts.map +1 -0
- package/dist/src/process/studio-window-state.js +48 -0
- package/dist/src/process/studio-window-state.js.map +1 -0
- package/dist/src/server/studio-bridge-server.d.ts +3 -1
- package/dist/src/server/studio-bridge-server.d.ts.map +1 -1
- package/dist/src/server/studio-bridge-server.js +12 -4
- package/dist/src/server/studio-bridge-server.js.map +1 -1
- package/dist/src/server/web-socket-protocol.d.ts +173 -6
- package/dist/src/server/web-socket-protocol.d.ts.map +1 -1
- package/dist/src/server/web-socket-protocol.js +244 -1
- package/dist/src/server/web-socket-protocol.js.map +1 -1
- package/dist/src/server/web-socket-protocol.test.js +48 -0
- package/dist/src/server/web-socket-protocol.test.js.map +1 -1
- package/dist/src/test/e2e/persistent-session.test.js +121 -0
- package/dist/src/test/e2e/persistent-session.test.js.map +1 -1
- package/dist/src/test/e2e/split-server.test.d.ts +3 -5
- package/dist/src/test/e2e/split-server.test.d.ts.map +1 -1
- package/dist/src/test/e2e/split-server.test.js +3 -5
- package/dist/src/test/e2e/split-server.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docker/Dockerfile +3 -0
- package/package.json +8 -6
- package/src/bridge/bridge-connection.test.ts +126 -0
- package/src/bridge/bridge-connection.ts +217 -22
- package/src/bridge/bridge-session.test.ts +6 -4
- package/src/bridge/bridge-session.ts +273 -28
- package/src/bridge/index.ts +3 -0
- package/src/bridge/internal/bridge-client.test.ts +23 -0
- package/src/bridge/internal/bridge-client.ts +25 -7
- package/src/bridge/internal/bridge-host.test.ts +38 -0
- package/src/bridge/internal/bridge-host.ts +47 -0
- package/src/bridge/internal/hand-off.ts +4 -1
- package/src/bridge/internal/host-protocol.test.ts +15 -0
- package/src/bridge/internal/host-protocol.ts +148 -37
- package/src/bridge/internal/instance-state.ts +34 -0
- package/src/bridge/internal/transport-client.ts +2 -1
- package/src/bridge/internal/transport-server.ts +5 -1
- package/src/bridge/types.ts +47 -2
- package/src/cli/adapters/cli-command-adapter-handler.test.ts +28 -0
- package/src/cli/adapters/cli-command-adapter.ts +150 -18
- package/src/cli/adapters/group-builder.test.ts +34 -2
- package/src/cli/adapters/group-builder.ts +52 -20
- package/src/cli/adapters/help-formatter.test.ts +1 -1
- package/src/cli/adapters/help-formatter.ts +4 -3
- package/src/cli/adapters/playtest-edit-guard.test.ts +54 -0
- package/src/cli/args/global-args.ts +1 -1
- package/src/cli/cli-output-context.test.ts +55 -0
- package/src/cli/cli-output-context.ts +50 -0
- package/src/cli/cli.ts +49 -17
- package/src/cli/managed-studio-run.test.ts +71 -0
- package/src/cli/managed-studio-run.ts +135 -0
- package/src/cli/resolve-session.test.ts +1 -1
- package/src/cli/resolve-session.ts +1 -1
- package/src/cli/script-executor.ts +99 -51
- package/src/commands/console/exec/exec.test.ts +96 -3
- package/src/commands/console/exec/exec.ts +59 -6
- package/src/commands/console/exec/execute.lua +356 -240
- package/src/commands/console/exec/execute.spec.lua +286 -0
- package/src/commands/console/logs/logs.test.ts +76 -4
- package/src/commands/console/logs/logs.ts +132 -17
- package/src/commands/console/logs/query-logs.lua +85 -52
- package/src/commands/console/logs/query-logs.spec.lua +132 -0
- package/src/commands/explorer/export/export-instances.lua +108 -0
- package/src/commands/explorer/export/export-instances.spec.lua +87 -0
- package/src/commands/explorer/export/export.test.ts +27 -0
- package/src/commands/explorer/export/export.ts +60 -0
- package/src/commands/explorer/find/find-instances.lua +174 -0
- package/src/commands/explorer/find/find-instances.spec.lua +122 -0
- package/src/commands/explorer/find/find.test.ts +53 -0
- package/src/commands/explorer/find/find.ts +113 -0
- package/src/commands/explorer/grep/grep-scripts.lua +214 -0
- package/src/commands/explorer/grep/grep-scripts.spec.lua +130 -0
- package/src/commands/explorer/grep/grep.test.ts +45 -0
- package/src/commands/explorer/grep/grep.ts +93 -0
- package/src/commands/explorer/import/import-instances.lua +106 -0
- package/src/commands/explorer/import/import-instances.spec.lua +84 -0
- package/src/commands/explorer/import/import.test.ts +60 -0
- package/src/commands/explorer/import/import.ts +66 -0
- package/src/commands/explorer/query/query-data-model.lua +124 -152
- package/src/commands/explorer/query/query-data-model.spec.lua +150 -0
- package/src/commands/formatters.test.ts +7 -1
- package/src/commands/framework/action-loader.test.ts +28 -0
- package/src/commands/framework/action-loader.ts +10 -2
- package/src/commands/framework/arg-builder.ts +26 -3
- package/src/commands/framework/define-command.ts +32 -3
- package/src/commands/framework/index.ts +1 -0
- package/src/commands/index.ts +50 -0
- package/src/commands/linux/inject-credentials/inject-credentials.ts +1 -3
- package/src/commands/linux/setup/setup.ts +1 -3
- package/src/commands/linux/status/status.ts +105 -98
- package/src/commands/playtest/player/add/add.ts +85 -0
- package/src/commands/playtest/player/list/list.ts +57 -0
- package/src/commands/playtest/player/playtest-players.test.ts +146 -0
- package/src/commands/playtest/player/playtest-players.ts +270 -0
- package/src/commands/playtest/player/remove/remove.ts +78 -0
- package/src/commands/playtest/playtest-sessions.test.ts +143 -0
- package/src/commands/playtest/playtest-sessions.ts +417 -0
- package/src/commands/playtest/restart/restart.ts +199 -0
- package/src/commands/playtest/run/playtest-runner.luau +264 -0
- package/src/commands/playtest/run/playtest-runner.spec.lua +71 -0
- package/src/commands/playtest/run/run-playtest-script.lua +139 -0
- package/src/commands/playtest/run/run-playtest-script.spec.lua +43 -0
- package/src/commands/playtest/run/run.ts +239 -0
- package/src/commands/playtest/start/start-playtest.lua +108 -0
- package/src/commands/playtest/start/start.ts +138 -0
- package/src/commands/playtest/stop/end-playtest.lua +47 -0
- package/src/commands/playtest/stop/stop.ts +51 -0
- package/src/commands/process/close/close.test.ts +250 -0
- package/src/commands/process/close/close.ts +183 -17
- package/src/commands/process/info/info.test.ts +198 -44
- package/src/commands/process/info/info.ts +204 -15
- package/src/commands/process/info/query-state.lua +42 -29
- package/src/commands/process/info/query-state.spec.lua +39 -0
- package/src/commands/process/launch/launch.test.ts +138 -21
- package/src/commands/process/launch/launch.ts +69 -9
- package/src/commands/process/list/list.test.ts +1 -0
- package/src/commands/process/list/list.ts +14 -6
- package/src/commands/process/run/run.ts +26 -5
- package/src/commands/serve/serve.test.ts +17 -2
- package/src/commands/serve/serve.ts +25 -6
- package/src/commands/viewport/screenshot/capture-screenshot.lua +175 -182
- package/src/commands/viewport/screenshot/capture-screenshot.spec.lua +129 -0
- package/src/commands/viewport/screenshot/screenshot.test.ts +7 -10
- package/src/commands/viewport/screenshot/screenshot.ts +6 -1
- package/src/deploy/deploy-places.test.ts +127 -0
- package/src/deploy/deploy-places.ts +229 -0
- package/src/index.ts +11 -0
- package/src/linux/linux-studio-launcher.test.ts +89 -0
- package/src/linux/linux-studio-launcher.ts +11 -0
- package/src/plugin/persistent-plugin-installer.test.ts +4 -0
- package/src/plugin/persistent-plugin-installer.ts +2 -1
- package/src/plugin/plugin-build-version.test.ts +55 -0
- package/src/plugin/plugin-build-version.ts +53 -0
- package/src/plugin/plugin-injector.ts +7 -1
- package/src/process/studio-process-closer.test.ts +107 -0
- package/src/process/studio-process-closer.ts +187 -0
- package/src/process/studio-settings.test.ts +18 -0
- package/src/process/studio-settings.ts +61 -0
- package/src/process/studio-window-state.ts +65 -0
- package/src/server/studio-bridge-server.ts +15 -4
- package/src/server/web-socket-protocol.test.ts +55 -0
- package/src/server/web-socket-protocol.ts +468 -8
- package/src/test/e2e/persistent-session.test.ts +137 -0
- package/src/test/e2e/split-server.test.ts +3 -5
- package/templates/studio-bridge-plugin/default.project.json +3 -0
- package/templates/studio-bridge-plugin/src/Shared/ActionRouter.lua +208 -159
- package/templates/studio-bridge-plugin/src/Shared/ActionRouter.spec.lua +418 -0
- package/templates/studio-bridge-plugin/src/Shared/BuiltInActions.lua +94 -0
- package/templates/studio-bridge-plugin/src/Shared/BuiltInActions.spec.lua +166 -0
- package/templates/studio-bridge-plugin/src/Shared/DiscoveryStateMachine.lua +118 -137
- package/templates/studio-bridge-plugin/src/Shared/DiscoveryStateMachine.spec.lua +228 -0
- package/templates/studio-bridge-plugin/src/Shared/MessageBuffer.lua +80 -109
- package/templates/studio-bridge-plugin/src/Shared/MessageBuffer.spec.lua +116 -0
- package/templates/studio-bridge-plugin/src/Shared/StudioBridgeConnection.lua +233 -0
- package/templates/studio-bridge-plugin/src/Shared/StudioBridgeConnection.spec.lua +239 -0
- package/templates/studio-bridge-plugin/src/Shared/StudioBridgeLogUtils.lua +53 -0
- package/templates/studio-bridge-plugin/src/Shared/StudioBridgeLogUtils.spec.lua +27 -0
- package/templates/studio-bridge-plugin/src/Shared/StudioBridgeSessionUtils.lua +164 -0
- package/templates/studio-bridge-plugin/src/Shared/StudioBridgeSessionUtils.spec.lua +159 -0
- package/templates/studio-bridge-plugin/src/StudioBridgePlugin.server.lua +266 -368
- package/templates/studio-bridge-plugin/src/Vendor/png.lua +8 -2
- package/test/default.project.json +41 -0
- package/test/jest.config.lua +3 -0
- package/test/scripts/Server/ServerMain.server.lua +10 -0
- package/tsconfig.json +1 -0
- package/templates/studio-bridge-plugin/src/Shared/Protocol.lua +0 -132
- package/templates/studio-bridge-plugin-test/test/actions.test.lua +0 -580
- package/templates/studio-bridge-plugin-test/test/discovery.test.lua +0 -622
- package/templates/studio-bridge-plugin-test/test/execute-handler.test.lua +0 -517
- package/templates/studio-bridge-plugin-test/test/hash-lifecycle.test.lua +0 -814
- package/templates/studio-bridge-plugin-test/test/integration.test.lua +0 -1020
- package/templates/studio-bridge-plugin-test/test/new-actions.test.lua +0 -339
- package/templates/studio-bridge-plugin-test/test/plugin-entry.test.lua +0 -493
- package/templates/studio-bridge-plugin-test/test/protocol.test.lua +0 -506
- package/templates/studio-bridge-plugin-test/test/roblox-mocks.lua +0 -108
- package/templates/studio-bridge-plugin-test/test/test-runner.lua +0 -112
|
@@ -13,12 +13,28 @@ export type StudioState =
|
|
|
13
13
|
| 'Server'
|
|
14
14
|
| 'Client';
|
|
15
15
|
|
|
16
|
+
export type PluginContext = 'edit' | 'client' | 'server';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The largest message a bridge socket accepts. The plugin refuses to send a
|
|
20
|
+
* reply over half this with RESULT_TOO_LARGE, so a large result fails its own
|
|
21
|
+
* request instead of closing the socket under every request in flight.
|
|
22
|
+
* Studio itself sends messages of at least 512 MiB.
|
|
23
|
+
*/
|
|
24
|
+
export const MAX_MESSAGE_BYTES = 512 * 1024 * 1024;
|
|
25
|
+
|
|
16
26
|
export type Capability =
|
|
17
27
|
| 'execute'
|
|
18
28
|
| 'queryState'
|
|
19
29
|
| 'captureScreenshot'
|
|
20
30
|
| 'queryDataModel'
|
|
21
31
|
| 'queryLogs'
|
|
32
|
+
| 'exportInstances'
|
|
33
|
+
| 'importInstances'
|
|
34
|
+
| 'findInstances'
|
|
35
|
+
| 'grepScripts'
|
|
36
|
+
| 'startPlaytest'
|
|
37
|
+
| 'endPlaytest'
|
|
22
38
|
| 'heartbeat'
|
|
23
39
|
| 'registerAction'
|
|
24
40
|
| 'syncActions';
|
|
@@ -31,8 +47,10 @@ export type ErrorCode =
|
|
|
31
47
|
| 'INSTANCE_NOT_FOUND'
|
|
32
48
|
| 'PROPERTY_NOT_FOUND'
|
|
33
49
|
| 'SCREENSHOT_FAILED'
|
|
50
|
+
| 'RESULT_TOO_LARGE'
|
|
34
51
|
| 'SCRIPT_LOAD_ERROR'
|
|
35
52
|
| 'SCRIPT_RUNTIME_ERROR'
|
|
53
|
+
| 'SCRIPT_TIMEOUT'
|
|
36
54
|
| 'BUSY'
|
|
37
55
|
| 'SESSION_MISMATCH'
|
|
38
56
|
| 'INTERNAL_ERROR';
|
|
@@ -114,11 +132,13 @@ export interface ScriptCompleteMessage extends BaseMessage {
|
|
|
114
132
|
payload: {
|
|
115
133
|
success: boolean;
|
|
116
134
|
error?: string;
|
|
135
|
+
/** Where a runtime error was thrown, as `debug.traceback` prints it. */
|
|
136
|
+
traceback?: string;
|
|
117
137
|
output?: Array<{ level: string; body: string; timestamp: number }>;
|
|
118
138
|
/**
|
|
119
139
|
* Everything the script returned, in order, marshalled by the plugin.
|
|
120
|
-
* Absent when the plugin never reported a return channel (
|
|
121
|
-
*
|
|
140
|
+
* Absent when the plugin never reported a return channel (a script that
|
|
141
|
+
* failed before returning) — distinct from `[]`,
|
|
122
142
|
* which means the script ran and returned nothing.
|
|
123
143
|
*/
|
|
124
144
|
returnValues?: SerializedReturnValue[];
|
|
@@ -133,7 +153,13 @@ export interface RegisterMessage extends PushMessage {
|
|
|
133
153
|
placeName: string;
|
|
134
154
|
placeFile?: string;
|
|
135
155
|
state: StudioState;
|
|
156
|
+
/** Which DataModel the plugin runs in. Older plugins leave it out. */
|
|
157
|
+
context?: PluginContext;
|
|
136
158
|
pid?: number;
|
|
159
|
+
/** Set when `process run` launched this Studio, from the place it opened. */
|
|
160
|
+
launchId?: string;
|
|
161
|
+
/** The player of a multiplayer test client. */
|
|
162
|
+
playerName?: string;
|
|
137
163
|
capabilities: Capability[];
|
|
138
164
|
};
|
|
139
165
|
}
|
|
@@ -145,6 +171,10 @@ export interface StateResultMessage extends RequestMessage {
|
|
|
145
171
|
placeId: number;
|
|
146
172
|
placeName: string;
|
|
147
173
|
gameId: number;
|
|
174
|
+
/** The camera's viewport in pixels. Absent without a camera. */
|
|
175
|
+
viewportSize?: [number, number];
|
|
176
|
+
/** Studio's version, such as `0.744.0.7440803`. Absent from older plugins. */
|
|
177
|
+
studioVersion?: string;
|
|
148
178
|
};
|
|
149
179
|
}
|
|
150
180
|
|
|
@@ -165,6 +195,56 @@ export interface DataModelResultMessage extends RequestMessage {
|
|
|
165
195
|
};
|
|
166
196
|
}
|
|
167
197
|
|
|
198
|
+
export interface ExportInstancesResultMessage extends RequestMessage {
|
|
199
|
+
type: 'exportInstancesResult';
|
|
200
|
+
payload: {
|
|
201
|
+
/** The binary model (.rbxm), base64-encoded. */
|
|
202
|
+
data: string;
|
|
203
|
+
paths: string[];
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export interface ImportInstancesResultMessage extends RequestMessage {
|
|
208
|
+
type: 'importInstancesResult';
|
|
209
|
+
payload: {
|
|
210
|
+
paths: string[];
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export interface FoundInstance {
|
|
215
|
+
path: string;
|
|
216
|
+
name: string;
|
|
217
|
+
className: string;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export interface FindInstancesResultMessage extends RequestMessage {
|
|
221
|
+
type: 'findInstancesResult';
|
|
222
|
+
payload: {
|
|
223
|
+
instances: FoundInstance[];
|
|
224
|
+
/** How many instances were looked at. */
|
|
225
|
+
searched: number;
|
|
226
|
+
/** True when the search stopped at the limit. */
|
|
227
|
+
truncated: boolean;
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export interface GrepMatch {
|
|
232
|
+
path: string;
|
|
233
|
+
className: string;
|
|
234
|
+
line: number;
|
|
235
|
+
text: string;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
export interface GrepScriptsResultMessage extends RequestMessage {
|
|
239
|
+
type: 'grepScriptsResult';
|
|
240
|
+
payload: {
|
|
241
|
+
matches: GrepMatch[];
|
|
242
|
+
searched: number;
|
|
243
|
+
/** True when the search stopped at the limit. */
|
|
244
|
+
truncated: boolean;
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
|
|
168
248
|
export interface LogsResultMessage extends RequestMessage {
|
|
169
249
|
type: 'logsResult';
|
|
170
250
|
payload: {
|
|
@@ -172,6 +252,10 @@ export interface LogsResultMessage extends RequestMessage {
|
|
|
172
252
|
level: OutputLevel;
|
|
173
253
|
body: string;
|
|
174
254
|
timestamp: number;
|
|
255
|
+
/** With groupRepeats: how many identical entries in a row this stands for. */
|
|
256
|
+
repeats?: number;
|
|
257
|
+
/** With groupRepeats: when the last of the repeats was logged. */
|
|
258
|
+
lastTimestamp?: number;
|
|
175
259
|
}>;
|
|
176
260
|
total: number;
|
|
177
261
|
bufferCapacity: number;
|
|
@@ -214,6 +298,28 @@ export interface SyncActionsResultMessage extends RequestMessage {
|
|
|
214
298
|
};
|
|
215
299
|
}
|
|
216
300
|
|
|
301
|
+
export type PlaytestMode = 'play' | 'run';
|
|
302
|
+
|
|
303
|
+
export interface PlaytestEndedMessage extends RequestMessage {
|
|
304
|
+
type: 'playtestEnded';
|
|
305
|
+
payload: {
|
|
306
|
+
playtestId: string;
|
|
307
|
+
success: boolean;
|
|
308
|
+
error?: string;
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
export interface EndPlaytestResultMessage extends RequestMessage {
|
|
313
|
+
type: 'endPlaytestResult';
|
|
314
|
+
payload: {
|
|
315
|
+
playtestId?: string;
|
|
316
|
+
/** Absent from plugins older than this field. */
|
|
317
|
+
mode?: PlaytestMode;
|
|
318
|
+
/** How many players a multiplayer test started with. */
|
|
319
|
+
players?: number;
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
|
|
217
323
|
export interface PluginErrorMessage extends BaseMessage {
|
|
218
324
|
type: 'error';
|
|
219
325
|
requestId?: string;
|
|
@@ -230,11 +336,17 @@ export type PluginMessage =
|
|
|
230
336
|
| StateResultMessage
|
|
231
337
|
| ScreenshotResultMessage
|
|
232
338
|
| DataModelResultMessage
|
|
339
|
+
| ExportInstancesResultMessage
|
|
340
|
+
| ImportInstancesResultMessage
|
|
341
|
+
| FindInstancesResultMessage
|
|
342
|
+
| GrepScriptsResultMessage
|
|
233
343
|
| LogsResultMessage
|
|
234
344
|
| StateChangeMessage
|
|
235
345
|
| HeartbeatMessage
|
|
236
346
|
| RegisterActionResultMessage
|
|
237
347
|
| SyncActionsResultMessage
|
|
348
|
+
| PlaytestEndedMessage
|
|
349
|
+
| EndPlaytestResultMessage
|
|
238
350
|
| PluginErrorMessage;
|
|
239
351
|
|
|
240
352
|
export interface ExecuteMessage extends BaseMessage {
|
|
@@ -242,6 +354,10 @@ export interface ExecuteMessage extends BaseMessage {
|
|
|
242
354
|
requestId?: string;
|
|
243
355
|
payload: {
|
|
244
356
|
script: string;
|
|
357
|
+
/** The plugin cancels the script once it runs this long. */
|
|
358
|
+
timeoutMs?: number;
|
|
359
|
+
/** Passed to the script as `...`. */
|
|
360
|
+
args?: string[];
|
|
245
361
|
};
|
|
246
362
|
}
|
|
247
363
|
|
|
@@ -262,6 +378,51 @@ export interface CaptureScreenshotMessage extends RequestMessage {
|
|
|
262
378
|
};
|
|
263
379
|
}
|
|
264
380
|
|
|
381
|
+
export interface ExportInstancesMessage extends RequestMessage {
|
|
382
|
+
type: 'exportInstances';
|
|
383
|
+
payload: {
|
|
384
|
+
paths: string[];
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
export interface ImportInstancesMessage extends RequestMessage {
|
|
389
|
+
type: 'importInstances';
|
|
390
|
+
payload: {
|
|
391
|
+
/** The binary model (.rbxm), base64-encoded. */
|
|
392
|
+
data: string;
|
|
393
|
+
parentPath: string;
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
export interface FindInstancesMessage extends RequestMessage {
|
|
398
|
+
type: 'findInstances';
|
|
399
|
+
payload: {
|
|
400
|
+
/** Dot-separated path to search under. Defaults to the whole DataModel. */
|
|
401
|
+
root?: string;
|
|
402
|
+
/** Matched case-insensitively anywhere in the name. */
|
|
403
|
+
name?: string;
|
|
404
|
+
/** Match the whole name instead. */
|
|
405
|
+
exactName?: boolean;
|
|
406
|
+
/** Matched with IsA. */
|
|
407
|
+
className?: string;
|
|
408
|
+
tag?: string;
|
|
409
|
+
limit?: number;
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
export interface GrepScriptsMessage extends RequestMessage {
|
|
414
|
+
type: 'grepScripts';
|
|
415
|
+
payload: {
|
|
416
|
+
pattern: string;
|
|
417
|
+
/** Dot-separated path to search under. Defaults to the whole DataModel. */
|
|
418
|
+
root?: string;
|
|
419
|
+
/** Treat `pattern` as a Lua pattern instead of plain text. */
|
|
420
|
+
luaPattern?: boolean;
|
|
421
|
+
caseSensitive?: boolean;
|
|
422
|
+
limit?: number;
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
|
|
265
426
|
export interface QueryDataModelMessage extends RequestMessage {
|
|
266
427
|
type: 'queryDataModel';
|
|
267
428
|
payload: {
|
|
@@ -281,6 +442,10 @@ export interface QueryLogsMessage extends RequestMessage {
|
|
|
281
442
|
direction?: 'head' | 'tail';
|
|
282
443
|
levels?: OutputLevel[];
|
|
283
444
|
includeInternal?: boolean;
|
|
445
|
+
/** Only entries logged at or after this time, in epoch seconds. */
|
|
446
|
+
since?: number;
|
|
447
|
+
/** Collapse identical consecutive entries, before `count` applies. */
|
|
448
|
+
groupRepeats?: boolean;
|
|
284
449
|
};
|
|
285
450
|
}
|
|
286
451
|
|
|
@@ -298,6 +463,40 @@ export interface SyncActionsMessage extends RequestMessage {
|
|
|
298
463
|
type: 'syncActions';
|
|
299
464
|
payload: {
|
|
300
465
|
actions: Record<string, string>;
|
|
466
|
+
verbose?: boolean;
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
export interface StartPlaytestMessage extends RequestMessage {
|
|
471
|
+
type: 'startPlaytest';
|
|
472
|
+
payload: {
|
|
473
|
+
mode: PlaytestMode;
|
|
474
|
+
playtestId: string;
|
|
475
|
+
/** Handed to the playtest's DataModels, which can't discover the bridge themselves. */
|
|
476
|
+
bridgePort: number;
|
|
477
|
+
/** The edit session's instance id, which the playtest's sessions register under. */
|
|
478
|
+
instanceId: string;
|
|
479
|
+
/** Starts a multiplayer test, a server and a client process per player. */
|
|
480
|
+
players?: number;
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
export interface EndPlaytestMessage extends RequestMessage {
|
|
485
|
+
type: 'endPlaytest';
|
|
486
|
+
payload: Record<string, never>;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/** Answered with `scriptComplete`, the same reply as `execute`. */
|
|
490
|
+
export interface RunPlaytestScriptMessage extends RequestMessage {
|
|
491
|
+
type: 'runPlaytestScript';
|
|
492
|
+
payload: {
|
|
493
|
+
mode: PlaytestMode;
|
|
494
|
+
script: string;
|
|
495
|
+
/** Planted in the playtest's server to run the script and end the playtest. */
|
|
496
|
+
runnerSource: string;
|
|
497
|
+
timeoutSec: number;
|
|
498
|
+
/** Passed to the script as `...`. */
|
|
499
|
+
args?: string[];
|
|
301
500
|
};
|
|
302
501
|
}
|
|
303
502
|
|
|
@@ -317,15 +516,36 @@ export type ServerMessage =
|
|
|
317
516
|
| QueryStateMessage
|
|
318
517
|
| CaptureScreenshotMessage
|
|
319
518
|
| QueryDataModelMessage
|
|
519
|
+
| ExportInstancesMessage
|
|
520
|
+
| ImportInstancesMessage
|
|
521
|
+
| FindInstancesMessage
|
|
522
|
+
| GrepScriptsMessage
|
|
320
523
|
| QueryLogsMessage
|
|
321
524
|
| RegisterActionMessage
|
|
322
525
|
| SyncActionsMessage
|
|
526
|
+
| StartPlaytestMessage
|
|
527
|
+
| EndPlaytestMessage
|
|
528
|
+
| RunPlaytestScriptMessage
|
|
323
529
|
| ServerErrorMessage;
|
|
324
530
|
|
|
325
531
|
export function encodeMessage(msg: ServerMessage): string {
|
|
326
532
|
return JSON.stringify(msg);
|
|
327
533
|
}
|
|
328
534
|
|
|
535
|
+
function isViewportSize(value: unknown): value is [number, number] {
|
|
536
|
+
return (
|
|
537
|
+
Array.isArray(value) &&
|
|
538
|
+
value.length === 2 &&
|
|
539
|
+
value.every((item) => typeof item === 'number')
|
|
540
|
+
);
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
function isStringArray(value: unknown): value is string[] {
|
|
544
|
+
return (
|
|
545
|
+
Array.isArray(value) && value.every((item) => typeof item === 'string')
|
|
546
|
+
);
|
|
547
|
+
}
|
|
548
|
+
|
|
329
549
|
export function decodePluginMessage(raw: string): PluginMessage | null {
|
|
330
550
|
let parsed: unknown;
|
|
331
551
|
try {
|
|
@@ -390,6 +610,10 @@ export function decodePluginMessage(raw: string): PluginMessage | null {
|
|
|
390
610
|
success: payload.success,
|
|
391
611
|
error:
|
|
392
612
|
typeof payload.error === 'string' ? payload.error : undefined,
|
|
613
|
+
traceback:
|
|
614
|
+
typeof payload.traceback === 'string'
|
|
615
|
+
? payload.traceback
|
|
616
|
+
: undefined,
|
|
393
617
|
output,
|
|
394
618
|
returnValues,
|
|
395
619
|
},
|
|
@@ -420,7 +644,19 @@ export function decodePluginMessage(raw: string): PluginMessage | null {
|
|
|
420
644
|
? payload.placeFile
|
|
421
645
|
: undefined,
|
|
422
646
|
state: stateVal as StudioState,
|
|
647
|
+
context:
|
|
648
|
+
payload.context === 'edit' ||
|
|
649
|
+
payload.context === 'client' ||
|
|
650
|
+
payload.context === 'server'
|
|
651
|
+
? payload.context
|
|
652
|
+
: undefined,
|
|
423
653
|
pid: typeof payload.pid === 'number' ? payload.pid : undefined,
|
|
654
|
+
launchId:
|
|
655
|
+
typeof payload.launchId === 'string' ? payload.launchId : undefined,
|
|
656
|
+
playerName:
|
|
657
|
+
typeof payload.playerName === 'string'
|
|
658
|
+
? payload.playerName
|
|
659
|
+
: undefined,
|
|
424
660
|
capabilities: payload.capabilities as Capability[],
|
|
425
661
|
},
|
|
426
662
|
};
|
|
@@ -445,6 +681,13 @@ export function decodePluginMessage(raw: string): PluginMessage | null {
|
|
|
445
681
|
placeId: payload.placeId,
|
|
446
682
|
placeName: payload.placeName,
|
|
447
683
|
gameId: payload.gameId,
|
|
684
|
+
viewportSize: isViewportSize(payload.viewportSize)
|
|
685
|
+
? payload.viewportSize
|
|
686
|
+
: undefined,
|
|
687
|
+
studioVersion:
|
|
688
|
+
typeof payload.studioVersion === 'string'
|
|
689
|
+
? payload.studioVersion
|
|
690
|
+
: undefined,
|
|
448
691
|
},
|
|
449
692
|
};
|
|
450
693
|
|
|
@@ -483,6 +726,55 @@ export function decodePluginMessage(raw: string): PluginMessage | null {
|
|
|
483
726
|
},
|
|
484
727
|
};
|
|
485
728
|
|
|
729
|
+
case 'exportInstancesResult':
|
|
730
|
+
if (requestId === undefined) return null;
|
|
731
|
+
if (typeof payload.data !== 'string' || !isStringArray(payload.paths))
|
|
732
|
+
return null;
|
|
733
|
+
return {
|
|
734
|
+
type: 'exportInstancesResult',
|
|
735
|
+
sessionId,
|
|
736
|
+
requestId,
|
|
737
|
+
payload: { data: payload.data, paths: payload.paths },
|
|
738
|
+
};
|
|
739
|
+
|
|
740
|
+
case 'importInstancesResult':
|
|
741
|
+
if (requestId === undefined) return null;
|
|
742
|
+
if (!isStringArray(payload.paths)) return null;
|
|
743
|
+
return {
|
|
744
|
+
type: 'importInstancesResult',
|
|
745
|
+
sessionId,
|
|
746
|
+
requestId,
|
|
747
|
+
payload: { paths: payload.paths },
|
|
748
|
+
};
|
|
749
|
+
|
|
750
|
+
case 'findInstancesResult':
|
|
751
|
+
if (requestId === undefined) return null;
|
|
752
|
+
if (!Array.isArray(payload.instances)) return null;
|
|
753
|
+
return {
|
|
754
|
+
type: 'findInstancesResult',
|
|
755
|
+
sessionId,
|
|
756
|
+
requestId,
|
|
757
|
+
payload: {
|
|
758
|
+
instances: payload.instances as FoundInstance[],
|
|
759
|
+
searched: typeof payload.searched === 'number' ? payload.searched : 0,
|
|
760
|
+
truncated: payload.truncated === true,
|
|
761
|
+
},
|
|
762
|
+
};
|
|
763
|
+
|
|
764
|
+
case 'grepScriptsResult':
|
|
765
|
+
if (requestId === undefined) return null;
|
|
766
|
+
if (!Array.isArray(payload.matches)) return null;
|
|
767
|
+
return {
|
|
768
|
+
type: 'grepScriptsResult',
|
|
769
|
+
sessionId,
|
|
770
|
+
requestId,
|
|
771
|
+
payload: {
|
|
772
|
+
matches: payload.matches as GrepMatch[],
|
|
773
|
+
searched: typeof payload.searched === 'number' ? payload.searched : 0,
|
|
774
|
+
truncated: payload.truncated === true,
|
|
775
|
+
},
|
|
776
|
+
};
|
|
777
|
+
|
|
486
778
|
case 'logsResult':
|
|
487
779
|
if (requestId === undefined) return null;
|
|
488
780
|
if (
|
|
@@ -497,11 +789,7 @@ export function decodePluginMessage(raw: string): PluginMessage | null {
|
|
|
497
789
|
sessionId,
|
|
498
790
|
requestId,
|
|
499
791
|
payload: {
|
|
500
|
-
entries: payload.entries as
|
|
501
|
-
level: OutputLevel;
|
|
502
|
-
body: string;
|
|
503
|
-
timestamp: number;
|
|
504
|
-
}>,
|
|
792
|
+
entries: payload.entries as LogsResultMessage['payload']['entries'],
|
|
505
793
|
total: payload.total,
|
|
506
794
|
bufferCapacity: payload.bufferCapacity,
|
|
507
795
|
},
|
|
@@ -580,6 +868,44 @@ export function decodePluginMessage(raw: string): PluginMessage | null {
|
|
|
580
868
|
},
|
|
581
869
|
};
|
|
582
870
|
|
|
871
|
+
case 'playtestEnded':
|
|
872
|
+
if (requestId === undefined) return null;
|
|
873
|
+
if (
|
|
874
|
+
typeof payload.playtestId !== 'string' ||
|
|
875
|
+
typeof payload.success !== 'boolean'
|
|
876
|
+
)
|
|
877
|
+
return null;
|
|
878
|
+
return {
|
|
879
|
+
type: 'playtestEnded',
|
|
880
|
+
sessionId,
|
|
881
|
+
requestId,
|
|
882
|
+
payload: {
|
|
883
|
+
playtestId: payload.playtestId,
|
|
884
|
+
success: payload.success,
|
|
885
|
+
error: typeof payload.error === 'string' ? payload.error : undefined,
|
|
886
|
+
},
|
|
887
|
+
};
|
|
888
|
+
|
|
889
|
+
case 'endPlaytestResult':
|
|
890
|
+
if (requestId === undefined) return null;
|
|
891
|
+
return {
|
|
892
|
+
type: 'endPlaytestResult',
|
|
893
|
+
sessionId,
|
|
894
|
+
requestId,
|
|
895
|
+
payload: {
|
|
896
|
+
playtestId:
|
|
897
|
+
typeof payload.playtestId === 'string'
|
|
898
|
+
? payload.playtestId
|
|
899
|
+
: undefined,
|
|
900
|
+
mode:
|
|
901
|
+
payload.mode === 'play' || payload.mode === 'run'
|
|
902
|
+
? payload.mode
|
|
903
|
+
: undefined,
|
|
904
|
+
players:
|
|
905
|
+
typeof payload.players === 'number' ? payload.players : undefined,
|
|
906
|
+
},
|
|
907
|
+
};
|
|
908
|
+
|
|
583
909
|
case 'error':
|
|
584
910
|
if (
|
|
585
911
|
typeof payload.code !== 'string' ||
|
|
@@ -642,7 +968,13 @@ export function decodeServerMessage(raw: string): ServerMessage | null {
|
|
|
642
968
|
type: 'execute',
|
|
643
969
|
sessionId,
|
|
644
970
|
...(requestId !== undefined ? { requestId } : {}),
|
|
645
|
-
payload: {
|
|
971
|
+
payload: {
|
|
972
|
+
script: payload.script,
|
|
973
|
+
...(typeof payload.timeoutMs === 'number'
|
|
974
|
+
? { timeoutMs: payload.timeoutMs }
|
|
975
|
+
: {}),
|
|
976
|
+
...(isStringArray(payload.args) ? { args: payload.args } : {}),
|
|
977
|
+
},
|
|
646
978
|
};
|
|
647
979
|
}
|
|
648
980
|
return null;
|
|
@@ -674,6 +1006,74 @@ export function decodeServerMessage(raw: string): ServerMessage | null {
|
|
|
674
1006
|
},
|
|
675
1007
|
};
|
|
676
1008
|
|
|
1009
|
+
case 'exportInstances':
|
|
1010
|
+
if (requestId === undefined) return null;
|
|
1011
|
+
if (!isStringArray(payload.paths)) return null;
|
|
1012
|
+
return {
|
|
1013
|
+
type: 'exportInstances',
|
|
1014
|
+
sessionId,
|
|
1015
|
+
requestId,
|
|
1016
|
+
payload: { paths: payload.paths },
|
|
1017
|
+
};
|
|
1018
|
+
|
|
1019
|
+
case 'importInstances':
|
|
1020
|
+
if (requestId === undefined) return null;
|
|
1021
|
+
if (
|
|
1022
|
+
typeof payload.data !== 'string' ||
|
|
1023
|
+
typeof payload.parentPath !== 'string'
|
|
1024
|
+
)
|
|
1025
|
+
return null;
|
|
1026
|
+
return {
|
|
1027
|
+
type: 'importInstances',
|
|
1028
|
+
sessionId,
|
|
1029
|
+
requestId,
|
|
1030
|
+
payload: { data: payload.data, parentPath: payload.parentPath },
|
|
1031
|
+
};
|
|
1032
|
+
|
|
1033
|
+
case 'findInstances':
|
|
1034
|
+
if (requestId === undefined) return null;
|
|
1035
|
+
return {
|
|
1036
|
+
type: 'findInstances',
|
|
1037
|
+
sessionId,
|
|
1038
|
+
requestId,
|
|
1039
|
+
payload: {
|
|
1040
|
+
root: typeof payload.root === 'string' ? payload.root : undefined,
|
|
1041
|
+
name: typeof payload.name === 'string' ? payload.name : undefined,
|
|
1042
|
+
exactName:
|
|
1043
|
+
typeof payload.exactName === 'boolean'
|
|
1044
|
+
? payload.exactName
|
|
1045
|
+
: undefined,
|
|
1046
|
+
className:
|
|
1047
|
+
typeof payload.className === 'string'
|
|
1048
|
+
? payload.className
|
|
1049
|
+
: undefined,
|
|
1050
|
+
tag: typeof payload.tag === 'string' ? payload.tag : undefined,
|
|
1051
|
+
limit: typeof payload.limit === 'number' ? payload.limit : undefined,
|
|
1052
|
+
},
|
|
1053
|
+
};
|
|
1054
|
+
|
|
1055
|
+
case 'grepScripts':
|
|
1056
|
+
if (requestId === undefined) return null;
|
|
1057
|
+
if (typeof payload.pattern !== 'string') return null;
|
|
1058
|
+
return {
|
|
1059
|
+
type: 'grepScripts',
|
|
1060
|
+
sessionId,
|
|
1061
|
+
requestId,
|
|
1062
|
+
payload: {
|
|
1063
|
+
pattern: payload.pattern,
|
|
1064
|
+
root: typeof payload.root === 'string' ? payload.root : undefined,
|
|
1065
|
+
luaPattern:
|
|
1066
|
+
typeof payload.luaPattern === 'boolean'
|
|
1067
|
+
? payload.luaPattern
|
|
1068
|
+
: undefined,
|
|
1069
|
+
caseSensitive:
|
|
1070
|
+
typeof payload.caseSensitive === 'boolean'
|
|
1071
|
+
? payload.caseSensitive
|
|
1072
|
+
: undefined,
|
|
1073
|
+
limit: typeof payload.limit === 'number' ? payload.limit : undefined,
|
|
1074
|
+
},
|
|
1075
|
+
};
|
|
1076
|
+
|
|
677
1077
|
case 'queryDataModel':
|
|
678
1078
|
if (requestId === undefined) return null;
|
|
679
1079
|
if (typeof payload.path !== 'string') return null;
|
|
@@ -721,6 +1121,11 @@ export function decodeServerMessage(raw: string): ServerMessage | null {
|
|
|
721
1121
|
typeof payload.includeInternal === 'boolean'
|
|
722
1122
|
? payload.includeInternal
|
|
723
1123
|
: undefined,
|
|
1124
|
+
since: typeof payload.since === 'number' ? payload.since : undefined,
|
|
1125
|
+
groupRepeats:
|
|
1126
|
+
typeof payload.groupRepeats === 'boolean'
|
|
1127
|
+
? payload.groupRepeats
|
|
1128
|
+
: undefined,
|
|
724
1129
|
},
|
|
725
1130
|
};
|
|
726
1131
|
|
|
@@ -759,6 +1164,61 @@ export function decodeServerMessage(raw: string): ServerMessage | null {
|
|
|
759
1164
|
},
|
|
760
1165
|
};
|
|
761
1166
|
|
|
1167
|
+
case 'startPlaytest':
|
|
1168
|
+
if (requestId === undefined) return null;
|
|
1169
|
+
if (
|
|
1170
|
+
(payload.mode !== 'play' && payload.mode !== 'run') ||
|
|
1171
|
+
typeof payload.playtestId !== 'string' ||
|
|
1172
|
+
typeof payload.bridgePort !== 'number' ||
|
|
1173
|
+
typeof payload.instanceId !== 'string'
|
|
1174
|
+
)
|
|
1175
|
+
return null;
|
|
1176
|
+
return {
|
|
1177
|
+
type: 'startPlaytest',
|
|
1178
|
+
sessionId,
|
|
1179
|
+
requestId,
|
|
1180
|
+
payload: {
|
|
1181
|
+
mode: payload.mode,
|
|
1182
|
+
playtestId: payload.playtestId,
|
|
1183
|
+
bridgePort: payload.bridgePort,
|
|
1184
|
+
instanceId: payload.instanceId,
|
|
1185
|
+
...(typeof payload.players === 'number'
|
|
1186
|
+
? { players: payload.players }
|
|
1187
|
+
: {}),
|
|
1188
|
+
},
|
|
1189
|
+
};
|
|
1190
|
+
|
|
1191
|
+
case 'endPlaytest':
|
|
1192
|
+
if (requestId === undefined) return null;
|
|
1193
|
+
return {
|
|
1194
|
+
type: 'endPlaytest',
|
|
1195
|
+
sessionId,
|
|
1196
|
+
requestId,
|
|
1197
|
+
payload: {} as Record<string, never>,
|
|
1198
|
+
};
|
|
1199
|
+
|
|
1200
|
+
case 'runPlaytestScript':
|
|
1201
|
+
if (requestId === undefined) return null;
|
|
1202
|
+
if (
|
|
1203
|
+
(payload.mode !== 'play' && payload.mode !== 'run') ||
|
|
1204
|
+
typeof payload.script !== 'string' ||
|
|
1205
|
+
typeof payload.runnerSource !== 'string' ||
|
|
1206
|
+
typeof payload.timeoutSec !== 'number'
|
|
1207
|
+
)
|
|
1208
|
+
return null;
|
|
1209
|
+
return {
|
|
1210
|
+
type: 'runPlaytestScript',
|
|
1211
|
+
sessionId,
|
|
1212
|
+
requestId,
|
|
1213
|
+
payload: {
|
|
1214
|
+
mode: payload.mode,
|
|
1215
|
+
script: payload.script,
|
|
1216
|
+
runnerSource: payload.runnerSource,
|
|
1217
|
+
timeoutSec: payload.timeoutSec,
|
|
1218
|
+
...(isStringArray(payload.args) ? { args: payload.args } : {}),
|
|
1219
|
+
},
|
|
1220
|
+
};
|
|
1221
|
+
|
|
762
1222
|
case 'error':
|
|
763
1223
|
if (
|
|
764
1224
|
typeof payload.code !== 'string' ||
|