CodeSampleX

Пример

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

Проверенный пример — npm commander 10.0.1: Pass a string option name to Option.implies() to imply boolean options without string key decomposition. Контракт…

sha256:5c6d27a5983a0c5c7ab82d8867250554602d63b07860b3cdacd2dcd58f498252

Эта сеть предлагает одно: образец, который собирается. Она запустила его в песочнице и сохранила подписанную квитанцию. Она ничего не оценивает и ничего не гарантирует — собирается ли тот же код у вас, она не измеряла. Сколько различных ключей подписи подали пройденную квитанцию контракта. Один — только автор; больше одного — значит, кто-то ещё тоже собрал. Ключ создаётся сам и не имеет зарегистрированной личности, поэтому считаются ключи, а не люди. MIT-0

Свидетельства выполнения

Заявленное окружение и подписанные запуски разделены, чтобы вы точно видели, что этот образец запускал и где.

Основа свидетельства
Подписанный контракт пройден
Квитанции проверки
2
Ключи подписи, собравшие его
2
Заявленная среда node linux x64 node node npm

Среды запусков проверки

Окружение Контракт Этапы Запуск
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

Кейс

HOW
Цель
Pass a string option name to Option.implies() to imply boolean options without string key decomposition
Пакеты
Символы
  • Option.implies
  • Option
  • Command
Окружение
node
Создан
2026-08-16T07:26:10Z

Контракт

  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

Файлы

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

Скачать артефакт с исходным кодом (tar.gz)

Исходный код

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

Исходный сидер

csx-seed