Rewrite boolean defines as globals

This commit is contained in:
Tim Schaub
2016-12-18 15:34:49 -07:00
parent ea04523bb9
commit d17e809039
3 changed files with 66 additions and 2 deletions

View File

@@ -306,6 +306,7 @@ build/test_rendering_requires.js: $(SPEC_RENDERING_JS)
package: build/timestamps/node-modules-timestamp package: build/timestamps/node-modules-timestamp
@rm -rf build/package @rm -rf build/package
@mkdir -p build @mkdir -p build
@node tasks/generate-info.js
@cp -r package build @cp -r package build
@cd ./src && cp -r ol/* ../build/package @cd ./src && cp -r ol/* ../build/package
@rm build/package/typedefs.js @rm build/package/typedefs.js

View File

@@ -1,6 +1,6 @@
{ {
"name": "ol", "name": "ol",
"version": "3.21.0-beta.2", "version": "3.21.0-beta.4",
"description": "OpenLayers", "description": "OpenLayers",
"main": "index.js", "main": "index.js",
"license": "BSD-2-Clause", "license": "BSD-2-Clause",

View File

@@ -1,10 +1,18 @@
var pkg = require('../package.json'); const pkg = require('../package.json');
const defines = require('../build/info.json').defines;
const defineLookup = {};
defines.forEach(define => defineLookup[define.name] = define);
function rename(name) { function rename(name) {
const parts = name.split('.'); const parts = name.split('.');
return `_${parts.join('_')}_`; return `_${parts.join('_')}_`;
} }
function renameDefine(name) {
return name.replace('.', '_').toUpperCase();
}
function resolve(fromName, toName) { function resolve(fromName, toName) {
const fromParts = fromName.split('.'); const fromParts = fromName.split('.');
const toParts = toName.split('.'); const toParts = toName.split('.');
@@ -60,6 +68,34 @@ function getGoogExpressionStatement(identifier) {
}; };
} }
const defineAssignment = {
type: 'AssignmentExpression',
left: {
type: 'MemberExpression',
object: {
type: 'Identifier',
name: 'ol'
},
property: {
type: 'Identifier'
}
},
right: {
type: 'Literal'
}
};
const defineMemberExpression = {
type: 'MemberExpression',
object: {
type: 'Identifier',
name: 'ol'
},
property: {
type: 'Identifier'
}
};
function getMemberExpression(name) { function getMemberExpression(name) {
function memberExpression(parts) { function memberExpression(parts) {
const dotIndex = parts.lastIndexOf('.'); const dotIndex = parts.lastIndexOf('.');
@@ -91,6 +127,33 @@ module.exports = function(info, api) {
const replacements = {}; const replacements = {};
// replace assignments for boolean defines (e.g. ol.FOO = true -> global.OL_FOO = true)
root.find(j.AssignmentExpression, defineAssignment)
.filter(path => {
const node = path.value;
const defineName = `${node.left.object.name}.${node.left.property.name}`;
return defineName in defineLookup;
})
.replaceWith(path => {
const node = path.value;
const defineName = `${node.left.object.name}.${node.left.property.name}`;
return j.assignmentExpression(
'=',
j.memberExpression(j.identifier('global'), j.identifier(renameDefine(defineName))),
j.literal(node.right.value));
});
// replace all uses of boolean defines with renamed define
root.find(j.MemberExpression, defineMemberExpression)
.filter(path => {
const node = path.value;
const defineName = `${node.object.name}.${node.property.name}`;
return defineName in defineLookup;
})
.replaceWith(path => {
return j.identifier(renameDefine(`${path.value.object.name}.${path.value.property.name}`));
});
// replace goog.provide() // replace goog.provide()
let provide; let provide;
root.find(j.ExpressionStatement, getGoogExpressionStatement('provide')) root.find(j.ExpressionStatement, getGoogExpressionStatement('provide'))