Skip to content

Commonjs: Transform of “require” must only be applied to global function named exactly “require” #25

@MartinKolbAtWork

Description

@MartinKolbAtWork

The commonjs plugin should transform only calls to a global function called “require”. Calls to functions containing the term ”require” (e.g. “myrequire”) and calling “require” on an object (e.g. “myObj.require”) must not be transformed.

Versions

  • originjs: 1.0.3

Reproduction

Unit tests that check this would be:

test('require function on object', () => {
  let code = `myObj.require("react");`
  let result = transformRequire(code, 'main.ts');
  expect(result.code).toMatch(`myObj.require("react");`);
});

test('require as part of function name', () => {
  let code = `myrequire("react");`
  let result = transformRequire(code, 'main.ts');
  expect(result.code).toMatch(`myrequire("react");`);
});

Fix

To fix this issue, the RegEx that searches the require function should be changed to be like this:

const requireRegex: RegExp = /(?<!\.)\b_{0,2}require\s*\(\s*(["'].*?["'])\s*\)/g;

Find the tests and the proposed fix in this pull-request: #26

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions