phecda-core 1.0.4 → 1.0.6
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.d.ts +12 -12
- package/dist/index.js +193 -91
- package/dist/index.mjs +189 -90
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -2,17 +2,11 @@ interface PhecdaNameSpace {
|
|
|
2
2
|
[name: string]: Phecda;
|
|
3
3
|
}
|
|
4
4
|
interface UsePipeOptions {
|
|
5
|
-
transform
|
|
6
|
-
collectError
|
|
5
|
+
transform?: boolean;
|
|
6
|
+
collectError?: boolean;
|
|
7
7
|
}
|
|
8
8
|
interface PhecdaHandler {
|
|
9
|
-
|
|
10
|
-
pipe?: (instance: any) => void;
|
|
11
|
-
rule?: RegExp | string | Function | number;
|
|
12
|
-
info?: string;
|
|
13
|
-
meta?: any;
|
|
14
|
-
error?: any;
|
|
15
|
-
http?: any;
|
|
9
|
+
[key: string]: any;
|
|
16
10
|
}
|
|
17
11
|
interface Phecda {
|
|
18
12
|
_namespace: {
|
|
@@ -22,13 +16,14 @@ interface Phecda {
|
|
|
22
16
|
__IGNORE_VAR__: Set<PropertyKey>;
|
|
23
17
|
__STATE_VAR__: Set<PropertyKey>;
|
|
24
18
|
__STATE_HANDLER__: Map<PropertyKey, PhecdaHandler[]>;
|
|
19
|
+
__STATE_NAMESPACE__: Map<PropertyKey, Object>;
|
|
25
20
|
};
|
|
26
21
|
}
|
|
27
22
|
type ClassValue<I> = {
|
|
28
23
|
[P in keyof I]: I[P] extends Function ? undefined : I[P];
|
|
29
24
|
};
|
|
30
25
|
|
|
31
|
-
declare function plainToClass<M extends new (...args: any) => any, Data extends Record<PropertyKey, any>>(Model: M, input: Data, options?:
|
|
26
|
+
declare function plainToClass<M extends new (...args: any) => any, Data extends Record<PropertyKey, any>>(Model: M, input: Data, options?: UsePipeOptions): Promise<{
|
|
32
27
|
err: string[];
|
|
33
28
|
data: InstanceType<M>;
|
|
34
29
|
}>;
|
|
@@ -83,14 +78,17 @@ declare function Get(target: any, key: PropertyKey): void;
|
|
|
83
78
|
declare function Pipe(v: ReturnType<typeof to>): (obj: any, key: PropertyKey) => void;
|
|
84
79
|
declare function Tag(tag: string): (target: any) => void;
|
|
85
80
|
declare function Storage(target: any): void;
|
|
81
|
+
declare function Window(target: any): void;
|
|
86
82
|
|
|
87
83
|
declare function validate(p: RegExp | string | Function | Object | Number, v: any): Promise<any>;
|
|
88
84
|
declare function getTag<M extends new (...args: any) => any>(Model: M): any;
|
|
85
|
+
declare function mergeOptions(obj1: any, obj2?: any): any;
|
|
89
86
|
|
|
87
|
+
declare function isPhecda(target: any): any;
|
|
90
88
|
declare function init(target: Phecda): void;
|
|
91
89
|
declare function regisInitEvent(target: Phecda, key: string): void;
|
|
92
90
|
declare function getInitEvent(target: Phecda): string[];
|
|
93
|
-
declare function
|
|
91
|
+
declare function setModalVar(target: Phecda, key: PropertyKey): void;
|
|
94
92
|
declare function setExposeKey(target: Phecda, key: PropertyKey): void;
|
|
95
93
|
declare function setIgnoreKey(target: Phecda, key: PropertyKey): void;
|
|
96
94
|
declare function getModelState(target: Phecda): string[];
|
|
@@ -98,6 +96,8 @@ declare function getExposeKey(target: Phecda): string[];
|
|
|
98
96
|
declare function getIgnoreKey(target: Phecda): string[];
|
|
99
97
|
declare function regisHandler(target: Phecda, key: PropertyKey, handler: PhecdaHandler): void;
|
|
100
98
|
declare function getHandler(target: Phecda, key: PropertyKey): PhecdaHandler[];
|
|
99
|
+
declare function mergeState(target: Phecda, key: PropertyKey, state: any): void;
|
|
100
|
+
declare function getState(target: Phecda, key: PropertyKey): Object | undefined;
|
|
101
101
|
declare function register(instance: Phecda): void;
|
|
102
102
|
|
|
103
103
|
declare function isArray(info?: string): (obj: any, key: PropertyKey) => void;
|
|
@@ -125,4 +125,4 @@ declare function getProperty(key: string): any;
|
|
|
125
125
|
|
|
126
126
|
declare function Watcher(eventName: string): (obj: any, key: string) => void;
|
|
127
127
|
|
|
128
|
-
export { ClassValue, Clear, Err, Get, Ignore, Init, Phecda, PhecdaHandler, PhecdaNameSpace, Pipe, Rule, Storage, Tag, UsePipeOptions, Watcher, activeInstance, addDecoToClass, classToValue, getExposeKey, getHandler, getIgnoreKey, getInitEvent, getModelState, getProperty, getTag, init, injectProperty, isArray, isBoolean, isCnName, isDate, isEnName, isHexColor, isIdCard, isLandline, isMailBox, isMobile, isNumber, isObject, isPostalCode, isString, isWechat, plainToClass, regisHandler, regisInitEvent, register, setExposeKey, setIgnoreKey,
|
|
128
|
+
export { ClassValue, Clear, Err, Get, Ignore, Init, Phecda, PhecdaHandler, PhecdaNameSpace, Pipe, Rule, Storage, Tag, UsePipeOptions, Watcher, Window, activeInstance, addDecoToClass, classToValue, getExposeKey, getHandler, getIgnoreKey, getInitEvent, getModelState, getProperty, getState, getTag, init, injectProperty, isArray, isBoolean, isCnName, isDate, isEnName, isHexColor, isIdCard, isLandline, isMailBox, isMobile, isNumber, isObject, isPhecda, isPostalCode, isString, isWechat, mergeOptions, mergeState, plainToClass, regisHandler, regisInitEvent, register, setExposeKey, setIgnoreKey, setModalVar, snapShot, to, toNumber, toString, validate };
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
7
|
var __export = (target, all) => {
|
|
7
8
|
for (var name in all)
|
|
8
9
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -30,6 +31,7 @@ __export(src_exports, {
|
|
|
30
31
|
Storage: () => Storage,
|
|
31
32
|
Tag: () => Tag,
|
|
32
33
|
Watcher: () => Watcher,
|
|
34
|
+
Window: () => Window,
|
|
33
35
|
activeInstance: () => activeInstance,
|
|
34
36
|
addDecoToClass: () => addDecoToClass,
|
|
35
37
|
classToValue: () => classToValue,
|
|
@@ -39,6 +41,7 @@ __export(src_exports, {
|
|
|
39
41
|
getInitEvent: () => getInitEvent,
|
|
40
42
|
getModelState: () => getModelState,
|
|
41
43
|
getProperty: () => getProperty,
|
|
44
|
+
getState: () => getState,
|
|
42
45
|
getTag: () => getTag,
|
|
43
46
|
init: () => init,
|
|
44
47
|
injectProperty: () => injectProperty,
|
|
@@ -53,17 +56,20 @@ __export(src_exports, {
|
|
|
53
56
|
isMailBox: () => isMailBox,
|
|
54
57
|
isMobile: () => isMobile,
|
|
55
58
|
isNumber: () => isNumber,
|
|
56
|
-
isObject: () =>
|
|
59
|
+
isObject: () => isObject2,
|
|
60
|
+
isPhecda: () => isPhecda,
|
|
57
61
|
isPostalCode: () => isPostalCode,
|
|
58
62
|
isString: () => isString,
|
|
59
63
|
isWechat: () => isWechat,
|
|
64
|
+
mergeOptions: () => mergeOptions,
|
|
65
|
+
mergeState: () => mergeState,
|
|
60
66
|
plainToClass: () => plainToClass,
|
|
61
67
|
regisHandler: () => regisHandler,
|
|
62
68
|
regisInitEvent: () => regisInitEvent,
|
|
63
69
|
register: () => register,
|
|
64
70
|
setExposeKey: () => setExposeKey,
|
|
65
71
|
setIgnoreKey: () => setIgnoreKey,
|
|
66
|
-
|
|
72
|
+
setModalVar: () => setModalVar,
|
|
67
73
|
snapShot: () => snapShot,
|
|
68
74
|
to: () => to,
|
|
69
75
|
toNumber: () => toNumber,
|
|
@@ -72,7 +78,50 @@ __export(src_exports, {
|
|
|
72
78
|
});
|
|
73
79
|
module.exports = __toCommonJS(src_exports);
|
|
74
80
|
|
|
81
|
+
// src/utils.ts
|
|
82
|
+
async function validate(p, v) {
|
|
83
|
+
if (typeof p === "string" || typeof p === "number") {
|
|
84
|
+
if (v === p)
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
if (typeof p === "function")
|
|
88
|
+
return p(v);
|
|
89
|
+
if (p instanceof RegExp)
|
|
90
|
+
return p.test(v);
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
__name(validate, "validate");
|
|
94
|
+
function getTag(Model) {
|
|
95
|
+
return Model.prototype?._namespace?.__TAG__;
|
|
96
|
+
}
|
|
97
|
+
__name(getTag, "getTag");
|
|
98
|
+
function mergeOptions(obj1, obj2) {
|
|
99
|
+
if (!obj2)
|
|
100
|
+
return obj1;
|
|
101
|
+
for (const i in obj2) {
|
|
102
|
+
if (isObject(obj1[i]) && isObject(obj2[i])) {
|
|
103
|
+
mergeOptions(obj1[i], obj2[i]);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (Array.isArray(obj1[i]) && Array.isArray(obj2[i])) {
|
|
107
|
+
obj1[i].push(...obj2[i].filter((item) => !obj1[i].includes(item)));
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
obj1[i] = obj2[i];
|
|
111
|
+
}
|
|
112
|
+
return obj1;
|
|
113
|
+
}
|
|
114
|
+
__name(mergeOptions, "mergeOptions");
|
|
115
|
+
function isObject(obj) {
|
|
116
|
+
return Object.prototype.toString.call(obj) === "[object Object]";
|
|
117
|
+
}
|
|
118
|
+
__name(isObject, "isObject");
|
|
119
|
+
|
|
75
120
|
// src/core.ts
|
|
121
|
+
function isPhecda(target) {
|
|
122
|
+
return target && !!target.prototype._namespace;
|
|
123
|
+
}
|
|
124
|
+
__name(isPhecda, "isPhecda");
|
|
76
125
|
function init(target) {
|
|
77
126
|
if (!target._namespace) {
|
|
78
127
|
target._namespace = {
|
|
@@ -81,53 +130,89 @@ function init(target) {
|
|
|
81
130
|
__EXPOSE_VAR__: /* @__PURE__ */ new Set(),
|
|
82
131
|
__IGNORE_VAR__: /* @__PURE__ */ new Set(),
|
|
83
132
|
__STATE_VAR__: /* @__PURE__ */ new Set(),
|
|
84
|
-
__STATE_HANDLER__: /* @__PURE__ */ new Map()
|
|
133
|
+
__STATE_HANDLER__: /* @__PURE__ */ new Map(),
|
|
134
|
+
__STATE_NAMESPACE__: /* @__PURE__ */ new Map()
|
|
85
135
|
};
|
|
86
136
|
}
|
|
87
137
|
}
|
|
138
|
+
__name(init, "init");
|
|
88
139
|
function regisInitEvent(target, key) {
|
|
89
140
|
init(target);
|
|
90
141
|
target._namespace.__INIT_EVENT__.add(key);
|
|
91
142
|
}
|
|
143
|
+
__name(regisInitEvent, "regisInitEvent");
|
|
92
144
|
function getInitEvent(target) {
|
|
93
145
|
init(target);
|
|
94
|
-
return [
|
|
146
|
+
return [
|
|
147
|
+
...target._namespace.__INIT_EVENT__
|
|
148
|
+
];
|
|
95
149
|
}
|
|
96
|
-
|
|
150
|
+
__name(getInitEvent, "getInitEvent");
|
|
151
|
+
function setModalVar(target, key) {
|
|
97
152
|
init(target);
|
|
98
153
|
target._namespace.__STATE_VAR__.add(key);
|
|
99
154
|
setExposeKey(target, key);
|
|
100
155
|
}
|
|
156
|
+
__name(setModalVar, "setModalVar");
|
|
101
157
|
function setExposeKey(target, key) {
|
|
102
158
|
init(target);
|
|
103
159
|
target._namespace.__EXPOSE_VAR__.add(key);
|
|
104
160
|
}
|
|
161
|
+
__name(setExposeKey, "setExposeKey");
|
|
105
162
|
function setIgnoreKey(target, key) {
|
|
106
163
|
init(target);
|
|
107
164
|
target._namespace.__IGNORE_VAR__.add(key);
|
|
108
165
|
}
|
|
166
|
+
__name(setIgnoreKey, "setIgnoreKey");
|
|
109
167
|
function getModelState(target) {
|
|
110
168
|
init(target);
|
|
111
|
-
return [
|
|
169
|
+
return [
|
|
170
|
+
...target._namespace.__STATE_VAR__
|
|
171
|
+
];
|
|
112
172
|
}
|
|
173
|
+
__name(getModelState, "getModelState");
|
|
113
174
|
function getExposeKey(target) {
|
|
114
175
|
init(target);
|
|
115
|
-
return [
|
|
176
|
+
return [
|
|
177
|
+
...target._namespace.__EXPOSE_VAR__
|
|
178
|
+
];
|
|
116
179
|
}
|
|
180
|
+
__name(getExposeKey, "getExposeKey");
|
|
117
181
|
function getIgnoreKey(target) {
|
|
118
182
|
init(target);
|
|
119
|
-
return [
|
|
183
|
+
return [
|
|
184
|
+
...target._namespace.__IGNORE_VAR__
|
|
185
|
+
];
|
|
120
186
|
}
|
|
187
|
+
__name(getIgnoreKey, "getIgnoreKey");
|
|
121
188
|
function regisHandler(target, key, handler) {
|
|
122
189
|
init(target);
|
|
123
190
|
if (!target._namespace.__STATE_HANDLER__.has(key))
|
|
124
|
-
target._namespace.__STATE_HANDLER__.set(key, [
|
|
191
|
+
target._namespace.__STATE_HANDLER__.set(key, [
|
|
192
|
+
handler
|
|
193
|
+
]);
|
|
125
194
|
else
|
|
126
195
|
target._namespace.__STATE_HANDLER__.get(key).push(handler);
|
|
127
196
|
}
|
|
197
|
+
__name(regisHandler, "regisHandler");
|
|
128
198
|
function getHandler(target, key) {
|
|
129
199
|
return target._namespace.__STATE_HANDLER__.get(key) || [];
|
|
130
200
|
}
|
|
201
|
+
__name(getHandler, "getHandler");
|
|
202
|
+
function mergeState(target, key, state) {
|
|
203
|
+
const namespace = target._namespace.__STATE_NAMESPACE__;
|
|
204
|
+
if (!namespace.has(key))
|
|
205
|
+
namespace.set(key, state);
|
|
206
|
+
else
|
|
207
|
+
mergeOptions(namespace.get(key), state);
|
|
208
|
+
}
|
|
209
|
+
__name(mergeState, "mergeState");
|
|
210
|
+
function getState(target, key) {
|
|
211
|
+
const namespace = target._namespace.__STATE_NAMESPACE__;
|
|
212
|
+
if (namespace)
|
|
213
|
+
return namespace.get(key);
|
|
214
|
+
}
|
|
215
|
+
__name(getState, "getState");
|
|
131
216
|
function register(instance) {
|
|
132
217
|
const stateVars = getModelState(instance);
|
|
133
218
|
for (const item of stateVars) {
|
|
@@ -136,19 +221,21 @@ function register(instance) {
|
|
|
136
221
|
hanlder.init?.(instance);
|
|
137
222
|
}
|
|
138
223
|
}
|
|
224
|
+
__name(register, "register");
|
|
139
225
|
|
|
140
226
|
// src/decorators.ts
|
|
141
227
|
function Init(target, key) {
|
|
142
|
-
|
|
228
|
+
setModalVar(target, key);
|
|
143
229
|
regisHandler(target, key, {
|
|
144
230
|
async init(instance) {
|
|
145
231
|
instance[key]();
|
|
146
232
|
}
|
|
147
233
|
});
|
|
148
234
|
}
|
|
235
|
+
__name(Init, "Init");
|
|
149
236
|
function Rule(rule, info, meta) {
|
|
150
237
|
return (obj, key) => {
|
|
151
|
-
|
|
238
|
+
setModalVar(obj, key);
|
|
152
239
|
regisHandler(obj, key, {
|
|
153
240
|
rule,
|
|
154
241
|
info,
|
|
@@ -156,9 +243,11 @@ function Rule(rule, info, meta) {
|
|
|
156
243
|
});
|
|
157
244
|
};
|
|
158
245
|
}
|
|
246
|
+
__name(Rule, "Rule");
|
|
159
247
|
function Ignore(target, key) {
|
|
160
248
|
setIgnoreKey(target, key);
|
|
161
249
|
}
|
|
250
|
+
__name(Ignore, "Ignore");
|
|
162
251
|
function Clear(target, key) {
|
|
163
252
|
init(target);
|
|
164
253
|
target._namespace.__INIT_EVENT__.delete(key);
|
|
@@ -167,20 +256,23 @@ function Clear(target, key) {
|
|
|
167
256
|
target._namespace.__STATE_VAR__.delete(key);
|
|
168
257
|
target._namespace.__STATE_HANDLER__.delete(key);
|
|
169
258
|
}
|
|
259
|
+
__name(Clear, "Clear");
|
|
170
260
|
function Err(cb) {
|
|
171
261
|
return (target, key) => {
|
|
172
|
-
|
|
262
|
+
setModalVar(target, key);
|
|
173
263
|
regisHandler(target, key, {
|
|
174
264
|
error: cb
|
|
175
265
|
});
|
|
176
266
|
};
|
|
177
267
|
}
|
|
268
|
+
__name(Err, "Err");
|
|
178
269
|
function Get(target, key) {
|
|
179
270
|
setExposeKey(target, key);
|
|
180
271
|
}
|
|
272
|
+
__name(Get, "Get");
|
|
181
273
|
function Pipe(v) {
|
|
182
274
|
return (obj, key) => {
|
|
183
|
-
|
|
275
|
+
setModalVar(obj, key);
|
|
184
276
|
regisHandler(obj, key, {
|
|
185
277
|
async pipe(instance) {
|
|
186
278
|
const tasks = v.value;
|
|
@@ -190,19 +282,21 @@ function Pipe(v) {
|
|
|
190
282
|
});
|
|
191
283
|
};
|
|
192
284
|
}
|
|
285
|
+
__name(Pipe, "Pipe");
|
|
193
286
|
function Tag(tag) {
|
|
194
287
|
return (target) => {
|
|
195
288
|
init(target.prototype);
|
|
196
289
|
target.prototype._namespace.__TAG__ = tag;
|
|
197
290
|
};
|
|
198
291
|
}
|
|
292
|
+
__name(Tag, "Tag");
|
|
199
293
|
function Storage(target) {
|
|
200
294
|
init(target.prototype);
|
|
201
295
|
const tag = target.prototype._namespace.__TAG__;
|
|
202
296
|
if (tag === "")
|
|
203
297
|
throw new Error("miss tag");
|
|
204
298
|
const uniTag = Symbol(tag);
|
|
205
|
-
|
|
299
|
+
setModalVar(target.prototype, uniTag);
|
|
206
300
|
regisHandler(target.prototype, uniTag, {
|
|
207
301
|
init: (instance) => {
|
|
208
302
|
const { state } = instance;
|
|
@@ -218,53 +312,52 @@ function Storage(target) {
|
|
|
218
312
|
}
|
|
219
313
|
});
|
|
220
314
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
if (typeof p === "function")
|
|
229
|
-
return p(v);
|
|
230
|
-
if (p instanceof RegExp)
|
|
231
|
-
return p.test(v);
|
|
232
|
-
return false;
|
|
233
|
-
}
|
|
234
|
-
function getTag(Model) {
|
|
235
|
-
return Model.prototype?._namespace?.__TAG__;
|
|
315
|
+
__name(Storage, "Storage");
|
|
316
|
+
function Window(target) {
|
|
317
|
+
if (!window.__PHECDA__)
|
|
318
|
+
window.__PHECDA__ = {};
|
|
319
|
+
const tag = target.prototype._namespace.__TAG__;
|
|
320
|
+
if (tag)
|
|
321
|
+
window.__PHECDA__[tag] = target;
|
|
236
322
|
}
|
|
323
|
+
__name(Window, "Window");
|
|
237
324
|
|
|
238
325
|
// src/helper.ts
|
|
239
326
|
async function plainToClass(Model, input, options = {}) {
|
|
240
327
|
const data = new Model();
|
|
241
|
-
const resolvedOptions = {
|
|
242
|
-
collectError: true,
|
|
243
|
-
transform: false,
|
|
244
|
-
...options
|
|
245
|
-
};
|
|
246
328
|
const err = [];
|
|
247
329
|
const stateVars = getModelState(data);
|
|
248
330
|
for (const item of stateVars) {
|
|
249
331
|
data[item] = input[item];
|
|
250
332
|
const handlers = getHandler(data, item);
|
|
251
333
|
if (handlers) {
|
|
252
|
-
|
|
253
|
-
const
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
334
|
+
if (options.collectError !== false) {
|
|
335
|
+
for (const handler of handlers) {
|
|
336
|
+
const rule = handler.rule;
|
|
337
|
+
if (rule && !await validate(rule, data[item])) {
|
|
338
|
+
err.push(handler.info || "");
|
|
339
|
+
if (!options.collectError)
|
|
340
|
+
break;
|
|
341
|
+
}
|
|
258
342
|
}
|
|
259
343
|
}
|
|
260
|
-
if (err.length > 0 && !
|
|
261
|
-
return {
|
|
262
|
-
|
|
263
|
-
|
|
344
|
+
if (err.length > 0 && !options.transform)
|
|
345
|
+
return {
|
|
346
|
+
err,
|
|
347
|
+
data
|
|
348
|
+
};
|
|
349
|
+
if (options.transform !== false) {
|
|
350
|
+
for (const handler of handlers)
|
|
351
|
+
await handler.pipe?.(data);
|
|
352
|
+
}
|
|
264
353
|
}
|
|
265
354
|
}
|
|
266
|
-
return {
|
|
355
|
+
return {
|
|
356
|
+
data,
|
|
357
|
+
err
|
|
358
|
+
};
|
|
267
359
|
}
|
|
360
|
+
__name(plainToClass, "plainToClass");
|
|
268
361
|
function classToValue(instance) {
|
|
269
362
|
const data = {};
|
|
270
363
|
const exposeVar = getExposeKey(instance);
|
|
@@ -276,11 +369,16 @@ function classToValue(instance) {
|
|
|
276
369
|
}
|
|
277
370
|
return data;
|
|
278
371
|
}
|
|
372
|
+
__name(classToValue, "classToValue");
|
|
279
373
|
function to(task, oldTasks) {
|
|
280
374
|
const tasks = oldTasks || [];
|
|
281
375
|
tasks.push(task);
|
|
282
|
-
return {
|
|
376
|
+
return {
|
|
377
|
+
to: (task2) => to(task2, tasks),
|
|
378
|
+
value: tasks
|
|
379
|
+
};
|
|
283
380
|
}
|
|
381
|
+
__name(to, "to");
|
|
284
382
|
function snapShot(data) {
|
|
285
383
|
const snap = {};
|
|
286
384
|
for (const i in data)
|
|
@@ -297,96 +395,88 @@ function snapShot(data) {
|
|
|
297
395
|
}
|
|
298
396
|
};
|
|
299
397
|
}
|
|
398
|
+
__name(snapShot, "snapShot");
|
|
300
399
|
function addDecoToClass(c, key, handler, type = "normal") {
|
|
301
400
|
handler(type === "normal" ? c.prototype : c, key);
|
|
302
401
|
}
|
|
402
|
+
__name(addDecoToClass, "addDecoToClass");
|
|
303
403
|
|
|
304
404
|
// src/preset/rule.ts
|
|
305
405
|
function isArray(info) {
|
|
306
406
|
return Rule((param) => Array.isArray(param), info || "it should be an array");
|
|
307
407
|
}
|
|
408
|
+
__name(isArray, "isArray");
|
|
308
409
|
function isBoolean(info) {
|
|
309
|
-
return Rule((param) => [
|
|
410
|
+
return Rule((param) => [
|
|
411
|
+
true,
|
|
412
|
+
false
|
|
413
|
+
].includes(param), info || "it should be true or false");
|
|
310
414
|
}
|
|
415
|
+
__name(isBoolean, "isBoolean");
|
|
311
416
|
function isNumber(info) {
|
|
312
417
|
return Rule((param) => typeof param === "number", info || "it should be true or false");
|
|
313
418
|
}
|
|
419
|
+
__name(isNumber, "isNumber");
|
|
314
420
|
function isString(info) {
|
|
315
421
|
return Rule((param) => typeof param === "string", info || "it should be a string");
|
|
316
422
|
}
|
|
317
|
-
|
|
423
|
+
__name(isString, "isString");
|
|
424
|
+
function isObject2(info) {
|
|
318
425
|
return Rule((param) => {
|
|
319
426
|
return Object.prototype.toString.call(param) === "[object Object]";
|
|
320
427
|
}, info || "it should be an object");
|
|
321
428
|
}
|
|
429
|
+
__name(isObject2, "isObject");
|
|
322
430
|
function isMobile(info) {
|
|
323
|
-
return Rule(
|
|
324
|
-
/^((\+|00)86)?1((3[\d])|(4[5,6,7,9])|(5[0-3,5-9])|(6[5-7])|(7[0-8])|(8[\d])|(9[1,8,9]))\d{8}$/,
|
|
325
|
-
info || "it should be a mobile phone number"
|
|
326
|
-
);
|
|
431
|
+
return Rule(/^((\+|00)86)?1((3[\d])|(4[5,6,7,9])|(5[0-3,5-9])|(6[5-7])|(7[0-8])|(8[\d])|(9[1,8,9]))\d{8}$/, info || "it should be a mobile phone number");
|
|
327
432
|
}
|
|
433
|
+
__name(isMobile, "isMobile");
|
|
328
434
|
function isLandline(info) {
|
|
329
|
-
return Rule(
|
|
330
|
-
/\d{3}-\d{8}|\d{4}-\d{7}/,
|
|
331
|
-
info || "it should be a mobile phone number"
|
|
332
|
-
);
|
|
435
|
+
return Rule(/\d{3}-\d{8}|\d{4}-\d{7}/, info || "it should be a mobile phone number");
|
|
333
436
|
}
|
|
437
|
+
__name(isLandline, "isLandline");
|
|
334
438
|
function isMailBox(info) {
|
|
335
|
-
return Rule(
|
|
336
|
-
/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,
|
|
337
|
-
info || "it should be a mailbox number"
|
|
338
|
-
);
|
|
439
|
+
return Rule(/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/, info || "it should be a mailbox number");
|
|
339
440
|
}
|
|
441
|
+
__name(isMailBox, "isMailBox");
|
|
340
442
|
function isIdCard(info) {
|
|
341
|
-
return Rule(
|
|
342
|
-
/(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/,
|
|
343
|
-
info || "it should be an identity card number"
|
|
344
|
-
);
|
|
443
|
+
return Rule(/(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/, info || "it should be an identity card number");
|
|
345
444
|
}
|
|
445
|
+
__name(isIdCard, "isIdCard");
|
|
346
446
|
function isCnName(info) {
|
|
347
|
-
return Rule(
|
|
348
|
-
/^([\u4E00-\u9FA5·]{2,16})$/,
|
|
349
|
-
info || "\u9700\u8981\u662F\u4E00\u4E2A\u5408\u7406\u7684\u4E2D\u6587\u540D\u5B57"
|
|
350
|
-
);
|
|
447
|
+
return Rule(/^([\u4E00-\u9FA5·]{2,16})$/, info || "\u9700\u8981\u662F\u4E00\u4E2A\u5408\u7406\u7684\u4E2D\u6587\u540D\u5B57");
|
|
351
448
|
}
|
|
449
|
+
__name(isCnName, "isCnName");
|
|
352
450
|
function isEnName(info) {
|
|
353
|
-
return Rule(
|
|
354
|
-
/(^[a-zA-Z]{1}[a-zA-Z\s]{0,20}[a-zA-Z]{1}$)/,
|
|
355
|
-
info || "it should be a valid en-name"
|
|
356
|
-
);
|
|
451
|
+
return Rule(/(^[a-zA-Z]{1}[a-zA-Z\s]{0,20}[a-zA-Z]{1}$)/, info || "it should be a valid en-name");
|
|
357
452
|
}
|
|
453
|
+
__name(isEnName, "isEnName");
|
|
358
454
|
function isDate(info) {
|
|
359
|
-
return Rule(
|
|
360
|
-
/^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/,
|
|
361
|
-
info || "it should be a valid date"
|
|
362
|
-
);
|
|
455
|
+
return Rule(/^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/, info || "it should be a valid date");
|
|
363
456
|
}
|
|
457
|
+
__name(isDate, "isDate");
|
|
364
458
|
function isWechat(info) {
|
|
365
|
-
return Rule(
|
|
366
|
-
/^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/,
|
|
367
|
-
info || "it should be a valid date"
|
|
368
|
-
);
|
|
459
|
+
return Rule(/^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/, info || "it should be a valid date");
|
|
369
460
|
}
|
|
461
|
+
__name(isWechat, "isWechat");
|
|
370
462
|
function isHexColor(info) {
|
|
371
|
-
return Rule(
|
|
372
|
-
/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/,
|
|
373
|
-
info || "it should be a valid hex-color"
|
|
374
|
-
);
|
|
463
|
+
return Rule(/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/, info || "it should be a valid hex-color");
|
|
375
464
|
}
|
|
465
|
+
__name(isHexColor, "isHexColor");
|
|
376
466
|
function isPostalCode(info) {
|
|
377
|
-
return Rule(
|
|
378
|
-
/^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/,
|
|
379
|
-
info || "it should be a valid postal code"
|
|
380
|
-
);
|
|
467
|
+
return Rule(/^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/, info || "it should be a valid postal code");
|
|
381
468
|
}
|
|
469
|
+
__name(isPostalCode, "isPostalCode");
|
|
382
470
|
|
|
383
471
|
// src/preset/pipe.ts
|
|
384
472
|
function toNumber() {
|
|
385
473
|
return Pipe(to((param) => Number(param)));
|
|
386
474
|
}
|
|
475
|
+
__name(toNumber, "toNumber");
|
|
387
476
|
function toString() {
|
|
388
477
|
return Pipe(to((param) => String(param)));
|
|
389
478
|
}
|
|
479
|
+
__name(toString, "toString");
|
|
390
480
|
|
|
391
481
|
// src/namespace.ts
|
|
392
482
|
var activeInstance = {};
|
|
@@ -394,21 +484,28 @@ function injectProperty(key, value) {
|
|
|
394
484
|
activeInstance[key] = value;
|
|
395
485
|
return activeInstance;
|
|
396
486
|
}
|
|
487
|
+
__name(injectProperty, "injectProperty");
|
|
397
488
|
function getProperty(key) {
|
|
398
489
|
return activeInstance[key];
|
|
399
490
|
}
|
|
491
|
+
__name(getProperty, "getProperty");
|
|
400
492
|
|
|
401
493
|
// src/custom/decorator.ts
|
|
402
494
|
function Watcher(eventName) {
|
|
403
495
|
return (obj, key) => {
|
|
404
|
-
|
|
496
|
+
setModalVar(obj, key);
|
|
405
497
|
regisHandler(obj, key, {
|
|
406
498
|
init(instance) {
|
|
407
|
-
getProperty("watcher")?.({
|
|
499
|
+
getProperty("watcher")?.({
|
|
500
|
+
eventName,
|
|
501
|
+
instance,
|
|
502
|
+
key
|
|
503
|
+
});
|
|
408
504
|
}
|
|
409
505
|
});
|
|
410
506
|
};
|
|
411
507
|
}
|
|
508
|
+
__name(Watcher, "Watcher");
|
|
412
509
|
// Annotate the CommonJS export names for ESM import in node:
|
|
413
510
|
0 && (module.exports = {
|
|
414
511
|
Clear,
|
|
@@ -421,6 +518,7 @@ function Watcher(eventName) {
|
|
|
421
518
|
Storage,
|
|
422
519
|
Tag,
|
|
423
520
|
Watcher,
|
|
521
|
+
Window,
|
|
424
522
|
activeInstance,
|
|
425
523
|
addDecoToClass,
|
|
426
524
|
classToValue,
|
|
@@ -430,6 +528,7 @@ function Watcher(eventName) {
|
|
|
430
528
|
getInitEvent,
|
|
431
529
|
getModelState,
|
|
432
530
|
getProperty,
|
|
531
|
+
getState,
|
|
433
532
|
getTag,
|
|
434
533
|
init,
|
|
435
534
|
injectProperty,
|
|
@@ -445,16 +544,19 @@ function Watcher(eventName) {
|
|
|
445
544
|
isMobile,
|
|
446
545
|
isNumber,
|
|
447
546
|
isObject,
|
|
547
|
+
isPhecda,
|
|
448
548
|
isPostalCode,
|
|
449
549
|
isString,
|
|
450
550
|
isWechat,
|
|
551
|
+
mergeOptions,
|
|
552
|
+
mergeState,
|
|
451
553
|
plainToClass,
|
|
452
554
|
regisHandler,
|
|
453
555
|
regisInitEvent,
|
|
454
556
|
register,
|
|
455
557
|
setExposeKey,
|
|
456
558
|
setIgnoreKey,
|
|
457
|
-
|
|
559
|
+
setModalVar,
|
|
458
560
|
snapShot,
|
|
459
561
|
to,
|
|
460
562
|
toNumber,
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,50 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// src/utils.ts
|
|
5
|
+
async function validate(p, v) {
|
|
6
|
+
if (typeof p === "string" || typeof p === "number") {
|
|
7
|
+
if (v === p)
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
if (typeof p === "function")
|
|
11
|
+
return p(v);
|
|
12
|
+
if (p instanceof RegExp)
|
|
13
|
+
return p.test(v);
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
__name(validate, "validate");
|
|
17
|
+
function getTag(Model) {
|
|
18
|
+
return Model.prototype?._namespace?.__TAG__;
|
|
19
|
+
}
|
|
20
|
+
__name(getTag, "getTag");
|
|
21
|
+
function mergeOptions(obj1, obj2) {
|
|
22
|
+
if (!obj2)
|
|
23
|
+
return obj1;
|
|
24
|
+
for (const i in obj2) {
|
|
25
|
+
if (isObject(obj1[i]) && isObject(obj2[i])) {
|
|
26
|
+
mergeOptions(obj1[i], obj2[i]);
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (Array.isArray(obj1[i]) && Array.isArray(obj2[i])) {
|
|
30
|
+
obj1[i].push(...obj2[i].filter((item) => !obj1[i].includes(item)));
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
obj1[i] = obj2[i];
|
|
34
|
+
}
|
|
35
|
+
return obj1;
|
|
36
|
+
}
|
|
37
|
+
__name(mergeOptions, "mergeOptions");
|
|
38
|
+
function isObject(obj) {
|
|
39
|
+
return Object.prototype.toString.call(obj) === "[object Object]";
|
|
40
|
+
}
|
|
41
|
+
__name(isObject, "isObject");
|
|
42
|
+
|
|
1
43
|
// src/core.ts
|
|
44
|
+
function isPhecda(target) {
|
|
45
|
+
return target && !!target.prototype._namespace;
|
|
46
|
+
}
|
|
47
|
+
__name(isPhecda, "isPhecda");
|
|
2
48
|
function init(target) {
|
|
3
49
|
if (!target._namespace) {
|
|
4
50
|
target._namespace = {
|
|
@@ -7,53 +53,89 @@ function init(target) {
|
|
|
7
53
|
__EXPOSE_VAR__: /* @__PURE__ */ new Set(),
|
|
8
54
|
__IGNORE_VAR__: /* @__PURE__ */ new Set(),
|
|
9
55
|
__STATE_VAR__: /* @__PURE__ */ new Set(),
|
|
10
|
-
__STATE_HANDLER__: /* @__PURE__ */ new Map()
|
|
56
|
+
__STATE_HANDLER__: /* @__PURE__ */ new Map(),
|
|
57
|
+
__STATE_NAMESPACE__: /* @__PURE__ */ new Map()
|
|
11
58
|
};
|
|
12
59
|
}
|
|
13
60
|
}
|
|
61
|
+
__name(init, "init");
|
|
14
62
|
function regisInitEvent(target, key) {
|
|
15
63
|
init(target);
|
|
16
64
|
target._namespace.__INIT_EVENT__.add(key);
|
|
17
65
|
}
|
|
66
|
+
__name(regisInitEvent, "regisInitEvent");
|
|
18
67
|
function getInitEvent(target) {
|
|
19
68
|
init(target);
|
|
20
|
-
return [
|
|
69
|
+
return [
|
|
70
|
+
...target._namespace.__INIT_EVENT__
|
|
71
|
+
];
|
|
21
72
|
}
|
|
22
|
-
|
|
73
|
+
__name(getInitEvent, "getInitEvent");
|
|
74
|
+
function setModalVar(target, key) {
|
|
23
75
|
init(target);
|
|
24
76
|
target._namespace.__STATE_VAR__.add(key);
|
|
25
77
|
setExposeKey(target, key);
|
|
26
78
|
}
|
|
79
|
+
__name(setModalVar, "setModalVar");
|
|
27
80
|
function setExposeKey(target, key) {
|
|
28
81
|
init(target);
|
|
29
82
|
target._namespace.__EXPOSE_VAR__.add(key);
|
|
30
83
|
}
|
|
84
|
+
__name(setExposeKey, "setExposeKey");
|
|
31
85
|
function setIgnoreKey(target, key) {
|
|
32
86
|
init(target);
|
|
33
87
|
target._namespace.__IGNORE_VAR__.add(key);
|
|
34
88
|
}
|
|
89
|
+
__name(setIgnoreKey, "setIgnoreKey");
|
|
35
90
|
function getModelState(target) {
|
|
36
91
|
init(target);
|
|
37
|
-
return [
|
|
92
|
+
return [
|
|
93
|
+
...target._namespace.__STATE_VAR__
|
|
94
|
+
];
|
|
38
95
|
}
|
|
96
|
+
__name(getModelState, "getModelState");
|
|
39
97
|
function getExposeKey(target) {
|
|
40
98
|
init(target);
|
|
41
|
-
return [
|
|
99
|
+
return [
|
|
100
|
+
...target._namespace.__EXPOSE_VAR__
|
|
101
|
+
];
|
|
42
102
|
}
|
|
103
|
+
__name(getExposeKey, "getExposeKey");
|
|
43
104
|
function getIgnoreKey(target) {
|
|
44
105
|
init(target);
|
|
45
|
-
return [
|
|
106
|
+
return [
|
|
107
|
+
...target._namespace.__IGNORE_VAR__
|
|
108
|
+
];
|
|
46
109
|
}
|
|
110
|
+
__name(getIgnoreKey, "getIgnoreKey");
|
|
47
111
|
function regisHandler(target, key, handler) {
|
|
48
112
|
init(target);
|
|
49
113
|
if (!target._namespace.__STATE_HANDLER__.has(key))
|
|
50
|
-
target._namespace.__STATE_HANDLER__.set(key, [
|
|
114
|
+
target._namespace.__STATE_HANDLER__.set(key, [
|
|
115
|
+
handler
|
|
116
|
+
]);
|
|
51
117
|
else
|
|
52
118
|
target._namespace.__STATE_HANDLER__.get(key).push(handler);
|
|
53
119
|
}
|
|
120
|
+
__name(regisHandler, "regisHandler");
|
|
54
121
|
function getHandler(target, key) {
|
|
55
122
|
return target._namespace.__STATE_HANDLER__.get(key) || [];
|
|
56
123
|
}
|
|
124
|
+
__name(getHandler, "getHandler");
|
|
125
|
+
function mergeState(target, key, state) {
|
|
126
|
+
const namespace = target._namespace.__STATE_NAMESPACE__;
|
|
127
|
+
if (!namespace.has(key))
|
|
128
|
+
namespace.set(key, state);
|
|
129
|
+
else
|
|
130
|
+
mergeOptions(namespace.get(key), state);
|
|
131
|
+
}
|
|
132
|
+
__name(mergeState, "mergeState");
|
|
133
|
+
function getState(target, key) {
|
|
134
|
+
const namespace = target._namespace.__STATE_NAMESPACE__;
|
|
135
|
+
if (namespace)
|
|
136
|
+
return namespace.get(key);
|
|
137
|
+
}
|
|
138
|
+
__name(getState, "getState");
|
|
57
139
|
function register(instance) {
|
|
58
140
|
const stateVars = getModelState(instance);
|
|
59
141
|
for (const item of stateVars) {
|
|
@@ -62,19 +144,21 @@ function register(instance) {
|
|
|
62
144
|
hanlder.init?.(instance);
|
|
63
145
|
}
|
|
64
146
|
}
|
|
147
|
+
__name(register, "register");
|
|
65
148
|
|
|
66
149
|
// src/decorators.ts
|
|
67
150
|
function Init(target, key) {
|
|
68
|
-
|
|
151
|
+
setModalVar(target, key);
|
|
69
152
|
regisHandler(target, key, {
|
|
70
153
|
async init(instance) {
|
|
71
154
|
instance[key]();
|
|
72
155
|
}
|
|
73
156
|
});
|
|
74
157
|
}
|
|
158
|
+
__name(Init, "Init");
|
|
75
159
|
function Rule(rule, info, meta) {
|
|
76
160
|
return (obj, key) => {
|
|
77
|
-
|
|
161
|
+
setModalVar(obj, key);
|
|
78
162
|
regisHandler(obj, key, {
|
|
79
163
|
rule,
|
|
80
164
|
info,
|
|
@@ -82,9 +166,11 @@ function Rule(rule, info, meta) {
|
|
|
82
166
|
});
|
|
83
167
|
};
|
|
84
168
|
}
|
|
169
|
+
__name(Rule, "Rule");
|
|
85
170
|
function Ignore(target, key) {
|
|
86
171
|
setIgnoreKey(target, key);
|
|
87
172
|
}
|
|
173
|
+
__name(Ignore, "Ignore");
|
|
88
174
|
function Clear(target, key) {
|
|
89
175
|
init(target);
|
|
90
176
|
target._namespace.__INIT_EVENT__.delete(key);
|
|
@@ -93,20 +179,23 @@ function Clear(target, key) {
|
|
|
93
179
|
target._namespace.__STATE_VAR__.delete(key);
|
|
94
180
|
target._namespace.__STATE_HANDLER__.delete(key);
|
|
95
181
|
}
|
|
182
|
+
__name(Clear, "Clear");
|
|
96
183
|
function Err(cb) {
|
|
97
184
|
return (target, key) => {
|
|
98
|
-
|
|
185
|
+
setModalVar(target, key);
|
|
99
186
|
regisHandler(target, key, {
|
|
100
187
|
error: cb
|
|
101
188
|
});
|
|
102
189
|
};
|
|
103
190
|
}
|
|
191
|
+
__name(Err, "Err");
|
|
104
192
|
function Get(target, key) {
|
|
105
193
|
setExposeKey(target, key);
|
|
106
194
|
}
|
|
195
|
+
__name(Get, "Get");
|
|
107
196
|
function Pipe(v) {
|
|
108
197
|
return (obj, key) => {
|
|
109
|
-
|
|
198
|
+
setModalVar(obj, key);
|
|
110
199
|
regisHandler(obj, key, {
|
|
111
200
|
async pipe(instance) {
|
|
112
201
|
const tasks = v.value;
|
|
@@ -116,19 +205,21 @@ function Pipe(v) {
|
|
|
116
205
|
});
|
|
117
206
|
};
|
|
118
207
|
}
|
|
208
|
+
__name(Pipe, "Pipe");
|
|
119
209
|
function Tag(tag) {
|
|
120
210
|
return (target) => {
|
|
121
211
|
init(target.prototype);
|
|
122
212
|
target.prototype._namespace.__TAG__ = tag;
|
|
123
213
|
};
|
|
124
214
|
}
|
|
215
|
+
__name(Tag, "Tag");
|
|
125
216
|
function Storage(target) {
|
|
126
217
|
init(target.prototype);
|
|
127
218
|
const tag = target.prototype._namespace.__TAG__;
|
|
128
219
|
if (tag === "")
|
|
129
220
|
throw new Error("miss tag");
|
|
130
221
|
const uniTag = Symbol(tag);
|
|
131
|
-
|
|
222
|
+
setModalVar(target.prototype, uniTag);
|
|
132
223
|
regisHandler(target.prototype, uniTag, {
|
|
133
224
|
init: (instance) => {
|
|
134
225
|
const { state } = instance;
|
|
@@ -144,53 +235,52 @@ function Storage(target) {
|
|
|
144
235
|
}
|
|
145
236
|
});
|
|
146
237
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
if (typeof p === "function")
|
|
155
|
-
return p(v);
|
|
156
|
-
if (p instanceof RegExp)
|
|
157
|
-
return p.test(v);
|
|
158
|
-
return false;
|
|
159
|
-
}
|
|
160
|
-
function getTag(Model) {
|
|
161
|
-
return Model.prototype?._namespace?.__TAG__;
|
|
238
|
+
__name(Storage, "Storage");
|
|
239
|
+
function Window(target) {
|
|
240
|
+
if (!window.__PHECDA__)
|
|
241
|
+
window.__PHECDA__ = {};
|
|
242
|
+
const tag = target.prototype._namespace.__TAG__;
|
|
243
|
+
if (tag)
|
|
244
|
+
window.__PHECDA__[tag] = target;
|
|
162
245
|
}
|
|
246
|
+
__name(Window, "Window");
|
|
163
247
|
|
|
164
248
|
// src/helper.ts
|
|
165
249
|
async function plainToClass(Model, input, options = {}) {
|
|
166
250
|
const data = new Model();
|
|
167
|
-
const resolvedOptions = {
|
|
168
|
-
collectError: true,
|
|
169
|
-
transform: false,
|
|
170
|
-
...options
|
|
171
|
-
};
|
|
172
251
|
const err = [];
|
|
173
252
|
const stateVars = getModelState(data);
|
|
174
253
|
for (const item of stateVars) {
|
|
175
254
|
data[item] = input[item];
|
|
176
255
|
const handlers = getHandler(data, item);
|
|
177
256
|
if (handlers) {
|
|
178
|
-
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
257
|
+
if (options.collectError !== false) {
|
|
258
|
+
for (const handler of handlers) {
|
|
259
|
+
const rule = handler.rule;
|
|
260
|
+
if (rule && !await validate(rule, data[item])) {
|
|
261
|
+
err.push(handler.info || "");
|
|
262
|
+
if (!options.collectError)
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
184
265
|
}
|
|
185
266
|
}
|
|
186
|
-
if (err.length > 0 && !
|
|
187
|
-
return {
|
|
188
|
-
|
|
189
|
-
|
|
267
|
+
if (err.length > 0 && !options.transform)
|
|
268
|
+
return {
|
|
269
|
+
err,
|
|
270
|
+
data
|
|
271
|
+
};
|
|
272
|
+
if (options.transform !== false) {
|
|
273
|
+
for (const handler of handlers)
|
|
274
|
+
await handler.pipe?.(data);
|
|
275
|
+
}
|
|
190
276
|
}
|
|
191
277
|
}
|
|
192
|
-
return {
|
|
278
|
+
return {
|
|
279
|
+
data,
|
|
280
|
+
err
|
|
281
|
+
};
|
|
193
282
|
}
|
|
283
|
+
__name(plainToClass, "plainToClass");
|
|
194
284
|
function classToValue(instance) {
|
|
195
285
|
const data = {};
|
|
196
286
|
const exposeVar = getExposeKey(instance);
|
|
@@ -202,11 +292,16 @@ function classToValue(instance) {
|
|
|
202
292
|
}
|
|
203
293
|
return data;
|
|
204
294
|
}
|
|
295
|
+
__name(classToValue, "classToValue");
|
|
205
296
|
function to(task, oldTasks) {
|
|
206
297
|
const tasks = oldTasks || [];
|
|
207
298
|
tasks.push(task);
|
|
208
|
-
return {
|
|
299
|
+
return {
|
|
300
|
+
to: (task2) => to(task2, tasks),
|
|
301
|
+
value: tasks
|
|
302
|
+
};
|
|
209
303
|
}
|
|
304
|
+
__name(to, "to");
|
|
210
305
|
function snapShot(data) {
|
|
211
306
|
const snap = {};
|
|
212
307
|
for (const i in data)
|
|
@@ -223,96 +318,88 @@ function snapShot(data) {
|
|
|
223
318
|
}
|
|
224
319
|
};
|
|
225
320
|
}
|
|
321
|
+
__name(snapShot, "snapShot");
|
|
226
322
|
function addDecoToClass(c, key, handler, type = "normal") {
|
|
227
323
|
handler(type === "normal" ? c.prototype : c, key);
|
|
228
324
|
}
|
|
325
|
+
__name(addDecoToClass, "addDecoToClass");
|
|
229
326
|
|
|
230
327
|
// src/preset/rule.ts
|
|
231
328
|
function isArray(info) {
|
|
232
329
|
return Rule((param) => Array.isArray(param), info || "it should be an array");
|
|
233
330
|
}
|
|
331
|
+
__name(isArray, "isArray");
|
|
234
332
|
function isBoolean(info) {
|
|
235
|
-
return Rule((param) => [
|
|
333
|
+
return Rule((param) => [
|
|
334
|
+
true,
|
|
335
|
+
false
|
|
336
|
+
].includes(param), info || "it should be true or false");
|
|
236
337
|
}
|
|
338
|
+
__name(isBoolean, "isBoolean");
|
|
237
339
|
function isNumber(info) {
|
|
238
340
|
return Rule((param) => typeof param === "number", info || "it should be true or false");
|
|
239
341
|
}
|
|
342
|
+
__name(isNumber, "isNumber");
|
|
240
343
|
function isString(info) {
|
|
241
344
|
return Rule((param) => typeof param === "string", info || "it should be a string");
|
|
242
345
|
}
|
|
243
|
-
|
|
346
|
+
__name(isString, "isString");
|
|
347
|
+
function isObject2(info) {
|
|
244
348
|
return Rule((param) => {
|
|
245
349
|
return Object.prototype.toString.call(param) === "[object Object]";
|
|
246
350
|
}, info || "it should be an object");
|
|
247
351
|
}
|
|
352
|
+
__name(isObject2, "isObject");
|
|
248
353
|
function isMobile(info) {
|
|
249
|
-
return Rule(
|
|
250
|
-
/^((\+|00)86)?1((3[\d])|(4[5,6,7,9])|(5[0-3,5-9])|(6[5-7])|(7[0-8])|(8[\d])|(9[1,8,9]))\d{8}$/,
|
|
251
|
-
info || "it should be a mobile phone number"
|
|
252
|
-
);
|
|
354
|
+
return Rule(/^((\+|00)86)?1((3[\d])|(4[5,6,7,9])|(5[0-3,5-9])|(6[5-7])|(7[0-8])|(8[\d])|(9[1,8,9]))\d{8}$/, info || "it should be a mobile phone number");
|
|
253
355
|
}
|
|
356
|
+
__name(isMobile, "isMobile");
|
|
254
357
|
function isLandline(info) {
|
|
255
|
-
return Rule(
|
|
256
|
-
/\d{3}-\d{8}|\d{4}-\d{7}/,
|
|
257
|
-
info || "it should be a mobile phone number"
|
|
258
|
-
);
|
|
358
|
+
return Rule(/\d{3}-\d{8}|\d{4}-\d{7}/, info || "it should be a mobile phone number");
|
|
259
359
|
}
|
|
360
|
+
__name(isLandline, "isLandline");
|
|
260
361
|
function isMailBox(info) {
|
|
261
|
-
return Rule(
|
|
262
|
-
/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,
|
|
263
|
-
info || "it should be a mailbox number"
|
|
264
|
-
);
|
|
362
|
+
return Rule(/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/, info || "it should be a mailbox number");
|
|
265
363
|
}
|
|
364
|
+
__name(isMailBox, "isMailBox");
|
|
266
365
|
function isIdCard(info) {
|
|
267
|
-
return Rule(
|
|
268
|
-
/(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/,
|
|
269
|
-
info || "it should be an identity card number"
|
|
270
|
-
);
|
|
366
|
+
return Rule(/(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/, info || "it should be an identity card number");
|
|
271
367
|
}
|
|
368
|
+
__name(isIdCard, "isIdCard");
|
|
272
369
|
function isCnName(info) {
|
|
273
|
-
return Rule(
|
|
274
|
-
/^([\u4E00-\u9FA5·]{2,16})$/,
|
|
275
|
-
info || "\u9700\u8981\u662F\u4E00\u4E2A\u5408\u7406\u7684\u4E2D\u6587\u540D\u5B57"
|
|
276
|
-
);
|
|
370
|
+
return Rule(/^([\u4E00-\u9FA5·]{2,16})$/, info || "\u9700\u8981\u662F\u4E00\u4E2A\u5408\u7406\u7684\u4E2D\u6587\u540D\u5B57");
|
|
277
371
|
}
|
|
372
|
+
__name(isCnName, "isCnName");
|
|
278
373
|
function isEnName(info) {
|
|
279
|
-
return Rule(
|
|
280
|
-
/(^[a-zA-Z]{1}[a-zA-Z\s]{0,20}[a-zA-Z]{1}$)/,
|
|
281
|
-
info || "it should be a valid en-name"
|
|
282
|
-
);
|
|
374
|
+
return Rule(/(^[a-zA-Z]{1}[a-zA-Z\s]{0,20}[a-zA-Z]{1}$)/, info || "it should be a valid en-name");
|
|
283
375
|
}
|
|
376
|
+
__name(isEnName, "isEnName");
|
|
284
377
|
function isDate(info) {
|
|
285
|
-
return Rule(
|
|
286
|
-
/^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/,
|
|
287
|
-
info || "it should be a valid date"
|
|
288
|
-
);
|
|
378
|
+
return Rule(/^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/, info || "it should be a valid date");
|
|
289
379
|
}
|
|
380
|
+
__name(isDate, "isDate");
|
|
290
381
|
function isWechat(info) {
|
|
291
|
-
return Rule(
|
|
292
|
-
/^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/,
|
|
293
|
-
info || "it should be a valid date"
|
|
294
|
-
);
|
|
382
|
+
return Rule(/^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/, info || "it should be a valid date");
|
|
295
383
|
}
|
|
384
|
+
__name(isWechat, "isWechat");
|
|
296
385
|
function isHexColor(info) {
|
|
297
|
-
return Rule(
|
|
298
|
-
/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/,
|
|
299
|
-
info || "it should be a valid hex-color"
|
|
300
|
-
);
|
|
386
|
+
return Rule(/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/, info || "it should be a valid hex-color");
|
|
301
387
|
}
|
|
388
|
+
__name(isHexColor, "isHexColor");
|
|
302
389
|
function isPostalCode(info) {
|
|
303
|
-
return Rule(
|
|
304
|
-
/^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/,
|
|
305
|
-
info || "it should be a valid postal code"
|
|
306
|
-
);
|
|
390
|
+
return Rule(/^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/, info || "it should be a valid postal code");
|
|
307
391
|
}
|
|
392
|
+
__name(isPostalCode, "isPostalCode");
|
|
308
393
|
|
|
309
394
|
// src/preset/pipe.ts
|
|
310
395
|
function toNumber() {
|
|
311
396
|
return Pipe(to((param) => Number(param)));
|
|
312
397
|
}
|
|
398
|
+
__name(toNumber, "toNumber");
|
|
313
399
|
function toString() {
|
|
314
400
|
return Pipe(to((param) => String(param)));
|
|
315
401
|
}
|
|
402
|
+
__name(toString, "toString");
|
|
316
403
|
|
|
317
404
|
// src/namespace.ts
|
|
318
405
|
var activeInstance = {};
|
|
@@ -320,21 +407,28 @@ function injectProperty(key, value) {
|
|
|
320
407
|
activeInstance[key] = value;
|
|
321
408
|
return activeInstance;
|
|
322
409
|
}
|
|
410
|
+
__name(injectProperty, "injectProperty");
|
|
323
411
|
function getProperty(key) {
|
|
324
412
|
return activeInstance[key];
|
|
325
413
|
}
|
|
414
|
+
__name(getProperty, "getProperty");
|
|
326
415
|
|
|
327
416
|
// src/custom/decorator.ts
|
|
328
417
|
function Watcher(eventName) {
|
|
329
418
|
return (obj, key) => {
|
|
330
|
-
|
|
419
|
+
setModalVar(obj, key);
|
|
331
420
|
regisHandler(obj, key, {
|
|
332
421
|
init(instance) {
|
|
333
|
-
getProperty("watcher")?.({
|
|
422
|
+
getProperty("watcher")?.({
|
|
423
|
+
eventName,
|
|
424
|
+
instance,
|
|
425
|
+
key
|
|
426
|
+
});
|
|
334
427
|
}
|
|
335
428
|
});
|
|
336
429
|
};
|
|
337
430
|
}
|
|
431
|
+
__name(Watcher, "Watcher");
|
|
338
432
|
export {
|
|
339
433
|
Clear,
|
|
340
434
|
Err,
|
|
@@ -346,6 +440,7 @@ export {
|
|
|
346
440
|
Storage,
|
|
347
441
|
Tag,
|
|
348
442
|
Watcher,
|
|
443
|
+
Window,
|
|
349
444
|
activeInstance,
|
|
350
445
|
addDecoToClass,
|
|
351
446
|
classToValue,
|
|
@@ -355,6 +450,7 @@ export {
|
|
|
355
450
|
getInitEvent,
|
|
356
451
|
getModelState,
|
|
357
452
|
getProperty,
|
|
453
|
+
getState,
|
|
358
454
|
getTag,
|
|
359
455
|
init,
|
|
360
456
|
injectProperty,
|
|
@@ -369,17 +465,20 @@ export {
|
|
|
369
465
|
isMailBox,
|
|
370
466
|
isMobile,
|
|
371
467
|
isNumber,
|
|
372
|
-
isObject,
|
|
468
|
+
isObject2 as isObject,
|
|
469
|
+
isPhecda,
|
|
373
470
|
isPostalCode,
|
|
374
471
|
isString,
|
|
375
472
|
isWechat,
|
|
473
|
+
mergeOptions,
|
|
474
|
+
mergeState,
|
|
376
475
|
plainToClass,
|
|
377
476
|
regisHandler,
|
|
378
477
|
regisInitEvent,
|
|
379
478
|
register,
|
|
380
479
|
setExposeKey,
|
|
381
480
|
setIgnoreKey,
|
|
382
|
-
|
|
481
|
+
setModalVar,
|
|
383
482
|
snapShot,
|
|
384
483
|
to,
|
|
385
484
|
toNumber,
|