UNPKG

@expo/cli

Version:
97 lines (96 loc) 3.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { attachAtlasAsync: ()=>attachAtlasAsync, waitUntilAtlasExportIsReadyAsync: ()=>waitUntilAtlasExportIsReadyAsync }); const _atlasPrerequisite = require("./AtlasPrerequisite"); const _env = require("../../../../utils/env"); const debug = require("debug")("expo:metro:debugging:attachAtlas"); async function attachAtlasAsync(options) { if (!_env.env.EXPO_UNSTABLE_ATLAS) { return; } debug("Atlas is enabled, initializing for this project..."); await new _atlasPrerequisite.AtlasPrerequisite(options.projectRoot).bootstrapAsync({ exp: options.exp }); return !options.isExporting ? attachAtlasToDevServer(options) : await attachAtlasToExport(options); } /** * Attach Atlas to the Metro bundler for development mode. * This includes attaching to Metro's middleware stack to host the Atlas UI. */ function attachAtlasToDevServer(options) { if (!options.middleware) { throw new Error("Expected middleware to be provided for Atlas when running in development mode"); } const atlas = importAtlasForDev(options.projectRoot); if (!atlas) { return debug("Atlas is not installed in the project, skipping initialization"); } const instance = atlas.createExpoAtlasMiddleware(options.metroConfig); options.middleware.use("/_expo/atlas", instance.middleware); debug("Attached Atlas middleware for development on: /_expo/atlas"); return instance; } function importAtlasForDev(projectRoot) { try { return require(require.resolve("expo-atlas/cli", { paths: [ projectRoot ] })); } catch (error) { debug("Failed to load Atlas from project:", error); return null; } } /** * Attach Atlas to the Metro bundler for exporting mode. * This only includes attaching the custom serializer to the Metro config. */ async function attachAtlasToExport(options) { const atlas = importAtlasForExport(options.projectRoot); if (!atlas) { return debug("Atlas is not installed in the project, skipping initialization"); } if (options.resetAtlasFile) { const filePath = await atlas.resetExpoAtlasFile(options.projectRoot); debug("(Re)created Atlas file at:", filePath); } atlas.withExpoAtlas(options.metroConfig); debug("Attached Atlas to Metro config for exporting"); } function importAtlasForExport(projectRoot) { try { return require(require.resolve("expo-atlas/metro", { paths: [ projectRoot ] })); } catch (error) { debug("Failed to load Atlas from project:", error); return null; } } async function waitUntilAtlasExportIsReadyAsync(projectRoot) { if (!_env.env.EXPO_UNSTABLE_ATLAS) return; const atlas = importAtlasForExport(projectRoot); if (!atlas) { return debug("Atlas is not loaded, cannot wait for export to finish"); } if (typeof atlas.waitUntilAtlasFileReady !== "function") { return debug("Atlas is outdated, cannot wait for export to finish"); } debug("Waiting for Atlas to finish exporting..."); await atlas.waitUntilAtlasFileReady(); debug("Atlas export is ready"); } //# sourceMappingURL=attachAtlas.js.map