Skip to content

Commit da126a7

Browse files
committed
Migrate all key to symbol
1 parent 012e9e5 commit da126a7

File tree

3 files changed

+26
-12
lines changed

3 files changed

+26
-12
lines changed

src/resolver.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import { screen, waitFor } from '@testing-library/dom';
22
import user from '@testing-library/user-event';
3-
import { AllDescriptor, RoleDescriptor, optional } from './roles/types';
3+
import {
4+
type AllDescriptor,
5+
type RoleDescriptor,
6+
allKey,
7+
optionalKey,
8+
} from './roles/types';
49

510
export type DescriptorResult<T> = T extends RoleDescriptor & AllDescriptor
611
? Array<HTMLElement>
@@ -30,10 +35,10 @@ export function resolverFor(
3035
<D extends RoleDescriptor>(
3136
descriptor: RoleDescriptor | (RoleDescriptor & AllDescriptor)
3237
): D extends AllDescriptor ? ReadonlyArray<HTMLElement> : HTMLElement => {
33-
if ('all' in descriptor && descriptor.all === true) {
38+
if (allKey in descriptor) {
3439
const { name } = descriptor;
3540
return source.queryAllByRole(descriptor.role, { name }) as any;
36-
} else if (optional in descriptor) {
41+
} else if (optionalKey in descriptor) {
3742
const { name, isSelected: selected } = descriptor;
3843
return source.queryByRole(descriptor.role, { name, selected }) as any;
3944
} else {

src/roles/shared.ts

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import { prettyDOM } from '@testing-library/dom';
2-
import { optional, type AllDescriptor, type RoleDescriptor } from './types';
2+
import {
3+
type AllDescriptor,
4+
type RoleDescriptor,
5+
allKey,
6+
optionalKey,
7+
} from './types';
38

49
export type RoleObject<
510
Role extends string,
@@ -23,10 +28,10 @@ export function role<
2328
role,
2429
name,
2530
get all(): RoleDescriptor & AllDescriptor {
26-
return Object.create(this, { all: { value: true } });
31+
return Object.create(this, { [allKey]: { value: true } });
2732
},
2833
get optional() {
29-
return Object.create(this, { [optional]: { value: true } });
34+
return Object.create(this, { [optionalKey]: { value: true } });
3035
},
3136
get click(): RoleDescriptor {
3237
return Object.create(this, { event: { value: 'click' } });
@@ -42,7 +47,7 @@ export function roleSelectable(role: string, name?: string | RegExp) {
4247
return Object.create(this, { isSelected: { value: true } });
4348
},
4449
get all(): RoleDescriptor & AllDescriptor {
45-
return Object.create(this, { all: { value: true } });
50+
return Object.create(this, { [allKey]: { value: true } });
4651
},
4752
});
4853
}

src/roles/types.ts

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
1-
import { queries, BoundFunctions, Queries } from '@testing-library/dom';
1+
import {
2+
queries,
3+
type BoundFunctions,
4+
type Queries,
5+
} from '@testing-library/dom';
26

3-
const all = Symbol('all');
4-
export const optional = Symbol('optional');
7+
export const allKey = Symbol('all');
8+
export const optionalKey = Symbol('optional');
59

610
export interface RoleDescriptor {
711
readonly role: string;
812
readonly name?: string | RegExp;
9-
readonly [optional]?: true;
13+
readonly [optionalKey]?: true;
1014
readonly isSelected?: boolean;
1115
readonly event?: 'click';
1216
}
1317

1418
export interface AllDescriptor {
15-
readonly all: true;
19+
readonly [allKey]?: true;
1620
}
1721

1822
export interface SingleDescriptor<Q extends Queries = typeof queries> {

0 commit comments

Comments
 (0)