@e7w/easy-model 0.0.8 → 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,87 +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 d = /* @__PURE__ */ new WeakMap(), v = Symbol("origin");
5
- function c(n) {
6
- if (n = u(n), d.has(n))
7
- return d.get(n);
8
- const t = new Proxy(n, new R(n));
9
- return d.set(n, t), t;
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
+ function o(n) {
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(c(t))) : (typeof r == "object" && (r = c(r), l(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 o = Reflect.set(t, e, s, r);
30
- return g(this.obj, [e]), o;
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) => g(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 b = /* @__PURE__ */ new Set(), f = ["push", "pop", "shift", "unshift", "splice", "sort"];
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 f[t] == "function" ? function(...e) {
41
- let s;
42
- return f.includes(t) ? (s = f[t].apply(u(this), e), g(this, [t])) : s = f[t].apply(this, e), 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
- const p = /* @__PURE__ */ new WeakMap();
46
- function k(n) {
47
- return n = u(n), p.has(n) || p.set(n, /* @__PURE__ */ new Set()), p.get(n);
47
+ const d = /* @__PURE__ */ new WeakMap();
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 l(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
- if (b.has(t))
55
- return l(n, e);
56
- C(() => t(r)), b.add(t), l(n, e);
57
- }, s = () => {
58
- 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);
59
60
  };
60
- return l(n, e), s;
61
+ return k(n, e), r;
61
62
  }
62
- function g(n, t) {
63
- const e = k(n), s = [...e].reverse();
64
- e.clear(), s.forEach((r) => r(t)), b.clear();
63
+ function _(n, t) {
64
+ const e = w(n), r = [...e];
65
+ e.clear(), r.forEach((s) => s(t));
65
66
  }
66
- const y = "__easy_model_event__";
67
- function C(n) {
68
- const t = new EventTarget(), e = new Event(y);
69
- t.addEventListener(y, () => {
70
- t.removeEventListener(y, n), n();
67
+ const p = "__easy_model_event__";
68
+ function R(n) {
69
+ const t = new EventTarget(), e = new Event(p);
70
+ t.addEventListener(p, () => {
71
+ t.removeEventListener(p, n), n();
71
72
  }), t.dispatchEvent(e);
72
73
  }
73
- let h = null;
74
- function M(n) {
75
- return new Proxy(n, new a(n));
74
+ function A() {
75
+ return a ? null : a = Symbol();
76
76
  }
77
- function S(n, t, e) {
78
- const s = e ? n(...e) : Object.create(n.prototype);
79
- return c(Object.assign(s, t));
77
+ function C(n) {
78
+ a === n && (a = null, b.clear());
80
79
  }
81
- const _ = class {
80
+ let l = null;
81
+ const H = Symbol("filterSymbol");
82
+ function x(n) {
83
+ return new Proxy(n, new h(n));
84
+ }
85
+ function F(n, t, e) {
86
+ const r = e ? n(...e) : Object.create(n.prototype);
87
+ return o(Object.assign(r, t));
88
+ }
89
+ const v = class {
82
90
  constructor(t) {
83
- i(this, "fakeCtor");
84
- i(this, "caches", /* @__PURE__ */ new Map());
91
+ c(this, "fakeCtor");
92
+ c(this, "caches", /* @__PURE__ */ new Map());
85
93
  this.Ctor = t;
86
94
  const e = function() {
87
95
  };
@@ -90,59 +98,63 @@ const _ = class {
90
98
  constructor: t,
91
99
  __proto__: t.prototype
92
100
  },
93
- _.prototypeHandlers
101
+ v.prototypeHandlers
94
102
  ), this.fakeCtor = e;
95
103
  }
96
- apply(t, e, s) {
97
- const r = h;
98
- h = this.fakeCtor;
99
- const o = this.getInstance(s) || this.register(
100
- s,
101
- 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)
102
110
  );
103
- return h = r, o;
111
+ return l = s, i;
104
112
  }
105
- construct(t, e, s) {
106
- const r = Reflect.construct(
113
+ construct(t, e, r) {
114
+ const s = Reflect.construct(
107
115
  t,
108
- e,
109
- s === this.Ctor ? this.fakeCtor : s
116
+ this.filterArgs(e),
117
+ r === this.Ctor ? this.fakeCtor : r
110
118
  );
111
- return h !== s ? c(r) : r;
119
+ return l !== r ? o(s) : s;
112
120
  }
113
121
  getInstance(t) {
114
122
  for (const e of this.caches.keys()) {
115
123
  if (e.length !== t.length || !e.every(
116
- (r, o) => r === t[o] ? !0 : typeof r == "object" && typeof t[o] == "object" ? this.isShallowEqualObj(r, t[o]) : !1
124
+ (s, i) => s === t[i] ? !0 : typeof s == "object" && typeof t[i] == "object" ? this.isShallowEqualObj(s, t[i]) : !1
117
125
  ))
118
126
  continue;
119
- const s = this.caches.get(e);
120
- return s.deref() ? c(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);
121
129
  }
122
130
  return null;
123
131
  }
124
132
  register(t, e) {
125
- return this.caches.set(t, new WeakRef(e)), c(e);
133
+ return this.caches.set(t, new WeakRef(e)), o(e);
126
134
  }
127
135
  isShallowEqualObj(t, e) {
128
- const s = Object.keys(t), r = e.keys(e);
129
- return s.length === r.length && s.every((o) => t[o] === e[o]);
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);
130
141
  }
131
142
  };
132
- let a = _;
133
- i(a, "prototypeHandlers", {
134
- get(t, e, s) {
135
- const r = w(t, e);
136
- if (r)
137
- return r;
138
- const o = Reflect.get(t, e, s);
139
- return typeof e == "symbol" || ["constructor", "__proto__"].includes(e) || typeof o != "function" ? o : function(...O) {
140
- return o.apply(c(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);
141
152
  };
142
153
  }
143
154
  });
144
155
  export {
145
- S as extend,
146
- M as provide,
147
- m as subscribe
156
+ F as extend,
157
+ H as filterSymbol,
158
+ x as provide,
159
+ M as subscribe
148
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),d(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 b=new Set,a=["push","pop","shift","unshift","splice","sort"];function O(n,e){return e==="hasOwnProperty"?function(t){return h(this).hasOwnProperty(t)}:Array.isArray(n)&&typeof a[e]=="function"?function(...t){let s;return a.includes(e)?(s=a[e].apply(h(this),t),_(this,[e])):s=a[e].apply(this,t),s}:null}const g=new WeakMap;function k(n){return n=h(n),g.has(n)||g.set(n,new Set),g.get(n)}function d(n,e){k(n).add(e)}function m(n,e){const t=r=>{if(b.has(e))return d(n,t);E(()=>e(r)),b.add(e),d(n,t)},s=()=>{k(n).delete(t)};return d(n,t),s}function _(n,e){const t=k(n),s=[...t].reverse();t.clear(),s.forEach(r=>r(e)),b.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 p=null;function R(n){return new Proxy(n,new y(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=p;p=this.fakeCtor;const c=this.getInstance(s)||this.register(s,Reflect.construct(this.Ctor,s,this.fakeCtor));return p=r,c}construct(e,t,s){const r=Reflect.construct(e,t,s===this.Ctor?this.fakeCtor:s);return p!==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 y=w;l(y,"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.8",
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,6 +1,7 @@
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>;
@@ -49,9 +50,9 @@ export function subscribe(
49
50
  handler: (path: (string | symbol)[]) => void
50
51
  ): () => void {
51
52
  const wrappedHandler: typeof handler = (path) => {
52
- if (triggered.has(handler)) return track(target, wrappedHandler);
53
- triggerTop(() => handler(path));
53
+ const isTriggered = triggered.has(handler);
54
54
  triggered.add(handler);
55
+ if (!isTriggered) triggerTop(() => handler(path));
55
56
  track(target, wrappedHandler);
56
57
  };
57
58
  const unsubscribe = () => {
@@ -63,11 +64,9 @@ export function subscribe(
63
64
 
64
65
  export function trigger(target: Obj, path: (string | symbol)[]): void {
65
66
  const handlers = getUpdateHandlers(target);
66
- const cbs = [...handlers].reverse();
67
+ const cbs = [...handlers];
67
68
  handlers.clear();
68
-
69
69
  cbs.forEach((fn) => fn(path));
70
- triggered.clear();
71
70
  }
72
71
 
73
72
  const eventName = "__easy_model_event__";
@@ -80,3 +79,14 @@ function triggerTop(cb: () => void): void {
80
79
  });
81
80
  target.dispatchEvent(e);
82
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
  }