@expo/cli 55.0.0-canary-20251206-615dec1 → 55.0.0-canary-20251211-7da85ea
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/build/bin/cli +1 -1
- package/build/src/start/interface/interactiveActions.js +1 -1
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/platforms/ios/getBestSimulator.js +11 -3
- package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +10 -7
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/createServerRouteMiddleware.js +1 -1
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +4 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/middleware/CorsMiddleware.js +43 -12
- package/build/src/start/server/middleware/CorsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/CreateFileMiddleware.js +63 -24
- package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
- package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
- package/build/src/utils/telemetry/utils/context.js +1 -1
- package/package.json +19 -19
|
@@ -34,18 +34,50 @@ function _interop_require_default(obj) {
|
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
36
|
const debug = require('debug')('expo:start:server:middleware:createFile');
|
|
37
|
+
const ROUTER_INDEX_CONTENTS = `import { StyleSheet, Text, View } from "react-native";
|
|
38
|
+
|
|
39
|
+
export default function Page() {
|
|
40
|
+
return (
|
|
41
|
+
<View style={styles.container}>
|
|
42
|
+
<View style={styles.main}>
|
|
43
|
+
<Text style={styles.title}>Hello World</Text>
|
|
44
|
+
<Text style={styles.subtitle}>This is the first page of your app.</Text>
|
|
45
|
+
</View>
|
|
46
|
+
</View>
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const styles = StyleSheet.create({
|
|
51
|
+
container: {
|
|
52
|
+
flex: 1,
|
|
53
|
+
alignItems: "center",
|
|
54
|
+
padding: 24,
|
|
55
|
+
},
|
|
56
|
+
main: {
|
|
57
|
+
flex: 1,
|
|
58
|
+
justifyContent: "center",
|
|
59
|
+
maxWidth: 960,
|
|
60
|
+
marginHorizontal: "auto",
|
|
61
|
+
},
|
|
62
|
+
title: {
|
|
63
|
+
fontSize: 64,
|
|
64
|
+
fontWeight: "bold",
|
|
65
|
+
},
|
|
66
|
+
subtitle: {
|
|
67
|
+
fontSize: 36,
|
|
68
|
+
color: "#38434D",
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
`;
|
|
37
72
|
class CreateFileMiddleware extends _ExpoMiddleware.ExpoMiddleware {
|
|
38
|
-
constructor(
|
|
39
|
-
super(projectRoot, [
|
|
73
|
+
constructor(options){
|
|
74
|
+
super(options.projectRoot, [
|
|
40
75
|
'/_expo/touch'
|
|
41
|
-
]), this.
|
|
76
|
+
]), this.options = options;
|
|
42
77
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
resolveExtension(inputPath) {
|
|
47
|
-
let resolvedPath = inputPath;
|
|
48
|
-
const extension = _path().default.extname(inputPath);
|
|
78
|
+
resolveExtension(basePath, relativePath) {
|
|
79
|
+
let resolvedPath = relativePath;
|
|
80
|
+
const extension = _path().default.extname(relativePath);
|
|
49
81
|
if (extension === '.js') {
|
|
50
82
|
// Automatically convert JS files to TS files when added to a project
|
|
51
83
|
// with TypeScript.
|
|
@@ -54,7 +86,7 @@ class CreateFileMiddleware extends _ExpoMiddleware.ExpoMiddleware {
|
|
|
54
86
|
resolvedPath = resolvedPath.replace(/\.js$/, '.tsx');
|
|
55
87
|
}
|
|
56
88
|
}
|
|
57
|
-
return resolvedPath;
|
|
89
|
+
return _path().default.join(basePath, resolvedPath);
|
|
58
90
|
}
|
|
59
91
|
async parseRawBody(req) {
|
|
60
92
|
const rawBody = await new Promise((resolve, reject)=>{
|
|
@@ -69,19 +101,26 @@ class CreateFileMiddleware extends _ExpoMiddleware.ExpoMiddleware {
|
|
|
69
101
|
reject(err);
|
|
70
102
|
});
|
|
71
103
|
});
|
|
72
|
-
const
|
|
73
|
-
this.assertTouchFileBody(properties);
|
|
74
|
-
return properties;
|
|
75
|
-
}
|
|
76
|
-
assertTouchFileBody(body) {
|
|
104
|
+
const body = JSON.parse(rawBody);
|
|
77
105
|
if (typeof body !== 'object' || body == null) {
|
|
78
106
|
throw new Error('Expected object');
|
|
107
|
+
} else if (typeof body.type !== 'string') {
|
|
108
|
+
throw new Error('Expected "type" in body to be string');
|
|
79
109
|
}
|
|
80
|
-
|
|
81
|
-
|
|
110
|
+
switch(body.type){
|
|
111
|
+
case 'router_index':
|
|
112
|
+
return body;
|
|
113
|
+
default:
|
|
114
|
+
throw new Error('Unknown "type" passed in body');
|
|
82
115
|
}
|
|
83
|
-
|
|
84
|
-
|
|
116
|
+
}
|
|
117
|
+
makeOutputForInput(input) {
|
|
118
|
+
switch(input.type){
|
|
119
|
+
case 'router_index':
|
|
120
|
+
return {
|
|
121
|
+
absolutePath: this.resolveExtension(this.options.appDir, 'index.js'),
|
|
122
|
+
contents: ROUTER_INDEX_CONTENTS
|
|
123
|
+
};
|
|
85
124
|
}
|
|
86
125
|
}
|
|
87
126
|
async handleRequestAsync(req, res) {
|
|
@@ -100,18 +139,18 @@ class CreateFileMiddleware extends _ExpoMiddleware.ExpoMiddleware {
|
|
|
100
139
|
return;
|
|
101
140
|
}
|
|
102
141
|
debug(`Requested: %O`, properties);
|
|
103
|
-
const
|
|
104
|
-
if (_fs().default.existsSync(
|
|
142
|
+
const file = this.makeOutputForInput(properties);
|
|
143
|
+
if (_fs().default.existsSync(file.absolutePath)) {
|
|
105
144
|
res.statusCode = 409;
|
|
106
145
|
res.end('File already exists.');
|
|
107
146
|
return;
|
|
108
147
|
}
|
|
109
|
-
debug(`Resolved path:`,
|
|
148
|
+
debug(`Resolved path:`, file.absolutePath);
|
|
110
149
|
try {
|
|
111
|
-
await _fs().default.promises.mkdir(_path().default.dirname(
|
|
150
|
+
await _fs().default.promises.mkdir(_path().default.dirname(file.absolutePath), {
|
|
112
151
|
recursive: true
|
|
113
152
|
});
|
|
114
|
-
await _fs().default.promises.writeFile(
|
|
153
|
+
await _fs().default.promises.writeFile(file.absolutePath, file.contents, 'utf8');
|
|
115
154
|
} catch (e) {
|
|
116
155
|
debug('Error writing file', e);
|
|
117
156
|
res.statusCode = 500;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/middleware/CreateFileMiddleware.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport fs from 'fs';\nimport path from 'path';\n\nimport { ExpoMiddleware } from './ExpoMiddleware';\nimport { ServerRequest, ServerResponse } from './server.types';\n\nconst debug = require('debug')('expo:start:server:middleware:createFile') as typeof console.log;\n\
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/server/middleware/CreateFileMiddleware.ts"],"sourcesContent":["/**\n * Copyright © 2022 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport fs from 'fs';\nimport path from 'path';\n\nimport { ExpoMiddleware } from './ExpoMiddleware';\nimport { ServerRequest, ServerResponse } from './server.types';\n\nconst debug = require('debug')('expo:start:server:middleware:createFile') as typeof console.log;\n\ninterface TouchFileInput {\n type: 'router_index';\n}\n\ninterface TouchFileOutput {\n absolutePath: string;\n contents: string;\n}\n\nconst ROUTER_INDEX_CONTENTS = `import { StyleSheet, Text, View } from \"react-native\";\n\nexport default function Page() {\n return (\n <View style={styles.container}>\n <View style={styles.main}>\n <Text style={styles.title}>Hello World</Text>\n <Text style={styles.subtitle}>This is the first page of your app.</Text>\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n alignItems: \"center\",\n padding: 24,\n },\n main: {\n flex: 1,\n justifyContent: \"center\",\n maxWidth: 960,\n marginHorizontal: \"auto\",\n },\n title: {\n fontSize: 64,\n fontWeight: \"bold\",\n },\n subtitle: {\n fontSize: 36,\n color: \"#38434D\",\n },\n});\n`;\n\ninterface CreateFileMiddlewareOptions {\n /** The absolute metro or server root, used to calculate the relative dom entry path */\n metroRoot: string;\n /** The absolute project root, used to resolve the `expo/dom/entry.js` path */\n projectRoot: string;\n /** The expo-router root */\n appDir: string;\n}\n\n/**\n * Middleware for creating a file given a `POST` request with\n * `{ contents: string, path: string }` in the body.\n */\nexport class CreateFileMiddleware extends ExpoMiddleware {\n constructor(protected options: CreateFileMiddlewareOptions) {\n super(options.projectRoot, ['/_expo/touch']);\n }\n\n protected resolveExtension(basePath: string, relativePath: string): string {\n let resolvedPath = relativePath;\n const extension = path.extname(relativePath);\n if (extension === '.js') {\n // Automatically convert JS files to TS files when added to a project\n // with TypeScript.\n const tsconfigPath = path.join(this.projectRoot, 'tsconfig.json');\n if (fs.existsSync(tsconfigPath)) {\n resolvedPath = resolvedPath.replace(/\\.js$/, '.tsx');\n }\n }\n return path.join(basePath, resolvedPath);\n }\n\n protected async parseRawBody(req: ServerRequest): Promise<TouchFileInput> {\n const rawBody = await new Promise<string>((resolve, reject) => {\n let body = '';\n req.on('data', (chunk) => {\n body += chunk.toString();\n });\n req.on('end', () => {\n resolve(body);\n });\n req.on('error', (err) => {\n reject(err);\n });\n });\n\n const body = JSON.parse(rawBody);\n if (typeof body !== 'object' || body == null) {\n throw new Error('Expected object');\n } else if (typeof body.type !== 'string') {\n throw new Error('Expected \"type\" in body to be string');\n }\n\n switch (body.type) {\n case 'router_index':\n return body;\n default:\n throw new Error('Unknown \"type\" passed in body');\n }\n }\n\n private makeOutputForInput(input: TouchFileInput): TouchFileOutput {\n switch (input.type) {\n case 'router_index':\n return {\n absolutePath: this.resolveExtension(this.options.appDir, 'index.js'),\n contents: ROUTER_INDEX_CONTENTS,\n };\n }\n }\n\n async handleRequestAsync(req: ServerRequest, res: ServerResponse): Promise<void> {\n if (req.method !== 'POST') {\n res.statusCode = 405;\n res.end('Method Not Allowed');\n return;\n }\n\n let properties: TouchFileInput;\n try {\n properties = await this.parseRawBody(req);\n } catch (e) {\n debug('Error parsing request body', e);\n res.statusCode = 400;\n res.end('Bad Request');\n return;\n }\n\n debug(`Requested: %O`, properties);\n\n const file = this.makeOutputForInput(properties);\n if (fs.existsSync(file.absolutePath)) {\n res.statusCode = 409;\n res.end('File already exists.');\n return;\n }\n\n debug(`Resolved path:`, file.absolutePath);\n\n try {\n await fs.promises.mkdir(path.dirname(file.absolutePath), { recursive: true });\n await fs.promises.writeFile(file.absolutePath, file.contents, 'utf8');\n } catch (e) {\n debug('Error writing file', e);\n res.statusCode = 500;\n res.end('Error writing file.');\n return;\n }\n\n debug(`File created`);\n res.statusCode = 200;\n res.end('OK');\n }\n}\n"],"names":["CreateFileMiddleware","debug","require","ROUTER_INDEX_CONTENTS","ExpoMiddleware","constructor","options","projectRoot","resolveExtension","basePath","relativePath","resolvedPath","extension","path","extname","tsconfigPath","join","fs","existsSync","replace","parseRawBody","req","rawBody","Promise","resolve","reject","body","on","chunk","toString","err","JSON","parse","Error","type","makeOutputForInput","input","absolutePath","appDir","contents","handleRequestAsync","res","method","statusCode","end","properties","e","file","promises","mkdir","dirname","recursive","writeFile"],"mappings":"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"}
|
|
@@ -33,7 +33,7 @@ class FetchClient {
|
|
|
33
33
|
this.headers = {
|
|
34
34
|
accept: 'application/json',
|
|
35
35
|
'content-type': 'application/json',
|
|
36
|
-
'user-agent': `expo-cli/${"55.0.0-canary-
|
|
36
|
+
'user-agent': `expo-cli/${"55.0.0-canary-20251211-7da85ea"}`,
|
|
37
37
|
authorization: 'Basic ' + _nodebuffer().Buffer.from(`${target}:`).toString('base64')
|
|
38
38
|
};
|
|
39
39
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/cli",
|
|
3
|
-
"version": "55.0.0-canary-
|
|
3
|
+
"version": "55.0.0-canary-20251211-7da85ea",
|
|
4
4
|
"description": "The Expo CLI",
|
|
5
5
|
"main": "build/bin/cli",
|
|
6
6
|
"bin": {
|
|
@@ -43,25 +43,25 @@
|
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@0no-co/graphql.web": "^1.0.8",
|
|
45
45
|
"@expo/code-signing-certificates": "^0.0.5",
|
|
46
|
-
"@expo/config": "12.0.
|
|
47
|
-
"@expo/config-plugins": "54.0.4-canary-
|
|
46
|
+
"@expo/config": "12.0.13-canary-20251211-7da85ea",
|
|
47
|
+
"@expo/config-plugins": "54.0.4-canary-20251211-7da85ea",
|
|
48
48
|
"@expo/devcert": "^1.2.1",
|
|
49
|
-
"@expo/env": "2.0.9-canary-
|
|
50
|
-
"@expo/image-utils": "0.8.9-canary-
|
|
51
|
-
"@expo/json-file": "10.0.9-canary-
|
|
49
|
+
"@expo/env": "2.0.9-canary-20251211-7da85ea",
|
|
50
|
+
"@expo/image-utils": "0.8.9-canary-20251211-7da85ea",
|
|
51
|
+
"@expo/json-file": "10.0.9-canary-20251211-7da85ea",
|
|
52
52
|
"@expo/metro": "~54.1.0",
|
|
53
|
-
"@expo/metro-config": "54.1.0-canary-
|
|
54
|
-
"@expo/osascript": "2.3.9-canary-
|
|
55
|
-
"@expo/package-manager": "1.9.10-canary-
|
|
56
|
-
"@expo/plist": "0.4.9-canary-
|
|
57
|
-
"@expo/prebuild-config": "54.0.8-canary-
|
|
58
|
-
"@expo/router-server": "0.2.0-canary-
|
|
59
|
-
"@expo/log-box": "0.0.13-canary-
|
|
60
|
-
"@expo/schema-utils": "0.1.9-canary-
|
|
53
|
+
"@expo/metro-config": "54.1.0-canary-20251211-7da85ea",
|
|
54
|
+
"@expo/osascript": "2.3.9-canary-20251211-7da85ea",
|
|
55
|
+
"@expo/package-manager": "1.9.10-canary-20251211-7da85ea",
|
|
56
|
+
"@expo/plist": "0.4.9-canary-20251211-7da85ea",
|
|
57
|
+
"@expo/prebuild-config": "54.0.8-canary-20251211-7da85ea",
|
|
58
|
+
"@expo/router-server": "0.2.0-canary-20251211-7da85ea",
|
|
59
|
+
"@expo/log-box": "0.0.13-canary-20251211-7da85ea",
|
|
60
|
+
"@expo/schema-utils": "0.1.9-canary-20251211-7da85ea",
|
|
61
61
|
"@expo/spawn-async": "^1.7.2",
|
|
62
62
|
"@expo/ws-tunnel": "^1.0.1",
|
|
63
63
|
"@expo/xcpretty": "^4.3.0",
|
|
64
|
-
"@react-native/dev-middleware": "0.83.0-rc.
|
|
64
|
+
"@react-native/dev-middleware": "0.83.0-rc.5",
|
|
65
65
|
"@urql/core": "^5.0.6",
|
|
66
66
|
"@urql/exchange-retry": "^1.3.0",
|
|
67
67
|
"accepts": "^1.3.8",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"connect": "^3.7.0",
|
|
76
76
|
"debug": "^4.3.4",
|
|
77
77
|
"env-editor": "^0.4.1",
|
|
78
|
-
"expo-server": "1.0.6-canary-
|
|
78
|
+
"expo-server": "1.0.6-canary-20251211-7da85ea",
|
|
79
79
|
"freeport-async": "^2.0.0",
|
|
80
80
|
"getenv": "^2.0.0",
|
|
81
81
|
"glob": "^13.0.0",
|
|
@@ -112,8 +112,8 @@
|
|
|
112
112
|
]
|
|
113
113
|
},
|
|
114
114
|
"peerDependencies": {
|
|
115
|
-
"expo": "55.0.0-canary-
|
|
116
|
-
"expo-router": "7.0.0-canary-
|
|
115
|
+
"expo": "55.0.0-canary-20251211-7da85ea",
|
|
116
|
+
"expo-router": "7.0.0-canary-20251211-7da85ea",
|
|
117
117
|
"react-native": "*"
|
|
118
118
|
},
|
|
119
119
|
"peerDependenciesMeta": {
|
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
"@types/ws": "^8.5.4",
|
|
159
159
|
"devtools-protocol": "^0.0.1113120",
|
|
160
160
|
"expo-atlas": "^0.4.1",
|
|
161
|
-
"expo-module-scripts": "5.1.0-canary-
|
|
161
|
+
"expo-module-scripts": "5.1.0-canary-20251211-7da85ea",
|
|
162
162
|
"find-process": "^1.4.7",
|
|
163
163
|
"jest-runner-tsd": "^6.0.0",
|
|
164
164
|
"klaw-sync": "^6.0.0",
|