@expo/cli 0.11.1 → 0.12.0
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 +2 -2
- package/build/src/api/getExpoGoIntermediateCertificate.js +1 -1
- package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -1
- package/build/src/api/getExpoSchema.js +1 -1
- package/build/src/api/getExpoSchema.js.map +1 -1
- package/build/src/api/getNativeModuleVersions.js +1 -1
- package/build/src/api/getNativeModuleVersions.js.map +1 -1
- package/build/src/api/getProjectDevelopmentCertificate.js +1 -1
- package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -1
- package/build/src/api/getVersions.js +1 -1
- package/build/src/api/getVersions.js.map +1 -1
- package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -1
- package/build/src/api/rest/client.js +5 -5
- package/build/src/api/rest/client.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithProxy.js.map +1 -1
- package/build/src/api/updateDevelopmentSession.js +1 -1
- package/build/src/api/updateDevelopmentSession.js.map +1 -1
- package/build/src/api/user/actions.js +2 -2
- package/build/src/api/user/actions.js.map +1 -1
- package/build/src/api/user/otp.js +1 -1
- package/build/src/api/user/otp.js.map +1 -1
- package/build/src/api/user/user.js +2 -2
- package/build/src/api/user/user.js.map +1 -1
- package/build/src/config/configAsync.js +17 -1
- package/build/src/config/configAsync.js.map +1 -1
- package/build/src/customize/customizeAsync.js +1 -1
- package/build/src/customize/customizeAsync.js.map +1 -1
- package/build/src/customize/generate.js +29 -2
- package/build/src/customize/generate.js.map +1 -1
- package/build/src/customize/templates.js +8 -0
- package/build/src/customize/templates.js.map +1 -1
- package/build/src/customize/typescript.js +54 -0
- package/build/src/customize/typescript.js.map +1 -0
- package/build/src/export/createBundles.js +1 -1
- package/build/src/export/createBundles.js.map +1 -1
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +50 -4
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/export/embed/index.js +1 -3
- package/build/src/export/embed/index.js.map +1 -1
- package/build/src/export/embed/resolveOptions.js +6 -10
- package/build/src/export/embed/resolveOptions.js.map +1 -1
- package/build/src/export/exportApp.js +50 -41
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js +2 -2
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/exportAsync.js +1 -1
- package/build/src/export/exportAsync.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +42 -12
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/fork-bundleAsync.js +27 -2
- package/build/src/export/fork-bundleAsync.js.map +1 -1
- package/build/src/export/getPublicExpoManifest.js +1 -1
- package/build/src/export/getPublicExpoManifest.js.map +1 -1
- package/build/src/export/getResolvedLocales.js.map +1 -1
- package/build/src/export/printBundleSizes.js.map +1 -1
- package/build/src/export/web/exportWebAsync.js.map +1 -1
- package/build/src/export/writeContents.js +5 -1
- package/build/src/export/writeContents.js.map +1 -1
- package/build/src/install/checkPackages.js +1 -1
- package/build/src/install/checkPackages.js.map +1 -1
- package/build/src/install/installAsync.js +1 -1
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/prebuild/configureProjectAsync.js +5 -9
- package/build/src/prebuild/configureProjectAsync.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +5 -5
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/prebuild/updateFromTemplate.js +8 -5
- package/build/src/prebuild/updateFromTemplate.js.map +1 -1
- package/build/src/register/registerAsync.js +0 -1
- package/build/src/register/registerAsync.js.map +1 -1
- package/build/src/run/android/resolveInstallApkName.js.map +1 -1
- package/build/src/run/android/resolveOptions.js +1 -1
- package/build/src/run/android/resolveOptions.js.map +1 -1
- package/build/src/run/android/runAndroidAsync.js +2 -2
- package/build/src/run/android/runAndroidAsync.js.map +1 -1
- package/build/src/run/ios/XcodeBuild.js +2 -2
- package/build/src/run/ios/XcodeBuild.js.map +1 -1
- package/build/src/run/ios/appleDevice/AppleDevice.js +4 -4
- package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
- package/build/src/run/ios/appleDevice/ClientManager.js +1 -1
- package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/AFCClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +1 -1
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +1 -1
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +1 -1
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +1 -1
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +1 -1
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
- package/build/src/run/ios/codeSigning/configureCodeSigning.js +1 -1
- package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +2 -2
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +3 -0
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
- package/build/src/run/ios/index.js.map +1 -1
- package/build/src/run/ios/launchApp.js +2 -2
- package/build/src/run/ios/launchApp.js.map +1 -1
- package/build/src/run/ios/options/resolveDevice.js +1 -1
- package/build/src/run/ios/options/resolveDevice.js.map +1 -1
- package/build/src/run/ios/options/resolveOptions.js +2 -2
- package/build/src/run/ios/options/resolveOptions.js.map +1 -1
- package/build/src/run/ios/runIosAsync.js +3 -3
- package/build/src/run/ios/runIosAsync.js.map +1 -1
- package/build/src/start/doctor/apple/XcodePrerequisite.js +43 -2
- package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +5 -3
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +7 -7
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
- package/build/src/start/doctor/typescript/updateTSConfig.js +11 -10
- package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
- package/build/src/start/index.js +0 -2
- package/build/src/start/index.js.map +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/interface/startInterface.js +3 -3
- package/build/src/start/interface/startInterface.js.map +1 -1
- package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
- package/build/src/start/platforms/PlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/ADBServer.js +1 -1
- package/build/src/start/platforms/android/ADBServer.js.map +1 -1
- package/build/src/start/platforms/android/AndroidDeviceManager.js +5 -5
- package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
- package/build/src/start/platforms/android/AndroidPlatformManager.js +1 -1
- package/build/src/start/platforms/android/AndroidPlatformManager.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/platforms/android/adbReverse.js +2 -2
- package/build/src/start/platforms/android/adbReverse.js.map +1 -1
- package/build/src/start/platforms/android/emulator.js +1 -1
- package/build/src/start/platforms/android/emulator.js.map +1 -1
- package/build/src/start/platforms/android/getDevices.js +1 -1
- package/build/src/start/platforms/android/getDevices.js.map +1 -1
- package/build/src/start/platforms/android/promptAndroidDevice.js +1 -1
- package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
- package/build/src/start/platforms/ios/AppleDeviceManager.js +5 -5
- package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
- package/build/src/start/platforms/ios/ApplePlatformManager.js +1 -1
- package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
- package/build/src/start/platforms/ios/getBestSimulator.js +1 -1
- package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
- package/build/src/start/platforms/ios/promptAppleDevice.js +1 -1
- package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
- package/build/src/start/platforms/ios/simctl.js +1 -1
- package/build/src/start/platforms/ios/simctl.js.map +1 -1
- package/build/src/start/platforms/ios/simctlLogging.js +1 -1
- package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
- package/build/src/start/resolveOptions.js +0 -5
- package/build/src/start/resolveOptions.js.map +1 -1
- package/build/src/start/server/AsyncNgrok.js +4 -3
- package/build/src/start/server/AsyncNgrok.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +4 -11
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js +3 -2
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/UrlCreator.js +2 -1
- package/build/src/start/server/UrlCreator.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +2 -2
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +42 -25
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js +14 -3
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.types.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/device.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/NetworkResponse.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/PageReload.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerScriptParsed.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerSetBreakpointByUrl.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeGetProperties.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/handlers/types.js.map +1 -1
- package/build/src/start/server/metro/inspector-proxy/index.js +1 -1
- package/build/src/start/server/metro/inspector-proxy/index.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +49 -8
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/resolveFromProject.js +0 -4
- package/build/src/start/server/metro/resolveFromProject.js.map +1 -1
- package/build/src/start/server/metro/runServer-fork.js +1 -1
- package/build/src/start/server/metro/runServer-fork.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +29 -5
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +2 -2
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/FaviconMiddleware.js +1 -1
- package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +8 -5
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +1 -1
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ServeStaticMiddleware.js +1 -1
- package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
- package/build/src/start/server/middleware/server.types.js.map +1 -1
- package/build/src/start/server/openPlatforms.js.map +1 -1
- package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +6 -6
- package/build/src/start/server/type-generation/routes.js.map +1 -1
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +3 -3
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js +10 -5
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
- package/build/src/start/server/webpack/compile.js +1 -1
- package/build/src/start/server/webpack/compile.js.map +1 -1
- package/build/src/start/startAsync.js +10 -32
- package/build/src/start/startAsync.js.map +1 -1
- package/build/src/utils/FileNotifier.js +1 -1
- package/build/src/utils/FileNotifier.js.map +1 -1
- package/build/src/utils/analytics/metroDebuggerMiddleware.js +1 -1
- package/build/src/utils/analytics/metroDebuggerMiddleware.js.map +1 -1
- package/build/src/utils/analytics/rudderstackClient.js +2 -2
- package/build/src/utils/array.js.map +1 -1
- package/build/src/utils/cocoapods.js +2 -2
- package/build/src/utils/cocoapods.js.map +1 -1
- package/build/src/utils/codesigning.js +2 -2
- package/build/src/utils/codesigning.js.map +1 -1
- package/build/src/utils/downloadAppAsync.js +1 -1
- package/build/src/utils/downloadAppAsync.js.map +1 -1
- package/build/src/utils/downloadExpoGoAsync.js +2 -2
- package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
- package/build/src/utils/editor.js +1 -1
- package/build/src/utils/editor.js.map +1 -1
- package/build/src/utils/env.js +1 -1
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/errors.js.map +1 -1
- package/build/src/utils/getOrPromptApplicationId.js +2 -2
- package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
- package/build/src/utils/git.js +1 -1
- package/build/src/utils/git.js.map +1 -1
- package/build/src/utils/modifyConfigAsync.js +1 -1
- package/build/src/utils/modifyConfigAsync.js.map +1 -1
- package/build/src/utils/modifyConfigPlugins.js +1 -1
- package/build/src/utils/modifyConfigPlugins.js.map +1 -1
- package/build/src/utils/npm.js +1 -1
- package/build/src/utils/npm.js.map +1 -1
- package/build/src/utils/obj.js.map +1 -1
- package/build/src/utils/plist.js +1 -1
- package/build/src/utils/plist.js.map +1 -1
- package/build/src/utils/port.js +1 -1
- package/build/src/utils/port.js.map +1 -1
- package/build/src/utils/profile.js +1 -1
- package/build/src/utils/profile.js.map +1 -1
- package/build/src/utils/scheme.js +1 -1
- package/build/src/utils/scheme.js.map +1 -1
- package/build/src/utils/tsconfig/loadTsConfigPaths.js +1 -1
- package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -1
- package/build/src/utils/validateApplicationId.js +85 -5
- package/build/src/utils/validateApplicationId.js.map +1 -1
- package/package.json +11 -8
- package/build/src/api/signManifest.js +0 -26
- package/build/src/api/signManifest.js.map +0 -1
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js +0 -155
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js.map +0 -1
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
});
|
|
5
5
|
exports.validateBundleId = validateBundleId;
|
|
6
6
|
exports.validatePackage = validatePackage;
|
|
7
|
+
exports.validatePackageWithWarning = validatePackageWithWarning;
|
|
7
8
|
exports.assertValidBundleId = assertValidBundleId;
|
|
8
9
|
exports.assertValidPackage = assertValidPackage;
|
|
9
10
|
exports.getBundleIdWarningInternalAsync = getBundleIdWarningInternalAsync;
|
|
@@ -11,12 +12,12 @@ exports.getPackageNameWarningInternalAsync = getPackageNameWarningInternalAsync;
|
|
|
11
12
|
exports.getPackageNameWarningAsync = exports.getBundleIdWarningAsync = void 0;
|
|
12
13
|
var _assert = _interopRequireDefault(require("assert"));
|
|
13
14
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
14
|
-
var _client = require("../api/rest/client");
|
|
15
|
-
var _log = require("../log");
|
|
16
15
|
var _env = require("./env");
|
|
17
16
|
var _fn = require("./fn");
|
|
18
17
|
var _link = require("./link");
|
|
19
18
|
var _url = require("./url");
|
|
19
|
+
var _client = require("../api/rest/client");
|
|
20
|
+
var _log = require("../log");
|
|
20
21
|
function _interopRequireDefault(obj) {
|
|
21
22
|
return obj && obj.__esModule ? obj : {
|
|
22
23
|
default: obj
|
|
@@ -24,18 +25,97 @@ function _interopRequireDefault(obj) {
|
|
|
24
25
|
}
|
|
25
26
|
const debug = require("debug")("expo:utils:validateApplicationId");
|
|
26
27
|
const IOS_BUNDLE_ID_REGEX = /^[a-zA-Z0-9-.]+$/;
|
|
27
|
-
const ANDROID_PACKAGE_REGEX = /^[a-zA-Z][a-zA-Z0-9_]*(\.[a-zA-Z][a-zA-Z0-9_]*)+$/;
|
|
28
|
+
const ANDROID_PACKAGE_REGEX = /^(?!.*\bnative\b)[a-zA-Z][a-zA-Z0-9_]*(\.[a-zA-Z][a-zA-Z0-9_]*)+$/;
|
|
28
29
|
function validateBundleId(value) {
|
|
29
30
|
return IOS_BUNDLE_ID_REGEX.test(value);
|
|
30
31
|
}
|
|
31
32
|
function validatePackage(value) {
|
|
32
|
-
return
|
|
33
|
+
return validatePackageWithWarning(value) === true;
|
|
34
|
+
}
|
|
35
|
+
function validatePackageWithWarning(value) {
|
|
36
|
+
const parts = value.split(".");
|
|
37
|
+
for (const segment of parts){
|
|
38
|
+
if (RESERVED_ANDROID_PACKAGE_NAME_SEGMENTS.includes(segment)) {
|
|
39
|
+
return `"${segment}" is a reserved Java keyword.`;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (parts.length < 2) {
|
|
43
|
+
return `Package name must contain more than one segment, separated by ".", e.g. com.${value}`;
|
|
44
|
+
}
|
|
45
|
+
if (!ANDROID_PACKAGE_REGEX.test(value)) {
|
|
46
|
+
return 'Invalid characters in Android package name. Only alphanumeric characters, "." and "_" are allowed, and each "." must be followed by a letter or number.';
|
|
47
|
+
}
|
|
48
|
+
return true;
|
|
33
49
|
}
|
|
50
|
+
// https://en.wikipedia.org/wiki/List_of_Java_keywords
|
|
51
|
+
// Running the following in the console and pruning the "Reserved Identifiers" section:
|
|
52
|
+
// [...document.querySelectorAll('dl > dt > code')].map(node => node.innerText)
|
|
53
|
+
const RESERVED_ANDROID_PACKAGE_NAME_SEGMENTS = [
|
|
54
|
+
// List of Java keywords
|
|
55
|
+
"_",
|
|
56
|
+
"abstract",
|
|
57
|
+
"assert",
|
|
58
|
+
"boolean",
|
|
59
|
+
"break",
|
|
60
|
+
"byte",
|
|
61
|
+
"case",
|
|
62
|
+
"catch",
|
|
63
|
+
"char",
|
|
64
|
+
"class",
|
|
65
|
+
"const",
|
|
66
|
+
"continue",
|
|
67
|
+
"default",
|
|
68
|
+
"do",
|
|
69
|
+
"double",
|
|
70
|
+
"else",
|
|
71
|
+
"enum",
|
|
72
|
+
"extends",
|
|
73
|
+
"final",
|
|
74
|
+
"finally",
|
|
75
|
+
"float",
|
|
76
|
+
"for",
|
|
77
|
+
"goto",
|
|
78
|
+
"if",
|
|
79
|
+
"implements",
|
|
80
|
+
"import",
|
|
81
|
+
"instanceof",
|
|
82
|
+
"int",
|
|
83
|
+
"interface",
|
|
84
|
+
"long",
|
|
85
|
+
"native",
|
|
86
|
+
"new",
|
|
87
|
+
"package",
|
|
88
|
+
"private",
|
|
89
|
+
"protected",
|
|
90
|
+
"public",
|
|
91
|
+
"return",
|
|
92
|
+
"short",
|
|
93
|
+
"static",
|
|
94
|
+
"super",
|
|
95
|
+
"switch",
|
|
96
|
+
"synchronized",
|
|
97
|
+
"this",
|
|
98
|
+
"throw",
|
|
99
|
+
"throws",
|
|
100
|
+
"transient",
|
|
101
|
+
"try",
|
|
102
|
+
"void",
|
|
103
|
+
"volatile",
|
|
104
|
+
"while",
|
|
105
|
+
// Reserved words for literal values
|
|
106
|
+
"true",
|
|
107
|
+
"false",
|
|
108
|
+
"null",
|
|
109
|
+
// Unused
|
|
110
|
+
"const",
|
|
111
|
+
"goto",
|
|
112
|
+
"strictfp",
|
|
113
|
+
];
|
|
34
114
|
function assertValidBundleId(value) {
|
|
35
115
|
_assert.default.match(value, IOS_BUNDLE_ID_REGEX, `The ios.bundleIdentifier defined in your Expo config is not formatted properly. Only alphanumeric characters, '.', '-', and '_' are allowed, and each '.' must be followed by a letter.`);
|
|
36
116
|
}
|
|
37
117
|
function assertValidPackage(value) {
|
|
38
|
-
_assert.default.match(value, ANDROID_PACKAGE_REGEX, `Invalid format of Android package name. Only alphanumeric characters, '.' and '_' are allowed, and each '.' must be followed by a letter.`);
|
|
118
|
+
_assert.default.match(value, ANDROID_PACKAGE_REGEX, `Invalid format of Android package name. Only alphanumeric characters, '.' and '_' are allowed, and each '.' must be followed by a letter. The Java keyword 'native' is not allowed.`);
|
|
39
119
|
}
|
|
40
120
|
async function getBundleIdWarningInternalAsync(bundleId) {
|
|
41
121
|
if (_env.env.EXPO_OFFLINE) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/validateApplicationId.ts"],"sourcesContent":["import assert from 'assert';\nimport chalk from 'chalk';\n\nimport { fetchAsync } from '../api/rest/client';\nimport { Log } from '../log';\nimport { env } from './env';\nimport { memoize } from './fn';\nimport { learnMore } from './link';\nimport { isUrlAvailableAsync } from './url';\n\nconst debug = require('debug')('expo:utils:validateApplicationId') as typeof console.log;\n\nconst IOS_BUNDLE_ID_REGEX = /^[a-zA-Z0-9-.]+$/;\nconst ANDROID_PACKAGE_REGEX = /^[a-zA-Z][a-zA-Z0-9_]*(\\.[a-zA-Z][a-zA-Z0-9_]*)+$/;\n\n/** Validate an iOS bundle identifier. */\nexport function validateBundleId(value: string): boolean {\n return IOS_BUNDLE_ID_REGEX.test(value);\n}\n\n/** Validate an Android package name. */\nexport function validatePackage(value: string): boolean {\n return ANDROID_PACKAGE_REGEX.test(value);\n}\n\nexport function assertValidBundleId(value: string) {\n assert.match(\n value,\n IOS_BUNDLE_ID_REGEX,\n `The ios.bundleIdentifier defined in your Expo config is not formatted properly. Only alphanumeric characters, '.', '-', and '_' are allowed, and each '.' must be followed by a letter.`\n );\n}\n\nexport function assertValidPackage(value: string) {\n assert.match(\n value,\n ANDROID_PACKAGE_REGEX,\n `Invalid format of Android package name. Only alphanumeric characters, '.' and '_' are allowed, and each '.' must be followed by a letter.`\n );\n}\n\n/** @private */\nexport async function getBundleIdWarningInternalAsync(bundleId: string): Promise<string | null> {\n if (env.EXPO_OFFLINE) {\n Log.warn('Skipping Apple bundle identifier reservation validation in offline-mode.');\n return null;\n }\n\n if (!(await isUrlAvailableAsync('itunes.apple.com'))) {\n debug(\n `Couldn't connect to iTunes Store to check bundle ID ${bundleId}. itunes.apple.com may be down.`\n );\n // If no network, simply skip the warnings since they'll just lead to more confusion.\n return null;\n }\n\n const url = `http://itunes.apple.com/lookup?bundleId=${bundleId}`;\n try {\n debug(`Checking iOS bundle ID '${bundleId}' at: ${url}`);\n const response = await fetchAsync(url);\n const json = await response.json();\n if (json.resultCount > 0) {\n const firstApp = json.results[0];\n return formatInUseWarning(firstApp.trackName, firstApp.sellerName, bundleId);\n }\n } catch (error: any) {\n debug(`Error checking bundle ID ${bundleId}: ${error.message}`);\n // Error fetching itunes data.\n }\n return null;\n}\n\n/** Returns a warning message if an iOS bundle identifier is potentially already in use. */\nexport const getBundleIdWarningAsync = memoize(getBundleIdWarningInternalAsync);\n\n/** @private */\nexport async function getPackageNameWarningInternalAsync(\n packageName: string\n): Promise<string | null> {\n if (env.EXPO_OFFLINE) {\n Log.warn('Skipping Android package name reservation validation in offline-mode.');\n return null;\n }\n\n if (!(await isUrlAvailableAsync('play.google.com'))) {\n debug(\n `Couldn't connect to Play Store to check package name ${packageName}. play.google.com may be down.`\n );\n // If no network, simply skip the warnings since they'll just lead to more confusion.\n return null;\n }\n\n const url = `https://play.google.com/store/apps/details?id=${packageName}`;\n try {\n debug(`Checking Android package name '${packageName}' at: ${url}`);\n const response = await fetchAsync(url);\n // If the page exists, then warn the user.\n if (response.status === 200) {\n // There is no JSON API for the Play Store so we can't concisely\n // locate the app name and developer to match the iOS warning.\n return `⚠️ The package ${chalk.bold(packageName)} is already in use. ${chalk.dim(\n learnMore(url)\n )}`;\n }\n } catch (error: any) {\n // Error fetching play store data or the page doesn't exist.\n debug(`Error checking package name ${packageName}: ${error.message}`);\n }\n return null;\n}\n\nfunction formatInUseWarning(appName: string, author: string, id: string): string {\n return `⚠️ The app ${chalk.bold(appName)} by ${chalk.italic(\n author\n )} is already using ${chalk.bold(id)}`;\n}\n\n/** Returns a warning message if an Android package name is potentially already in use. */\nexport const getPackageNameWarningAsync = memoize(getPackageNameWarningInternalAsync);\n"],"names":["validateBundleId","validatePackage","assertValidBundleId","assertValidPackage","getBundleIdWarningInternalAsync","getPackageNameWarningInternalAsync","debug","require","IOS_BUNDLE_ID_REGEX","ANDROID_PACKAGE_REGEX","value","test","assert","match","bundleId","env","EXPO_OFFLINE","Log","warn","isUrlAvailableAsync","url","response","fetchAsync","json","resultCount","firstApp","results","formatInUseWarning","trackName","sellerName","error","message","getBundleIdWarningAsync","memoize","packageName","status","chalk","bold","dim","learnMore","appName","author","id","italic","getPackageNameWarningAsync"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/validateApplicationId.ts"],"sourcesContent":["import assert from 'assert';\nimport chalk from 'chalk';\n\nimport { env } from './env';\nimport { memoize } from './fn';\nimport { learnMore } from './link';\nimport { isUrlAvailableAsync } from './url';\nimport { fetchAsync } from '../api/rest/client';\nimport { Log } from '../log';\n\nconst debug = require('debug')('expo:utils:validateApplicationId') as typeof console.log;\n\nconst IOS_BUNDLE_ID_REGEX = /^[a-zA-Z0-9-.]+$/;\nconst ANDROID_PACKAGE_REGEX = /^(?!.*\\bnative\\b)[a-zA-Z][a-zA-Z0-9_]*(\\.[a-zA-Z][a-zA-Z0-9_]*)+$/;\n\n/** Validate an iOS bundle identifier. */\nexport function validateBundleId(value: string): boolean {\n return IOS_BUNDLE_ID_REGEX.test(value);\n}\n\n/** Validate an Android package name. */\nexport function validatePackage(value: string): boolean {\n return validatePackageWithWarning(value) === true;\n}\n\n/** Validate an Android package name and return the reason if invalid. */\nexport function validatePackageWithWarning(value: string): true | string {\n const parts = value.split('.');\n for (const segment of parts) {\n if (RESERVED_ANDROID_PACKAGE_NAME_SEGMENTS.includes(segment)) {\n return `\"${segment}\" is a reserved Java keyword.`;\n }\n }\n if (parts.length < 2) {\n return `Package name must contain more than one segment, separated by \".\", e.g. com.${value}`;\n }\n if (!ANDROID_PACKAGE_REGEX.test(value)) {\n return 'Invalid characters in Android package name. Only alphanumeric characters, \".\" and \"_\" are allowed, and each \".\" must be followed by a letter or number.';\n }\n\n return true;\n}\n\n// https://en.wikipedia.org/wiki/List_of_Java_keywords\n// Running the following in the console and pruning the \"Reserved Identifiers\" section:\n// [...document.querySelectorAll('dl > dt > code')].map(node => node.innerText)\nconst RESERVED_ANDROID_PACKAGE_NAME_SEGMENTS = [\n // List of Java keywords\n '_',\n 'abstract',\n 'assert',\n 'boolean',\n 'break',\n 'byte',\n 'case',\n 'catch',\n 'char',\n 'class',\n 'const',\n 'continue',\n 'default',\n 'do',\n 'double',\n 'else',\n 'enum',\n 'extends',\n 'final',\n 'finally',\n 'float',\n 'for',\n 'goto',\n 'if',\n 'implements',\n 'import',\n 'instanceof',\n 'int',\n 'interface',\n 'long',\n 'native',\n 'new',\n 'package',\n 'private',\n 'protected',\n 'public',\n 'return',\n 'short',\n 'static',\n 'super',\n 'switch',\n 'synchronized',\n 'this',\n 'throw',\n 'throws',\n 'transient',\n 'try',\n 'void',\n 'volatile',\n 'while',\n // Reserved words for literal values\n 'true',\n 'false',\n 'null',\n // Unused\n 'const',\n 'goto',\n 'strictfp',\n];\n\nexport function assertValidBundleId(value: string) {\n assert.match(\n value,\n IOS_BUNDLE_ID_REGEX,\n `The ios.bundleIdentifier defined in your Expo config is not formatted properly. Only alphanumeric characters, '.', '-', and '_' are allowed, and each '.' must be followed by a letter.`\n );\n}\n\nexport function assertValidPackage(value: string) {\n assert.match(\n value,\n ANDROID_PACKAGE_REGEX,\n `Invalid format of Android package name. Only alphanumeric characters, '.' and '_' are allowed, and each '.' must be followed by a letter. The Java keyword 'native' is not allowed.`\n );\n}\n\n/** @private */\nexport async function getBundleIdWarningInternalAsync(bundleId: string): Promise<string | null> {\n if (env.EXPO_OFFLINE) {\n Log.warn('Skipping Apple bundle identifier reservation validation in offline-mode.');\n return null;\n }\n\n if (!(await isUrlAvailableAsync('itunes.apple.com'))) {\n debug(\n `Couldn't connect to iTunes Store to check bundle ID ${bundleId}. itunes.apple.com may be down.`\n );\n // If no network, simply skip the warnings since they'll just lead to more confusion.\n return null;\n }\n\n const url = `http://itunes.apple.com/lookup?bundleId=${bundleId}`;\n try {\n debug(`Checking iOS bundle ID '${bundleId}' at: ${url}`);\n const response = await fetchAsync(url);\n const json = await response.json();\n if (json.resultCount > 0) {\n const firstApp = json.results[0];\n return formatInUseWarning(firstApp.trackName, firstApp.sellerName, bundleId);\n }\n } catch (error: any) {\n debug(`Error checking bundle ID ${bundleId}: ${error.message}`);\n // Error fetching itunes data.\n }\n return null;\n}\n\n/** Returns a warning message if an iOS bundle identifier is potentially already in use. */\nexport const getBundleIdWarningAsync = memoize(getBundleIdWarningInternalAsync);\n\n/** @private */\nexport async function getPackageNameWarningInternalAsync(\n packageName: string\n): Promise<string | null> {\n if (env.EXPO_OFFLINE) {\n Log.warn('Skipping Android package name reservation validation in offline-mode.');\n return null;\n }\n\n if (!(await isUrlAvailableAsync('play.google.com'))) {\n debug(\n `Couldn't connect to Play Store to check package name ${packageName}. play.google.com may be down.`\n );\n // If no network, simply skip the warnings since they'll just lead to more confusion.\n return null;\n }\n\n const url = `https://play.google.com/store/apps/details?id=${packageName}`;\n try {\n debug(`Checking Android package name '${packageName}' at: ${url}`);\n const response = await fetchAsync(url);\n // If the page exists, then warn the user.\n if (response.status === 200) {\n // There is no JSON API for the Play Store so we can't concisely\n // locate the app name and developer to match the iOS warning.\n return `⚠️ The package ${chalk.bold(packageName)} is already in use. ${chalk.dim(\n learnMore(url)\n )}`;\n }\n } catch (error: any) {\n // Error fetching play store data or the page doesn't exist.\n debug(`Error checking package name ${packageName}: ${error.message}`);\n }\n return null;\n}\n\nfunction formatInUseWarning(appName: string, author: string, id: string): string {\n return `⚠️ The app ${chalk.bold(appName)} by ${chalk.italic(\n author\n )} is already using ${chalk.bold(id)}`;\n}\n\n/** Returns a warning message if an Android package name is potentially already in use. */\nexport const getPackageNameWarningAsync = memoize(getPackageNameWarningInternalAsync);\n"],"names":["validateBundleId","validatePackage","validatePackageWithWarning","assertValidBundleId","assertValidPackage","getBundleIdWarningInternalAsync","getPackageNameWarningInternalAsync","debug","require","IOS_BUNDLE_ID_REGEX","ANDROID_PACKAGE_REGEX","value","test","parts","split","segment","RESERVED_ANDROID_PACKAGE_NAME_SEGMENTS","includes","length","assert","match","bundleId","env","EXPO_OFFLINE","Log","warn","isUrlAvailableAsync","url","response","fetchAsync","json","resultCount","firstApp","results","formatInUseWarning","trackName","sellerName","error","message","getBundleIdWarningAsync","memoize","packageName","status","chalk","bold","dim","learnMore","appName","author","id","italic","getPackageNameWarningAsync"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "The Expo CLI",
|
|
5
5
|
"main": "build/bin/cli",
|
|
6
6
|
"bin": {
|
|
@@ -39,17 +39,17 @@
|
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@babel/runtime": "^7.20.0",
|
|
41
41
|
"@expo/code-signing-certificates": "0.0.5",
|
|
42
|
-
"@expo/config": "~8.
|
|
43
|
-
"@expo/config-plugins": "~7.
|
|
44
|
-
"@expo/dev-server": "0.
|
|
42
|
+
"@expo/config": "~8.3.0",
|
|
43
|
+
"@expo/config-plugins": "~7.4.0",
|
|
44
|
+
"@expo/dev-server": "0.7.0",
|
|
45
45
|
"@expo/devcert": "^1.0.0",
|
|
46
46
|
"@expo/env": "~0.1.0",
|
|
47
47
|
"@expo/json-file": "^8.2.37",
|
|
48
|
-
"@expo/metro-config": "~0.
|
|
48
|
+
"@expo/metro-config": "~0.12.0",
|
|
49
49
|
"@expo/osascript": "^2.0.31",
|
|
50
50
|
"@expo/package-manager": "~1.0.0",
|
|
51
51
|
"@expo/plist": "^0.0.20",
|
|
52
|
-
"@expo/prebuild-config": "6.
|
|
52
|
+
"@expo/prebuild-config": "6.4.0",
|
|
53
53
|
"@expo/rudder-sdk-node": "1.1.1",
|
|
54
54
|
"@expo/spawn-async": "1.5.0",
|
|
55
55
|
"@expo/xcpretty": "^4.2.1",
|
|
@@ -68,6 +68,7 @@
|
|
|
68
68
|
"freeport-async": "2.0.0",
|
|
69
69
|
"fs-extra": "~8.1.0",
|
|
70
70
|
"getenv": "^1.0.0",
|
|
71
|
+
"glob": "^7.1.7",
|
|
71
72
|
"graphql": "15.8.0",
|
|
72
73
|
"graphql-tag": "^2.10.1",
|
|
73
74
|
"https-proxy-agent": "^5.0.1",
|
|
@@ -75,8 +76,8 @@
|
|
|
75
76
|
"is-root": "^2.1.0",
|
|
76
77
|
"js-yaml": "^3.13.1",
|
|
77
78
|
"json-schema-deref-sync": "^0.13.0",
|
|
78
|
-
"md5-file": "^3.2.3",
|
|
79
79
|
"md5hex": "^1.0.0",
|
|
80
|
+
"minimatch": "^3.0.4",
|
|
80
81
|
"minipass": "3.1.6",
|
|
81
82
|
"node-fetch": "^2.6.7",
|
|
82
83
|
"node-forge": "^1.3.1",
|
|
@@ -142,7 +143,9 @@
|
|
|
142
143
|
"expo-module-scripts": "^3.0.0",
|
|
143
144
|
"find-process": "^1.4.7",
|
|
144
145
|
"klaw-sync": "^6.0.0",
|
|
146
|
+
"memfs": "^3.2.0",
|
|
145
147
|
"nock": "~13.2.2",
|
|
148
|
+
"node-html-parser": "^6.1.5",
|
|
146
149
|
"nullthrows": "^1.1.1",
|
|
147
150
|
"structured-headers": "^0.4.1",
|
|
148
151
|
"taskr": "1.1.0",
|
|
@@ -150,5 +153,5 @@
|
|
|
150
153
|
"jest-runner-tsd": "^6.0.0",
|
|
151
154
|
"tsd": "^0.28.1"
|
|
152
155
|
},
|
|
153
|
-
"gitHead": "
|
|
156
|
+
"gitHead": "79607a7325f47aa17c36d266100d09a4ff2cc544"
|
|
154
157
|
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
exports.signClassicExpoGoManifestAsync = signClassicExpoGoManifestAsync;
|
|
6
|
-
var _client = require("./rest/client");
|
|
7
|
-
var _actions = require("./user/actions");
|
|
8
|
-
var _user = require("./user/user");
|
|
9
|
-
async function signClassicExpoGoManifestAsync(manifest) {
|
|
10
|
-
await (0, _actions).ensureLoggedInAsync();
|
|
11
|
-
var _owner;
|
|
12
|
-
const res = await (0, _client).fetchAsync("manifest/sign", {
|
|
13
|
-
method: "POST",
|
|
14
|
-
body: JSON.stringify({
|
|
15
|
-
args: {
|
|
16
|
-
remoteUsername: (_owner = manifest.owner) != null ? _owner : (0, _user).getActorDisplayName(await (0, _user).getUserAsync()),
|
|
17
|
-
remotePackageName: manifest.slug
|
|
18
|
-
},
|
|
19
|
-
manifest: manifest
|
|
20
|
-
})
|
|
21
|
-
});
|
|
22
|
-
const { data } = await res.json();
|
|
23
|
-
return data.response;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
//# sourceMappingURL=signManifest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/api/signManifest.ts"],"sourcesContent":["import { ExpoAppManifest } from '@expo/config';\nimport { JSONObject } from '@expo/json-file';\n\nimport { fetchAsync } from './rest/client';\nimport { ensureLoggedInAsync } from './user/actions';\nimport { getActorDisplayName, getUserAsync } from './user/user';\n\n/** Sign a classic manifest to access secure features in sandboxed environments like Expo Go. */\nexport async function signClassicExpoGoManifestAsync(\n manifest: Partial<ExpoAppManifest>\n): Promise<string> {\n await ensureLoggedInAsync();\n const res = await fetchAsync('manifest/sign', {\n method: 'POST',\n body: JSON.stringify({\n args: {\n remoteUsername: manifest.owner ?? getActorDisplayName(await getUserAsync()),\n remotePackageName: manifest.slug,\n },\n manifest: manifest as JSONObject,\n }),\n });\n const { data } = await res.json();\n return data.response;\n}\n"],"names":["signClassicExpoGoManifestAsync","manifest","ensureLoggedInAsync","res","fetchAsync","method","body","JSON","stringify","args","remoteUsername","owner","getActorDisplayName","getUserAsync","remotePackageName","slug","data","json","response"],"mappings":"AAAA;;;;QAQsBA,8BAA8B,GAA9BA,8BAA8B;AALzB,IAAA,OAAe,WAAf,eAAe,CAAA;AACN,IAAA,QAAgB,WAAhB,gBAAgB,CAAA;AACF,IAAA,KAAa,WAAb,aAAa,CAAA;AAGxD,eAAeA,8BAA8B,CAClDC,QAAkC,EACjB;IACjB,MAAMC,CAAAA,GAAAA,QAAmB,AAAE,CAAA,oBAAF,EAAE,CAAC;QAKND,MAAc;IAJpC,MAAME,GAAG,GAAG,MAAMC,CAAAA,GAAAA,OAAU,AAS1B,CAAA,WAT0B,CAAC,eAAe,EAAE;QAC5CC,MAAM,EAAE,MAAM;QACdC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;YACnBC,IAAI,EAAE;gBACJC,cAAc,EAAET,CAAAA,MAAc,GAAdA,QAAQ,CAACU,KAAK,YAAdV,MAAc,GAAIW,CAAAA,GAAAA,KAAmB,AAAsB,CAAA,oBAAtB,CAAC,MAAMC,CAAAA,GAAAA,KAAY,AAAE,CAAA,aAAF,EAAE,CAAC;gBAC3EC,iBAAiB,EAAEb,QAAQ,CAACc,IAAI;aACjC;YACDd,QAAQ,EAAEA,QAAQ;SACnB,CAAC;KACH,CAAC,AAAC;IACH,MAAM,EAAEe,IAAI,CAAA,EAAE,GAAG,MAAMb,GAAG,CAACc,IAAI,EAAE,AAAC;IAClC,OAAOD,IAAI,CAACE,QAAQ,CAAC;CACtB"}
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
var _chalk = _interopRequireDefault(require("chalk"));
|
|
6
|
-
var _os = _interopRequireDefault(require("os"));
|
|
7
|
-
var _settings = require("../../../api/settings");
|
|
8
|
-
var _signManifest = require("../../../api/signManifest");
|
|
9
|
-
var _userSettings = _interopRequireDefault(require("../../../api/user/UserSettings"));
|
|
10
|
-
var _user = require("../../../api/user/user");
|
|
11
|
-
var Log = _interopRequireWildcard(require("../../../log"));
|
|
12
|
-
var _rudderstackClient = require("../../../utils/analytics/rudderstackClient");
|
|
13
|
-
var _env = require("../../../utils/env");
|
|
14
|
-
var _fn = require("../../../utils/fn");
|
|
15
|
-
var _link = require("../../../utils/link");
|
|
16
|
-
var _url = require("../../../utils/url");
|
|
17
|
-
var _manifestMiddleware = require("./ManifestMiddleware");
|
|
18
|
-
var _resolvePlatform = require("./resolvePlatform");
|
|
19
|
-
function _interopRequireDefault(obj) {
|
|
20
|
-
return obj && obj.__esModule ? obj : {
|
|
21
|
-
default: obj
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
function _interopRequireWildcard(obj) {
|
|
25
|
-
if (obj && obj.__esModule) {
|
|
26
|
-
return obj;
|
|
27
|
-
} else {
|
|
28
|
-
var newObj = {};
|
|
29
|
-
if (obj != null) {
|
|
30
|
-
for(var key in obj){
|
|
31
|
-
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
32
|
-
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
33
|
-
if (desc.get || desc.set) {
|
|
34
|
-
Object.defineProperty(newObj, key, desc);
|
|
35
|
-
} else {
|
|
36
|
-
newObj[key] = obj[key];
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
newObj.default = obj;
|
|
42
|
-
return newObj;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
const debug = require("debug")("expo:start:server:middleware:ClassicManifestMiddleware");
|
|
46
|
-
class ClassicManifestMiddleware extends _manifestMiddleware.ManifestMiddleware {
|
|
47
|
-
getParsedHeaders(req) {
|
|
48
|
-
const platform = (0, _resolvePlatform).parsePlatformHeader(req) || "ios";
|
|
49
|
-
(0, _resolvePlatform).assertRuntimePlatform(platform);
|
|
50
|
-
return {
|
|
51
|
-
platform,
|
|
52
|
-
acceptSignature: this.getLegacyAcceptSignatureHeader(req),
|
|
53
|
-
hostname: (0, _url).stripPort(req.headers["host"])
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* This header is specified as a string "true" or "false", in one of two headers:
|
|
58
|
-
* - exponent-accept-signature
|
|
59
|
-
* - expo-accept-signature
|
|
60
|
-
*/ getLegacyAcceptSignatureHeader(req) {
|
|
61
|
-
return req.headers["exponent-accept-signature"] === "true" || req.headers["expo-accept-signature"] === "true";
|
|
62
|
-
}
|
|
63
|
-
async _getManifestResponseAsync({ acceptSignature , ...requestOptions }) {
|
|
64
|
-
const { exp , hostUri , expoGoConfig , bundleUrl } = await this._resolveProjectSettingsAsync(requestOptions);
|
|
65
|
-
const manifest = {
|
|
66
|
-
...exp,
|
|
67
|
-
...expoGoConfig,
|
|
68
|
-
hostUri,
|
|
69
|
-
bundleUrl
|
|
70
|
-
};
|
|
71
|
-
// Gather packager and host info
|
|
72
|
-
const hostInfo = await createHostInfoAsync();
|
|
73
|
-
const headers = new Map();
|
|
74
|
-
headers.set("Exponent-Server", JSON.stringify(hostInfo));
|
|
75
|
-
// Create the final string
|
|
76
|
-
const body = await this._fetchComputedManifestStringAsync({
|
|
77
|
-
manifest,
|
|
78
|
-
hostId: hostInfo.host,
|
|
79
|
-
acceptSignature
|
|
80
|
-
});
|
|
81
|
-
return {
|
|
82
|
-
body,
|
|
83
|
-
version: manifest.sdkVersion,
|
|
84
|
-
headers
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
trackManifest(version) {
|
|
88
|
-
// Log analytics
|
|
89
|
-
(0, _rudderstackClient).logEventAsync("Serve Manifest", {
|
|
90
|
-
sdkVersion: version != null ? version : null
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
/** Exposed for testing. */ async _getManifestStringAsync({ manifest , hostId , acceptSignature }) {
|
|
94
|
-
const currentSession = await (0, _user).getUserAsync();
|
|
95
|
-
if (!currentSession || _env.env.EXPO_OFFLINE) {
|
|
96
|
-
manifest.id = `@${_user.ANONYMOUS_USERNAME}/${manifest.slug}-${hostId}`;
|
|
97
|
-
}
|
|
98
|
-
if (!acceptSignature) {
|
|
99
|
-
return JSON.stringify(manifest);
|
|
100
|
-
} else if (!currentSession || _env.env.EXPO_OFFLINE) {
|
|
101
|
-
return getUnsignedManifestString(manifest);
|
|
102
|
-
} else {
|
|
103
|
-
return this.getSignedManifestStringAsync(manifest);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
getSignedManifestStringAsync = (0, _fn).memoize(_signManifest.signClassicExpoGoManifestAsync);
|
|
107
|
-
/** Exposed for testing. */ async _fetchComputedManifestStringAsync(props) {
|
|
108
|
-
try {
|
|
109
|
-
return await this._getManifestStringAsync(props);
|
|
110
|
-
} catch (error) {
|
|
111
|
-
debug(`Error getting manifest:`, error);
|
|
112
|
-
if (error.code === "UNAUTHORIZED" && props.manifest.owner) {
|
|
113
|
-
// Don't have permissions for signing, warn and enable offline mode.
|
|
114
|
-
this.addSigningDisabledWarning(`This project belongs to ${_chalk.default.bold(`@${props.manifest.owner}`)} and you have not been granted the appropriate permissions.\n` + `Please request access from an admin of @${props.manifest.owner} or change the "owner" field to an account you belong to.\n` + (0, _link).learnMore("https://docs.expo.dev/versions/latest/config/app/#owner"));
|
|
115
|
-
(0, _settings).disableNetwork();
|
|
116
|
-
return await this._getManifestStringAsync(props);
|
|
117
|
-
} else if (error.code === "ENOTFOUND" || error.code === "OFFLINE") {
|
|
118
|
-
// Got a DNS error, i.e. can't access exp.host, warn and enable offline mode.
|
|
119
|
-
this.addSigningDisabledWarning(`Could not reach Expo servers, please check if you can access ${error.hostname || "exp.host"}.`);
|
|
120
|
-
(0, _settings).disableNetwork();
|
|
121
|
-
return await this._getManifestStringAsync(props);
|
|
122
|
-
} else {
|
|
123
|
-
throw error;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
addSigningDisabledWarning = (0, _fn).memoize((reason)=>{
|
|
128
|
-
Log.warn(`${reason}\nFalling back to offline mode.`);
|
|
129
|
-
// For the memo
|
|
130
|
-
return reason;
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
exports.ClassicManifestMiddleware = ClassicManifestMiddleware;
|
|
134
|
-
// Passed to Expo Go and registered as telemetry.
|
|
135
|
-
// TODO: it's unclear why we don't just send it from the CLI.
|
|
136
|
-
async function createHostInfoAsync() {
|
|
137
|
-
return {
|
|
138
|
-
host: await _userSettings.default.getAnonymousIdentifierAsync(),
|
|
139
|
-
server: "expo",
|
|
140
|
-
// Defined in the build step
|
|
141
|
-
serverVersion: "0.11.1",
|
|
142
|
-
serverDriver: _manifestMiddleware.DEVELOPER_TOOL,
|
|
143
|
-
serverOS: _os.default.platform(),
|
|
144
|
-
serverOSVersion: _os.default.release()
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
function getUnsignedManifestString(manifest) {
|
|
148
|
-
const unsignedManifest = {
|
|
149
|
-
manifestString: JSON.stringify(manifest),
|
|
150
|
-
signature: "UNSIGNED"
|
|
151
|
-
};
|
|
152
|
-
return JSON.stringify(unsignedManifest);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
//# sourceMappingURL=ClassicManifestMiddleware.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/start/server/middleware/ClassicManifestMiddleware.ts"],"sourcesContent":["import { ExpoAppManifest, ExpoConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport os from 'os';\n\nimport { disableNetwork } from '../../../api/settings';\nimport { signClassicExpoGoManifestAsync } from '../../../api/signManifest';\nimport UserSettings from '../../../api/user/UserSettings';\nimport { ANONYMOUS_USERNAME, getUserAsync } from '../../../api/user/user';\nimport * as Log from '../../../log';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { env } from '../../../utils/env';\nimport { memoize } from '../../../utils/fn';\nimport { learnMore } from '../../../utils/link';\nimport { stripPort } from '../../../utils/url';\nimport {\n DEVELOPER_TOOL,\n HostInfo,\n ManifestMiddleware,\n ManifestRequestInfo,\n} from './ManifestMiddleware';\nimport { assertRuntimePlatform, parsePlatformHeader } from './resolvePlatform';\nimport { ServerHeaders, ServerRequest } from './server.types';\n\ntype SignManifestProps = {\n manifest: ExpoAppManifest;\n hostId: string;\n acceptSignature: boolean;\n};\n\ninterface ClassicManifestRequestInfo extends ManifestRequestInfo {\n /** Should return the signed manifest. */\n acceptSignature: boolean;\n}\n\nconst debug = require('debug')(\n 'expo:start:server:middleware:ClassicManifestMiddleware'\n) as typeof console.log;\n\nexport class ClassicManifestMiddleware extends ManifestMiddleware<ClassicManifestRequestInfo> {\n public getParsedHeaders(req: ServerRequest): ClassicManifestRequestInfo {\n const platform = parsePlatformHeader(req) || 'ios';\n assertRuntimePlatform(platform);\n return {\n platform,\n acceptSignature: this.getLegacyAcceptSignatureHeader(req),\n hostname: stripPort(req.headers['host']),\n };\n }\n\n /**\n * This header is specified as a string \"true\" or \"false\", in one of two headers:\n * - exponent-accept-signature\n * - expo-accept-signature\n */\n private getLegacyAcceptSignatureHeader(req: ServerRequest): boolean {\n return (\n req.headers['exponent-accept-signature'] === 'true' ||\n req.headers['expo-accept-signature'] === 'true'\n );\n }\n\n public async _getManifestResponseAsync({\n acceptSignature,\n ...requestOptions\n }: ClassicManifestRequestInfo): Promise<{\n body: string;\n version: string;\n headers: ServerHeaders;\n }> {\n const { exp, hostUri, expoGoConfig, bundleUrl } = await this._resolveProjectSettingsAsync(\n requestOptions\n );\n\n const manifest: ExpoAppManifest = {\n ...(exp as ExpoAppManifest),\n ...expoGoConfig,\n hostUri,\n bundleUrl,\n };\n\n // Gather packager and host info\n const hostInfo = await createHostInfoAsync();\n\n const headers = new Map<string, any>();\n headers.set('Exponent-Server', JSON.stringify(hostInfo));\n\n // Create the final string\n const body = await this._fetchComputedManifestStringAsync({\n manifest,\n hostId: hostInfo.host,\n acceptSignature,\n });\n\n return {\n body,\n version: manifest.sdkVersion,\n headers,\n };\n }\n\n protected trackManifest(version?: string) {\n // Log analytics\n logEventAsync('Serve Manifest', {\n sdkVersion: version ?? null,\n });\n }\n\n /** Exposed for testing. */\n async _getManifestStringAsync({\n manifest,\n hostId,\n acceptSignature,\n }: SignManifestProps): Promise<string> {\n const currentSession = await getUserAsync();\n if (!currentSession || env.EXPO_OFFLINE) {\n manifest.id = `@${ANONYMOUS_USERNAME}/${manifest.slug}-${hostId}`;\n }\n if (!acceptSignature) {\n return JSON.stringify(manifest);\n } else if (!currentSession || env.EXPO_OFFLINE) {\n return getUnsignedManifestString(manifest);\n } else {\n return this.getSignedManifestStringAsync(manifest);\n }\n }\n\n private getSignedManifestStringAsync = memoize(signClassicExpoGoManifestAsync);\n\n /** Exposed for testing. */\n async _fetchComputedManifestStringAsync(props: SignManifestProps): Promise<string> {\n try {\n return await this._getManifestStringAsync(props);\n } catch (error: any) {\n debug(`Error getting manifest:`, error);\n if (error.code === 'UNAUTHORIZED' && props.manifest.owner) {\n // Don't have permissions for signing, warn and enable offline mode.\n this.addSigningDisabledWarning(\n `This project belongs to ${chalk.bold(\n `@${props.manifest.owner}`\n )} and you have not been granted the appropriate permissions.\\n` +\n `Please request access from an admin of @${props.manifest.owner} or change the \"owner\" field to an account you belong to.\\n` +\n learnMore('https://docs.expo.dev/versions/latest/config/app/#owner')\n );\n\n disableNetwork();\n return await this._getManifestStringAsync(props);\n } else if (error.code === 'ENOTFOUND' || error.code === 'OFFLINE') {\n // Got a DNS error, i.e. can't access exp.host, warn and enable offline mode.\n this.addSigningDisabledWarning(\n `Could not reach Expo servers, please check if you can access ${\n error.hostname || 'exp.host'\n }.`\n );\n\n disableNetwork();\n return await this._getManifestStringAsync(props);\n } else {\n throw error;\n }\n }\n }\n\n private addSigningDisabledWarning = memoize((reason: string) => {\n Log.warn(`${reason}\\nFalling back to offline mode.`);\n // For the memo\n return reason;\n });\n}\n\n// Passed to Expo Go and registered as telemetry.\n// TODO: it's unclear why we don't just send it from the CLI.\nasync function createHostInfoAsync(): Promise<HostInfo> {\n return {\n host: await UserSettings.getAnonymousIdentifierAsync(),\n server: 'expo',\n // Defined in the build step\n serverVersion: process.env.__EXPO_VERSION!,\n serverDriver: DEVELOPER_TOOL,\n serverOS: os.platform(),\n serverOSVersion: os.release(),\n };\n}\n\nfunction getUnsignedManifestString(manifest: ExpoConfig) {\n const unsignedManifest = {\n manifestString: JSON.stringify(manifest),\n signature: 'UNSIGNED',\n };\n return JSON.stringify(unsignedManifest);\n}\n"],"names":["Log","debug","require","ClassicManifestMiddleware","ManifestMiddleware","getParsedHeaders","req","platform","parsePlatformHeader","assertRuntimePlatform","acceptSignature","getLegacyAcceptSignatureHeader","hostname","stripPort","headers","_getManifestResponseAsync","requestOptions","exp","hostUri","expoGoConfig","bundleUrl","_resolveProjectSettingsAsync","manifest","hostInfo","createHostInfoAsync","Map","set","JSON","stringify","body","_fetchComputedManifestStringAsync","hostId","host","version","sdkVersion","trackManifest","logEventAsync","_getManifestStringAsync","currentSession","getUserAsync","env","EXPO_OFFLINE","id","ANONYMOUS_USERNAME","slug","getUnsignedManifestString","getSignedManifestStringAsync","memoize","signClassicExpoGoManifestAsync","props","error","code","owner","addSigningDisabledWarning","chalk","bold","learnMore","disableNetwork","reason","warn","UserSettings","getAnonymousIdentifierAsync","server","serverVersion","process","__EXPO_VERSION","serverDriver","DEVELOPER_TOOL","serverOS","os","serverOSVersion","release","unsignedManifest","manifestString","signature"],"mappings":"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"}
|