forked from MCJack123/TypeScriptToLua
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathObjectDefineProperty.ts
More file actions
38 lines (32 loc) · 1.27 KB
/
ObjectDefineProperty.ts
File metadata and controls
38 lines (32 loc) · 1.27 KB
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
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
// eslint-disable-next-line @typescript-eslint/ban-types
import { __TS__SetDescriptor } from "./SetDescriptor";
export function __TS__ObjectDefineProperty<T extends object>(
this: void,
target: T,
key: any,
desc: PropertyDescriptor
): T {
const luaKey = typeof key === "number" ? key + 1 : key;
const value = rawget(target, luaKey);
const hasGetterOrSetter = desc.get !== undefined || desc.set !== undefined;
let descriptor: PropertyDescriptor;
if (hasGetterOrSetter) {
if (value !== undefined) {
throw `Cannot redefine property: ${key}`;
}
descriptor = desc;
} else {
const valueExists = value !== undefined;
descriptor = {
set: desc.set,
get: desc.get,
configurable: desc.configurable !== undefined ? desc.configurable : valueExists,
enumerable: desc.enumerable !== undefined ? desc.enumerable : valueExists,
writable: desc.writable !== undefined ? desc.writable : valueExists,
value: desc.value !== undefined ? desc.value : value,
};
}
__TS__SetDescriptor(target, luaKey, descriptor);
return target;
}