UNPKG

assetgraph

Version:

An auto discovery dependency graph based optimization framework for web pages and applications

54 lines (52 loc) 1.99 kB
const estraverse = require('estraverse-fb'); const replaceDescendantNode = require('../replaceDescendantNode'); module.exports = (queryObj) => { return function stripDebug(assetGraph) { for (const javaScript of assetGraph.findAssets( Object.assign({ type: 'JavaScript' }, queryObj) )) { const isInScopeByIdentifierName = {}; estraverse.traverse(javaScript.parseTree, { enter(node, parentNode) { if ( node.type === 'FunctionExpression' || node.type === 'FunctionDeclaration' ) { for (const param of node.params) { if (param.type === 'Identifier') { isInScopeByIdentifierName[param.name] = isInScopeByIdentifierName[param.name] || 0; isInScopeByIdentifierName[param.name] += 1; } } } else if ( node.type === 'ExpressionStatement' && node.expression.type === 'CallExpression' && node.expression.callee.type === 'MemberExpression' && node.expression.callee.object.type === 'Identifier' && node.expression.callee.object.name === 'console' && !isInScopeByIdentifierName.console ) { replaceDescendantNode(parentNode, node, { type: 'EmptyStatement' }); } else if (node.type === 'DebuggerStatement') { replaceDescendantNode(parentNode, node, { type: 'EmptyStatement' }); } }, leave(node) { if ( node.type === 'FunctionExpression' || node.type === 'FunctionDeclaration' ) { for (const param of node.params) { if (param.type === 'Identifier') { isInScopeByIdentifierName[param.name] = isInScopeByIdentifierName[param.name] || 0; isInScopeByIdentifierName[param.name] -= 1; } } } }, }); } }; };