1234567891011121314151617181920212223242526272829303132333435363738394041 |
- // This is an example of using tokens to add a custom behaviour.
- //
- // This adds a option order check so that --some-unstable-option
- // may only be used after --enable-experimental-options
- //
- // Note: this is not a common behaviour, the order of different options
- // does not usually matter.
- import { parseArgs } from '../index.js';
- function findTokenIndex(tokens, target) {
- return tokens.findIndex((token) => token.kind === 'option' &&
- token.name === target
- );
- }
- const experimentalName = 'enable-experimental-options';
- const unstableName = 'some-unstable-option';
- const options = {
- [experimentalName]: { type: 'boolean' },
- [unstableName]: { type: 'boolean' },
- };
- const { values, tokens } = parseArgs({ options, tokens: true });
- const experimentalIndex = findTokenIndex(tokens, experimentalName);
- const unstableIndex = findTokenIndex(tokens, unstableName);
- if (unstableIndex !== -1 &&
- ((experimentalIndex === -1) || (unstableIndex < experimentalIndex))) {
- throw new Error(`'--${experimentalName}' must be specified before '--${unstableName}'`);
- }
- console.log(values);
- /* eslint-disable max-len */
- // Try the following:
- // node ordered-options.mjs
- // node ordered-options.mjs --some-unstable-option
- // node ordered-options.mjs --some-unstable-option --enable-experimental-options
- // node ordered-options.mjs --enable-experimental-options --some-unstable-option
|