You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
3.1 KiB

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createGetFileNameFromUrl = exports.getCompilerForPlatform = exports.getPlatformFromRequest = exports.getFileFromCompilerAsync = void 0;
const assert_1 = __importDefault(require("assert"));
// @ts-ignore
const util_1 = require("webpack-dev-middleware/lib/util");
/**
* Read a file from the webpack "compiler".
*
* @param compiler webpack compiler
* @param filename Like: `/Users/evanbacon/Documents/GitHub/lab/yolo47/web-build/index.bundle`
* @returns
*/
function getFileFromCompilerAsync(compiler, { fileName, platform }) {
const platformCompiler = getCompilerForPlatform(compiler, platform);
return new Promise((resolve, reject) => platformCompiler.outputFileSystem.readFile(fileName, (error, content) => {
if (error || !content) {
reject(error);
}
else {
resolve(content.toString());
}
}));
}
exports.getFileFromCompilerAsync = getFileFromCompilerAsync;
function getPlatformFromRequest(request) {
var _a, _b, _c, _d, _e;
// Use the expo updates spec to check the platform.
if (typeof request.headers['expo-platform'] === 'string') {
return (_a = request.headers['expo-platform']) !== null && _a !== void 0 ? _a : null;
}
// Get the platform from the query params cheaply.
return (_e = (_d = (_c = (_b = request === null || request === void 0 ? void 0 : request.url) === null || _b === void 0 ? void 0 : _b.match) === null || _c === void 0 ? void 0 : _c.call(_b, /[?|&]platform=(\w+)[&|\\]/)) === null || _d === void 0 ? void 0 : _d[1]) !== null && _e !== void 0 ? _e : null;
}
exports.getPlatformFromRequest = getPlatformFromRequest;
/**
* Get the Webpack compiler for a given platform.
* In Expo we distinguish platforms by using the `name` property of the Webpack config.
*
* When the platform is undefined, or the compiler cannot be identified, we assert.
*
* @param compiler
* @param platform
* @returns
*/
function getCompilerForPlatform(compiler, platform) {
if (!('compilers' in compiler)) {
return compiler;
}
(0, assert_1.default)(platform, 'platform must be provided for multi-compiler servers');
const platformCompiler = compiler.compilers.find(({ options }) => options.name === platform);
(0, assert_1.default)(platformCompiler, `Could not find Webpack compiler for platform: ${platform}`);
return platformCompiler;
}
exports.getCompilerForPlatform = getCompilerForPlatform;
function createGetFileNameFromUrl(compiler, publicPath = '/') {
return function ({ url, platform }) {
const platformCompiler = getCompilerForPlatform(compiler, platform);
const filename = (0, util_1.getFilenameFromUrl)(
// public path
publicPath, platformCompiler, url);
if (!filename) {
throw new Error(`Cannot get Webpack file name from url: ${url}`);
}
return filename;
};
}
exports.createGetFileNameFromUrl = createGetFileNameFromUrl;
//# sourceMappingURL=getFileAsync.js.map