-
Notifications
You must be signed in to change notification settings - Fork 0
/
production.ts
62 lines (48 loc) · 1.6 KB
/
production.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import type {CreateTestId, Locator, TestId, Target} from './types';
let testId: TestId<unknown> | undefined;
const set = (target: Target, property: string | symbol, value: unknown) => {
if (
typeof property === 'symbol' ||
(!(property in Object.prototype) && property !== 'toJSON' && isTestId(value))
) {
target[property as unknown as string] = value;
}
return true;
};
export const createTestId: CreateTestId = <T>(): TestId<T> => {
if (testId === undefined) {
const toString = () => '';
testId = new Proxy(
{toJSON: toString, toString, valueOf: toString},
{
defineProperty(target, property, descriptor) {
if (descriptor.configurable !== true || descriptor.writable !== true) {
return false;
}
return set(target, property, descriptor.value);
},
deleteProperty: () => true,
get(target, property) {
if (typeof property === 'string' && !target[property]) {
target[property] = testId;
}
return target[property];
},
preventExtensions: () => false,
set,
},
);
}
return testId as TestId<T>;
};
export function isTestId(value: unknown): value is TestId<unknown> {
return value !== undefined && value === testId;
}
export const locator: Locator = () => undefined;
export type {TestId};
export default createTestId;
declare const exports: object;
declare const module: {exports: CreateTestId};
module.exports = createTestId;
Object.assign(module.exports, exports);
Object.defineProperty(module.exports, '__esModule', {value: true});