@musubix/knowledge 3.0.0
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 +162 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +275 -0
- package/dist/index.js.map +1 -0
- package/package.json +44 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @musubix/knowledge - Git-Native Knowledge Store
|
|
3
|
+
*
|
|
4
|
+
* File-based knowledge graph management for MUSUBIX v3.0
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Entity types in the knowledge graph
|
|
10
|
+
*/
|
|
11
|
+
export type EntityType = 'requirement' | 'design' | 'task' | 'code' | 'decision' | 'pattern' | 'constraint';
|
|
12
|
+
/**
|
|
13
|
+
* Relation types between entities
|
|
14
|
+
*/
|
|
15
|
+
export type RelationType = 'implements' | 'depends_on' | 'traces_to' | 'related_to' | 'derives_from' | 'conflicts_with';
|
|
16
|
+
/**
|
|
17
|
+
* Entity in the knowledge graph
|
|
18
|
+
*/
|
|
19
|
+
export interface Entity {
|
|
20
|
+
/** Unique identifier (e.g., "REQ-001", "DES-001") */
|
|
21
|
+
id: string;
|
|
22
|
+
/** Entity type */
|
|
23
|
+
type: EntityType;
|
|
24
|
+
/** Display name */
|
|
25
|
+
name: string;
|
|
26
|
+
/** Optional description */
|
|
27
|
+
description?: string;
|
|
28
|
+
/** Additional properties */
|
|
29
|
+
properties: Record<string, unknown>;
|
|
30
|
+
/** Tags for categorization */
|
|
31
|
+
tags: string[];
|
|
32
|
+
/** Creation timestamp (ISO 8601) */
|
|
33
|
+
createdAt: string;
|
|
34
|
+
/** Last update timestamp (ISO 8601) */
|
|
35
|
+
updatedAt: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Relation between entities
|
|
39
|
+
*/
|
|
40
|
+
export interface Relation {
|
|
41
|
+
/** Unique identifier */
|
|
42
|
+
id: string;
|
|
43
|
+
/** Source entity ID */
|
|
44
|
+
source: string;
|
|
45
|
+
/** Target entity ID */
|
|
46
|
+
target: string;
|
|
47
|
+
/** Relation type */
|
|
48
|
+
type: RelationType;
|
|
49
|
+
/** Additional properties */
|
|
50
|
+
properties?: Record<string, unknown>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Knowledge graph structure
|
|
54
|
+
*/
|
|
55
|
+
export interface KnowledgeGraph {
|
|
56
|
+
/** Schema version */
|
|
57
|
+
version: '1.0.0';
|
|
58
|
+
/** Metadata */
|
|
59
|
+
metadata: {
|
|
60
|
+
lastModified: string;
|
|
61
|
+
entityCount: number;
|
|
62
|
+
relationCount: number;
|
|
63
|
+
};
|
|
64
|
+
/** Entities by ID */
|
|
65
|
+
entities: Record<string, Entity>;
|
|
66
|
+
/** Relations */
|
|
67
|
+
relations: Relation[];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Filter for querying entities
|
|
71
|
+
*/
|
|
72
|
+
export interface QueryFilter {
|
|
73
|
+
/** Filter by entity type */
|
|
74
|
+
type?: EntityType | EntityType[];
|
|
75
|
+
/** Filter by tags (AND) */
|
|
76
|
+
tags?: string[];
|
|
77
|
+
/** Filter by property values */
|
|
78
|
+
properties?: Record<string, unknown>;
|
|
79
|
+
/** Text search in name/description */
|
|
80
|
+
text?: string;
|
|
81
|
+
/** Maximum results */
|
|
82
|
+
limit?: number;
|
|
83
|
+
/** Offset for pagination */
|
|
84
|
+
offset?: number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Options for search
|
|
88
|
+
*/
|
|
89
|
+
export interface SearchOptions {
|
|
90
|
+
/** Fields to search */
|
|
91
|
+
fields?: ('name' | 'description' | 'tags')[];
|
|
92
|
+
/** Case sensitive search */
|
|
93
|
+
caseSensitive?: boolean;
|
|
94
|
+
/** Maximum results */
|
|
95
|
+
limit?: number;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Options for graph traversal
|
|
99
|
+
*/
|
|
100
|
+
export interface TraverseOptions {
|
|
101
|
+
/** Maximum depth */
|
|
102
|
+
depth?: number;
|
|
103
|
+
/** Relation types to follow */
|
|
104
|
+
relationTypes?: RelationType[];
|
|
105
|
+
/** Direction */
|
|
106
|
+
direction?: 'out' | 'in' | 'both';
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Knowledge Store interface
|
|
110
|
+
*/
|
|
111
|
+
export interface KnowledgeStore {
|
|
112
|
+
getEntity(id: string): Promise<Entity | undefined>;
|
|
113
|
+
putEntity(entity: Entity): Promise<void>;
|
|
114
|
+
deleteEntity(id: string): Promise<boolean>;
|
|
115
|
+
addRelation(relation: Relation): Promise<void>;
|
|
116
|
+
removeRelation(id: string): Promise<boolean>;
|
|
117
|
+
getRelations(entityId: string, direction?: 'in' | 'out' | 'both'): Promise<Relation[]>;
|
|
118
|
+
query(filter: QueryFilter): Promise<Entity[]>;
|
|
119
|
+
search(text: string, options?: SearchOptions): Promise<Entity[]>;
|
|
120
|
+
getSubgraph(rootId: string, depth: number): Promise<KnowledgeGraph>;
|
|
121
|
+
traverse(startId: string, options?: TraverseOptions): Promise<Entity[]>;
|
|
122
|
+
save(): Promise<void>;
|
|
123
|
+
load(): Promise<void>;
|
|
124
|
+
getStats(): {
|
|
125
|
+
entityCount: number;
|
|
126
|
+
relationCount: number;
|
|
127
|
+
types: Record<EntityType, number>;
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create a new knowledge store
|
|
132
|
+
*/
|
|
133
|
+
export declare function createKnowledgeStore(basePath: string): KnowledgeStore;
|
|
134
|
+
/**
|
|
135
|
+
* File-based knowledge store implementation
|
|
136
|
+
*/
|
|
137
|
+
export declare class FileKnowledgeStore implements KnowledgeStore {
|
|
138
|
+
private basePath;
|
|
139
|
+
private graph;
|
|
140
|
+
private loaded;
|
|
141
|
+
constructor(basePath: string);
|
|
142
|
+
private createEmptyGraph;
|
|
143
|
+
private getGraphPath;
|
|
144
|
+
load(): Promise<void>;
|
|
145
|
+
save(): Promise<void>;
|
|
146
|
+
getEntity(id: string): Promise<Entity | undefined>;
|
|
147
|
+
putEntity(entity: Entity): Promise<void>;
|
|
148
|
+
deleteEntity(id: string): Promise<boolean>;
|
|
149
|
+
addRelation(relation: Relation): Promise<void>;
|
|
150
|
+
removeRelation(id: string): Promise<boolean>;
|
|
151
|
+
getRelations(entityId: string, direction?: 'in' | 'out' | 'both'): Promise<Relation[]>;
|
|
152
|
+
query(filter: QueryFilter): Promise<Entity[]>;
|
|
153
|
+
search(text: string, options?: SearchOptions): Promise<Entity[]>;
|
|
154
|
+
getSubgraph(rootId: string, depth: number): Promise<KnowledgeGraph>;
|
|
155
|
+
traverse(startId: string, options?: TraverseOptions): Promise<Entity[]>;
|
|
156
|
+
getStats(): {
|
|
157
|
+
entityCount: number;
|
|
158
|
+
relationCount: number;
|
|
159
|
+
types: Record<EntityType, number>;
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @musubix/knowledge - Git-Native Knowledge Store
|
|
3
|
+
*
|
|
4
|
+
* File-based knowledge graph management for MUSUBIX v3.0
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
// ============================================================
|
|
9
|
+
// Factory Function
|
|
10
|
+
// ============================================================
|
|
11
|
+
/**
|
|
12
|
+
* Create a new knowledge store
|
|
13
|
+
*/
|
|
14
|
+
export function createKnowledgeStore(basePath) {
|
|
15
|
+
return new FileKnowledgeStore(basePath);
|
|
16
|
+
}
|
|
17
|
+
// ============================================================
|
|
18
|
+
// Implementation
|
|
19
|
+
// ============================================================
|
|
20
|
+
import * as fs from 'node:fs/promises';
|
|
21
|
+
import * as path from 'node:path';
|
|
22
|
+
/**
|
|
23
|
+
* File-based knowledge store implementation
|
|
24
|
+
*/
|
|
25
|
+
export class FileKnowledgeStore {
|
|
26
|
+
basePath;
|
|
27
|
+
graph;
|
|
28
|
+
loaded = false;
|
|
29
|
+
constructor(basePath) {
|
|
30
|
+
this.basePath = basePath;
|
|
31
|
+
this.graph = this.createEmptyGraph();
|
|
32
|
+
}
|
|
33
|
+
createEmptyGraph() {
|
|
34
|
+
return {
|
|
35
|
+
version: '1.0.0',
|
|
36
|
+
metadata: {
|
|
37
|
+
lastModified: new Date().toISOString(),
|
|
38
|
+
entityCount: 0,
|
|
39
|
+
relationCount: 0,
|
|
40
|
+
},
|
|
41
|
+
entities: {},
|
|
42
|
+
relations: [],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
getGraphPath() {
|
|
46
|
+
return path.join(this.basePath, 'graph.json');
|
|
47
|
+
}
|
|
48
|
+
async load() {
|
|
49
|
+
try {
|
|
50
|
+
const content = await fs.readFile(this.getGraphPath(), 'utf-8');
|
|
51
|
+
this.graph = JSON.parse(content);
|
|
52
|
+
this.loaded = true;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
if (error.code === 'ENOENT') {
|
|
56
|
+
this.graph = this.createEmptyGraph();
|
|
57
|
+
this.loaded = true;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async save() {
|
|
65
|
+
await fs.mkdir(this.basePath, { recursive: true });
|
|
66
|
+
this.graph.metadata.lastModified = new Date().toISOString();
|
|
67
|
+
this.graph.metadata.entityCount = Object.keys(this.graph.entities).length;
|
|
68
|
+
this.graph.metadata.relationCount = this.graph.relations.length;
|
|
69
|
+
await fs.writeFile(this.getGraphPath(), JSON.stringify(this.graph, null, 2), 'utf-8');
|
|
70
|
+
}
|
|
71
|
+
async getEntity(id) {
|
|
72
|
+
if (!this.loaded)
|
|
73
|
+
await this.load();
|
|
74
|
+
return this.graph.entities[id];
|
|
75
|
+
}
|
|
76
|
+
async putEntity(entity) {
|
|
77
|
+
if (!this.loaded)
|
|
78
|
+
await this.load();
|
|
79
|
+
const now = new Date().toISOString();
|
|
80
|
+
const existing = this.graph.entities[entity.id];
|
|
81
|
+
this.graph.entities[entity.id] = {
|
|
82
|
+
...entity,
|
|
83
|
+
createdAt: existing?.createdAt ?? now,
|
|
84
|
+
updatedAt: now,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
async deleteEntity(id) {
|
|
88
|
+
if (!this.loaded)
|
|
89
|
+
await this.load();
|
|
90
|
+
if (!this.graph.entities[id]) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
delete this.graph.entities[id];
|
|
94
|
+
// Remove related relations
|
|
95
|
+
this.graph.relations = this.graph.relations.filter(r => r.source !== id && r.target !== id);
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
async addRelation(relation) {
|
|
99
|
+
if (!this.loaded)
|
|
100
|
+
await this.load();
|
|
101
|
+
// Validate entities exist
|
|
102
|
+
if (!this.graph.entities[relation.source]) {
|
|
103
|
+
throw new Error(`Source entity not found: ${relation.source}`);
|
|
104
|
+
}
|
|
105
|
+
if (!this.graph.entities[relation.target]) {
|
|
106
|
+
throw new Error(`Target entity not found: ${relation.target}`);
|
|
107
|
+
}
|
|
108
|
+
// Check for duplicates
|
|
109
|
+
const exists = this.graph.relations.some(r => r.source === relation.source &&
|
|
110
|
+
r.target === relation.target &&
|
|
111
|
+
r.type === relation.type);
|
|
112
|
+
if (!exists) {
|
|
113
|
+
this.graph.relations.push(relation);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async removeRelation(id) {
|
|
117
|
+
if (!this.loaded)
|
|
118
|
+
await this.load();
|
|
119
|
+
const index = this.graph.relations.findIndex(r => r.id === id);
|
|
120
|
+
if (index === -1)
|
|
121
|
+
return false;
|
|
122
|
+
this.graph.relations.splice(index, 1);
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
async getRelations(entityId, direction = 'both') {
|
|
126
|
+
if (!this.loaded)
|
|
127
|
+
await this.load();
|
|
128
|
+
return this.graph.relations.filter(r => {
|
|
129
|
+
if (direction === 'out')
|
|
130
|
+
return r.source === entityId;
|
|
131
|
+
if (direction === 'in')
|
|
132
|
+
return r.target === entityId;
|
|
133
|
+
return r.source === entityId || r.target === entityId;
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
async query(filter) {
|
|
137
|
+
if (!this.loaded)
|
|
138
|
+
await this.load();
|
|
139
|
+
let results = Object.values(this.graph.entities);
|
|
140
|
+
// Filter by type
|
|
141
|
+
if (filter.type) {
|
|
142
|
+
const types = Array.isArray(filter.type) ? filter.type : [filter.type];
|
|
143
|
+
results = results.filter(e => types.includes(e.type));
|
|
144
|
+
}
|
|
145
|
+
// Filter by tags
|
|
146
|
+
if (filter.tags && filter.tags.length > 0) {
|
|
147
|
+
results = results.filter(e => filter.tags.every(tag => e.tags.includes(tag)));
|
|
148
|
+
}
|
|
149
|
+
// Filter by text
|
|
150
|
+
if (filter.text) {
|
|
151
|
+
const searchText = filter.text.toLowerCase();
|
|
152
|
+
results = results.filter(e => e.name.toLowerCase().includes(searchText) ||
|
|
153
|
+
e.description?.toLowerCase().includes(searchText));
|
|
154
|
+
}
|
|
155
|
+
// Apply pagination
|
|
156
|
+
const offset = filter.offset ?? 0;
|
|
157
|
+
const limit = filter.limit ?? results.length;
|
|
158
|
+
return results.slice(offset, offset + limit);
|
|
159
|
+
}
|
|
160
|
+
async search(text, options) {
|
|
161
|
+
if (!this.loaded)
|
|
162
|
+
await this.load();
|
|
163
|
+
const searchText = options?.caseSensitive ? text : text.toLowerCase();
|
|
164
|
+
const fields = options?.fields ?? ['name', 'description', 'tags'];
|
|
165
|
+
let results = Object.values(this.graph.entities).filter(e => {
|
|
166
|
+
for (const field of fields) {
|
|
167
|
+
if (field === 'name') {
|
|
168
|
+
const value = options?.caseSensitive ? e.name : e.name.toLowerCase();
|
|
169
|
+
if (value.includes(searchText))
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
if (field === 'description' && e.description) {
|
|
173
|
+
const value = options?.caseSensitive ? e.description : e.description.toLowerCase();
|
|
174
|
+
if (value.includes(searchText))
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
if (field === 'tags') {
|
|
178
|
+
const matched = e.tags.some(tag => {
|
|
179
|
+
const value = options?.caseSensitive ? tag : tag.toLowerCase();
|
|
180
|
+
return value.includes(searchText);
|
|
181
|
+
});
|
|
182
|
+
if (matched)
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return false;
|
|
187
|
+
});
|
|
188
|
+
if (options?.limit) {
|
|
189
|
+
results = results.slice(0, options.limit);
|
|
190
|
+
}
|
|
191
|
+
return results;
|
|
192
|
+
}
|
|
193
|
+
async getSubgraph(rootId, depth) {
|
|
194
|
+
if (!this.loaded)
|
|
195
|
+
await this.load();
|
|
196
|
+
const visited = new Set();
|
|
197
|
+
const entities = {};
|
|
198
|
+
const relations = [];
|
|
199
|
+
const traverse = async (id, currentDepth) => {
|
|
200
|
+
if (currentDepth > depth || visited.has(id))
|
|
201
|
+
return;
|
|
202
|
+
visited.add(id);
|
|
203
|
+
const entity = this.graph.entities[id];
|
|
204
|
+
if (!entity)
|
|
205
|
+
return;
|
|
206
|
+
entities[id] = entity;
|
|
207
|
+
const rels = await this.getRelations(id, 'both');
|
|
208
|
+
for (const rel of rels) {
|
|
209
|
+
if (!relations.some(r => r.id === rel.id)) {
|
|
210
|
+
relations.push(rel);
|
|
211
|
+
}
|
|
212
|
+
const nextId = rel.source === id ? rel.target : rel.source;
|
|
213
|
+
await traverse(nextId, currentDepth + 1);
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
await traverse(rootId, 0);
|
|
217
|
+
return {
|
|
218
|
+
version: '1.0.0',
|
|
219
|
+
metadata: {
|
|
220
|
+
lastModified: new Date().toISOString(),
|
|
221
|
+
entityCount: Object.keys(entities).length,
|
|
222
|
+
relationCount: relations.length,
|
|
223
|
+
},
|
|
224
|
+
entities,
|
|
225
|
+
relations,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
async traverse(startId, options) {
|
|
229
|
+
if (!this.loaded)
|
|
230
|
+
await this.load();
|
|
231
|
+
const depth = options?.depth ?? 3;
|
|
232
|
+
const direction = options?.direction ?? 'both';
|
|
233
|
+
const relationTypes = options?.relationTypes;
|
|
234
|
+
const visited = new Set();
|
|
235
|
+
const results = [];
|
|
236
|
+
const visit = async (id, currentDepth) => {
|
|
237
|
+
if (currentDepth > depth || visited.has(id))
|
|
238
|
+
return;
|
|
239
|
+
visited.add(id);
|
|
240
|
+
const entity = this.graph.entities[id];
|
|
241
|
+
if (!entity)
|
|
242
|
+
return;
|
|
243
|
+
results.push(entity);
|
|
244
|
+
const rels = await this.getRelations(id, direction);
|
|
245
|
+
for (const rel of rels) {
|
|
246
|
+
if (relationTypes && !relationTypes.includes(rel.type))
|
|
247
|
+
continue;
|
|
248
|
+
const nextId = rel.source === id ? rel.target : rel.source;
|
|
249
|
+
await visit(nextId, currentDepth + 1);
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
await visit(startId, 0);
|
|
253
|
+
return results;
|
|
254
|
+
}
|
|
255
|
+
getStats() {
|
|
256
|
+
const types = {
|
|
257
|
+
requirement: 0,
|
|
258
|
+
design: 0,
|
|
259
|
+
task: 0,
|
|
260
|
+
code: 0,
|
|
261
|
+
decision: 0,
|
|
262
|
+
pattern: 0,
|
|
263
|
+
constraint: 0,
|
|
264
|
+
};
|
|
265
|
+
for (const entity of Object.values(this.graph.entities)) {
|
|
266
|
+
types[entity.type]++;
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
entityCount: Object.keys(this.graph.entities).length,
|
|
270
|
+
relationCount: this.graph.relations.length,
|
|
271
|
+
types,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@musubix/knowledge",
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "Git-Native Knowledge Store for MUSUBIX - File-based knowledge graph management",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"test": "vitest run",
|
|
20
|
+
"test:watch": "vitest",
|
|
21
|
+
"clean": "rm -rf dist",
|
|
22
|
+
"typecheck": "tsc --noEmit"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"musubix",
|
|
26
|
+
"knowledge-graph",
|
|
27
|
+
"git-native",
|
|
28
|
+
"file-based"
|
|
29
|
+
],
|
|
30
|
+
"author": "nahisaho",
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "git+https://github.com/nahisaho/MUSUBIX.git",
|
|
35
|
+
"directory": "packages/knowledge"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=20.0.0"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"typescript": "^5.3.0",
|
|
42
|
+
"vitest": "^4.0.16"
|
|
43
|
+
}
|
|
44
|
+
}
|