@stellaris/metrics-shared 0.1.1 → 0.1.3
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/{index.d.ts → bff-service.d.ts} +208 -23
- package/index.ts +2 -1
- package/package.json +1 -1
- package/publish.sh +24 -8
- package/schemas/metric.ts +43 -2
- package/schemas/time.ts +8 -0
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
// Generated by dts-bundle-generator v9.5.1
|
|
2
2
|
|
|
3
3
|
export type ReportStatus = "draft" | "published" | "archived";
|
|
4
|
-
declare const app: import("hono/hono-base").HonoBase<{},
|
|
5
|
-
"*": {};
|
|
6
|
-
} & {
|
|
4
|
+
declare const app: import("hono/hono-base").HonoBase<{}, {
|
|
7
5
|
"/health": {
|
|
8
6
|
$get: {
|
|
9
7
|
input: {};
|
|
@@ -14,9 +12,7 @@ declare const app: import("hono/hono-base").HonoBase<{}, ({
|
|
|
14
12
|
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
15
13
|
};
|
|
16
14
|
};
|
|
17
|
-
}
|
|
18
|
-
"*": {};
|
|
19
|
-
} & {
|
|
15
|
+
} | import("hono/types").MergeSchemaPath<{
|
|
20
16
|
"/": {
|
|
21
17
|
$post: {
|
|
22
18
|
input: {
|
|
@@ -41,7 +37,7 @@ declare const app: import("hono/hono-base").HonoBase<{}, ({
|
|
|
41
37
|
$get: {
|
|
42
38
|
input: {
|
|
43
39
|
query: {
|
|
44
|
-
search?: string |
|
|
40
|
+
search?: string | undefined;
|
|
45
41
|
skip?: string | string[] | undefined;
|
|
46
42
|
take?: string | string[] | undefined;
|
|
47
43
|
};
|
|
@@ -157,17 +153,71 @@ declare const app: import("hono/hono-base").HonoBase<{}, ({
|
|
|
157
153
|
};
|
|
158
154
|
};
|
|
159
155
|
}, "/api/categories"> | import("hono/types").MergeSchemaPath<{
|
|
160
|
-
"*": {};
|
|
161
|
-
} & {
|
|
162
156
|
"/": {
|
|
163
157
|
$post: {
|
|
164
158
|
input: {
|
|
165
159
|
json: {
|
|
166
160
|
name: string;
|
|
167
|
-
queryConfig:
|
|
168
|
-
|
|
161
|
+
queryConfig: {
|
|
162
|
+
table: string;
|
|
163
|
+
dimensions: string[];
|
|
164
|
+
filters: ({
|
|
165
|
+
id: string;
|
|
166
|
+
member: string;
|
|
167
|
+
operator: "equals" | "notEquals";
|
|
168
|
+
value: string | number;
|
|
169
|
+
} | {
|
|
170
|
+
id: string;
|
|
171
|
+
member: string;
|
|
172
|
+
operator: "lt" | "gt" | "gte" | "lte";
|
|
173
|
+
value: number;
|
|
174
|
+
} | {
|
|
175
|
+
id: string;
|
|
176
|
+
member: string;
|
|
177
|
+
operator: "contains";
|
|
178
|
+
values: string[];
|
|
179
|
+
} | {
|
|
180
|
+
id: string;
|
|
181
|
+
member: string;
|
|
182
|
+
operator: "between";
|
|
183
|
+
range: [
|
|
184
|
+
number,
|
|
185
|
+
number
|
|
186
|
+
];
|
|
187
|
+
} | {
|
|
188
|
+
id: string;
|
|
189
|
+
member: string;
|
|
190
|
+
operator: "inDateRange";
|
|
191
|
+
dateRange: [
|
|
192
|
+
string,
|
|
193
|
+
string
|
|
194
|
+
];
|
|
195
|
+
})[];
|
|
196
|
+
timeGrain: "all" | "day" | "week" | "month" | "quarter" | "year";
|
|
197
|
+
distinctOn?: string | undefined;
|
|
198
|
+
timeDimension?: string | undefined;
|
|
199
|
+
};
|
|
169
200
|
description?: string | undefined;
|
|
170
201
|
categoryId?: string | undefined;
|
|
202
|
+
visualConfig?: {
|
|
203
|
+
chartType: "line" | "bar" | "area" | "pie" | "donut" | "stacked-bar" | "combo" | "radar" | "funnel" | "gauge";
|
|
204
|
+
colors?: string[] | undefined;
|
|
205
|
+
showLegend?: boolean | undefined;
|
|
206
|
+
showGrid?: boolean | undefined;
|
|
207
|
+
xAxis?: {
|
|
208
|
+
label?: string | undefined;
|
|
209
|
+
dataKey?: string | undefined;
|
|
210
|
+
} | undefined;
|
|
211
|
+
yAxis?: {
|
|
212
|
+
label?: string | undefined;
|
|
213
|
+
unit?: string | undefined;
|
|
214
|
+
min?: number | undefined;
|
|
215
|
+
max?: number | undefined;
|
|
216
|
+
} | undefined;
|
|
217
|
+
tooltip?: {
|
|
218
|
+
show?: boolean | undefined;
|
|
219
|
+
} | undefined;
|
|
220
|
+
} | undefined;
|
|
171
221
|
};
|
|
172
222
|
};
|
|
173
223
|
output: {
|
|
@@ -203,10 +253,11 @@ declare const app: import("hono/hono-base").HonoBase<{}, ({
|
|
|
203
253
|
$get: {
|
|
204
254
|
input: {
|
|
205
255
|
query: {
|
|
206
|
-
ownerId?: string |
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
256
|
+
ownerId?: string | undefined;
|
|
257
|
+
uncategorized?: string | undefined;
|
|
258
|
+
categoryId?: string | undefined;
|
|
259
|
+
isArchived?: string | undefined;
|
|
260
|
+
search?: string | undefined;
|
|
210
261
|
skip?: string | string[] | undefined;
|
|
211
262
|
take?: string | string[] | undefined;
|
|
212
263
|
};
|
|
@@ -294,8 +345,144 @@ declare const app: import("hono/hono-base").HonoBase<{}, ({
|
|
|
294
345
|
name?: string | undefined;
|
|
295
346
|
description?: string | null | undefined;
|
|
296
347
|
categoryId?: string | null | undefined;
|
|
297
|
-
|
|
298
|
-
|
|
348
|
+
expectedVersion?: number | undefined;
|
|
349
|
+
};
|
|
350
|
+
} & {
|
|
351
|
+
param: {
|
|
352
|
+
id: string;
|
|
353
|
+
};
|
|
354
|
+
};
|
|
355
|
+
output: {
|
|
356
|
+
id: string;
|
|
357
|
+
name: string;
|
|
358
|
+
description: string | null;
|
|
359
|
+
categoryId: string | null;
|
|
360
|
+
ownerId: string;
|
|
361
|
+
isArchived: boolean;
|
|
362
|
+
queryConfig: {
|
|
363
|
+
[x: string]: import("hono/utils/types").JSONValue;
|
|
364
|
+
};
|
|
365
|
+
visualConfig: {
|
|
366
|
+
[x: string]: import("hono/utils/types").JSONValue;
|
|
367
|
+
};
|
|
368
|
+
version: number;
|
|
369
|
+
createdAt: string;
|
|
370
|
+
updatedAt: string;
|
|
371
|
+
category?: {
|
|
372
|
+
id: string;
|
|
373
|
+
name: string;
|
|
374
|
+
description: string | null;
|
|
375
|
+
createdAt: string;
|
|
376
|
+
updatedAt: string;
|
|
377
|
+
} | null | undefined;
|
|
378
|
+
};
|
|
379
|
+
outputFormat: "json";
|
|
380
|
+
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
381
|
+
};
|
|
382
|
+
};
|
|
383
|
+
} & {
|
|
384
|
+
"/:id/query-config": {
|
|
385
|
+
$patch: {
|
|
386
|
+
input: {
|
|
387
|
+
json: {
|
|
388
|
+
queryConfig: {
|
|
389
|
+
table: string;
|
|
390
|
+
dimensions: string[];
|
|
391
|
+
filters: ({
|
|
392
|
+
id: string;
|
|
393
|
+
member: string;
|
|
394
|
+
operator: "equals" | "notEquals";
|
|
395
|
+
value: string | number;
|
|
396
|
+
} | {
|
|
397
|
+
id: string;
|
|
398
|
+
member: string;
|
|
399
|
+
operator: "lt" | "gt" | "gte" | "lte";
|
|
400
|
+
value: number;
|
|
401
|
+
} | {
|
|
402
|
+
id: string;
|
|
403
|
+
member: string;
|
|
404
|
+
operator: "contains";
|
|
405
|
+
values: string[];
|
|
406
|
+
} | {
|
|
407
|
+
id: string;
|
|
408
|
+
member: string;
|
|
409
|
+
operator: "between";
|
|
410
|
+
range: [
|
|
411
|
+
number,
|
|
412
|
+
number
|
|
413
|
+
];
|
|
414
|
+
} | {
|
|
415
|
+
id: string;
|
|
416
|
+
member: string;
|
|
417
|
+
operator: "inDateRange";
|
|
418
|
+
dateRange: [
|
|
419
|
+
string,
|
|
420
|
+
string
|
|
421
|
+
];
|
|
422
|
+
})[];
|
|
423
|
+
timeGrain: "all" | "day" | "week" | "month" | "quarter" | "year";
|
|
424
|
+
distinctOn?: string | undefined;
|
|
425
|
+
timeDimension?: string | undefined;
|
|
426
|
+
};
|
|
427
|
+
expectedVersion?: number | undefined;
|
|
428
|
+
};
|
|
429
|
+
} & {
|
|
430
|
+
param: {
|
|
431
|
+
id: string;
|
|
432
|
+
};
|
|
433
|
+
};
|
|
434
|
+
output: {
|
|
435
|
+
id: string;
|
|
436
|
+
name: string;
|
|
437
|
+
description: string | null;
|
|
438
|
+
categoryId: string | null;
|
|
439
|
+
ownerId: string;
|
|
440
|
+
isArchived: boolean;
|
|
441
|
+
queryConfig: {
|
|
442
|
+
[x: string]: import("hono/utils/types").JSONValue;
|
|
443
|
+
};
|
|
444
|
+
visualConfig: {
|
|
445
|
+
[x: string]: import("hono/utils/types").JSONValue;
|
|
446
|
+
};
|
|
447
|
+
version: number;
|
|
448
|
+
createdAt: string;
|
|
449
|
+
updatedAt: string;
|
|
450
|
+
category?: {
|
|
451
|
+
id: string;
|
|
452
|
+
name: string;
|
|
453
|
+
description: string | null;
|
|
454
|
+
createdAt: string;
|
|
455
|
+
updatedAt: string;
|
|
456
|
+
} | null | undefined;
|
|
457
|
+
};
|
|
458
|
+
outputFormat: "json";
|
|
459
|
+
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
460
|
+
};
|
|
461
|
+
};
|
|
462
|
+
} & {
|
|
463
|
+
"/:id/visual-config": {
|
|
464
|
+
$patch: {
|
|
465
|
+
input: {
|
|
466
|
+
json: {
|
|
467
|
+
visualConfig: {
|
|
468
|
+
chartType: "line" | "bar" | "area" | "pie" | "donut" | "stacked-bar" | "combo" | "radar" | "funnel" | "gauge";
|
|
469
|
+
colors?: string[] | undefined;
|
|
470
|
+
showLegend?: boolean | undefined;
|
|
471
|
+
showGrid?: boolean | undefined;
|
|
472
|
+
xAxis?: {
|
|
473
|
+
label?: string | undefined;
|
|
474
|
+
dataKey?: string | undefined;
|
|
475
|
+
} | undefined;
|
|
476
|
+
yAxis?: {
|
|
477
|
+
label?: string | undefined;
|
|
478
|
+
unit?: string | undefined;
|
|
479
|
+
min?: number | undefined;
|
|
480
|
+
max?: number | undefined;
|
|
481
|
+
} | undefined;
|
|
482
|
+
tooltip?: {
|
|
483
|
+
show?: boolean | undefined;
|
|
484
|
+
} | undefined;
|
|
485
|
+
};
|
|
299
486
|
expectedVersion?: number | undefined;
|
|
300
487
|
};
|
|
301
488
|
} & {
|
|
@@ -419,8 +606,6 @@ declare const app: import("hono/hono-base").HonoBase<{}, ({
|
|
|
419
606
|
};
|
|
420
607
|
};
|
|
421
608
|
}, "/api/metrics"> | import("hono/types").MergeSchemaPath<{
|
|
422
|
-
"*": {};
|
|
423
|
-
} & {
|
|
424
609
|
"/": {
|
|
425
610
|
$post: {
|
|
426
611
|
input: {
|
|
@@ -460,9 +645,9 @@ declare const app: import("hono/hono-base").HonoBase<{}, ({
|
|
|
460
645
|
$get: {
|
|
461
646
|
input: {
|
|
462
647
|
query: {
|
|
463
|
-
ownerId?: string |
|
|
464
|
-
status?:
|
|
465
|
-
search?: string |
|
|
648
|
+
ownerId?: string | undefined;
|
|
649
|
+
status?: "draft" | "published" | "archived" | undefined;
|
|
650
|
+
search?: string | undefined;
|
|
466
651
|
skip?: string | string[] | undefined;
|
|
467
652
|
take?: string | string[] | undefined;
|
|
468
653
|
};
|
|
@@ -864,7 +1049,7 @@ declare const app: import("hono/hono-base").HonoBase<{}, ({
|
|
|
864
1049
|
status: 500;
|
|
865
1050
|
};
|
|
866
1051
|
};
|
|
867
|
-
}, "/api/notifications">, "/">;
|
|
1052
|
+
}, "/api/notifications">, "/", "/health">;
|
|
868
1053
|
export type AppType = typeof app;
|
|
869
1054
|
|
|
870
1055
|
export {
|
package/index.ts
CHANGED
package/package.json
CHANGED
package/publish.sh
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# @stellaris/metrics-shared npm 发布脚本
|
|
3
|
-
# 用法: ./publish.sh [patch|minor|major]
|
|
3
|
+
# 用法: ./metrics-shared/publish.sh [patch|minor|major]
|
|
4
|
+
# 必须在 bff-service 根目录运行!
|
|
4
5
|
|
|
5
6
|
set -e
|
|
6
7
|
|
|
@@ -8,10 +9,11 @@ set -e
|
|
|
8
9
|
RED='\033[0;31m'
|
|
9
10
|
GREEN='\033[0;32m'
|
|
10
11
|
YELLOW='\033[1;33m'
|
|
11
|
-
NC='\033[0m'
|
|
12
|
+
NC='\033[0m'
|
|
12
13
|
|
|
13
14
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
14
|
-
|
|
15
|
+
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
16
|
+
cd "$ROOT_DIR"
|
|
15
17
|
|
|
16
18
|
echo -e "${GREEN}📦 @stellaris/metrics-shared 发布脚本${NC}"
|
|
17
19
|
echo ""
|
|
@@ -28,22 +30,36 @@ echo -e "${GREEN}✓ 已登录为: $(npm whoami)${NC}"
|
|
|
28
30
|
VERSION_TYPE=${1:-patch}
|
|
29
31
|
if [[ ! "$VERSION_TYPE" =~ ^(patch|minor|major)$ ]]; then
|
|
30
32
|
echo -e "${RED}❌ 无效的版本类型: $VERSION_TYPE${NC}"
|
|
31
|
-
echo "用法: ./publish.sh [patch|minor|major]"
|
|
33
|
+
echo "用法: ./metrics-shared/publish.sh [patch|minor|major]"
|
|
32
34
|
exit 1
|
|
33
35
|
fi
|
|
34
36
|
|
|
37
|
+
# Step 1: 生成类型定义
|
|
38
|
+
echo ""
|
|
39
|
+
echo -e "${YELLOW}[1/4] 生成 Prisma 客户端...${NC}"
|
|
40
|
+
pnpm run db:generate
|
|
41
|
+
|
|
42
|
+
echo ""
|
|
43
|
+
echo -e "${YELLOW}[2/4] 生成 API 类型定义 (dts-bundle-generator)...${NC}"
|
|
44
|
+
npx dts-bundle-generator -o metrics-shared/bff-service.d.ts src/index.ts --no-check
|
|
45
|
+
echo -e "${GREEN}✓ 类型已生成到 metrics-shared/bff-service.d.ts${NC}"
|
|
46
|
+
|
|
47
|
+
# Step 2: 进入包目录
|
|
48
|
+
cd "$SCRIPT_DIR"
|
|
49
|
+
|
|
35
50
|
# 显示当前版本
|
|
36
51
|
CURRENT_VERSION=$(node -p "require('./package.json').version")
|
|
52
|
+
echo ""
|
|
37
53
|
echo -e "当前版本: ${YELLOW}$CURRENT_VERSION${NC}"
|
|
38
54
|
|
|
39
|
-
# 更新版本号
|
|
40
|
-
echo -e "${YELLOW}更新版本号 ($VERSION_TYPE)...${NC}"
|
|
55
|
+
# Step 3: 更新版本号
|
|
56
|
+
echo -e "${YELLOW}[3/4] 更新版本号 ($VERSION_TYPE)...${NC}"
|
|
41
57
|
NEW_VERSION=$(npm version $VERSION_TYPE --no-git-tag-version)
|
|
42
58
|
echo -e "新版本: ${GREEN}$NEW_VERSION${NC}"
|
|
43
59
|
|
|
44
|
-
# 发布到 npm
|
|
60
|
+
# Step 4: 发布到 npm
|
|
45
61
|
echo ""
|
|
46
|
-
echo -e "${YELLOW}发布到 npm...${NC}"
|
|
62
|
+
echo -e "${YELLOW}[4/4] 发布到 npm...${NC}"
|
|
47
63
|
npm publish --access public
|
|
48
64
|
|
|
49
65
|
echo ""
|
package/schemas/metric.ts
CHANGED
|
@@ -19,13 +19,54 @@ export const DEFAULT_QUERY_CONFIG: MetricQueryConfig = {
|
|
|
19
19
|
timeDimension: "",
|
|
20
20
|
dimensions: [],
|
|
21
21
|
filters: [],
|
|
22
|
-
timeGrain: "
|
|
22
|
+
timeGrain: "all",
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
export const metricVisualConfigSchema = z.
|
|
25
|
+
export const metricVisualConfigSchema = z.object({
|
|
26
|
+
chartType: z.enum([
|
|
27
|
+
"line",
|
|
28
|
+
"bar",
|
|
29
|
+
"area",
|
|
30
|
+
"pie",
|
|
31
|
+
"donut",
|
|
32
|
+
"stacked-bar",
|
|
33
|
+
"combo",
|
|
34
|
+
"radar",
|
|
35
|
+
"funnel",
|
|
36
|
+
"gauge",
|
|
37
|
+
]),
|
|
38
|
+
colors: z.array(z.string()).optional(),
|
|
39
|
+
showLegend: z.boolean().default(true),
|
|
40
|
+
showGrid: z.boolean().default(true),
|
|
41
|
+
xAxis: z
|
|
42
|
+
.object({
|
|
43
|
+
label: z.string().optional(),
|
|
44
|
+
dataKey: z.string().optional(),
|
|
45
|
+
})
|
|
46
|
+
.optional(),
|
|
47
|
+
yAxis: z
|
|
48
|
+
.object({
|
|
49
|
+
label: z.string().optional(),
|
|
50
|
+
unit: z.string().optional(),
|
|
51
|
+
min: z.number().optional(),
|
|
52
|
+
max: z.number().optional(),
|
|
53
|
+
})
|
|
54
|
+
.optional(),
|
|
55
|
+
tooltip: z
|
|
56
|
+
.object({
|
|
57
|
+
show: z.boolean().default(true),
|
|
58
|
+
})
|
|
59
|
+
.optional(),
|
|
60
|
+
});
|
|
26
61
|
|
|
27
62
|
export type MetricVisualConfig = z.infer<typeof metricVisualConfigSchema>;
|
|
28
63
|
|
|
64
|
+
export const DEFAULT_VISUAL_CONFIG: MetricVisualConfig = {
|
|
65
|
+
chartType: "line",
|
|
66
|
+
showLegend: true,
|
|
67
|
+
showGrid: true,
|
|
68
|
+
};
|
|
69
|
+
|
|
29
70
|
export function parseMetricQueryConfig(
|
|
30
71
|
data: unknown,
|
|
31
72
|
): MetricQueryConfig | null {
|
package/schemas/time.ts
CHANGED
|
@@ -26,6 +26,10 @@ export const timeRangePresetSchema = z.enum([
|
|
|
26
26
|
"last7days",
|
|
27
27
|
"last30days",
|
|
28
28
|
"last90days",
|
|
29
|
+
"last180days",
|
|
30
|
+
"last365days",
|
|
31
|
+
"last730days",
|
|
32
|
+
"last1825days",
|
|
29
33
|
"thisMonth",
|
|
30
34
|
"lastMonth",
|
|
31
35
|
"thisQuarter",
|
|
@@ -50,6 +54,10 @@ export const TIME_RANGE_OPTIONS: {
|
|
|
50
54
|
{ value: "last7days", label: "近 7 天", days: 7 },
|
|
51
55
|
{ value: "last30days", label: "近 30 天", days: 30 },
|
|
52
56
|
{ value: "last90days", label: "近 90 天", days: 90 },
|
|
57
|
+
{ value: "last180days", label: "近半年", days: 180 },
|
|
58
|
+
{ value: "last365days", label: "近 1 年", days: 365 },
|
|
59
|
+
{ value: "last730days", label: "近 2 年", days: 730 },
|
|
60
|
+
{ value: "last1825days", label: "近 5 年", days: 1825 },
|
|
53
61
|
{ value: "thisMonth", label: "本月", days: 30 },
|
|
54
62
|
{ value: "thisQuarter", label: "本季度", days: 90 },
|
|
55
63
|
{ value: "thisYear", label: "本年", days: 365 },
|