Skip to content

.flowconfig option module.name_mapper can't map to a lib definition #1322

@samwgoldman

Description

@samwgoldman

Repro:

.flowconfig

[lib]
lib
[options]
module.name_mapper='1Doesnt\(Exist\)' -> '\1s'

A.js

/* @flow */
var m1 = require('./1DoesntExist'); // actual error: can't find module 1DoesntExist
var a_1: string = m1.numVal; // expected error: number ~> string

lib/Exists.js

declare module 'Exists' {
  declare var exports: {
    numVal: number;
  };
};

Expected output:

A.js:3:19,27: number
This type is incompatible with
A.js:3:10,15: string

Actual output:

A.js:2:22,37: ./1DoesntExist
Required module not found

Workaround:
While libdefs aren't working, it's still possible to map to a node module. There's an npm module called empty that can be useful here. See this gist for a complete example.

I think the issue is that we do name mapping specifically against file paths, so the code just doesn't attempt to handle this case. I think that it should. cc @jeffmo, who originally added this feature.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions