CodeSampleX

Exemplo

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

Amostra verificada para npm commander 10.0.1: Pass a string option name to Option.implies() to imply boolean options without string key decomposition. O…

sha256:5c6d27a5983a0c5c7ab82d8867250554602d63b07860b3cdacd2dcd58f498252

Esta rede oferece uma coisa: uma amostra que compila. Ela a executou em um sandbox e guardou o recibo assinado. Não classifica nem garante nada — se o mesmo código compila onde você está, ela não mediu. Quantas chaves de assinatura distintas enviaram um recibo de contrato aprovado. Uma é só o autor; mais de uma significa que outra pessoa também o compilou. Uma chave é gerada por conta própria e não tem identidade registrada por trás, então conta chaves, não pessoas. MIT-0

Evidência de execução

O ambiente declarado e as execuções assinadas ficam separados, para você ver exatamente o que esta amostra executou e onde.

Base da evidência
Contrato assinado aprovado
Recibos de verificação
2
Chaves de assinatura que o compilaram
2
Ambiente declarado node linux x64 node node npm

Ambientes das execuções de verificação

Ambiente Contrato Etapas Execução
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

Caso

HOW
Objetivo
Pass a string option name to Option.implies() to imply boolean options without string key decomposition
Pacotes
Símbolos
  • Option.implies
  • Option
  • Command
Ambiente
node
Criado
2026-08-16T07:26:10Z

Contrato

  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

Arquivos

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

Baixar o artefato de código-fonte (tar.gz)

Código-fonte

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');

Seeder de origem

csx-seed