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,540 @@
1
+ "use strict";
2
+ /**
3
+ * Validation module
4
+ * Validates entities against schemas
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.validateEntity = validateEntity;
11
+ exports.validateRepository = validateRepository;
12
+ exports.validateAll = validateAll;
13
+ const ajv_1 = __importDefault(require("ajv"));
14
+ const planfs_schema_1 = require("planfs-schema");
15
+ const references_1 = require("./references");
16
+ const ajv = new ajv_1.default({ strict: false, validateFormats: false });
17
+ const schemaValidators = {
18
+ task: ajv.compile(planfs_schema_1.taskSchema),
19
+ epic: ajv.compile(planfs_schema_1.epicSchema),
20
+ milestone: ajv.compile(planfs_schema_1.milestoneSchema),
21
+ decision: ajv.compile(planfs_schema_1.decisionSchema)
22
+ };
23
+ const ALLOWED_METADATA_FIELDS = {
24
+ task: new Set([
25
+ 'id',
26
+ 'title',
27
+ 'status',
28
+ 'priority',
29
+ 'assignee',
30
+ 'epic',
31
+ 'milestone',
32
+ 'dependsOn',
33
+ 'tags',
34
+ 'dueDate',
35
+ 'estimate',
36
+ 'refinementState',
37
+ 'backlogOrder',
38
+ 'links',
39
+ 'archive',
40
+ 'createdAt',
41
+ 'updatedAt'
42
+ ]),
43
+ epic: new Set([
44
+ 'id',
45
+ 'title',
46
+ 'status',
47
+ 'priority',
48
+ 'owner',
49
+ 'description',
50
+ 'targetDate',
51
+ 'tags',
52
+ 'links',
53
+ 'archive',
54
+ 'createdAt',
55
+ 'updatedAt'
56
+ ]),
57
+ milestone: new Set([
58
+ 'id',
59
+ 'title',
60
+ 'status',
61
+ 'targetDate',
62
+ 'description',
63
+ 'owner',
64
+ 'links',
65
+ 'createdAt',
66
+ 'updatedAt'
67
+ ]),
68
+ decision: new Set([
69
+ 'id',
70
+ 'title',
71
+ 'status',
72
+ 'date',
73
+ 'context',
74
+ 'decision',
75
+ 'consequences',
76
+ 'author',
77
+ 'supersedes',
78
+ 'supersededBy',
79
+ 'createdAt',
80
+ 'updatedAt'
81
+ ])
82
+ };
83
+ const STALE_UPDATED_AT_DAYS = 180;
84
+ /**
85
+ * Validate a single entity
86
+ */
87
+ function validateEntity(entity) {
88
+ const errors = [...entity.diagnostics ?? []];
89
+ const validateSchema = schemaValidators[entity.type];
90
+ if (validateSchema && !validateSchema(entity)) {
91
+ errors.push(...formatSchemaErrors(entity, validateSchema.errors ?? []));
92
+ }
93
+ errors.push(...validateSupportedMetadata(entity));
94
+ // Check required fields
95
+ if (!entity.id) {
96
+ errors.push({
97
+ path: entity.filePath,
98
+ message: `Missing required field 'id' in ${entity.filePath || 'entity'}. Repair by adding an id that matches the file name to YAML frontmatter.`,
99
+ severity: 'error'
100
+ });
101
+ }
102
+ if (!entity.title) {
103
+ errors.push({
104
+ id: entity.id,
105
+ path: entity.filePath,
106
+ message: `Missing required field 'title' in ${entity.filePath || entity.id}. Repair by adding title: <short summary> to YAML frontmatter.`,
107
+ severity: 'error'
108
+ });
109
+ }
110
+ errors.push(...validateTimestamps(entity));
111
+ errors.push(...validateArchiveMetadata(entity));
112
+ // Type-specific validation
113
+ switch (entity.type) {
114
+ case 'task':
115
+ errors.push(...validateTask(entity));
116
+ break;
117
+ case 'epic':
118
+ errors.push(...validateEpic(entity));
119
+ break;
120
+ case 'milestone':
121
+ errors.push(...validateMilestone(entity));
122
+ break;
123
+ case 'decision':
124
+ errors.push(...validateDecision(entity));
125
+ break;
126
+ }
127
+ return errors;
128
+ }
129
+ function validateArchiveMetadata(entity) {
130
+ if (!entity.archive && entity.metadata.archive === undefined) {
131
+ return [];
132
+ }
133
+ const archive = entity.archive ?? entity.metadata.archive;
134
+ if (typeof archive !== 'object' || archive === null) {
135
+ return [{
136
+ id: entity.id,
137
+ path: entity.filePath,
138
+ message: 'Archive metadata must be an object',
139
+ severity: 'error'
140
+ }];
141
+ }
142
+ const record = archive;
143
+ const errors = [];
144
+ if (typeof record.archivedAt !== 'string' || parseDate(record.archivedAt) === undefined) {
145
+ errors.push({
146
+ id: entity.id,
147
+ path: entity.filePath,
148
+ message: 'Archive metadata archivedAt must be an ISO 8601 timestamp',
149
+ severity: 'error'
150
+ });
151
+ }
152
+ if (typeof record.originalPath !== 'string' || !record.originalPath.trim()) {
153
+ errors.push({
154
+ id: entity.id,
155
+ path: entity.filePath,
156
+ message: 'Archive metadata originalPath is required',
157
+ severity: 'error'
158
+ });
159
+ }
160
+ return errors;
161
+ }
162
+ function formatSchemaErrors(entity, schemaErrors) {
163
+ return schemaErrors.map(error => {
164
+ const field = error.instancePath
165
+ ? error.instancePath.replace(/^\//, '').replace(/\//g, '.')
166
+ : error.params && 'missingProperty' in error.params
167
+ ? String(error.params.missingProperty)
168
+ : 'entity';
169
+ return {
170
+ id: entity.id,
171
+ path: entity.filePath,
172
+ message: `Schema validation failed for ${field}: ${error.message ?? 'invalid value'}`,
173
+ severity: 'error'
174
+ };
175
+ });
176
+ }
177
+ function validateSupportedMetadata(entity) {
178
+ const allowed = ALLOWED_METADATA_FIELDS[entity.type];
179
+ return Object.keys(entity.metadata ?? {})
180
+ .filter(field => !allowed.has(field))
181
+ .map(field => ({
182
+ id: entity.id,
183
+ path: entity.filePath,
184
+ message: `Unsupported ${entity.type} metadata field: ${field}`,
185
+ severity: 'warning'
186
+ }));
187
+ }
188
+ function validateTimestamps(entity) {
189
+ const errors = [];
190
+ const createdAt = parseDate(entity.createdAt);
191
+ const updatedAt = parseDate(entity.updatedAt);
192
+ if (entity.createdAt && createdAt === undefined) {
193
+ errors.push({
194
+ id: entity.id,
195
+ message: `Invalid createdAt format: ${entity.createdAt}. Must be ISO 8601`,
196
+ severity: 'warning'
197
+ });
198
+ }
199
+ if (entity.updatedAt && updatedAt === undefined) {
200
+ errors.push({
201
+ id: entity.id,
202
+ message: `Invalid updatedAt format: ${entity.updatedAt}. Must be ISO 8601`,
203
+ severity: 'warning'
204
+ });
205
+ }
206
+ if (createdAt !== undefined && updatedAt !== undefined && updatedAt < createdAt) {
207
+ errors.push({
208
+ id: entity.id,
209
+ message: `Stale updatedAt: ${entity.updatedAt} is earlier than createdAt ${entity.createdAt}`,
210
+ severity: 'warning'
211
+ });
212
+ }
213
+ if (entity.type === 'task'
214
+ && entity.status !== 'done'
215
+ && entity.updatedAt
216
+ && isStaleDate(updatedAt, STALE_UPDATED_AT_DAYS)) {
217
+ errors.push({
218
+ id: entity.id,
219
+ message: `Stale updatedAt: open task has not been updated in ${STALE_UPDATED_AT_DAYS} days`,
220
+ severity: 'warning'
221
+ });
222
+ }
223
+ return errors;
224
+ }
225
+ function validateTask(task) {
226
+ const errors = [];
227
+ // Validate task status
228
+ const validStatuses = ['todo', 'in-progress', 'review', 'done'];
229
+ if (task.status && !validStatuses.includes(task.status)) {
230
+ errors.push({
231
+ id: task.id,
232
+ message: `Invalid task status: ${task.status}. Must be one of: ${validStatuses.join(', ')}`,
233
+ severity: 'error'
234
+ });
235
+ }
236
+ // Validate priority
237
+ if (task.priority) {
238
+ const validPriorities = ['low', 'medium', 'high', 'critical'];
239
+ if (!validPriorities.includes(task.priority)) {
240
+ errors.push({
241
+ id: task.id,
242
+ message: `Invalid task priority: ${task.priority}. Must be one of: ${validPriorities.join(', ')}`,
243
+ severity: 'error'
244
+ });
245
+ }
246
+ }
247
+ if (task.refinementState) {
248
+ const validRefinementStates = ['captured', 'needs-refinement', 'ready', 'deferred', 'discarded'];
249
+ if (!validRefinementStates.includes(task.refinementState)) {
250
+ errors.push({
251
+ id: task.id,
252
+ message: `Invalid refinementState: ${task.refinementState}. Must be one of: ${validRefinementStates.join(', ')}`,
253
+ severity: 'error'
254
+ });
255
+ }
256
+ }
257
+ if (task.backlogOrder !== undefined && typeof task.backlogOrder !== 'number') {
258
+ errors.push({
259
+ id: task.id,
260
+ message: 'Task backlogOrder must be a number',
261
+ severity: 'error'
262
+ });
263
+ }
264
+ // Validate dependencies format
265
+ if (task.dependsOn) {
266
+ if (!Array.isArray(task.dependsOn)) {
267
+ errors.push({
268
+ id: task.id,
269
+ message: 'Task dependsOn must be an array',
270
+ severity: 'error'
271
+ });
272
+ }
273
+ }
274
+ // Validate tags format
275
+ if (task.tags) {
276
+ if (!Array.isArray(task.tags)) {
277
+ errors.push({
278
+ id: task.id,
279
+ message: 'Task tags must be an array',
280
+ severity: 'error'
281
+ });
282
+ }
283
+ }
284
+ // Validate date format
285
+ if (task.dueDate && !isValidISODate(task.dueDate)) {
286
+ errors.push({
287
+ id: task.id,
288
+ message: `Invalid dueDate format: ${task.dueDate}. Must be ISO 8601`,
289
+ severity: 'warning'
290
+ });
291
+ }
292
+ return errors;
293
+ }
294
+ function validateEpic(epic) {
295
+ const errors = [];
296
+ // Validate epic status
297
+ const validStatuses = ['active', 'completed', 'on-hold', 'archived'];
298
+ if (epic.status && !validStatuses.includes(epic.status)) {
299
+ errors.push({
300
+ id: epic.id,
301
+ message: `Invalid epic status: ${epic.status}. Must be one of: ${validStatuses.join(', ')}`,
302
+ severity: 'error'
303
+ });
304
+ }
305
+ // Validate priority
306
+ if (epic.priority) {
307
+ const validPriorities = ['low', 'medium', 'high', 'critical'];
308
+ if (!validPriorities.includes(epic.priority)) {
309
+ errors.push({
310
+ id: epic.id,
311
+ message: `Invalid epic priority: ${epic.priority}. Must be one of: ${validPriorities.join(', ')}`,
312
+ severity: 'error'
313
+ });
314
+ }
315
+ }
316
+ return errors;
317
+ }
318
+ function validateMilestone(milestone) {
319
+ const errors = [];
320
+ // Validate milestone status
321
+ const validStatuses = ['active', 'completed', 'delayed'];
322
+ if (milestone.status && !validStatuses.includes(milestone.status)) {
323
+ errors.push({
324
+ id: milestone.id,
325
+ message: `Invalid milestone status: ${milestone.status}. Must be one of: ${validStatuses.join(', ')}`,
326
+ severity: 'error'
327
+ });
328
+ }
329
+ // Validate target date
330
+ if (!milestone.targetDate) {
331
+ errors.push({
332
+ id: milestone.id,
333
+ message: 'Milestone targetDate is required',
334
+ severity: 'error'
335
+ });
336
+ }
337
+ else if (!isValidISODate(milestone.targetDate)) {
338
+ errors.push({
339
+ id: milestone.id,
340
+ message: `Invalid targetDate format: ${milestone.targetDate}. Must be ISO 8601`,
341
+ severity: 'error'
342
+ });
343
+ }
344
+ return errors;
345
+ }
346
+ function validateDecision(decision) {
347
+ const errors = [];
348
+ // Validate decision status
349
+ const validStatuses = ['proposed', 'accepted', 'rejected', 'superseded'];
350
+ if (decision.status && !validStatuses.includes(decision.status)) {
351
+ errors.push({
352
+ id: decision.id,
353
+ message: `Invalid decision status: ${decision.status}. Must be one of: ${validStatuses.join(', ')}`,
354
+ severity: 'error'
355
+ });
356
+ }
357
+ return errors;
358
+ }
359
+ /**
360
+ * Validate a collection of entities for global constraints.
361
+ *
362
+ * referenceEntities can satisfy references without participating in duplicate
363
+ * ID or circular dependency checks for the active collection.
364
+ */
365
+ function validateRepository(entities, options = {}) {
366
+ const errors = [];
367
+ const idMap = new Map((options.referenceEntities ?? []).map(entity => [entity.id, entity]));
368
+ // Check for duplicate IDs
369
+ const seenIds = new Set();
370
+ for (const entity of entities) {
371
+ if (seenIds.has(entity.id)) {
372
+ errors.push({
373
+ id: entity.id,
374
+ path: entity.filePath,
375
+ message: `Duplicate entity ID: ${entity.id}`,
376
+ severity: 'error'
377
+ });
378
+ }
379
+ seenIds.add(entity.id);
380
+ idMap.set(entity.id, entity);
381
+ }
382
+ // Check references
383
+ for (const entity of entities) {
384
+ const refErrors = checkEntityReferences(entity, idMap);
385
+ errors.push(...refErrors);
386
+ }
387
+ // Check for circular dependencies
388
+ const circularDeps = findCircularDependencies(entities);
389
+ for (const [id, chain] of circularDeps) {
390
+ errors.push({
391
+ id,
392
+ message: `Circular dependency detected: ${chain.join(' -> ')} -> ${id}`,
393
+ severity: 'error'
394
+ });
395
+ }
396
+ return errors;
397
+ }
398
+ function checkEntityReferences(entity, idMap) {
399
+ const errors = [];
400
+ if (entity.type === 'task') {
401
+ const task = entity;
402
+ // Check epic reference
403
+ if (task.epic && !idMap.has(task.epic)) {
404
+ errors.push({
405
+ id: task.id,
406
+ message: `Referenced epic not found: ${task.epic}`,
407
+ severity: 'error'
408
+ });
409
+ }
410
+ else if (task.epic) {
411
+ const epic = idMap.get(task.epic);
412
+ if ((0, references_1.isArchivedReference)(epic)) {
413
+ errors.push({
414
+ id: task.id,
415
+ message: `Task references archived epic: ${task.epic}`,
416
+ severity: 'warning'
417
+ });
418
+ }
419
+ else if (epic.status === 'completed' || epic.status === 'archived') {
420
+ errors.push({
421
+ id: task.id,
422
+ message: `Task references ${epic.status} epic: ${task.epic}`,
423
+ severity: 'warning'
424
+ });
425
+ }
426
+ }
427
+ // Check milestone reference
428
+ if (task.milestone && !idMap.has(task.milestone)) {
429
+ errors.push({
430
+ id: task.id,
431
+ message: `Referenced milestone not found: ${task.milestone}`,
432
+ severity: 'error'
433
+ });
434
+ }
435
+ else if (task.milestone) {
436
+ const milestone = idMap.get(task.milestone);
437
+ if (milestone.status === 'completed' || milestone.status === 'delayed') {
438
+ errors.push({
439
+ id: task.id,
440
+ message: `Task references ${milestone.status} milestone: ${task.milestone}`,
441
+ severity: 'warning'
442
+ });
443
+ }
444
+ }
445
+ // Check dependencies
446
+ if (task.dependsOn) {
447
+ for (const dep of task.dependsOn) {
448
+ const dependency = idMap.get(dep);
449
+ if (!dependency) {
450
+ errors.push({
451
+ id: task.id,
452
+ message: `Referenced task not found: ${dep}`,
453
+ severity: 'error'
454
+ });
455
+ }
456
+ else if ((0, references_1.isArchivedReference)(dependency)) {
457
+ errors.push({
458
+ id: task.id,
459
+ message: `Task depends on archived task: ${dep}`,
460
+ severity: 'warning'
461
+ });
462
+ }
463
+ }
464
+ }
465
+ }
466
+ return errors;
467
+ }
468
+ function findCircularDependencies(entities) {
469
+ const circularDeps = new Map();
470
+ const taskMap = new Map();
471
+ // Build task map
472
+ for (const entity of entities) {
473
+ if (entity.type === 'task') {
474
+ taskMap.set(entity.id, entity);
475
+ }
476
+ }
477
+ // DFS to find cycles
478
+ for (const taskId of taskMap.keys()) {
479
+ const cycle = findCycle(taskId, taskMap, new Set(), []);
480
+ if (cycle) {
481
+ circularDeps.set(taskId, cycle);
482
+ }
483
+ }
484
+ return circularDeps;
485
+ }
486
+ function findCycle(nodeId, taskMap, visiting, path) {
487
+ if (visiting.has(nodeId)) {
488
+ const cycleStart = path.indexOf(nodeId);
489
+ return cycleStart >= 0 ? path.slice(cycleStart) : path;
490
+ }
491
+ const task = taskMap.get(nodeId);
492
+ if (!task) {
493
+ return undefined;
494
+ }
495
+ visiting.add(nodeId);
496
+ path.push(nodeId);
497
+ for (const dep of task.dependsOn ?? []) {
498
+ const cycle = findCycle(dep, taskMap, new Set(visiting), [...path]);
499
+ if (cycle) {
500
+ return cycle;
501
+ }
502
+ }
503
+ return undefined;
504
+ }
505
+ /**
506
+ * Check if a string is a valid ISO 8601 date
507
+ */
508
+ function isValidISODate(dateString) {
509
+ return parseDate(dateString) !== undefined;
510
+ }
511
+ function parseDate(dateString) {
512
+ if (!dateString) {
513
+ return undefined;
514
+ }
515
+ const date = new Date(dateString);
516
+ return isNaN(date.getTime()) ? undefined : date.getTime();
517
+ }
518
+ function isStaleDate(value, staleAfterDays) {
519
+ if (value === undefined) {
520
+ return true;
521
+ }
522
+ return Date.now() - value >= staleAfterDays * 86400000;
523
+ }
524
+ /**
525
+ * Validate all entities and return comprehensive result
526
+ */
527
+ function validateAll(entities) {
528
+ const errors = [];
529
+ // Validate individual entities
530
+ for (const entity of entities) {
531
+ errors.push(...validateEntity(entity));
532
+ }
533
+ // Validate repository constraints
534
+ errors.push(...validateRepository(entities));
535
+ return {
536
+ valid: !errors.some(e => e.severity === 'error'),
537
+ errors
538
+ };
539
+ }
540
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AA4FH,wCA+CC;AAuRD,gDAyCC;AAyJD,kCAeC;AAjnBD,8CAAyD;AACzD,iDAKuB;AAUvB,6CAAmD;AAEnD,MAAM,GAAG,GAAG,IAAI,aAAG,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/D,MAAM,gBAAgB,GAA6C;IACjE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,0BAAU,CAAC;IAC7B,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,0BAAU,CAAC;IAC7B,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,+BAAe,CAAC;IACvC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,8BAAc,CAAC;CACtC,CAAC;AACF,MAAM,uBAAuB,GAAwC;IACnE,IAAI,EAAE,IAAI,GAAG,CAAC;QACZ,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,UAAU;QACV,UAAU;QACV,MAAM;QACN,WAAW;QACX,WAAW;QACX,MAAM;QACN,SAAS;QACT,UAAU;QACV,iBAAiB;QACjB,cAAc;QACd,OAAO;QACP,SAAS;QACT,WAAW;QACX,WAAW;KACZ,CAAC;IACF,IAAI,EAAE,IAAI,GAAG,CAAC;QACZ,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,UAAU;QACV,OAAO;QACP,aAAa;QACb,YAAY;QACZ,MAAM;QACN,OAAO;QACP,SAAS;QACT,WAAW;QACX,WAAW;KACZ,CAAC;IACF,SAAS,EAAE,IAAI,GAAG,CAAC;QACjB,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,YAAY;QACZ,aAAa;QACb,OAAO;QACP,OAAO;QACP,WAAW;QACX,WAAW;KACZ,CAAC;IACF,QAAQ,EAAE,IAAI,GAAG,CAAC;QAChB,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,MAAM;QACN,SAAS;QACT,UAAU;QACV,cAAc;QACd,QAAQ;QACR,YAAY;QACZ,cAAc;QACd,WAAW;QACX,WAAW;KACZ,CAAC;CACH,CAAC;AACF,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC;;GAEG;AACH,SAAgB,cAAc,CAAC,MAAc;IAC3C,MAAM,MAAM,GAAsB,CAAC,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAErD,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;IAElD,wBAAwB;IACxB,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,OAAO,EAAE,kCAAkC,MAAM,CAAC,QAAQ,IAAI,QAAQ,0EAA0E;YAChJ,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,OAAO,EAAE,qCAAqC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,EAAE,gEAAgE;YAC1I,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhD,2BAA2B;IAC3B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,MAAM;YACT,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAc,CAAC,CAAC,CAAC;YAC7C,MAAM;QACR,KAAK,MAAM;YACT,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAc,CAAC,CAAC,CAAC;YAC7C,MAAM;QACR,KAAK,WAAW;YACd,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAmB,CAAC,CAAC,CAAC;YACvD,MAAM;QACR,KAAK,UAAU;YACb,MAAM,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAkB,CAAC,CAAC,CAAC;YACrD,MAAM;IACV,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAc;IAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC7D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC1D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,CAAC;gBACN,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,IAAI,EAAE,MAAM,CAAC,QAAQ;gBACrB,OAAO,EAAE,oCAAoC;gBAC7C,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,OAA2D,CAAC;IAC3E,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;QACxF,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,OAAO,EAAE,2DAA2D;YACpE,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3E,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,OAAO,EAAE,2CAA2C;YACpD,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAc,EACd,YAA2B;IAE3B,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY;YAC9B,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;YAC3D,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,iBAAiB,IAAI,KAAK,CAAC,MAAM;gBACjD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC;gBACtC,CAAC,CAAC,QAAQ,CAAC;QAEf,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,OAAO,EAAE,gCAAgC,KAAK,KAAK,KAAK,CAAC,OAAO,IAAI,eAAe,EAAE;YACrF,QAAQ,EAAE,OAAO;SAClB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAc;IAC/C,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;SACtC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACpC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACb,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,QAAQ;QACrB,OAAO,EAAE,eAAe,MAAM,CAAC,IAAI,oBAAoB,KAAK,EAAE;QAC9D,QAAQ,EAAE,SAAS;KACpB,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE9C,IAAI,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,OAAO,EAAE,6BAA6B,MAAM,CAAC,SAAS,oBAAoB;YAC1E,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,OAAO,EAAE,6BAA6B,MAAM,CAAC,SAAS,oBAAoB;YAC1E,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;QAChF,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,OAAO,EAAE,oBAAoB,MAAM,CAAC,SAAS,8BAA8B,MAAM,CAAC,SAAS,EAAE;YAC7F,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;IACL,CAAC;IAED,IACE,MAAM,CAAC,IAAI,KAAK,MAAM;WAClB,MAAe,CAAC,MAAM,KAAK,MAAM;WAClC,MAAM,CAAC,SAAS;WAChB,WAAW,CAAC,SAAS,EAAE,qBAAqB,CAAC,EAChD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,OAAO,EAAE,sDAAsD,qBAAqB,OAAO;YAC3F,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,IAAU;IAC9B,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,uBAAuB;IACvB,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChE,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,OAAO,EAAE,wBAAwB,IAAI,CAAC,MAAM,qBAAqB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC3F,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB;IACpB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC9D,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,OAAO,EAAE,0BAA0B,IAAI,CAAC,QAAQ,qBAAqB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACjG,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,MAAM,qBAAqB,GAAG,CAAC,UAAU,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACjG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,OAAO,EAAE,4BAA4B,IAAI,CAAC,eAAe,qBAAqB,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChH,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC7E,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,OAAO,EAAE,oCAAoC;YAC7C,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAED,+BAA+B;IAC/B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,OAAO,EAAE,iCAAiC;gBAC1C,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,OAAO,EAAE,4BAA4B;gBACrC,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,OAAO,EAAE,2BAA2B,IAAI,CAAC,OAAO,oBAAoB;YACpE,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,IAAU;IAC9B,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,uBAAuB;IACvB,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACrE,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,OAAO,EAAE,wBAAwB,IAAI,CAAC,MAAM,qBAAqB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC3F,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB;IACpB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC9D,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,OAAO,EAAE,0BAA0B,IAAI,CAAC,QAAQ,qBAAqB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACjG,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAoB;IAC7C,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,4BAA4B;IAC5B,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IACzD,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,OAAO,EAAE,6BAA6B,SAAS,CAAC,MAAM,qBAAqB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACrG,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,OAAO,EAAE,kCAAkC;YAC3C,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,OAAO,EAAE,8BAA8B,SAAS,CAAC,UAAU,oBAAoB;YAC/E,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAkB;IAC1C,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,2BAA2B;IAC3B,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IACzE,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,OAAO,EAAE,4BAA4B,QAAQ,CAAC,MAAM,qBAAqB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACnG,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAMD;;;;;GAKG;AACH,SAAgB,kBAAkB,CAChC,QAAkB,EAClB,UAAqC,EAAE;IAEvC,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,GAAG,CACnB,CAAC,OAAO,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CACrE,CAAC;IAEF,0BAA0B;IAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,IAAI,EAAE,MAAM,CAAC,QAAQ;gBACrB,OAAO,EAAE,wBAAwB,MAAM,CAAC,EAAE,EAAE;gBAC5C,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvB,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,mBAAmB;IACnB,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IAC5B,CAAC;IAED,kCAAkC;IAClC,MAAM,YAAY,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACxD,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC;YACV,EAAE;YACF,OAAO,EAAE,iCAAiC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;YACvE,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAAc,EACd,KAA0B;IAE1B,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAc,CAAC;QAE5B,uBAAuB;QACvB,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,OAAO,EAAE,8BAA8B,IAAI,CAAC,IAAI,EAAE;gBAClD,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAS,CAAC;YAC1C,IAAI,IAAA,gCAAmB,EAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,OAAO,EAAE,kCAAkC,IAAI,CAAC,IAAI,EAAE;oBACtD,QAAQ,EAAE,SAAS;iBACpB,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACrE,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,OAAO,EAAE,mBAAmB,IAAI,CAAC,MAAM,UAAU,IAAI,CAAC,IAAI,EAAE;oBAC5D,QAAQ,EAAE,SAAS;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,OAAO,EAAE,mCAAmC,IAAI,CAAC,SAAS,EAAE;gBAC5D,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAc,CAAC;YACzD,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACvE,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,OAAO,EAAE,mBAAmB,SAAS,CAAC,MAAM,eAAe,IAAI,CAAC,SAAS,EAAE;oBAC3E,QAAQ,EAAE,SAAS;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjC,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAqB,CAAC;gBACtD,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,CAAC,IAAI,CAAC;wBACV,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,OAAO,EAAE,8BAA8B,GAAG,EAAE;wBAC5C,QAAQ,EAAE,OAAO;qBAClB,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,IAAA,gCAAmB,EAAC,UAAU,CAAC,EAAE,CAAC;oBAC3C,MAAM,CAAC,IAAI,CAAC;wBACV,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,OAAO,EAAE,kCAAkC,GAAG,EAAE;wBAChD,QAAQ,EAAE,SAAS;qBACpB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAC,QAAkB;IAClD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgB,CAAC;IAExC,iBAAiB;IACjB,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAc,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACxD,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,SAAS,CAChB,MAAc,EACd,OAA0B,EAC1B,QAAqB,EACrB,IAAc;IAEd,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAElB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACpE,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,UAAkB;IACxC,OAAO,SAAS,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC;AAC7C,CAAC;AAED,SAAS,SAAS,CAAC,UAA8B;IAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,WAAW,CAAC,KAAyB,EAAE,cAAsB;IACpE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,cAAc,GAAG,QAAU,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,QAAkB;IAC5C,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,+BAA+B;IAC/B,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,kCAAkC;IAClC,MAAM,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE7C,OAAO;QACL,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;QAChD,MAAM;KACP,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "planfs-core",
3
+ "version": "1.2.0",
4
+ "description": "Core parsing and validation library for PlanFS",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "README.md",
10
+ "LICENSE*"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "build:watch": "tsc --watch",
15
+ "build:types": "tsc --emitDeclarationOnly",
16
+ "test": "jest",
17
+ "test:watch": "jest --watch",
18
+ "test:coverage": "jest --coverage",
19
+ "lint": "eslint src --ext .ts",
20
+ "clean": "rm -rf dist coverage"
21
+ },
22
+ "keywords": [
23
+ "planfs",
24
+ "parsing",
25
+ "validation",
26
+ "yaml",
27
+ "markdown"
28
+ ],
29
+ "author": "",
30
+ "license": "MIT",
31
+ "dependencies": {
32
+ "ajv": "^8.12.0",
33
+ "planfs-schema": "1.2.0",
34
+ "yaml": "^2.3.0"
35
+ },
36
+ "devDependencies": {
37
+ "@types/jest": "^30.0.0",
38
+ "@types/node": "^18.16.0",
39
+ "@typescript-eslint/eslint-plugin": "^8.61.1",
40
+ "@typescript-eslint/parser": "^8.61.1",
41
+ "eslint": "^8.57.0",
42
+ "jest": "^30.4.2",
43
+ "ts-jest": "^29.4.11",
44
+ "typescript": "^5.0.0"
45
+ }
46
+ }