Skip to content
This repository has been archived by the owner on Jul 3, 2024. It is now read-only.

feat: use Expo QR codes for Expo Go previews #9

Merged
merged 1 commit into from
Nov 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 26 additions & 4 deletions build/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -21687,6 +21687,13 @@ function copyLink (resolvedSrc, dest, cb) {
module.exports = copy


/***/ }),

/***/ 1191:
/***/ (function(module) {

module.exports = require("querystring");

/***/ }),

/***/ 1217:
Expand Down Expand Up @@ -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.');
}
Expand Down
30 changes: 26 additions & 4 deletions src/url.ts
Original file line number Diff line number Diff line change
@@ -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.');
Expand Down