1- const fs = require ( "fs " ) ;
1+ const { join } = require ( "path " ) ;
22const esbuild = require ( "esbuild" ) ;
3- const { nodeExternals , define } = require ( "./build/utils.cjs" ) ;
3+ const { externalModules , define } = require ( "./build/utils.cjs" ) ;
44const {
55 moduleReplacementPlugin,
66 forbidImportsPlugin,
@@ -13,6 +13,17 @@ const preventPitcherClientImportsPlugin = forbidImportsPlugin([
1313 "@codesandbox/pitcher-common" ,
1414] ) ;
1515
16+ const devtoolsStubPlugin = {
17+ name : "stub-react-devtools" ,
18+ setup ( build ) {
19+ // whenever someone does `import 'react-devtools-core'`, redirect to our empty.js
20+ build . onResolve ( { filter : / ^ r e a c t - d e v t o o l s - c o r e $ / } , ( ) => ( {
21+ path : join ( __dirname , "build/fakeReactDevtoolsCore.js" ) ,
22+ namespace : "file" ,
23+ } ) ) ;
24+ } ,
25+ } ;
26+
1627/**
1728 * BROWSER CLIENT BUILD
1829 */
@@ -74,7 +85,7 @@ const nodeClientCjsBuild = esbuild.build({
7485 // .cjs extension is required because "type": "module" is set in package.json
7586 outfile : "dist/cjs/node.cjs" ,
7687 platform : "node" ,
77- external : nodeExternals ,
88+ external : externalModules ,
7889 plugins : [ preventPitcherClientImportsPlugin ] ,
7990} ) ;
8091
@@ -84,7 +95,7 @@ const nodeClientEsmBuild = esbuild.build({
8495 format : "esm" ,
8596 outfile : "dist/esm/node.js" ,
8697 platform : "node" ,
87- external : nodeExternals ,
98+ external : externalModules ,
8899 plugins : [ preventPitcherClientImportsPlugin ] ,
89100} ) ;
90101
@@ -99,7 +110,7 @@ const sdkCjsBuild = esbuild.build({
99110 platform : "node" ,
100111 // .cjs extension is required because "type": "module" is set in package.json
101112 outfile : "dist/cjs/index.cjs" ,
102- external : nodeExternals ,
113+ external : externalModules ,
103114} ) ;
104115
105116const sdkEsmBuild = esbuild . build ( {
@@ -109,7 +120,7 @@ const sdkEsmBuild = esbuild.build({
109120 define,
110121 platform : "node" ,
111122 outfile : "dist/esm/index.js" ,
112- external : nodeExternals ,
123+ external : externalModules ,
113124 plugins : [ preventPitcherClientImportsPlugin ] ,
114125} ) ;
115126
@@ -124,10 +135,19 @@ const cliBuild = esbuild.build({
124135 format : "esm" ,
125136 platform : "node" ,
126137 banner : {
127- js : `#!/usr/bin/env node\n\n` ,
138+ js : `#!/usr/bin/env node\n\nimport { createRequire } from "module";\nconst require = createRequire(import.meta.url);\ n` ,
128139 } ,
129- external : [ ...nodeExternals , "@codesandbox/sdk" ] ,
130- plugins : [ preventPitcherClientImportsPlugin ] ,
140+ external : [
141+ // We have to bundle React and Ink into the bundle because Ink supports React 18 in v5 and React 19 in v6,
142+ // but this breaks when running the CLI in the project folder as it might have either React version and we do not
143+ // want users to manually install React and correct Ink version as peer dependencies
144+ ...externalModules . filter (
145+ ( mod ) =>
146+ mod !== "react" && mod !== "ink" && mod !== "@tanstack/react-query"
147+ ) ,
148+ "@codesandbox/sdk" ,
149+ ] ,
150+ plugins : [ preventPitcherClientImportsPlugin , devtoolsStubPlugin ] ,
131151} ) ;
132152
133153Promise . all ( [
0 commit comments