Skip to content

Testing: Add lint for Babel runtime dependency in transpiled packages #14373

@aduth

Description

@aduth

Each package transpiled using Babel is configured to apply the Babel runtime transform (source). Thus, the built output for any package is expected to contain references to the @babel/runtime module. For this reason, the package must explicitly define @babel/runtime as a dependency.

For any package which is transpiled using Babel, we should lint to ensure it also includes an explicit dependency on @babel/runtime.

Implementation:

  • A package can be determined as being subject to transpilation if its package.json includes a main reference to a build/ relative path.
    • Technically speaking, any package will be transpiled with Babel if it includes a src/ directory (source), but the main reference is a better indication that it's actually used (related)
  • I expect the best option for linting would be a rule from npm-package-json-lint requiring a specific dependency to be present, and for each exception package (the minority of cases), a package-specific .npmpackagejsonlintrc.json configuration override should disable the lint rule.
    • The lint rule should be applied only in the Gutenberg-specific configuration, not in @wordpress/npm-package-json-lint-config
    • As best I can tell, however, there is no rule present which covers this case. require-dependencies only requires that the dependencies block be present, and no-restricted-dependencies is the inverse of what we need. We may need to consider contributing an upstream enhancement.

cc @greatislander in case it's of interest to you, as you'd done similarly in the past for #13947 with an upstream enhancement at tclindner/npm-package-json-lint#106 .

Metadata

Metadata

Assignees

No one assigned

    Labels

    Good First IssueAn issue that's suitable for someone looking to contribute for the first timeNeeds DevReady for, and needs developer efforts[Type] Automated TestingTesting infrastructure changes impacting the execution of end-to-end (E2E) and/or unit tests.[Type] TaskIssues or PRs that have been broken down into an individual action to take

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions