diff --git a/.changeset/two-ghosts-refuse.md b/.changeset/two-ghosts-refuse.md
new file mode 100644
index 000000000..3e5c1c395
--- /dev/null
+++ b/.changeset/two-ghosts-refuse.md
@@ -0,0 +1,5 @@
+---
+"@callstack/repack": major
+---
+
+Enable new debugger (React Native DevTools) by default, remove support for legacy remote debugging
diff --git a/apps/tester-app/src/App.tsx b/apps/tester-app/src/App.tsx
index fd2c7e091..d273f56a4 100644
--- a/apps/tester-app/src/App.tsx
+++ b/apps/tester-app/src/App.tsx
@@ -6,7 +6,6 @@ import { SectionContainer } from './ui/SectionContainer';
import { AssetsTestContainer } from './assetsTest/AssetsTestContainer';
import { AsyncContainer } from './asyncChunks/AsyncContainer';
-import DeprecatedRemoteDebuggerContainer from './deprecatedRemoteDebugger/DeprecatedRemoteDebuggerContainer';
import { MiniAppsContainer } from './miniapp/MiniAppsContainer';
import { RemoteContainer } from './remoteChunks/RemoteContainer';
@@ -28,9 +27,6 @@ const App = () => {
-
);
diff --git a/apps/tester-app/src/deprecatedRemoteDebugger/DeprecatedRemoteDebuggerContainer.tsx b/apps/tester-app/src/deprecatedRemoteDebugger/DeprecatedRemoteDebuggerContainer.tsx
deleted file mode 100644
index 77ac47d0d..000000000
--- a/apps/tester-app/src/deprecatedRemoteDebugger/DeprecatedRemoteDebuggerContainer.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { Button } from '../ui/Button';
-
-let enableDebugger: () => void;
-let disableDebugger: () => void;
-
-if (__DEV__) {
- const {
- default: NativeDevSettings,
- } = require('react-native/Libraries/NativeModules/specs/NativeDevSettings');
- enableDebugger = () => {
- NativeDevSettings.setIsDebuggingRemotely(true);
- };
- disableDebugger = () => {
- NativeDevSettings.setIsDebuggingRemotely(false);
- };
-}
-
-export default function DeprecatedRemoteDebuggerContainer() {
- return (
- <>
-
-
- >
- );
-}
diff --git a/apps/tester-app/src/deprecatedRemoteDebugger/NativeDevSettings.d.ts b/apps/tester-app/src/deprecatedRemoteDebugger/NativeDevSettings.d.ts
deleted file mode 100644
index cc888f479..000000000
--- a/apps/tester-app/src/deprecatedRemoteDebugger/NativeDevSettings.d.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-declare module 'react-native/Libraries/NativeModules/specs/NativeDevSettings' {
- declare const NativeDevSettings: {
- setIsDebuggingRemotely(isDebuggingRemotely: boolean): void;
- };
- export default NativeDevSettings;
-}
diff --git a/packages/dev-server/package.json b/packages/dev-server/package.json
index 8011bbc19..3b2b9bb1a 100644
--- a/packages/dev-server/package.json
+++ b/packages/dev-server/package.json
@@ -33,11 +33,10 @@
"@babel/code-frame": "^7.16.7",
"@fastify/middie": "^8.3.0",
"@fastify/sensible": "^5.5.0",
- "@react-native/dev-middleware": "^0.73.8",
+ "@react-native/dev-middleware": "^0.76.1",
"fastify": "^4.24.3",
"fastify-favicon": "^4.3.0",
"fastify-plugin": "^4.5.1",
- "open": "^8.4.0",
"pretty-format": "^28.1.0",
"source-map": "^0.7.4",
"ws": "^8.7.0"
@@ -45,8 +44,7 @@
"devDependencies": {
"@babel/cli": "^7.23.9",
"@babel/core": "^7.23.9",
- "@react-native-community/cli-debugger-ui": ">=11.3.1",
- "@react-native-community/cli-server-api": ">=11.3.1",
+ "@react-native-community/cli-server-api": "15.0.1",
"@types/babel__code-frame": "^7.0.3",
"@types/node": "18",
"@types/ws": "^8.5.3",
@@ -54,13 +52,9 @@
"typescript": "^5.5.3"
},
"peerDependencies": {
- "@react-native-community/cli-debugger-ui": ">=11.3.1",
- "@react-native-community/cli-server-api": ">=11.3.1"
+ "@react-native-community/cli-server-api": ">=13.6.4"
},
"peerDependenciesMeta": {
- "@react-native-community/cli-debugger-ui": {
- "optional": true
- },
"@react-native-community/cli-server-api": {
"optional": true
}
diff --git a/packages/dev-server/src/createServer.ts b/packages/dev-server/src/createServer.ts
index d8a7da8df..b85ed480d 100644
--- a/packages/dev-server/src/createServer.ts
+++ b/packages/dev-server/src/createServer.ts
@@ -1,11 +1,6 @@
import { Writable } from 'node:stream';
import middie from '@fastify/middie';
import fastifySensible from '@fastify/sensible';
-import { debuggerUIMiddleware } from '@react-native-community/cli-debugger-ui';
-import {
- openStackFrameInEditorMiddleware,
- openURLMiddleware,
-} from '@react-native-community/cli-server-api';
import { createDevMiddleware } from '@react-native/dev-middleware';
import Fastify from 'fastify';
import apiPlugin from './plugins/api';
@@ -71,7 +66,8 @@ export async function createServer(config: Server.Config) {
serverBaseUrl: `http://${config.options.host}:${config.options.port}`,
logger: instance.log,
unstable_experiments: {
- enableNewDebugger: config.experiments?.experimentalDebugger,
+ // @ts-expect-error removed in 0.76, keep this for backkwards compatibility
+ enableNewDebugger: true,
},
});
@@ -93,23 +89,9 @@ export async function createServer(config: Server.Config) {
await instance.register(compilerPlugin, {
delegate,
});
-
- // TODO: devtoolsPlugin and the following deprecated remote debugger middlewares should be removed after
- // the new (experimental) debugger is stable AND the remote debugger is finally removed from the React Native core.
- // When that happens remember to remove @react-native-community/cli-server-api & @react-native-community/cli-debugger-ui
- // from the dependencies.
await instance.register(devtoolsPlugin, {
options: config.options,
});
- instance.use('/debugger-ui', debuggerUIMiddleware());
- instance.use('/open-url', openURLMiddleware);
- instance.use(
- '/open-stack-frame',
- openStackFrameInEditorMiddleware({
- watchFolders: [config.options.rootDir],
- })
- );
-
await instance.register(symbolicatePlugin, {
delegate,
});
diff --git a/packages/dev-server/src/plugins/devtools/devtoolsPlugin.ts b/packages/dev-server/src/plugins/devtools/devtoolsPlugin.ts
index 61ea9e193..2d0c2bfea 100644
--- a/packages/dev-server/src/plugins/devtools/devtoolsPlugin.ts
+++ b/packages/dev-server/src/plugins/devtools/devtoolsPlugin.ts
@@ -1,12 +1,24 @@
+import {
+ openStackFrameInEditorMiddleware,
+ openURLMiddleware,
+} from '@react-native-community/cli-server-api';
import type { FastifyInstance } from 'fastify';
import fastifyPlugin from 'fastify-plugin';
-import open from 'open';
import type { Server } from '../../types';
async function devtoolsPlugin(
instance: FastifyInstance,
{ options }: { options: Server.Options }
) {
+ instance.use('/open-url', openURLMiddleware);
+
+ instance.use(
+ '/open-stack-frame',
+ openStackFrameInEditorMiddleware({
+ watchFolders: [options.rootDir],
+ })
+ );
+
instance.route({
method: ['GET', 'POST', 'PUT'],
url: '/reload',
@@ -15,34 +27,6 @@ async function devtoolsPlugin(
reply.send('OK');
},
});
-
- instance.route({
- method: ['GET', 'POST', 'PUT'],
- url: '/launch-js-devtools',
- handler: async (request, reply) => {
- const customDebugger = process.env.REACT_DEBUGGER;
- if (customDebugger) {
- // NOOP for now
- } else if (!instance.wss.debuggerServer.isDebuggerConnected()) {
- const url = `${options.https ? 'https' : 'http'}://${
- options.host || 'localhost'
- }:${options.port}/debugger-ui`;
- try {
- request.log.info({ msg: 'Opening debugger UI', url });
- await open(url);
- } catch (error) {
- if (error) {
- request.log.error({
- msg: 'Cannot open debugger UI',
- url,
- error,
- });
- }
- }
- }
- reply.send('OK');
- },
- });
}
export default fastifyPlugin(devtoolsPlugin, {
diff --git a/packages/dev-server/src/plugins/symbolicate/Symbolicator.ts b/packages/dev-server/src/plugins/symbolicate/Symbolicator.ts
index f78118a14..8f5504770 100644
--- a/packages/dev-server/src/plugins/symbolicate/Symbolicator.ts
+++ b/packages/dev-server/src/plugins/symbolicate/Symbolicator.ts
@@ -78,7 +78,7 @@ export class Symbolicator {
const frames: InputStackFrame[] = [];
for (const frame of stack) {
const { file } = frame;
- if (file?.startsWith('http') && !file.includes('debuggerWorker')) {
+ if (file?.startsWith('http')) {
frames.push(frame as InputStackFrame);
}
}
diff --git a/packages/dev-server/src/plugins/wss/servers/WebSocketDebuggerServer.ts b/packages/dev-server/src/plugins/wss/servers/WebSocketDebuggerServer.ts
deleted file mode 100644
index a3073df56..000000000
--- a/packages/dev-server/src/plugins/wss/servers/WebSocketDebuggerServer.ts
+++ /dev/null
@@ -1,135 +0,0 @@
-import type { IncomingMessage } from 'node:http';
-import type { FastifyInstance } from 'fastify';
-import type WebSocket from 'ws';
-import { WebSocketServer } from '../WebSocketServer';
-
-/**
- * Class for creating a WebSocket server and providing a bridge between
- * debugger UI (Remote JS debugger) and the running React Native application.
- *
- * React Native application (aka client) will send and receive messages from the debugger UI
- * which runs inside a browser.
- *
- * @category Development server
- */
-export class WebSocketDebuggerServer extends WebSocketServer {
- /**
- * A WebSocket connection with the debugger UI.
- */
- private debuggerSocket: WebSocket | undefined;
-
- /**
- * A WebSocket connection with the client (React Native app).
- */
- private clientSocket: WebSocket | undefined;
-
- /**
- * Create new instance of WebSocketDebuggerServer and attach it to the given Fastify instance.
- * Any logging information, will be passed through standard `fastify.log` API.
- *
- * @param fastify Fastify instance to attach the WebSocket server to.
- */
- constructor(fastify: FastifyInstance) {
- super(fastify, '/debugger-proxy');
- }
-
- /**
- * Check if debugger UI is connected to the WebSocketDebuggerServer.
- */
- isDebuggerConnected() {
- return Boolean(this.debuggerSocket);
- }
-
- /**
- * Send a message to a given WebSocket connection.
- *
- * @param socket WebSocket connection to send the message to.
- * @param message Message to send.
- */
- send(socket: WebSocket | undefined, message: string) {
- try {
- socket?.send(message);
- } catch (error) {
- this.fastify.log.warn({ msg: 'Failed to send data to socket', error });
- }
- }
-
- /**
- * Process new WebSocket connection. The upgrade request should contain `role` query param
- * for determining the type of the connection.
- *
- * @param socket Incoming WebSocket connection.
- * @param request Upgrade request for the connection.
- */
- onConnection(socket: WebSocket, request: IncomingMessage) {
- const { url = '' } = request;
- if (url.indexOf('role=debugger') >= 0) {
- this.fastify.log.info({ msg: 'Chrome Remote JS debugger connected' });
- this.onDebuggerConnection(socket);
- } else if (url.indexOf('role=client') >= 0) {
- this.fastify.log.info({ msg: 'React Native app connected to debugger' });
- this.onClientConnection(socket);
- } else {
- socket.close(1011, 'Missing role param');
- }
- }
-
- /**
- * Process new WebSocket connection from Debugger UI (Remote JS Debugger).
- * If there's already open connection, the new one gets closed automatically.
- *
- * @param socket Incoming debugger WebSocket connection.
- */
- onDebuggerConnection(socket: WebSocket) {
- if (this.debuggerSocket) {
- socket.close(1011, 'Another debugger is already connected');
- return;
- }
- this.debuggerSocket = socket;
- const onClose = () => {
- this.fastify.log.info({ msg: 'Chrome Remote JS debugger disconnected' });
- this.debuggerSocket = undefined;
- if (this.clientSocket) {
- this.clientSocket.removeAllListeners();
- this.clientSocket.close(1011, 'Debugger was disconnected');
- }
- };
- this.debuggerSocket.addEventListener('error', onClose);
- this.debuggerSocket.addEventListener('close', onClose);
- this.debuggerSocket.addEventListener('message', ({ data }) => {
- this.send(this.clientSocket, data.toString());
- });
- }
-
- /**
- * Process new WebSocket connection from React Native app (client)
- * and close any previous connection.
- *
- * @param socket Incoming client WebSocket connection.
- */
- onClientConnection(socket: WebSocket) {
- if (this.clientSocket) {
- this.clientSocket.removeAllListeners();
- this.clientSocket.close(1011, 'Another client is connected');
- this.clientSocket = undefined;
- }
-
- const onClose = () => {
- this.fastify.log.info({
- msg: 'React Native app disconnected from debugger',
- });
- this.clientSocket = undefined;
- this.send(
- this.debuggerSocket,
- JSON.stringify({ method: '$disconnected' })
- );
- };
-
- this.clientSocket = socket;
- this.clientSocket.addEventListener('error', onClose);
- this.clientSocket.addEventListener('close', onClose);
- this.clientSocket.addEventListener('message', ({ data }) => {
- this.send(this.debuggerSocket, data.toString());
- });
- }
-}
diff --git a/packages/dev-server/src/plugins/wss/wssPlugin.ts b/packages/dev-server/src/plugins/wss/wssPlugin.ts
index 36ddb7747..6383c0b14 100644
--- a/packages/dev-server/src/plugins/wss/wssPlugin.ts
+++ b/packages/dev-server/src/plugins/wss/wssPlugin.ts
@@ -4,7 +4,6 @@ import type { Server } from '../../types';
import { WebSocketRouter } from './WebSocketRouter';
import { WebSocketServerAdapter } from './WebSocketServerAdapter';
import { WebSocketApiServer } from './servers/WebSocketApiServer';
-import { WebSocketDebuggerServer } from './servers/WebSocketDebuggerServer';
import { WebSocketDevClientServer } from './servers/WebSocketDevClientServer';
import { WebSocketEventsServer } from './servers/WebSocketEventsServer';
import { WebSocketHMRServer } from './servers/WebSocketHMRServer';
@@ -13,7 +12,6 @@ import { WebSocketMessageServer } from './servers/WebSocketMessageServer';
declare module 'fastify' {
interface FastifyInstance {
wss: {
- debuggerServer: WebSocketDebuggerServer;
devClientServer: WebSocketDevClientServer;
messageServer: WebSocketMessageServer;
eventsServer: WebSocketEventsServer;
@@ -45,7 +43,6 @@ async function wssPlugin(
) {
const router = new WebSocketRouter(instance);
- const debuggerServer = new WebSocketDebuggerServer(instance);
const devClientServer = new WebSocketDevClientServer(instance);
const messageServer = new WebSocketMessageServer(instance);
const eventsServer = new WebSocketEventsServer(instance, {
@@ -67,7 +64,6 @@ async function wssPlugin(
options.endpoints?.[WS_DEBUGGER_URL]
);
- router.registerServer(debuggerServer);
router.registerServer(devClientServer);
router.registerServer(messageServer);
router.registerServer(eventsServer);
@@ -77,7 +73,6 @@ async function wssPlugin(
router.registerServer(debuggerConnectionServer);
instance.decorate('wss', {
- debuggerServer,
devClientServer,
messageServer,
eventsServer,
diff --git a/packages/dev-server/src/types.ts b/packages/dev-server/src/types.ts
index feb7b7b0e..23bba6906 100644
--- a/packages/dev-server/src/types.ts
+++ b/packages/dev-server/src/types.ts
@@ -21,16 +21,10 @@ export namespace Server {
/** Development server options to configure e.g: `port`, `host` etc. */
options: Options;
- experiments?: Experiments;
-
/** Function to create a delegate, which implements crucial functionalities. */
delegate: (context: DelegateContext) => Delegate;
}
- export interface Experiments {
- experimentalDebugger?: boolean;
- }
-
/** Development server options. */
export interface Options {
/** Root directory of the project. */
diff --git a/packages/repack/src/commands/options.ts b/packages/repack/src/commands/options.ts
index 7fb2c5d26..a0219d96b 100644
--- a/packages/repack/src/commands/options.ts
+++ b/packages/repack/src/commands/options.ts
@@ -27,11 +27,6 @@ export const startCommandOptions = [
name: '--no-interactive',
description: 'Disables interactive mode',
},
- {
- name: '--experimental-debugger',
- description:
- '[Experimental] Enable the new debugger experience. Connection reliability and some basic features are unstable in this release.',
- },
// noop, but kept for compatibility
{
name: '--reset-cache, --resetCache',
diff --git a/packages/repack/src/commands/rspack/start.ts b/packages/repack/src/commands/rspack/start.ts
index 7f1cda3c6..22bd99f39 100644
--- a/packages/repack/src/commands/rspack/start.ts
+++ b/packages/repack/src/commands/rspack/start.ts
@@ -95,9 +95,6 @@ export async function start(
: undefined,
logRequests: showHttpRequests,
},
- experiments: {
- experimentalDebugger: args.experimentalDebugger,
- },
delegate: (ctx) => {
if (args.interactive) {
setupInteractions(
diff --git a/packages/repack/src/commands/types.ts b/packages/repack/src/commands/types.ts
index 5cae84e1b..7b800dd04 100644
--- a/packages/repack/src/commands/types.ts
+++ b/packages/repack/src/commands/types.ts
@@ -21,7 +21,6 @@ export interface StartArguments {
key?: string;
cert?: string;
interactive?: boolean;
- experimentalDebugger?: boolean;
json?: boolean;
logFile?: string;
logRequests?: boolean;
diff --git a/packages/repack/src/commands/webpack/start.ts b/packages/repack/src/commands/webpack/start.ts
index 6612f46d1..2b5a6ef6f 100644
--- a/packages/repack/src/commands/webpack/start.ts
+++ b/packages/repack/src/commands/webpack/start.ts
@@ -93,9 +93,6 @@ export async function start(_: string[], config: Config, args: StartArguments) {
: undefined,
logRequests: showHttpRequests,
},
- experiments: {
- experimentalDebugger: args.experimentalDebugger,
- },
delegate: (ctx): Server.Delegate => {
if (args.interactive) {
setupInteractions(
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8a1146e92..ae5fb5020 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -327,8 +327,8 @@ importers:
specifier: ^5.5.0
version: 5.6.0
'@react-native/dev-middleware':
- specifier: ^0.73.8
- version: 0.73.8
+ specifier: ^0.76.1
+ version: 0.76.1
fastify:
specifier: ^4.24.3
version: 4.28.1
@@ -338,9 +338,6 @@ importers:
fastify-plugin:
specifier: ^4.5.1
version: 4.5.1
- open:
- specifier: ^8.4.0
- version: 8.4.2
pretty-format:
specifier: ^28.1.0
version: 28.1.3
@@ -357,11 +354,8 @@ importers:
'@babel/core':
specifier: ^7.23.9
version: 7.25.2
- '@react-native-community/cli-debugger-ui':
- specifier: '>=11.3.1'
- version: 15.0.1
'@react-native-community/cli-server-api':
- specifier: '>=11.3.1'
+ specifier: 15.0.1
version: 15.0.1
'@types/babel__code-frame':
specifier: ^7.0.3
@@ -2097,18 +2091,10 @@ packages:
'@react-native-community/cli-server-api':
optional: true
- '@react-native/debugger-frontend@0.73.3':
- resolution: {integrity: sha512-RgEKnWuoo54dh7gQhV7kvzKhXZEhpF9LlMdZolyhGxHsBqZ2gXdibfDlfcARFFifPIiaZ3lXuOVVa4ei+uPgTw==}
- engines: {node: '>=18'}
-
'@react-native/debugger-frontend@0.76.1':
resolution: {integrity: sha512-0gExx7GR8o2ctGfjIZ9+x54iFbg0eP6+kMYzRA6AcgmFAmMGLADMmjtObCN0CqGeZyWtdVVqcv5mAwRwmMlNWA==}
engines: {node: '>=18'}
- '@react-native/dev-middleware@0.73.8':
- resolution: {integrity: sha512-oph4NamCIxkMfUL/fYtSsE+JbGOnrlawfQ0kKtDQ5xbOjPKotKoXqrs1eGwozNKv7FfQ393stk1by9a6DyASSg==}
- engines: {node: '>=18'}
-
'@react-native/dev-middleware@0.76.1':
resolution: {integrity: sha512-htaFSN2dwI0CinsMxjRuvIVdSDN6d6TDPeOJczM1bdAYalZX1M58knTKs5LJDComW5tleOCAg5lS5tIeFlM9+Q==}
engines: {node: '>=18'}
@@ -3338,9 +3324,6 @@ packages:
chromium-edge-launcher@0.2.0:
resolution: {integrity: sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==}
- chromium-edge-launcher@1.0.0:
- resolution: {integrity: sha512-pgtgjNKZ7i5U++1g1PWv75umkHvhVTDOQIZ+sjeUX9483S7Y6MUvO0lrd7ShGlQlFHMN4SwKTCq/X8hWrbv2KA==}
-
ci-info@2.0.0:
resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
@@ -6855,10 +6838,6 @@ packages:
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
engines: {node: '>=6'}
- temp-dir@2.0.0:
- resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==}
- engines: {node: '>=8'}
-
temp@0.8.4:
resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==}
engines: {node: '>=6.0.0'}
@@ -9576,29 +9555,8 @@ snapshots:
- supports-color
- utf-8-validate
- '@react-native/debugger-frontend@0.73.3': {}
-
'@react-native/debugger-frontend@0.76.1': {}
- '@react-native/dev-middleware@0.73.8':
- dependencies:
- '@isaacs/ttlcache': 1.4.1
- '@react-native/debugger-frontend': 0.73.3
- chrome-launcher: 0.15.2
- chromium-edge-launcher: 1.0.0
- connect: 3.7.0
- debug: 2.6.9
- node-fetch: 2.7.0
- open: 7.4.2
- serve-static: 1.16.2
- temp-dir: 2.0.0
- ws: 6.2.3
- transitivePeerDependencies:
- - bufferutil
- - encoding
- - supports-color
- - utf-8-validate
-
'@react-native/dev-middleware@0.76.1':
dependencies:
'@isaacs/ttlcache': 1.4.1
@@ -11066,17 +11024,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- chromium-edge-launcher@1.0.0:
- dependencies:
- '@types/node': 18.19.41
- escape-string-regexp: 4.0.0
- is-wsl: 2.2.0
- lighthouse-logger: 1.4.2
- mkdirp: 1.0.4
- rimraf: 3.0.2
- transitivePeerDependencies:
- - supports-color
-
ci-info@2.0.0: {}
ci-info@3.9.0: {}
@@ -15535,8 +15482,6 @@ snapshots:
inherits: 2.0.4
readable-stream: 3.6.2
- temp-dir@2.0.0: {}
-
temp@0.8.4:
dependencies:
rimraf: 2.6.3