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",
"import": "Processor",
"browserify": true
},
{
"module": "vector-tile",
"name": "vectortile",
"import": "VectorTile",
"browserify": true
}
]

View File

@@ -4,7 +4,7 @@ goog.provide('ol.format.MVT');
goog.require('ol');
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.FormatType');
goog.require('ol.geom.GeometryLayout');

View File

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

View File

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

View File

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

View File

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