@nahisaho/yata-local 1.6.6

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.
Files changed (77) hide show
  1. package/dist/auto-updater.d.ts +101 -0
  2. package/dist/auto-updater.d.ts.map +1 -0
  3. package/dist/auto-updater.js +402 -0
  4. package/dist/auto-updater.js.map +1 -0
  5. package/dist/database.d.ts +229 -0
  6. package/dist/database.d.ts.map +1 -0
  7. package/dist/database.js +959 -0
  8. package/dist/database.js.map +1 -0
  9. package/dist/index.d.ts +298 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +436 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/io.d.ts +77 -0
  14. package/dist/io.d.ts.map +1 -0
  15. package/dist/io.js +403 -0
  16. package/dist/io.js.map +1 -0
  17. package/dist/kgpr/diff-engine.d.ts +110 -0
  18. package/dist/kgpr/diff-engine.d.ts.map +1 -0
  19. package/dist/kgpr/diff-engine.js +335 -0
  20. package/dist/kgpr/diff-engine.js.map +1 -0
  21. package/dist/kgpr/index.d.ts +16 -0
  22. package/dist/kgpr/index.d.ts.map +1 -0
  23. package/dist/kgpr/index.js +14 -0
  24. package/dist/kgpr/index.js.map +1 -0
  25. package/dist/kgpr/kgpr-manager.d.ts +122 -0
  26. package/dist/kgpr/kgpr-manager.d.ts.map +1 -0
  27. package/dist/kgpr/kgpr-manager.js +344 -0
  28. package/dist/kgpr/kgpr-manager.js.map +1 -0
  29. package/dist/kgpr/privacy-filter.d.ts +109 -0
  30. package/dist/kgpr/privacy-filter.d.ts.map +1 -0
  31. package/dist/kgpr/privacy-filter.js +295 -0
  32. package/dist/kgpr/privacy-filter.js.map +1 -0
  33. package/dist/kgpr/types.d.ts +234 -0
  34. package/dist/kgpr/types.d.ts.map +1 -0
  35. package/dist/kgpr/types.js +54 -0
  36. package/dist/kgpr/types.js.map +1 -0
  37. package/dist/query-engine.d.ts +78 -0
  38. package/dist/query-engine.d.ts.map +1 -0
  39. package/dist/query-engine.js +368 -0
  40. package/dist/query-engine.js.map +1 -0
  41. package/dist/reasoning.d.ts +112 -0
  42. package/dist/reasoning.d.ts.map +1 -0
  43. package/dist/reasoning.js +455 -0
  44. package/dist/reasoning.js.map +1 -0
  45. package/dist/types.d.ts +580 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +37 -0
  48. package/dist/types.js.map +1 -0
  49. package/dist/wake-sleep/cycle-manager.d.ts +76 -0
  50. package/dist/wake-sleep/cycle-manager.d.ts.map +1 -0
  51. package/dist/wake-sleep/cycle-manager.js +291 -0
  52. package/dist/wake-sleep/cycle-manager.js.map +1 -0
  53. package/dist/wake-sleep/index.d.ts +15 -0
  54. package/dist/wake-sleep/index.d.ts.map +1 -0
  55. package/dist/wake-sleep/index.js +19 -0
  56. package/dist/wake-sleep/index.js.map +1 -0
  57. package/dist/wake-sleep/pattern-compressor.d.ts +86 -0
  58. package/dist/wake-sleep/pattern-compressor.d.ts.map +1 -0
  59. package/dist/wake-sleep/pattern-compressor.js +333 -0
  60. package/dist/wake-sleep/pattern-compressor.js.map +1 -0
  61. package/dist/wake-sleep/sleep-phase.d.ts +79 -0
  62. package/dist/wake-sleep/sleep-phase.d.ts.map +1 -0
  63. package/dist/wake-sleep/sleep-phase.js +329 -0
  64. package/dist/wake-sleep/sleep-phase.js.map +1 -0
  65. package/dist/wake-sleep/types.d.ts +244 -0
  66. package/dist/wake-sleep/types.d.ts.map +1 -0
  67. package/dist/wake-sleep/types.js +35 -0
  68. package/dist/wake-sleep/types.js.map +1 -0
  69. package/dist/wake-sleep/wake-phase.d.ts +83 -0
  70. package/dist/wake-sleep/wake-phase.d.ts.map +1 -0
  71. package/dist/wake-sleep/wake-phase.js +457 -0
  72. package/dist/wake-sleep/wake-phase.js.map +1 -0
  73. package/dist/yata-bridge.d.ts +78 -0
  74. package/dist/yata-bridge.d.ts.map +1 -0
  75. package/dist/yata-bridge.js +193 -0
  76. package/dist/yata-bridge.js.map +1 -0
  77. package/package.json +60 -0
package/dist/io.js ADDED
@@ -0,0 +1,403 @@
1
+ /**
2
+ * YATA Local - Import/Export Module
3
+ *
4
+ * @packageDocumentation
5
+ * @module @nahisaho/yata-local/io
6
+ *
7
+ * @see REQ-YL-IO-001 ~ REQ-YL-IO-004
8
+ */
9
+ import * as fs from 'fs/promises';
10
+ /**
11
+ * Import/Export module for YATA Local
12
+ */
13
+ export class IoModule {
14
+ db;
15
+ constructor(db) {
16
+ this.db = db;
17
+ }
18
+ /**
19
+ * Export graph to JSON
20
+ * @see REQ-YL-IO-001
21
+ */
22
+ async exportToJson(filePath) {
23
+ const { entities } = this.db.queryEntities({}, 100000);
24
+ const allRelationships = [];
25
+ const seenRels = new Set();
26
+ for (const entity of entities) {
27
+ const rels = this.db.getRelationships(entity.id);
28
+ for (const rel of rels) {
29
+ if (!seenRels.has(rel.id)) {
30
+ seenRels.add(rel.id);
31
+ allRelationships.push(rel);
32
+ }
33
+ }
34
+ }
35
+ const exportData = {
36
+ version: '1.0',
37
+ exportedAt: new Date().toISOString(),
38
+ entities,
39
+ relationships: allRelationships,
40
+ };
41
+ if (filePath) {
42
+ await fs.writeFile(filePath, JSON.stringify(exportData, null, 2));
43
+ }
44
+ return exportData;
45
+ }
46
+ /**
47
+ * Import graph from JSON
48
+ * @see REQ-YL-IO-003
49
+ */
50
+ async importFromJson(input, options = {}) {
51
+ let data;
52
+ if (typeof input === 'string') {
53
+ const content = await fs.readFile(input, 'utf-8');
54
+ data = JSON.parse(content);
55
+ }
56
+ else {
57
+ data = input;
58
+ }
59
+ const result = {
60
+ success: true,
61
+ entitiesAdded: 0,
62
+ entitiesUpdated: 0,
63
+ entitiesSkipped: 0,
64
+ relationshipsAdded: 0,
65
+ relationshipsSkipped: 0,
66
+ conflicts: [],
67
+ };
68
+ // Process entities
69
+ for (const entity of data.entities) {
70
+ const existing = this.db.getEntity(entity.id);
71
+ if (existing) {
72
+ if (options.merge) {
73
+ if (!options.dryRun) {
74
+ this.db.updateEntity(entity.id, entity);
75
+ }
76
+ result.entitiesUpdated++;
77
+ }
78
+ else {
79
+ result.entitiesSkipped++;
80
+ result.conflicts.push({
81
+ type: 'entity',
82
+ id: entity.id,
83
+ reason: 'Entity already exists',
84
+ });
85
+ }
86
+ }
87
+ else {
88
+ if (!options.dryRun) {
89
+ this.db.insertEntity(entity);
90
+ }
91
+ result.entitiesAdded++;
92
+ }
93
+ }
94
+ // Process relationships
95
+ for (const rel of data.relationships) {
96
+ // Check if source and target exist
97
+ const sourceExists = this.db.getEntity(rel.sourceId);
98
+ const targetExists = this.db.getEntity(rel.targetId);
99
+ if (!sourceExists || !targetExists) {
100
+ result.relationshipsSkipped++;
101
+ result.conflicts.push({
102
+ type: 'relationship',
103
+ id: rel.id,
104
+ reason: `Missing ${!sourceExists ? 'source' : 'target'} entity`,
105
+ });
106
+ continue;
107
+ }
108
+ // Check if relationship exists
109
+ const existingRels = this.db.getRelationships(rel.sourceId, 'out');
110
+ const exists = existingRels.some(r => r.id === rel.id);
111
+ if (exists) {
112
+ result.relationshipsSkipped++;
113
+ }
114
+ else {
115
+ if (!options.dryRun) {
116
+ this.db.insertRelationship(rel);
117
+ }
118
+ result.relationshipsAdded++;
119
+ }
120
+ }
121
+ return result;
122
+ }
123
+ /**
124
+ * Export to RDF (N-Triples format)
125
+ * @see REQ-YL-IO-001
126
+ */
127
+ async exportToRdf(filePath, options = {}) {
128
+ const baseUri = options.baseUri ?? 'http://yata.local/';
129
+ const includeMetadata = options.includeMetadata ?? true;
130
+ const triples = [];
131
+ const { entities } = this.db.queryEntities({}, 100000);
132
+ // Entity triples
133
+ for (const entity of entities) {
134
+ const subject = `<${baseUri}entity/${encodeURIComponent(entity.id)}>`;
135
+ // Type triple
136
+ triples.push(`${subject} <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <${baseUri}type/${entity.type}> .`);
137
+ // Name triple
138
+ triples.push(`${subject} <http://www.w3.org/2000/01/rdf-schema#label> "${this.escapeRdfString(entity.name)}" .`);
139
+ // Namespace triple
140
+ if (entity.namespace) {
141
+ triples.push(`${subject} <${baseUri}namespace> "${this.escapeRdfString(entity.namespace)}" .`);
142
+ }
143
+ // File path triple
144
+ if (entity.filePath) {
145
+ triples.push(`${subject} <${baseUri}filePath> "${this.escapeRdfString(entity.filePath)}" .`);
146
+ }
147
+ // Line triple
148
+ if (entity.line !== undefined) {
149
+ triples.push(`${subject} <${baseUri}line> "${entity.line}"^^<http://www.w3.org/2001/XMLSchema#integer> .`);
150
+ }
151
+ // Description triple
152
+ if (entity.description) {
153
+ triples.push(`${subject} <http://www.w3.org/2000/01/rdf-schema#comment> "${this.escapeRdfString(entity.description)}" .`);
154
+ }
155
+ // Metadata triples
156
+ if (includeMetadata && Object.keys(entity.metadata).length > 0) {
157
+ triples.push(`${subject} <${baseUri}metadata> "${this.escapeRdfString(JSON.stringify(entity.metadata))}" .`);
158
+ }
159
+ // Timestamps
160
+ triples.push(`${subject} <http://purl.org/dc/terms/created> "${entity.createdAt.toISOString()}"^^<http://www.w3.org/2001/XMLSchema#dateTime> .`);
161
+ triples.push(`${subject} <http://purl.org/dc/terms/modified> "${entity.updatedAt.toISOString()}"^^<http://www.w3.org/2001/XMLSchema#dateTime> .`);
162
+ }
163
+ // Relationship triples
164
+ const seenRels = new Set();
165
+ for (const entity of entities) {
166
+ const rels = this.db.getRelationships(entity.id);
167
+ for (const rel of rels) {
168
+ if (seenRels.has(rel.id))
169
+ continue;
170
+ seenRels.add(rel.id);
171
+ const subject = `<${baseUri}entity/${encodeURIComponent(rel.sourceId)}>`;
172
+ const predicate = `<${baseUri}rel/${rel.type}>`;
173
+ const object = `<${baseUri}entity/${encodeURIComponent(rel.targetId)}>`;
174
+ triples.push(`${subject} ${predicate} ${object} .`);
175
+ // Relationship metadata as reification
176
+ if (rel.weight !== 1.0 || Object.keys(rel.metadata).length > 0) {
177
+ const relSubject = `<${baseUri}relationship/${encodeURIComponent(rel.id)}>`;
178
+ triples.push(`${relSubject} <http://www.w3.org/1999/02/22-rdf-syntax-ns#subject> ${subject} .`);
179
+ triples.push(`${relSubject} <http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate> ${predicate} .`);
180
+ triples.push(`${relSubject} <http://www.w3.org/1999/02/22-rdf-syntax-ns#object> ${object} .`);
181
+ if (rel.weight !== 1.0) {
182
+ triples.push(`${relSubject} <${baseUri}weight> "${rel.weight}"^^<http://www.w3.org/2001/XMLSchema#float> .`);
183
+ }
184
+ if (Object.keys(rel.metadata).length > 0) {
185
+ triples.push(`${relSubject} <${baseUri}metadata> "${this.escapeRdfString(JSON.stringify(rel.metadata))}" .`);
186
+ }
187
+ }
188
+ }
189
+ }
190
+ const rdfContent = triples.join('\n');
191
+ if (filePath) {
192
+ await fs.writeFile(filePath, rdfContent);
193
+ }
194
+ return rdfContent;
195
+ }
196
+ /**
197
+ * Compute delta between two states
198
+ * @see REQ-YL-IO-004
199
+ */
200
+ computeDelta(oldState, newState) {
201
+ const delta = {
202
+ entities: {
203
+ added: [],
204
+ updated: [],
205
+ deleted: [],
206
+ },
207
+ relationships: {
208
+ added: [],
209
+ deleted: [],
210
+ },
211
+ timestamp: new Date(),
212
+ };
213
+ // Create maps for faster lookup
214
+ const oldEntities = new Map(oldState.entities.map(e => [e.id, e]));
215
+ const newEntities = new Map(newState.entities.map(e => [e.id, e]));
216
+ // Find added and updated entities
217
+ for (const [id, newEntity] of newEntities) {
218
+ const oldEntity = oldEntities.get(id);
219
+ if (!oldEntity) {
220
+ delta.entities.added.push(newEntity);
221
+ }
222
+ else if (this.entityChanged(oldEntity, newEntity)) {
223
+ delta.entities.updated.push(newEntity);
224
+ }
225
+ }
226
+ // Find deleted entities
227
+ for (const [id] of oldEntities) {
228
+ if (!newEntities.has(id)) {
229
+ delta.entities.deleted.push(id);
230
+ }
231
+ }
232
+ // Create maps for relationships
233
+ const oldRels = new Map(oldState.relationships.map(r => [r.id, r]));
234
+ const newRels = new Map(newState.relationships.map(r => [r.id, r]));
235
+ // Find added relationships
236
+ for (const [id, newRel] of newRels) {
237
+ if (!oldRels.has(id)) {
238
+ delta.relationships.added.push(newRel);
239
+ }
240
+ }
241
+ // Find deleted relationships
242
+ for (const [id] of oldRels) {
243
+ if (!newRels.has(id)) {
244
+ delta.relationships.deleted.push(id);
245
+ }
246
+ }
247
+ return delta;
248
+ }
249
+ /**
250
+ * Apply delta to current database state
251
+ * @see REQ-YL-IO-004
252
+ */
253
+ async applyDelta(delta, options = {}) {
254
+ const result = {
255
+ success: true,
256
+ entitiesAdded: 0,
257
+ entitiesUpdated: 0,
258
+ entitiesSkipped: 0,
259
+ relationshipsAdded: 0,
260
+ relationshipsSkipped: 0,
261
+ conflicts: [],
262
+ };
263
+ // Delete relationships first (foreign key constraints)
264
+ for (const relId of delta.relationships.deleted) {
265
+ if (!options.dryRun) {
266
+ this.db.deleteRelationship(relId);
267
+ }
268
+ }
269
+ // Delete entities
270
+ for (const entityId of delta.entities.deleted) {
271
+ if (!options.dryRun) {
272
+ this.db.deleteEntity(entityId);
273
+ }
274
+ }
275
+ // Add entities
276
+ for (const entity of delta.entities.added) {
277
+ if (!options.dryRun) {
278
+ this.db.insertEntity(entity);
279
+ }
280
+ result.entitiesAdded++;
281
+ }
282
+ // Update entities
283
+ for (const entity of delta.entities.updated) {
284
+ if (!options.dryRun) {
285
+ this.db.updateEntity(entity.id, entity);
286
+ }
287
+ result.entitiesUpdated++;
288
+ }
289
+ // Add relationships
290
+ for (const rel of delta.relationships.added) {
291
+ const sourceExists = this.db.getEntity(rel.sourceId);
292
+ const targetExists = this.db.getEntity(rel.targetId);
293
+ if (!sourceExists || !targetExists) {
294
+ result.relationshipsSkipped++;
295
+ result.conflicts.push({
296
+ type: 'relationship',
297
+ id: rel.id,
298
+ reason: `Missing ${!sourceExists ? 'source' : 'target'} entity`,
299
+ });
300
+ continue;
301
+ }
302
+ if (!options.dryRun) {
303
+ this.db.insertRelationship(rel);
304
+ }
305
+ result.relationshipsAdded++;
306
+ }
307
+ return result;
308
+ }
309
+ /**
310
+ * Sync with another YATA Local instance
311
+ * @see REQ-YL-IO-004
312
+ */
313
+ async syncWith(other, since) {
314
+ // Get changes from other database
315
+ const otherChanges = other.getChangesSince(since);
316
+ const result = {
317
+ success: true,
318
+ entitiesAdded: 0,
319
+ entitiesUpdated: 0,
320
+ entitiesSkipped: 0,
321
+ relationshipsAdded: 0,
322
+ relationshipsSkipped: 0,
323
+ conflicts: [],
324
+ };
325
+ // Apply entity changes
326
+ for (const entity of otherChanges.entities.added) {
327
+ const existing = this.db.getEntity(entity.id);
328
+ if (existing) {
329
+ // Conflict: choose newer
330
+ if (entity.updatedAt > existing.updatedAt) {
331
+ this.db.updateEntity(entity.id, entity);
332
+ result.entitiesUpdated++;
333
+ }
334
+ else {
335
+ result.entitiesSkipped++;
336
+ }
337
+ }
338
+ else {
339
+ this.db.insertEntity(entity);
340
+ result.entitiesAdded++;
341
+ }
342
+ }
343
+ for (const entity of otherChanges.entities.updated) {
344
+ const existing = this.db.getEntity(entity.id);
345
+ if (existing) {
346
+ if (entity.updatedAt > existing.updatedAt) {
347
+ this.db.updateEntity(entity.id, entity);
348
+ result.entitiesUpdated++;
349
+ }
350
+ else {
351
+ result.entitiesSkipped++;
352
+ }
353
+ }
354
+ else {
355
+ this.db.insertEntity(entity);
356
+ result.entitiesAdded++;
357
+ }
358
+ }
359
+ for (const entityId of otherChanges.entities.deleted) {
360
+ this.db.deleteEntity(entityId);
361
+ }
362
+ // Apply relationship changes
363
+ for (const rel of otherChanges.relationships.added) {
364
+ const sourceExists = this.db.getEntity(rel.sourceId);
365
+ const targetExists = this.db.getEntity(rel.targetId);
366
+ if (sourceExists && targetExists) {
367
+ this.db.insertRelationship(rel);
368
+ result.relationshipsAdded++;
369
+ }
370
+ else {
371
+ result.relationshipsSkipped++;
372
+ }
373
+ }
374
+ for (const relId of otherChanges.relationships.deleted) {
375
+ this.db.deleteRelationship(relId);
376
+ }
377
+ return result;
378
+ }
379
+ /**
380
+ * Check if entity has changed
381
+ */
382
+ entityChanged(oldEntity, newEntity) {
383
+ return (oldEntity.name !== newEntity.name ||
384
+ oldEntity.namespace !== newEntity.namespace ||
385
+ oldEntity.type !== newEntity.type ||
386
+ oldEntity.filePath !== newEntity.filePath ||
387
+ oldEntity.line !== newEntity.line ||
388
+ oldEntity.description !== newEntity.description ||
389
+ JSON.stringify(oldEntity.metadata) !== JSON.stringify(newEntity.metadata));
390
+ }
391
+ /**
392
+ * Escape string for RDF N-Triples format
393
+ */
394
+ escapeRdfString(str) {
395
+ return str
396
+ .replace(/\\/g, '\\\\')
397
+ .replace(/"/g, '\\"')
398
+ .replace(/\n/g, '\\n')
399
+ .replace(/\r/g, '\\r')
400
+ .replace(/\t/g, '\\t');
401
+ }
402
+ }
403
+ //# sourceMappingURL=io.js.map
package/dist/io.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * YATA Local KGPR - Diff Engine
3
+ *
4
+ * Generates diffs between knowledge graph states
5
+ *
6
+ * @packageDocumentation
7
+ * @module @nahisaho/yata-local/kgpr
8
+ *
9
+ * @see REQ-YL-EXT-KGPR-003
10
+ */
11
+ import type { Entity, Relationship } from '../types.js';
12
+ import type { LocalKGPRDiff, KGSnapshot, DiffOptions } from './types.js';
13
+ /**
14
+ * Diff engine for generating knowledge graph diffs
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const engine = createLocalDiffEngine();
19
+ *
20
+ * // Create baseline snapshot
21
+ * const baseline = engine.createSnapshot(entities, relationships, 'Initial state');
22
+ *
23
+ * // ... make changes to KG ...
24
+ *
25
+ * // Generate diff from baseline
26
+ * const diff = engine.generateDiff(baseline, currentEntities, currentRelationships);
27
+ * ```
28
+ */
29
+ export declare class LocalDiffEngine {
30
+ private lastSnapshotId;
31
+ /**
32
+ * Create a snapshot of the current knowledge graph state
33
+ *
34
+ * @param entities - Current entities
35
+ * @param relationships - Current relationships
36
+ * @param description - Optional description
37
+ * @returns Snapshot object
38
+ */
39
+ createSnapshot(entities: Entity[], relationships: Relationship[], description?: string): KGSnapshot;
40
+ /**
41
+ * Generate a diff between baseline snapshot and current state
42
+ *
43
+ * @param baseline - Baseline snapshot (or null for full diff)
44
+ * @param currentEntities - Current entities
45
+ * @param currentRelationships - Current relationships
46
+ * @param options - Diff options
47
+ * @returns The diff
48
+ */
49
+ generateDiff(baseline: KGSnapshot | null, currentEntities: Entity[], currentRelationships: Relationship[], options?: DiffOptions): LocalKGPRDiff;
50
+ /**
51
+ * Generate diff between two snapshots (without current state)
52
+ *
53
+ * @param oldSnapshot - Old snapshot
54
+ * @param newSnapshot - New snapshot
55
+ * @returns Summary diff (IDs only)
56
+ */
57
+ compareSnapshots(oldSnapshot: KGSnapshot, newSnapshot: KGSnapshot): {
58
+ added: string[];
59
+ updated: string[];
60
+ deleted: string[];
61
+ };
62
+ /**
63
+ * Hash an entity for comparison
64
+ */
65
+ hashEntity(entity: Entity): string;
66
+ /**
67
+ * Hash a relationship for comparison
68
+ */
69
+ hashRelationship(rel: Relationship): string;
70
+ /**
71
+ * Filter entities based on options
72
+ */
73
+ private filterEntities;
74
+ /**
75
+ * Filter relationships based on options
76
+ */
77
+ private filterRelationships;
78
+ /**
79
+ * Create a full diff (all entities/relationships as added)
80
+ */
81
+ private createFullDiff;
82
+ /**
83
+ * Calculate entity changes between baseline and current
84
+ */
85
+ private calculateEntityChanges;
86
+ /**
87
+ * Calculate relationship changes between baseline and current
88
+ */
89
+ private calculateRelationshipChanges;
90
+ /**
91
+ * Convert entity to change format
92
+ */
93
+ private entityToChange;
94
+ /**
95
+ * Convert relationship to change format
96
+ * Note: This requires entity lookup for names - simplified version uses IDs
97
+ */
98
+ private relationshipToChange;
99
+ /**
100
+ * Calculate diff statistics
101
+ */
102
+ private calculateStats;
103
+ }
104
+ /**
105
+ * Create a new diff engine instance
106
+ *
107
+ * @returns New diff engine
108
+ */
109
+ export declare function createLocalDiffEngine(): LocalDiffEngine;
110
+ //# sourceMappingURL=diff-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-engine.d.ts","sourceRoot":"","sources":["../../src/kgpr/diff-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAA4B,MAAM,aAAa,CAAC;AAClF,OAAO,KAAK,EAGV,aAAa,EAEb,UAAU,EACV,WAAW,EAEZ,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,cAAc,CAAK;IAE3B;;;;;;;OAOG;IACH,cAAc,CACZ,QAAQ,EAAE,MAAM,EAAE,EAClB,aAAa,EAAE,YAAY,EAAE,EAC7B,WAAW,CAAC,EAAE,MAAM,GACnB,UAAU;IAuBb;;;;;;;;OAQG;IACH,YAAY,CACV,QAAQ,EAAE,UAAU,GAAG,IAAI,EAC3B,eAAe,EAAE,MAAM,EAAE,EACzB,oBAAoB,EAAE,YAAY,EAAE,EACpC,OAAO,CAAC,EAAE,WAAW,GACpB,aAAa;IAgChB;;;;;;OAMG;IACH,gBAAgB,CACd,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,UAAU,GACtB;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE;IAwB5D;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAYlC;;OAEG;IACH,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM;IAU3C;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAkCtB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4C9B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA6CpC;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACH,OAAO,CAAC,cAAc;CAoBvB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD"}