1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- // Types
- const Refs = Symbol('Forwarded refs');
- /** Omit properties starting with P */
- function getDescriptor(obj, key) {
- let currentObj = obj;
- while (currentObj) {
- const descriptor = Reflect.getOwnPropertyDescriptor(currentObj, key);
- if (descriptor) return descriptor;
- currentObj = Object.getPrototypeOf(currentObj);
- }
- return undefined;
- }
- export function forwardRefs(target) {
- for (var _len = arguments.length, refs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- refs[_key - 1] = arguments[_key];
- }
- target[Refs] = refs;
- return new Proxy(target, {
- get(target, key) {
- if (Reflect.has(target, key)) {
- return Reflect.get(target, key);
- }
- // Skip internal properties
- if (typeof key === 'symbol' || key.startsWith('__')) return;
- for (const ref of refs) {
- if (ref.value && Reflect.has(ref.value, key)) {
- const val = Reflect.get(ref.value, key);
- return typeof val === 'function' ? val.bind(ref.value) : val;
- }
- }
- },
- has(target, key) {
- if (Reflect.has(target, key)) {
- return true;
- }
- // Skip internal properties
- if (typeof key === 'symbol' || key.startsWith('__')) return false;
- for (const ref of refs) {
- if (ref.value && Reflect.has(ref.value, key)) {
- return true;
- }
- }
- return false;
- },
- set(target, key, value) {
- if (Reflect.has(target, key)) {
- return Reflect.set(target, key, value);
- }
- // Skip internal properties
- if (typeof key === 'symbol' || key.startsWith('__')) return false;
- for (const ref of refs) {
- if (ref.value && Reflect.has(ref.value, key)) {
- return Reflect.set(ref.value, key, value);
- }
- }
- return false;
- },
- getOwnPropertyDescriptor(target, key) {
- const descriptor = Reflect.getOwnPropertyDescriptor(target, key);
- if (descriptor) return descriptor;
- // Skip internal properties
- if (typeof key === 'symbol' || key.startsWith('__')) return;
- // Check each ref's own properties
- for (const ref of refs) {
- if (!ref.value) continue;
- const descriptor = getDescriptor(ref.value, key) ?? ('_' in ref.value ? getDescriptor(ref.value._?.setupState, key) : undefined);
- if (descriptor) return descriptor;
- }
- // Recursive search up each ref's prototype
- for (const ref of refs) {
- const childRefs = ref.value && ref.value[Refs];
- if (!childRefs) continue;
- const queue = childRefs.slice();
- while (queue.length) {
- const ref = queue.shift();
- const descriptor = getDescriptor(ref.value, key);
- if (descriptor) return descriptor;
- const childRefs = ref.value && ref.value[Refs];
- if (childRefs) queue.push(...childRefs);
- }
- }
- return undefined;
- }
- });
- }
- //# sourceMappingURL=forwardRefs.mjs.map
|