@e7w/easy-model 0.0.10 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es.js CHANGED
@@ -1,90 +1,106 @@
1
- var A = Object.defineProperty;
2
- var C = (n, t, e) => t in n ? A(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
- var f = (n, t, e) => (C(n, typeof t != "symbol" ? t + "" : t, e), e);
4
- const d = /* @__PURE__ */ new WeakMap(), S = Symbol("origin");
5
- function c(n) {
6
- if (n = o(n), d.has(n))
7
- return d.get(n);
8
- const t = new Proxy(n, new H(n));
9
- return d.set(n, t), t;
1
+ var C = Object.defineProperty;
2
+ var A = (n, t, e) => t in n ? C(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
+ var f = (n, t, e) => (A(n, typeof t != "symbol" ? t + "" : t, e), e);
4
+ const H = [Promise, WeakMap, WeakSet, Map, Set];
5
+ function v(n) {
6
+ return H.some((t) => n instanceof t);
10
7
  }
8
+ const g = /* @__PURE__ */ new WeakMap(), j = Symbol("origin");
11
9
  function o(n) {
12
- return n && (n[S] || n);
10
+ if (n = c(n), v(n))
11
+ return n;
12
+ if (g.has(n))
13
+ return g.get(n);
14
+ const t = new Proxy(n, new T(n));
15
+ return g.set(n, t), t;
13
16
  }
14
- class H {
17
+ function c(n) {
18
+ return n && (n[j] || n);
19
+ }
20
+ class T {
15
21
  constructor(t) {
16
22
  f(this, "triggers", {});
17
23
  f(this, "cachedFns", {});
18
24
  this.obj = t;
19
25
  }
20
26
  get(t, e, r) {
21
- if (e === S)
27
+ if (e === j)
22
28
  return this.obj;
23
- let s = j(t, e) || Reflect.get(t, e, r);
24
- return typeof s == "function" ? this.cachedFns[e] || (this.cachedFns[e] = s.bind(c(t))) : (typeof s == "object" && (s = c(s), _(s, this.getTrigger(e))), s);
29
+ if (v(t))
30
+ return Reflect.get(c(t), e);
31
+ let s = E(t, e) || Reflect.get(t, e, r);
32
+ return typeof s == "function" ? this.cachedFns[e] || (this.cachedFns[e] = s.bind(o(t))) : (typeof s == "object" && (s = o(s), _(s, this.getTrigger(e))), s);
25
33
  }
26
34
  set(t, e, r, s) {
27
- if (r && (r = o(r)), r === o(Reflect.get(t, e)))
35
+ if (r && (r = c(r)), r === c(Reflect.get(t, e)))
28
36
  return !0;
29
- const i = E(), u = Reflect.set(t, e, r, s);
30
- return g(this.obj, [e]), R(i), u;
37
+ const i = R(), u = Reflect.set(t, e, r, s);
38
+ return y(this.obj, [e]), M(i), u;
31
39
  }
32
40
  getTrigger(t) {
33
- return t in this.triggers || (this.triggers[t] = (e) => g(this.obj, [t, ...e])), this.triggers[t];
41
+ return t in this.triggers || (this.triggers[t] = (e) => y(this.obj, [t, ...e])), this.triggers[t];
34
42
  }
35
43
  }
36
44
  const k = /* @__PURE__ */ new Set();
37
- let y = null;
38
- const l = ["push", "pop", "shift", "unshift", "splice", "sort"];
39
- function j(n, t) {
45
+ let d = null;
46
+ const l = [
47
+ "push",
48
+ "pop",
49
+ "shift",
50
+ "unshift",
51
+ "splice",
52
+ "sort",
53
+ "reverse"
54
+ ], x = ["includes", "indexOf", "lastIndexOf"], W = ["forEach", "map"];
55
+ function E(n, t) {
40
56
  return t === "hasOwnProperty" ? function(e) {
41
- return o(this).hasOwnProperty(e);
42
- } : Array.isArray(n) && typeof l[t] == "function" ? function(...e) {
43
- let r;
44
- return l.includes(t) ? (r = l[t].apply(o(this), e), g(this, [t])) : r = l[t].apply(this, e), r;
57
+ return c(this).hasOwnProperty(e);
58
+ } : Array.isArray(n) && typeof l[t] == "function" ? W.includes(t) ? n[t] : function(...e) {
59
+ const r = l[t].apply(c(this), e);
60
+ return x.includes(t) && (r === -1 || r === !1) ? l[t].apply(c(this), ...e.map(c)) : (l.includes(t) && y(this, [t]), r);
45
61
  } : null;
46
62
  }
47
63
  const p = /* @__PURE__ */ new WeakMap();
48
- function v(n) {
49
- return n = o(n), p.has(n) || p.set(n, /* @__PURE__ */ new Set()), p.get(n);
64
+ function m(n) {
65
+ return n = c(n), p.has(n) || p.set(n, /* @__PURE__ */ new Set()), p.get(n);
50
66
  }
51
67
  function _(n, t) {
52
- v(n).add(t);
68
+ m(n).add(t);
53
69
  }
54
- function F(n, t) {
70
+ function q(n, t) {
55
71
  const e = (s) => {
56
72
  const i = k.has(t);
57
- k.add(t), i || T(() => t(s)), _(n, e);
73
+ k.add(t), i || I(() => t(s)), _(n, e);
58
74
  }, r = () => {
59
- v(n).delete(e);
75
+ m(n).delete(e);
60
76
  };
61
77
  return _(n, e), r;
62
78
  }
63
- function g(n, t) {
64
- const e = v(n), r = [...e];
79
+ function y(n, t) {
80
+ const e = m(n), r = [...e];
65
81
  e.clear(), r.forEach((s) => s(t));
66
82
  }
67
83
  const b = "__easy_model_event__";
68
- function T(n) {
84
+ function I(n) {
69
85
  const t = new EventTarget(), e = new Event(b);
70
86
  t.addEventListener(b, () => {
71
87
  t.removeEventListener(b, n), n();
72
88
  }), t.dispatchEvent(e);
73
89
  }
74
- function E() {
75
- return y ? null : y = Symbol();
90
+ function R() {
91
+ return d ? null : d = Symbol();
76
92
  }
77
- function R(n) {
78
- y === n && (y = null, k.clear());
93
+ function M(n) {
94
+ d === n && (d = null, k.clear());
79
95
  }
80
96
  let h = null;
81
- const M = Symbol("filterSymbol");
82
- function W(n) {
97
+ const F = Symbol("filterSymbol");
98
+ function L(n) {
83
99
  return new Proxy(n, new a(n));
84
100
  }
85
- function q(n, t, e) {
101
+ function U(n, t, e) {
86
102
  const r = e ? n(...e) : Object.create(n.prototype);
87
- return c(Object.assign(r, t));
103
+ return o(Object.assign(r, t));
88
104
  }
89
105
  const O = class {
90
106
  constructor(t) {
@@ -116,16 +132,16 @@ const O = class {
116
132
  this.filterArgs(e),
117
133
  r === this.Ctor ? this.fakeCtor : r
118
134
  );
119
- return h !== r ? c(s) : s;
135
+ return h !== r ? o(s) : s;
120
136
  }
121
137
  set(t, e, r, s) {
122
- if (r && (r = o(r)), r === o(Reflect.get(t, e)))
138
+ if (r && (r = c(r)), r === c(Reflect.get(t, e)))
123
139
  return !0;
124
- const i = E(), u = Reflect.set(t, e, r, s);
140
+ const i = R(), u = Reflect.set(t, e, r, s);
125
141
  return this.caches.forEach((w) => {
126
- const m = w.deref();
127
- m && g(m, []);
128
- }), R(i), u;
142
+ const S = w.deref();
143
+ S && y(S, []);
144
+ }), M(i), u;
129
145
  }
130
146
  getInstance(t) {
131
147
  for (const e of this.caches.keys()) {
@@ -134,36 +150,36 @@ const O = class {
134
150
  ))
135
151
  continue;
136
152
  const r = this.caches.get(e);
137
- return r.deref() ? c(r.deref()) : (this.caches.delete(e), null);
153
+ return r.deref() ? o(r.deref()) : (this.caches.delete(e), null);
138
154
  }
139
155
  return null;
140
156
  }
141
157
  register(t, e) {
142
- return this.caches.set(t, new WeakRef(e)), c(e);
158
+ return this.caches.set(t, new WeakRef(e)), o(e);
143
159
  }
144
160
  isShallowEqualObj(t, e) {
145
- const r = Object.keys(t), s = e.keys(e);
161
+ const r = Object.keys(t), s = Object.keys(e);
146
162
  return r.length === s.length && r.every((i) => t[i] === e[i]);
147
163
  }
148
164
  filterArgs(t) {
149
- return t.filter((e) => e !== M);
165
+ return t.filter((e) => e !== F);
150
166
  }
151
167
  };
152
168
  let a = O;
153
169
  f(a, "prototypeHandlers", {
154
170
  get(t, e, r) {
155
- const s = j(t, e);
171
+ const s = E(t, e);
156
172
  if (s)
157
173
  return s;
158
174
  const i = Reflect.get(t, e, r);
159
175
  return typeof e == "symbol" || ["constructor", "__proto__"].includes(e) || typeof i != "function" ? i : function(...u) {
160
- return i.apply(c(this), u);
176
+ return i.apply(o(this), u);
161
177
  };
162
178
  }
163
179
  });
164
180
  export {
165
- q as extend,
166
- M as filterSymbol,
167
- W as provide,
168
- F as subscribe
181
+ U as extend,
182
+ F as filterSymbol,
183
+ L as provide,
184
+ q as subscribe
169
185
  };
package/dist/index.umd.js CHANGED
@@ -1 +1 @@
1
- (function(o,c){typeof exports=="object"&&typeof module<"u"?c(exports):typeof define=="function"&&define.amd?define(["exports"],c):(o=typeof globalThis<"u"?globalThis:o||self,c(o["@e7w/easy-model"]={}))})(this,function(o){"use strict";var W=Object.defineProperty;var q=(o,c,f)=>c in o?W(o,c,{enumerable:!0,configurable:!0,writable:!0,value:f}):o[c]=f;var h=(o,c,f)=>(q(o,typeof c!="symbol"?c+"":c,f),f);const c=new WeakMap,f=Symbol("origin");function l(n){if(n=u(n),c.has(n))return c.get(n);const t=new Proxy(n,new A(n));return c.set(n,t),t}function u(n){return n&&(n[f]||n)}class A{constructor(t){h(this,"triggers",{});h(this,"cachedFns",{});this.obj=t}get(t,e,r){if(e===f)return this.obj;let s=j(t,e)||Reflect.get(t,e,r);return typeof s=="function"?this.cachedFns[e]||(this.cachedFns[e]=s.bind(l(t))):(typeof s=="object"&&(s=l(s),v(s,this.getTrigger(e))),s)}set(t,e,r,s){if(r&&(r=u(r)),r===u(Reflect.get(t,e)))return!0;const i=w(),a=Reflect.set(t,e,r,s);return g(this.obj,[e]),E(i),a}getTrigger(t){return t in this.triggers||(this.triggers[t]=e=>g(this.obj,[t,...e])),this.triggers[t]}}const k=new Set;let d=null;const y=["push","pop","shift","unshift","splice","sort"];function j(n,t){return t==="hasOwnProperty"?function(e){return u(this).hasOwnProperty(e)}:Array.isArray(n)&&typeof y[t]=="function"?function(...e){let r;return y.includes(t)?(r=y[t].apply(u(this),e),g(this,[t])):r=y[t].apply(this,e),r}:null}const m=new WeakMap;function _(n){return n=u(n),m.has(n)||m.set(n,new Set),m.get(n)}function v(n,t){_(n).add(t)}function C(n,t){const e=s=>{const i=k.has(t);k.add(t),i||H(()=>t(s)),v(n,e)},r=()=>{_(n).delete(e)};return v(n,e),r}function g(n,t){const e=_(n),r=[...e];e.clear(),r.forEach(s=>s(t))}const S="__easy_model_event__";function H(n){const t=new EventTarget,e=new Event(S);t.addEventListener(S,()=>{t.removeEventListener(S,n),n()}),t.dispatchEvent(e)}function w(){return d?null:d=Symbol()}function E(n){d===n&&(d=null,k.clear())}let p=null;const R=Symbol("filterSymbol");function M(n){return new Proxy(n,new b(n))}function F(n,t,e){const r=e?n(...e):Object.create(n.prototype);return l(Object.assign(r,t))}const O=class{constructor(t){h(this,"fakeCtor");h(this,"caches",new Map);this.Ctor=t;const e=function(){};e.prototype=new Proxy({constructor:t,__proto__:t.prototype},O.prototypeHandlers),this.fakeCtor=e}apply(t,e,r){const s=p;p=this.fakeCtor;const i=this.getInstance(r)||this.register(r,Reflect.construct(this.Ctor,this.filterArgs(r),this.fakeCtor));return p=s,i}construct(t,e,r){const s=Reflect.construct(t,this.filterArgs(e),r===this.Ctor?this.fakeCtor:r);return p!==r?l(s):s}set(t,e,r,s){if(r&&(r=u(r)),r===u(Reflect.get(t,e)))return!0;const i=w(),a=Reflect.set(t,e,r,s);return this.caches.forEach(P=>{const T=P.deref();T&&g(T,[])}),E(i),a}getInstance(t){for(const e of this.caches.keys()){if(e.length!==t.length||!e.every((s,i)=>s===t[i]?!0:typeof s=="object"&&typeof t[i]=="object"?this.isShallowEqualObj(s,t[i]):!1))continue;const r=this.caches.get(e);return r.deref()?l(r.deref()):(this.caches.delete(e),null)}return null}register(t,e){return this.caches.set(t,new WeakRef(e)),l(e)}isShallowEqualObj(t,e){const r=Object.keys(t),s=e.keys(e);return r.length===s.length&&r.every(i=>t[i]===e[i])}filterArgs(t){return t.filter(e=>e!==R)}};let b=O;h(b,"prototypeHandlers",{get(t,e,r){const s=j(t,e);if(s)return s;const i=Reflect.get(t,e,r);return typeof e=="symbol"||["constructor","__proto__"].includes(e)||typeof i!="function"?i:function(...a){return i.apply(l(this),a)}}}),o.extend=F,o.filterSymbol=R,o.provide=M,o.subscribe=C,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
1
+ (function(o,c){typeof exports=="object"&&typeof module<"u"?c(exports):typeof define=="function"&&define.amd?define(["exports"],c):(o=typeof globalThis<"u"?globalThis:o||self,c(o["@e7w/easy-model"]={}))})(this,function(o){"use strict";var L=Object.defineProperty;var U=(o,c,u)=>c in o?L(o,c,{enumerable:!0,configurable:!0,writable:!0,value:u}):o[c]=u;var h=(o,c,u)=>(U(o,typeof c!="symbol"?c+"":c,u),u);const c=[Promise,WeakMap,WeakSet,Map,Set];function u(n){return c.some(e=>n instanceof e)}const m=new WeakMap,E=Symbol("origin");function l(n){if(n=f(n),u(n))return n;if(m.has(n))return m.get(n);const e=new Proxy(n,new A(n));return m.set(n,e),e}function f(n){return n&&(n[E]||n)}class A{constructor(e){h(this,"triggers",{});h(this,"cachedFns",{});this.obj=e}get(e,t,s){if(t===E)return this.obj;if(u(e))return Reflect.get(f(e),t);let r=M(e,t)||Reflect.get(e,t,s);return typeof r=="function"?this.cachedFns[t]||(this.cachedFns[t]=r.bind(l(e))):(typeof r=="object"&&(r=l(r),_(r,this.getTrigger(t))),r)}set(e,t,s,r){if(s&&(s=f(s)),s===f(Reflect.get(e,t)))return!0;const i=R(),a=Reflect.set(e,t,s,r);return b(this.obj,[t]),w(i),a}getTrigger(e){return e in this.triggers||(this.triggers[e]=t=>b(this.obj,[e,...t])),this.triggers[e]}}const k=new Set;let d=null;const y=["push","pop","shift","unshift","splice","sort","reverse"],H=["includes","indexOf","lastIndexOf"],W=["forEach","map"];function M(n,e){return e==="hasOwnProperty"?function(t){return f(this).hasOwnProperty(t)}:Array.isArray(n)&&typeof y[e]=="function"?W.includes(e)?n[e]:function(...t){const s=y[e].apply(f(this),t);return H.includes(e)&&(s===-1||s===!1)?y[e].apply(f(this),...t.map(f)):(y.includes(e)&&b(this,[e]),s)}:null}const S=new WeakMap;function O(n){return n=f(n),S.has(n)||S.set(n,new Set),S.get(n)}function _(n,e){O(n).add(e)}function x(n,e){const t=r=>{const i=k.has(e);k.add(e),i||I(()=>e(r)),_(n,t)},s=()=>{O(n).delete(t)};return _(n,t),s}function b(n,e){const t=O(n),s=[...t];t.clear(),s.forEach(r=>r(e))}const v="__easy_model_event__";function I(n){const e=new EventTarget,t=new Event(v);e.addEventListener(v,()=>{e.removeEventListener(v,n),n()}),e.dispatchEvent(t)}function R(){return d?null:d=Symbol()}function w(n){d===n&&(d=null,k.clear())}let p=null;const T=Symbol("filterSymbol");function P(n){return new Proxy(n,new g(n))}function F(n,e,t){const s=t?n(...t):Object.create(n.prototype);return l(Object.assign(s,e))}const j=class{constructor(e){h(this,"fakeCtor");h(this,"caches",new Map);this.Ctor=e;const t=function(){};t.prototype=new Proxy({constructor:e,__proto__:e.prototype},j.prototypeHandlers),this.fakeCtor=t}apply(e,t,s){const r=p;p=this.fakeCtor;const i=this.getInstance(s)||this.register(s,Reflect.construct(this.Ctor,this.filterArgs(s),this.fakeCtor));return p=r,i}construct(e,t,s){const r=Reflect.construct(e,this.filterArgs(t),s===this.Ctor?this.fakeCtor:s);return p!==s?l(r):r}set(e,t,s,r){if(s&&(s=f(s)),s===f(Reflect.get(e,t)))return!0;const i=R(),a=Reflect.set(e,t,s,r);return this.caches.forEach(q=>{const C=q.deref();C&&b(C,[])}),w(i),a}getInstance(e){for(const t of this.caches.keys()){if(t.length!==e.length||!t.every((r,i)=>r===e[i]?!0:typeof r=="object"&&typeof e[i]=="object"?this.isShallowEqualObj(r,e[i]):!1))continue;const s=this.caches.get(t);return s.deref()?l(s.deref()):(this.caches.delete(t),null)}return null}register(e,t){return this.caches.set(e,new WeakRef(t)),l(t)}isShallowEqualObj(e,t){const s=Object.keys(e),r=Object.keys(t);return s.length===r.length&&s.every(i=>e[i]===t[i])}filterArgs(e){return e.filter(t=>t!==T)}};let g=j;h(g,"prototypeHandlers",{get(e,t,s){const r=M(e,t);if(r)return r;const i=Reflect.get(e,t,s);return typeof t=="symbol"||["constructor","__proto__"].includes(t)||typeof i!="function"?i:function(...a){return i.apply(l(this),a)}}}),o.extend=F,o.filterSymbol=T,o.provide=P,o.subscribe=x,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@e7w/easy-model",
3
- "version": "0.0.10",
3
+ "version": "0.0.12",
4
4
  "description": "一个简单的状态管理包, A simple state management lib for Typescript",
5
5
  "main": "./src/index.ts",
6
6
  "module": "./dist/index.es.js",
package/src/helpers.ts CHANGED
@@ -5,7 +5,17 @@ let triggerSymbol: Symbol | null = null;
5
5
 
6
6
  export type Ctor = new (...args: any[]) => any;
7
7
  export type Obj = Record<string | symbol | number, any>;
8
- const fakeArr: any = ["push", "pop", "shift", "unshift", "splice", "sort"];
8
+ const fakeArr: any = [
9
+ "push",
10
+ "pop",
11
+ "shift",
12
+ "unshift",
13
+ "splice",
14
+ "sort",
15
+ "reverse",
16
+ ];
17
+ const findMethods: any = ["includes", "indexOf", "lastIndexOf"];
18
+ const safeMethods: any = ["forEach", "map"];
9
19
  export function safeGet(target: Obj, p: string | symbol): any {
10
20
  if (p === "hasOwnProperty") {
11
21
  return function (this: Obj, key: string) {
@@ -13,13 +23,14 @@ export function safeGet(target: Obj, p: string | symbol): any {
13
23
  };
14
24
  }
15
25
  if (Array.isArray(target) && typeof fakeArr[p] === "function") {
26
+ if (safeMethods.includes(p)) return target[p as keyof typeof target];
16
27
  return function (this: Obj, ...args: any) {
17
- let ret: any;
28
+ const ret = fakeArr[p].apply(getOrigin(this), args);
29
+ if (findMethods.includes(p) && (ret === -1 || ret === false)) {
30
+ return fakeArr[p].apply(getOrigin(this), ...args.map(getOrigin));
31
+ }
18
32
  if (fakeArr.includes(p)) {
19
- ret = fakeArr[p].apply(getOrigin(this), args);
20
33
  trigger(this, [p]);
21
- } else {
22
- ret = fakeArr[p].apply(this, args);
23
34
  }
24
35
  return ret;
25
36
  };
package/src/observe.ts CHANGED
@@ -7,10 +7,16 @@ import {
7
7
  endTrigger,
8
8
  } from "./helpers";
9
9
 
10
+ const unSafeCtor = [Promise, WeakMap, WeakSet, Map, Set];
11
+ function isUnsafeInstance<T extends Obj>(target: T): boolean {
12
+ return unSafeCtor.some((ctor) => target instanceof ctor);
13
+ }
14
+
10
15
  const observedMap = new WeakMap();
11
16
  const origin = Symbol("origin");
12
17
  export function observe<T extends Obj>(target: T): T {
13
18
  target = getOrigin(target);
19
+ if (isUnsafeInstance(target)) return target;
14
20
  if (observedMap.has(target)) return observedMap.get(target);
15
21
  const ret = new Proxy(target, new ObserveHandler(target));
16
22
  observedMap.set(target, ret);
@@ -34,6 +40,7 @@ class ObserveHandler<T extends Obj> implements ProxyHandler<T> {
34
40
 
35
41
  public get(target: T, p: string | symbol, receiver: any): any {
36
42
  if (p === origin) return this.obj;
43
+ if (isUnsafeInstance(target)) return Reflect.get(getOrigin(target), p);
37
44
  let ret = safeGet(target, p) || Reflect.get(target, p, receiver);
38
45
  if (typeof ret === "function")
39
46
  return (
package/src/provide.ts CHANGED
@@ -163,7 +163,7 @@ class Provider<T extends Ctor> implements ProxyHandler<T> {
163
163
 
164
164
  private isShallowEqualObj(objectA: Obj, objectB: Obj): Boolean {
165
165
  const kOfA = Object.keys(objectA);
166
- const kOfB = objectB.keys(objectB);
166
+ const kOfB = Object.keys(objectB);
167
167
  return (
168
168
  kOfA.length === kOfB.length &&
169
169
  kOfA.every((key) => objectA[key] === objectB[key])