mirror of https://github.com/status-im/metro.git
Bugfix/require module regexp
Summary: Resolves https://github.com/facebook/react-native/issues/316. Also updated the spec for the Haste Dependency Resolver. Not sure if these changes are the ones desired so feedback would be welcome! Closes https://github.com/facebook/react-native/pull/368 Github Author: daviskoh <koh.davis.0@gmail.com> Test Plan: ./runJestTests
This commit is contained in:
parent
2c4e9aba80
commit
28a0a2586d
|
@ -14,6 +14,7 @@ jest
|
||||||
.dontMock('path')
|
.dontMock('path')
|
||||||
.dontMock('absolute-path')
|
.dontMock('absolute-path')
|
||||||
.dontMock('../docblock')
|
.dontMock('../docblock')
|
||||||
|
.dontMock('../../requirePattern')
|
||||||
.setMock('../../../ModuleDescriptor', function(data) {return data;});
|
.setMock('../../../ModuleDescriptor', function(data) {return data;});
|
||||||
|
|
||||||
describe('DependencyGraph', function() {
|
describe('DependencyGraph', function() {
|
||||||
|
|
|
@ -12,6 +12,7 @@ var ModuleDescriptor = require('../../ModuleDescriptor');
|
||||||
var q = require('q');
|
var q = require('q');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var docblock = require('./docblock');
|
var docblock = require('./docblock');
|
||||||
|
var requirePattern = require('../requirePattern');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var isAbsolutePath = require('absolute-path');
|
var isAbsolutePath = require('absolute-path');
|
||||||
var debug = require('debug')('DependecyGraph');
|
var debug = require('debug')('DependecyGraph');
|
||||||
|
@ -600,7 +601,6 @@ DependecyGraph.prototype._processAssetChange = function(eventType, file) {
|
||||||
/**
|
/**
|
||||||
* Extract all required modules from a `code` string.
|
* Extract all required modules from a `code` string.
|
||||||
*/
|
*/
|
||||||
var requireRe = /\brequire\s*\(\s*[\'"]([^"\']+)["\']\s*\)/g;
|
|
||||||
var blockCommentRe = /\/\*(.|\n)*?\*\//g;
|
var blockCommentRe = /\/\*(.|\n)*?\*\//g;
|
||||||
var lineCommentRe = /\/\/.+(\n|$)/g;
|
var lineCommentRe = /\/\/.+(\n|$)/g;
|
||||||
function extractRequires(code) {
|
function extractRequires(code) {
|
||||||
|
@ -609,7 +609,7 @@ function extractRequires(code) {
|
||||||
code
|
code
|
||||||
.replace(blockCommentRe, '')
|
.replace(blockCommentRe, '')
|
||||||
.replace(lineCommentRe, '')
|
.replace(lineCommentRe, '')
|
||||||
.replace(requireRe, function(match, dep) {
|
.replace(requirePattern, function(match, _, dep) {
|
||||||
deps.push(dep);
|
deps.push(dep);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
jest.dontMock('../')
|
jest.dontMock('../')
|
||||||
.dontMock('q')
|
.dontMock('q')
|
||||||
|
.dontMock('../requirePattern')
|
||||||
.setMock('../../ModuleDescriptor', function(data) {return data;});
|
.setMock('../../ModuleDescriptor', function(data) {return data;});
|
||||||
|
|
||||||
var q = require('q');
|
var q = require('q');
|
||||||
|
@ -226,11 +227,13 @@ describe('HasteDependencyResolver', function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
var depGraph = depResolver._depGraph;
|
var depGraph = depResolver._depGraph;
|
||||||
var dependencies = ['x', 'y', 'z'];
|
var dependencies = ['x', 'y', 'z', 'a', 'b'];
|
||||||
var code = [
|
var code = [
|
||||||
'require("x")',
|
'require("x")',
|
||||||
'require("y")',
|
'require("y")',
|
||||||
'require("z")',
|
'require( "z" )',
|
||||||
|
'require( "a")',
|
||||||
|
'require("b" )',
|
||||||
].join('\n');
|
].join('\n');
|
||||||
|
|
||||||
depGraph.resolveDependency.mockImpl(function(fromModule, toModuleName) {
|
depGraph.resolveDependency.mockImpl(function(fromModule, toModuleName) {
|
||||||
|
@ -255,7 +258,9 @@ describe('HasteDependencyResolver', function() {
|
||||||
' require, requireDynamic, requireLazy, module, exports) {' +
|
' require, requireDynamic, requireLazy, module, exports) {' +
|
||||||
' require(\'changed\')',
|
' require(\'changed\')',
|
||||||
'require(\'y\')',
|
'require(\'y\')',
|
||||||
'require("z")});',
|
'require("z")',
|
||||||
|
'require("a")',
|
||||||
|
'require("b")});',
|
||||||
].join('\n'));
|
].join('\n'));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -9,8 +9,8 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var FileWatcher = require('../../FileWatcher');
|
|
||||||
var DependencyGraph = require('./DependencyGraph');
|
var DependencyGraph = require('./DependencyGraph');
|
||||||
|
var requirePattern = require('./requirePattern');
|
||||||
var ModuleDescriptor = require('../ModuleDescriptor');
|
var ModuleDescriptor = require('../ModuleDescriptor');
|
||||||
var declareOpts = require('../../lib/declareOpts');
|
var declareOpts = require('../../lib/declareOpts');
|
||||||
|
|
||||||
|
@ -25,7 +25,6 @@ var DEFINE_MODULE_CODE = [
|
||||||
].join('');
|
].join('');
|
||||||
|
|
||||||
var DEFINE_MODULE_REPLACE_RE = /_moduleName_|_code_|_deps_/g;
|
var DEFINE_MODULE_REPLACE_RE = /_moduleName_|_code_|_deps_/g;
|
||||||
var REL_REQUIRE_STMT = /require\(['"]([\.\/0-9A-Z_$\-]*)['"]\)/gi;
|
|
||||||
|
|
||||||
var validateOpts = declareOpts({
|
var validateOpts = declareOpts({
|
||||||
projectRoots: {
|
projectRoots: {
|
||||||
|
@ -146,12 +145,12 @@ HasteDependencyResolver.prototype.wrapModule = function(module, code) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var relativizedCode =
|
var relativizedCode =
|
||||||
code.replace(REL_REQUIRE_STMT, function(codeMatch, depName) {
|
code.replace(requirePattern, function(codeMatch, _, depName) {
|
||||||
var depId = resolvedDeps[depName];
|
var depId = resolvedDeps[depName];
|
||||||
if (depId != null) {
|
if (depId != null) {
|
||||||
return 'require(\'' + depId + '\')';
|
return 'require(\'' + depId + '\')';
|
||||||
} else {
|
} else {
|
||||||
return codeMatch;
|
return codeMatch.replace(/\s+/g, '');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var REQUIRE_RE = /\brequire\s*?\(\s*?([\'"])([^"\']+)\1\s*?\)/g;
|
||||||
|
|
||||||
|
module.exports = REQUIRE_RE;
|
Loading…
Reference in New Issue