@regle/core 0.0.6 → 0.0.8
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.cjs +133 -64
- package/dist/index.d.cts +182 -79
- package/dist/index.d.ts +182 -79
- package/dist/index.js +144 -77
- package/package.json +21 -19
package/dist/index.js
CHANGED
|
@@ -18,29 +18,47 @@ function createReactiveParams(params) {
|
|
|
18
18
|
return toRef(() => param);
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
+
function getFunctionParametersLength(func) {
|
|
22
|
+
const funcStr = func.toString();
|
|
23
|
+
const params = funcStr.slice(funcStr.indexOf("(") + 1, funcStr.indexOf(")")).split(",").map((param) => param.trim());
|
|
24
|
+
const defaults = params.filter((param) => param.includes("="));
|
|
25
|
+
return defaults.length + func.length;
|
|
26
|
+
}
|
|
21
27
|
|
|
22
28
|
// src/core/createRule/defineRuleProcessors.ts
|
|
23
29
|
function defineRuleProcessors(definition, ...params) {
|
|
24
30
|
const { message, validator, active, ...properties } = definition;
|
|
25
31
|
const isAsync = validator.constructor.name === "AsyncFunction";
|
|
26
|
-
const
|
|
27
|
-
|
|
32
|
+
const defaultProcessors = {
|
|
33
|
+
validator(value, ...args) {
|
|
34
|
+
return definition.validator(value, ...unwrapRuleParameters(args.length ? args : params));
|
|
35
|
+
},
|
|
36
|
+
message(value, metadata) {
|
|
28
37
|
if (typeof definition.message === "function") {
|
|
29
|
-
return definition.message(value,
|
|
38
|
+
return definition.message(value, {
|
|
39
|
+
...metadata,
|
|
40
|
+
$params: unwrapRuleParameters(metadata.$params?.length ? metadata.$params : params)
|
|
41
|
+
});
|
|
30
42
|
} else {
|
|
31
43
|
return definition.message;
|
|
32
44
|
}
|
|
33
45
|
},
|
|
34
|
-
|
|
35
|
-
return definition.validator(value, ...args.length ? args : params);
|
|
36
|
-
},
|
|
37
|
-
active(value, ...args) {
|
|
46
|
+
active(value, metadata) {
|
|
38
47
|
if (typeof definition.active === "function") {
|
|
39
|
-
return definition.active(value,
|
|
48
|
+
return definition.active(value, {
|
|
49
|
+
...metadata,
|
|
50
|
+
$params: unwrapRuleParameters(metadata.$params?.length ? metadata.$params : params)
|
|
51
|
+
});
|
|
40
52
|
} else {
|
|
41
53
|
return definition.active ?? true;
|
|
42
54
|
}
|
|
43
55
|
},
|
|
56
|
+
exec(value) {
|
|
57
|
+
return definition.validator(value, ...unwrapRuleParameters(params));
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const processors = {
|
|
61
|
+
...defaultProcessors,
|
|
44
62
|
...properties,
|
|
45
63
|
...{
|
|
46
64
|
_validator: definition.validator,
|
|
@@ -61,7 +79,7 @@ function createRule(definition) {
|
|
|
61
79
|
let fakeParams = [];
|
|
62
80
|
const staticProcessors = defineRuleProcessors(definition, ...fakeParams);
|
|
63
81
|
const isAsync = definition.validator.constructor.name === "AsyncFunction";
|
|
64
|
-
if (definition.validator
|
|
82
|
+
if (getFunctionParametersLength(definition.validator) > 1) {
|
|
65
83
|
const ruleFactory = function(...params) {
|
|
66
84
|
return defineRuleProcessors(definition, ...params);
|
|
67
85
|
};
|
|
@@ -69,9 +87,10 @@ function createRule(definition) {
|
|
|
69
87
|
ruleFactory.message = staticProcessors.message;
|
|
70
88
|
ruleFactory.active = staticProcessors.active;
|
|
71
89
|
ruleFactory.type = staticProcessors.type;
|
|
72
|
-
ruleFactory.
|
|
73
|
-
ruleFactory.
|
|
74
|
-
ruleFactory.
|
|
90
|
+
ruleFactory.exec = staticProcessors.exec;
|
|
91
|
+
ruleFactory._validator = staticProcessors.validator;
|
|
92
|
+
ruleFactory._message = staticProcessors.message;
|
|
93
|
+
ruleFactory._active = staticProcessors.active;
|
|
75
94
|
ruleFactory._type = definition.type;
|
|
76
95
|
ruleFactory._patched = false;
|
|
77
96
|
ruleFactory._async = isAsync;
|
|
@@ -82,15 +101,18 @@ function createRule(definition) {
|
|
|
82
101
|
}
|
|
83
102
|
throw new Error("Validator must be a function");
|
|
84
103
|
}
|
|
104
|
+
function defineType(ruleName) {
|
|
105
|
+
return ruleName;
|
|
106
|
+
}
|
|
85
107
|
|
|
86
108
|
// src/core/useRegle/useRegle.ts
|
|
87
|
-
import { computed as
|
|
109
|
+
import { computed as computed6, isRef as isRef2, ref as ref4, shallowRef as shallowRef2, toRaw } from "vue";
|
|
88
110
|
|
|
89
111
|
// src/core/useRegle/useStateProperties/useStateProperties.ts
|
|
90
|
-
import { computed as
|
|
112
|
+
import { computed as computed5, reactive as reactive5, unref as unref3 } from "vue";
|
|
91
113
|
|
|
92
114
|
// src/core/useStorage/useStorage.ts
|
|
93
|
-
import { ref, shallowRef } from "vue";
|
|
115
|
+
import { onScopeDispose, ref, shallowRef } from "vue";
|
|
94
116
|
function useStorage() {
|
|
95
117
|
const ruleDeclStorage = shallowRef(/* @__PURE__ */ new Map());
|
|
96
118
|
const fieldsStorage = shallowRef(
|
|
@@ -179,10 +201,20 @@ function useStorage() {
|
|
|
179
201
|
} else {
|
|
180
202
|
const $pending = ref(false);
|
|
181
203
|
const $valid = ref(true);
|
|
182
|
-
|
|
183
|
-
|
|
204
|
+
const $metadata = ref({});
|
|
205
|
+
const $validating = ref(false);
|
|
206
|
+
ruleStatusStorage.value.set(path, { $pending, $valid, $metadata, $validating });
|
|
207
|
+
return { $pending, $valid, $metadata, $validating };
|
|
184
208
|
}
|
|
185
209
|
}
|
|
210
|
+
onScopeDispose(() => {
|
|
211
|
+
ruleDeclStorage.value.clear();
|
|
212
|
+
fieldsStorage.value.clear();
|
|
213
|
+
collectionsStorage.value.clear();
|
|
214
|
+
dirtyStorage.value.clear();
|
|
215
|
+
ruleStatusStorage.value.clear();
|
|
216
|
+
arrayStatusStorage.value.clear();
|
|
217
|
+
});
|
|
186
218
|
return {
|
|
187
219
|
addRuleDeclEntry,
|
|
188
220
|
setDirtyEntry,
|
|
@@ -232,7 +264,7 @@ function isEmpty(value) {
|
|
|
232
264
|
}
|
|
233
265
|
|
|
234
266
|
// src/utils/composables.ts
|
|
235
|
-
import { effectScope, getCurrentScope, onScopeDispose } from "vue";
|
|
267
|
+
import { effectScope, getCurrentScope, onScopeDispose as onScopeDispose2 } from "vue";
|
|
236
268
|
|
|
237
269
|
// src/core/useRegle/guards/ruleDef.guards.ts
|
|
238
270
|
function isNestedRulesDef(state, rule) {
|
|
@@ -274,7 +306,13 @@ function extractRulesErrors(rules, externalErrors) {
|
|
|
274
306
|
return rule.$message;
|
|
275
307
|
}
|
|
276
308
|
return null;
|
|
277
|
-
}).filter((msg) => !!msg).
|
|
309
|
+
}).filter((msg) => !!msg).reduce((acc, value) => {
|
|
310
|
+
if (typeof value === "string") {
|
|
311
|
+
return acc?.concat([value]);
|
|
312
|
+
} else {
|
|
313
|
+
return acc?.concat(value);
|
|
314
|
+
}
|
|
315
|
+
}, []).concat(externalErrors ?? []);
|
|
278
316
|
}
|
|
279
317
|
function processFieldErrors(fieldStatus) {
|
|
280
318
|
if (isNestedRulesStatus(fieldStatus)) {
|
|
@@ -328,7 +366,7 @@ function useErrors($regle) {
|
|
|
328
366
|
}
|
|
329
367
|
|
|
330
368
|
// src/core/useRegle/useStateProperties/createReactiveNestedStatus.ts
|
|
331
|
-
import { computed as
|
|
369
|
+
import { computed as computed4, effectScope as effectScope4, reactive as reactive4, toRef as toRef4, watch as watch4 } from "vue";
|
|
332
370
|
|
|
333
371
|
// src/core/useRegle/useStateProperties/createReactiveCollectionStatus.ts
|
|
334
372
|
import { nextTick, reactive as reactive3, ref as ref3, toRef as toRef3, toRefs, watch as watch3 } from "vue";
|
|
@@ -365,13 +403,20 @@ function createReactiveRuleStatus({
|
|
|
365
403
|
}) {
|
|
366
404
|
let scope = effectScope2();
|
|
367
405
|
let scopeState;
|
|
368
|
-
const { $pending, $valid } = storage.trySetRuleStatusRef(
|
|
406
|
+
const { $pending, $valid, $metadata, $validating } = storage.trySetRuleStatusRef(
|
|
407
|
+
`${path}.${ruleKey}`
|
|
408
|
+
);
|
|
369
409
|
function $watch() {
|
|
370
410
|
scopeState = scope.run(() => {
|
|
411
|
+
const $defaultMetadata = computed2(() => ({
|
|
412
|
+
$invalid: !$valid.value,
|
|
413
|
+
$params: $params.value,
|
|
414
|
+
...$metadata.value
|
|
415
|
+
}));
|
|
371
416
|
const $active = computed2(() => {
|
|
372
417
|
if (isFormRuleDefinition(rule)) {
|
|
373
418
|
if (typeof rule.value.active === "function") {
|
|
374
|
-
return rule.value.active(state.value,
|
|
419
|
+
return rule.value.active(state.value, $defaultMetadata.value);
|
|
375
420
|
} else {
|
|
376
421
|
return rule.value.active;
|
|
377
422
|
}
|
|
@@ -381,31 +426,33 @@ function createReactiveRuleStatus({
|
|
|
381
426
|
});
|
|
382
427
|
const $message = computed2(() => {
|
|
383
428
|
let message = "";
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
if (
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
message = customMessageRule;
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
if (isFormRuleDefinition(rule)) {
|
|
393
|
-
if (!(customMessageRule && !rule.value._patched)) {
|
|
394
|
-
if (typeof rule.value.message === "function") {
|
|
395
|
-
message = rule.value.message(state.value, ...$params.value);
|
|
429
|
+
if ($dirty.value && !$validating.value) {
|
|
430
|
+
const customMessageRule = customMessages ? customMessages[ruleKey]?.message : void 0;
|
|
431
|
+
if (customMessageRule) {
|
|
432
|
+
if (typeof customMessageRule === "function") {
|
|
433
|
+
message = customMessageRule(state.value, $defaultMetadata.value);
|
|
396
434
|
} else {
|
|
397
|
-
message =
|
|
435
|
+
message = customMessageRule;
|
|
398
436
|
}
|
|
399
437
|
}
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
438
|
+
if (isFormRuleDefinition(rule)) {
|
|
439
|
+
if (!(customMessageRule && !rule.value._patched)) {
|
|
440
|
+
if (typeof rule.value.message === "function") {
|
|
441
|
+
message = rule.value.message(state.value, $defaultMetadata.value);
|
|
442
|
+
} else {
|
|
443
|
+
message = rule.value.message;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
if (isEmpty(message)) {
|
|
448
|
+
message = "Error";
|
|
449
|
+
console.warn(`No error message defined for ${ruleKey}`);
|
|
450
|
+
}
|
|
404
451
|
}
|
|
405
452
|
return message;
|
|
406
453
|
});
|
|
407
454
|
const $type = computed2(() => {
|
|
408
|
-
if (isFormRuleDefinition(rule)) {
|
|
455
|
+
if (isFormRuleDefinition(rule) && rule.value.type) {
|
|
409
456
|
return Object.values(InternalRuleType).includes(rule.value.type) ? ruleKey : rule.value.type;
|
|
410
457
|
} else {
|
|
411
458
|
return ruleKey;
|
|
@@ -440,29 +487,48 @@ function createReactiveRuleStatus({
|
|
|
440
487
|
deep: true
|
|
441
488
|
});
|
|
442
489
|
async function $validate() {
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
490
|
+
try {
|
|
491
|
+
$validating.value = true;
|
|
492
|
+
const validator = scopeState.$validator.value;
|
|
493
|
+
let ruleResult = false;
|
|
494
|
+
const resultOrPromise = validator(state.value, ...scopeState.$params.value);
|
|
495
|
+
if (resultOrPromise instanceof Promise) {
|
|
496
|
+
if ($dirty.value && !$pending.value) {
|
|
497
|
+
try {
|
|
498
|
+
$valid.value = true;
|
|
499
|
+
$pending.value = true;
|
|
500
|
+
const promiseResult = await resultOrPromise;
|
|
501
|
+
if (typeof promiseResult === "boolean") {
|
|
502
|
+
ruleResult = promiseResult;
|
|
503
|
+
} else {
|
|
504
|
+
const { $valid: $valid2, ...rest } = promiseResult;
|
|
505
|
+
ruleResult = $valid2;
|
|
506
|
+
$metadata.value = rest;
|
|
507
|
+
}
|
|
508
|
+
} catch (e) {
|
|
509
|
+
ruleResult = false;
|
|
510
|
+
} finally {
|
|
511
|
+
$pending.value = false;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
} else {
|
|
515
|
+
if (resultOrPromise != null) {
|
|
516
|
+
if (typeof resultOrPromise === "boolean") {
|
|
517
|
+
ruleResult = resultOrPromise;
|
|
518
|
+
} else {
|
|
519
|
+
const { $valid: $valid2, ...rest } = resultOrPromise;
|
|
520
|
+
ruleResult = $valid2;
|
|
521
|
+
$metadata.value = rest;
|
|
522
|
+
}
|
|
457
523
|
}
|
|
458
524
|
}
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
525
|
+
$valid.value = ruleResult;
|
|
526
|
+
if (options.$externalErrors) {
|
|
527
|
+
}
|
|
528
|
+
return ruleResult;
|
|
529
|
+
} finally {
|
|
530
|
+
$validating.value = false;
|
|
464
531
|
}
|
|
465
|
-
return ruleResult;
|
|
466
532
|
}
|
|
467
533
|
function $unwatch() {
|
|
468
534
|
$unwatchState();
|
|
@@ -548,7 +614,6 @@ function createReactiveFieldStatus({
|
|
|
548
614
|
$commit();
|
|
549
615
|
}
|
|
550
616
|
$externalErrors.value = [];
|
|
551
|
-
console.log($externalErrors.value);
|
|
552
617
|
});
|
|
553
618
|
function $unwatch() {
|
|
554
619
|
if ($rules.value) {
|
|
@@ -682,7 +747,7 @@ function createCollectionElement({
|
|
|
682
747
|
});
|
|
683
748
|
}
|
|
684
749
|
const $state = toRefs(value);
|
|
685
|
-
const $externalErrors =
|
|
750
|
+
const $externalErrors = toRef3(() => externalErrors.value?.[index]);
|
|
686
751
|
const $status = createReactiveChildrenStatus({
|
|
687
752
|
state: $state[index],
|
|
688
753
|
rulesDef: toRef3(() => rules),
|
|
@@ -690,7 +755,7 @@ function createCollectionElement({
|
|
|
690
755
|
path: $path,
|
|
691
756
|
storage,
|
|
692
757
|
options,
|
|
693
|
-
externalErrors: $externalErrors
|
|
758
|
+
externalErrors: $externalErrors
|
|
694
759
|
});
|
|
695
760
|
if ($status) {
|
|
696
761
|
$status.$id = value[index].$id ?? $id;
|
|
@@ -942,28 +1007,28 @@ function createReactiveNestedStatus({
|
|
|
942
1007
|
);
|
|
943
1008
|
}
|
|
944
1009
|
scopeState = scope.run(() => {
|
|
945
|
-
const $dirty =
|
|
1010
|
+
const $dirty = computed4(() => {
|
|
946
1011
|
return Object.entries($fields.value).every(([key, statusOrField]) => {
|
|
947
1012
|
return statusOrField.$dirty;
|
|
948
1013
|
});
|
|
949
1014
|
});
|
|
950
|
-
const $anyDirty =
|
|
1015
|
+
const $anyDirty = computed4(() => {
|
|
951
1016
|
return Object.entries($fields.value).some(([key, statusOrField]) => {
|
|
952
1017
|
return statusOrField.$dirty;
|
|
953
1018
|
});
|
|
954
1019
|
});
|
|
955
|
-
const $invalid =
|
|
1020
|
+
const $invalid = computed4(() => {
|
|
956
1021
|
return Object.entries($fields.value).some(([key, statusOrField]) => {
|
|
957
1022
|
return statusOrField.$invalid;
|
|
958
1023
|
});
|
|
959
1024
|
});
|
|
960
|
-
const $valid =
|
|
961
|
-
const $error =
|
|
1025
|
+
const $valid = computed4(() => !$invalid.value);
|
|
1026
|
+
const $error = computed4(() => {
|
|
962
1027
|
return Object.entries($fields.value).some(([key, statusOrField]) => {
|
|
963
1028
|
return statusOrField.$error;
|
|
964
1029
|
});
|
|
965
1030
|
});
|
|
966
|
-
const $pending =
|
|
1031
|
+
const $pending = computed4(() => {
|
|
967
1032
|
return Object.entries($fields.value).some(([key, statusOrField]) => {
|
|
968
1033
|
return statusOrField.$pending;
|
|
969
1034
|
});
|
|
@@ -1053,7 +1118,7 @@ function createReactiveChildrenStatus({
|
|
|
1053
1118
|
// src/core/useRegle/useStateProperties/useStateProperties.ts
|
|
1054
1119
|
function useStateProperties(scopeRules, state, options, customRules) {
|
|
1055
1120
|
const storage = useStorage();
|
|
1056
|
-
const externalErrors =
|
|
1121
|
+
const externalErrors = computed5(() => unref3(options.$externalErrors));
|
|
1057
1122
|
const $regle = reactive5(
|
|
1058
1123
|
createReactiveNestedStatus({
|
|
1059
1124
|
rootRules: scopeRules,
|
|
@@ -1077,7 +1142,7 @@ function createUseRegleComposable(customRules, options) {
|
|
|
1077
1142
|
rewardEarly: options?.rewardEarly ?? false
|
|
1078
1143
|
};
|
|
1079
1144
|
function useRegle2(state, rulesFactory, options2) {
|
|
1080
|
-
const scopeRules = isRef2(rulesFactory) ? rulesFactory :
|
|
1145
|
+
const scopeRules = isRef2(rulesFactory) ? rulesFactory : computed6(rulesFactory);
|
|
1081
1146
|
const resolvedOptions = {
|
|
1082
1147
|
...globalOptions,
|
|
1083
1148
|
...options2
|
|
@@ -1094,10 +1159,10 @@ function createUseRegleComposable(customRules, options) {
|
|
|
1094
1159
|
state.value = toRaw(initialState.value);
|
|
1095
1160
|
$regle.$reset();
|
|
1096
1161
|
}
|
|
1097
|
-
const $valid =
|
|
1162
|
+
const $valid = computed6(() => {
|
|
1098
1163
|
return $regle.$valid && $regle.$dirty && !$regle.$pending;
|
|
1099
1164
|
});
|
|
1100
|
-
const $invalid =
|
|
1165
|
+
const $invalid = computed6(() => {
|
|
1101
1166
|
return $regle.$invalid && $regle.$dirty || $regle.$pending;
|
|
1102
1167
|
});
|
|
1103
1168
|
async function validateForm() {
|
|
@@ -1122,8 +1187,8 @@ function createUseRegleComposable(customRules, options) {
|
|
|
1122
1187
|
}
|
|
1123
1188
|
var useRegle = createUseRegleComposable();
|
|
1124
1189
|
|
|
1125
|
-
// src/core/
|
|
1126
|
-
function
|
|
1190
|
+
// src/core/defineRegleConfig.ts
|
|
1191
|
+
function defineRegleConfig({
|
|
1127
1192
|
rules,
|
|
1128
1193
|
options
|
|
1129
1194
|
}) {
|
|
@@ -1133,6 +1198,8 @@ function defineRegleOptions({
|
|
|
1133
1198
|
export {
|
|
1134
1199
|
InternalRuleType,
|
|
1135
1200
|
createRule,
|
|
1136
|
-
|
|
1137
|
-
|
|
1201
|
+
defineRegleConfig,
|
|
1202
|
+
defineType,
|
|
1203
|
+
unwrapRuleParameters,
|
|
1204
|
+
useRegle
|
|
1138
1205
|
};
|
package/package.json
CHANGED
|
@@ -1,34 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@regle/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"description": "Vue form validator",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"lint": "eslint --ext .ts --ext .vue .",
|
|
7
7
|
"typecheck": "tsc --noEmit",
|
|
8
8
|
"release": "npm publish",
|
|
9
9
|
"build": "tsup",
|
|
10
|
-
"
|
|
10
|
+
"build:local": "tsup --clean false",
|
|
11
|
+
"dev": "tsup --config=tsup.dev.ts --watch",
|
|
12
|
+
"test": "echo 'no tests'"
|
|
11
13
|
},
|
|
12
14
|
"devDependencies": {
|
|
15
|
+
"@total-typescript/ts-reset": "0.5.1",
|
|
16
|
+
"@types/node": "20.11.5",
|
|
13
17
|
"@types/prettier": "3.0.0",
|
|
14
|
-
"@typescript-eslint/eslint-plugin": "6.
|
|
15
|
-
"@typescript-eslint/parser": "6.
|
|
16
|
-
"@
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"changelogithub": "0.13.0",
|
|
18
|
+
"@typescript-eslint/eslint-plugin": "6.19.0",
|
|
19
|
+
"@typescript-eslint/parser": "6.19.0",
|
|
20
|
+
"@vue/test-utils": "2.4.3",
|
|
21
|
+
"bumpp": "9.3.0",
|
|
22
|
+
"changelogithub": "0.13.3",
|
|
20
23
|
"cross-env": "7.0.3",
|
|
21
|
-
"eslint": "8.
|
|
22
|
-
"eslint-config-prettier": "9.
|
|
23
|
-
"eslint-plugin-vue": "9.
|
|
24
|
-
"prettier": "3.
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"vue
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"type-fest": "4.4.0"
|
|
24
|
+
"eslint": "8.56.0",
|
|
25
|
+
"eslint-config-prettier": "9.1.0",
|
|
26
|
+
"eslint-plugin-vue": "9.20.1",
|
|
27
|
+
"prettier": "3.2.4",
|
|
28
|
+
"tsup": "8.0.1",
|
|
29
|
+
"type-fest": "4.9.0",
|
|
30
|
+
"typescript": "5.3.3",
|
|
31
|
+
"vue": "3.4.14",
|
|
32
|
+
"vue-eslint-parser": "9.4.0",
|
|
33
|
+
"vue-tsc": "1.8.27"
|
|
32
34
|
},
|
|
33
35
|
"type": "module",
|
|
34
36
|
"exports": {
|