forked from TypeScriptToLua/TypeScriptToLua
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathObjectDefineProperty.ts
More file actions
29 lines (25 loc) · 1.12 KB
/
ObjectDefineProperty.ts
File metadata and controls
29 lines (25 loc) · 1.12 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
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
function __TS__ObjectDefineProperty<T>(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;
}