44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
// This example is used in the documentation.
 | 
						|
 | 
						|
// How might I add my own support for --no-foo?
 | 
						|
 | 
						|
// 1. const { parseArgs } = require('node:util'); // from node
 | 
						|
// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package
 | 
						|
const { parseArgs } = require('..'); // in repo
 | 
						|
 | 
						|
const options = {
 | 
						|
  'color': { type: 'boolean' },
 | 
						|
  'no-color': { type: 'boolean' },
 | 
						|
  'logfile': { type: 'string' },
 | 
						|
  'no-logfile': { type: 'boolean' },
 | 
						|
};
 | 
						|
const { values, tokens } = parseArgs({ options, tokens: true });
 | 
						|
 | 
						|
// Reprocess the option tokens and overwrite the returned values.
 | 
						|
tokens
 | 
						|
  .filter((token) => token.kind === 'option')
 | 
						|
  .forEach((token) => {
 | 
						|
    if (token.name.startsWith('no-')) {
 | 
						|
      // Store foo:false for --no-foo
 | 
						|
      const positiveName = token.name.slice(3);
 | 
						|
      values[positiveName] = false;
 | 
						|
      delete values[token.name];
 | 
						|
    } else {
 | 
						|
      // Resave value so last one wins if both --foo and --no-foo.
 | 
						|
      values[token.name] = token.value ?? true;
 | 
						|
    }
 | 
						|
  });
 | 
						|
 | 
						|
const color = values.color;
 | 
						|
const logfile = values.logfile ?? 'default.log';
 | 
						|
 | 
						|
console.log({ logfile, color });
 | 
						|
 | 
						|
// Try the following:
 | 
						|
//    node negate.js
 | 
						|
//    node negate.js --no-logfile --no-color
 | 
						|
//    negate.js --logfile=test.log --color
 | 
						|
//    node negate.js --no-logfile --logfile=test.log --color --no-color
 |