Skip to content

Commit 4f8d8ef

Browse files
committed
feat: allow isReactive() to take non-object types
1 parent 6e9996d commit 4f8d8ef

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

src/signals/reactivity.ts

+15-10
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ export const IS_REACTIVE = Symbol("reactive");
1111
export const ORIGINAL_REF = Symbol("original_ref");
1212
export const CONNECTED_SIGNAL = Symbol("connected_signal");
1313

14-
export function isReactive<T extends object>(input: T): input is Reactive<T> {
15-
return IS_REACTIVE in input;
14+
export function isReactive<T>(input: T): input is Reactive<T> {
15+
return input instanceof Object && IS_REACTIVE in input;
1616
}
1717

18-
export function getConnectedSignal<T extends object>(input: T | Reactive<T>): Signal<T> {
18+
export function getConnectedSignal<T extends object>(
19+
input: T | Reactive<T>,
20+
): Signal<T> {
1921
if (isReactive(input)) {
2022
return input[CONNECTED_SIGNAL];
2123
}
@@ -116,7 +118,10 @@ export function makeMapMethodsReactive<T extends Map<unknown, unknown>, S>(
116118
*
117119
* When set gets in any way updated `propagate` method gets called on provided signal.
118120
*/
119-
export function makeSetMethodsReactive<T extends Set<unknown>, S>(set: T, signal: Signal<S>): T {
121+
export function makeSetMethodsReactive<T extends Set<unknown>, S>(
122+
set: T,
123+
signal: Signal<S>,
124+
): T {
120125
Object.defineProperties(set, {
121126
[IS_REACTIVE]: { value: true },
122127
[ORIGINAL_REF]: { value: set },
@@ -248,19 +253,19 @@ export function makeArrayMethodsReactive<T extends Array<unknown>, S>(
248253
*
249254
* @returns new object, not direct reference to given object
250255
*/
251-
export function makeObjectPropertiesReactive<T, S>(object: T, signal: Signal<S>, watchObjectIndex = false): T {
256+
export function makeObjectPropertiesReactive<T, S>(
257+
object: T,
258+
signal: Signal<S>,
259+
watchObjectIndex = false,
260+
): T {
252261
if (typeof object !== "object") {
253262
throw new Error("parameter object needs to be typeof 'object'");
254263
}
255264

256265
if (Array.isArray(object)) {
257266
makeArrayMethodsReactive(object, signal);
258267
if (!watchObjectIndex) return object;
259-
} else if (
260-
!Object.getOwnPropertyDescriptor(object, IS_REACTIVE) &&
261-
!Object.getOwnPropertyDescriptor(object, ORIGINAL_REF) &&
262-
!Object.getOwnPropertyDescriptor(object, CONNECTED_SIGNAL)
263-
) {
268+
} else if (!isReactive(object)) {
264269
Object.defineProperties(object, {
265270
[IS_REACTIVE]: { value: true },
266271
[ORIGINAL_REF]: { value: object },

0 commit comments

Comments
 (0)