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
- 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
Arquivos
- NOTES.md
- csx.json
- package-lock.json
- package.json
- src/index.mjs
- test/contract.mjs
Código-fonte
# 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.
{"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"}
{
"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"
}
}
}
}
{
"name": "csx-sample-commander-implies-string",
"version": "1.0.0",
"private": true,
"type": "module",
"license": "MIT-0",
"dependencies": {
"commander": "10.0.1"
}
}
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();
}
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');