Skip to content

Commit d1488d1

Browse files
committed
feat(lib): [Command] versioning
Signed-off-by: Lexus Drumgold <[email protected]>
1 parent 59ba47c commit d1488d1

27 files changed

+857
-57
lines changed

__fixtures__/commands/clamp.mts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55

66
import sfmt from '#tests/utils/sfmt'
7+
import { faker } from '@faker-js/faker'
78
import type { CommandInfo } from '@flex-development/kronk'
89

910
/**
@@ -38,7 +39,8 @@ export default {
3839
flags: '-m | --min <n>',
3940
parser: int
4041
}
41-
]
42+
],
43+
version: faker.system.semver()
4244
} as CommandInfo
4345

4446
/**

__fixtures__/commands/mlly.mts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
*/
55

66
import sfmt from '#tests/utils/sfmt'
7+
import { faker } from '@faker-js/faker'
78
import type { CommandInfo } from '@flex-development/kronk'
89
import * as mlly from '@flex-development/mlly'
10+
import { SemVer } from 'semver'
911

1012
/**
1113
* `mlly` program info.
@@ -56,7 +58,8 @@ export default {
5658
description: 'keep symlinks instead of resolving them',
5759
flags: '--ps | --preserve-symlinks'
5860
}
59-
]
61+
],
62+
version: new SemVer(faker.system.semver())
6063
}
6164
]
6265
} as CommandInfo

__tests__/setup/faker.mts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/**
2+
* @file Test Setup - faker
3+
* @module tests/setup/faker
4+
* @see https://github.com/faker-js/faker
5+
*/
6+
7+
import { faker } from '@faker-js/faker'
8+
9+
global.faker = faker

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@
146146
"@flex-development/fsm-tokenizer": "1.0.0-alpha.1",
147147
"@flex-development/log": "5.0.0-alpha.3",
148148
"@flex-development/tutils": "6.0.0-alpha.25",
149+
"@types/semver": "7.7.0",
149150
"eventemitter2": "6.4.9",
150151
"micromark-util-character": "2.1.1",
151152
"plur": "5.1.0"
@@ -154,6 +155,7 @@
154155
"@arethetypeswrong/cli": "0.18.2",
155156
"@commitlint/cli": "19.8.1",
156157
"@commitlint/types": "19.8.1",
158+
"@faker-js/faker": "9.8.0",
157159
"@flex-development/colors": "1.0.2",
158160
"@flex-development/commitlint-config": "1.0.1",
159161
"@flex-development/eslint-config": "1.1.1",
@@ -186,6 +188,7 @@
186188
"prettier": "3.5.3",
187189
"remark": "15.0.1",
188190
"remark-cli": "12.0.1",
191+
"semver": "7.7.2",
189192
"sh-syntax": "0.5.8",
190193
"to-vfile": "8.0.0",
191194
"trash-cli": "6.0.0",

src/__snapshots__/index.e2e.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ exports[`e2e:kronk > should expose public api 1`] = `
66
"Argument",
77
"Command",
88
"Option",
9+
"VersionOption",
910
"CommandError",
1011
"KronkError",
1112
"KronkEvent",

src/interfaces/__tests__/data-command.spec-d.mts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ import type {
1717
Option,
1818
OptionInfo,
1919
OptionPriority,
20-
UnknownStrategy
20+
UnknownStrategy,
21+
Version,
22+
VersionOption,
23+
VersionOptionInfo
2124
} from '@flex-development/kronk'
2225
import type { Nilable } from '@flex-development/tutils'
2326

@@ -123,4 +126,10 @@ describe('unit-d:interfaces/CommandData', () => {
123126
.toHaveProperty('unknown')
124127
.toEqualTypeOf<Nilable<UnknownStrategy>>()
125128
})
129+
130+
it('should match [version?: Version | VersionOption | VersionOptionInfo | null | undefined]', () => {
131+
expectTypeOf<TestSubject>()
132+
.toHaveProperty('version')
133+
.toEqualTypeOf<Nilable<Version | VersionOption | VersionOptionInfo>>()
134+
})
126135
})
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* @file Type Tests - VersionOptionInfo
3+
* @module kronk/interfaces/tests/unit-d/VersionOptionInfo
4+
*/
5+
6+
import type TestSubject from '#interfaces/info-option-version'
7+
import type { Flags, OptionData, Version } from '@flex-development/kronk'
8+
import type { Nilable } from '@flex-development/tutils'
9+
10+
describe('unit-d:interfaces/VersionOptionInfo', () => {
11+
it('should extend OptionData', () => {
12+
expectTypeOf<TestSubject>().toExtend<OptionData>()
13+
})
14+
15+
it('should match [flags?: Flags | null | undefined]', () => {
16+
expectTypeOf<TestSubject>()
17+
.toHaveProperty('flags')
18+
.toEqualTypeOf<Nilable<Flags>>()
19+
})
20+
21+
it('should match [version: Version]', () => {
22+
expectTypeOf<TestSubject>()
23+
.toHaveProperty('version')
24+
.toEqualTypeOf<Version>()
25+
})
26+
})

src/interfaces/data-command.mts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ import type {
1616
Option,
1717
OptionInfo,
1818
OptionPriority,
19-
UnknownStrategy
19+
UnknownStrategy,
20+
Version,
21+
VersionOption,
22+
VersionOptionInfo
2023
} from '@flex-development/kronk'
2124

2225
/**
@@ -130,6 +133,15 @@ interface CommandData {
130133
* @default false
131134
*/
132135
unknown?: UnknownStrategy | null | undefined
136+
137+
/**
138+
* The version of the command.
139+
*
140+
* @see {@linkcode Version}
141+
* @see {@linkcode VersionOption}
142+
* @see {@linkcode VersionOptionInfo}
143+
*/
144+
version?: Version | VersionOption | VersionOptionInfo | null | undefined
133145
}
134146

135147
export type { CommandData as default }

src/interfaces/index.mts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ export type { default as ArgumentInfo } from '#interfaces/info-argument'
1717
export type { default as CommandInfo } from '#interfaces/info-command'
1818
export type { default as DefaultInfo } from '#interfaces/info-default'
1919
export type { default as OptionInfo } from '#interfaces/info-option'
20+
export type {
21+
default as VersionOptionInfo
22+
} from '#interfaces/info-option-version'
2023
export type { default as KronkErrorCause } from '#interfaces/kronk-error-cause'
2124
export type { default as KronkErrorInfo } from '#interfaces/kronk-error-info'
2225
export type { default as KronkErrorJson } from '#interfaces/kronk-error-json'
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* @file Interfaces - VersionOptionInfo
3+
* @module kronk/interfaces/VersionOptionInfo
4+
*/
5+
6+
import type { Flags, OptionData, Version } from '@flex-development/kronk'
7+
8+
/**
9+
* Data used to create a version (i.e. `-v | --version`) command option.
10+
*
11+
* @see {@linkcode OptionData}
12+
*
13+
* @extends {OptionData}
14+
*/
15+
interface VersionOptionInfo extends OptionData {
16+
/**
17+
* Option flags.
18+
*
19+
* @see {@linkcode Flags}
20+
*
21+
* @default '-v | --version'
22+
*/
23+
flags?: Flags | null | undefined
24+
25+
/**
26+
* The command version.
27+
*
28+
* @see {@linkcode Version}
29+
*/
30+
version: Version
31+
}
32+
33+
export type { VersionOptionInfo as default }

0 commit comments

Comments
 (0)