Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: get-flag #17

Merged
merged 27 commits into from
Nov 1, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
9203910
refactor: use argv-iterator
privatenumber Oct 31, 2022
a249c10
feat: get-flag
privatenumber Oct 31, 2022
15e27d3
feat: export get-flag
privatenumber Oct 31, 2022
6c2090e
Merge branch 'develop' of github.com:privatenumber/type-flag into arg…
privatenumber Oct 31, 2022
f0b668e
refactor
privatenumber Oct 31, 2022
789dc45
Merge branch 'develop' of github.com:privatenumber/type-flag into arg…
privatenumber Oct 31, 2022
90b1e35
Merge branch 'develop' of github.com:privatenumber/type-flag into arg…
privatenumber Oct 31, 2022
00f4add
refactor
privatenumber Oct 31, 2022
9002808
Merge branch 'argv-iterator' of github.com:privatenumber/type-flag in…
privatenumber Oct 31, 2022
fcb7490
refactor
privatenumber Oct 31, 2022
2571af4
refactor
privatenumber Oct 31, 2022
9adab97
refactor
privatenumber Oct 31, 2022
ba73bf1
refactor
privatenumber Oct 31, 2022
cd2569f
refactor
privatenumber Oct 31, 2022
8e23bdb
refactor
privatenumber Oct 31, 2022
fc803bf
refactor
privatenumber Oct 31, 2022
025dc0b
Merge branch 'argv-iterator' into get-flag
privatenumber Oct 31, 2022
8657c57
Merge branch 'develop' of github.com:privatenumber/type-flag into get…
privatenumber Oct 31, 2022
7b7f8bb
refactor
privatenumber Oct 31, 2022
480226b
refactor
privatenumber Oct 31, 2022
d024857
refactor
privatenumber Oct 31, 2022
5137410
Merge branch 'develop' of github.com:privatenumber/type-flag into get…
privatenumber Oct 31, 2022
b7683da
Merge branch 'develop' of github.com:privatenumber/type-flag into get…
privatenumber Oct 31, 2022
f1c07d3
docs: get-flag
privatenumber Nov 1, 2022
2848f3c
docs: get-flag
privatenumber Nov 1, 2022
8cab9ab
docs: get-flag
privatenumber Nov 1, 2022
b848483
docs: get-flag
privatenumber Nov 1, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
refactor
  • Loading branch information
privatenumber committed Oct 31, 2022
commit 7b7f8bbcefcb227a0f1411b823d5b481e612e128
2 changes: 1 addition & 1 deletion src/argv-iterator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const valueDelimiterPattern = /[.:=]/;

const isFlagPattern = /^-{1,2}[\da-z]/i;

const parseFlagArgv = (
export const parseFlagArgv = (
flagArgv: string,
): [
flagName: string,
Expand Down
82 changes: 4 additions & 78 deletions src/get-flag.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import { describe, test, expect } from 'manten';
import type {
InferFlagType,
FlagType,
} from './types';
import {
parseFlagType,
parseFlagArgv,
normalizeBoolean,
applyParser,
} from './utils';
import { argvIterator } from './argv-iterator';
import {
argvIterator,
parseFlagArgv,
} from './argv-iterator';

export const getFlag = <Schema extends FlagType>(
flagNames: string,
Expand Down Expand Up @@ -52,78 +53,3 @@ export const getFlag = <Schema extends FlagType>(

return (gatherAll ? results : results[0]) as InferFlagType<Schema>;
};

describe('alias', ({ test }) => {
test('', () => {
const argv = ['-n', '1234', '1212'];
const n = getFlag('-n', Number, argv);
expect<number | undefined>(n).toBe(1234);
expect(argv).toStrictEqual(['1212']);
});

test('Expecting value but no value', () => {
const argv = ['-n'];
const n = getFlag('-n', Number, argv);
expect<number | undefined>(n).toBe(Number.NaN);
expect(argv).toStrictEqual([]);
});

test('Explicit value', () => {
const argv = ['-n=1'];
const n = getFlag('-n', Number, argv);
expect<number | undefined>(n).toBe(1);
expect(argv).toStrictEqual([]);
});
});

describe('named flag', ({ test }) => {
test('boolean', () => {
const argv = ['--boolean'];
const n = getFlag('--boolean', Boolean, argv);
expect<boolean | undefined>(n).toBe(true);
expect(argv).toStrictEqual([]);
});

test('boolean with explicit false', () => {
const argv = ['--boolean=false'];
const n = getFlag('--boolean', Boolean, argv);
expect<boolean | undefined>(n).toBe(false);
expect(argv).toStrictEqual([]);
});

test('multiple booleans', () => {
const argv = ['--boolean', '--unknown', '--boolean'];
const booleans = getFlag('--boolean', [Boolean], argv);
expect<boolean[]>(booleans).toStrictEqual([true, true]);
expect(argv).toStrictEqual(['--unknown']);
});
});

test('', () => {
const argv = ['--boolean', 'arg'];
const n = getFlag('--boolean', Boolean, argv);

expect<boolean | undefined>(n).toBe(true);
expect(argv).toStrictEqual(['arg']);
});

test('', () => {
const argv = ['-aliases'];
const a = getFlag('-a', [Boolean], argv);
expect<boolean[]>(a).toStrictEqual([true, true]);
expect(argv).toStrictEqual([]);
});

test('', () => {
const argv = ['-b', '2', '--boolean'];
const a = getFlag('-b', [Boolean], argv);
expect<boolean[]>(a).toStrictEqual([true]);
expect(argv).toStrictEqual(['2', '--boolean']);
});

test('multiple flag aliases', () => {
const argv = ['-b', '2', '--boolean'];
const a = getFlag('-b,--boolean', [Boolean], argv);
expect<boolean[]>(a).toStrictEqual([true, true]);
expect(argv).toStrictEqual(['2']);
});
2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
export { typeFlag as default } from './type-flag';
export { typeFlag } from './type-flag';
export { getFlag } from './get-flag';
export type { TypeFlag, Flags } from './types';
Loading