Skip to content

invalid block directive in minify-dead-code-elimination #601

@postspectacular

Description

@postspectacular

Just encountered this error (w/ babel-plugin-minify-dead-code-elimination@0.1.7):

TypeError: bundle.js: block.get(...).filter is not a function
    at getUseStrictDirectives (.../node_modules/babel-plugin-minify-dead-code-elimination/lib/remove-use-strict.js:50:34)
    at removeUseStrict (.../node_modules/babel-plugin-minify-dead-code-elimination/lib/remove-use-strict.js:21:20)
    at PluginPass.exit (.../node_modules/babel-plugin-minify-dead-code-elimination/lib/index.js:844:13)
    at newFn (.../node_modules/babel-traverse/lib/visitors.js:276:21)
    at NodePath._call (.../node_modules/babel-traverse/lib/path/context.js:76:18)
    at NodePath.call (.../node_modules/babel-traverse/lib/path/context.js:48:17)
    at NodePath.visit (.../node_modules/babel-traverse/lib/path/context.js:117:8)
    at TraversalContext.visitQueue (.../node_modules/babel-traverse/lib/context.js:150:16)
    at TraversalContext.visitSingle (.../node_modules/babel-traverse/lib/context.js:108:19)
    at TraversalContext.visit (.../node_modules/babel-traverse/lib/context.js:192:19)
    at Function.traverse.node (.../node_modules/babel-traverse/lib/index.js:114:17)

I've added some debug traces and it seems that block.get("directives") doesn't always return an array, but sometimes an object too, in which case this error is triggered. Not sure about the internals of blocks, but maybe that's an upstream issue?

As a quick fix this works:

function getUseStrictDirectives(block) {
    var dir = block.get("directives");
    return dir.filter ? dir.filter(function (directive) {
        return directive.node.value.value === useStrict;
    }) : [];
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugConfirmed bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions