mirror of
https://github.com/visgl/luma.gl.git
synced 2025-12-08 17:36:19 +00:00
70 lines
2.3 KiB
JavaScript
70 lines
2.3 KiB
JavaScript
/* eslint-disable no-console, import/no-unresolved */
|
|
import {GL} from '@luma.gl/constants';
|
|
|
|
const COLOR_RESET = '\x1b[0m';
|
|
const COLOR_YELLOW = '\x1b[33m';
|
|
const COLOR_RED = '\x1b[31m';
|
|
|
|
export default function _(opts) {
|
|
return {
|
|
visitor: {
|
|
ImportDeclaration(path, state) {
|
|
// specifiers: [ ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier ];
|
|
// source: Literal;
|
|
const specifiers = path.get('specifiers');
|
|
specifiers.forEach((specifier) => {
|
|
if (specifier.type === 'ImportDefaultSpecifier') {
|
|
const local = specifier.node.local;
|
|
if (local.type === 'Identifier' && local.name === 'GL') {
|
|
if (state.opts.debug) {
|
|
const filename = getFilename(state);
|
|
const line = local.loc.start.line;
|
|
console.error(
|
|
`${COLOR_YELLOW}${filename}:${line} Dropping GL import${COLOR_RESET}`
|
|
);
|
|
}
|
|
path.remove();
|
|
}
|
|
}
|
|
});
|
|
},
|
|
|
|
MemberExpression(path, state) {
|
|
const object = path.get('object');
|
|
const property = path.get('property');
|
|
const value = GL[property.node.name];
|
|
|
|
const isGLIdentifier =
|
|
object.isIdentifier({name: 'GL'}) || object.isIdentifier({name: 'gl'});
|
|
|
|
if (isGLIdentifier) {
|
|
const filename = getFilename(state);
|
|
const constant = `${object.node.name}.${property.node.name}`;
|
|
|
|
if (value === undefined) {
|
|
if (property.node.name.toUpperCase() === property.node.name) {
|
|
const ERR_MESSAGE = 'Unknown GL constant, inlining failed';
|
|
console.error(
|
|
`${COLOR_RED}${filename}: ${constant} ==> ??? ${ERR_MESSAGE} ${COLOR_RESET}`
|
|
);
|
|
path.buildCodeFrameError(`${constant} ${ERR_MESSAGE}`);
|
|
throw new Error(constant);
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (state.opts.debug) {
|
|
console.error(`${COLOR_YELLOW}${filename}: ${constant} ==> ${value}${COLOR_RESET}`);
|
|
}
|
|
path.replaceWith(opts.types.numericLiteral(value));
|
|
}
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
function getFilename(state) {
|
|
const filename = state.file.opts.filename;
|
|
return filename;
|
|
}
|