@lssm/example.analytics-dashboard 0.0.0-canary-20251217054315 → 0.0.0-canary-20251217060804

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.
@@ -0,0 +1,177 @@
1
+ import * as _lssm_lib_schema131 from "@lssm/lib.schema";
2
+ import * as _lssm_lib_contracts3 from "@lssm/lib.contracts";
3
+
4
+ //#region src/query/query.contracts.d.ts
5
+ /**
6
+ * Create a data query.
7
+ */
8
+ declare const CreateQueryContract: _lssm_lib_contracts3.ContractSpec<_lssm_lib_schema131.SchemaModel<{
9
+ name: {
10
+ type: _lssm_lib_schema131.FieldType<string, string>;
11
+ isOptional: false;
12
+ };
13
+ description: {
14
+ type: _lssm_lib_schema131.FieldType<string, string>;
15
+ isOptional: true;
16
+ };
17
+ type: {
18
+ type: _lssm_lib_schema131.EnumType<[string, string, string, string]>;
19
+ isOptional: false;
20
+ };
21
+ definition: {
22
+ type: _lssm_lib_schema131.FieldType<unknown, unknown>;
23
+ isOptional: false;
24
+ };
25
+ sql: {
26
+ type: _lssm_lib_schema131.FieldType<string, string>;
27
+ isOptional: true;
28
+ };
29
+ metricIds: {
30
+ type: _lssm_lib_schema131.FieldType<string, string>;
31
+ isArray: true;
32
+ isOptional: true;
33
+ };
34
+ cacheTtlSeconds: {
35
+ type: _lssm_lib_schema131.FieldType<number, number>;
36
+ isOptional: true;
37
+ };
38
+ isShared: {
39
+ type: _lssm_lib_schema131.FieldType<boolean, boolean>;
40
+ isOptional: true;
41
+ };
42
+ }>, _lssm_lib_schema131.SchemaModel<{
43
+ id: {
44
+ type: _lssm_lib_schema131.FieldType<string, string>;
45
+ isOptional: false;
46
+ };
47
+ name: {
48
+ type: _lssm_lib_schema131.FieldType<string, string>;
49
+ isOptional: false;
50
+ };
51
+ description: {
52
+ type: _lssm_lib_schema131.FieldType<string, string>;
53
+ isOptional: true;
54
+ };
55
+ type: {
56
+ type: _lssm_lib_schema131.EnumType<[string, string, string, string]>;
57
+ isOptional: false;
58
+ };
59
+ definition: {
60
+ type: _lssm_lib_schema131.FieldType<unknown, unknown>;
61
+ isOptional: false;
62
+ };
63
+ sql: {
64
+ type: _lssm_lib_schema131.FieldType<string, string>;
65
+ isOptional: true;
66
+ };
67
+ cacheTtlSeconds: {
68
+ type: _lssm_lib_schema131.FieldType<number, number>;
69
+ isOptional: false;
70
+ };
71
+ isShared: {
72
+ type: _lssm_lib_schema131.FieldType<boolean, boolean>;
73
+ isOptional: false;
74
+ };
75
+ createdAt: {
76
+ type: _lssm_lib_schema131.FieldType<Date, string>;
77
+ isOptional: false;
78
+ };
79
+ }>, {
80
+ name: string;
81
+ version: number;
82
+ when: string;
83
+ payload: _lssm_lib_schema131.SchemaModel<{
84
+ id: {
85
+ type: _lssm_lib_schema131.FieldType<string, string>;
86
+ isOptional: false;
87
+ };
88
+ name: {
89
+ type: _lssm_lib_schema131.FieldType<string, string>;
90
+ isOptional: false;
91
+ };
92
+ description: {
93
+ type: _lssm_lib_schema131.FieldType<string, string>;
94
+ isOptional: true;
95
+ };
96
+ type: {
97
+ type: _lssm_lib_schema131.EnumType<[string, string, string, string]>;
98
+ isOptional: false;
99
+ };
100
+ definition: {
101
+ type: _lssm_lib_schema131.FieldType<unknown, unknown>;
102
+ isOptional: false;
103
+ };
104
+ sql: {
105
+ type: _lssm_lib_schema131.FieldType<string, string>;
106
+ isOptional: true;
107
+ };
108
+ cacheTtlSeconds: {
109
+ type: _lssm_lib_schema131.FieldType<number, number>;
110
+ isOptional: false;
111
+ };
112
+ isShared: {
113
+ type: _lssm_lib_schema131.FieldType<boolean, boolean>;
114
+ isOptional: false;
115
+ };
116
+ createdAt: {
117
+ type: _lssm_lib_schema131.FieldType<Date, string>;
118
+ isOptional: false;
119
+ };
120
+ }>;
121
+ }[]>;
122
+ /**
123
+ * Execute a data query.
124
+ */
125
+ declare const ExecuteQueryContract: _lssm_lib_contracts3.ContractSpec<_lssm_lib_schema131.SchemaModel<{
126
+ queryId: {
127
+ type: _lssm_lib_schema131.FieldType<string, string>;
128
+ isOptional: false;
129
+ };
130
+ parameters: {
131
+ type: _lssm_lib_schema131.FieldType<unknown, unknown>;
132
+ isOptional: true;
133
+ };
134
+ dateRange: {
135
+ type: _lssm_lib_schema131.FieldType<unknown, unknown>;
136
+ isOptional: true;
137
+ };
138
+ filters: {
139
+ type: _lssm_lib_schema131.FieldType<unknown, unknown>;
140
+ isOptional: true;
141
+ };
142
+ forceRefresh: {
143
+ type: _lssm_lib_schema131.FieldType<boolean, boolean>;
144
+ isOptional: true;
145
+ };
146
+ }>, _lssm_lib_schema131.SchemaModel<{
147
+ queryId: {
148
+ type: _lssm_lib_schema131.FieldType<string, string>;
149
+ isOptional: false;
150
+ };
151
+ data: {
152
+ type: _lssm_lib_schema131.FieldType<unknown, unknown>;
153
+ isOptional: false;
154
+ };
155
+ columns: {
156
+ type: _lssm_lib_schema131.FieldType<unknown, unknown>;
157
+ isOptional: false;
158
+ };
159
+ rowCount: {
160
+ type: _lssm_lib_schema131.FieldType<number, number>;
161
+ isOptional: false;
162
+ };
163
+ executionTimeMs: {
164
+ type: _lssm_lib_schema131.FieldType<number, number>;
165
+ isOptional: false;
166
+ };
167
+ cachedAt: {
168
+ type: _lssm_lib_schema131.FieldType<Date, string>;
169
+ isOptional: true;
170
+ };
171
+ error: {
172
+ type: _lssm_lib_schema131.FieldType<string, string>;
173
+ isOptional: true;
174
+ };
175
+ }>, undefined>;
176
+ //#endregion
177
+ export { CreateQueryContract, ExecuteQueryContract };
@@ -0,0 +1,9 @@
1
+ import * as _lssm_lib_schema207 from "@lssm/lib.schema";
2
+
3
+ //#region src/query/query.enum.d.ts
4
+ /**
5
+ * Query type enum.
6
+ */
7
+ declare const QueryTypeEnum: _lssm_lib_schema207.EnumType<[string, string, string, string]>;
8
+ //#endregion
9
+ export { QueryTypeEnum };
@@ -0,0 +1,7 @@
1
+ import { PresentationDescriptorV2 } from "@lssm/lib.contracts";
2
+
3
+ //#region src/query/query.presentation.d.ts
4
+ declare const QueriesListPresentation: PresentationDescriptorV2;
5
+ declare const QueryBuilderPresentation: PresentationDescriptorV2;
6
+ //#endregion
7
+ export { QueriesListPresentation, QueryBuilderPresentation };
@@ -0,0 +1,142 @@
1
+ import * as _lssm_lib_schema174 from "@lssm/lib.schema";
2
+
3
+ //#region src/query/query.schema.d.ts
4
+ /**
5
+ * A data query.
6
+ */
7
+ declare const QueryModel: _lssm_lib_schema174.SchemaModel<{
8
+ id: {
9
+ type: _lssm_lib_schema174.FieldType<string, string>;
10
+ isOptional: false;
11
+ };
12
+ name: {
13
+ type: _lssm_lib_schema174.FieldType<string, string>;
14
+ isOptional: false;
15
+ };
16
+ description: {
17
+ type: _lssm_lib_schema174.FieldType<string, string>;
18
+ isOptional: true;
19
+ };
20
+ type: {
21
+ type: _lssm_lib_schema174.EnumType<[string, string, string, string]>;
22
+ isOptional: false;
23
+ };
24
+ definition: {
25
+ type: _lssm_lib_schema174.FieldType<unknown, unknown>;
26
+ isOptional: false;
27
+ };
28
+ sql: {
29
+ type: _lssm_lib_schema174.FieldType<string, string>;
30
+ isOptional: true;
31
+ };
32
+ cacheTtlSeconds: {
33
+ type: _lssm_lib_schema174.FieldType<number, number>;
34
+ isOptional: false;
35
+ };
36
+ isShared: {
37
+ type: _lssm_lib_schema174.FieldType<boolean, boolean>;
38
+ isOptional: false;
39
+ };
40
+ createdAt: {
41
+ type: _lssm_lib_schema174.FieldType<Date, string>;
42
+ isOptional: false;
43
+ };
44
+ }>;
45
+ /**
46
+ * Query execution result.
47
+ */
48
+ declare const QueryResultModel: _lssm_lib_schema174.SchemaModel<{
49
+ queryId: {
50
+ type: _lssm_lib_schema174.FieldType<string, string>;
51
+ isOptional: false;
52
+ };
53
+ data: {
54
+ type: _lssm_lib_schema174.FieldType<unknown, unknown>;
55
+ isOptional: false;
56
+ };
57
+ columns: {
58
+ type: _lssm_lib_schema174.FieldType<unknown, unknown>;
59
+ isOptional: false;
60
+ };
61
+ rowCount: {
62
+ type: _lssm_lib_schema174.FieldType<number, number>;
63
+ isOptional: false;
64
+ };
65
+ executionTimeMs: {
66
+ type: _lssm_lib_schema174.FieldType<number, number>;
67
+ isOptional: false;
68
+ };
69
+ cachedAt: {
70
+ type: _lssm_lib_schema174.FieldType<Date, string>;
71
+ isOptional: true;
72
+ };
73
+ error: {
74
+ type: _lssm_lib_schema174.FieldType<string, string>;
75
+ isOptional: true;
76
+ };
77
+ }>;
78
+ /**
79
+ * Input for creating a query.
80
+ */
81
+ declare const CreateQueryInputModel: _lssm_lib_schema174.SchemaModel<{
82
+ name: {
83
+ type: _lssm_lib_schema174.FieldType<string, string>;
84
+ isOptional: false;
85
+ };
86
+ description: {
87
+ type: _lssm_lib_schema174.FieldType<string, string>;
88
+ isOptional: true;
89
+ };
90
+ type: {
91
+ type: _lssm_lib_schema174.EnumType<[string, string, string, string]>;
92
+ isOptional: false;
93
+ };
94
+ definition: {
95
+ type: _lssm_lib_schema174.FieldType<unknown, unknown>;
96
+ isOptional: false;
97
+ };
98
+ sql: {
99
+ type: _lssm_lib_schema174.FieldType<string, string>;
100
+ isOptional: true;
101
+ };
102
+ metricIds: {
103
+ type: _lssm_lib_schema174.FieldType<string, string>;
104
+ isArray: true;
105
+ isOptional: true;
106
+ };
107
+ cacheTtlSeconds: {
108
+ type: _lssm_lib_schema174.FieldType<number, number>;
109
+ isOptional: true;
110
+ };
111
+ isShared: {
112
+ type: _lssm_lib_schema174.FieldType<boolean, boolean>;
113
+ isOptional: true;
114
+ };
115
+ }>;
116
+ /**
117
+ * Input for executing a query.
118
+ */
119
+ declare const ExecuteQueryInputModel: _lssm_lib_schema174.SchemaModel<{
120
+ queryId: {
121
+ type: _lssm_lib_schema174.FieldType<string, string>;
122
+ isOptional: false;
123
+ };
124
+ parameters: {
125
+ type: _lssm_lib_schema174.FieldType<unknown, unknown>;
126
+ isOptional: true;
127
+ };
128
+ dateRange: {
129
+ type: _lssm_lib_schema174.FieldType<unknown, unknown>;
130
+ isOptional: true;
131
+ };
132
+ filters: {
133
+ type: _lssm_lib_schema174.FieldType<unknown, unknown>;
134
+ isOptional: true;
135
+ };
136
+ forceRefresh: {
137
+ type: _lssm_lib_schema174.FieldType<boolean, boolean>;
138
+ isOptional: true;
139
+ };
140
+ }>;
141
+ //#endregion
142
+ export { CreateQueryInputModel, ExecuteQueryInputModel, QueryModel, QueryResultModel };
@@ -0,0 +1,105 @@
1
+ //#region src/query-engine/index.d.ts
2
+ /**
3
+ * Analytics Query Engine
4
+ *
5
+ * Provides query execution and caching for analytics dashboards.
6
+ */
7
+ interface QueryDefinition {
8
+ type: 'SQL' | 'METRIC' | 'AGGREGATION' | 'CUSTOM';
9
+ sql?: string;
10
+ metricIds?: string[];
11
+ aggregation?: AggregationDefinition;
12
+ custom?: CustomQueryDefinition;
13
+ }
14
+ interface AggregationDefinition {
15
+ source: string;
16
+ measures: MeasureDefinition[];
17
+ dimensions: DimensionDefinition[];
18
+ filters?: FilterDefinition[];
19
+ orderBy?: OrderByDefinition[];
20
+ limit?: number;
21
+ }
22
+ interface MeasureDefinition {
23
+ name: string;
24
+ field: string;
25
+ aggregation: 'COUNT' | 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'COUNT_DISTINCT';
26
+ format?: string;
27
+ }
28
+ interface DimensionDefinition {
29
+ name: string;
30
+ field: string;
31
+ type?: 'TIME' | 'STRING' | 'NUMBER';
32
+ granularity?: 'HOUR' | 'DAY' | 'WEEK' | 'MONTH' | 'YEAR';
33
+ }
34
+ interface FilterDefinition {
35
+ field: string;
36
+ operator: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'nin' | 'contains' | 'between';
37
+ value: unknown;
38
+ }
39
+ interface OrderByDefinition {
40
+ field: string;
41
+ direction: 'ASC' | 'DESC';
42
+ }
43
+ interface CustomQueryDefinition {
44
+ handler: string;
45
+ parameters: Record<string, unknown>;
46
+ }
47
+ interface QueryParameters {
48
+ dateRange?: {
49
+ start: Date;
50
+ end: Date;
51
+ granularity?: string;
52
+ };
53
+ filters?: FilterDefinition[];
54
+ parameters?: Record<string, unknown>;
55
+ }
56
+ interface QueryResult {
57
+ data: Record<string, unknown>[];
58
+ columns: ColumnDefinition[];
59
+ rowCount: number;
60
+ executionTimeMs: number;
61
+ cached: boolean;
62
+ cachedAt?: Date;
63
+ error?: string;
64
+ }
65
+ interface ColumnDefinition {
66
+ name: string;
67
+ type: 'STRING' | 'NUMBER' | 'DATE' | 'BOOLEAN';
68
+ label?: string;
69
+ format?: string;
70
+ }
71
+ interface IQueryEngine {
72
+ execute(definition: QueryDefinition, params: QueryParameters): Promise<QueryResult>;
73
+ validateQuery(definition: QueryDefinition): {
74
+ valid: boolean;
75
+ errors: string[];
76
+ };
77
+ }
78
+ interface IQueryCache {
79
+ get(key: string): Promise<QueryResult | null>;
80
+ set(key: string, result: QueryResult, ttlSeconds: number): Promise<void>;
81
+ invalidate(pattern: string): Promise<void>;
82
+ }
83
+ declare class InMemoryQueryCache implements IQueryCache {
84
+ private cache;
85
+ get(key: string): Promise<QueryResult | null>;
86
+ set(key: string, result: QueryResult, ttlSeconds: number): Promise<void>;
87
+ invalidate(pattern: string): Promise<void>;
88
+ }
89
+ declare class BasicQueryEngine implements IQueryEngine {
90
+ private cache;
91
+ constructor(cache?: IQueryCache);
92
+ execute(definition: QueryDefinition, params: QueryParameters): Promise<QueryResult>;
93
+ validateQuery(definition: QueryDefinition): {
94
+ valid: boolean;
95
+ errors: string[];
96
+ };
97
+ private buildCacheKey;
98
+ private executeAggregation;
99
+ private executeMetric;
100
+ private executeSql;
101
+ private generateMockData;
102
+ }
103
+ declare function createQueryEngine(cache?: IQueryCache): IQueryEngine;
104
+ //#endregion
105
+ export { AggregationDefinition, BasicQueryEngine, ColumnDefinition, CustomQueryDefinition, DimensionDefinition, FilterDefinition, IQueryCache, IQueryEngine, InMemoryQueryCache, MeasureDefinition, OrderByDefinition, QueryDefinition, QueryParameters, QueryResult, createQueryEngine };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lssm/example.analytics-dashboard",
3
- "version": "0.0.0-canary-20251217054315",
3
+ "version": "0.0.0-canary-20251217060804",
4
4
  "description": "Analytics Dashboard example with widgets and query engine for ContractSpec",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -18,38 +18,38 @@
18
18
  "lint:check": "eslint src"
19
19
  },
20
20
  "dependencies": {
21
- "@lssm/lib.schema": "0.0.0-canary-20251217054315",
22
- "@lssm/lib.contracts": "0.0.0-canary-20251217054315",
23
- "@lssm/lib.bus": "0.0.0-canary-20251217054315",
24
- "@lssm/lib.identity-rbac": "0.0.0-canary-20251217054315",
25
- "@lssm/lib.metering": "0.0.0-canary-20251217054315",
26
- "@lssm/lib.jobs": "0.0.0-canary-20251217054315",
27
- "@lssm/module.audit-trail": "0.0.0-canary-20251217054315",
21
+ "@lssm/lib.schema": "0.0.0-canary-20251217060804",
22
+ "@lssm/lib.contracts": "0.0.0-canary-20251217060804",
23
+ "@lssm/lib.bus": "0.0.0-canary-20251217060804",
24
+ "@lssm/lib.identity-rbac": "0.0.0-canary-20251217060804",
25
+ "@lssm/lib.metering": "0.0.0-canary-20251217060804",
26
+ "@lssm/lib.jobs": "0.0.0-canary-20251217060804",
27
+ "@lssm/module.audit-trail": "0.0.0-canary-20251217060804",
28
28
  "zod": "^4.1.13"
29
29
  },
30
30
  "devDependencies": {
31
- "@lssm/tool.typescript": "0.0.0-canary-20251217054315",
32
- "@lssm/tool.tsdown": "0.0.0-canary-20251217054315",
31
+ "@lssm/tool.typescript": "0.0.0-canary-20251217060804",
32
+ "@lssm/tool.tsdown": "0.0.0-canary-20251217060804",
33
33
  "typescript": "^5.9.3"
34
34
  },
35
35
  "exports": {
36
- ".": "./src/index.ts",
37
- "./dashboard": "./src/dashboard/index.ts",
38
- "./dashboard.feature": "./src/dashboard.feature.ts",
39
- "./dashboard/dashboard.contracts": "./src/dashboard/dashboard.contracts.ts",
40
- "./dashboard/dashboard.enum": "./src/dashboard/dashboard.enum.ts",
41
- "./dashboard/dashboard.presentation": "./src/dashboard/dashboard.presentation.ts",
42
- "./dashboard/dashboard.schema": "./src/dashboard/dashboard.schema.ts",
43
- "./docs": "./src/docs/index.ts",
44
- "./docs/analytics-dashboard.docblock": "./src/docs/analytics-dashboard.docblock.ts",
45
- "./events": "./src/events.ts",
46
- "./example": "./src/example.ts",
47
- "./query": "./src/query/index.ts",
48
- "./query-engine": "./src/query-engine/index.ts",
49
- "./query/query.contracts": "./src/query/query.contracts.ts",
50
- "./query/query.enum": "./src/query/query.enum.ts",
51
- "./query/query.presentation": "./src/query/query.presentation.ts",
52
- "./query/query.schema": "./src/query/query.schema.ts",
36
+ ".": "./dist/index.js",
37
+ "./dashboard": "./dist/dashboard/index.js",
38
+ "./dashboard.feature": "./dist/dashboard.feature.js",
39
+ "./dashboard/dashboard.contracts": "./dist/dashboard/dashboard.contracts.js",
40
+ "./dashboard/dashboard.enum": "./dist/dashboard/dashboard.enum.js",
41
+ "./dashboard/dashboard.presentation": "./dist/dashboard/dashboard.presentation.js",
42
+ "./dashboard/dashboard.schema": "./dist/dashboard/dashboard.schema.js",
43
+ "./docs": "./dist/docs/index.js",
44
+ "./docs/analytics-dashboard.docblock": "./dist/docs/analytics-dashboard.docblock.js",
45
+ "./events": "./dist/events.js",
46
+ "./example": "./dist/example.js",
47
+ "./query": "./dist/query/index.js",
48
+ "./query-engine": "./dist/query-engine/index.js",
49
+ "./query/query.contracts": "./dist/query/query.contracts.js",
50
+ "./query/query.enum": "./dist/query/query.enum.js",
51
+ "./query/query.presentation": "./dist/query/query.presentation.js",
52
+ "./query/query.schema": "./dist/query/query.schema.js",
53
53
  "./*": "./*"
54
54
  },
55
55
  "module": "./dist/index.js",