UNPKG

@expo/cli

Version:
101 lines (100 loc) 3.56 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: function() { return attachAtlasAsync; }, waitUntilAtlasExportIsReadyAsync: function() { return 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_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_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