diff --git a/build/index.js b/build/index.js index 5f4fb61..40160a1 100644 --- a/build/index.js +++ b/build/index.js @@ -21687,6 +21687,13 @@ function copyLink (resolvedSrc, dest, cb) { module.exports = copy +/***/ }), + +/***/ 1191: +/***/ (function(module) { + +module.exports = require("querystring"); + /***/ }), /***/ 1217: @@ -189338,17 +189345,32 @@ exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); exports.createQRCodeURL = void 0; +const url_1 = __webpack_require__(8835); +const querystring_1 = __importDefault(__webpack_require__(1191)); const config_1 = __webpack_require__(5641); -const generateQRCodeBaseURLForGo = 'https://api.qrserver.com/v1/create-qr-code'; -const generateQRCodeBaseURLForBare = 'https://us-central1-exponentjs.cloudfunctions.net'; +function getExpoGoParams(manifestURL) { + const url = new url_1.URL(manifestURL); + const [owner, slug] = url.pathname.replace('/@', '').split('/', 2); + return { + owner, + slug, + host: url.hostname, + releaseChannel: url.searchParams.get('release-channel') || undefined, + }; +} +const generateQRCodeBaseURL = 'https://us-central1-exponentjs.cloudfunctions.net/generateQRCode'; function createQRCodeURL(projectFlavor, manifestURL, scheme) { if (projectFlavor === config_1.ProjectFlavor.DevelopmentClient) { - return `${generateQRCodeBaseURLForBare}/generateQRCode/development-client?appScheme=${scheme}&url=${manifestURL}`; + return `${generateQRCodeBaseURL}/development-client?appScheme=${scheme}&url=${manifestURL}`; } else if (projectFlavor === config_1.ProjectFlavor.ExpoGo) { - return `${generateQRCodeBaseURLForGo}?size=512x512&data=${manifestURL.replace('https://', 'exp://')}`; + const params = getExpoGoParams(manifestURL); + return `${generateQRCodeBaseURL}/expo-go?${querystring_1.default.stringify(params)}`; } throw new Error('Unknown project flavor.'); } diff --git a/src/url.ts b/src/url.ts index fb2d6aa..a7983fa 100644 --- a/src/url.ts +++ b/src/url.ts @@ -1,13 +1,35 @@ +import { URL } from 'url'; +import qs from 'querystring'; + import { ProjectFlavor } from './config'; -const generateQRCodeBaseURLForGo = 'https://api.qrserver.com/v1/create-qr-code'; -const generateQRCodeBaseURLForBare = 'https://us-central1-exponentjs.cloudfunctions.net'; +type ExpoGoParams = { + host: string; + owner: string; + slug: string; + releaseChannel?: string; +}; + +function getExpoGoParams(manifestURL: string): ExpoGoParams { + const url = new URL(manifestURL); + const [owner, slug] = url.pathname.replace('/@', '').split('/', 2); + + return { + owner, + slug, + host: url.hostname, + releaseChannel: url.searchParams.get('release-channel') || undefined, + }; +} + +const generateQRCodeBaseURL = 'https://us-central1-exponentjs.cloudfunctions.net/generateQRCode'; export function createQRCodeURL(projectFlavor: ProjectFlavor, manifestURL: string, scheme: string): string { if (projectFlavor === ProjectFlavor.DevelopmentClient) { - return `${generateQRCodeBaseURLForBare}/generateQRCode/development-client?appScheme=${scheme}&url=${manifestURL}`; + return `${generateQRCodeBaseURL}/development-client?appScheme=${scheme}&url=${manifestURL}`; } else if (projectFlavor === ProjectFlavor.ExpoGo) { - return `${generateQRCodeBaseURLForGo}?size=512x512&data=${manifestURL.replace('https://', 'exp://')}`; + const params = getExpoGoParams(manifestURL); + return `${generateQRCodeBaseURL}/expo-go?${qs.stringify(params)}`; } throw new Error('Unknown project flavor.');