@solidjs/reactivity
Advanced tools
Comparing version 0.0.4 to 0.0.5
@@ -35,3 +35,3 @@ /** | ||
export type Accessor<T> = () => T; | ||
export type Setter<T> = (undefined extends T ? () => undefined : {}) & (<U extends T>(value: (prev: T) => U) => U) & (<U extends T>(value: Exclude<U, Function>) => U) & (<U extends T>(value: Exclude<U, Function> | ((prev: T) => U)) => U); | ||
export type Setter<T> = (value: SetterArg<T>) => T; | ||
export type Signal<T> = [get: Accessor<T>, set: Setter<T>]; | ||
@@ -38,0 +38,0 @@ /** A reactive element contains a mutable value that can be observed by other reactive elements. |
@@ -230,3 +230,2 @@ // src/core.ts | ||
var $NODE = Symbol("store-node"); | ||
var $NAME = Symbol("store-name"); | ||
function wrap(value) { | ||
@@ -239,3 +238,4 @@ let p = value[$PROXY]; | ||
if (!Array.isArray(value)) { | ||
const keys = Object.keys(value), desc = Object.getOwnPropertyDescriptors(value); | ||
const keys = Object.keys(value); | ||
const desc = Object.getOwnPropertyDescriptors(value); | ||
for (let i = 0, l = keys.length; i < l; i++) { | ||
@@ -280,3 +280,4 @@ const prop = keys[i]; | ||
set.add(item); | ||
const keys = Object.keys(item), desc = Object.getOwnPropertyDescriptors(item); | ||
const keys = Object.keys(item); | ||
const desc = Object.getOwnPropertyDescriptors(item); | ||
for (let i = 0, l = keys.length; i < l; i++) { | ||
@@ -304,3 +305,3 @@ prop = keys[i]; | ||
const desc = Reflect.getOwnPropertyDescriptor(target, property); | ||
if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE || property === $NAME) | ||
if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE) | ||
return desc; | ||
@@ -329,2 +330,3 @@ delete desc.value; | ||
} | ||
var Writing = false; | ||
var proxyTraps = { | ||
@@ -358,6 +360,8 @@ get(target, property, receiver) { | ||
}, | ||
set() { | ||
set(target, property, value) { | ||
Writing && setProperty(target, property, unwrap(value)); | ||
return true; | ||
}, | ||
deleteProperty() { | ||
deleteProperty(target, property) { | ||
Writing && setProperty(target, property, void 0, true); | ||
return true; | ||
@@ -368,24 +372,7 @@ }, | ||
}; | ||
var producers = /* @__PURE__ */ new WeakMap(); | ||
var setterTraps = { | ||
get(target, property) { | ||
if (property === $RAW) | ||
return target; | ||
const value = target[property]; | ||
let proxy; | ||
return isWrappable(value) ? producers.get(value) || (producers.set(value, proxy = new Proxy(value, setterTraps)), proxy) : value; | ||
}, | ||
set(target, property, value) { | ||
setProperty(target, property, unwrap(value)); | ||
return true; | ||
}, | ||
deleteProperty(target, property) { | ||
setProperty(target, property, void 0, true); | ||
return true; | ||
} | ||
}; | ||
function setProperty(state, property, value, deleting = false) { | ||
if (!deleting && state[property] === value) | ||
return; | ||
const prev = state[property], len = state.length; | ||
const prev = state[property]; | ||
const len = state.length; | ||
if (deleting) | ||
@@ -395,3 +382,4 @@ delete state[property]; | ||
state[property] = value; | ||
let nodes = getDataNodes(state), node; | ||
let nodes = getDataNodes(state); | ||
let node; | ||
if (node = getDataNode(nodes, property, prev)) | ||
@@ -404,19 +392,16 @@ node.$(() => value); | ||
function createStore(store) { | ||
const unwrappedStore = unwrap(store || {}); | ||
const unwrappedStore = unwrap(store); | ||
const wrappedStore = wrap(unwrappedStore); | ||
function setStore(fn) { | ||
batch(() => update(unwrappedStore, fn)); | ||
} | ||
const setStore = (fn) => { | ||
batch(() => { | ||
try { | ||
Writing = true; | ||
fn(wrappedStore); | ||
} finally { | ||
Writing = false; | ||
} | ||
}); | ||
}; | ||
return [wrappedStore, setStore]; | ||
} | ||
function update(state, fn) { | ||
let proxy; | ||
if (!(proxy = producers.get(state))) { | ||
producers.set( | ||
state, | ||
proxy = new Proxy(state, setterTraps) | ||
); | ||
} | ||
fn(proxy); | ||
} | ||
export { | ||
@@ -423,0 +408,0 @@ batch, |
@@ -1,2 +0,2 @@ | ||
export type Store<T> = T; | ||
export type Store<T> = Readonly<T>; | ||
export type SetStoreFunction<T> = (fn: (state: T) => void) => void; | ||
@@ -3,0 +3,0 @@ export type StoreNode = Record<PropertyKey, any>; |
{ | ||
"name": "@solidjs/reactivity", | ||
"version": "0.0.4", | ||
"version": "0.0.5", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "type": "module", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
16578
511