vome-core 0.0.5 → 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.js +236 -1
- package/dist/server/index.js +3261 -1
- package/package.json +10 -2
- package/src/admin/components/vm-auto-perm-dialog.vue +3 -0
- package/src/admin/components/vm-check-tree.vue +1 -0
- package/src/admin/components/vm-dept-tree.vue +3 -0
- package/src/admin/components/vm-empty.vue +1 -0
- package/src/admin/components/vm-eps-perm-picker.vue +2 -0
- package/src/admin/components/vm-group-cascader.vue +1 -0
- package/src/admin/components/vm-icon-picker.vue +1 -0
- package/src/admin/components/vm-markdown.vue +1 -0
- package/src/admin/components/vm-ri-icon.vue +2 -0
- package/src/admin/components/vm-role-picker.vue +2 -0
- package/src/admin/components/vm-view-path-picker.vue +1 -0
- package/src/admin/crud/components/vm-column-custom.vue +1 -0
- package/src/admin/crud/components/vm-context-menu.vue +1 -0
- package/src/admin/crud/components/vm-date-picker.vue +1 -0
- package/src/admin/crud/components/vm-date-range.vue +1 -0
- package/src/admin/crud/components/vm-date-text.vue +1 -0
- package/src/admin/crud/components/vm-dict-tag.vue +1 -0
- package/src/admin/crud/components/vm-file-icon.vue +1 -0
- package/src/admin/crud/components/vm-multi-select.vue +1 -0
- package/src/admin/crud/components/vm-select.vue +2 -0
- package/src/admin/crud/components/vm-switch.vue +1 -0
- package/src/admin/crud/components/vm-tree-select.vue +1 -0
- package/src/admin/crud/components/vm-upload-item.vue +1 -0
- package/src/admin/crud/components/vm-upload.vue +2 -0
- package/src/admin/crud/components/vm-user-select.vue +1 -0
- package/src/admin/crud/vm-add-btn.vue +1 -0
- package/src/admin/crud/vm-adv-search.vue +1 -0
- package/src/admin/crud/vm-crud.vue +2 -0
- package/src/admin/crud/vm-dialog.vue +1 -0
- package/src/admin/crud/vm-form.vue +1 -0
- package/src/admin/crud/vm-pagination.vue +1 -0
- package/src/admin/crud/vm-search-key.vue +1 -0
- package/src/admin/crud/vm-search.vue +1 -0
- package/src/admin/crud/vm-table.vue +1 -0
- package/src/admin/crud/vm-toolbar.vue +1 -0
- package/src/admin/crud/vm-upsert.vue +2 -0
- package/src/admin/lib/eps.ts +3 -2
- package/src/admin/lib/menu.ts +3 -2
- package/src/admin/router/index.ts +1 -7
- package/src/admin/service/index.ts +143 -46
- package/src/admin/stores/user.ts +4 -4
package/dist/index.js
CHANGED
|
@@ -1 +1,236 @@
|
|
|
1
|
-
|
|
1
|
+
// @bun
|
|
2
|
+
// src/comm/merge.ts
|
|
3
|
+
function merge(base, override) {
|
|
4
|
+
const result = { ...base };
|
|
5
|
+
for (const key of Object.keys(override)) {
|
|
6
|
+
const baseVal = result[key];
|
|
7
|
+
const overrideVal = override[key];
|
|
8
|
+
if (baseVal && overrideVal && typeof baseVal === "object" && typeof overrideVal === "object" && !Array.isArray(baseVal) && !Array.isArray(overrideVal)) {
|
|
9
|
+
result[key] = merge(baseVal, overrideVal);
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
result[key] = overrideVal;
|
|
13
|
+
}
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
// src/shared/tree.ts
|
|
17
|
+
function deepTree(list, sort = "asc") {
|
|
18
|
+
const map = new Map;
|
|
19
|
+
for (const row of list) {
|
|
20
|
+
if (row.id == null)
|
|
21
|
+
continue;
|
|
22
|
+
map.set(row.id, { ...row, children: [] });
|
|
23
|
+
}
|
|
24
|
+
const roots = [];
|
|
25
|
+
for (const node of map.values()) {
|
|
26
|
+
const pid = node.parentId;
|
|
27
|
+
if (pid != null && pid !== "" && map.has(pid)) {
|
|
28
|
+
map.get(pid).children.push(node);
|
|
29
|
+
} else {
|
|
30
|
+
roots.push(node);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const sortRec = (arr) => {
|
|
34
|
+
arr.sort((a, b) => {
|
|
35
|
+
const ao = a.orderNum ?? 0;
|
|
36
|
+
const bo = b.orderNum ?? 0;
|
|
37
|
+
const d = sort === "desc" ? bo - ao : ao - bo;
|
|
38
|
+
return d || Number(a.id) - Number(b.id);
|
|
39
|
+
});
|
|
40
|
+
for (const n of arr)
|
|
41
|
+
if (n.children?.length)
|
|
42
|
+
sortRec(n.children);
|
|
43
|
+
};
|
|
44
|
+
sortRec(roots);
|
|
45
|
+
return roots;
|
|
46
|
+
}
|
|
47
|
+
function flattenTree(nodes, expanded, depth = 0, out = []) {
|
|
48
|
+
for (const n of nodes) {
|
|
49
|
+
const kids = n.children || [];
|
|
50
|
+
out.push({ ...n, depth, hasChildren: kids.length > 0 });
|
|
51
|
+
if (kids.length && expanded.has(n.id))
|
|
52
|
+
flattenTree(kids, expanded, depth + 1, out);
|
|
53
|
+
}
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
// src/comm/format-time.ts
|
|
57
|
+
var TIME_KEY_RE = /(?:Time|Date|At)$/;
|
|
58
|
+
var ISO_RE = /^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?$/;
|
|
59
|
+
function formatDateTime(value) {
|
|
60
|
+
const d = value instanceof Date ? value : new Date(value);
|
|
61
|
+
if (Number.isNaN(d.getTime()))
|
|
62
|
+
return String(value);
|
|
63
|
+
return new Intl.DateTimeFormat("sv-SE", {
|
|
64
|
+
timeZone: "Asia/Shanghai",
|
|
65
|
+
year: "numeric",
|
|
66
|
+
month: "2-digit",
|
|
67
|
+
day: "2-digit",
|
|
68
|
+
hour: "2-digit",
|
|
69
|
+
minute: "2-digit",
|
|
70
|
+
second: "2-digit",
|
|
71
|
+
hour12: false
|
|
72
|
+
}).format(d).replace("T", " ");
|
|
73
|
+
}
|
|
74
|
+
function isTimeKey(key) {
|
|
75
|
+
return TIME_KEY_RE.test(key);
|
|
76
|
+
}
|
|
77
|
+
function formatApiDates(data) {
|
|
78
|
+
return walk(data);
|
|
79
|
+
}
|
|
80
|
+
function walk(value, key) {
|
|
81
|
+
if (value == null)
|
|
82
|
+
return value;
|
|
83
|
+
if (value instanceof Date)
|
|
84
|
+
return formatDateTime(value);
|
|
85
|
+
if (typeof value === "string" && key && isTimeKey(key) && ISO_RE.test(value)) {
|
|
86
|
+
return formatDateTime(value);
|
|
87
|
+
}
|
|
88
|
+
if (Array.isArray(value))
|
|
89
|
+
return value.map((item) => walk(item));
|
|
90
|
+
if (typeof value === "object") {
|
|
91
|
+
if (Object.prototype.toString.call(value) !== "[object Object]")
|
|
92
|
+
return value;
|
|
93
|
+
const out = {};
|
|
94
|
+
for (const [k, v] of Object.entries(value)) {
|
|
95
|
+
out[k] = walk(v, k);
|
|
96
|
+
}
|
|
97
|
+
return out;
|
|
98
|
+
}
|
|
99
|
+
return value;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// src/routing/base.ts
|
|
103
|
+
var RES_CODE = {
|
|
104
|
+
SUCCESS: 1000,
|
|
105
|
+
ERROR: 1001
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
class BaseController {
|
|
109
|
+
ok(data) {
|
|
110
|
+
const raw = data === undefined ? null : data;
|
|
111
|
+
return {
|
|
112
|
+
code: RES_CODE.SUCCESS,
|
|
113
|
+
message: "success",
|
|
114
|
+
data: raw == null ? raw : formatApiDates(raw)
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
fail(message = "error", code = RES_CODE.ERROR) {
|
|
118
|
+
return { code, message };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// package.json
|
|
122
|
+
var package_default = {
|
|
123
|
+
name: "vome-core",
|
|
124
|
+
version: "0.0.8",
|
|
125
|
+
description: "Vome framework \u2014 shared + Bun/Elysia server + Vue admin",
|
|
126
|
+
license: "MIT",
|
|
127
|
+
type: "module",
|
|
128
|
+
files: [
|
|
129
|
+
"dist",
|
|
130
|
+
"src/admin",
|
|
131
|
+
"src/shared",
|
|
132
|
+
"typings/admin"
|
|
133
|
+
],
|
|
134
|
+
main: "./dist/index.js",
|
|
135
|
+
types: "./dist/index.d.ts",
|
|
136
|
+
exports: {
|
|
137
|
+
".": {
|
|
138
|
+
types: "./dist/index.d.ts",
|
|
139
|
+
import: "./dist/index.js",
|
|
140
|
+
default: "./dist/index.js"
|
|
141
|
+
},
|
|
142
|
+
"./server": {
|
|
143
|
+
types: "./dist/server/index.d.ts",
|
|
144
|
+
import: "./dist/server/index.js",
|
|
145
|
+
default: "./dist/server/index.js"
|
|
146
|
+
},
|
|
147
|
+
"./admin": {
|
|
148
|
+
types: "./src/admin/index.ts",
|
|
149
|
+
import: "./src/admin/index.ts",
|
|
150
|
+
default: "./src/admin/index.ts"
|
|
151
|
+
},
|
|
152
|
+
"./admin/*": "./src/admin/*",
|
|
153
|
+
"./admin/styles/base.css": "./src/admin/styles/base.css",
|
|
154
|
+
"./typings/*": "./typings/admin/*"
|
|
155
|
+
},
|
|
156
|
+
scripts: {
|
|
157
|
+
build: `rm -rf dist && bun build ./src/index.ts ./src/server/index.ts --outdir ./dist --target bun --format esm --external elysia --external reflect-metadata --external drizzle-orm --external drizzle-zod --external @elysiajs/openapi --external @bogeychan/elysia-logger --external pino --external pino-pretty && tsc -p tsconfig.build.json && printf "%s\\n" "export * from '../src/index'" > dist/index.d.ts && mkdir -p dist/server && printf "%s\\n" "export * from '../../src/server/index'" > dist/server/index.d.ts`,
|
|
158
|
+
"build:obfuscate": `rm -rf dist && bun build ./src/index.ts ./src/server/index.ts --outdir ./dist --target bun --format esm --minify --external elysia --external reflect-metadata --external drizzle-orm --external drizzle-zod --external @elysiajs/openapi --external @bogeychan/elysia-logger --external pino --external pino-pretty && tsc -p tsconfig.build.json && printf "%s\\n" "export * from '../src/index'" > dist/index.d.ts && mkdir -p dist/server && printf "%s\\n" "export * from '../../src/server/index'" > dist/server/index.d.ts && bun scripts/obfuscate.ts`,
|
|
159
|
+
prepare: "bun run build"
|
|
160
|
+
},
|
|
161
|
+
peerDependencies: {
|
|
162
|
+
elysia: ">=1.0.0",
|
|
163
|
+
"reflect-metadata": ">=0.2.0",
|
|
164
|
+
"drizzle-orm": ">=0.30.0",
|
|
165
|
+
"drizzle-zod": ">=0.5.0",
|
|
166
|
+
vue: ">=3.5.0",
|
|
167
|
+
"vue-router": ">=4.0.0",
|
|
168
|
+
pinia: ">=2.0.0",
|
|
169
|
+
"vue-sonner": ">=2.0.0",
|
|
170
|
+
"@vueuse/core": ">=10.0.0",
|
|
171
|
+
clsx: ">=2.0.0",
|
|
172
|
+
"tailwind-merge": ">=2.0.0",
|
|
173
|
+
dompurify: ">=3.0.0",
|
|
174
|
+
marked: ">=9.0.0"
|
|
175
|
+
},
|
|
176
|
+
peerDependenciesMeta: {
|
|
177
|
+
"drizzle-orm": {
|
|
178
|
+
optional: true
|
|
179
|
+
},
|
|
180
|
+
"drizzle-zod": {
|
|
181
|
+
optional: true
|
|
182
|
+
},
|
|
183
|
+
vue: {
|
|
184
|
+
optional: true
|
|
185
|
+
},
|
|
186
|
+
"vue-router": {
|
|
187
|
+
optional: true
|
|
188
|
+
},
|
|
189
|
+
pinia: {
|
|
190
|
+
optional: true
|
|
191
|
+
},
|
|
192
|
+
"vue-sonner": {
|
|
193
|
+
optional: true
|
|
194
|
+
},
|
|
195
|
+
"@vueuse/core": {
|
|
196
|
+
optional: true
|
|
197
|
+
},
|
|
198
|
+
clsx: {
|
|
199
|
+
optional: true
|
|
200
|
+
},
|
|
201
|
+
"tailwind-merge": {
|
|
202
|
+
optional: true
|
|
203
|
+
},
|
|
204
|
+
dompurify: {
|
|
205
|
+
optional: true
|
|
206
|
+
},
|
|
207
|
+
marked: {
|
|
208
|
+
optional: true
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
devDependencies: {
|
|
212
|
+
"bun-types": "latest",
|
|
213
|
+
"drizzle-orm": "latest",
|
|
214
|
+
"drizzle-zod": "^0.8.3",
|
|
215
|
+
elysia: "latest",
|
|
216
|
+
"javascript-obfuscator": "^5.4.7",
|
|
217
|
+
"reflect-metadata": "^0.2.2",
|
|
218
|
+
typescript: "latest"
|
|
219
|
+
},
|
|
220
|
+
dependencies: {
|
|
221
|
+
"@bogeychan/elysia-logger": "^0.1.10",
|
|
222
|
+
"@elysiajs/openapi": "^1.4.15",
|
|
223
|
+
pino: "^10.3.1",
|
|
224
|
+
"pino-pretty": "^13.1.3"
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
// src/index.ts
|
|
229
|
+
var version = package_default.version;
|
|
230
|
+
export {
|
|
231
|
+
version,
|
|
232
|
+
merge,
|
|
233
|
+
flattenTree,
|
|
234
|
+
deepTree,
|
|
235
|
+
RES_CODE
|
|
236
|
+
};
|