add amd2module test
This commit is contained in:
@@ -63,6 +63,7 @@ function getDefineFactory(defineExpr) {
|
|||||||
function getDefineBlock(code) {
|
function getDefineBlock(code) {
|
||||||
var ast = getAst(code);
|
var ast = getAst(code);
|
||||||
var defineList = [];
|
var defineList = [];
|
||||||
|
var defineBlock;
|
||||||
// require('fs').writeFileSync('ast.json', JSON.stringify(ast));
|
// require('fs').writeFileSync('ast.json', JSON.stringify(ast));
|
||||||
estraverse.traverse(ast, {
|
estraverse.traverse(ast, {
|
||||||
enter: function (node, parent) {
|
enter: function (node, parent) {
|
||||||
@@ -71,31 +72,57 @@ function getDefineBlock(code) {
|
|||||||
&& node.expression.callee.name == 'define'
|
&& node.expression.callee.name == 'define'
|
||||||
) {
|
) {
|
||||||
|
|
||||||
var defineBlock = {};
|
|
||||||
defineBlock.defineRange = node.range;
|
|
||||||
|
|
||||||
var factory = getDefineFactory(node.expression);
|
var factory = getDefineFactory(node.expression);
|
||||||
|
|
||||||
// define('xxx', {})
|
// define('xxx', {})
|
||||||
if (factory.type === SYNTAX.ObjectExpression) {
|
if (factory.type === SYNTAX.ObjectExpression) {
|
||||||
defineBlock.type = 'object';
|
defineList.push({
|
||||||
defineBlock.factoryRange = factory.range;
|
type: 'object',
|
||||||
|
defineRange: node.range,
|
||||||
|
factoryRange: factory.range
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// define(function() {})
|
// define(function() {})
|
||||||
else if (factory.type === SYNTAX.FunctionExpression){
|
else if (factory.type === SYNTAX.FunctionExpression){
|
||||||
defineBlock.type = 'function';
|
defineBlock = {
|
||||||
|
type: 'function',
|
||||||
|
defineRange: node.range,
|
||||||
|
factoryRange: factory.body.range
|
||||||
|
};
|
||||||
|
|
||||||
var body = factory.body.body;
|
var body = factory.body.body;
|
||||||
defineBlock.factoryRange = factory.body.range;
|
var returnRange = defineBlock.returnRange = [];
|
||||||
var returnList = defineBlock.returnRange = [];
|
|
||||||
// 替换return
|
// 替换return
|
||||||
for (var i = body.length - 1; i >=0; i--) {
|
for (var i = 0, l = body.length; i < l; i++) {
|
||||||
if (body[i].type == SYNTAX.ReturnStatement) {
|
// 直接在函数体里的return
|
||||||
returnList.push(body[i].range);
|
if (body[i].type === SYNTAX.ReturnStatement) {
|
||||||
|
returnRange.push(body[i].range);
|
||||||
}
|
}
|
||||||
|
// 在函数内部块里的return
|
||||||
|
else if (body[i].type !== SYNTAX.FunctionExpression) {
|
||||||
|
var functionEnter = 0;
|
||||||
|
estraverse.traverse(body[i], {
|
||||||
|
enter: function (returnNode) {
|
||||||
|
if (
|
||||||
|
returnNode.type === SYNTAX.FunctionExpression
|
||||||
|
|| returnNode.type === SYNTAX.FunctionDeclaration
|
||||||
|
) {
|
||||||
|
this.skip();
|
||||||
|
}
|
||||||
|
else if (returnNode.type === SYNTAX.ReturnStatement){
|
||||||
|
returnRange.push(returnNode.range);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
defineList.push(defineBlock);
|
defineList.push(defineBlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
this.skip();
|
this.skip();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -128,6 +155,8 @@ function replaceDefine(code) {
|
|||||||
segments.push(code.slice(range[0] + 6, range[1]));
|
segments.push(code.slice(range[0] + 6, range[1]));
|
||||||
index = range[1];
|
index = range[1];
|
||||||
});
|
});
|
||||||
|
segments.push(code.slice(index, block.factoryRange[1] - 1));
|
||||||
|
|
||||||
index = block.defineRange[1];
|
index = block.defineRange[1];
|
||||||
}
|
}
|
||||||
else if (block.type === 'object'){
|
else if (block.type === 'object'){
|
||||||
|
|||||||
71
node/generated.js
Normal file
71
node/generated.js
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/**
|
||||||
|
* @file test-define.js
|
||||||
|
* @author mengke01(kekee000@gmail.com)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// 测试define函数
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = require('../common/test').test({
|
||||||
|
test1: 'test1',
|
||||||
|
test2: 'test2'
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 测试 string
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = 'test string';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 测试commonjs wrapper
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
test1: 'test1',
|
||||||
|
test2: 'test2'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 测试object
|
||||||
|
|
||||||
|
module.exports ={
|
||||||
|
test1: 'test1',
|
||||||
|
test2: 'test2'
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 测试多return
|
||||||
|
|
||||||
|
|
||||||
|
var string = require('../common/string');
|
||||||
|
|
||||||
|
if (string.pad) {
|
||||||
|
module.exports = string.pad;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
module.exports = function (str) {
|
||||||
|
return function () {
|
||||||
|
str;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 测试 nodejs兼容写法
|
||||||
|
|
||||||
|
if (typeof exports !== 'undefined') {
|
||||||
|
module.exports = exports = require('xmldom').DOMParser;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
module.exports = window.DOMParser;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@ var fs = require('fs');
|
|||||||
var amd2module = require('./amd2module');
|
var amd2module = require('./amd2module');
|
||||||
|
|
||||||
function main() {
|
function main() {
|
||||||
var code = fs.readFileSync('../src/fonteditor/data/online-font.js');
|
var code = fs.readFileSync('./testcase-define.js');
|
||||||
fs.writeFileSync('./generated.js', amd2module(code, '../'));
|
fs.writeFileSync('./generated.js', amd2module(code, '../'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
81
node/testcase-define.js
Normal file
81
node/testcase-define.js
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
/**
|
||||||
|
* @file test-define.js
|
||||||
|
* @author mengke01(kekee000@gmail.com)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// 测试define函数
|
||||||
|
define(
|
||||||
|
function(require) {
|
||||||
|
|
||||||
|
return require('common/test').test({
|
||||||
|
test1: 'test1',
|
||||||
|
test2: 'test2'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// 测试 string
|
||||||
|
|
||||||
|
define(
|
||||||
|
function(require) {
|
||||||
|
return 'test string';
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// 测试commonjs wrapper
|
||||||
|
|
||||||
|
define('test-module', ['test-module'],
|
||||||
|
function(require) {
|
||||||
|
return {
|
||||||
|
test1: 'test1',
|
||||||
|
test2: 'test2'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 测试object
|
||||||
|
|
||||||
|
define('test-module', {
|
||||||
|
test1: 'test1',
|
||||||
|
test2: 'test2'
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// 测试多return
|
||||||
|
define(
|
||||||
|
function(require) {
|
||||||
|
|
||||||
|
var string = require('common/string');
|
||||||
|
|
||||||
|
if (string.pad) {
|
||||||
|
return string.pad;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return function (str) {
|
||||||
|
return function () {
|
||||||
|
str;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// 测试 nodejs兼容写法
|
||||||
|
|
||||||
|
if (typeof exports !== 'undefined') {
|
||||||
|
module.exports = exports = require('xmldom').DOMParser;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
define(
|
||||||
|
function (require) {
|
||||||
|
return window.DOMParser;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user