planfs-core 1.2.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.
Files changed (70) hide show
  1. package/README.md +125 -0
  2. package/dist/ai.d.ts +98 -0
  3. package/dist/ai.d.ts.map +1 -0
  4. package/dist/ai.js +265 -0
  5. package/dist/ai.js.map +1 -0
  6. package/dist/backlog.d.ts +40 -0
  7. package/dist/backlog.d.ts.map +1 -0
  8. package/dist/backlog.js +206 -0
  9. package/dist/backlog.js.map +1 -0
  10. package/dist/bulk.d.ts +29 -0
  11. package/dist/bulk.d.ts.map +1 -0
  12. package/dist/bulk.js +206 -0
  13. package/dist/bulk.js.map +1 -0
  14. package/dist/files.d.ts +38 -0
  15. package/dist/files.d.ts.map +1 -0
  16. package/dist/files.js +179 -0
  17. package/dist/files.js.map +1 -0
  18. package/dist/git.d.ts +74 -0
  19. package/dist/git.d.ts.map +1 -0
  20. package/dist/git.js +426 -0
  21. package/dist/git.js.map +1 -0
  22. package/dist/graph.d.ts +56 -0
  23. package/dist/graph.d.ts.map +1 -0
  24. package/dist/graph.js +188 -0
  25. package/dist/graph.js.map +1 -0
  26. package/dist/index.d.ts +20 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +36 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/loader.d.ts +26 -0
  31. package/dist/loader.d.ts.map +1 -0
  32. package/dist/loader.js +248 -0
  33. package/dist/loader.js.map +1 -0
  34. package/dist/milestone.d.ts +23 -0
  35. package/dist/milestone.d.ts.map +1 -0
  36. package/dist/milestone.js +60 -0
  37. package/dist/milestone.js.map +1 -0
  38. package/dist/next-work.d.ts +34 -0
  39. package/dist/next-work.d.ts.map +1 -0
  40. package/dist/next-work.js +239 -0
  41. package/dist/next-work.js.map +1 -0
  42. package/dist/parser.d.ts +37 -0
  43. package/dist/parser.d.ts.map +1 -0
  44. package/dist/parser.js +132 -0
  45. package/dist/parser.js.map +1 -0
  46. package/dist/pull-request.d.ts +38 -0
  47. package/dist/pull-request.d.ts.map +1 -0
  48. package/dist/pull-request.js +147 -0
  49. package/dist/pull-request.js.map +1 -0
  50. package/dist/references.d.ts +10 -0
  51. package/dist/references.d.ts.map +1 -0
  52. package/dist/references.js +30 -0
  53. package/dist/references.js.map +1 -0
  54. package/dist/repository.d.ts +85 -0
  55. package/dist/repository.d.ts.map +1 -0
  56. package/dist/repository.js +495 -0
  57. package/dist/repository.js.map +1 -0
  58. package/dist/search.d.ts +25 -0
  59. package/dist/search.d.ts.map +1 -0
  60. package/dist/search.js +150 -0
  61. package/dist/search.js.map +1 -0
  62. package/dist/types.d.ts +119 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +6 -0
  65. package/dist/types.js.map +1 -0
  66. package/dist/validator.d.ts +24 -0
  67. package/dist/validator.d.ts.map +1 -0
  68. package/dist/validator.js +540 -0
  69. package/dist/validator.js.map +1 -0
  70. package/package.json +46 -0
@@ -0,0 +1,495 @@
1
+ "use strict";
2
+ /**
3
+ * Repository loader
4
+ * Main API for loading and querying a PlanFS repository
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.loadRepository = loadRepository;
41
+ exports.getAllEntities = getAllEntities;
42
+ exports.validateRepositoryState = validateRepositoryState;
43
+ exports.saveEntity = saveEntity;
44
+ exports.generateEntityContent = generateEntityContent;
45
+ exports.isArchivedEntity = isArchivedEntity;
46
+ exports.listArchivedEntities = listArchivedEntities;
47
+ exports.archiveEntity = archiveEntity;
48
+ exports.restoreArchivedEntity = restoreArchivedEntity;
49
+ exports.deleteArchivedEntity = deleteArchivedEntity;
50
+ exports.getTasksByStatus = getTasksByStatus;
51
+ exports.getTasksByAssignee = getTasksByAssignee;
52
+ exports.getTasksByEpic = getTasksByEpic;
53
+ exports.initializeRepository = initializeRepository;
54
+ exports.getNextTaskId = getNextTaskId;
55
+ exports.getNextEpicId = getNextEpicId;
56
+ exports.getNextMilestoneId = getNextMilestoneId;
57
+ exports.createTaskTemplate = createTaskTemplate;
58
+ exports.createEpicTemplate = createEpicTemplate;
59
+ exports.createMilestoneTemplate = createMilestoneTemplate;
60
+ const path = __importStar(require("path"));
61
+ const yaml_1 = require("yaml");
62
+ const files_1 = require("./files");
63
+ const loader_1 = require("./loader");
64
+ const references_1 = require("./references");
65
+ const validator_1 = require("./validator");
66
+ /**
67
+ * Load a PlanFS repository
68
+ */
69
+ async function loadRepository(rootPath) {
70
+ // Check if .planfs directory exists
71
+ const exists = await (0, files_1.planfsDirectoryExists)(rootPath);
72
+ if (!exists) {
73
+ throw new Error(`No .planfs directory found in ${rootPath}. Initialize with ensurePlanfsStructure() first.`);
74
+ }
75
+ const repository = {
76
+ root: rootPath,
77
+ tasks: new Map(),
78
+ epics: new Map(),
79
+ milestones: new Map(),
80
+ decisions: new Map(),
81
+ archivedTasks: new Map(),
82
+ archivedEpics: new Map(),
83
+ diagnostics: []
84
+ };
85
+ // Discover and load all files
86
+ const files = await (0, files_1.discoverFiles)(rootPath);
87
+ for (const file of files) {
88
+ try {
89
+ const content = await (0, files_1.readFile)(file.path);
90
+ const entity = (0, loader_1.loadEntity)(file, content, { tolerant: true });
91
+ switch (entity.type) {
92
+ case 'task':
93
+ repository.tasks.set(entity.id, entity);
94
+ break;
95
+ case 'epic':
96
+ repository.epics.set(entity.id, entity);
97
+ break;
98
+ case 'milestone':
99
+ repository.milestones.set(entity.id, entity);
100
+ break;
101
+ case 'decision':
102
+ repository.decisions.set(entity.id, entity);
103
+ break;
104
+ }
105
+ }
106
+ catch (error) {
107
+ const message = `Failed to load entity from ${file.path}: ${error instanceof Error ? error.message : String(error)}`;
108
+ repository.diagnostics?.push({
109
+ path: file.path,
110
+ message: `${message}. Repair by restoring valid YAML frontmatter with id and title fields.`,
111
+ severity: 'error'
112
+ });
113
+ console.error(message);
114
+ }
115
+ }
116
+ const archivedFiles = await (0, files_1.discoverArchiveFiles)(rootPath);
117
+ for (const file of archivedFiles) {
118
+ try {
119
+ const content = await (0, files_1.readFile)(file.path);
120
+ const entity = (0, loader_1.loadEntity)(file, content, { tolerant: true });
121
+ if (entity.type === 'task') {
122
+ repository.archivedTasks?.set(entity.id, entity);
123
+ }
124
+ else if (entity.type === 'epic') {
125
+ repository.archivedEpics?.set(entity.id, entity);
126
+ }
127
+ }
128
+ catch (error) {
129
+ const message = `Failed to load archived entity from ${file.path}: ${error instanceof Error ? error.message : String(error)}`;
130
+ repository.diagnostics?.push({
131
+ path: file.path,
132
+ message: `${message}. Repair by restoring valid YAML frontmatter with id and title fields.`,
133
+ severity: 'error'
134
+ });
135
+ console.error(message);
136
+ }
137
+ }
138
+ return repository;
139
+ }
140
+ /**
141
+ * Get all entities from a repository
142
+ */
143
+ function getAllEntities(repository, options = {}) {
144
+ const entities = [];
145
+ entities.push(...Array.from(repository.tasks.values()));
146
+ entities.push(...Array.from(repository.epics.values()));
147
+ entities.push(...Array.from(repository.milestones.values()));
148
+ entities.push(...Array.from(repository.decisions.values()));
149
+ if (options.includeArchived) {
150
+ entities.push(...Array.from(repository.archivedTasks?.values() ?? []));
151
+ entities.push(...Array.from(repository.archivedEpics?.values() ?? []));
152
+ }
153
+ return entities;
154
+ }
155
+ /**
156
+ * Validate a repository
157
+ */
158
+ function validateRepositoryState(repository) {
159
+ const entities = getAllEntities(repository);
160
+ const archivedEntities = (0, references_1.listArchivedReferenceEntities)(repository);
161
+ const entityErrors = [
162
+ ...entities.flatMap(entity => (0, validator_1.validateEntity)(entity)),
163
+ ...archivedEntities.flatMap(entity => (0, validator_1.validateEntity)(entity))
164
+ ];
165
+ const repositoryErrors = (0, validator_1.validateRepository)(entities, {
166
+ referenceEntities: archivedEntities
167
+ });
168
+ const errors = [...entityErrors, ...repositoryErrors];
169
+ errors.push(...repository.diagnostics ?? []);
170
+ return {
171
+ valid: !errors.some(error => error.severity === 'error'),
172
+ errors
173
+ };
174
+ }
175
+ /**
176
+ * Save an entity to disk
177
+ */
178
+ async function saveEntity(rootPath, entity) {
179
+ assertSafeSaveIdentity(entity);
180
+ const dir = entity.archive && (entity.type === 'task' || entity.type === 'epic')
181
+ ? path.join('archive', (0, loader_1.getEntityDirectory)(entity.type))
182
+ : (0, loader_1.getEntityDirectory)(entity.type);
183
+ const filename = (0, loader_1.getFilenameFromId)(entity.id);
184
+ const filePath = path.join(rootPath, '.planfs', dir, filename);
185
+ const content = generateEntityContent(entity);
186
+ await (0, files_1.writeFile)(filePath, content);
187
+ }
188
+ function assertSafeSaveIdentity(entity) {
189
+ if (!entity.id || typeof entity.id !== 'string') {
190
+ throw new Error('Refusing to save entity with missing id. Repair the id field before saving.');
191
+ }
192
+ if (!entity.filePath) {
193
+ return;
194
+ }
195
+ const existingId = path.basename(entity.filePath, '.md');
196
+ if (existingId && existingId !== entity.id) {
197
+ throw new Error(`Refusing to save ${entity.id}: entity id does not match existing file name ${existingId}. Repair the id field or rename the file before saving.`);
198
+ }
199
+ }
200
+ /**
201
+ * Generate file content from an entity
202
+ */
203
+ function generateEntityContent(entity) {
204
+ const metadata = { ...entity.metadata };
205
+ metadata.id = entity.id;
206
+ metadata.title = entity.title || '';
207
+ metadata.status = entity.status || '';
208
+ if (entity.archive)
209
+ metadata.archive = entity.archive;
210
+ // Add type-specific metadata
211
+ switch (entity.type) {
212
+ case 'task': {
213
+ const task = entity;
214
+ if (task.priority)
215
+ metadata.priority = task.priority;
216
+ if (task.assignee)
217
+ metadata.assignee = task.assignee;
218
+ if (task.epic)
219
+ metadata.epic = task.epic;
220
+ if (task.milestone)
221
+ metadata.milestone = task.milestone;
222
+ if (task.dependsOn)
223
+ metadata.dependsOn = task.dependsOn;
224
+ if (task.tags)
225
+ metadata.tags = task.tags;
226
+ if (task.dueDate)
227
+ metadata.dueDate = task.dueDate;
228
+ if (task.estimate)
229
+ metadata.estimate = task.estimate;
230
+ if (task.refinementState)
231
+ metadata.refinementState = task.refinementState;
232
+ if (task.backlogOrder !== undefined)
233
+ metadata.backlogOrder = task.backlogOrder;
234
+ if (task.links)
235
+ metadata.links = task.links;
236
+ break;
237
+ }
238
+ case 'epic': {
239
+ const epic = entity;
240
+ if (epic.priority)
241
+ metadata.priority = epic.priority;
242
+ if (epic.owner)
243
+ metadata.owner = epic.owner;
244
+ if (epic.description)
245
+ metadata.description = epic.description;
246
+ if (epic.targetDate)
247
+ metadata.targetDate = epic.targetDate;
248
+ if (epic.tags)
249
+ metadata.tags = epic.tags;
250
+ if (epic.links)
251
+ metadata.links = epic.links;
252
+ break;
253
+ }
254
+ case 'milestone': {
255
+ const milestone = entity;
256
+ metadata.targetDate = milestone.targetDate;
257
+ if (milestone.description)
258
+ metadata.description = milestone.description;
259
+ if (milestone.owner)
260
+ metadata.owner = milestone.owner;
261
+ if (milestone.links)
262
+ metadata.links = milestone.links;
263
+ break;
264
+ }
265
+ case 'decision': {
266
+ const decision = entity;
267
+ if (decision.date)
268
+ metadata.date = decision.date;
269
+ if (decision.context)
270
+ metadata.context = decision.context;
271
+ if (decision.decision)
272
+ metadata.decision = decision.decision;
273
+ if (decision.consequences)
274
+ metadata.consequences = decision.consequences;
275
+ if (decision.author)
276
+ metadata.author = decision.author;
277
+ if (decision.supersedes)
278
+ metadata.supersedes = decision.supersedes;
279
+ if (decision.supersededBy)
280
+ metadata.supersededBy = decision.supersededBy;
281
+ break;
282
+ }
283
+ }
284
+ if (entity.createdAt)
285
+ metadata.createdAt = entity.createdAt;
286
+ if (entity.updatedAt)
287
+ metadata.updatedAt = entity.updatedAt;
288
+ return `---\n${(0, yaml_1.stringify)(metadata).trimEnd()}\n---\n\n${entity.body}`;
289
+ }
290
+ function isArchivedEntity(entity) {
291
+ return Boolean(entity.archive);
292
+ }
293
+ function listArchivedEntities(repository) {
294
+ return [
295
+ ...Array.from(repository.archivedTasks?.values() ?? []),
296
+ ...Array.from(repository.archivedEpics?.values() ?? [])
297
+ ];
298
+ }
299
+ async function archiveEntity(rootPath, entityId, options = {}) {
300
+ const repository = await loadRepository(rootPath);
301
+ const entity = repository.tasks.get(entityId) ?? repository.epics.get(entityId);
302
+ if (!entity) {
303
+ throw new Error(`Active task or epic not found: ${entityId}`);
304
+ }
305
+ const toArchive = [entity];
306
+ if (entity.type === 'epic' && options.includeChildren) {
307
+ toArchive.push(...Array.from(repository.tasks.values()).filter(task => task.epic === entity.id));
308
+ }
309
+ const archived = [];
310
+ const archivedAt = (options.now ?? new Date()).toISOString();
311
+ for (const current of toArchive) {
312
+ const originalPath = path.relative(rootPath, current.filePath);
313
+ const archive = { archivedAt, originalPath };
314
+ const archivedEntity = {
315
+ ...current,
316
+ archive,
317
+ updatedAt: archivedAt,
318
+ metadata: {
319
+ ...current.metadata,
320
+ archive,
321
+ updatedAt: archivedAt
322
+ }
323
+ };
324
+ await saveEntity(rootPath, archivedEntity);
325
+ await (0, files_1.deleteFile)(current.filePath);
326
+ archived.push(archivedEntity);
327
+ }
328
+ return { archived };
329
+ }
330
+ async function restoreArchivedEntity(rootPath, entityId, options = {}) {
331
+ const repository = await loadRepository(rootPath);
332
+ const entity = repository.archivedTasks?.get(entityId) ?? repository.archivedEpics?.get(entityId);
333
+ if (!entity) {
334
+ throw new Error(`Archived task or epic not found: ${entityId}`);
335
+ }
336
+ const restoredAt = (options.now ?? new Date()).toISOString();
337
+ const restored = removeArchiveMetadata({
338
+ ...entity,
339
+ updatedAt: restoredAt,
340
+ metadata: {
341
+ ...entity.metadata,
342
+ updatedAt: restoredAt
343
+ }
344
+ });
345
+ if (restored.type === 'task' && options.recalculateBacklogOrder !== false) {
346
+ restored.backlogOrder = nextBacklogOrder(repository, restored);
347
+ }
348
+ await saveEntity(rootPath, restored);
349
+ await (0, files_1.deleteFile)(entity.filePath);
350
+ return restored;
351
+ }
352
+ async function deleteArchivedEntity(rootPath, entityId) {
353
+ const repository = await loadRepository(rootPath);
354
+ const entity = repository.archivedTasks?.get(entityId) ?? repository.archivedEpics?.get(entityId);
355
+ if (!entity) {
356
+ throw new Error(`Archived task or epic not found: ${entityId}`);
357
+ }
358
+ await (0, files_1.deleteFile)(entity.filePath);
359
+ return entity;
360
+ }
361
+ function removeArchiveMetadata(entity) {
362
+ const copy = { ...entity, metadata: { ...entity.metadata } };
363
+ delete copy.archive;
364
+ delete copy.metadata.archive;
365
+ return copy;
366
+ }
367
+ function nextBacklogOrder(repository, task) {
368
+ const scope = task.epic ?? 'global';
369
+ const orders = Array.from(repository.tasks.values())
370
+ .filter(candidate => (candidate.epic ?? 'global') === scope)
371
+ .map(candidate => candidate.backlogOrder)
372
+ .filter((value) => typeof value === 'number');
373
+ return orders.length > 0 ? Math.max(...orders) + 10 : 10;
374
+ }
375
+ /**
376
+ * Query tasks by status
377
+ */
378
+ function getTasksByStatus(repository, status) {
379
+ return Array.from(repository.tasks.values()).filter(task => task.status === status);
380
+ }
381
+ /**
382
+ * Query tasks by assignee
383
+ */
384
+ function getTasksByAssignee(repository, assignee) {
385
+ return Array.from(repository.tasks.values()).filter(task => task.assignee === assignee);
386
+ }
387
+ /**
388
+ * Query tasks by epic
389
+ */
390
+ function getTasksByEpic(repository, epicId) {
391
+ return Array.from(repository.tasks.values()).filter(task => task.epic === epicId);
392
+ }
393
+ /**
394
+ * Initialize a new repository
395
+ */
396
+ async function initializeRepository(rootPath) {
397
+ return (0, files_1.ensurePlanfsStructure)(rootPath);
398
+ }
399
+ /**
400
+ * Get next task ID
401
+ */
402
+ function getNextTaskId(repository) {
403
+ let maxNum = 0;
404
+ for (const id of repository.tasks.keys()) {
405
+ if (id.startsWith('TASK-')) {
406
+ const num = parseInt(id.substring(5), 10);
407
+ if (!isNaN(num) && num > maxNum) {
408
+ maxNum = num;
409
+ }
410
+ }
411
+ }
412
+ return `TASK-${String(maxNum + 1).padStart(3, '0')}`;
413
+ }
414
+ /**
415
+ * Get an available epic ID from a title
416
+ */
417
+ function getNextEpicId(repository, title) {
418
+ return getAvailableSlugId('EPIC', title, repository.epics);
419
+ }
420
+ /**
421
+ * Get an available milestone ID from a title
422
+ */
423
+ function getNextMilestoneId(repository, title) {
424
+ return getAvailableSlugId('MILESTONE', title, repository.milestones);
425
+ }
426
+ /**
427
+ * Create a new task template
428
+ */
429
+ function createTaskTemplate(id, title) {
430
+ const now = new Date().toISOString();
431
+ return {
432
+ id,
433
+ type: 'task',
434
+ title,
435
+ status: 'todo',
436
+ filePath: '',
437
+ metadata: {},
438
+ body: '',
439
+ createdAt: now,
440
+ updatedAt: now
441
+ };
442
+ }
443
+ /**
444
+ * Create a new epic template
445
+ */
446
+ function createEpicTemplate(id, title) {
447
+ const now = new Date().toISOString();
448
+ return {
449
+ id,
450
+ type: 'epic',
451
+ title,
452
+ status: 'active',
453
+ filePath: '',
454
+ metadata: {},
455
+ body: '',
456
+ createdAt: now,
457
+ updatedAt: now
458
+ };
459
+ }
460
+ /**
461
+ * Create a new milestone template
462
+ */
463
+ function createMilestoneTemplate(id, title, targetDate) {
464
+ const now = new Date().toISOString();
465
+ return {
466
+ id,
467
+ type: 'milestone',
468
+ title,
469
+ status: 'active',
470
+ targetDate,
471
+ filePath: '',
472
+ metadata: {},
473
+ body: '',
474
+ createdAt: now,
475
+ updatedAt: now
476
+ };
477
+ }
478
+ function getAvailableSlugId(prefix, title, existing) {
479
+ const base = `${prefix}-${slugify(title)}`;
480
+ let candidate = base;
481
+ let suffix = 2;
482
+ while (existing.has(candidate)) {
483
+ candidate = `${base}-${suffix}`;
484
+ suffix += 1;
485
+ }
486
+ return candidate;
487
+ }
488
+ function slugify(value) {
489
+ return value
490
+ .trim()
491
+ .toLowerCase()
492
+ .replace(/[^a-z0-9]+/g, '-')
493
+ .replace(/^-+|-+$/g, '') || 'untitled';
494
+ }
495
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Search and filtering helpers
3
+ */
4
+ import { Entity, Repository, Task } from './types';
5
+ export interface EntityFilterCriteria {
6
+ query?: string;
7
+ status?: string | string[];
8
+ assignee?: string;
9
+ epic?: string;
10
+ milestone?: string;
11
+ priority?: string;
12
+ refinementState?: string;
13
+ tags?: string[];
14
+ }
15
+ export interface SavedFilter {
16
+ id: string;
17
+ name: string;
18
+ description?: string;
19
+ criteria: EntityFilterCriteria;
20
+ }
21
+ export declare function searchEntities(repository: Repository, criteria?: EntityFilterCriteria): Entity[];
22
+ export declare function searchTasks(repository: Repository, criteria?: EntityFilterCriteria): Task[];
23
+ export declare function matchesCriteria(entity: Entity, criteria?: EntityFilterCriteria): boolean;
24
+ export declare function loadSavedFilters(rootPath: string): Promise<SavedFilter[]>;
25
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAGnD,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAED,wBAAgB,cAAc,CAC5B,UAAU,EAAE,UAAU,EACtB,QAAQ,GAAE,oBAAyB,GAClC,MAAM,EAAE,CAEV;AAED,wBAAgB,WAAW,CACzB,UAAU,EAAE,UAAU,EACtB,QAAQ,GAAE,oBAAyB,GAClC,IAAI,EAAE,CAIR;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,oBAAyB,GAClC,OAAO,CAgDT;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA0B/E"}