onESMNodeFound (filePath, node, args) {
        let { output, code } = activeModules[filePath];
        if (node.type === 'ImportDeclaration' || (args && args.source)) {
            output.overwrite(node.start, node.end, blanker(code, node.start, node.end));
            return;
        } 
        
        if (node.type === 'ExportDefaultDeclaration') {
            // Account for "export default function" and "export default(()=>{})"
            let offset = code[node.start + 14] === ' '? 15 : 14;

            if (node.declaration && node.declaration.id) {
                // Using + 15 to avoid "export default (() => {})" being converted
                // to "module.exports.default = () => {})"
                output.overwrite(node.start, node.start + offset, '', { contentOnly: true });
                output.appendRight(node.declaration.end, `; __e__('default', function () { return ${node.declaration.id.name} });`);
            } else {
                output.overwrite(node.start, node.start + offset, `var __ex_default__ = `, { contentOnly: true });
                let end = code[node.end - 1] === ';'? node.end - 1 : node.end;
                output.appendRight(end, `; __e__('default', function () { return __ex_default__ });`);
            }

            return;
        }
        
        if (node.type === 'ExportNamedDeclaration') {
            if (node.declaration) {
                // Remove 'export' keyword.
                output.overwrite(node.start, node.start + 7, '', { contentOnly: true });
                let specifiers = '; ' + args.map(e => `__e__('${e.exported}', function () { return ${e.local} });`).join('');
                output.appendRight(node.end, specifiers);
            } 

            if (!node.declaration && node.specifiers) {
                if (!node.source) {
                    // Export from statements are already blanked by the import section.
                    output.overwrite(node.start, node.start + 6, '__e__(', { contentOnly: true });
                    node.specifiers.forEach(spec => {
                        // { a as b, c }, need to preserve the variable incase it's from an import statement
                        // This is important for live bindings to be able to be transformed.
                        output.prependLeft(spec.local.start, spec.exported.name + ': function () { return ');

                        if (spec.local.start !== spec.exported.start) {
                            output.overwrite(spec.local.end, spec.exported.end, '', { contentOnly: true });
                        }

                        output.appendRight(spec.exported.end, ' }');
                    });

                    if (code[node.end - 1] === ';') {
                        output.prependLeft(node.end - 1, ')');
                    } else {
                        output.appendRight(node.end, ');')

                    }

                }
            }

            return;
        } 
        
        if (node.type === 'ImportExpression') {
            if (!args.external) {
                if (typeof args.resolved.id === 'string' && path.isAbsolute(args.resolved.id.split(':').pop())) {
                    // import('hello') --> require.dynamic('/hello.js');
                    output.overwrite(node.start, node.start + 6, 'require.dynamic', { contentOnly: true });
                    output.overwrite(node.source.start, node.source.end, '\'' + normalizePathDelimiter(args.resolved.id) + '\'', { contentOnly: true });
                }
            }
        } 
    }
@param {string} filePath
@param {ESTree} node 
@param {any} args