@tamagui/cli 1.1.12 → 1.1.13
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/cli.js +8 -0
- package/dist/cjs/cli.js.map +2 -2
- package/dist/cjs/dev.js +76 -58
- package/dist/cjs/dev.js.map +3 -3
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/studio.js +12 -9
- package/dist/cjs/studio.js.map +2 -2
- package/dist/cjs/tamaguiConfigUtils.js +14 -5
- package/dist/cjs/tamaguiConfigUtils.js.map +2 -2
- package/dist/cjs/utils.js +16 -18
- package/dist/cjs/utils.js.map +2 -2
- package/dist/esm/cli.js +9 -1
- package/dist/esm/cli.js.map +2 -2
- package/dist/esm/dev.js +75 -57
- package/dist/esm/dev.js.map +3 -3
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/studio.js +12 -9
- package/dist/esm/studio.js.map +2 -2
- package/dist/esm/tamaguiConfigUtils.js +14 -5
- package/dist/esm/tamaguiConfigUtils.js.map +2 -2
- package/dist/esm/utils.js +13 -16
- package/dist/esm/utils.js.map +2 -2
- package/package.json +19 -6
- package/src/cli.ts +9 -1
- package/src/dev/createDevServer.ts +239 -0
- package/src/dev.ts +94 -70
- package/src/index.ts +8 -0
- package/src/studio.ts +14 -9
- package/src/tamaguiConfigUtils.ts +16 -5
- package/src/utils/constants.ts +1 -0
- package/src/utils.ts +14 -15
- package/src/vendor/debugger-app/index.d.ts +2 -0
- package/src/vendor/debugger-app/index.js +3 -0
- package/src/vendor/debugger-app/public/index.html +49 -0
- package/src/vendor/debugger-app/src/assets/blue-icon.png +0 -0
- package/src/vendor/debugger-app/src/assets/gray-icon.png +0 -0
- package/src/vendor/debugger-app/src/assets/orange-icon.png +0 -0
- package/src/vendor/debugger-app/src/debuggerWorker.js +84 -0
- package/src/vendor/debugger-app/src/index.css +37 -0
- package/src/vendor/debugger-app/src/index.js +195 -0
- package/src/vendor/debugger-app/webpack.config.cjs +73 -0
- package/src/vendor/repack/dev-server/src/createServer.ts +127 -0
- package/src/vendor/repack/dev-server/src/img/favicon.ico +0 -0
- package/src/vendor/repack/dev-server/src/index.ts +2 -0
- package/src/vendor/repack/dev-server/src/plugins/api/apiPlugin.ts +50 -0
- package/src/vendor/repack/dev-server/src/plugins/api/index.ts +1 -0
- package/src/vendor/repack/dev-server/src/plugins/compiler/compilerPlugin.ts +84 -0
- package/src/vendor/repack/dev-server/src/plugins/compiler/index.ts +2 -0
- package/src/vendor/repack/dev-server/src/plugins/compiler/types.ts +37 -0
- package/src/vendor/repack/dev-server/src/plugins/devtools/devtoolsPlugin.ts +107 -0
- package/src/vendor/repack/dev-server/src/plugins/devtools/index.ts +1 -0
- package/src/vendor/repack/dev-server/src/plugins/favicon/faviconPlugin.ts +14 -0
- package/src/vendor/repack/dev-server/src/plugins/favicon/index.ts +1 -0
- package/src/vendor/repack/dev-server/src/plugins/multipart/index.ts +2 -0
- package/src/vendor/repack/dev-server/src/plugins/multipart/multipartPlugin.ts +77 -0
- package/src/vendor/repack/dev-server/src/plugins/multipart/types.ts +13 -0
- package/src/vendor/repack/dev-server/src/plugins/symbolicate/Symbolicator.ts +233 -0
- package/src/vendor/repack/dev-server/src/plugins/symbolicate/index.ts +3 -0
- package/src/vendor/repack/dev-server/src/plugins/symbolicate/sybmolicatePlugin.ts +48 -0
- package/src/vendor/repack/dev-server/src/plugins/symbolicate/types.ts +71 -0
- package/src/vendor/repack/dev-server/src/plugins/wss/WebSocketRouter.ts +67 -0
- package/src/vendor/repack/dev-server/src/plugins/wss/WebSocketServer.ts +60 -0
- package/src/vendor/repack/dev-server/src/plugins/wss/index.ts +3 -0
- package/src/vendor/repack/dev-server/src/plugins/wss/servers/HermesInspectorProxy.ts +158 -0
- package/src/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketApiServer.ts +66 -0
- package/src/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketDebuggerServer.ts +134 -0
- package/src/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketDevClientServer.ts +74 -0
- package/src/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketEventsServer.ts +202 -0
- package/src/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketHMRServer.ts +97 -0
- package/src/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketMessageServer.ts +398 -0
- package/src/vendor/repack/dev-server/src/plugins/wss/types.ts +17 -0
- package/src/vendor/repack/dev-server/src/plugins/wss/wssPlugin.ts +77 -0
- package/src/vendor/repack/dev-server/src/types.ts +202 -0
- package/src/vendor/repack/dev-server/vendor/metro-inspector-proxy/src/Device.cjs +1 -0
- package/src/vendor/repack/dev-server/vendor/metro-inspector-proxy/src/Device.js +1 -0
- package/types/build.d.ts.map +1 -0
- package/types/cli.d.ts.map +1 -0
- package/types/create.d.ts.map +1 -0
- package/types/dev/createDevServer.d.ts +28 -0
- package/types/dev/createDevServer.d.ts.map +1 -0
- package/types/dev/websocket-server/WebSocketRouter.d.ts +33 -0
- package/types/dev/websocket-server/WebSocketRouter.d.ts.map +1 -0
- package/types/dev/websocket-server/WebSocketServer.d.ts +38 -0
- package/types/dev/websocket-server/WebSocketServer.d.ts.map +1 -0
- package/types/dev/websocket-server/index.d.ts +4 -0
- package/types/dev/websocket-server/index.d.ts.map +1 -0
- package/types/dev/websocket-server/servers/HermesInspectorProxy.d.ts +25 -0
- package/types/dev/websocket-server/servers/HermesInspectorProxy.d.ts.map +1 -0
- package/types/dev/websocket-server/servers/WebSocketApiServer.d.ts +33 -0
- package/types/dev/websocket-server/servers/WebSocketApiServer.d.ts.map +1 -0
- package/types/dev/websocket-server/servers/WebSocketDebuggerServer.d.ts +65 -0
- package/types/dev/websocket-server/servers/WebSocketDebuggerServer.d.ts.map +1 -0
- package/types/dev/websocket-server/servers/WebSocketDevClientServer.d.ts +33 -0
- package/types/dev/websocket-server/servers/WebSocketDevClientServer.d.ts.map +1 -0
- package/types/dev/websocket-server/servers/WebSocketEventsServer.d.ts +76 -0
- package/types/dev/websocket-server/servers/WebSocketEventsServer.d.ts.map +1 -0
- package/types/dev/websocket-server/servers/WebSocketHMRServer.d.ts +39 -0
- package/types/dev/websocket-server/servers/WebSocketHMRServer.d.ts.map +1 -0
- package/types/dev/websocket-server/servers/WebSocketMessageServer.d.ts +141 -0
- package/types/dev/websocket-server/servers/WebSocketMessageServer.d.ts.map +1 -0
- package/types/dev/websocket-server/types.d.ts +17 -0
- package/types/dev/websocket-server/types.d.ts.map +1 -0
- package/types/dev/websocket-server/wssPlugin.d.ts +25 -0
- package/types/dev/websocket-server/wssPlugin.d.ts.map +1 -0
- package/types/dev/wss/WebSocketRouter.d.ts +33 -0
- package/types/dev/wss/WebSocketRouter.d.ts.map +1 -0
- package/types/dev/wss/WebSocketServer.d.ts +38 -0
- package/types/dev/wss/WebSocketServer.d.ts.map +1 -0
- package/types/dev/wss/index.d.ts +4 -0
- package/types/dev/wss/index.d.ts.map +1 -0
- package/types/dev/wss/servers/HermesInspectorProxy.d.ts +25 -0
- package/types/dev/wss/servers/HermesInspectorProxy.d.ts.map +1 -0
- package/types/dev/wss/servers/WebSocketApiServer.d.ts +33 -0
- package/types/dev/wss/servers/WebSocketApiServer.d.ts.map +1 -0
- package/types/dev/wss/servers/WebSocketDebuggerServer.d.ts +65 -0
- package/types/dev/wss/servers/WebSocketDebuggerServer.d.ts.map +1 -0
- package/types/dev/wss/servers/WebSocketDevClientServer.d.ts +33 -0
- package/types/dev/wss/servers/WebSocketDevClientServer.d.ts.map +1 -0
- package/types/dev/wss/servers/WebSocketEventsServer.d.ts +76 -0
- package/types/dev/wss/servers/WebSocketEventsServer.d.ts.map +1 -0
- package/types/dev/wss/servers/WebSocketHMRServer.d.ts +39 -0
- package/types/dev/wss/servers/WebSocketHMRServer.d.ts.map +1 -0
- package/types/dev/wss/servers/WebSocketMessageServer.d.ts +141 -0
- package/types/dev/wss/servers/WebSocketMessageServer.d.ts.map +1 -0
- package/types/dev/wss/types.d.ts +17 -0
- package/types/dev/wss/types.d.ts.map +1 -0
- package/types/dev/wss/wssPlugin.d.ts +25 -0
- package/types/dev/wss/wssPlugin.d.ts.map +1 -0
- package/types/dev-debugger-socket.d.ts +1 -0
- package/types/dev-debugger-socket.d.ts.map +1 -0
- package/types/dev.d.ts.map +1 -0
- package/types/generate.d.ts.map +1 -0
- package/types/index.d.ts.map +1 -0
- package/types/studio.d.ts.map +1 -0
- package/types/tamaguiConfigUtils.d.ts.map +1 -0
- package/types/test.d.ts.map +1 -0
- package/types/types.d.ts.map +1 -0
- package/types/update.d.ts.map +1 -0
- package/types/utils/constants.d.ts +2 -0
- package/types/utils/constants.d.ts.map +1 -0
- package/types/utils.d.ts +2 -2
- package/types/utils.d.ts.map +1 -0
- package/types/vendor/repack/WebSocketRouter.d.ts +33 -0
- package/types/vendor/repack/WebSocketRouter.d.ts.map +1 -0
- package/types/vendor/repack/WebSocketServer.d.ts +38 -0
- package/types/vendor/repack/WebSocketServer.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/createServer.d.ts +14 -0
- package/types/vendor/repack/dev-server/src/createServer.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/index.d.ts +3 -0
- package/types/vendor/repack/dev-server/src/index.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/api/apiPlugin.d.ts +7 -0
- package/types/vendor/repack/dev-server/src/plugins/api/apiPlugin.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/api/index.d.ts +2 -0
- package/types/vendor/repack/dev-server/src/plugins/api/index.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/compiler/compilerPlugin.d.ts +7 -0
- package/types/vendor/repack/dev-server/src/plugins/compiler/compilerPlugin.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/compiler/index.d.ts +3 -0
- package/types/vendor/repack/dev-server/src/plugins/compiler/index.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/compiler/types.d.ts +32 -0
- package/types/vendor/repack/dev-server/src/plugins/compiler/types.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/devtools/devtoolsPlugin.d.ts +7 -0
- package/types/vendor/repack/dev-server/src/plugins/devtools/devtoolsPlugin.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/devtools/index.d.ts +2 -0
- package/types/vendor/repack/dev-server/src/plugins/devtools/index.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/favicon/faviconPlugin.d.ts +4 -0
- package/types/vendor/repack/dev-server/src/plugins/favicon/faviconPlugin.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/favicon/index.d.ts +2 -0
- package/types/vendor/repack/dev-server/src/plugins/favicon/index.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/multipart/index.d.ts +3 -0
- package/types/vendor/repack/dev-server/src/plugins/multipart/index.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/multipart/multipartPlugin.d.ts +4 -0
- package/types/vendor/repack/dev-server/src/plugins/multipart/multipartPlugin.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/multipart/types.d.ts +13 -0
- package/types/vendor/repack/dev-server/src/plugins/multipart/types.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/symbolicate/Symbolicator.d.ts +47 -0
- package/types/vendor/repack/dev-server/src/plugins/symbolicate/Symbolicator.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/symbolicate/index.d.ts +4 -0
- package/types/vendor/repack/dev-server/src/plugins/symbolicate/index.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/symbolicate/sybmolicatePlugin.d.ts +7 -0
- package/types/vendor/repack/dev-server/src/plugins/symbolicate/sybmolicatePlugin.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/symbolicate/types.d.ts +66 -0
- package/types/vendor/repack/dev-server/src/plugins/symbolicate/types.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/WebSocketRouter.d.ts +33 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/WebSocketRouter.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/WebSocketServer.d.ts +38 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/WebSocketServer.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/index.d.ts +4 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/index.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/servers/HermesInspectorProxy.d.ts +25 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/servers/HermesInspectorProxy.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketApiServer.d.ts +33 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketApiServer.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketDebuggerServer.d.ts +65 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketDebuggerServer.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketDevClientServer.d.ts +33 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketDevClientServer.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketEventsServer.d.ts +76 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketEventsServer.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketHMRServer.d.ts +39 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketHMRServer.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketMessageServer.d.ts +141 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/servers/WebSocketMessageServer.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/types.d.ts +17 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/types.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/wssPlugin.d.ts +28 -0
- package/types/vendor/repack/dev-server/src/plugins/wss/wssPlugin.d.ts.map +1 -0
- package/types/vendor/repack/dev-server/src/types.d.ts +159 -0
- package/types/vendor/repack/dev-server/src/types.d.ts.map +1 -0
- package/types/vendor/repack/index.d.ts +4 -0
- package/types/vendor/repack/index.d.ts.map +1 -0
- package/types/vendor/repack/servers/HermesInspectorProxy.d.ts +25 -0
- package/types/vendor/repack/servers/HermesInspectorProxy.d.ts.map +1 -0
- package/types/vendor/repack/servers/WebSocketApiServer.d.ts +33 -0
- package/types/vendor/repack/servers/WebSocketApiServer.d.ts.map +1 -0
- package/types/vendor/repack/servers/WebSocketDebuggerServer.d.ts +65 -0
- package/types/vendor/repack/servers/WebSocketDebuggerServer.d.ts.map +1 -0
- package/types/vendor/repack/servers/WebSocketDevClientServer.d.ts +33 -0
- package/types/vendor/repack/servers/WebSocketDevClientServer.d.ts.map +1 -0
- package/types/vendor/repack/servers/WebSocketEventsServer.d.ts +76 -0
- package/types/vendor/repack/servers/WebSocketEventsServer.d.ts.map +1 -0
- package/types/vendor/repack/servers/WebSocketHMRServer.d.ts +39 -0
- package/types/vendor/repack/servers/WebSocketHMRServer.d.ts.map +1 -0
- package/types/vendor/repack/servers/WebSocketMessageServer.d.ts +141 -0
- package/types/vendor/repack/servers/WebSocketMessageServer.d.ts.map +1 -0
- package/types/vendor/repack/types.d.ts +159 -0
- package/types/vendor/repack/types.d.ts.map +1 -0
- package/types/vendor/repack/wss/WebSocketRouter.d.ts +33 -0
- package/types/vendor/repack/wss/WebSocketRouter.d.ts.map +1 -0
- package/types/vendor/repack/wss/WebSocketServer.d.ts +38 -0
- package/types/vendor/repack/wss/WebSocketServer.d.ts.map +1 -0
- package/types/vendor/repack/wss/index.d.ts +4 -0
- package/types/vendor/repack/wss/index.d.ts.map +1 -0
- package/types/vendor/repack/wss/servers/HermesInspectorProxy.d.ts +25 -0
- package/types/vendor/repack/wss/servers/HermesInspectorProxy.d.ts.map +1 -0
- package/types/vendor/repack/wss/servers/WebSocketApiServer.d.ts +33 -0
- package/types/vendor/repack/wss/servers/WebSocketApiServer.d.ts.map +1 -0
- package/types/vendor/repack/wss/servers/WebSocketDebuggerServer.d.ts +65 -0
- package/types/vendor/repack/wss/servers/WebSocketDebuggerServer.d.ts.map +1 -0
- package/types/vendor/repack/wss/servers/WebSocketDevClientServer.d.ts +33 -0
- package/types/vendor/repack/wss/servers/WebSocketDevClientServer.d.ts.map +1 -0
- package/types/vendor/repack/wss/servers/WebSocketEventsServer.d.ts +76 -0
- package/types/vendor/repack/wss/servers/WebSocketEventsServer.d.ts.map +1 -0
- package/types/vendor/repack/wss/servers/WebSocketHMRServer.d.ts +39 -0
- package/types/vendor/repack/wss/servers/WebSocketHMRServer.d.ts.map +1 -0
- package/types/vendor/repack/wss/servers/WebSocketMessageServer.d.ts +141 -0
- package/types/vendor/repack/wss/servers/WebSocketMessageServer.d.ts.map +1 -0
- package/types/vendor/repack/wss/types.d.ts +17 -0
- package/types/vendor/repack/wss/types.d.ts.map +1 -0
- package/types/vendor/repack/wss/wssPlugin.d.ts +29 -0
- package/types/vendor/repack/wss/wssPlugin.d.ts.map +1 -0
- package/types/vendor/repack/wssPlugin.d.ts +25 -0
- package/types/vendor/repack/wssPlugin.d.ts.map +1 -0
- package/types/vendor/websocket-server/WebSocketRouter.d.ts +33 -0
- package/types/vendor/websocket-server/WebSocketRouter.d.ts.map +1 -0
- package/types/vendor/websocket-server/WebSocketServer.d.ts +38 -0
- package/types/vendor/websocket-server/WebSocketServer.d.ts.map +1 -0
- package/types/vendor/websocket-server/index.d.ts +4 -0
- package/types/vendor/websocket-server/index.d.ts.map +1 -0
- package/types/vendor/websocket-server/servers/HermesInspectorProxy.d.ts +25 -0
- package/types/vendor/websocket-server/servers/HermesInspectorProxy.d.ts.map +1 -0
- package/types/vendor/websocket-server/servers/WebSocketApiServer.d.ts +33 -0
- package/types/vendor/websocket-server/servers/WebSocketApiServer.d.ts.map +1 -0
- package/types/vendor/websocket-server/servers/WebSocketDebuggerServer.d.ts +65 -0
- package/types/vendor/websocket-server/servers/WebSocketDebuggerServer.d.ts.map +1 -0
- package/types/vendor/websocket-server/servers/WebSocketDevClientServer.d.ts +33 -0
- package/types/vendor/websocket-server/servers/WebSocketDevClientServer.d.ts.map +1 -0
- package/types/vendor/websocket-server/servers/WebSocketEventsServer.d.ts +76 -0
- package/types/vendor/websocket-server/servers/WebSocketEventsServer.d.ts.map +1 -0
- package/types/vendor/websocket-server/servers/WebSocketHMRServer.d.ts +39 -0
- package/types/vendor/websocket-server/servers/WebSocketHMRServer.d.ts.map +1 -0
- package/types/vendor/websocket-server/servers/WebSocketMessageServer.d.ts +141 -0
- package/types/vendor/websocket-server/servers/WebSocketMessageServer.d.ts.map +1 -0
- package/types/vendor/websocket-server/types.d.ts +17 -0
- package/types/vendor/websocket-server/types.d.ts.map +1 -0
- package/types/vendor/websocket-server/wssPlugin.d.ts +25 -0
- package/types/vendor/websocket-server/wssPlugin.d.ts.map +1 -0
- package/types/vendor/wss/WebSocketRouter.d.ts +33 -0
- package/types/vendor/wss/WebSocketRouter.d.ts.map +1 -0
- package/types/vendor/wss/WebSocketServer.d.ts +38 -0
- package/types/vendor/wss/WebSocketServer.d.ts.map +1 -0
- package/types/vendor/wss/index.d.ts +4 -0
- package/types/vendor/wss/index.d.ts.map +1 -0
- package/types/vendor/wss/servers/HermesInspectorProxy.d.ts +25 -0
- package/types/vendor/wss/servers/HermesInspectorProxy.d.ts.map +1 -0
- package/types/vendor/wss/servers/WebSocketApiServer.d.ts +33 -0
- package/types/vendor/wss/servers/WebSocketApiServer.d.ts.map +1 -0
- package/types/vendor/wss/servers/WebSocketDebuggerServer.d.ts +65 -0
- package/types/vendor/wss/servers/WebSocketDebuggerServer.d.ts.map +1 -0
- package/types/vendor/wss/servers/WebSocketDevClientServer.d.ts +33 -0
- package/types/vendor/wss/servers/WebSocketDevClientServer.d.ts.map +1 -0
- package/types/vendor/wss/servers/WebSocketEventsServer.d.ts +76 -0
- package/types/vendor/wss/servers/WebSocketEventsServer.d.ts.map +1 -0
- package/types/vendor/wss/servers/WebSocketHMRServer.d.ts +39 -0
- package/types/vendor/wss/servers/WebSocketHMRServer.d.ts.map +1 -0
- package/types/vendor/wss/servers/WebSocketMessageServer.d.ts +141 -0
- package/types/vendor/wss/servers/WebSocketMessageServer.d.ts.map +1 -0
- package/types/vendor/wss/types.d.ts +17 -0
- package/types/vendor/wss/types.d.ts.map +1 -0
- package/types/vendor/wss/wssPlugin.d.ts +25 -0
- package/types/vendor/wss/wssPlugin.d.ts.map +1 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* global __fbBatchedBridge, importScripts */
|
|
10
|
+
/* eslint no-unused-vars: 0 */
|
|
11
|
+
/* eslint no-restricted-globals: 0 */
|
|
12
|
+
|
|
13
|
+
onmessage = (function () {
|
|
14
|
+
var visibilityState;
|
|
15
|
+
var showVisibilityWarning = (function () {
|
|
16
|
+
var hasWarned = false;
|
|
17
|
+
return function () {
|
|
18
|
+
// Wait until `YellowBox` gets initialized before displaying the warning.
|
|
19
|
+
if (hasWarned || console.warn.toString().includes('[native code]')) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
hasWarned = true;
|
|
23
|
+
console.warn(
|
|
24
|
+
'Remote debugger is in a background tab which may cause apps to ' +
|
|
25
|
+
'perform slowly. Fix this by foregrounding the tab (or opening it in ' +
|
|
26
|
+
'a separate window).'
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
})();
|
|
30
|
+
|
|
31
|
+
var messageHandlers = {
|
|
32
|
+
executeApplicationScript: function (message, sendReply) {
|
|
33
|
+
for (var key in message.inject) {
|
|
34
|
+
self[key] = JSON.parse(message.inject[key]);
|
|
35
|
+
}
|
|
36
|
+
var error;
|
|
37
|
+
try {
|
|
38
|
+
importScripts(message.url);
|
|
39
|
+
} catch (err) {
|
|
40
|
+
error = err.message;
|
|
41
|
+
}
|
|
42
|
+
sendReply(null /* result */, error);
|
|
43
|
+
},
|
|
44
|
+
setDebuggerVisibility: function (message) {
|
|
45
|
+
visibilityState = message.visibilityState;
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
return function (message) {
|
|
50
|
+
if (visibilityState === 'hidden') {
|
|
51
|
+
showVisibilityWarning();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
var object = message.data;
|
|
55
|
+
|
|
56
|
+
var sendReply = function (result, error) {
|
|
57
|
+
postMessage({ replyID: object.id, result: result, error: error });
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
var handler = messageHandlers[object.method];
|
|
61
|
+
if (handler) {
|
|
62
|
+
// Special cased handlers
|
|
63
|
+
handler(object, sendReply);
|
|
64
|
+
} else {
|
|
65
|
+
// Other methods get called on the bridge
|
|
66
|
+
var returnValue = [[], [], [], 0];
|
|
67
|
+
var error;
|
|
68
|
+
try {
|
|
69
|
+
if (typeof __fbBatchedBridge === 'object') {
|
|
70
|
+
returnValue = __fbBatchedBridge[object.method].apply(
|
|
71
|
+
null,
|
|
72
|
+
object.arguments
|
|
73
|
+
);
|
|
74
|
+
} else {
|
|
75
|
+
error = 'Failed to call function, __fbBatchedBridge is undefined';
|
|
76
|
+
}
|
|
77
|
+
} catch (err) {
|
|
78
|
+
error = err.message;
|
|
79
|
+
} finally {
|
|
80
|
+
sendReply(JSON.stringify(returnValue), error);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
})();
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
html,
|
|
2
|
+
body {
|
|
3
|
+
font-family: Helvetica, Verdana, sans-serif;
|
|
4
|
+
font-size: large;
|
|
5
|
+
font-weight: 200;
|
|
6
|
+
height: 100%;
|
|
7
|
+
margin: 0;
|
|
8
|
+
padding: 0;
|
|
9
|
+
}
|
|
10
|
+
.shortcut {
|
|
11
|
+
border-radius: 4px;
|
|
12
|
+
color: #eee;
|
|
13
|
+
background-color: #333;
|
|
14
|
+
font-family: 'Monaco', monospace;
|
|
15
|
+
font-size: medium;
|
|
16
|
+
letter-spacing: 3px;
|
|
17
|
+
padding: 4px;
|
|
18
|
+
}
|
|
19
|
+
.content {
|
|
20
|
+
padding: 10px;
|
|
21
|
+
}
|
|
22
|
+
.reload-btn {
|
|
23
|
+
padding: 5px 10px;
|
|
24
|
+
}
|
|
25
|
+
body.dark {
|
|
26
|
+
background-color: #242424;
|
|
27
|
+
color: #afafaf;
|
|
28
|
+
}
|
|
29
|
+
.dark .shortcut {
|
|
30
|
+
color: #c1c1c1;
|
|
31
|
+
}
|
|
32
|
+
.dark a {
|
|
33
|
+
color: #3b99fc;
|
|
34
|
+
}
|
|
35
|
+
input[type='checkbox'] {
|
|
36
|
+
vertical-align: middle;
|
|
37
|
+
}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* eslint-env browser */
|
|
10
|
+
import './index.css';
|
|
11
|
+
import blueIcon from './assets/blue-icon.png';
|
|
12
|
+
import grayIcon from './assets/gray-icon.png';
|
|
13
|
+
import orangeIcon from './assets/orange-icon.png';
|
|
14
|
+
import DebuggerWorker from './debuggerWorker.js';
|
|
15
|
+
|
|
16
|
+
const isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);
|
|
17
|
+
const refreshShortcut = isMacLike ? '⌘R' : 'Ctrl R';
|
|
18
|
+
window.onload = function () {
|
|
19
|
+
if (!isMacLike) {
|
|
20
|
+
document.getElementById('shortcut').innerHTML = 'Ctrl⇧J';
|
|
21
|
+
}
|
|
22
|
+
Page.render();
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
window.onReloadClicked = function () {
|
|
26
|
+
var xhr = new XMLHttpRequest();
|
|
27
|
+
xhr.open('GET', `${window.location.origin}/reload`, true);
|
|
28
|
+
xhr.send();
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const Page = (window.Page = {
|
|
32
|
+
state: {
|
|
33
|
+
isDark:
|
|
34
|
+
localStorage.getItem('darkTheme') === null
|
|
35
|
+
? window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
36
|
+
: localStorage.getItem('darkTheme') === 'on',
|
|
37
|
+
isPriorityMaintained: localStorage.getItem('maintainPriority') === 'on',
|
|
38
|
+
status: { type: 'disconnected' },
|
|
39
|
+
visibilityState: document.visibilityState,
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
setState(partialState) {
|
|
43
|
+
Page.state = Object.assign({}, Page.state, partialState);
|
|
44
|
+
Page.render();
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
render() {
|
|
48
|
+
const { isDark, isPriorityMaintained, status, visibilityState } =
|
|
49
|
+
Page.state;
|
|
50
|
+
|
|
51
|
+
const statusNode = document.getElementById('status');
|
|
52
|
+
switch (status.type) {
|
|
53
|
+
case 'connected':
|
|
54
|
+
statusNode.innerHTML = 'Debugger session #' + status.id + ' active.';
|
|
55
|
+
break;
|
|
56
|
+
case 'error':
|
|
57
|
+
statusNode.innerHTML =
|
|
58
|
+
status.error.reason ||
|
|
59
|
+
'Disconnected from proxy. Attempting reconnection. Is node server running?';
|
|
60
|
+
break;
|
|
61
|
+
case 'connecting':
|
|
62
|
+
case 'disconnected':
|
|
63
|
+
// Fall through.
|
|
64
|
+
default:
|
|
65
|
+
statusNode.innerHTML =
|
|
66
|
+
'Waiting, press <span class="shortcut">' +
|
|
67
|
+
refreshShortcut +
|
|
68
|
+
'</span> in simulator to reload and connect.';
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const linkNode = document.querySelector('link[rel=icon]');
|
|
73
|
+
if (status.type === 'disconnected' || status.type === 'error') {
|
|
74
|
+
linkNode.href = grayIcon;
|
|
75
|
+
} else {
|
|
76
|
+
if (visibilityState === 'visible' || isPriorityMaintained) {
|
|
77
|
+
linkNode.href = blueIcon;
|
|
78
|
+
} else {
|
|
79
|
+
linkNode.href = orangeIcon;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const darkCheckbox = document.getElementById('dark');
|
|
84
|
+
document.body.classList.toggle('dark', isDark);
|
|
85
|
+
darkCheckbox.checked = isDark;
|
|
86
|
+
localStorage.setItem('darkTheme', isDark ? 'on' : '');
|
|
87
|
+
|
|
88
|
+
const maintainPriorityCheckbox =
|
|
89
|
+
document.getElementById('maintain-priority');
|
|
90
|
+
maintainPriorityCheckbox.checked = isPriorityMaintained;
|
|
91
|
+
localStorage.setItem('maintainPriority', isPriorityMaintained ? 'on' : '');
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
toggleDarkTheme() {
|
|
95
|
+
Page.setState({ isDark: !Page.state.isDark });
|
|
96
|
+
},
|
|
97
|
+
|
|
98
|
+
togglePriorityMaintenance() {
|
|
99
|
+
Page.setState({ isPriorityMaintained: !Page.state.isPriorityMaintained });
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
function connectToDebuggerProxy() {
|
|
104
|
+
const ws = new WebSocket(
|
|
105
|
+
'ws://' + window.location.host + '/debugger-proxy?role=debugger&name=Chrome'
|
|
106
|
+
);
|
|
107
|
+
let worker;
|
|
108
|
+
|
|
109
|
+
function createJSRuntime() {
|
|
110
|
+
// This worker will run the application JavaScript code,
|
|
111
|
+
// making sure that it's run in an environment without a global
|
|
112
|
+
// document, to make it consistent with the JSC executor environment.
|
|
113
|
+
worker = new DebuggerWorker();
|
|
114
|
+
worker.onmessage = function (message) {
|
|
115
|
+
ws.send(JSON.stringify(message.data));
|
|
116
|
+
};
|
|
117
|
+
window.onbeforeunload = function () {
|
|
118
|
+
return (
|
|
119
|
+
'If you reload this page, it is going to break the debugging session. ' +
|
|
120
|
+
'Press ' +
|
|
121
|
+
refreshShortcut +
|
|
122
|
+
' on the device to reload.'
|
|
123
|
+
);
|
|
124
|
+
};
|
|
125
|
+
updateVisibility();
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function shutdownJSRuntime() {
|
|
129
|
+
if (worker) {
|
|
130
|
+
worker.terminate();
|
|
131
|
+
worker = null;
|
|
132
|
+
window.onbeforeunload = null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function updateVisibility() {
|
|
137
|
+
if (worker && !Page.state.isPriorityMaintained) {
|
|
138
|
+
worker.postMessage({
|
|
139
|
+
method: 'setDebuggerVisibility',
|
|
140
|
+
visibilityState: document.visibilityState,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
Page.setState({ visibilityState: document.visibilityState });
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
ws.onopen = function () {
|
|
147
|
+
Page.setState({ status: { type: 'connecting' } });
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
ws.onmessage = function (message) {
|
|
151
|
+
if (!message.data) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const object = JSON.parse(message.data);
|
|
155
|
+
|
|
156
|
+
if (object.$event === 'client-disconnected') {
|
|
157
|
+
shutdownJSRuntime();
|
|
158
|
+
Page.setState({ status: { type: 'disconnected' } });
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (!object.method) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Special message that asks for a new JS runtime
|
|
167
|
+
if (object.method === 'prepareJSRuntime') {
|
|
168
|
+
shutdownJSRuntime();
|
|
169
|
+
console.clear();
|
|
170
|
+
createJSRuntime();
|
|
171
|
+
ws.send(JSON.stringify({ replyID: object.id }));
|
|
172
|
+
Page.setState({ status: { type: 'connected', id: object.id } });
|
|
173
|
+
} else if (object.method === '$disconnected') {
|
|
174
|
+
shutdownJSRuntime();
|
|
175
|
+
Page.setState({ status: { type: 'disconnected' } });
|
|
176
|
+
} else {
|
|
177
|
+
worker.postMessage(object);
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
ws.onclose = function (error) {
|
|
182
|
+
shutdownJSRuntime();
|
|
183
|
+
Page.setState({ status: { type: 'error', error } });
|
|
184
|
+
if (error.reason) {
|
|
185
|
+
console.warn(error.reason);
|
|
186
|
+
}
|
|
187
|
+
setTimeout(connectToDebuggerProxy, 500);
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
// Let debuggerWorker.js know when we're not visible so that we can warn about
|
|
191
|
+
// poor performance when using remote debugging.
|
|
192
|
+
document.addEventListener('visibilitychange', updateVisibility, false);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
connectToDebuggerProxy();
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const path = require('path');
|
|
2
|
+
const webpack = require('webpack');
|
|
3
|
+
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
4
|
+
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Webpack config for building client dashboard including debugger UI.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
const mode = process.env.NODE_ENV || 'development';
|
|
11
|
+
|
|
12
|
+
module.exports = {
|
|
13
|
+
mode,
|
|
14
|
+
devtool: mode === 'development' ? 'cheap-module-source-map' : 'source-map',
|
|
15
|
+
context: __dirname,
|
|
16
|
+
entry: './src/index.js',
|
|
17
|
+
output: {
|
|
18
|
+
path: path.join(__dirname, 'dist'),
|
|
19
|
+
clean: true,
|
|
20
|
+
filename: 'static/js/[name].[contenthash:8].js',
|
|
21
|
+
publicPath: '/debugger-ui/',
|
|
22
|
+
},
|
|
23
|
+
module: {
|
|
24
|
+
rules: [
|
|
25
|
+
{
|
|
26
|
+
test: /debuggerWorker.js$/,
|
|
27
|
+
use: { loader: 'worker-loader' },
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
test: /\.(ts|js)x?$/,
|
|
31
|
+
loader: 'babel-loader',
|
|
32
|
+
options: {
|
|
33
|
+
babelrc: false,
|
|
34
|
+
configFile: require.resolve('./babel.config.cjs'),
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
|
|
39
|
+
loader: require.resolve('url-loader'),
|
|
40
|
+
options: {
|
|
41
|
+
limit: 10000,
|
|
42
|
+
name: 'static/media/[name].[hash:8].[ext]',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
test: /\.css$/,
|
|
47
|
+
use: [
|
|
48
|
+
{
|
|
49
|
+
loader: MiniCssExtractPlugin.loader,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
loader: 'css-loader',
|
|
53
|
+
options: { importLoaders: 1 },
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
sideEffects: true,
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
plugins: [
|
|
61
|
+
new HtmlWebpackPlugin({
|
|
62
|
+
inject: true,
|
|
63
|
+
template: path.join(__dirname, './public/index.html'),
|
|
64
|
+
}),
|
|
65
|
+
new webpack.DefinePlugin({
|
|
66
|
+
'process.env.NODE_ENV': JSON.stringify(mode),
|
|
67
|
+
}),
|
|
68
|
+
new MiniCssExtractPlugin({
|
|
69
|
+
filename: 'static/css/[name].[contenthash:8].css',
|
|
70
|
+
chunkFilename: 'static/css/[name].[contenthash:8].chunk.css',
|
|
71
|
+
}),
|
|
72
|
+
],
|
|
73
|
+
};
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { Writable } from 'stream'
|
|
2
|
+
|
|
3
|
+
// import debuggerAppPath from '@callstack/repack-debugger-app'
|
|
4
|
+
import fastifySensible from '@fastify/sensible'
|
|
5
|
+
import fastifyStatic from '@fastify/static'
|
|
6
|
+
import Fastify from 'fastify'
|
|
7
|
+
|
|
8
|
+
import apiPlugin from './plugins/api'
|
|
9
|
+
import compilerPlugin from './plugins/compiler'
|
|
10
|
+
import devtoolsPlugin from './plugins/devtools'
|
|
11
|
+
// import faviconPlugin from './plugins/favicon'
|
|
12
|
+
import multipartPlugin from './plugins/multipart'
|
|
13
|
+
import symbolicatePlugin from './plugins/symbolicate'
|
|
14
|
+
import wssPlugin from './plugins/wss'
|
|
15
|
+
import { Internal, Server } from './types'
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Create instance of development server, powered by Fastify.
|
|
19
|
+
*
|
|
20
|
+
* @param config Server configuration.
|
|
21
|
+
* @returns `start` and `stop` functions as well as an underlying Fastify `instance`.
|
|
22
|
+
*/
|
|
23
|
+
export async function createServer(config: Server.Config) {
|
|
24
|
+
let delegate: Server.Delegate
|
|
25
|
+
|
|
26
|
+
/** Fastify instance powering the development server. */
|
|
27
|
+
const instance = Fastify({
|
|
28
|
+
logger: {
|
|
29
|
+
level: 'trace',
|
|
30
|
+
stream: new Writable({
|
|
31
|
+
write: (chunk, _encoding, callback) => {
|
|
32
|
+
const log = JSON.parse(chunk.toString())
|
|
33
|
+
delegate?.logger.onMessage(log)
|
|
34
|
+
instance.wss?.apiServer.send(log)
|
|
35
|
+
callback()
|
|
36
|
+
},
|
|
37
|
+
}),
|
|
38
|
+
},
|
|
39
|
+
...(config.options.https ? { https: config.options.https } : undefined),
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
delegate = config.delegate({
|
|
43
|
+
log: instance.log,
|
|
44
|
+
notifyBuildStart: (platform) => {
|
|
45
|
+
instance.wss.apiServer.send({
|
|
46
|
+
event: Internal.EventTypes.BuildStart,
|
|
47
|
+
platform,
|
|
48
|
+
})
|
|
49
|
+
},
|
|
50
|
+
notifyBuildEnd: (platform) => {
|
|
51
|
+
instance.wss.apiServer.send({
|
|
52
|
+
event: Internal.EventTypes.BuildEnd,
|
|
53
|
+
platform,
|
|
54
|
+
})
|
|
55
|
+
},
|
|
56
|
+
broadcastToHmrClients: (event, platform, clientIds) => {
|
|
57
|
+
instance.wss.hmrServer.send(event, platform, clientIds)
|
|
58
|
+
},
|
|
59
|
+
broadcastToMessageClients: ({ method, params }) => {
|
|
60
|
+
instance.wss.messageServer.broadcast(method, params)
|
|
61
|
+
},
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
// Register plugins
|
|
65
|
+
await instance.register(fastifySensible)
|
|
66
|
+
await instance.register(wssPlugin, {
|
|
67
|
+
options: config.options,
|
|
68
|
+
delegate,
|
|
69
|
+
})
|
|
70
|
+
await instance.register(multipartPlugin)
|
|
71
|
+
await instance.register(apiPlugin, {
|
|
72
|
+
delegate,
|
|
73
|
+
prefix: '/api',
|
|
74
|
+
})
|
|
75
|
+
await instance.register(compilerPlugin, {
|
|
76
|
+
delegate,
|
|
77
|
+
})
|
|
78
|
+
await instance.register(symbolicatePlugin, {
|
|
79
|
+
delegate,
|
|
80
|
+
})
|
|
81
|
+
await instance.register(devtoolsPlugin, {
|
|
82
|
+
options: config.options,
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
console.warn('disable debugger-ui + favicon for now')
|
|
86
|
+
// await instance.register(fastifyStatic, {
|
|
87
|
+
// root: debuggerAppPath,
|
|
88
|
+
// prefix: '/debugger-ui',
|
|
89
|
+
// prefixAvoidTrailingSlash: true,
|
|
90
|
+
// })
|
|
91
|
+
|
|
92
|
+
// below is to prevent showing `GET 400 /favicon.ico`
|
|
93
|
+
// errors in console when requesting the bundle via browser
|
|
94
|
+
// await instance.register(faviconPlugin)
|
|
95
|
+
|
|
96
|
+
instance.addHook('onSend', async (request, reply, payload) => {
|
|
97
|
+
reply.header('X-Content-Type-Options', 'nosniff')
|
|
98
|
+
|
|
99
|
+
const [pathname] = request.url.split('?')
|
|
100
|
+
if (pathname.endsWith('.map')) {
|
|
101
|
+
reply.header('Access-Control-Allow-Origin', 'devtools://devtools')
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return payload
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
// Register routes
|
|
108
|
+
instance.head('/', async () => '')
|
|
109
|
+
instance.get('/', async () => delegate.messages.getHello())
|
|
110
|
+
instance.get('/status', async () => delegate.messages.getStatus())
|
|
111
|
+
|
|
112
|
+
/** Start the development server. */
|
|
113
|
+
async function start() {
|
|
114
|
+
await instance.listen(config.options.port, config.options.host)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Stop the development server. */
|
|
118
|
+
async function stop() {
|
|
119
|
+
await instance.close()
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
start,
|
|
124
|
+
stop,
|
|
125
|
+
instance,
|
|
126
|
+
}
|
|
127
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { FastifyInstance } from 'fastify'
|
|
2
|
+
|
|
3
|
+
import type { Server } from '../../types'
|
|
4
|
+
|
|
5
|
+
const paramsSchema = {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
platform: {
|
|
9
|
+
type: 'string',
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
required: ['platform'],
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type Params = { platform: string }
|
|
16
|
+
|
|
17
|
+
async function apiPlugin(
|
|
18
|
+
instance: FastifyInstance,
|
|
19
|
+
{ delegate }: { delegate: Server.Delegate }
|
|
20
|
+
) {
|
|
21
|
+
instance.get('/platforms', async (_request, reply) =>
|
|
22
|
+
delegate.api
|
|
23
|
+
? reply.send({ data: await delegate.api.getPlatforms() })
|
|
24
|
+
: reply.notImplemented('Missing API delegate implementation')
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
instance.get<{ Params: Params }>(
|
|
28
|
+
'/:platform/assets',
|
|
29
|
+
{ schema: { params: paramsSchema } },
|
|
30
|
+
async (request, reply) =>
|
|
31
|
+
delegate.api
|
|
32
|
+
? reply.send({
|
|
33
|
+
data: await delegate.api.getAssets(request.params.platform),
|
|
34
|
+
})
|
|
35
|
+
: reply.notImplemented('Missing API delegate implementation')
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
instance.get<{ Params: Params }>(
|
|
39
|
+
'/:platform/stats',
|
|
40
|
+
{ schema: { params: paramsSchema } },
|
|
41
|
+
async (request, reply) =>
|
|
42
|
+
delegate.api
|
|
43
|
+
? reply.send({
|
|
44
|
+
data: await delegate.api?.getCompilationStats(request.params.platform),
|
|
45
|
+
})
|
|
46
|
+
: reply.notImplemented('Missing API delegate implementation')
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export default apiPlugin
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './apiPlugin'
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { FastifyInstance } from 'fastify'
|
|
2
|
+
import fastifyPlugin from 'fastify-plugin'
|
|
3
|
+
|
|
4
|
+
import type { Server } from '../../types'
|
|
5
|
+
import type { SendProgress } from '../../types'
|
|
6
|
+
|
|
7
|
+
async function compilerPlugin(
|
|
8
|
+
instance: FastifyInstance,
|
|
9
|
+
{ delegate }: { delegate: Server.Delegate }
|
|
10
|
+
) {
|
|
11
|
+
instance.route({
|
|
12
|
+
method: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'HEAD'],
|
|
13
|
+
url: '/*',
|
|
14
|
+
schema: {
|
|
15
|
+
querystring: {
|
|
16
|
+
type: 'object',
|
|
17
|
+
properties: {
|
|
18
|
+
platform: {
|
|
19
|
+
type: 'string',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
handler: async (request, reply) => {
|
|
26
|
+
let file = (request.params as { '*'?: string })['*']
|
|
27
|
+
let { platform } = request.query as { platform?: string }
|
|
28
|
+
|
|
29
|
+
if (!file) {
|
|
30
|
+
// This technically should never happen - this route should not be called if file is missing.
|
|
31
|
+
request.log.error(`File was not provided`)
|
|
32
|
+
return reply.notFound()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Let consumer infer the platform. If function is not provided fallback
|
|
36
|
+
// to platform query param.
|
|
37
|
+
platform = delegate.compiler.inferPlatform?.(request.url) ?? platform
|
|
38
|
+
|
|
39
|
+
if (!platform) {
|
|
40
|
+
request.log.error('Cannot detect platform')
|
|
41
|
+
return reply.badRequest('Cannot detect platform')
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// If platform happens to be in front of an asset remove it.
|
|
45
|
+
if (file.startsWith(`${platform}/`)) {
|
|
46
|
+
file = file.replace(`${platform}/`, '')
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const multipart = reply.asMultipart()
|
|
50
|
+
|
|
51
|
+
const sendProgress: SendProgress = ({ completed, total }) => {
|
|
52
|
+
multipart?.writeChunk(
|
|
53
|
+
{ 'Content-Type': 'application/json' },
|
|
54
|
+
JSON.stringify({
|
|
55
|
+
done: completed,
|
|
56
|
+
total,
|
|
57
|
+
})
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
try {
|
|
62
|
+
const asset = await delegate.compiler.getAsset(file, platform, sendProgress)
|
|
63
|
+
const mimeType = delegate.compiler.getMimeType(file, platform, asset)
|
|
64
|
+
|
|
65
|
+
if (multipart) {
|
|
66
|
+
const buffer = Buffer.isBuffer(asset) ? asset : Buffer.from(asset)
|
|
67
|
+
multipart.setHeader('Content-Type', `${mimeType}; charset=UTF-8`)
|
|
68
|
+
multipart.setHeader('Content-Length', String(Buffer.byteLength(buffer)))
|
|
69
|
+
multipart.end(buffer)
|
|
70
|
+
} else {
|
|
71
|
+
return reply.code(200).type(mimeType).send(asset)
|
|
72
|
+
}
|
|
73
|
+
} catch (error) {
|
|
74
|
+
request.log.error(error)
|
|
75
|
+
return reply.notFound((error as Error).message)
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
})
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export default fastifyPlugin(compilerPlugin, {
|
|
82
|
+
name: 'compiler-plugin',
|
|
83
|
+
dependencies: ['fastify-sensible', 'multipart-plugin'],
|
|
84
|
+
})
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { SendProgress } from '../../types'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Delegate with implementation for compiler-specific functions.
|
|
5
|
+
*/
|
|
6
|
+
export interface CompilerDelegate {
|
|
7
|
+
/**
|
|
8
|
+
* Get compiled asset content.
|
|
9
|
+
*
|
|
10
|
+
* If the compilation is in progress, it should wait until compilation finishes and then return the asset.
|
|
11
|
+
*
|
|
12
|
+
* @param filename Filename of the asset to get.
|
|
13
|
+
* @param platform Platform of the asset to get.
|
|
14
|
+
* @param sendProgress Function to notify the client who requested the asset about compilation progress.
|
|
15
|
+
*/
|
|
16
|
+
getAsset: (
|
|
17
|
+
filename: string,
|
|
18
|
+
platform: string,
|
|
19
|
+
sendProgress?: SendProgress
|
|
20
|
+
) => Promise<string | Buffer>
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Detect MIME type of the asset from `filename`, `platform` or `data` (or from combination of either).
|
|
24
|
+
*
|
|
25
|
+
* @param filename Filename of the asset.
|
|
26
|
+
* @param platform Platform of the asset.
|
|
27
|
+
* @param data Asset's content.
|
|
28
|
+
*/
|
|
29
|
+
getMimeType: (filename: string, platform: string, data: string | Buffer) => string
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Detect the platform from the URI - either from filename, query params or both.
|
|
33
|
+
*
|
|
34
|
+
* @param uri URI string.
|
|
35
|
+
*/
|
|
36
|
+
inferPlatform?: (uri: string) => string | undefined
|
|
37
|
+
}
|