@e7w/easy-model 0.0.7 → 0.0.9

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/helpers.d.ts CHANGED
@@ -4,3 +4,5 @@ export declare function safeGet(target: Obj, p: string | symbol): any;
4
4
  export declare function track(target: Obj, handler: (path: (string | symbol)[]) => void): void;
5
5
  export declare function subscribe(target: Obj, handler: (path: (string | symbol)[]) => void): () => void;
6
6
  export declare function trigger(target: Obj, path: (string | symbol)[]): void;
7
+ export declare function startTrigger(): symbol | null;
8
+ export declare function endTrigger(symbol: symbol | null): void;
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export { subscribe } from "./helpers";
2
- export { provide, extend } from "./provide";
2
+ export { provide, extend, filterSymbol } from "./provide";
package/dist/index.es.js CHANGED
@@ -1,85 +1,95 @@
1
- var j = Object.defineProperty;
2
- var E = (n, t, e) => t in n ? j(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
- var i = (n, t, e) => (E(n, typeof t != "symbol" ? t + "" : t, e), e);
4
- const l = /* @__PURE__ */ new WeakMap(), v = Symbol("origin");
1
+ var S = Object.defineProperty;
2
+ var j = (n, t, e) => t in n ? S(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
+ var c = (n, t, e) => (j(n, typeof t != "symbol" ? t + "" : t, e), e);
4
+ const g = /* @__PURE__ */ new WeakMap(), O = Symbol("origin");
5
5
  function o(n) {
6
- if (n = u(n), l.has(n))
7
- return l.get(n);
8
- const t = new Proxy(n, new R(n));
9
- return l.set(n, t), t;
6
+ if (n = f(n), g.has(n))
7
+ return g.get(n);
8
+ const t = new Proxy(n, new E(n));
9
+ return g.set(n, t), t;
10
10
  }
11
- function u(n) {
12
- return n && (n[v] || n);
11
+ function f(n) {
12
+ return n && (n[O] || n);
13
13
  }
14
- class R {
14
+ class E {
15
15
  constructor(t) {
16
- i(this, "triggers", {});
17
- i(this, "cachedFns", {});
16
+ c(this, "triggers", {});
17
+ c(this, "cachedFns", {});
18
18
  this.obj = t;
19
19
  }
20
- get(t, e, s) {
21
- if (e === v)
20
+ get(t, e, r) {
21
+ if (e === O)
22
22
  return this.obj;
23
- let r = w(t, e) || Reflect.get(t, e, s);
24
- return typeof r == "function" ? this.cachedFns[e] || (this.cachedFns[e] = r.bind(o(t))) : (typeof r == "object" && (r = o(r), g(r, this.getTrigger(e))), r);
23
+ let s = m(t, e) || Reflect.get(t, e, r);
24
+ return typeof s == "function" ? this.cachedFns[e] || (this.cachedFns[e] = s.bind(o(t))) : (typeof s == "object" && (s = o(s), k(s, this.getTrigger(e))), s);
25
25
  }
26
- set(t, e, s, r) {
27
- if (s && (s = u(s)), s === u(Reflect.get(t, e)))
26
+ set(t, e, r, s) {
27
+ if (r && (r = f(r)), r === f(Reflect.get(t, e)))
28
28
  return !0;
29
- const c = Reflect.set(t, e, s, r);
30
- return b(this.obj, [e]), c;
29
+ const i = A(), y = Reflect.set(t, e, r, s);
30
+ return _(this.obj, [e]), C(i), y;
31
31
  }
32
32
  getTrigger(t) {
33
- return t in this.triggers || (this.triggers[t] = (e) => b(this.obj, [t, ...e])), this.triggers[t];
33
+ return t in this.triggers || (this.triggers[t] = (e) => _(this.obj, [t, ...e])), this.triggers[t];
34
34
  }
35
35
  }
36
- const y = /* @__PURE__ */ new Set(), a = ["push", "pop", "shift", "unshift", "splice"];
37
- function w(n, t) {
36
+ const b = /* @__PURE__ */ new Set();
37
+ let a = null;
38
+ const u = ["push", "pop", "shift", "unshift", "splice", "sort"];
39
+ function m(n, t) {
38
40
  return t === "hasOwnProperty" ? function(e) {
39
- return u(this).hasOwnProperty(e);
40
- } : Array.isArray(n) && typeof a[t] == "function" ? function(...e) {
41
- const s = a[t].apply(u(this), e);
42
- return a.includes(t) && b(this, [t]), s;
41
+ return f(this).hasOwnProperty(e);
42
+ } : Array.isArray(n) && typeof u[t] == "function" ? function(...e) {
43
+ let r;
44
+ return u.includes(t) ? (r = u[t].apply(f(this), e), _(this, [t])) : r = u[t].apply(this, e), r;
43
45
  } : null;
44
46
  }
45
47
  const d = /* @__PURE__ */ new WeakMap();
46
- function k(n) {
47
- return n = u(n), d.has(n) || d.set(n, /* @__PURE__ */ new Set()), d.get(n);
48
+ function w(n) {
49
+ return n = f(n), d.has(n) || d.set(n, /* @__PURE__ */ new Set()), d.get(n);
48
50
  }
49
- function g(n, t) {
50
- k(n).add(t);
51
+ function k(n, t) {
52
+ w(n).add(t);
51
53
  }
52
- function m(n, t) {
53
- const e = (r) => {
54
- y.has(t) || (C(() => t(r)), y.add(t), g(n, e));
55
- }, s = () => {
56
- k(n).delete(e);
54
+ function M(n, t) {
55
+ const e = (s) => {
56
+ const i = b.has(t);
57
+ b.add(t), i || R(() => t(s)), k(n, e);
58
+ }, r = () => {
59
+ w(n).delete(e);
57
60
  };
58
- return g(n, e), s;
61
+ return k(n, e), r;
59
62
  }
60
- function b(n, t) {
61
- const e = k(n), s = [...e].reverse();
62
- e.clear(), s.forEach((r) => r(t)), y.clear();
63
+ function _(n, t) {
64
+ const e = w(n), r = [...e];
65
+ e.clear(), r.forEach((s) => s(t));
63
66
  }
64
67
  const p = "__easy_model_event__";
65
- function C(n) {
68
+ function R(n) {
66
69
  const t = new EventTarget(), e = new Event(p);
67
70
  t.addEventListener(p, () => {
68
71
  t.removeEventListener(p, n), n();
69
72
  }), t.dispatchEvent(e);
70
73
  }
71
- let f = null;
72
- function M(n) {
74
+ function A() {
75
+ return a ? null : a = Symbol();
76
+ }
77
+ function C(n) {
78
+ a === n && (a = null, b.clear());
79
+ }
80
+ let l = null;
81
+ const H = Symbol("filterSymbol");
82
+ function x(n) {
73
83
  return new Proxy(n, new h(n));
74
84
  }
75
- function S(n, t, e) {
76
- const s = e ? n(...e) : Object.create(n.prototype);
77
- return o(Object.assign(s, t));
85
+ function F(n, t, e) {
86
+ const r = e ? n(...e) : Object.create(n.prototype);
87
+ return o(Object.assign(r, t));
78
88
  }
79
- const _ = class {
89
+ const v = class {
80
90
  constructor(t) {
81
- i(this, "fakeCtor");
82
- i(this, "caches", /* @__PURE__ */ new Map());
91
+ c(this, "fakeCtor");
92
+ c(this, "caches", /* @__PURE__ */ new Map());
83
93
  this.Ctor = t;
84
94
  const e = function() {
85
95
  };
@@ -88,34 +98,34 @@ const _ = class {
88
98
  constructor: t,
89
99
  __proto__: t.prototype
90
100
  },
91
- _.prototypeHandlers
101
+ v.prototypeHandlers
92
102
  ), this.fakeCtor = e;
93
103
  }
94
- apply(t, e, s) {
95
- const r = f;
96
- f = this.fakeCtor;
97
- const c = this.getInstance(s) || this.register(
98
- s,
99
- Reflect.construct(this.Ctor, s, this.fakeCtor)
104
+ apply(t, e, r) {
105
+ const s = l;
106
+ l = this.fakeCtor;
107
+ const i = this.getInstance(r) || this.register(
108
+ r,
109
+ Reflect.construct(this.Ctor, this.filterArgs(r), this.fakeCtor)
100
110
  );
101
- return f = r, c;
111
+ return l = s, i;
102
112
  }
103
- construct(t, e, s) {
104
- const r = Reflect.construct(
113
+ construct(t, e, r) {
114
+ const s = Reflect.construct(
105
115
  t,
106
- e,
107
- s === this.Ctor ? this.fakeCtor : s
116
+ this.filterArgs(e),
117
+ r === this.Ctor ? this.fakeCtor : r
108
118
  );
109
- return f !== s ? o(r) : r;
119
+ return l !== r ? o(s) : s;
110
120
  }
111
121
  getInstance(t) {
112
122
  for (const e of this.caches.keys()) {
113
123
  if (e.length !== t.length || !e.every(
114
- (r, c) => r === t[c] ? !0 : typeof r == "object" && typeof t[c] == "object" ? this.isShallowEqualObj(r, t[c]) : !1
124
+ (s, i) => s === t[i] ? !0 : typeof s == "object" && typeof t[i] == "object" ? this.isShallowEqualObj(s, t[i]) : !1
115
125
  ))
116
126
  continue;
117
- const s = this.caches.get(e);
118
- return s.deref() ? o(s.deref()) : (this.caches.delete(e), null);
127
+ const r = this.caches.get(e);
128
+ return r.deref() ? o(r.deref()) : (this.caches.delete(e), null);
119
129
  }
120
130
  return null;
121
131
  }
@@ -123,24 +133,28 @@ const _ = class {
123
133
  return this.caches.set(t, new WeakRef(e)), o(e);
124
134
  }
125
135
  isShallowEqualObj(t, e) {
126
- const s = Object.keys(t), r = e.keys(e);
127
- return s.length === r.length && s.every((c) => t[c] === e[c]);
136
+ const r = Object.keys(t), s = e.keys(e);
137
+ return r.length === s.length && r.every((i) => t[i] === e[i]);
138
+ }
139
+ filterArgs(t) {
140
+ return t.filter((e) => e !== H);
128
141
  }
129
142
  };
130
- let h = _;
131
- i(h, "prototypeHandlers", {
132
- get(t, e, s) {
133
- const r = w(t, e);
134
- if (r)
135
- return r;
136
- const c = Reflect.get(t, e, s);
137
- return typeof e == "symbol" || ["constructor", "__proto__"].includes(e) || typeof c != "function" ? c : function(...O) {
138
- return c.apply(o(this), O);
143
+ let h = v;
144
+ c(h, "prototypeHandlers", {
145
+ get(t, e, r) {
146
+ const s = m(t, e);
147
+ if (s)
148
+ return s;
149
+ const i = Reflect.get(t, e, r);
150
+ return typeof e == "symbol" || ["constructor", "__proto__"].includes(e) || typeof i != "function" ? i : function(...y) {
151
+ return i.apply(o(this), y);
139
152
  };
140
153
  }
141
154
  });
142
155
  export {
143
- S as extend,
144
- M as provide,
145
- m as subscribe
156
+ F as extend,
157
+ H as filterSymbol,
158
+ x as provide,
159
+ M as subscribe
146
160
  };
package/dist/index.umd.js CHANGED
@@ -1 +1 @@
1
- (function(i,o){typeof exports=="object"&&typeof module<"u"?o(exports):typeof define=="function"&&define.amd?define(["exports"],o):(i=typeof globalThis<"u"?globalThis:i||self,o(i["@e7w/easy-model"]={}))})(this,function(i){"use strict";var H=Object.defineProperty;var M=(i,o,f)=>o in i?H(i,o,{enumerable:!0,configurable:!0,writable:!0,value:f}):i[o]=f;var l=(i,o,f)=>(M(i,typeof o!="symbol"?o+"":o,f),f);const o=new WeakMap,f=Symbol("origin");function u(n){if(n=h(n),o.has(n))return o.get(n);const e=new Proxy(n,new j(n));return o.set(n,e),e}function h(n){return n&&(n[f]||n)}class j{constructor(e){l(this,"triggers",{});l(this,"cachedFns",{});this.obj=e}get(e,t,s){if(t===f)return this.obj;let r=O(e,t)||Reflect.get(e,t,s);return typeof r=="function"?this.cachedFns[t]||(this.cachedFns[t]=r.bind(u(e))):(typeof r=="object"&&(r=u(r),k(r,this.getTrigger(t))),r)}set(e,t,s,r){if(s&&(s=h(s)),s===h(Reflect.get(e,t)))return!0;const c=Reflect.set(e,t,s,r);return _(this.obj,[t]),c}getTrigger(e){return e in this.triggers||(this.triggers[e]=t=>_(this.obj,[e,...t])),this.triggers[e]}}const p=new Set,y=["push","pop","shift","unshift","splice"];function O(n,e){return e==="hasOwnProperty"?function(t){return h(this).hasOwnProperty(t)}:Array.isArray(n)&&typeof y[e]=="function"?function(...t){const s=y[e].apply(h(this),t);return y.includes(e)&&_(this,[e]),s}:null}const b=new WeakMap;function g(n){return n=h(n),b.has(n)||b.set(n,new Set),b.get(n)}function k(n,e){g(n).add(e)}function m(n,e){const t=r=>{p.has(e)||(E(()=>e(r)),p.add(e),k(n,t))},s=()=>{g(n).delete(t)};return k(n,t),s}function _(n,e){const t=g(n),s=[...t].reverse();t.clear(),s.forEach(r=>r(e)),p.clear()}const v="__easy_model_event__";function E(n){const e=new EventTarget,t=new Event(v);e.addEventListener(v,()=>{e.removeEventListener(v,n),n()}),e.dispatchEvent(t)}let a=null;function R(n){return new Proxy(n,new d(n))}function S(n,e,t){const s=t?n(...t):Object.create(n.prototype);return u(Object.assign(s,e))}const w=class{constructor(e){l(this,"fakeCtor");l(this,"caches",new Map);this.Ctor=e;const t=function(){};t.prototype=new Proxy({constructor:e,__proto__:e.prototype},w.prototypeHandlers),this.fakeCtor=t}apply(e,t,s){const r=a;a=this.fakeCtor;const c=this.getInstance(s)||this.register(s,Reflect.construct(this.Ctor,s,this.fakeCtor));return a=r,c}construct(e,t,s){const r=Reflect.construct(e,t,s===this.Ctor?this.fakeCtor:s);return a!==s?u(r):r}getInstance(e){for(const t of this.caches.keys()){if(t.length!==e.length||!t.every((r,c)=>r===e[c]?!0:typeof r=="object"&&typeof e[c]=="object"?this.isShallowEqualObj(r,e[c]):!1))continue;const s=this.caches.get(t);return s.deref()?u(s.deref()):(this.caches.delete(t),null)}return null}register(e,t){return this.caches.set(e,new WeakRef(t)),u(t)}isShallowEqualObj(e,t){const s=Object.keys(e),r=t.keys(t);return s.length===r.length&&s.every(c=>e[c]===t[c])}};let d=w;l(d,"prototypeHandlers",{get(e,t,s){const r=O(e,t);if(r)return r;const c=Reflect.get(e,t,s);return typeof t=="symbol"||["constructor","__proto__"].includes(t)||typeof c!="function"?c:function(...C){return c.apply(u(this),C)}}}),i.extend=S,i.provide=R,i.subscribe=m,Object.defineProperty(i,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 F=Object.defineProperty;var P=(o,c,f)=>c in o?F(o,c,{enumerable:!0,configurable:!0,writable:!0,value:f}):o[c]=f;var h=(o,c,f)=>(P(o,typeof c!="symbol"?c+"":c,f),f);const c=new WeakMap,f=Symbol("origin");function u(n){if(n=l(n),c.has(n))return c.get(n);const e=new Proxy(n,new T(n));return c.set(n,e),e}function l(n){return n&&(n[f]||n)}class T{constructor(e){h(this,"triggers",{});h(this,"cachedFns",{});this.obj=e}get(e,t,r){if(t===f)return this.obj;let s=O(e,t)||Reflect.get(e,t,r);return typeof s=="function"?this.cachedFns[t]||(this.cachedFns[t]=s.bind(u(e))):(typeof s=="object"&&(s=u(s),m(s,this.getTrigger(t))),s)}set(e,t,r,s){if(r&&(r=l(r)),r===l(Reflect.get(e,t)))return!0;const i=A(),S=Reflect.set(e,t,r,s);return _(this.obj,[t]),C(i),S}getTrigger(e){return e in this.triggers||(this.triggers[e]=t=>_(this.obj,[e,...t])),this.triggers[e]}}const p=new Set;let a=null;const d=["push","pop","shift","unshift","splice","sort"];function O(n,e){return e==="hasOwnProperty"?function(t){return l(this).hasOwnProperty(t)}:Array.isArray(n)&&typeof d[e]=="function"?function(...t){let r;return d.includes(e)?(r=d[e].apply(l(this),t),_(this,[e])):r=d[e].apply(this,t),r}:null}const b=new WeakMap;function k(n){return n=l(n),b.has(n)||b.set(n,new Set),b.get(n)}function m(n,e){k(n).add(e)}function E(n,e){const t=s=>{const i=p.has(e);p.add(e),i||R(()=>e(s)),m(n,t)},r=()=>{k(n).delete(t)};return m(n,t),r}function _(n,e){const t=k(n),r=[...t];t.clear(),r.forEach(s=>s(e))}const v="__easy_model_event__";function R(n){const e=new EventTarget,t=new Event(v);e.addEventListener(v,()=>{e.removeEventListener(v,n),n()}),e.dispatchEvent(t)}function A(){return a?null:a=Symbol()}function C(n){a===n&&(a=null,p.clear())}let y=null;const j=Symbol("filterSymbol");function H(n){return new Proxy(n,new g(n))}function M(n,e,t){const r=t?n(...t):Object.create(n.prototype);return u(Object.assign(r,e))}const w=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},w.prototypeHandlers),this.fakeCtor=t}apply(e,t,r){const s=y;y=this.fakeCtor;const i=this.getInstance(r)||this.register(r,Reflect.construct(this.Ctor,this.filterArgs(r),this.fakeCtor));return y=s,i}construct(e,t,r){const s=Reflect.construct(e,this.filterArgs(t),r===this.Ctor?this.fakeCtor:r);return y!==r?u(s):s}getInstance(e){for(const t of this.caches.keys()){if(t.length!==e.length||!t.every((s,i)=>s===e[i]?!0:typeof s=="object"&&typeof e[i]=="object"?this.isShallowEqualObj(s,e[i]):!1))continue;const r=this.caches.get(t);return r.deref()?u(r.deref()):(this.caches.delete(t),null)}return null}register(e,t){return this.caches.set(e,new WeakRef(t)),u(t)}isShallowEqualObj(e,t){const r=Object.keys(e),s=t.keys(t);return r.length===s.length&&r.every(i=>e[i]===t[i])}filterArgs(e){return e.filter(t=>t!==j)}};let g=w;h(g,"prototypeHandlers",{get(e,t,r){const s=O(e,t);if(s)return s;const i=Reflect.get(e,t,r);return typeof t=="symbol"||["constructor","__proto__"].includes(t)||typeof i!="function"?i:function(...S){return i.apply(u(this),S)}}}),o.extend=M,o.filterSymbol=j,o.provide=H,o.subscribe=E,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
package/dist/provide.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { type Ctor } from "./helpers";
2
+ export declare const filterSymbol: unique symbol;
2
3
  export declare function provide<T extends Ctor>(Ctor: T): T & ((...args: ConstructorParameters<T>) => InstanceType<T>);
3
4
  export declare function extend<T extends ReturnType<typeof provide>, P extends Partial<InstanceType<T>>>(Provider: T, extendData: P): P & Partial<Omit<InstanceType<T>, keyof P>>;
4
5
  export declare function extend<T extends ReturnType<typeof provide>, P extends Partial<InstanceType<T>>, M extends Parameters<T>>(Provider: T, extendData: P, args: M): InstanceType<T>;
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@e7w/easy-model",
3
- "version": "0.0.7",
3
+ "version": "0.0.9",
4
4
  "description": "一个简单的状态管理包, A simple state management lib for Typescript",
5
5
  "main": "./src/index.ts",
6
6
  "module": "./dist/index.es.js",
7
- "types": "./src/index.d.ts",
7
+ "types": "./src/index.ts",
8
8
  "typings": "./dist/index.d.ts",
9
9
  "exports": {
10
10
  "import": "./dist/index.es.js",
package/src/helpers.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  import { getOrigin } from "./observe";
2
2
 
3
3
  const triggered = new Set();
4
+ let triggerSymbol: Symbol | null = null;
4
5
 
5
6
  export type Ctor = new (...args: any[]) => any;
6
7
  export type Obj = Record<string | symbol | number, any>;
7
- const fakeArr: any = ["push", "pop", "shift", "unshift", "splice"];
8
+ const fakeArr: any = ["push", "pop", "shift", "unshift", "splice", "sort"];
8
9
  export function safeGet(target: Obj, p: string | symbol): any {
9
10
  if (p === "hasOwnProperty") {
10
11
  return function (this: Obj, key: string) {
@@ -13,8 +14,13 @@ export function safeGet(target: Obj, p: string | symbol): any {
13
14
  }
14
15
  if (Array.isArray(target) && typeof fakeArr[p] === "function") {
15
16
  return function (this: Obj, ...args: any) {
16
- const ret = fakeArr[p].apply(getOrigin(this), args);
17
- if (fakeArr.includes(p)) trigger(this, [p]);
17
+ let ret: any;
18
+ if (fakeArr.includes(p)) {
19
+ ret = fakeArr[p].apply(getOrigin(this), args);
20
+ trigger(this, [p]);
21
+ } else {
22
+ ret = fakeArr[p].apply(this, args);
23
+ }
18
24
  return ret;
19
25
  };
20
26
  }
@@ -44,9 +50,9 @@ export function subscribe(
44
50
  handler: (path: (string | symbol)[]) => void
45
51
  ): () => void {
46
52
  const wrappedHandler: typeof handler = (path) => {
47
- if (triggered.has(handler)) return;
48
- triggerTop(() => handler(path));
53
+ const isTriggered = triggered.has(handler);
49
54
  triggered.add(handler);
55
+ if (!isTriggered) triggerTop(() => handler(path));
50
56
  track(target, wrappedHandler);
51
57
  };
52
58
  const unsubscribe = () => {
@@ -58,11 +64,9 @@ export function subscribe(
58
64
 
59
65
  export function trigger(target: Obj, path: (string | symbol)[]): void {
60
66
  const handlers = getUpdateHandlers(target);
61
- const cbs = [...handlers].reverse();
67
+ const cbs = [...handlers];
62
68
  handlers.clear();
63
-
64
69
  cbs.forEach((fn) => fn(path));
65
- triggered.clear();
66
70
  }
67
71
 
68
72
  const eventName = "__easy_model_event__";
@@ -75,3 +79,14 @@ function triggerTop(cb: () => void): void {
75
79
  });
76
80
  target.dispatchEvent(e);
77
81
  }
82
+
83
+ export function startTrigger() {
84
+ if (triggerSymbol) return null;
85
+ return (triggerSymbol = Symbol());
86
+ }
87
+
88
+ export function endTrigger(symbol: symbol | null) {
89
+ if (triggerSymbol !== symbol) return;
90
+ triggerSymbol = null;
91
+ triggered.clear();
92
+ }
package/src/index.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export { subscribe } from "./helpers";
2
- export { provide, extend } from "./provide";
2
+ export { provide, extend, filterSymbol } from "./provide";
package/src/observe.ts CHANGED
@@ -1,4 +1,11 @@
1
- import { type Obj, safeGet, track, trigger } from "./helpers";
1
+ import {
2
+ type Obj,
3
+ safeGet,
4
+ track,
5
+ trigger,
6
+ startTrigger,
7
+ endTrigger,
8
+ } from "./helpers";
2
9
 
3
10
  const observedMap = new WeakMap();
4
11
  const origin = Symbol("origin");
@@ -48,8 +55,10 @@ class ObserveHandler<T extends Obj> implements ProxyHandler<T> {
48
55
  ): boolean {
49
56
  if (newValue) newValue = getOrigin(newValue);
50
57
  if (newValue === getOrigin(Reflect.get(target, p))) return true;
58
+ const flag = startTrigger();
51
59
  const ret = Reflect.set(target, p, newValue, receiver);
52
60
  trigger(this.obj, [p]);
61
+ endTrigger(flag);
53
62
  return ret;
54
63
  }
55
64
 
package/src/provide.ts CHANGED
@@ -3,6 +3,8 @@ import { observe } from "./observe";
3
3
 
4
4
  let creatingTarget: any = null;
5
5
 
6
+ export const filterSymbol = Symbol("filterSymbol");
7
+
6
8
  export function provide<T extends Ctor>(
7
9
  Ctor: T
8
10
  ): T & ((...args: ConstructorParameters<T>) => InstanceType<T>) {
@@ -84,7 +86,7 @@ class Provider<T extends Ctor> implements ProxyHandler<T> {
84
86
  this.getInstance(argArray) ||
85
87
  this.register(
86
88
  argArray,
87
- Reflect.construct(this.Ctor, argArray, this.fakeCtor)
89
+ Reflect.construct(this.Ctor, this.filterArgs(argArray), this.fakeCtor)
88
90
  );
89
91
  creatingTarget = last;
90
92
  return instance;
@@ -97,7 +99,7 @@ class Provider<T extends Ctor> implements ProxyHandler<T> {
97
99
  ): InstanceType<T> {
98
100
  const instance = Reflect.construct(
99
101
  target,
100
- argArray,
102
+ this.filterArgs(argArray),
101
103
  newTarget === this.Ctor ? this.fakeCtor : newTarget
102
104
  );
103
105
  if (creatingTarget !== newTarget) return observe(instance);
@@ -142,4 +144,8 @@ class Provider<T extends Ctor> implements ProxyHandler<T> {
142
144
  kOfA.every((key) => objectA[key] === objectB[key])
143
145
  );
144
146
  }
147
+
148
+ private filterArgs(args: any[]): any[] {
149
+ return args.filter((arg) => arg !== filterSymbol);
150
+ }
145
151
  }