Comparing version 0.3.0 to 0.3.1
@@ -8,2 +8,3 @@ var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; }; | ||
var assign = _lodash.assign; | ||
var clone = _lodash.clone; | ||
var find = _lodash.find; | ||
@@ -14,2 +15,3 @@ var filter = _lodash.filter; | ||
var reject = _lodash.reject; | ||
var result = _lodash.result; | ||
var sortBy = _lodash.sortBy; | ||
@@ -61,3 +63,9 @@ var take = _lodash.take; | ||
function createImportSpecifier(source, isDef) { | ||
function createImportSpecifier(source, definition, isDef) { | ||
var imported = undefined; | ||
if (definition.type === "MemberExpression") { | ||
imported = clone(definition.property); | ||
isDef = false; | ||
} | ||
// Add the specifier | ||
@@ -75,3 +83,4 @@ var name = source.name; | ||
}, | ||
"default": typeof isDef === "boolean" ? isDef : true | ||
imported: imported, | ||
"default": isDef | ||
}); | ||
@@ -99,2 +108,3 @@ } | ||
switch (node.type) { | ||
case "MemberExpression": | ||
case "CallExpression": | ||
@@ -104,3 +114,3 @@ importExpr = node; | ||
case "AssignmentExpression": | ||
var specifier = createImportSpecifier(node.left, false); | ||
var specifier = createImportSpecifier(node.left, node.right, false); | ||
specifier.local.name = node.left.property.name; | ||
@@ -120,6 +130,10 @@ result.specifiers.push(specifier); | ||
importExpr = value; | ||
result.specifiers.push(createImportSpecifier(source, isVariable)); | ||
result.specifiers.push(createImportSpecifier(source, importExpr, isVariable)); | ||
} | ||
} | ||
if (importExpr.type === "MemberExpression") { | ||
importExpr = importExpr.object; | ||
} | ||
result.source = createSourceNode(node, importExpr.arguments[0]); | ||
@@ -136,2 +150,3 @@ return result; | ||
switch (node.type) { | ||
case "MemberExpression": | ||
case "CallExpression": | ||
@@ -149,2 +164,6 @@ expr = node; | ||
} | ||
// handle require('x').y; | ||
if (result(expr, "type") === "MemberExpression") { | ||
expr = expr.object; | ||
} | ||
if (expr && isRequireCallee(expr)) { | ||
@@ -151,0 +170,0 @@ requires.push(node); |
{ | ||
"name": "acorn-umd", | ||
"version": "0.3.0", | ||
"version": "0.3.1", | ||
"description": "Parse acorn ast for AMD, CommonJS, and ES6 definitions", | ||
@@ -5,0 +5,0 @@ "main": "dist/acorn-umd.js", |
@@ -1,2 +0,2 @@ | ||
import {assign, find, filter, matches, pluck, reject, sortBy, take, zip} from 'lodash'; | ||
import {assign, clone, find, filter, matches, pluck, reject, result, sortBy, take, zip} from 'lodash'; | ||
import estraverse from 'estraverse'; | ||
@@ -40,5 +40,12 @@ import Node from './Node'; | ||
function createImportSpecifier(source, isDef) { | ||
function createImportSpecifier(source, definition, isDef) { | ||
let imported; | ||
if (definition.type === 'MemberExpression') { | ||
imported = clone(definition.property); | ||
isDef = false; | ||
} | ||
// Add the specifier | ||
let {name, type, start, end} = source; | ||
return new Node({ | ||
@@ -50,3 +57,4 @@ start, end, | ||
}, | ||
default: typeof isDef === 'boolean' ? isDef : true | ||
imported, | ||
default: isDef | ||
}); | ||
@@ -69,2 +77,3 @@ } | ||
switch (node.type) { | ||
case 'MemberExpression': | ||
case 'CallExpression': | ||
@@ -74,3 +83,3 @@ importExpr = node; | ||
case 'AssignmentExpression': | ||
let specifier = createImportSpecifier(node.left, false); | ||
let specifier = createImportSpecifier(node.left, node.right, false); | ||
specifier.local.name = node.left.property.name; | ||
@@ -89,6 +98,10 @@ result.specifiers.push(specifier); | ||
importExpr = value; | ||
result.specifiers.push(createImportSpecifier(source, isVariable)); | ||
result.specifiers.push(createImportSpecifier(source, importExpr, isVariable)); | ||
} | ||
} | ||
if (importExpr.type === 'MemberExpression') { | ||
importExpr = importExpr.object; | ||
} | ||
result.source = createSourceNode(node, importExpr.arguments[0]); | ||
@@ -105,2 +118,3 @@ return result; | ||
switch (node.type) { | ||
case 'MemberExpression': | ||
case 'CallExpression': | ||
@@ -118,2 +132,6 @@ expr = node; | ||
} | ||
// handle require('x').y; | ||
if (result(expr, 'type') === 'MemberExpression') { | ||
expr = expr.object; | ||
} | ||
if (expr && isRequireCallee(expr)) { | ||
@@ -120,0 +138,0 @@ requires.push(node); |
@@ -243,2 +243,48 @@ import {parse} from 'acorn'; | ||
}); | ||
describe('non default import specifiers', function() { | ||
let code = ` | ||
let test = require('prova').test; | ||
`; | ||
let ast = parse(code, {ecmaVersion: 6}); | ||
let imports = umd(ast, { | ||
es6: false, amd: false, cjs: true | ||
}); | ||
it ('should identify require calls', function() { | ||
expect(imports).to.have.length(1); | ||
imports.forEach(node => { | ||
expect(node).to.have.property('source'); | ||
expect(node).to.have.property('specifiers'); | ||
expect(node).to.have.property('type', 'CJSImport'); | ||
expect(node).to.have.property('reference'); | ||
}); | ||
}); | ||
it('should have the correct settings', function() { | ||
let test = imports[0]; | ||
expect(test).to.have.property('start', 13); | ||
expect(test).to.have.property('end', 46); | ||
expect(test.specifiers).to.be.deep.equal([{ | ||
type: 'ImportSpecifier', | ||
local: { | ||
name: 'test', | ||
start: 17, end: 21, | ||
type: 'Identifier' | ||
}, | ||
imported: { | ||
name: 'test', | ||
start: 41, end: 45, | ||
type: 'Identifier' | ||
}, | ||
start: 17, end: 21, | ||
default: false | ||
}]); | ||
expect(_.omit(test.source, '_ast', 'reference')).to.be.deep.equal({ | ||
type: 'Literal', | ||
value: 'prova', | ||
raw: '\'prova\'', | ||
start: 32, end: 39 | ||
}); | ||
}); | ||
}); | ||
}); |
47630
1004