From 94028f16c140c010f0e978f0544a6114c4f8b0a6 Mon Sep 17 00:00:00 2001 From: Peter van der Zee Date: Sun, 25 Mar 2018 13:27:42 -0700 Subject: [PATCH] Move the ambiguous error to its own file Reviewed By: davidaurelio Differential Revision: D7180925 fbshipit-source-id: 4b92397a768e0d9cda102d4b237bc39d2b38b443 --- packages/metro-core/package.json | 1 + .../errors/AmbiguousModuleResolutionError.js | 32 +++++++++++++++++++ packages/metro-core/src/errors/index.js | 6 +++- packages/metro-core/src/index.js | 2 ++ .../traverseDependencies-integration-test.js | 4 +-- packages/metro/src/lib/TerminalReporter.js | 4 +-- packages/metro/src/lib/formatBundlingError.js | 4 +-- .../DependencyGraph/ResolutionRequest.js | 20 +----------- 8 files changed, 44 insertions(+), 29 deletions(-) create mode 100644 packages/metro-core/src/errors/AmbiguousModuleResolutionError.js diff --git a/packages/metro-core/package.json b/packages/metro-core/package.json index f1252ae0..eef6f3cb 100644 --- a/packages/metro-core/package.json +++ b/packages/metro-core/package.json @@ -12,6 +12,7 @@ "cleanup-release": "test ! -e build && mv src build && mv src.real src" }, "dependencies": { + "jest-haste-map": "^22.4.2", "lodash.throttle": "^4.1.1", "wordwrap": "^1.0.0" } diff --git a/packages/metro-core/src/errors/AmbiguousModuleResolutionError.js b/packages/metro-core/src/errors/AmbiguousModuleResolutionError.js new file mode 100644 index 00000000..15025506 --- /dev/null +++ b/packages/metro-core/src/errors/AmbiguousModuleResolutionError.js @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + * @format + */ + +'use strict'; + +const {DuplicateHasteCandidatesError} = require('jest-haste-map').ModuleMap; + +class AmbiguousModuleResolutionError extends Error { + fromModulePath: string; + hasteError: DuplicateHasteCandidatesError; + + constructor( + fromModulePath: string, + hasteError: DuplicateHasteCandidatesError, + ) { + super( + `Ambiguous module resolution from \`${fromModulePath}\`: ` + + hasteError.message, + ); + this.fromModulePath = fromModulePath; + this.hasteError = hasteError; + } +} + +module.exports = AmbiguousModuleResolutionError; diff --git a/packages/metro-core/src/errors/index.js b/packages/metro-core/src/errors/index.js index 732a84ce..6b9dc952 100644 --- a/packages/metro-core/src/errors/index.js +++ b/packages/metro-core/src/errors/index.js @@ -10,4 +10,8 @@ 'use strict'; -module.exports = {}; +const AmbiguousModuleResolutionError = require('./AmbiguousModuleResolutionError'); + +module.exports = { + AmbiguousModuleResolutionError, +}; diff --git a/packages/metro-core/src/index.js b/packages/metro-core/src/index.js index a010fd65..9c858364 100644 --- a/packages/metro-core/src/index.js +++ b/packages/metro-core/src/index.js @@ -10,12 +10,14 @@ 'use strict'; +const AmbiguousModuleResolutionError = require('./errors/AmbiguousModuleResolutionError'); const Logger = require('./Logger'); const Terminal = require('./Terminal'); const formatBanner = require('./formatBanner'); module.exports = { + AmbiguousModuleResolutionError, Logger, Terminal, formatBanner, diff --git a/packages/metro/src/DeltaBundler/__tests__/traverseDependencies-integration-test.js b/packages/metro/src/DeltaBundler/__tests__/traverseDependencies-integration-test.js index 56d41620..c866af1c 100644 --- a/packages/metro/src/DeltaBundler/__tests__/traverseDependencies-integration-test.js +++ b/packages/metro/src/DeltaBundler/__tests__/traverseDependencies-integration-test.js @@ -4916,9 +4916,7 @@ describe('traverseDependencies', function() { await getOrderedDependenciesAsJSON(dgraph, root + '/index.js'); throw new Error('expected `getOrderedDependenciesAsJSON` to fail'); } catch (error) { - const { - AmbiguousModuleResolutionError, - } = require('../../node-haste/DependencyGraph/ResolutionRequest'); + const {AmbiguousModuleResolutionError} = require('metro-core'); if (!(error instanceof AmbiguousModuleResolutionError)) { throw error; } diff --git a/packages/metro/src/lib/TerminalReporter.js b/packages/metro/src/lib/TerminalReporter.js index dc47d099..b03c1ee8 100644 --- a/packages/metro/src/lib/TerminalReporter.js +++ b/packages/metro/src/lib/TerminalReporter.js @@ -15,9 +15,7 @@ const path = require('path'); const reporting = require('./reporting'); const throttle = require('lodash.throttle'); -const { - AmbiguousModuleResolutionError, -} = require('../node-haste/DependencyGraph/ResolutionRequest'); +const {AmbiguousModuleResolutionError} = require('metro-core'); const {formatBanner} = require('metro-core'); import type { diff --git a/packages/metro/src/lib/formatBundlingError.js b/packages/metro/src/lib/formatBundlingError.js index 2501b413..e1bbb61d 100644 --- a/packages/metro/src/lib/formatBundlingError.js +++ b/packages/metro/src/lib/formatBundlingError.js @@ -15,9 +15,7 @@ const serializeError = require('serialize-error'); const { UnableToResolveError, } = require('../node-haste/DependencyGraph/ModuleResolution'); -const { - AmbiguousModuleResolutionError, -} = require('../node-haste/DependencyGraph/ResolutionRequest'); +const {AmbiguousModuleResolutionError} = require('metro-core'); export type CustomError = Error & {| status?: number, diff --git a/packages/metro/src/node-haste/DependencyGraph/ResolutionRequest.js b/packages/metro/src/node-haste/DependencyGraph/ResolutionRequest.js index 87ec0dcb..32a864e0 100644 --- a/packages/metro/src/node-haste/DependencyGraph/ResolutionRequest.js +++ b/packages/metro/src/node-haste/DependencyGraph/ResolutionRequest.js @@ -12,6 +12,7 @@ const path = require('path'); +const {AmbiguousModuleResolutionError} = require('metro-core'); const {DuplicateHasteCandidatesError} = require('jest-haste-map').ModuleMap; const {formatFileCandidates, InvalidPackageError} = require('metro-resolver'); @@ -60,7 +61,6 @@ type Options = {| class ResolutionRequest { _immediateResolutionCache: {[key: string]: TModule, __proto__: null}; _options: Options; - static AmbiguousModuleResolutionError: Class; static PackageResolutionError: Class; constructor(options: Options) { @@ -123,23 +123,6 @@ function getResolutionCacheKey(modulePath, depName) { return `${path.resolve(modulePath)}:${depName}`; } -class AmbiguousModuleResolutionError extends Error { - fromModulePath: string; - hasteError: DuplicateHasteCandidatesError; - - constructor( - fromModulePath: string, - hasteError: DuplicateHasteCandidatesError, - ) { - super( - `Ambiguous module resolution from \`${fromModulePath}\`: ` + - hasteError.message, - ); - this.fromModulePath = fromModulePath; - this.hasteError = hasteError; - } -} - class PackageResolutionError extends Error { originModulePath: string; packageError: InvalidPackageError; @@ -165,7 +148,6 @@ class PackageResolutionError extends Error { } } -ResolutionRequest.AmbiguousModuleResolutionError = AmbiguousModuleResolutionError; ResolutionRequest.PackageResolutionError = PackageResolutionError; module.exports = ResolutionRequest;