phecda-core 1.6.0 → 2.0.0-alpha.0

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.js CHANGED
@@ -25,6 +25,7 @@ __export(src_exports, {
25
25
  Bind: () => Bind,
26
26
  Clear: () => Clear,
27
27
  DataMap: () => DataMap,
28
+ Effect: () => Effect,
28
29
  Empty: () => Empty,
29
30
  Err: () => Err,
30
31
  Expose: () => Expose,
@@ -44,17 +45,20 @@ __export(src_exports, {
44
45
  getBind: () => getBind,
45
46
  getExposeKey: () => getExposeKey,
46
47
  getHandler: () => getHandler,
47
- getIgnoreKey: () => getIgnoreKey,
48
48
  getInitEvent: () => getInitEvent,
49
49
  getModelState: () => getModelState,
50
+ getOwnExposeKey: () => getOwnExposeKey,
51
+ getOwnHandler: () => getOwnHandler,
52
+ getOwnIgnoreKey: () => getOwnIgnoreKey,
53
+ getOwnInitEvent: () => getOwnInitEvent,
54
+ getOwnModelState: () => getOwnModelState,
55
+ getOwnState: () => getOwnState,
50
56
  getProperty: () => getProperty,
51
57
  getState: () => getState,
52
58
  getTag: () => getTag,
53
59
  init: () => init,
54
60
  injectProperty: () => injectProperty,
55
61
  isPhecda: () => isPhecda,
56
- mergeOptions: () => mergeOptions,
57
- mergeState: () => mergeState,
58
62
  plainToClass: () => plainToClass,
59
63
  regisHandler: () => regisHandler,
60
64
  regisInitEvent: () => regisInitEvent,
@@ -62,59 +66,23 @@ __export(src_exports, {
62
66
  registerAsync: () => registerAsync,
63
67
  setExposeKey: () => setExposeKey,
64
68
  setIgnoreKey: () => setIgnoreKey,
65
- setModalVar: () => setModalVar,
69
+ setModelVar: () => setModelVar,
70
+ setState: () => setState,
66
71
  snapShot: () => snapShot,
67
72
  to: () => to,
68
73
  validate: () => validate
69
74
  });
70
75
  module.exports = __toCommonJS(src_exports);
71
76
 
72
- // src/utils.ts
73
- async function validate(p, v) {
74
- if (typeof p === "string" || typeof p === "number") {
75
- if (v === p)
76
- return true;
77
- }
78
- if (typeof p === "function")
79
- return p(v);
80
- if (p instanceof RegExp)
81
- return p.test(v);
82
- return false;
83
- }
84
- __name(validate, "validate");
85
- function getTag(Model) {
86
- return Model.prototype?.__TAG__;
87
- }
88
- __name(getTag, "getTag");
89
- function mergeOptions(obj1, obj2) {
90
- if (!obj2)
91
- return obj1;
92
- for (const i in obj2) {
93
- if (isObject(obj1[i]) && isObject(obj2[i])) {
94
- mergeOptions(obj1[i], obj2[i]);
95
- continue;
96
- }
97
- if (Array.isArray(obj1[i]) && Array.isArray(obj2[i])) {
98
- obj1[i].push(...obj2[i].filter((item) => !obj1[i].includes(item)));
99
- continue;
100
- }
101
- obj1[i] = obj2[i];
102
- }
103
- return obj1;
104
- }
105
- __name(mergeOptions, "mergeOptions");
106
- function isObject(obj) {
107
- return Object.prototype.toString.call(obj) === "[object Object]";
108
- }
109
- __name(isObject, "isObject");
110
-
111
77
  // src/core.ts
112
78
  function isPhecda(target) {
113
79
  return target && !!target.prototype._namespace;
114
80
  }
115
81
  __name(isPhecda, "isPhecda");
116
82
  function init(target) {
117
- if (!target._namespace) {
83
+ if (!target)
84
+ return;
85
+ if (!target.hasOwnProperty("_namespace")) {
118
86
  target._namespace = {
119
87
  __INIT_EVENT__: /* @__PURE__ */ new Set(),
120
88
  __EXPOSE_VAR__: /* @__PURE__ */ new Set(),
@@ -131,19 +99,32 @@ function regisInitEvent(target, key) {
131
99
  target._namespace.__INIT_EVENT__.add(key);
132
100
  }
133
101
  __name(regisInitEvent, "regisInitEvent");
134
- function getInitEvent(target) {
135
- init(target);
102
+ function getOwnInitEvent(target) {
103
+ if (!target?._namespace)
104
+ return [];
136
105
  return [
137
106
  ...target._namespace.__INIT_EVENT__
138
107
  ];
139
108
  }
109
+ __name(getOwnInitEvent, "getOwnInitEvent");
110
+ function getInitEvent(target) {
111
+ let proto = Object.getPrototypeOf(target);
112
+ const set = /* @__PURE__ */ new Set();
113
+ while (proto?._namespace) {
114
+ proto._namespace.__INIT_EVENT__.forEach((item) => set.add(item));
115
+ proto = Object.getPrototypeOf(proto);
116
+ }
117
+ return [
118
+ ...set
119
+ ];
120
+ }
140
121
  __name(getInitEvent, "getInitEvent");
141
- function setModalVar(target, key) {
122
+ function setModelVar(target, key) {
142
123
  init(target);
143
124
  target._namespace.__STATE_VAR__.add(key);
144
125
  setExposeKey(target, key);
145
126
  }
146
- __name(setModalVar, "setModalVar");
127
+ __name(setModelVar, "setModelVar");
147
128
  function setExposeKey(target, key) {
148
129
  init(target);
149
130
  target._namespace.__EXPOSE_VAR__.add(key);
@@ -154,27 +135,54 @@ function setIgnoreKey(target, key) {
154
135
  target._namespace.__IGNORE_VAR__.add(key);
155
136
  }
156
137
  __name(setIgnoreKey, "setIgnoreKey");
157
- function getModelState(target) {
158
- init(target);
138
+ function getOwnModelState(target) {
139
+ target = Object.getPrototypeOf(target);
159
140
  return [
160
141
  ...target._namespace.__STATE_VAR__
161
142
  ];
162
143
  }
144
+ __name(getOwnModelState, "getOwnModelState");
145
+ function getModelState(target) {
146
+ let proto = Object.getPrototypeOf(target);
147
+ const set = /* @__PURE__ */ new Set();
148
+ while (proto?._namespace) {
149
+ proto._namespace.__STATE_VAR__.forEach((item) => set.add(item));
150
+ proto = Object.getPrototypeOf(proto);
151
+ }
152
+ return [
153
+ ...set
154
+ ];
155
+ }
163
156
  __name(getModelState, "getModelState");
164
- function getExposeKey(target) {
165
- init(target);
157
+ function getOwnExposeKey(target) {
158
+ target = Object.getPrototypeOf(target);
166
159
  return [
167
160
  ...target._namespace.__EXPOSE_VAR__
168
161
  ].filter((item) => !target._namespace.__IGNORE_VAR__.has(item));
169
162
  }
163
+ __name(getOwnExposeKey, "getOwnExposeKey");
164
+ function getExposeKey(target) {
165
+ let proto = Object.getPrototypeOf(target);
166
+ const set = /* @__PURE__ */ new Set();
167
+ while (proto?._namespace) {
168
+ [
169
+ ...proto._namespace.__EXPOSE_VAR__
170
+ ].forEach((item) => !proto._namespace.__IGNORE_VAR__.has(item) && set.add(item));
171
+ proto = Object.getPrototypeOf(proto);
172
+ }
173
+ return [
174
+ ...set
175
+ ];
176
+ }
170
177
  __name(getExposeKey, "getExposeKey");
171
- function getIgnoreKey(target) {
172
- init(target);
178
+ function getOwnIgnoreKey(target) {
179
+ if (!target?._namespace)
180
+ return [];
173
181
  return [
174
182
  ...target._namespace.__IGNORE_VAR__
175
183
  ];
176
184
  }
177
- __name(getIgnoreKey, "getIgnoreKey");
185
+ __name(getOwnIgnoreKey, "getOwnIgnoreKey");
178
186
  function regisHandler(target, key, handler) {
179
187
  init(target);
180
188
  if (!target._namespace.__STATE_HANDLER__.has(key))
@@ -185,22 +193,48 @@ function regisHandler(target, key, handler) {
185
193
  target._namespace.__STATE_HANDLER__.get(key).push(handler);
186
194
  }
187
195
  __name(regisHandler, "regisHandler");
188
- function getHandler(target, key) {
196
+ function getOwnHandler(target, key) {
197
+ if (!target?._namespace)
198
+ return [];
189
199
  return target._namespace.__STATE_HANDLER__.get(key) || [];
190
200
  }
201
+ __name(getOwnHandler, "getOwnHandler");
202
+ function getHandler(target, key) {
203
+ let proto = Object.getPrototypeOf(target);
204
+ const set = /* @__PURE__ */ new Set();
205
+ while (proto?._namespace) {
206
+ proto._namespace.__STATE_HANDLER__.get(key)?.forEach((item) => set.add(item));
207
+ proto = Object.getPrototypeOf(proto);
208
+ }
209
+ return [
210
+ ...set
211
+ ];
212
+ }
191
213
  __name(getHandler, "getHandler");
192
- function mergeState(target, key, state) {
214
+ function setState(target, key, state) {
215
+ init(target);
193
216
  const namespace = target._namespace.__STATE_NAMESPACE__;
194
- if (!namespace.has(key))
195
- namespace.set(key, state);
196
- else
197
- mergeOptions(namespace.get(key), state);
217
+ namespace.set(key, state);
198
218
  }
199
- __name(mergeState, "mergeState");
219
+ __name(setState, "setState");
220
+ function getOwnState(target, key) {
221
+ target = Object.getPrototypeOf(target);
222
+ return target._namespace.__STATE_NAMESPACE__.get(key) || {};
223
+ }
224
+ __name(getOwnState, "getOwnState");
200
225
  function getState(target, key) {
201
- const namespace = target._namespace.__STATE_NAMESPACE__;
202
- if (namespace)
203
- return namespace.get(key);
226
+ let proto = Object.getPrototypeOf(target);
227
+ let ret = {};
228
+ while (proto?._namespace) {
229
+ const state = proto._namespace.__STATE_NAMESPACE__.get(key);
230
+ if (state)
231
+ ret = {
232
+ ...state,
233
+ ...ret
234
+ };
235
+ proto = Object.getPrototypeOf(proto);
236
+ }
237
+ return ret;
204
238
  }
205
239
  __name(getState, "getState");
206
240
  function register(instance) {
@@ -224,7 +258,7 @@ __name(registerAsync, "registerAsync");
224
258
 
225
259
  // src/decorators.ts
226
260
  function Init(target, key) {
227
- setModalVar(target, key);
261
+ setModelVar(target, key);
228
262
  regisHandler(target, key, {
229
263
  async init(instance) {
230
264
  instance[key]();
@@ -234,8 +268,8 @@ function Init(target, key) {
234
268
  __name(Init, "Init");
235
269
  function Bind(value) {
236
270
  return (target, k) => {
237
- setModalVar(target, k);
238
- mergeState(target, k, {
271
+ setModelVar(target, k);
272
+ setState(target, k, {
239
273
  value
240
274
  });
241
275
  };
@@ -243,7 +277,7 @@ function Bind(value) {
243
277
  __name(Bind, "Bind");
244
278
  function Rule(rule, info, meta) {
245
279
  return (obj, key) => {
246
- setModalVar(obj, key);
280
+ setModelVar(obj, key);
247
281
  regisHandler(obj, key, {
248
282
  rule,
249
283
  info,
@@ -268,7 +302,7 @@ function Clear(target, key) {
268
302
  __name(Clear, "Clear");
269
303
  function Err(cb) {
270
304
  return (target, key) => {
271
- setModalVar(target, key);
305
+ setModelVar(target, key);
272
306
  regisHandler(target, key, {
273
307
  error: cb
274
308
  });
@@ -281,7 +315,7 @@ function Expose(target, key) {
281
315
  __name(Expose, "Expose");
282
316
  function Pipe(v) {
283
317
  return (obj, key) => {
284
- setModalVar(obj, key);
318
+ setModelVar(obj, key);
285
319
  regisHandler(obj, key, {
286
320
  async pipe(instance) {
287
321
  const tasks = v.value;
@@ -301,7 +335,7 @@ __name(Tag, "Tag");
301
335
  function Assign(cb) {
302
336
  return (target) => {
303
337
  init(target.prototype);
304
- setModalVar(target.prototype, "__CLASS");
338
+ setModelVar(target.prototype, "__CLASS");
305
339
  regisHandler(target.prototype, "__CLASS", {
306
340
  init: async (instance) => {
307
341
  const value = await cb(instance);
@@ -335,6 +369,24 @@ function Inject(key) {
335
369
  }
336
370
  __name(Inject, "Inject");
337
371
 
372
+ // src/utils.ts
373
+ async function validate(p, v) {
374
+ if (typeof p === "string" || typeof p === "number") {
375
+ if (v === p)
376
+ return true;
377
+ }
378
+ if (typeof p === "function")
379
+ return p(v);
380
+ if (p instanceof RegExp)
381
+ return p.test(v);
382
+ return false;
383
+ }
384
+ __name(validate, "validate");
385
+ function getTag(Model) {
386
+ return Model.prototype?.__TAG__;
387
+ }
388
+ __name(getTag, "getTag");
389
+
338
390
  // src/helper.ts
339
391
  function getBind(Model) {
340
392
  const instance = new Model();
@@ -385,8 +437,8 @@ async function plainToClass(Model, input, options = {}) {
385
437
  __name(plainToClass, "plainToClass");
386
438
  function classToValue(instance) {
387
439
  const data = {};
388
- const exposeVar = getExposeKey(instance);
389
- for (const item of exposeVar)
440
+ const exposeVars = getExposeKey(instance);
441
+ for (const item of exposeVars)
390
442
  data[item] = instance[item];
391
443
  return data;
392
444
  }
@@ -437,7 +489,7 @@ __name(getProperty, "getProperty");
437
489
  // src/custom/decorator.ts
438
490
  function Watcher(eventName, options) {
439
491
  return (obj, key) => {
440
- setModalVar(obj, key);
492
+ setModelVar(obj, key);
441
493
  regisHandler(obj, key, {
442
494
  init(instance) {
443
495
  getProperty("watcher")?.({
@@ -451,6 +503,32 @@ function Watcher(eventName, options) {
451
503
  };
452
504
  }
453
505
  __name(Watcher, "Watcher");
506
+ function Effect(eventName, options) {
507
+ return (obj, key) => {
508
+ setModelVar(obj, key);
509
+ regisHandler(obj, key, {
510
+ init(instance) {
511
+ instance[`$_${key}`] = instance[key];
512
+ Object.defineProperty(instance, key, {
513
+ get() {
514
+ return instance[`$_${key}`];
515
+ },
516
+ set(v) {
517
+ instance[`$_${key}`] = v;
518
+ getProperty(`effect-${eventName}`)?.({
519
+ instance,
520
+ key,
521
+ value: v,
522
+ options
523
+ });
524
+ return true;
525
+ }
526
+ });
527
+ }
528
+ });
529
+ };
530
+ }
531
+ __name(Effect, "Effect");
454
532
  function Storage(storeKey) {
455
533
  return (target, key) => {
456
534
  let tag;
@@ -458,7 +536,7 @@ function Storage(storeKey) {
458
536
  init(target);
459
537
  tag = storeKey || target.__TAG__;
460
538
  const uniTag = Symbol(tag);
461
- setModalVar(target, uniTag);
539
+ setModelVar(target, uniTag);
462
540
  regisHandler(target, uniTag, {
463
541
  init: (instance) => {
464
542
  getProperty("storage")?.({
@@ -472,7 +550,7 @@ function Storage(storeKey) {
472
550
  init(target.prototype);
473
551
  tag = storeKey || `${target.prototype.__TAG__}_${key}`;
474
552
  const uniTag = Symbol(tag);
475
- setModalVar(target.prototype, uniTag);
553
+ setModelVar(target.prototype, uniTag);
476
554
  regisHandler(target.prototype, uniTag, {
477
555
  init: (instance) => {
478
556
  getProperty("storage")?.({
@@ -492,6 +570,7 @@ __name(Storage, "Storage");
492
570
  Bind,
493
571
  Clear,
494
572
  DataMap,
573
+ Effect,
495
574
  Empty,
496
575
  Err,
497
576
  Expose,
@@ -511,17 +590,20 @@ __name(Storage, "Storage");
511
590
  getBind,
512
591
  getExposeKey,
513
592
  getHandler,
514
- getIgnoreKey,
515
593
  getInitEvent,
516
594
  getModelState,
595
+ getOwnExposeKey,
596
+ getOwnHandler,
597
+ getOwnIgnoreKey,
598
+ getOwnInitEvent,
599
+ getOwnModelState,
600
+ getOwnState,
517
601
  getProperty,
518
602
  getState,
519
603
  getTag,
520
604
  init,
521
605
  injectProperty,
522
606
  isPhecda,
523
- mergeOptions,
524
- mergeState,
525
607
  plainToClass,
526
608
  regisHandler,
527
609
  regisInitEvent,
@@ -529,7 +611,8 @@ __name(Storage, "Storage");
529
611
  registerAsync,
530
612
  setExposeKey,
531
613
  setIgnoreKey,
532
- setModalVar,
614
+ setModelVar,
615
+ setState,
533
616
  snapShot,
534
617
  to,
535
618
  validate