Skip to content

remove redundancy in node.config schema keys #60904

@vassudanagunta

Description

@vassudanagunta

What is the problem this feature will solve?

Notice below how in the current schema, the namespaces "test" and "watch" are redundantly specified. This is the result of mapping the CLI args as-is.

{
    "$schema": "https://nodejs.org/dist/vX.Y.Z/docs/node-config-schema.json",
    "test": {
        "test-concurrency": 3
        "test-isolation": "process"
        "test-timeout": 5000
        "test-rerun-failures": true
        "test-only": true
        "test-force-exit": false
        "test-name-pattern": "^iso"
        "test-skip-pattern": "tree$"
        "test-global-setup": "setup-module.mjs"
        "experimental-test-coverage": true
        "test-coverage-exclude": "test/**"
        "test-coverage-include": "src/**"
        "test-coverage-branches": 100
        "test-coverage-functions": 100
        "test-coverage-lines": 100
        "test-reporter": ["dot", "spec", "lcov"]
        "test-reporter-destination": ["stdout", "test.report", "lcov.info"]
        "experimental-test-module-mocks": true
        "test-update-snapshots": true
    },
    "watch": {
        "watch-preserve-output": true
        "watch-path": "./src"
    }
} 

What is the feature you are proposing to solve the problem?

Instead, the namespace part of the CLI arg could automatically be mapped to a namespace within the config schema:

{
    "$schema": "https://nodejs.org/dist/vX.Y.Z/docs/node-config-schema.json",
    "test": {
        "concurrency": 3
        "isolation": "process"
        "timeout": 5000
        "rerun-failures": true
        "only": true
        "force-exit": false
        "name-pattern": "^iso"
        "skip-pattern": "tree$"
        "global-setup": "setup-module.mjs"
        "experimental-coverage": true
        "coverage-exclude": "test/**"
        "coverage-include": "src/**"
        "coverage-branches": 100
        "coverage-functions": 100
        "coverage-lines": 100
        "reporter": ["dot", "spec", "lcov"]
        "reporter-destination": ["stdout", "test.report", "lcov.info"]
        "experimental-module-mocks": true
        "test-update-snapshots": true
    },
    "watch": {
        "preserve-output": true
        "path": "./src"
    }
} 

Note that for "experimental-" CLI args, the mapped namespace occurs after that prefix.

We can take it a step further, apply the idea recursively, as below. This has the added of benefit fixing how destinations are specified when there are multiple test reporters.

{
    "$schema": "https://nodejs.org/dist/vX.Y.Z/docs/node-config-schema.json",
    "test": {
        "concurrency": 3
        "isolation": "process"
        "timeout": 5000
        "rerun-failures": true
        "only": true
        "force-exit": false
        "name-pattern": "^iso"
        "skip-pattern": "tree$"
        "global-setup": "setup-module.mjs"
        "experimental-coverage": {
            "exclude": "test/**"
            "include": "src/**"
            "branches": 100
            "functions": 100
            "lines": 100
        }
        "reporter": {
            "dot": {"destination": "stdout"}
            "spec": {"destination": "test.report"}
            "lcov": {"destination": "lcov.info"}
        }
        "experimental-module-mocks": true
        "update-snapshots": true
    },
    "watch": {
        "preserve-output": true
        "path": "./src"
    }
} 

What alternatives have you considered?

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    configIssues or PRs related to the config subsystemfeature requestIssues that request new features to be added to Node.js.

    Type

    No type

    Projects

    Status

    Awaiting Triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions