From d6feb5a89af2bf3e44c781c502695fed6b6446cb Mon Sep 17 00:00:00 2001 From: Peter van der Zee Date: Wed, 10 Jan 2018 07:32:42 -0800 Subject: [PATCH] Moving source map stuff into its own package Reviewed By: rafeca Differential Revision: D6692262 fbshipit-source-id: 7476ec4c8ea45eaea6c19f410e98650ce7eb0acb --- packages/metro-source-map/src/source-map.js | 27 +++++++++- packages/metro/src/Bundler/index.js | 7 ++- .../src/DeltaBundler/DeltaTransformer.js | 2 +- .../metro/src/DeltaBundler/Serializers.js | 2 +- packages/metro/src/JSTransformer/index.js | 2 +- .../metro/src/JSTransformer/worker/index.js | 2 +- .../metro/src/JSTransformer/worker/minify.js | 2 +- .../ModuleGraph/output/indexed-ram-bundle.js | 2 +- .../output/multiple-files-ram-bundle.js | 2 +- .../src/ModuleGraph/output/source-map.js | 2 +- packages/metro/src/ModuleGraph/types.flow.js | 7 ++- .../src/ModuleGraph/worker/optimize-module.js | 2 +- packages/metro/src/Server/index.js | 3 +- .../src/Server/symbolicate/symbolicate.js | 3 +- packages/metro/src/lib/SourceMap.js | 49 ------------------- packages/metro/src/lib/TransformCaching.js | 2 +- packages/metro/src/lib/relativizeSourceMap.js | 6 +-- packages/metro/src/node-haste/Module.js | 2 +- packages/metro/src/shared/output/bundle.js | 2 +- .../metro/src/shared/output/unbundle/util.js | 6 +-- packages/metro/src/shared/types.flow.js | 3 +- 21 files changed, 58 insertions(+), 77 deletions(-) delete mode 100644 packages/metro/src/lib/SourceMap.js diff --git a/packages/metro-source-map/src/source-map.js b/packages/metro-source-map/src/source-map.js index 4b0f63a6..72fa0894 100644 --- a/packages/metro-source-map/src/source-map.js +++ b/packages/metro-source-map/src/source-map.js @@ -17,17 +17,42 @@ const SourceMap = require('source-map'); import type {SourceMap as MappingsMap} from 'babel-core'; import type {RawMapping as BabelRawMapping} from 'babel-generator'; +import type {RawMapping as CompactRawMapping} from 'source-map'; + +export type {SourceMap as MappingsMap} from 'babel-core'; +export type CompactRawMappings = Array; +export type RawMappings = Array; -type RawMappings = Array; type GeneratedCodeMapping = [number, number]; type SourceMapping = [number, number, number, number]; type SourceMappingWithName = [number, number, number, number, string]; +type FBExtensions = { + x_facebook_offsets: Array, + x_metro_module_paths: Array, +}; + export type RawMapping = | SourceMappingWithName | SourceMapping | GeneratedCodeMapping; +export type IndexMapSection = { + map: MetroSourceMap, + offset: {line: number, column: number}, +}; + +export type IndexMap = { + file?: string, + mappings?: void, // avoids SourceMap being a disjoint union + sections: Array, + version: number, +}; + +export type FBIndexMap = IndexMap & FBExtensions; +export type MetroSourceMap = IndexMap | MappingsMap; +export type FBSourceMap = FBIndexMap | (MappingsMap & FBExtensions); + /** * Creates a source map from modules with "raw mappings", i.e. an array of * tuples with either 2, 4, or 5 elements: diff --git a/packages/metro/src/Bundler/index.js b/packages/metro/src/Bundler/index.js index 7a32669e..c59f54d8 100644 --- a/packages/metro/src/Bundler/index.js +++ b/packages/metro/src/Bundler/index.js @@ -29,11 +29,14 @@ const { import type {PostProcessModules} from '../DeltaBundler'; import type {Options as JSTransformerOptions} from '../JSTransformer/worker'; import type {GlobalTransformCache} from '../lib/GlobalTransformCache'; -import type {CompactRawMappings} from '../lib/SourceMap'; -import type {MappingsMap, SourceMap} from '../lib/SourceMap'; import type {TransformCache} from '../lib/TransformCaching'; import type {Reporter} from '../lib/reporting'; import type {HasteImpl} from '../node-haste/Module'; +import type { + CompactRawMappings, + MappingsMap, + MetroSourceMap as SourceMap, +} from 'metro-source-map'; export type BundlingOptions = {| +preloadedModules: ?{[string]: true} | false, diff --git a/packages/metro/src/DeltaBundler/DeltaTransformer.js b/packages/metro/src/DeltaBundler/DeltaTransformer.js index caad1f57..9017963b 100644 --- a/packages/metro/src/DeltaBundler/DeltaTransformer.js +++ b/packages/metro/src/DeltaBundler/DeltaTransformer.js @@ -25,11 +25,11 @@ const {EventEmitter} = require('events'); import type Bundler from '../Bundler'; import type {Options as JSTransformerOptions} from '../JSTransformer/worker'; -import type {CompactRawMappings} from '../lib/SourceMap'; import type DependencyGraph from '../node-haste/DependencyGraph'; import type Module from '../node-haste/Module'; import type {Options as BundleOptions, MainOptions} from './'; import type {DependencyEdges} from './traverseDependencies'; +import type {CompactRawMappings} from 'metro-source-map'; export type DeltaEntryType = | 'asset' diff --git a/packages/metro/src/DeltaBundler/Serializers.js b/packages/metro/src/DeltaBundler/Serializers.js index 6291dc21..80149863 100644 --- a/packages/metro/src/DeltaBundler/Serializers.js +++ b/packages/metro/src/DeltaBundler/Serializers.js @@ -21,7 +21,6 @@ const {createRamBundleGroups} = require('../Bundler/util'); const {fromRawMappings} = require('metro-source-map'); import type {AssetData} from '../Assets'; -import type {MappingsMap} from '../lib/SourceMap'; import type {BundleOptions} from '../shared/types.flow'; import type {ModuleTransportLike} from '../shared/types.flow'; import type DeltaBundler, {Options as BuildOptions} from './'; @@ -29,6 +28,7 @@ import type DeltaTransformer, { DeltaEntry, DeltaTransformResponse, } from './DeltaTransformer'; +import type {MappingsMap} from 'metro-source-map'; export type Options = BundleOptions & { deltaBundleId: ?string, diff --git a/packages/metro/src/JSTransformer/index.js b/packages/metro/src/JSTransformer/index.js index d7353e7f..75856b55 100644 --- a/packages/metro/src/JSTransformer/index.js +++ b/packages/metro/src/JSTransformer/index.js @@ -19,7 +19,7 @@ const Worker = require('jest-worker').default; import type {Options, TransformedCode} from './worker'; import type {LocalPath} from '../node-haste/lib/toLocalPath'; -import type {MappingsMap} from '../lib/SourceMap'; +import type {MappingsMap} from 'metro-source-map'; import type {ResultWithMap} from './worker/minify'; import typeof {minify as Minify, transform as Transform} from './worker'; diff --git a/packages/metro/src/JSTransformer/worker/index.js b/packages/metro/src/JSTransformer/worker/index.js index f38d3814..dbdad3d9 100644 --- a/packages/metro/src/JSTransformer/worker/index.js +++ b/packages/metro/src/JSTransformer/worker/index.js @@ -27,7 +27,7 @@ const path = require('path'); const {compactMapping} = require('metro-source-map'); import type {LogEntry} from 'metro-core/src/Logger'; -import type {CompactRawMappings, MappingsMap} from '../../lib/SourceMap'; +import type {CompactRawMappings, MappingsMap} from 'metro-source-map'; import type {LocalPath} from '../../node-haste/lib/toLocalPath'; import type {ResultWithMap} from './minify'; import type {Ast, Plugins as BabelPlugins} from 'babel-core'; diff --git a/packages/metro/src/JSTransformer/worker/minify.js b/packages/metro/src/JSTransformer/worker/minify.js index 2580ede5..dc7f06dc 100644 --- a/packages/metro/src/JSTransformer/worker/minify.js +++ b/packages/metro/src/JSTransformer/worker/minify.js @@ -14,7 +14,7 @@ const uglify = require('uglify-es'); -import type {MappingsMap} from '../../lib/SourceMap'; +import type {MappingsMap} from 'metro-source-map'; export type ResultWithMap = { code: string, diff --git a/packages/metro/src/ModuleGraph/output/indexed-ram-bundle.js b/packages/metro/src/ModuleGraph/output/indexed-ram-bundle.js index bcf54b38..075bfd77 100644 --- a/packages/metro/src/ModuleGraph/output/indexed-ram-bundle.js +++ b/packages/metro/src/ModuleGraph/output/indexed-ram-bundle.js @@ -22,8 +22,8 @@ const { } = require('../../shared/output/unbundle/as-indexed-file'); const {concat, getModuleCode, partition, toModuleTransport} = require('./util'); -import type {FBIndexMap} from '../../lib/SourceMap.js'; import type {OutputFn} from '../types.flow'; +import type {FBIndexMap} from 'metro-source-map'; function asIndexedRamBundle({ filename, diff --git a/packages/metro/src/ModuleGraph/output/multiple-files-ram-bundle.js b/packages/metro/src/ModuleGraph/output/multiple-files-ram-bundle.js index f4979593..48290525 100644 --- a/packages/metro/src/ModuleGraph/output/multiple-files-ram-bundle.js +++ b/packages/metro/src/ModuleGraph/output/multiple-files-ram-bundle.js @@ -21,7 +21,7 @@ const path = require('path'); const {concat, getModuleCode, partition, toModuleTransport} = require('./util'); -import type {FBIndexMap} from '../../lib/SourceMap.js'; +import type {FBIndexMap} from 'metro-source-map'; import type {OutputFn} from '../types.flow'; function asMultipleFilesRamBundle({ diff --git a/packages/metro/src/ModuleGraph/output/source-map.js b/packages/metro/src/ModuleGraph/output/source-map.js index efa12f82..287065cf 100644 --- a/packages/metro/src/ModuleGraph/output/source-map.js +++ b/packages/metro/src/ModuleGraph/output/source-map.js @@ -12,7 +12,7 @@ 'use strict'; -import type {FBSourceMap, IndexMapSection, IndexMap} from '../../lib/SourceMap'; +import type {FBSourceMap, IndexMap, IndexMapSection} from 'metro-source-map'; export type {FBSourceMap}; diff --git a/packages/metro/src/ModuleGraph/types.flow.js b/packages/metro/src/ModuleGraph/types.flow.js index eeca7b7c..6f1ba3fd 100644 --- a/packages/metro/src/ModuleGraph/types.flow.js +++ b/packages/metro/src/ModuleGraph/types.flow.js @@ -11,9 +11,14 @@ */ 'use strict'; -import type {FBSourceMap, MappingsMap, SourceMap} from '../lib/SourceMap'; import type {Ast} from 'babel-core'; import type {Console} from 'console'; +import type { + FBSourceMap, + MappingsMap, + MetroSourceMap as SourceMap, +} from 'metro-source-map'; + export type {Transformer} from '../JSTransformer/worker'; export type BuildResult = {| diff --git a/packages/metro/src/ModuleGraph/worker/optimize-module.js b/packages/metro/src/ModuleGraph/worker/optimize-module.js index a4064ce1..31adfe69 100644 --- a/packages/metro/src/ModuleGraph/worker/optimize-module.js +++ b/packages/metro/src/ModuleGraph/worker/optimize-module.js @@ -23,7 +23,7 @@ const optimizeDependencies = require('./optimizeDependencies'); const sourceMap = require('source-map'); import type {TransformedSourceFile, TransformResult} from '../types.flow'; -import type {MappingsMap, SourceMap} from '../../lib/SourceMap'; +import type {MappingsMap, MetroSourceMap as SourceMap} from 'metro-source-map'; import type {PostMinifyProcess} from '../../Bundler/index.js'; export type OptimizationOptions = {| diff --git a/packages/metro/src/Server/index.js b/packages/metro/src/Server/index.js index 81356959..1d945962 100644 --- a/packages/metro/src/Server/index.js +++ b/packages/metro/src/Server/index.js @@ -40,8 +40,9 @@ import type { PostMinifyProcess, PostProcessBundleSourcemap, } from '../Bundler'; +import type {MetroSourceMap as SourceMap} from 'metro-source-map'; import type {TransformCache} from '../lib/TransformCaching'; -import type {SourceMap, Symbolicate} from './symbolicate'; +import type {Symbolicate} from './symbolicate'; import type {AssetData} from '../Assets'; import type {RamBundleInfo} from '../DeltaBundler/Serializers'; import type {PostProcessModules} from '../DeltaBundler'; diff --git a/packages/metro/src/Server/symbolicate/symbolicate.js b/packages/metro/src/Server/symbolicate/symbolicate.js index 2d9088ef..d709aed6 100644 --- a/packages/metro/src/Server/symbolicate/symbolicate.js +++ b/packages/metro/src/Server/symbolicate/symbolicate.js @@ -20,8 +20,7 @@ const xpipe = require('xpipe'); const {LazyPromise, LockingPromise} = require('./util'); const {fork} = require('child_process'); -export type {SourceMap}; -import type {SourceMap} from '../../lib/SourceMap'; +import type {MetroSourceMap as SourceMap} from 'metro-source-map'; export type Stack = Array<{file: string, lineNumber: number, column: number}>; export type Symbolicate = ( diff --git a/packages/metro/src/lib/SourceMap.js b/packages/metro/src/lib/SourceMap.js deleted file mode 100644 index 5851f2b9..00000000 --- a/packages/metro/src/lib/SourceMap.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @flow - * @format - */ - -'use strict'; - -import type {SourceMap as MappingsMap} from 'babel-core'; -import type {RawMapping} from 'babel-generator'; -import type {RawMapping as CompactRawMapping} from 'source-map'; - -export type IndexMapSection = { - map: SourceMap, - offset: {line: number, column: number}, -}; - -export type RawMappings = Array; - -type FBExtensions = { - x_facebook_offsets: Array, - x_metro_module_paths: Array, -}; - -export type {MappingsMap}; -export type IndexMap = { - file?: string, - mappings?: void, // avoids SourceMap being a disjoint union - sections: Array, - version: number, -}; - -export type FBIndexMap = IndexMap & FBExtensions; -export type SourceMap = IndexMap | MappingsMap; -export type FBSourceMap = FBIndexMap | (MappingsMap & FBExtensions); - -export type CompactRawMappings = Array; - -function isMappingsMap(map: SourceMap): %checks { - return map.mappings !== undefined; -} - -exports.isMappingsMap = isMappingsMap; diff --git a/packages/metro/src/lib/TransformCaching.js b/packages/metro/src/lib/TransformCaching.js index c42f8fd3..71646162 100644 --- a/packages/metro/src/lib/TransformCaching.js +++ b/packages/metro/src/lib/TransformCaching.js @@ -22,9 +22,9 @@ const rimraf = require('rimraf'); const writeFileAtomicSync = require('write-file-atomic').sync; import type {Options as WorkerOptions} from '../JSTransformer/worker'; -import type {CompactRawMappings} from './SourceMap'; import type {Reporter} from './reporting'; import type {LocalPath} from '../node-haste/lib/toLocalPath'; +import type {CompactRawMappings} from 'metro-source-map'; type CacheFilePaths = {transformedCode: string, metadata: string}; export type GetTransformCacheKey = (options: {}) => string; diff --git a/packages/metro/src/lib/relativizeSourceMap.js b/packages/metro/src/lib/relativizeSourceMap.js index bfa33cba..9485fb42 100644 --- a/packages/metro/src/lib/relativizeSourceMap.js +++ b/packages/metro/src/lib/relativizeSourceMap.js @@ -14,15 +14,13 @@ const path = require('path'); -const {isMappingsMap} = require('./SourceMap'); - -import type {SourceMap} from './SourceMap'; +import type {MetroSourceMap as SourceMap} from 'metro-source-map'; function relativizeSourceMapInternal( sourceMap: SourceMap, sourcesRoot: string, ) { - if (!isMappingsMap(sourceMap)) { + if (sourceMap.mappings === undefined) { for (let i = 0; i < sourceMap.sections.length; i++) { relativizeSourceMapInternal(sourceMap.sections[i].map, sourcesRoot); } diff --git a/packages/metro/src/node-haste/Module.js b/packages/metro/src/node-haste/Module.js index 5207dbd6..d4cef73d 100644 --- a/packages/metro/src/node-haste/Module.js +++ b/packages/metro/src/node-haste/Module.js @@ -26,7 +26,6 @@ import type { Options as WorkerOptions, } from '../JSTransformer/worker'; import type {GlobalTransformCache} from '../lib/GlobalTransformCache'; -import type {CompactRawMappings} from '../lib/SourceMap'; import type { TransformCache, GetTransformCacheKey, @@ -36,6 +35,7 @@ import type {Reporter} from '../lib/reporting'; import type DependencyGraphHelpers from './DependencyGraph/DependencyGraphHelpers'; import type ModuleCache from './ModuleCache'; import type {LocalPath} from './lib/toLocalPath'; +import type {CompactRawMappings} from 'metro-source-map'; export type ReadResult = { +code: string, diff --git a/packages/metro/src/shared/output/bundle.js b/packages/metro/src/shared/output/bundle.js index 71e5679b..26fab8b7 100644 --- a/packages/metro/src/shared/output/bundle.js +++ b/packages/metro/src/shared/output/bundle.js @@ -19,8 +19,8 @@ const meta = require('./meta'); const relativizeSourceMap = require('../../lib/relativizeSourceMap'); const writeFile = require('./writeFile'); -import type {SourceMap} from '../../lib/SourceMap'; import type {OutputOptions, RequestOptions} from '../types.flow'; +import type {MetroSourceMap as SourceMap} from 'metro-source-map'; function buildBundle( packagerClient: Server, diff --git a/packages/metro/src/shared/output/unbundle/util.js b/packages/metro/src/shared/output/unbundle/util.js index cc946cbf..09fea30b 100644 --- a/packages/metro/src/shared/output/unbundle/util.js +++ b/packages/metro/src/shared/output/unbundle/util.js @@ -14,13 +14,13 @@ const invariant = require('fbjs/lib/invariant'); import type {RamModule} from '../../../DeltaBundler/Serializers'; +import type {ModuleGroups, ModuleTransportLike} from '../../types.flow'; import type { FBIndexMap, IndexMap, MappingsMap, - SourceMap, -} from '../../../lib/SourceMap'; -import type {ModuleGroups, ModuleTransportLike} from '../../types.flow'; + MetroSourceMap as SourceMap, +} from 'metro-source-map'; const newline = /\r\n?|\n|\u2028|\u2029/g; // fastest implementation diff --git a/packages/metro/src/shared/types.flow.js b/packages/metro/src/shared/types.flow.js index c389cb37..7a9ea640 100644 --- a/packages/metro/src/shared/types.flow.js +++ b/packages/metro/src/shared/types.flow.js @@ -18,11 +18,10 @@ import type { } from '../Bundler'; import type {PostProcessModules} from '../DeltaBundler'; import type {GlobalTransformCache} from '../lib/GlobalTransformCache'; -import type {SourceMap} from '../lib/SourceMap'; import type {TransformCache} from '../lib/TransformCaching'; import type {Reporter} from '../lib/reporting'; import type {HasteImpl} from '../node-haste/Module'; -import type {RawMapping} from 'metro-source-map'; +import type {MetroSourceMap as SourceMap, RawMapping} from 'metro-source-map'; type BundleType = 'bundle' | 'delta' | 'map' | 'ram' | 'cli' | 'hmr' | 'todo'; type SourceMapOrMappings = SourceMap | Array;