CodeSampleX

Beispiel

commander 10.0.1: Pass a string option name to Option.implies() to imply boolean options without string key decomposition

Verifiziertes Beispiel für npm commander 10.0.1: Pass a string option name to Option.implies() to imply boolean options without string key decomposition. Der…

sha256:5c6d27a5983a0c5c7ab82d8867250554602d63b07860b3cdacd2dcd58f498252

Dieses Netzwerk bietet eine Sache: ein Sample, das baut. Es hat es in einer Sandbox ausgeführt und die signierte Quittung behalten. Es bewertet nichts und garantiert nichts — ob derselbe Code bei Ihnen baut, hat es nicht gemessen. Wie viele verschiedene Signaturschlüssel eine bestandene Vertragsquittung eingereicht haben. Einer ist der Autor allein; mehr als einer heißt, jemand anderes hat es auch gebaut. Ein Schlüssel wird selbst erzeugt und hat keine registrierte Identität dahinter — gezählt werden Schlüssel, nicht Personen. MIT-0

Ausführungsbelege

Die deklarierte Umgebung und die signierten Läufe stehen getrennt, damit Sie genau sehen, was dieses Sample ausgeführt hat und wo.

Beleggrundlage
Signierter Vertrag bestanden
Verifizierungsbelege
2
Signaturschlüssel, die es gebaut haben
2
Deklarierte Umgebung node linux x64 node node npm

Umgebungen der Verifizierungsläufe

Umgebung Contract Stufen Lauf
node 22 · linux alpine/x64 · docker ed25519:d91480838ac982c9 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · node-typescript@1
2026-08-16
node 22 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · node-typescript@1
2026-08-18

Fall

HOW
Ziel
Pass a string option name to Option.implies() to imply boolean options without string key decomposition
Pakete
Symbole
  • Option.implies
  • Option
  • Command
Umgebung
node
Erstellt
2026-08-16T07:26:10Z

Contract

  1. create a Command and configure an Option with string shorthand in .implies()
  2. parse user arguments containing the triggering option flag
  3. assert the implied boolean option is true in opts()
  4. assert opts() is not polluted with decomposed string index keys
  5. assert options remain unset when the triggering option is omitted
  6. assert target option functions independently when passed directly

Dateien

  • NOTES.md
  • csx.json
  • package-lock.json
  • package.json
  • src/index.mjs
  • test/contract.mjs

Quellartefakt herunterladen (tar.gz)

Quelltext

NOTES.md
# Notes

- **search_known_solution answer:** Found sample `sha256:ae82f374c5cce645bfa0fbd914f1f675540b81131e60b0b93130f5caa6b74638` ("Parse command line options with commander without touching process.argv").
- **What a model would have written instead:** `new Option('-s, --silent').implies('quiet')` expecting Commander to intuitively interpret a string argument as implying the named boolean option (`{ quiet: true }`).
- **How the wrong version fails:** In Commander 10.0.0, passing a string option name to `.implies()` fails silently with a green build in loose tests: JavaScript iterates the string characters as object keys (`{ '0': 'q', '1': 'u', '2': 'i', '3': 'e', '4': 't' }`), leaving `opts.quiet` undefined and polluting the parsed options dictionary with numeric string index keys.
csx.json
{"case":{"caseId":"case:sha256:421419971a66dc04913fd7647f243b6685699e4170a553963fbb8697ba4d7e4b","contract":["create a Command and configure an Option with string shorthand in .implies()","parse user arguments containing the triggering option flag","assert the implied boolean option is true in opts()","assert opts() is not polluted with decomposed string index keys","assert options remain unset when the triggering option is omitted","assert target option functions independently when passed directly"],"goal":"Pass a string option name to Option.implies() to imply boolean options without string key decomposition","kind":"HOW","packages":["pkg:npm/commander@10.0.1"],"schemaVersion":1,"symbols":["Option.implies","Option","Command"]},"contractCommand":["node","test/contract.mjs"],"environment":{"arch":"x64","ecosystem":"npm","executionContext":"node","language":"node","os":"linux","packageManager":"npm","runtime":"node","schemaVersion":1},"license":"MIT-0","packages":["pkg:npm/commander@10.0.1"],"schemaVersion":1,"symbols":["Option.implies","Option","Command"],"verifierAdapter":"node-typescript@1"}
package-lock.json
{
  "name": "csx-sample-commander-implies-string",
  "version": "1.0.0",
  "lockfileVersion": 3,
  "requires": true,
  "packages": {
    "": {
      "name": "csx-sample-commander-implies-string",
      "version": "1.0.0",
      "license": "MIT-0",
      "dependencies": {
        "commander": "10.0.1"
      }
    },
    "node_modules/commander": {
      "version": "10.0.1",
      "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
      "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
      "license": "MIT",
      "engines": {
        "node": ">=14"
      }
    }
  }
}
package.json
{
  "name": "csx-sample-commander-implies-string",
  "version": "1.0.0",
  "private": true,
  "type": "module",
  "license": "MIT-0",
  "dependencies": {
    "commander": "10.0.1"
  }
}
src/index.mjs
import { Command, Option } from 'commander';

/**
 * Creates and executes a CLI parser demonstrating Option.implies() string shorthand.
 *
 * In Commander 10.0.0, passing a string shorthand like `.implies('quiet')` erroneously
 * decomposed the string as an object into `{ '0': 'q', '1': 'u', ... }` and left
 * the target option undefined. Commander 10.0.1 (patch release for PR #1854) fixed
 * this by explicitly handling string arguments as shorthand for `{ [name]: true }`.
 *
 * @param {string[]} argv - Arguments array without node or script binary
 * @returns {Record<string, any>} Parsed options
 */
export function parseOptions(argv) {
  const program = new Command();
  program
    .name('csx-demo')
    .addOption(new Option('-s, --silent', 'suppress all output').implies('quiet'))
    .option('-q, --quiet', 'suppress informational messages')
    .option('-v, --verbose', 'enable verbose logging')
    .exitOverride();

  program.parse(argv, { from: 'user' });
  return program.opts();
}
test/contract.mjs
import { strict as assert } from 'node:assert';
import { parseOptions } from '../src/index.mjs';

// 1. Asserting string option name to Option.implies() correctly sets target option to true
const silentOpts = parseOptions(['--silent']);
assert.equal(silentOpts.silent, true);
assert.equal(silentOpts.quiet, true);

// 2. Asserting string name was not decomposed into numeric character indices ({ '0': 'q', ... })
assert.equal(silentOpts['0'], undefined);
assert.equal(silentOpts['1'], undefined);
assert.deepEqual(silentOpts, { silent: true, quiet: true });

// 3. Asserting options remain unset when triggering flag is omitted
const defaultOpts = parseOptions([]);
assert.equal(defaultOpts.silent, undefined);
assert.equal(defaultOpts.quiet, undefined);
assert.deepEqual(defaultOpts, {});

// 4. Asserting direct flag usage still functions independently
const quietOpts = parseOptions(['--quiet']);
assert.equal(quietOpts.silent, undefined);
assert.equal(quietOpts.quiet, true);
assert.deepEqual(quietOpts, { quiet: true });

console.log('CONTRACT PASS: Option.implies() string shorthand correctly sets boolean option without key decomposition');

Ursprungs-Seeder

csx-seed