Allow single (non-default) import from dependencies

This commit is contained in:
Tim Schaub
2017-05-02 10:38:14 -06:00
parent 584d4f67bd
commit 3f973e6fa3
6 changed files with 34 additions and 13 deletions

View File

@@ -111,11 +111,13 @@
}, },
{ {
"module": "pixelworks", "module": "pixelworks",
"import": "Processor",
"browserify": true "browserify": true
}, },
{ {
"module": "vector-tile", "module": "vector-tile",
"name": "vectortile", "name": "vectortile",
"import": "VectorTile",
"browserify": true "browserify": true
} }
] ]

View File

@@ -4,7 +4,7 @@ goog.provide('ol.format.MVT');
goog.require('ol'); goog.require('ol');
goog.require('ol.ext.PBF'); goog.require('ol.ext.PBF');
goog.require('ol.ext.vectortile'); goog.require('ol.ext.vectortile.VectorTile');
goog.require('ol.format.Feature'); goog.require('ol.format.Feature');
goog.require('ol.format.FormatType'); goog.require('ol.format.FormatType');
goog.require('ol.geom.GeometryLayout'); goog.require('ol.geom.GeometryLayout');

View File

@@ -7,7 +7,7 @@ goog.require('ol.dom');
goog.require('ol.events'); goog.require('ol.events');
goog.require('ol.events.Event'); goog.require('ol.events.Event');
goog.require('ol.events.EventType'); goog.require('ol.events.EventType');
goog.require('ol.ext.pixelworks'); goog.require('ol.ext.pixelworks.Processor');
goog.require('ol.extent'); goog.require('ol.extent');
goog.require('ol.layer.Image'); goog.require('ol.layer.Image');
goog.require('ol.layer.Tile'); goog.require('ol.layer.Tile');

View File

@@ -29,6 +29,7 @@ function getExternalModules() {
module: item.module, module: item.module,
name: item.name !== undefined ? item.name : item.module, name: item.name !== undefined ? item.name : item.module,
main: require.resolve(item.module), main: require.resolve(item.module),
import: item.import,
browserify: item.browserify !== undefined ? item.browserify : false browserify: item.browserify !== undefined ? item.browserify : false
}; };
} }
@@ -43,10 +44,16 @@ function getExternalModules() {
* wrapped module. * wrapped module.
*/ */
function wrapModule(mod, callback) { function wrapModule(mod, callback) {
var name = 'ol.ext.' + mod.name;
var member = 'module.exports';
if (mod.import) {
name += '.' + mod.import;
member += '.' + mod.import;
}
var wrap = function(code) { var wrap = function(code) {
return 'goog.provide(\'ol.ext.' + mod.name + '\');\n' + return 'goog.provide(\'' + name + '\');\n' +
'/** @typedef {function(*)} */\n' + '/** @typedef {function(*)} */\n' +
'ol.ext.' + mod.name + ';\n' + name + ';\n' +
'(function() {\n' + '(function() {\n' +
'var exports = {};\n' + 'var exports = {};\n' +
'var module = {exports: exports};\n' + 'var module = {exports: exports};\n' +
@@ -60,7 +67,7 @@ function wrapModule(mod, callback) {
'strictModuleDepCheck, suspiciousCode, undefinedNames, ' + 'strictModuleDepCheck, suspiciousCode, undefinedNames, ' +
'undefinedVars, unknownDefines, unusedLocalVariables, uselessCode, visibility}\n' + 'undefinedVars, unknownDefines, unusedLocalVariables, uselessCode, visibility}\n' +
' */\n' + code + '\n' + ' */\n' + code + '\n' +
'ol.ext.' + mod.name + ' = module.exports;\n' + name + ' = ' + member + ';\n' +
'})();\n'; '})();\n';
}; };

View File

@@ -2,7 +2,7 @@ goog.provide('ol.test.format.MVT');
goog.require('ol.Feature'); goog.require('ol.Feature');
goog.require('ol.ext.PBF'); goog.require('ol.ext.PBF');
goog.require('ol.ext.vectortile'); goog.require('ol.ext.vectortile.VectorTile');
goog.require('ol.format.MVT'); goog.require('ol.format.MVT');
goog.require('ol.geom.Point'); goog.require('ol.geom.Point');
goog.require('ol.render.Feature'); goog.require('ol.render.Feature');

View File

@@ -16,8 +16,10 @@ function resolve(fromName, toName) {
if (toParts[0] === 'ol' && toParts[1] === 'ext') { if (toParts[0] === 'ol' && toParts[1] === 'ext') {
let name = toParts[2]; let name = toParts[2];
let packageName; let packageName;
let imported;
for (let i = 0, ii = pkg.ext.length; i < ii; ++i) { for (let i = 0, ii = pkg.ext.length; i < ii; ++i) {
const dependency = pkg.ext[i]; const dependency = pkg.ext[i];
imported = dependency.import;
if (dependency.module === name) { if (dependency.module === name) {
packageName = name; packageName = name;
break; break;
@@ -29,7 +31,11 @@ function resolve(fromName, toName) {
if (!packageName) { if (!packageName) {
throw new Error(`Can't find package name for ${toName}`); throw new Error(`Can't find package name for ${toName}`);
} }
return packageName; if (imported) {
return [packageName, imported];
} else {
return packageName;
}
} }
const fromLength = fromParts.length; const fromLength = fromParts.length;
let commonDepth = 1; let commonDepth = 1;
@@ -186,12 +192,18 @@ module.exports = function(info, api) {
} }
const renamed = rename(name); const renamed = rename(name);
replacements[name] = renamed; replacements[name] = renamed;
imports.push( const resolved = resolve(provide, name);
j.importDeclaration( let specifier, source;
[j.importDefaultSpecifier(j.identifier(renamed))], if (Array.isArray(resolved)) {
j.literal(resolve(provide, name)) // import {imported as renamed} from 'source';
) specifier = j.importSpecifier(j.identifier(resolved[1]), j.identifier(renamed));
); source = resolved[0];
} else {
// import renamed from 'source';
specifier = j.importDefaultSpecifier(j.identifier(renamed));
source = resolved;
}
imports.push(j.importDeclaration([specifier], j.literal(source)));
}) })
.remove(); .remove();