// 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 | |