@expo/cli 54.1.0-canary-20251023-4c86f95 → 54.1.0-canary-20260119-17896bf
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/add-module.js +4 -1
- package/build/bin/cli +3 -1
- package/build/bin/cli.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +1 -2
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/install/applyPlugins.js +2 -1
- package/build/src/install/applyPlugins.js.map +1 -1
- package/build/src/install/fixPackages.js +1 -1
- package/build/src/install/fixPackages.js.map +1 -1
- package/build/src/install/installAsync.js +1 -1
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/install/utils/parsePackageSpecifier.js +24 -0
- package/build/src/install/utils/parsePackageSpecifier.js.map +1 -0
- package/build/src/run/ios/runIosAsync.js +8 -0
- package/build/src/run/ios/runIosAsync.js.map +1 -1
- package/build/src/start/interface/commandsTable.js.map +1 -1
- package/build/src/start/interface/interactiveActions.js +14 -9
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/interface/startInterface.js +3 -0
- package/build/src/start/interface/startInterface.js.map +1 -1
- package/build/src/start/platforms/android/adb.js +1 -1
- package/build/src/start/platforms/android/adb.js.map +1 -1
- package/build/src/start/server/DevToolsPluginManager.js +8 -4
- package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
- package/build/src/start/server/MCP.js +28 -5
- package/build/src/start/server/MCP.js.map +1 -1
- package/build/src/start/server/UrlCreator.js +1 -1
- package/build/src/start/server/UrlCreator.js.map +1 -1
- package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js +10 -2
- package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +29 -155
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js +151 -33
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/createExpoAutolinkingResolver.js +1 -3
- package/build/src/start/server/metro/createExpoAutolinkingResolver.js.map +1 -1
- package/build/src/start/server/metro/createExpoFallbackResolver.js +1 -3
- package/build/src/start/server/metro/createExpoFallbackResolver.js.map +1 -1
- package/build/src/start/server/metro/createServerComponentsMiddleware.js +1 -2
- package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
- package/build/src/start/server/metro/createServerRouteMiddleware.js +2 -2
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js +23 -9
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
- package/build/src/start/server/metro/dev-server/compression.js +45 -0
- package/build/src/start/server/metro/dev-server/compression.js.map +1 -0
- package/build/src/start/server/metro/dev-server/createMetroMiddleware.js +2 -2
- package/build/src/start/server/metro/dev-server/createMetroMiddleware.js.map +1 -1
- package/build/src/start/server/metro/externals.js +11 -0
- package/build/src/start/server/metro/externals.js.map +1 -1
- package/build/src/start/server/metro/fetchRouterManifest.js +1 -1
- package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +98 -27
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/log-box/LogBoxLog.js +7 -11
- package/build/src/start/server/metro/log-box/LogBoxLog.js.map +1 -1
- package/build/src/start/server/metro/log-box/LogBoxSymbolication.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +43 -14
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +74 -57
- 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/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +3 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +14 -9
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/startAsync.js +12 -9
- package/build/src/start/startAsync.js.map +1 -1
- package/build/src/utils/env.js +36 -2
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/interactive.js +1 -1
- package/build/src/utils/interactive.js.map +1 -1
- package/build/src/utils/jsonl.js +243 -0
- package/build/src/utils/jsonl.js.map +1 -0
- package/build/src/utils/net.js +43 -0
- package/build/src/utils/net.js.map +1 -0
- package/build/src/utils/progress.js +5 -0
- package/build/src/utils/progress.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/build/src/utils/url.js +4 -8
- package/build/src/utils/url.js.map +1 -1
- package/package.json +25 -28
- package/static/canary/react-is/cjs/react-is.development.js +133 -0
- package/static/canary/react-is/cjs/react-is.production.js +130 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-dev.js +16820 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-prod.js +10552 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-profiling.js +11255 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +17064 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +10742 -0
- package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +11450 -0
- package/static/canary/scheduler/cjs/scheduler-unstable_mock.development.js +414 -0
- package/static/canary/scheduler/cjs/scheduler-unstable_mock.production.js +406 -0
- package/static/canary/scheduler/cjs/scheduler-unstable_post_task.development.js +150 -0
- package/static/canary/scheduler/cjs/scheduler-unstable_post_task.production.js +140 -0
- package/static/canary/scheduler/cjs/scheduler.development.js +364 -0
- package/static/canary/scheduler/cjs/scheduler.native.development.js +350 -0
- package/static/canary/scheduler/cjs/scheduler.native.production.js +330 -0
- package/static/canary/scheduler/cjs/scheduler.production.js +340 -0
- package/static/canary-full/node_modules/react/LICENSE +21 -0
- package/static/canary-full/node_modules/react/README.md +37 -0
- package/static/canary-full/node_modules/react/cjs/react-compiler-runtime.development.js +24 -0
- package/static/canary-full/node_modules/react/cjs/react-compiler-runtime.production.js +16 -0
- package/static/canary-full/node_modules/react/cjs/react-compiler-runtime.profiling.js +16 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-dev-runtime.development.js +349 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-dev-runtime.production.js +14 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-dev-runtime.profiling.js +14 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js +385 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js +40 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-runtime.development.js +358 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-runtime.production.js +34 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-runtime.profiling.js +34 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-runtime.react-server.development.js +385 -0
- package/static/canary-full/node_modules/react/cjs/react-jsx-runtime.react-server.production.js +40 -0
- package/static/canary-full/node_modules/react/cjs/react.development.js +1250 -0
- package/static/canary-full/node_modules/react/cjs/react.production.js +544 -0
- package/static/canary-full/node_modules/react/cjs/react.react-server.development.js +815 -0
- package/static/canary-full/node_modules/react/cjs/react.react-server.production.js +429 -0
- package/static/canary-full/node_modules/react/compiler-runtime.js +14 -0
- package/static/canary-full/node_modules/react/index.js +7 -0
- package/static/canary-full/node_modules/react/jsx-dev-runtime.js +7 -0
- package/static/canary-full/node_modules/react/jsx-dev-runtime.react-server.js +7 -0
- package/static/canary-full/node_modules/react/jsx-runtime.js +7 -0
- package/static/canary-full/node_modules/react/jsx-runtime.react-server.js +7 -0
- package/static/canary-full/node_modules/react/package.json +51 -0
- package/static/canary-full/node_modules/react/react.react-server.js +7 -0
- package/static/canary-full/node_modules/react-dom/LICENSE +21 -0
- package/static/canary-full/node_modules/react-dom/README.md +60 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-client.development.js +25089 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-client.production.js +15426 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-profiling.development.js +25476 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-profiling.profiling.js +16296 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js +9035 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +5892 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js +9035 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +5972 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.browser.development.js +9424 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.browser.production.js +6384 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.bun.development.js +8739 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.bun.production.js +5967 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.edge.development.js +9443 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.edge.production.js +6477 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.node.development.js +9317 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.node.production.js +6372 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-test-utils.development.js +24 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom-test-utils.production.js +21 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom.development.js +424 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom.production.js +210 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom.react-server.development.js +340 -0
- package/static/canary-full/node_modules/react-dom/cjs/react-dom.react-server.production.js +152 -0
- package/static/canary-full/node_modules/react-dom/client.js +38 -0
- package/static/canary-full/node_modules/react-dom/client.react-server.js +5 -0
- package/static/canary-full/node_modules/react-dom/index.js +38 -0
- package/static/canary-full/node_modules/react-dom/package.json +117 -0
- package/static/canary-full/node_modules/react-dom/profiling.js +38 -0
- package/static/canary-full/node_modules/react-dom/profiling.react-server.js +5 -0
- package/static/canary-full/node_modules/react-dom/react-dom.react-server.js +7 -0
- package/static/canary-full/node_modules/react-dom/server.browser.js +18 -0
- package/static/canary-full/node_modules/react-dom/server.bun.js +19 -0
- package/static/canary-full/node_modules/react-dom/server.edge.js +19 -0
- package/static/canary-full/node_modules/react-dom/server.js +3 -0
- package/static/canary-full/node_modules/react-dom/server.node.js +18 -0
- package/static/canary-full/node_modules/react-dom/server.react-server.js +5 -0
- package/static/canary-full/node_modules/react-dom/static.browser.js +12 -0
- package/static/canary-full/node_modules/react-dom/static.edge.js +12 -0
- package/static/canary-full/node_modules/react-dom/static.js +3 -0
- package/static/canary-full/node_modules/react-dom/static.node.js +12 -0
- package/static/canary-full/node_modules/react-dom/static.react-server.js +5 -0
- package/static/canary-full/node_modules/react-dom/test-utils.js +7 -0
- package/build/src/start/interface/cliExtensionMenuItemHandler.js +0 -173
- package/build/src/start/interface/cliExtensionMenuItemHandler.js.map +0 -1
- package/build/src/start/interface/createDevToolsMenuItems.js +0 -159
- package/build/src/start/interface/createDevToolsMenuItems.js.map +0 -1
- package/build/src/start/server/DevToolsPlugin.js +0 -60
- package/build/src/start/server/DevToolsPlugin.js.map +0 -1
- package/build/src/start/server/DevToolsPlugin.schema.js +0 -79
- package/build/src/start/server/DevToolsPlugin.schema.js.map +0 -1
- package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js +0 -119
- package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js.map +0 -1
- package/build/src/start/server/DevToolsPluginCliExtensionResults.js +0 -61
- package/build/src/start/server/DevToolsPluginCliExtensionResults.js.map +0 -1
- package/build/src/start/server/middleware/DataLoaderModuleMiddleware.js +0 -75
- package/build/src/start/server/middleware/DataLoaderModuleMiddleware.js.map +0 -1
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "createDevToolsMenuItems", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return createDevToolsMenuItems;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
function _chalk() {
|
|
12
|
-
const data = /*#__PURE__*/ _interop_require_default(require("chalk"));
|
|
13
|
-
_chalk = function() {
|
|
14
|
-
return data;
|
|
15
|
-
};
|
|
16
|
-
return data;
|
|
17
|
-
}
|
|
18
|
-
const _cliExtensionMenuItemHandler = require("./cliExtensionMenuItemHandler");
|
|
19
|
-
const _log = /*#__PURE__*/ _interop_require_wildcard(require("../../log"));
|
|
20
|
-
const _open = require("../../utils/open");
|
|
21
|
-
const _prompts = require("../../utils/prompts");
|
|
22
|
-
function _interop_require_default(obj) {
|
|
23
|
-
return obj && obj.__esModule ? obj : {
|
|
24
|
-
default: obj
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
function _getRequireWildcardCache(nodeInterop) {
|
|
28
|
-
if (typeof WeakMap !== "function") return null;
|
|
29
|
-
var cacheBabelInterop = new WeakMap();
|
|
30
|
-
var cacheNodeInterop = new WeakMap();
|
|
31
|
-
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
32
|
-
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
33
|
-
})(nodeInterop);
|
|
34
|
-
}
|
|
35
|
-
function _interop_require_wildcard(obj, nodeInterop) {
|
|
36
|
-
if (!nodeInterop && obj && obj.__esModule) {
|
|
37
|
-
return obj;
|
|
38
|
-
}
|
|
39
|
-
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
40
|
-
return {
|
|
41
|
-
default: obj
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
var cache = _getRequireWildcardCache(nodeInterop);
|
|
45
|
-
if (cache && cache.has(obj)) {
|
|
46
|
-
return cache.get(obj);
|
|
47
|
-
}
|
|
48
|
-
var newObj = {
|
|
49
|
-
__proto__: null
|
|
50
|
-
};
|
|
51
|
-
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
52
|
-
for(var key in obj){
|
|
53
|
-
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
54
|
-
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
55
|
-
if (desc && (desc.get || desc.set)) {
|
|
56
|
-
Object.defineProperty(newObj, key, desc);
|
|
57
|
-
} else {
|
|
58
|
-
newObj[key] = obj[key];
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
newObj.default = obj;
|
|
63
|
-
if (cache) {
|
|
64
|
-
cache.set(obj, newObj);
|
|
65
|
-
}
|
|
66
|
-
return newObj;
|
|
67
|
-
}
|
|
68
|
-
const debug = require('debug')('expo:start:devtools');
|
|
69
|
-
const createDevToolsMenuItems = (plugins, defaultServerUrl, metroServerOrigin, cliExtensionMenuItemHandlerFunc = _cliExtensionMenuItemHandler.cliExtensionMenuItemHandler, openBrowserAsyncFunc = _open // Used for injection when testing
|
|
70
|
-
.openBrowserAsync)=>{
|
|
71
|
-
return plugins.map((plugin)=>{
|
|
72
|
-
const commands = getCliExtensionCommands(plugin);
|
|
73
|
-
if (commands.length > 0 && plugin.webpageEndpoint) {
|
|
74
|
-
// Custom display/handling for plugins that support both web and CLI commands
|
|
75
|
-
const children = [
|
|
76
|
-
devtoolFactory(plugin, defaultServerUrl, openBrowserAsyncFunc),
|
|
77
|
-
...commands.map((descriptor)=>({
|
|
78
|
-
title: descriptor.title,
|
|
79
|
-
value: descriptor.name,
|
|
80
|
-
action: async ()=>await cliExtensionMenuItemHandlerFunc(plugin, descriptor, metroServerOrigin)
|
|
81
|
-
}))
|
|
82
|
-
].filter((item)=>item != null);
|
|
83
|
-
return {
|
|
84
|
-
title: (0, _chalk().default)`{bold ${plugin.packageName}}`,
|
|
85
|
-
value: '',
|
|
86
|
-
children,
|
|
87
|
-
action: async ()=>{
|
|
88
|
-
try {
|
|
89
|
-
var _children_find_action, _children_find;
|
|
90
|
-
const value = await (0, _prompts.selectAsync)((0, _chalk().default)`{dim Select command}`, children);
|
|
91
|
-
await ((_children_find = children.find((item)=>item.value === value)) == null ? void 0 : (_children_find_action = _children_find.action) == null ? void 0 : _children_find_action.call(_children_find));
|
|
92
|
-
} catch (error) {
|
|
93
|
-
// Handle aborting prompt
|
|
94
|
-
debug(`Aborted selection prompt by user: ${error.toString()}`);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
} else if (plugin.webpageEndpoint) {
|
|
99
|
-
return devtoolFactory(plugin, defaultServerUrl);
|
|
100
|
-
} else if (plugin.cliExtensions && commands.length > 0) {
|
|
101
|
-
return cliExtensionFactory(plugin, metroServerOrigin);
|
|
102
|
-
}
|
|
103
|
-
return null;
|
|
104
|
-
}).filter((menuItem)=>menuItem != null);
|
|
105
|
-
};
|
|
106
|
-
const devtoolFactory = (plugin, defaultServerUrl, openBrowserAsyncFunc = _open // Used for injection when testing
|
|
107
|
-
.openBrowserAsync)=>{
|
|
108
|
-
if (plugin.webpageEndpoint == null) {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
return {
|
|
112
|
-
title: (0, _chalk().default)`Open {bold ${plugin.packageName}}`,
|
|
113
|
-
value: `devtoolsPlugin:${plugin.packageName}`,
|
|
114
|
-
action: async ()=>{
|
|
115
|
-
const url = new URL(plugin.webpageEndpoint, defaultServerUrl);
|
|
116
|
-
await openBrowserAsyncFunc(url.toString());
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
};
|
|
120
|
-
const getCliExtensionCommands = (plugin)=>{
|
|
121
|
-
const cliExtensionsConfig = plugin.cliExtensions;
|
|
122
|
-
const commands = ((cliExtensionsConfig == null ? void 0 : cliExtensionsConfig.commands) ?? []).filter((p)=>{
|
|
123
|
-
var _p_environments;
|
|
124
|
-
return (_p_environments = p.environments) == null ? void 0 : _p_environments.includes('cli');
|
|
125
|
-
});
|
|
126
|
-
if (cliExtensionsConfig == null || commands.length === 0) {
|
|
127
|
-
return [];
|
|
128
|
-
}
|
|
129
|
-
return commands;
|
|
130
|
-
};
|
|
131
|
-
const cliExtensionFactory = (plugin, metroServerOrigin, cliExtensionMenuItemHandlerFunc = _cliExtensionMenuItemHandler // Used for injection when testing
|
|
132
|
-
.cliExtensionMenuItemHandler)=>{
|
|
133
|
-
const commands = getCliExtensionCommands(plugin);
|
|
134
|
-
const children = commands.map((cmd)=>({
|
|
135
|
-
title: cmd.title,
|
|
136
|
-
value: cmd.name
|
|
137
|
-
}));
|
|
138
|
-
return {
|
|
139
|
-
title: (0, _chalk().default)`{bold ${plugin.packageName}}`,
|
|
140
|
-
value: `cliExtension:${plugin.packageName}`,
|
|
141
|
-
children,
|
|
142
|
-
action: async ()=>{
|
|
143
|
-
try {
|
|
144
|
-
const value = await (0, _prompts.selectAsync)((0, _chalk().default)`{dim Select command}`, children);
|
|
145
|
-
const cmd = commands.find((c)=>c.name === value);
|
|
146
|
-
if (cmd == null) {
|
|
147
|
-
_log.warn(`No command found for ${plugin.packageName}`);
|
|
148
|
-
} else {
|
|
149
|
-
await cliExtensionMenuItemHandlerFunc(plugin, cmd, metroServerOrigin);
|
|
150
|
-
}
|
|
151
|
-
} catch (error) {
|
|
152
|
-
// Handle aborting prompt
|
|
153
|
-
debug(`Failed to execute command: ${error.toString()}`);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
//# sourceMappingURL=createDevToolsMenuItems.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/start/interface/createDevToolsMenuItems.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { cliExtensionMenuItemHandler } from './cliExtensionMenuItemHandler';\nimport * as Log from '../../log';\nimport { openBrowserAsync } from '../../utils/open';\nimport { ExpoChoice, selectAsync } from '../../utils/prompts';\nimport { DevToolsPlugin } from '../server/DevToolsPlugin';\nimport { DevToolsPluginCommand } from '../server/DevToolsPlugin.schema';\n\nconst debug = require('debug')('expo:start:devtools') as typeof console.log;\n\nexport interface MoreToolMenuItem extends ExpoChoice<string> {\n action?: () => unknown;\n}\n\ntype MenuItemWithSubmenu = MoreToolMenuItem & {\n children?: MenuItemWithSubmenu[];\n};\n\ntype CliExtensionMenuItemHandler = (\n plugin: DevToolsPlugin,\n cmd: DevToolsPluginCommand,\n metroServerOrigin: string\n) => Promise<void>;\n\n/**\n * Creates the menu items for the DevTools interface.\n * @param plugins The list of DevTools plugins.\n * @param defaultServerUrl The default server URL.\n * @param metroServerOrigin The Metro server origin.\n * @param cliExtensionMenuItemHandlerFunc The function to handle CLI extension menu items.\n * @param openBrowserAsyncFunc The function to open the browser.\n * @returns The menu items for the DevTools interface.\n */\nexport const createDevToolsMenuItems = (\n plugins: DevToolsPlugin[],\n defaultServerUrl: string,\n metroServerOrigin: string,\n cliExtensionMenuItemHandlerFunc: CliExtensionMenuItemHandler = cliExtensionMenuItemHandler, // Used for injection when testing\n openBrowserAsyncFunc: typeof openBrowserAsync = openBrowserAsync // Used for injection when testing\n): MenuItemWithSubmenu[] => {\n return plugins\n .map((plugin) => {\n const commands = getCliExtensionCommands(plugin);\n if (commands.length > 0 && plugin.webpageEndpoint) {\n // Custom display/handling for plugins that support both web and CLI commands\n const children = [\n devtoolFactory(plugin, defaultServerUrl, openBrowserAsyncFunc),\n ...commands.map((descriptor) => ({\n title: descriptor.title,\n value: descriptor.name,\n action: async () =>\n await cliExtensionMenuItemHandlerFunc(plugin, descriptor, metroServerOrigin),\n })),\n ].filter((item) => item != null);\n return {\n title: chalk`{bold ${plugin.packageName}}`,\n value: '',\n children,\n action: async () => {\n try {\n const value = await selectAsync(chalk`{dim Select command}`, children);\n await children.find((item) => item.value === value)?.action?.();\n } catch (error: any) {\n // Handle aborting prompt\n debug(`Aborted selection prompt by user: ${error.toString()}`);\n }\n },\n };\n } else if (plugin.webpageEndpoint) {\n return devtoolFactory(plugin, defaultServerUrl);\n } else if (plugin.cliExtensions && commands.length > 0) {\n return cliExtensionFactory(plugin, metroServerOrigin);\n }\n return null;\n })\n .filter((menuItem) => menuItem != null);\n};\n\nconst devtoolFactory = (\n plugin: DevToolsPlugin,\n defaultServerUrl: string,\n openBrowserAsyncFunc: typeof openBrowserAsync = openBrowserAsync // Used for injection when testing\n): MoreToolMenuItem | null => {\n if (plugin.webpageEndpoint == null) {\n return null;\n }\n\n return {\n title: chalk`Open {bold ${plugin.packageName}}`,\n value: `devtoolsPlugin:${plugin.packageName}`,\n action: async () => {\n const url = new URL(plugin.webpageEndpoint!, defaultServerUrl);\n await openBrowserAsyncFunc(url.toString());\n },\n };\n};\n\nconst getCliExtensionCommands = (plugin: DevToolsPlugin): DevToolsPluginCommand[] => {\n const cliExtensionsConfig = plugin.cliExtensions;\n const commands = (cliExtensionsConfig?.commands ?? []).filter((p) =>\n p.environments?.includes('cli')\n );\n\n if (cliExtensionsConfig == null || commands.length === 0) {\n return [];\n }\n return commands;\n};\n\nconst cliExtensionFactory = (\n plugin: DevToolsPlugin,\n metroServerOrigin: string,\n cliExtensionMenuItemHandlerFunc: CliExtensionMenuItemHandler = cliExtensionMenuItemHandler // Used for injection when testing\n): MenuItemWithSubmenu | null => {\n const commands = getCliExtensionCommands(plugin);\n const children = commands.map((cmd) => ({\n title: cmd.title,\n value: cmd.name,\n }));\n\n return {\n title: chalk`{bold ${plugin.packageName}}`,\n value: `cliExtension:${plugin.packageName}`,\n children,\n action: async () => {\n try {\n const value = await selectAsync(chalk`{dim Select command}`, children);\n const cmd = commands.find((c) => c.name === value);\n if (cmd == null) {\n Log.warn(`No command found for ${plugin.packageName}`);\n } else {\n await cliExtensionMenuItemHandlerFunc(plugin, cmd, metroServerOrigin);\n }\n } catch (error: any) {\n // Handle aborting prompt\n debug(`Failed to execute command: ${error.toString()}`);\n }\n },\n };\n};\n"],"names":["createDevToolsMenuItems","debug","require","plugins","defaultServerUrl","metroServerOrigin","cliExtensionMenuItemHandlerFunc","cliExtensionMenuItemHandler","openBrowserAsyncFunc","openBrowserAsync","map","plugin","commands","getCliExtensionCommands","length","webpageEndpoint","children","devtoolFactory","descriptor","title","value","name","action","filter","item","chalk","packageName","selectAsync","find","error","toString","cliExtensions","cliExtensionFactory","menuItem","url","URL","cliExtensionsConfig","p","environments","includes","cmd","c","Log","warn"],"mappings":"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"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "DevToolsPlugin", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return DevToolsPlugin;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _DevToolsPluginschema = require("./DevToolsPlugin.schema");
|
|
12
|
-
const _DevToolsPluginCliExtensionExecutor = require("./DevToolsPluginCliExtensionExecutor");
|
|
13
|
-
const _DevToolsPluginManager = require("./DevToolsPluginManager");
|
|
14
|
-
class DevToolsPlugin {
|
|
15
|
-
constructor(plugin, projectRoot){
|
|
16
|
-
this.plugin = plugin;
|
|
17
|
-
this.projectRoot = projectRoot;
|
|
18
|
-
this._executor = undefined;
|
|
19
|
-
// Validate configuration schema
|
|
20
|
-
const result = _DevToolsPluginschema.PluginSchema.safeParse(plugin);
|
|
21
|
-
if (!result.success) {
|
|
22
|
-
throw new Error(`Invalid plugin configuration: ${result.error.message}`, {
|
|
23
|
-
cause: result.error
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
get packageName() {
|
|
28
|
-
return this.plugin.packageName;
|
|
29
|
-
}
|
|
30
|
-
get packageRoot() {
|
|
31
|
-
return this.plugin.packageRoot;
|
|
32
|
-
}
|
|
33
|
-
get webpageEndpoint() {
|
|
34
|
-
var _this_plugin, _this_plugin1;
|
|
35
|
-
return ((_this_plugin = this.plugin) == null ? void 0 : _this_plugin.webpageRoot) ? `${_DevToolsPluginManager.DevToolsPluginEndpoint}/${(_this_plugin1 = this.plugin) == null ? void 0 : _this_plugin1.packageName}` : undefined;
|
|
36
|
-
}
|
|
37
|
-
get webpageRoot() {
|
|
38
|
-
var _this_plugin;
|
|
39
|
-
return (_this_plugin = this.plugin) == null ? void 0 : _this_plugin.webpageRoot;
|
|
40
|
-
}
|
|
41
|
-
get description() {
|
|
42
|
-
var _this_plugin_cliExtensions;
|
|
43
|
-
return ((_this_plugin_cliExtensions = this.plugin.cliExtensions) == null ? void 0 : _this_plugin_cliExtensions.description) ?? '';
|
|
44
|
-
}
|
|
45
|
-
get cliExtensions() {
|
|
46
|
-
return this.plugin.cliExtensions;
|
|
47
|
-
}
|
|
48
|
-
get executor() {
|
|
49
|
-
var _this_plugin_cliExtensions;
|
|
50
|
-
if (!((_this_plugin_cliExtensions = this.plugin.cliExtensions) == null ? void 0 : _this_plugin_cliExtensions.entryPoint)) {
|
|
51
|
-
return undefined;
|
|
52
|
-
}
|
|
53
|
-
if (!this._executor) {
|
|
54
|
-
this._executor = new _DevToolsPluginCliExtensionExecutor.DevToolsPluginCliExtensionExecutor(this.plugin, this.projectRoot);
|
|
55
|
-
}
|
|
56
|
-
return this._executor;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
//# sourceMappingURL=DevToolsPlugin.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/start/server/DevToolsPlugin.ts"],"sourcesContent":["import { DevToolsPluginInfo, PluginSchema } from './DevToolsPlugin.schema';\nimport { DevToolsPluginCliExtensionExecutor } from './DevToolsPluginCliExtensionExecutor';\nimport { DevToolsPluginEndpoint } from './DevToolsPluginManager';\nimport { Log } from '../../log';\n\n/**\n * Class that represents a DevTools plugin with CLI and/or web extensions\n *\n * Responsibilities:\n * - Validates plugin configuration against schema\n * - Provides access to plugin metadata (name, description\n * , endpoints)\n * - Manages CLI command execution via DevToolsPluginExecutor\n * - Lazily initializes executor when needed\n * - Constructs web endpoint URLs based on server configuration\n */\nexport class DevToolsPlugin {\n constructor(\n private plugin: DevToolsPluginInfo,\n public readonly projectRoot: string\n ) {\n // Validate configuration schema\n const result = PluginSchema.safeParse(plugin);\n if (!result.success) {\n throw new Error(`Invalid plugin configuration: ${result.error.message}`, {\n cause: result.error,\n });\n }\n }\n\n private _executor: DevToolsPluginCliExtensionExecutor | undefined = undefined;\n\n get packageName(): string {\n return this.plugin.packageName;\n }\n\n get packageRoot(): string {\n return this.plugin.packageRoot;\n }\n\n get webpageEndpoint(): string | undefined {\n return this.plugin?.webpageRoot\n ? `${DevToolsPluginEndpoint}/${this.plugin?.packageName}`\n : undefined;\n }\n\n get webpageRoot(): string | undefined {\n return this.plugin?.webpageRoot;\n }\n\n get description(): string {\n return this.plugin.cliExtensions?.description ?? '';\n }\n\n get cliExtensions(): DevToolsPluginInfo['cliExtensions'] {\n return this.plugin.cliExtensions;\n }\n\n get executor(): DevToolsPluginCliExtensionExecutor | undefined {\n if (!this.plugin.cliExtensions?.entryPoint) {\n return undefined;\n }\n\n if (!this._executor) {\n this._executor = new DevToolsPluginCliExtensionExecutor(this.plugin, this.projectRoot);\n }\n\n return this._executor;\n }\n}\n"],"names":["DevToolsPlugin","constructor","plugin","projectRoot","_executor","undefined","result","PluginSchema","safeParse","success","Error","error","message","cause","packageName","packageRoot","webpageEndpoint","webpageRoot","DevToolsPluginEndpoint","description","cliExtensions","executor","entryPoint","DevToolsPluginCliExtensionExecutor"],"mappings":";;;;+BAgBaA;;;eAAAA;;;sCAhBoC;oDACE;uCACZ;AAchC,MAAMA;IACXC,YACE,AAAQC,MAA0B,EAClC,AAAgBC,WAAmB,CACnC;aAFQD,SAAAA;aACQC,cAAAA;aAWVC,YAA4DC;QATlE,gCAAgC;QAChC,MAAMC,SAASC,kCAAY,CAACC,SAAS,CAACN;QACtC,IAAI,CAACI,OAAOG,OAAO,EAAE;YACnB,MAAM,IAAIC,MAAM,CAAC,8BAA8B,EAAEJ,OAAOK,KAAK,CAACC,OAAO,EAAE,EAAE;gBACvEC,OAAOP,OAAOK,KAAK;YACrB;QACF;IACF;IAIA,IAAIG,cAAsB;QACxB,OAAO,IAAI,CAACZ,MAAM,CAACY,WAAW;IAChC;IAEA,IAAIC,cAAsB;QACxB,OAAO,IAAI,CAACb,MAAM,CAACa,WAAW;IAChC;IAEA,IAAIC,kBAAsC;YACjC,cAC0B;QADjC,OAAO,EAAA,eAAA,IAAI,CAACd,MAAM,qBAAX,aAAae,WAAW,IAC3B,GAAGC,6CAAsB,CAAC,CAAC,GAAE,gBAAA,IAAI,CAAChB,MAAM,qBAAX,cAAaY,WAAW,EAAE,GACvDT;IACN;IAEA,IAAIY,cAAkC;YAC7B;QAAP,QAAO,eAAA,IAAI,CAACf,MAAM,qBAAX,aAAae,WAAW;IACjC;IAEA,IAAIE,cAAsB;YACjB;QAAP,OAAO,EAAA,6BAAA,IAAI,CAACjB,MAAM,CAACkB,aAAa,qBAAzB,2BAA2BD,WAAW,KAAI;IACnD;IAEA,IAAIC,gBAAqD;QACvD,OAAO,IAAI,CAAClB,MAAM,CAACkB,aAAa;IAClC;IAEA,IAAIC,WAA2D;YACxD;QAAL,IAAI,GAAC,6BAAA,IAAI,CAACnB,MAAM,CAACkB,aAAa,qBAAzB,2BAA2BE,UAAU,GAAE;YAC1C,OAAOjB;QACT;QAEA,IAAI,CAAC,IAAI,CAACD,SAAS,EAAE;YACnB,IAAI,CAACA,SAAS,GAAG,IAAImB,sEAAkC,CAAC,IAAI,CAACrB,MAAM,EAAE,IAAI,CAACC,WAAW;QACvF;QAEA,OAAO,IAAI,CAACC,SAAS;IACvB;AACF"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
function _export(target, all) {
|
|
6
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: all[name]
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
DevToolsPluginOutputSchema: function() {
|
|
13
|
-
return DevToolsPluginOutputSchema;
|
|
14
|
-
},
|
|
15
|
-
PluginSchema: function() {
|
|
16
|
-
return PluginSchema;
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
function _zod() {
|
|
20
|
-
const data = require("zod");
|
|
21
|
-
_zod = function() {
|
|
22
|
-
return data;
|
|
23
|
-
};
|
|
24
|
-
return data;
|
|
25
|
-
}
|
|
26
|
-
const CommandParameterSchema = _zod().z.object({
|
|
27
|
-
name: _zod().z.string().min(1),
|
|
28
|
-
type: _zod().z.enum([
|
|
29
|
-
'text',
|
|
30
|
-
'number',
|
|
31
|
-
'confirm'
|
|
32
|
-
]),
|
|
33
|
-
description: _zod().z.string().optional()
|
|
34
|
-
});
|
|
35
|
-
const CommandSchema = _zod().z.object({
|
|
36
|
-
name: _zod().z.string().min(1),
|
|
37
|
-
title: _zod().z.string().min(1),
|
|
38
|
-
environments: _zod().z.array(_zod().z.enum([
|
|
39
|
-
'cli',
|
|
40
|
-
'mcp'
|
|
41
|
-
])).readonly(),
|
|
42
|
-
parameters: _zod().z.array(CommandParameterSchema).optional()
|
|
43
|
-
});
|
|
44
|
-
const CliExtensionsSchema = _zod().z.object({
|
|
45
|
-
description: _zod().z.string(),
|
|
46
|
-
commands: _zod().z.array(CommandSchema).min(1),
|
|
47
|
-
entryPoint: _zod().z.string().min(1)
|
|
48
|
-
});
|
|
49
|
-
const PluginSchema = _zod().z.object({
|
|
50
|
-
packageName: _zod().z.string().min(1),
|
|
51
|
-
packageRoot: _zod().z.string().min(1),
|
|
52
|
-
webpageRoot: _zod().z.string().optional(),
|
|
53
|
-
cliExtensions: CliExtensionsSchema.optional()
|
|
54
|
-
});
|
|
55
|
-
const DevToolsPluginOutputLinesSchema = _zod().z.union([
|
|
56
|
-
_zod().z.object({
|
|
57
|
-
type: _zod().z.literal('text'),
|
|
58
|
-
text: _zod().z.string(),
|
|
59
|
-
url: _zod().z.string().optional(),
|
|
60
|
-
level: _zod().z.enum([
|
|
61
|
-
'info',
|
|
62
|
-
'warning',
|
|
63
|
-
'error'
|
|
64
|
-
])
|
|
65
|
-
}),
|
|
66
|
-
_zod().z.object({
|
|
67
|
-
type: _zod().z.literal('audio'),
|
|
68
|
-
url: _zod().z.string().url(),
|
|
69
|
-
text: _zod().z.string().optional()
|
|
70
|
-
}),
|
|
71
|
-
_zod().z.object({
|
|
72
|
-
type: _zod().z.literal('image'),
|
|
73
|
-
url: _zod().z.string().url(),
|
|
74
|
-
text: _zod().z.string().optional()
|
|
75
|
-
})
|
|
76
|
-
]);
|
|
77
|
-
const DevToolsPluginOutputSchema = _zod().z.array(DevToolsPluginOutputLinesSchema);
|
|
78
|
-
|
|
79
|
-
//# sourceMappingURL=DevToolsPlugin.schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/start/server/DevToolsPlugin.schema.ts"],"sourcesContent":["import { z } from 'zod';\n\nconst CommandParameterSchema = z.object({\n name: z.string().min(1),\n type: z.enum(['text', 'number', 'confirm']),\n description: z.string().optional(),\n});\n\nexport type DevToolsPluginCommandParameter = z.infer<typeof CommandParameterSchema>;\n\nconst CommandSchema = z.object({\n name: z.string().min(1),\n title: z.string().min(1),\n environments: z.array(z.enum(['cli', 'mcp'])).readonly(),\n parameters: z.array(CommandParameterSchema).optional(),\n});\n\nexport type DevToolsPluginCommand = z.infer<typeof CommandSchema>;\n\nexport type DevToolsPluginExecutorArguments = {\n command: string;\n metroServerOrigin: string;\n args?: Record<string, string | number | boolean> | undefined;\n onOutput?: (output: DevToolsPluginOutput) => void;\n};\n\nconst CliExtensionsSchema = z.object({\n description: z.string(),\n commands: z.array(CommandSchema).min(1),\n entryPoint: z.string().min(1),\n});\n\nexport type DevToolsPluginCliExtensions = z.infer<typeof CliExtensionsSchema>;\n\nexport const PluginSchema = z.object({\n packageName: z.string().min(1),\n packageRoot: z.string().min(1),\n webpageRoot: z.string().optional(),\n cliExtensions: CliExtensionsSchema.optional(),\n});\n\nexport type DevToolsPluginInfo = z.infer<typeof PluginSchema>;\n\nconst DevToolsPluginOutputLinesSchema = z.union([\n z.object({\n type: z.literal('text'),\n text: z.string(),\n url: z.string().optional(),\n level: z.enum(['info', 'warning', 'error']),\n }),\n z.object({\n type: z.literal('audio'),\n url: z.string().url(),\n text: z.string().optional(),\n }),\n z.object({\n type: z.literal('image'),\n url: z.string().url(),\n text: z.string().optional(),\n }),\n]);\n\nexport const DevToolsPluginOutputSchema = z.array(DevToolsPluginOutputLinesSchema);\n\nexport type DevToolsPluginOutput = z.infer<typeof DevToolsPluginOutputSchema>;\n"],"names":["DevToolsPluginOutputSchema","PluginSchema","CommandParameterSchema","z","object","name","string","min","type","enum","description","optional","CommandSchema","title","environments","array","readonly","parameters","CliExtensionsSchema","commands","entryPoint","packageName","packageRoot","webpageRoot","cliExtensions","DevToolsPluginOutputLinesSchema","union","literal","text","url","level"],"mappings":";;;;;;;;;;;IA8DaA,0BAA0B;eAA1BA;;IA5BAC,YAAY;eAAZA;;;;yBAlCK;;;;;;AAElB,MAAMC,yBAAyBC,QAAC,CAACC,MAAM,CAAC;IACtCC,MAAMF,QAAC,CAACG,MAAM,GAAGC,GAAG,CAAC;IACrBC,MAAML,QAAC,CAACM,IAAI,CAAC;QAAC;QAAQ;QAAU;KAAU;IAC1CC,aAAaP,QAAC,CAACG,MAAM,GAAGK,QAAQ;AAClC;AAIA,MAAMC,gBAAgBT,QAAC,CAACC,MAAM,CAAC;IAC7BC,MAAMF,QAAC,CAACG,MAAM,GAAGC,GAAG,CAAC;IACrBM,OAAOV,QAAC,CAACG,MAAM,GAAGC,GAAG,CAAC;IACtBO,cAAcX,QAAC,CAACY,KAAK,CAACZ,QAAC,CAACM,IAAI,CAAC;QAAC;QAAO;KAAM,GAAGO,QAAQ;IACtDC,YAAYd,QAAC,CAACY,KAAK,CAACb,wBAAwBS,QAAQ;AACtD;AAWA,MAAMO,sBAAsBf,QAAC,CAACC,MAAM,CAAC;IACnCM,aAAaP,QAAC,CAACG,MAAM;IACrBa,UAAUhB,QAAC,CAACY,KAAK,CAACH,eAAeL,GAAG,CAAC;IACrCa,YAAYjB,QAAC,CAACG,MAAM,GAAGC,GAAG,CAAC;AAC7B;AAIO,MAAMN,eAAeE,QAAC,CAACC,MAAM,CAAC;IACnCiB,aAAalB,QAAC,CAACG,MAAM,GAAGC,GAAG,CAAC;IAC5Be,aAAanB,QAAC,CAACG,MAAM,GAAGC,GAAG,CAAC;IAC5BgB,aAAapB,QAAC,CAACG,MAAM,GAAGK,QAAQ;IAChCa,eAAeN,oBAAoBP,QAAQ;AAC7C;AAIA,MAAMc,kCAAkCtB,QAAC,CAACuB,KAAK,CAAC;IAC9CvB,QAAC,CAACC,MAAM,CAAC;QACPI,MAAML,QAAC,CAACwB,OAAO,CAAC;QAChBC,MAAMzB,QAAC,CAACG,MAAM;QACduB,KAAK1B,QAAC,CAACG,MAAM,GAAGK,QAAQ;QACxBmB,OAAO3B,QAAC,CAACM,IAAI,CAAC;YAAC;YAAQ;YAAW;SAAQ;IAC5C;IACAN,QAAC,CAACC,MAAM,CAAC;QACPI,MAAML,QAAC,CAACwB,OAAO,CAAC;QAChBE,KAAK1B,QAAC,CAACG,MAAM,GAAGuB,GAAG;QACnBD,MAAMzB,QAAC,CAACG,MAAM,GAAGK,QAAQ;IAC3B;IACAR,QAAC,CAACC,MAAM,CAAC;QACPI,MAAML,QAAC,CAACwB,OAAO,CAAC;QAChBE,KAAK1B,QAAC,CAACG,MAAM,GAAGuB,GAAG;QACnBD,MAAMzB,QAAC,CAACG,MAAM,GAAGK,QAAQ;IAC3B;CACD;AAEM,MAAMX,6BAA6BG,QAAC,CAACY,KAAK,CAACU"}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "DevToolsPluginCliExtensionExecutor", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return DevToolsPluginCliExtensionExecutor;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
function _child_process() {
|
|
12
|
-
const data = require("child_process");
|
|
13
|
-
_child_process = function() {
|
|
14
|
-
return data;
|
|
15
|
-
};
|
|
16
|
-
return data;
|
|
17
|
-
}
|
|
18
|
-
function _path() {
|
|
19
|
-
const data = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
20
|
-
_path = function() {
|
|
21
|
-
return data;
|
|
22
|
-
};
|
|
23
|
-
return data;
|
|
24
|
-
}
|
|
25
|
-
const _DevToolsPluginCliExtensionResults = require("./DevToolsPluginCliExtensionResults");
|
|
26
|
-
function _interop_require_default(obj) {
|
|
27
|
-
return obj && obj.__esModule ? obj : {
|
|
28
|
-
default: obj
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
const DEFAULT_TIMEOUT_MS = 10000; // 10 seconds
|
|
32
|
-
class DevToolsPluginCliExtensionExecutor {
|
|
33
|
-
constructor(plugin, projectRoot, spawnFunc = _child_process().spawn, timeoutMs = DEFAULT_TIMEOUT_MS // Timeout for command execution
|
|
34
|
-
){
|
|
35
|
-
var _this_plugin_cliExtensions;
|
|
36
|
-
this.plugin = plugin;
|
|
37
|
-
this.projectRoot = projectRoot;
|
|
38
|
-
this.spawnFunc = spawnFunc;
|
|
39
|
-
this.timeoutMs = timeoutMs;
|
|
40
|
-
this.getCommandString = ({ command, args })=>{
|
|
41
|
-
return `node ${this.plugin.cliExtensions.entryPoint} ${command}${Object.keys(args ?? {}).length > 0 ? ' ' + JSON.stringify(args) : ''}`;
|
|
42
|
-
};
|
|
43
|
-
this.execute = async ({ command, args, metroServerOrigin, onOutput })=>{
|
|
44
|
-
this.validate({
|
|
45
|
-
command,
|
|
46
|
-
args
|
|
47
|
-
});
|
|
48
|
-
return new Promise(async (resolve)=>{
|
|
49
|
-
// Set up the command and its arguments
|
|
50
|
-
const tool = _path().default.join(this.plugin.packageRoot, this.plugin.cliExtensions.entryPoint);
|
|
51
|
-
const child = this.spawnFunc('node', [
|
|
52
|
-
tool,
|
|
53
|
-
command,
|
|
54
|
-
`'${JSON.stringify(args)}'`,
|
|
55
|
-
`'${metroServerOrigin}'`
|
|
56
|
-
], {
|
|
57
|
-
cwd: this.projectRoot,
|
|
58
|
-
env: {
|
|
59
|
-
...process.env
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
let finished = false;
|
|
63
|
-
const pluginResults = new _DevToolsPluginCliExtensionResults.DevToolsPluginCliExtensionResults(onOutput);
|
|
64
|
-
// Collect output/error data
|
|
65
|
-
child.stdout.on('data', (data)=>pluginResults.append(data.toString()));
|
|
66
|
-
child.stderr.on('data', (data)=>pluginResults.append(data.toString(), 'error'));
|
|
67
|
-
// Setup timeout
|
|
68
|
-
const timeout = setTimeout(()=>{
|
|
69
|
-
if (!finished) {
|
|
70
|
-
finished = true;
|
|
71
|
-
child.kill('SIGKILL');
|
|
72
|
-
pluginResults.append('Command timed out', 'error');
|
|
73
|
-
resolve(pluginResults.getOutput());
|
|
74
|
-
}
|
|
75
|
-
}, this.timeoutMs);
|
|
76
|
-
child.on('close', (code)=>{
|
|
77
|
-
if (finished) return;
|
|
78
|
-
clearTimeout(timeout);
|
|
79
|
-
finished = true;
|
|
80
|
-
pluginResults.exit(code);
|
|
81
|
-
resolve(pluginResults.getOutput());
|
|
82
|
-
});
|
|
83
|
-
child.on('error', (err)=>{
|
|
84
|
-
if (finished) return;
|
|
85
|
-
clearTimeout(timeout);
|
|
86
|
-
finished = true;
|
|
87
|
-
pluginResults.append(err.toString(), 'error');
|
|
88
|
-
resolve(pluginResults.getOutput());
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
};
|
|
92
|
-
// Validate that this is a plugin with cli extensions
|
|
93
|
-
if (!((_this_plugin_cliExtensions = this.plugin.cliExtensions) == null ? void 0 : _this_plugin_cliExtensions.entryPoint)) {
|
|
94
|
-
throw new Error(`Plugin ${this.plugin.packageName} has no CLI extensions`);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
validate({ command, args }) {
|
|
98
|
-
var _this_plugin_cliExtensions, _commandElement_parameters;
|
|
99
|
-
const commandElement = (_this_plugin_cliExtensions = this.plugin.cliExtensions) == null ? void 0 : _this_plugin_cliExtensions.commands.find((c)=>c.name === command);
|
|
100
|
-
if (!commandElement) {
|
|
101
|
-
throw new Error(`Command "${command}" not found in plugin ${this.plugin.packageName}`);
|
|
102
|
-
}
|
|
103
|
-
const paramLength = ((_commandElement_parameters = commandElement.parameters) == null ? void 0 : _commandElement_parameters.length) ?? 0;
|
|
104
|
-
const argsLength = Object.keys(args ?? {}).length;
|
|
105
|
-
if (paramLength !== argsLength) {
|
|
106
|
-
// Quick check to see if the lengths match
|
|
107
|
-
throw new Error(`Expected ${paramLength} parameter(s), but got ${argsLength} argument(s) for the command "${command}".`);
|
|
108
|
-
}
|
|
109
|
-
const argsKeys = Object.keys(args ?? {});
|
|
110
|
-
for (const param of commandElement.parameters ?? []){
|
|
111
|
-
const found = argsKeys.find((key)=>key === param.name);
|
|
112
|
-
if (!found) {
|
|
113
|
-
throw new Error(`Parameter "${param.name}" not found in command "${command}" of plugin ${this.plugin.packageName}`);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
//# sourceMappingURL=DevToolsPluginCliExtensionExecutor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/start/server/DevToolsPluginCliExtensionExecutor.ts"],"sourcesContent":["import { spawn } from 'child_process';\nimport path from 'path';\n\nimport {\n DevToolsPluginExecutorArguments,\n DevToolsPluginInfo,\n DevToolsPluginOutput,\n} from './DevToolsPlugin.schema';\nimport { DevToolsPluginCliExtensionResults } from './DevToolsPluginCliExtensionResults';\n\nconst DEFAULT_TIMEOUT_MS = 10_000; // 10 seconds\n\n/**\n * Class that executes CLI Extension commands for a given plugin\n *\n * ## Responsibilities:\n * - Verifies that requested commands exist and have correct parameters\n * - Validates that provided arguments match expected parameter schema\n * - Spawns and manages child processes for command execution\n * - Captures and streams stdout/stderr data from executed commands\n * - Manages process errors, timeouts, and unexpected failures\n * - Enforces execution time limits to prevent hanging processes\n * - Configures proper execution environment with color support\n * - Ensures proper cleanup of processes and timeouts\n * - Provides structured output with exit codes and error states\n */\nexport class DevToolsPluginCliExtensionExecutor {\n constructor(\n private plugin: DevToolsPluginInfo,\n private projectRoot: string,\n private spawnFunc: typeof spawn = spawn, // Used for injection when testing,\n private timeoutMs = DEFAULT_TIMEOUT_MS // Timeout for command execution\n ) {\n // Validate that this is a plugin with cli extensions\n if (!this.plugin.cliExtensions?.entryPoint) {\n throw new Error(`Plugin ${this.plugin.packageName} has no CLI extensions`);\n }\n }\n\n public validate({ command, args }: Omit<DevToolsPluginExecutorArguments, 'metroServerOrigin'>) {\n const commandElement = this.plugin.cliExtensions?.commands.find((c) => c.name === command);\n if (!commandElement) {\n throw new Error(`Command \"${command}\" not found in plugin ${this.plugin.packageName}`);\n }\n\n const paramLength = commandElement.parameters?.length ?? 0;\n const argsLength = Object.keys(args ?? {}).length;\n if (paramLength !== argsLength) {\n // Quick check to see if the lengths match\n throw new Error(\n `Expected ${paramLength} parameter(s), but got ${argsLength} argument(s) for the command \"${command}\".`\n );\n }\n\n const argsKeys = Object.keys(args ?? {});\n for (const param of commandElement.parameters ?? []) {\n const found = argsKeys.find((key) => key === param.name);\n if (!found) {\n throw new Error(\n `Parameter \"${param.name}\" not found in command \"${command}\" of plugin ${this.plugin.packageName}`\n );\n }\n }\n }\n\n /** this function is used for testing and showing the command in UI */\n public getCommandString = ({\n command,\n args,\n }: Omit<DevToolsPluginExecutorArguments, 'metroServerOrigin'>) => {\n return `node ${this.plugin.cliExtensions!.entryPoint} ${command}${Object.keys(args ?? {}).length > 0 ? ' ' + JSON.stringify(args) : ''}`;\n };\n\n public execute = async ({\n command,\n args,\n metroServerOrigin,\n onOutput,\n }: DevToolsPluginExecutorArguments): Promise<DevToolsPluginOutput> => {\n this.validate({ command, args });\n return new Promise<DevToolsPluginOutput>(async (resolve) => {\n // Set up the command and its arguments\n const tool = path.join(this.plugin.packageRoot, this.plugin.cliExtensions!.entryPoint);\n const child = this.spawnFunc(\n 'node',\n [tool, command, `'${JSON.stringify(args)}'`, `'${metroServerOrigin}'`],\n {\n cwd: this.projectRoot,\n env: { ...process.env },\n }\n );\n\n let finished = false;\n const pluginResults = new DevToolsPluginCliExtensionResults(onOutput);\n\n // Collect output/error data\n child.stdout.on('data', (data) => pluginResults.append(data.toString()));\n child.stderr.on('data', (data) => pluginResults.append(data.toString(), 'error'));\n\n // Setup timeout\n const timeout = setTimeout(() => {\n if (!finished) {\n finished = true;\n child.kill('SIGKILL');\n pluginResults.append('Command timed out', 'error');\n resolve(pluginResults.getOutput());\n }\n }, this.timeoutMs);\n\n child.on('close', (code: number) => {\n if (finished) return;\n clearTimeout(timeout);\n finished = true;\n pluginResults.exit(code);\n resolve(pluginResults.getOutput());\n });\n\n child.on('error', (err: Error) => {\n if (finished) return;\n clearTimeout(timeout);\n finished = true;\n pluginResults.append(err.toString(), 'error');\n resolve(pluginResults.getOutput());\n });\n });\n };\n}\n"],"names":["DevToolsPluginCliExtensionExecutor","DEFAULT_TIMEOUT_MS","constructor","plugin","projectRoot","spawnFunc","spawn","timeoutMs","getCommandString","command","args","cliExtensions","entryPoint","Object","keys","length","JSON","stringify","execute","metroServerOrigin","onOutput","validate","Promise","resolve","tool","path","join","packageRoot","child","cwd","env","process","finished","pluginResults","DevToolsPluginCliExtensionResults","stdout","on","data","append","toString","stderr","timeout","setTimeout","kill","getOutput","code","clearTimeout","exit","err","Error","packageName","commandElement","commands","find","c","name","paramLength","parameters","argsLength","argsKeys","param","found","key"],"mappings":"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"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "DevToolsPluginCliExtensionResults", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return DevToolsPluginCliExtensionResults;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _DevToolsPluginschema = require("./DevToolsPlugin.schema");
|
|
12
|
-
class DevToolsPluginCliExtensionResults {
|
|
13
|
-
constructor(onOutput){
|
|
14
|
-
this.onOutput = onOutput;
|
|
15
|
-
this._output = [];
|
|
16
|
-
}
|
|
17
|
-
append(output, level = 'info') {
|
|
18
|
-
const results = this.parseOutputText(output, level);
|
|
19
|
-
this._output.push(...results);
|
|
20
|
-
this.onOutput == null ? void 0 : this.onOutput.call(this, results);
|
|
21
|
-
}
|
|
22
|
-
exit(code) {
|
|
23
|
-
if (code === 0) return;
|
|
24
|
-
this.append(`Process exited with code ${code}`, 'error');
|
|
25
|
-
}
|
|
26
|
-
getOutput() {
|
|
27
|
-
return this._output;
|
|
28
|
-
}
|
|
29
|
-
parseOutputText(txt, level = 'info') {
|
|
30
|
-
// Validate against schema
|
|
31
|
-
try {
|
|
32
|
-
const result = _DevToolsPluginschema.DevToolsPluginOutputSchema.safeParse(JSON.parse(txt));
|
|
33
|
-
if (!result.success) {
|
|
34
|
-
return [
|
|
35
|
-
{
|
|
36
|
-
type: 'text',
|
|
37
|
-
text: `Invalid JSON: ${result.error.issues.map((issue)=>issue.message).join(', ')}`,
|
|
38
|
-
level: 'error'
|
|
39
|
-
}
|
|
40
|
-
];
|
|
41
|
-
}
|
|
42
|
-
return result.data;
|
|
43
|
-
} catch {
|
|
44
|
-
// Not JSON, treat as plain text
|
|
45
|
-
const lines = txt.split('\n');
|
|
46
|
-
const results = [];
|
|
47
|
-
for (const line of lines){
|
|
48
|
-
if (line) {
|
|
49
|
-
results.push({
|
|
50
|
-
type: 'text',
|
|
51
|
-
text: line,
|
|
52
|
-
level
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return results;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
//# sourceMappingURL=DevToolsPluginCliExtensionResults.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/start/server/DevToolsPluginCliExtensionResults.ts"],"sourcesContent":["import z from 'zod';\n\nimport { DevToolsPluginOutput, DevToolsPluginOutputSchema } from './DevToolsPlugin.schema';\n\n/**\n * Class that collects and manages output from executed plugin commands\n *\n * Responsibilities:\n * - Collects output data from executed commands\n * - Parses and validates output data against expected schema\n * - Provides methods to append new output entries\n * - Handles exit codes and appends relevant messages\n * - Handles streaming of output via optional callback\n */\nexport class DevToolsPluginCliExtensionResults {\n constructor(private onOutput?: (output: DevToolsPluginOutput) => void) {}\n\n private _output: DevToolsPluginOutput = [];\n\n public append(output: string, level: 'info' | 'warning' | 'error' = 'info') {\n const results = this.parseOutputText(output, level);\n this._output.push(...results);\n this.onOutput?.(results);\n }\n\n public exit(code: number) {\n if (code === 0) return;\n this.append(`Process exited with code ${code}`, 'error');\n }\n\n public getOutput(): DevToolsPluginOutput {\n return this._output;\n }\n\n private parseOutputText(\n txt: string,\n level: 'info' | 'warning' | 'error' = 'info'\n ): DevToolsPluginOutput {\n // Validate against schema\n try {\n const result = DevToolsPluginOutputSchema.safeParse(JSON.parse(txt));\n if (!result.success) {\n return [\n {\n type: 'text',\n text: `Invalid JSON: ${result.error.issues.map((issue) => issue.message).join(', ')}`,\n level: 'error',\n },\n ];\n }\n return result.data;\n } catch {\n // Not JSON, treat as plain text\n const lines = txt.split('\\n');\n const results: DevToolsPluginOutput = [];\n for (const line of lines) {\n if (line) {\n results.push({ type: 'text', text: line, level });\n }\n }\n return results;\n }\n }\n}\n"],"names":["DevToolsPluginCliExtensionResults","constructor","onOutput","_output","append","output","level","results","parseOutputText","push","exit","code","getOutput","txt","result","DevToolsPluginOutputSchema","safeParse","JSON","parse","success","type","text","error","issues","map","issue","message","join","data","lines","split","line"],"mappings":";;;;+BAcaA;;;eAAAA;;;sCAZoD;AAY1D,MAAMA;IACXC,YAAY,AAAQC,QAAiD,CAAE;aAAnDA,WAAAA;aAEZC,UAAgC,EAAE;IAF8B;IAIjEC,OAAOC,MAAc,EAAEC,QAAsC,MAAM,EAAE;QAC1E,MAAMC,UAAU,IAAI,CAACC,eAAe,CAACH,QAAQC;QAC7C,IAAI,CAACH,OAAO,CAACM,IAAI,IAAIF;QACrB,IAAI,CAACL,QAAQ,oBAAb,IAAI,CAACA,QAAQ,MAAb,IAAI,EAAYK;IAClB;IAEOG,KAAKC,IAAY,EAAE;QACxB,IAAIA,SAAS,GAAG;QAChB,IAAI,CAACP,MAAM,CAAC,CAAC,yBAAyB,EAAEO,MAAM,EAAE;IAClD;IAEOC,YAAkC;QACvC,OAAO,IAAI,CAACT,OAAO;IACrB;IAEQK,gBACNK,GAAW,EACXP,QAAsC,MAAM,EACtB;QACtB,0BAA0B;QAC1B,IAAI;YACF,MAAMQ,SAASC,gDAA0B,CAACC,SAAS,CAACC,KAAKC,KAAK,CAACL;YAC/D,IAAI,CAACC,OAAOK,OAAO,EAAE;gBACnB,OAAO;oBACL;wBACEC,MAAM;wBACNC,MAAM,CAAC,cAAc,EAAEP,OAAOQ,KAAK,CAACC,MAAM,CAACC,GAAG,CAAC,CAACC,QAAUA,MAAMC,OAAO,EAAEC,IAAI,CAAC,OAAO;wBACrFrB,OAAO;oBACT;iBACD;YACH;YACA,OAAOQ,OAAOc,IAAI;QACpB,EAAE,OAAM;YACN,gCAAgC;YAChC,MAAMC,QAAQhB,IAAIiB,KAAK,CAAC;YACxB,MAAMvB,UAAgC,EAAE;YACxC,KAAK,MAAMwB,QAAQF,MAAO;gBACxB,IAAIE,MAAM;oBACRxB,QAAQE,IAAI,CAAC;wBAAEW,MAAM;wBAAQC,MAAMU;wBAAMzB;oBAAM;gBACjD;YACF;YACA,OAAOC;QACT;IACF;AACF"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "DataLoaderModuleMiddleware", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return DataLoaderModuleMiddleware;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
function _config() {
|
|
12
|
-
const data = require("@expo/config");
|
|
13
|
-
_config = function() {
|
|
14
|
-
return data;
|
|
15
|
-
};
|
|
16
|
-
return data;
|
|
17
|
-
}
|
|
18
|
-
const _ExpoMiddleware = require("./ExpoMiddleware");
|
|
19
|
-
const _fetchRouterManifest = require("../metro/fetchRouterManifest");
|
|
20
|
-
const LOADER_MODULE_ENDPOINT = '/_expo/loaders';
|
|
21
|
-
class DataLoaderModuleMiddleware extends _ExpoMiddleware.ExpoMiddleware {
|
|
22
|
-
constructor(projectRoot, appDir, executeServerDataLoaderAsync, getDevServerUrl){
|
|
23
|
-
super(projectRoot, [
|
|
24
|
-
LOADER_MODULE_ENDPOINT
|
|
25
|
-
]), this.projectRoot = projectRoot, this.appDir = appDir, this.executeServerDataLoaderAsync = executeServerDataLoaderAsync, this.getDevServerUrl = getDevServerUrl;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Only handles a request if `req.pathname` begins with `/_expo/loaders/` and if the request
|
|
29
|
-
* headers include `Accept: application/json`.
|
|
30
|
-
*/ shouldHandleRequest(req) {
|
|
31
|
-
var _exp_extra_router, _exp_extra;
|
|
32
|
-
if (!req.url) return false;
|
|
33
|
-
const { pathname } = new URL(req.url, 'http://localhost');
|
|
34
|
-
if (!pathname.startsWith(`${LOADER_MODULE_ENDPOINT}/`)) {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
if (req.headers.accept !== 'application/json') {
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
const { exp } = (0, _config().getConfig)(this.projectRoot);
|
|
41
|
-
return !!((_exp_extra = exp.extra) == null ? void 0 : (_exp_extra_router = _exp_extra.router) == null ? void 0 : _exp_extra_router.unstable_useServerDataLoaders);
|
|
42
|
-
}
|
|
43
|
-
async handleRequestAsync(req, res, next) {
|
|
44
|
-
if (![
|
|
45
|
-
'GET',
|
|
46
|
-
'HEAD'
|
|
47
|
-
].includes(req.method ?? '')) {
|
|
48
|
-
return next();
|
|
49
|
-
}
|
|
50
|
-
const manifest = await (0, _fetchRouterManifest.fetchManifest)(this.projectRoot, {
|
|
51
|
-
appDir: this.appDir
|
|
52
|
-
});
|
|
53
|
-
const { pathname } = new URL(req.url, 'http://localhost');
|
|
54
|
-
try {
|
|
55
|
-
const routePath = pathname.replace('/_expo/loaders', '').replace('/index', '/') || '/';
|
|
56
|
-
const matchingRoute = manifest == null ? void 0 : manifest.htmlRoutes.find((route)=>{
|
|
57
|
-
return route.namedRegex.test(routePath);
|
|
58
|
-
});
|
|
59
|
-
if (!matchingRoute) {
|
|
60
|
-
throw new Error(`No matching route for ${routePath}`);
|
|
61
|
-
}
|
|
62
|
-
const loaderData = await this.executeServerDataLoaderAsync(new URL(routePath, this.getDevServerUrl()), matchingRoute);
|
|
63
|
-
res.setHeader('Content-Type', 'application/javascript; charset=utf-8');
|
|
64
|
-
res.setHeader('Cache-Control', 'no-cache');
|
|
65
|
-
res.statusCode = 200;
|
|
66
|
-
res.end(JSON.stringify(loaderData ?? {}));
|
|
67
|
-
} catch (error) {
|
|
68
|
-
console.error(`Failed to generate loader module for ${pathname}:`, error);
|
|
69
|
-
res.statusCode = 500;
|
|
70
|
-
res.end(`{}`);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
//# sourceMappingURL=DataLoaderModuleMiddleware.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/middleware/DataLoaderModuleMiddleware.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\n\nimport { ExpoMiddleware } from './ExpoMiddleware';\nimport { ServerNext, ServerRequest, ServerResponse } from './server.types';\nimport { type ExpoRouterServerManifestV1Route, fetchManifest } from '../metro/fetchRouterManifest';\n\nconst LOADER_MODULE_ENDPOINT = '/_expo/loaders';\n\n/**\n * Middleware for serving loader data modules dynamically during development. This allows\n * client-side navigation to fetch loader data on-demand.\n *\n * In production, these modules are pre-generated as static files.\n */\nexport class DataLoaderModuleMiddleware extends ExpoMiddleware {\n constructor(\n protected projectRoot: string,\n protected appDir: string,\n private executeServerDataLoaderAsync: (\n url: URL,\n route: ExpoRouterServerManifestV1Route<RegExp>\n ) => Promise<any>,\n private getDevServerUrl: () => string\n ) {\n super(projectRoot, [LOADER_MODULE_ENDPOINT]);\n }\n\n /**\n * Only handles a request if `req.pathname` begins with `/_expo/loaders/` and if the request\n * headers include `Accept: application/json`.\n */\n override shouldHandleRequest(req: ServerRequest): boolean {\n if (!req.url) return false;\n const { pathname } = new URL(req.url, 'http://localhost');\n\n if (!pathname.startsWith(`${LOADER_MODULE_ENDPOINT}/`)) {\n return false;\n }\n\n if (req.headers.accept !== 'application/json') {\n return false;\n }\n\n const { exp } = getConfig(this.projectRoot);\n return !!exp.extra?.router?.unstable_useServerDataLoaders;\n }\n\n async handleRequestAsync(\n req: ServerRequest,\n res: ServerResponse,\n next: ServerNext\n ): Promise<void> {\n if (!['GET', 'HEAD'].includes(req.method ?? '')) {\n return next();\n }\n\n const manifest = await fetchManifest<RegExp>(this.projectRoot, {\n appDir: this.appDir,\n });\n\n const { pathname } = new URL(req.url!, 'http://localhost');\n\n try {\n const routePath = pathname.replace('/_expo/loaders', '').replace('/index', '/') || '/';\n\n const matchingRoute = manifest?.htmlRoutes.find((route) => {\n return route.namedRegex.test(routePath);\n });\n\n if (!matchingRoute) {\n throw new Error(`No matching route for ${routePath}`);\n }\n\n const loaderData = await this.executeServerDataLoaderAsync(\n new URL(routePath, this.getDevServerUrl()),\n matchingRoute\n );\n\n res.setHeader('Content-Type', 'application/javascript; charset=utf-8');\n res.setHeader('Cache-Control', 'no-cache');\n res.statusCode = 200;\n res.end(JSON.stringify(loaderData ?? {}));\n } catch (error) {\n console.error(`Failed to generate loader module for ${pathname}:`, error);\n res.statusCode = 500;\n res.end(`{}`);\n }\n }\n}\n"],"names":["DataLoaderModuleMiddleware","LOADER_MODULE_ENDPOINT","ExpoMiddleware","constructor","projectRoot","appDir","executeServerDataLoaderAsync","getDevServerUrl","shouldHandleRequest","req","exp","url","pathname","URL","startsWith","headers","accept","getConfig","extra","router","unstable_useServerDataLoaders","handleRequestAsync","res","next","includes","method","manifest","fetchManifest","routePath","replace","matchingRoute","htmlRoutes","find","route","namedRegex","test","Error","loaderData","setHeader","statusCode","end","JSON","stringify","error","console"],"mappings":";;;;+BAcaA;;;eAAAA;;;;yBAda;;;;;;gCAEK;qCAEqC;AAEpE,MAAMC,yBAAyB;AAQxB,MAAMD,mCAAmCE,8BAAc;IAC5DC,YACE,AAAUC,WAAmB,EAC7B,AAAUC,MAAc,EACxB,AAAQC,4BAGS,EACjB,AAAQC,eAA6B,CACrC;QACA,KAAK,CAACH,aAAa;YAACH;SAAuB,QARjCG,cAAAA,kBACAC,SAAAA,aACFC,+BAAAA,mCAIAC,kBAAAA;IAGV;IAEA;;;GAGC,GACD,AAASC,oBAAoBC,GAAkB,EAAW;YAa/CC,mBAAAA;QAZT,IAAI,CAACD,IAAIE,GAAG,EAAE,OAAO;QACrB,MAAM,EAAEC,QAAQ,EAAE,GAAG,IAAIC,IAAIJ,IAAIE,GAAG,EAAE;QAEtC,IAAI,CAACC,SAASE,UAAU,CAAC,GAAGb,uBAAuB,CAAC,CAAC,GAAG;YACtD,OAAO;QACT;QAEA,IAAIQ,IAAIM,OAAO,CAACC,MAAM,KAAK,oBAAoB;YAC7C,OAAO;QACT;QAEA,MAAM,EAAEN,GAAG,EAAE,GAAGO,IAAAA,mBAAS,EAAC,IAAI,CAACb,WAAW;QAC1C,OAAO,CAAC,GAACM,aAAAA,IAAIQ,KAAK,sBAATR,oBAAAA,WAAWS,MAAM,qBAAjBT,kBAAmBU,6BAA6B;IAC3D;IAEA,MAAMC,mBACJZ,GAAkB,EAClBa,GAAmB,EACnBC,IAAgB,EACD;QACf,IAAI,CAAC;YAAC;YAAO;SAAO,CAACC,QAAQ,CAACf,IAAIgB,MAAM,IAAI,KAAK;YAC/C,OAAOF;QACT;QAEA,MAAMG,WAAW,MAAMC,IAAAA,kCAAa,EAAS,IAAI,CAACvB,WAAW,EAAE;YAC7DC,QAAQ,IAAI,CAACA,MAAM;QACrB;QAEA,MAAM,EAAEO,QAAQ,EAAE,GAAG,IAAIC,IAAIJ,IAAIE,GAAG,EAAG;QAEvC,IAAI;YACF,MAAMiB,YAAYhB,SAASiB,OAAO,CAAC,kBAAkB,IAAIA,OAAO,CAAC,UAAU,QAAQ;YAEnF,MAAMC,gBAAgBJ,4BAAAA,SAAUK,UAAU,CAACC,IAAI,CAAC,CAACC;gBAC/C,OAAOA,MAAMC,UAAU,CAACC,IAAI,CAACP;YAC/B;YAEA,IAAI,CAACE,eAAe;gBAClB,MAAM,IAAIM,MAAM,CAAC,sBAAsB,EAAER,WAAW;YACtD;YAEA,MAAMS,aAAa,MAAM,IAAI,CAAC/B,4BAA4B,CACxD,IAAIO,IAAIe,WAAW,IAAI,CAACrB,eAAe,KACvCuB;YAGFR,IAAIgB,SAAS,CAAC,gBAAgB;YAC9BhB,IAAIgB,SAAS,CAAC,iBAAiB;YAC/BhB,IAAIiB,UAAU,GAAG;YACjBjB,IAAIkB,GAAG,CAACC,KAAKC,SAAS,CAACL,cAAc,CAAC;QACxC,EAAE,OAAOM,OAAO;YACdC,QAAQD,KAAK,CAAC,CAAC,qCAAqC,EAAE/B,SAAS,CAAC,CAAC,EAAE+B;YACnErB,IAAIiB,UAAU,GAAG;YACjBjB,IAAIkB,GAAG,CAAC,CAAC,EAAE,CAAC;QACd;IACF;AACF"}
|