@polagram/core 0.0.3 → 0.1.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 (99) hide show
  1. package/dist/index.d.ts +172 -85
  2. package/dist/polagram-core.js +2721 -2061
  3. package/dist/polagram-core.umd.cjs +20 -14
  4. package/package.json +11 -9
  5. package/dist/src/api.d.ts +0 -75
  6. package/dist/src/api.js +0 -160
  7. package/dist/src/ast/ast.test.d.ts +0 -1
  8. package/dist/src/ast/ast.test.js +0 -146
  9. package/dist/src/ast/index.d.ts +0 -119
  10. package/dist/src/ast/index.js +0 -2
  11. package/dist/src/config/index.d.ts +0 -1
  12. package/dist/src/config/index.js +0 -1
  13. package/dist/src/config/schema.d.ts +0 -182
  14. package/dist/src/config/schema.js +0 -78
  15. package/dist/src/config/schema.test.d.ts +0 -1
  16. package/dist/src/config/schema.test.js +0 -94
  17. package/dist/src/generator/base/walker.d.ts +0 -19
  18. package/dist/src/generator/base/walker.js +0 -56
  19. package/dist/src/generator/base/walker.test.d.ts +0 -1
  20. package/dist/src/generator/base/walker.test.js +0 -49
  21. package/dist/src/generator/generators/mermaid.d.ts +0 -24
  22. package/dist/src/generator/generators/mermaid.js +0 -140
  23. package/dist/src/generator/generators/mermaid.test.d.ts +0 -1
  24. package/dist/src/generator/generators/mermaid.test.js +0 -70
  25. package/dist/src/generator/interface.d.ts +0 -17
  26. package/dist/src/generator/interface.js +0 -1
  27. package/dist/src/index.d.ts +0 -9
  28. package/dist/src/index.js +0 -17
  29. package/dist/src/parser/base/lexer.d.ts +0 -18
  30. package/dist/src/parser/base/lexer.js +0 -95
  31. package/dist/src/parser/base/lexer.test.d.ts +0 -1
  32. package/dist/src/parser/base/lexer.test.js +0 -53
  33. package/dist/src/parser/base/parser.d.ts +0 -14
  34. package/dist/src/parser/base/parser.js +0 -43
  35. package/dist/src/parser/base/parser.test.d.ts +0 -1
  36. package/dist/src/parser/base/parser.test.js +0 -90
  37. package/dist/src/parser/index.d.ts +0 -10
  38. package/dist/src/parser/index.js +0 -29
  39. package/dist/src/parser/index.test.d.ts +0 -1
  40. package/dist/src/parser/index.test.js +0 -23
  41. package/dist/src/parser/interface.d.ts +0 -8
  42. package/dist/src/parser/interface.js +0 -1
  43. package/dist/src/parser/languages/mermaid/constants.d.ts +0 -7
  44. package/dist/src/parser/languages/mermaid/constants.js +0 -20
  45. package/dist/src/parser/languages/mermaid/index.d.ts +0 -4
  46. package/dist/src/parser/languages/mermaid/index.js +0 -11
  47. package/dist/src/parser/languages/mermaid/lexer.d.ts +0 -14
  48. package/dist/src/parser/languages/mermaid/lexer.js +0 -152
  49. package/dist/src/parser/languages/mermaid/lexer.test.d.ts +0 -1
  50. package/dist/src/parser/languages/mermaid/lexer.test.js +0 -58
  51. package/dist/src/parser/languages/mermaid/parser.d.ts +0 -21
  52. package/dist/src/parser/languages/mermaid/parser.js +0 -340
  53. package/dist/src/parser/languages/mermaid/parser.test.d.ts +0 -1
  54. package/dist/src/parser/languages/mermaid/parser.test.js +0 -252
  55. package/dist/src/parser/languages/mermaid/tokens.d.ts +0 -9
  56. package/dist/src/parser/languages/mermaid/tokens.js +0 -1
  57. package/dist/src/transformer/cleaners/prune-empty.d.ts +0 -9
  58. package/dist/src/transformer/cleaners/prune-empty.js +0 -27
  59. package/dist/src/transformer/cleaners/prune-empty.test.d.ts +0 -1
  60. package/dist/src/transformer/cleaners/prune-empty.test.js +0 -69
  61. package/dist/src/transformer/cleaners/prune-unused.d.ts +0 -5
  62. package/dist/src/transformer/cleaners/prune-unused.js +0 -48
  63. package/dist/src/transformer/cleaners/prune-unused.test.d.ts +0 -1
  64. package/dist/src/transformer/cleaners/prune-unused.test.js +0 -71
  65. package/dist/src/transformer/filters/focus.d.ts +0 -13
  66. package/dist/src/transformer/filters/focus.js +0 -71
  67. package/dist/src/transformer/filters/focus.test.d.ts +0 -1
  68. package/dist/src/transformer/filters/focus.test.js +0 -50
  69. package/dist/src/transformer/filters/remove.d.ts +0 -12
  70. package/dist/src/transformer/filters/remove.js +0 -82
  71. package/dist/src/transformer/filters/remove.test.d.ts +0 -1
  72. package/dist/src/transformer/filters/remove.test.js +0 -38
  73. package/dist/src/transformer/filters/resolve.d.ts +0 -9
  74. package/dist/src/transformer/filters/resolve.js +0 -32
  75. package/dist/src/transformer/filters/resolve.test.d.ts +0 -1
  76. package/dist/src/transformer/filters/resolve.test.js +0 -48
  77. package/dist/src/transformer/index.d.ts +0 -10
  78. package/dist/src/transformer/index.js +0 -10
  79. package/dist/src/transformer/lens.d.ts +0 -12
  80. package/dist/src/transformer/lens.js +0 -58
  81. package/dist/src/transformer/lens.test.d.ts +0 -1
  82. package/dist/src/transformer/lens.test.js +0 -60
  83. package/dist/src/transformer/orchestration/engine.d.ts +0 -5
  84. package/dist/src/transformer/orchestration/engine.js +0 -24
  85. package/dist/src/transformer/orchestration/engine.test.d.ts +0 -1
  86. package/dist/src/transformer/orchestration/engine.test.js +0 -41
  87. package/dist/src/transformer/orchestration/registry.d.ts +0 -10
  88. package/dist/src/transformer/orchestration/registry.js +0 -27
  89. package/dist/src/transformer/selector/matcher.d.ts +0 -9
  90. package/dist/src/transformer/selector/matcher.js +0 -62
  91. package/dist/src/transformer/selector/matcher.test.d.ts +0 -1
  92. package/dist/src/transformer/selector/matcher.test.js +0 -53
  93. package/dist/src/transformer/traverse/walker.d.ts +0 -14
  94. package/dist/src/transformer/traverse/walker.js +0 -67
  95. package/dist/src/transformer/traverse/walker.test.d.ts +0 -1
  96. package/dist/src/transformer/traverse/walker.test.js +0 -48
  97. package/dist/src/transformer/types.d.ts +0 -47
  98. package/dist/src/transformer/types.js +0 -1
  99. package/dist/tsconfig.tsbuildinfo +0 -1
package/dist/index.d.ts CHANGED
@@ -12,10 +12,16 @@ export declare interface ActivationNode {
12
12
  }
13
13
 
14
14
  /**
15
- * Apply a lens object to the AST.
16
- * Facade for the TransformationEngine.
15
+ * Supported diagram formats
17
16
  */
18
- export declare function applyLens(root: PolagramRoot, lens: Lens): PolagramRoot;
17
+ export declare type DiagramFormat = 'mermaid' | 'plantuml';
18
+
19
+ /**
20
+ * Generator interface that all generators must implement.
21
+ */
22
+ export declare interface DiagramGenerator {
23
+ generate(ast: PolagramRoot): string;
24
+ }
19
25
 
20
26
  /**
21
27
  * Strategy Interface for Diagram Parsing.
@@ -33,22 +39,55 @@ export declare interface DividerNode {
33
39
 
34
40
  export declare type EventNode = MessageNode | FragmentNode | NoteNode | DividerNode | ActivationNode | ReferenceNode | SpacerNode;
35
41
 
36
- export declare class FocusFilter extends Walker {
37
- private layer;
38
- private matcher;
39
- private targetParticipantIds;
40
- constructor(layer: FocusLayer);
41
- transform(root: PolagramRoot): PolagramRoot;
42
- private resolveTargetParticipants;
43
- protected visitEvent(node: EventNode): EventNode[];
44
- private isRelatedToParticipant;
45
- }
46
-
47
42
  export declare interface FocusLayer {
48
43
  action: 'focus';
49
44
  selector: ParticipantSelector;
50
45
  }
51
46
 
47
+ /**
48
+ * Format detection utilities for diagram source code.
49
+ * Detects diagram format based on file extension and content analysis.
50
+ */
51
+ export declare const FormatDetector: {
52
+ /**
53
+ * Detect diagram format from file path and content.
54
+ *
55
+ * @param filePath - Path to the diagram file
56
+ * @param content - Content of the diagram file
57
+ * @returns Detected format, or null if format cannot be determined
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const format = FormatDetector.detect('diagram.puml', content);
62
+ * if (format === 'plantuml') {
63
+ * // Process as PlantUML
64
+ * }
65
+ * ```
66
+ */
67
+ detect(filePath: string, content: string): DiagramFormat | null;
68
+ /**
69
+ * Detect format based on file extension.
70
+ *
71
+ * @param filePath - Path to the diagram file
72
+ * @returns Detected format, or null if extension is not recognized
73
+ */
74
+ detectByExtension(filePath: string): DiagramFormat | null;
75
+ /**
76
+ * Detect format based on content patterns.
77
+ *
78
+ * @param content - Content of the diagram file
79
+ * @returns Detected format, or null if no pattern matches
80
+ */
81
+ detectByContent(content: string): DiagramFormat | null;
82
+ /**
83
+ * Get file extension for a given format.
84
+ *
85
+ * @param format - Diagram format
86
+ * @returns Default file extension for the format
87
+ */
88
+ getDefaultExtension(format: DiagramFormat): string;
89
+ };
90
+
52
91
  export declare interface FragmentBranch {
53
92
  id: string;
54
93
  condition?: string;
@@ -65,13 +104,50 @@ export declare interface FragmentNode {
65
104
  export declare type FragmentOperator = 'alt' | 'opt' | 'loop' | 'par' | 'break' | 'critical' | 'rect' | 'group';
66
105
 
67
106
  export declare interface FragmentSelector {
68
- kind?: 'fragment';
107
+ kind: 'fragment';
69
108
  condition?: TextMatcher;
70
109
  operator?: FragmentOperator | FragmentOperator[];
71
110
  }
72
111
 
112
+ declare type GeneratorConstructor = () => PolagramVisitor & DiagramGenerator;
113
+
114
+ /**
115
+ * Generator Factory
116
+ * Centralizes retrieval of generator strategies.
117
+ * Mirrors the ParserFactory pattern for consistency.
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * const generator = GeneratorFactory.getGenerator('mermaid');
122
+ * const code = generator.generate(ast);
123
+ * ```
124
+ */
125
+ export declare const GeneratorFactory: {
126
+ /**
127
+ * Register a custom generator.
128
+ * @param language - Language identifier (e.g., 'mermaid', 'plantuml')
129
+ * @param factory - Factory function that creates a generator instance
130
+ */
131
+ register(language: string, factory: GeneratorConstructor): void;
132
+ /**
133
+ * Get a generator for the specified language.
134
+ * @param language - Language identifier
135
+ * @returns A generator instance
136
+ * @throws Error if no generator is registered for the language
137
+ */
138
+ getGenerator(language: string): PolagramVisitor & DiagramGenerator;
139
+ /**
140
+ * Check if a generator is registered for the given language.
141
+ */
142
+ hasGenerator(language: string): boolean;
143
+ /**
144
+ * Get list of registered languages.
145
+ */
146
+ getLanguages(): string[];
147
+ };
148
+
73
149
  export declare interface GroupSelector {
74
- kind?: 'group';
150
+ kind: 'group';
75
151
  name?: TextMatcher;
76
152
  }
77
153
 
@@ -139,14 +215,6 @@ declare const LensSchema: z.ZodObject<{
139
215
  }, z.core.$strip>>;
140
216
  }, z.core.$strip>;
141
217
 
142
- export declare class Matcher {
143
- matchBranch(branch: FragmentBranch, selector: FragmentSelector, parentOperator: FragmentOperator): boolean;
144
- matchParticipant(node: Participant, selector: ParticipantSelector): boolean;
145
- matchMessage(node: MessageNode, selector: MessageSelector): boolean;
146
- matchGroup(node: ParticipantGroup, selector: GroupSelector): boolean;
147
- private matchText;
148
- }
149
-
150
218
  /**
151
219
  * Visitor implementation that generates Mermaid code.
152
220
  */
@@ -195,7 +263,7 @@ export declare interface MessageNode {
195
263
  }
196
264
 
197
265
  export declare interface MessageSelector {
198
- kind?: 'message';
266
+ kind: 'message';
199
267
  text?: TextMatcher;
200
268
  from?: TextMatcher;
201
269
  to?: TextMatcher;
@@ -221,11 +289,10 @@ export declare interface NoteNode {
221
289
  * Parser Factory
222
290
  * Centralizes retrieval of parser strategies.
223
291
  */
224
- export declare class ParserFactory {
225
- private static parsers;
226
- static register(language: string, parser: DiagramParser): void;
227
- static getParser(language: string): DiagramParser;
228
- }
292
+ export declare const ParserFactory: {
293
+ register(language: string, parser: DiagramParser): void;
294
+ getParser(language: string): DiagramParser;
295
+ };
229
296
 
230
297
  export declare interface Participant {
231
298
  id: string;
@@ -246,7 +313,7 @@ export declare interface ParticipantGroup {
246
313
  }
247
314
 
248
315
  export declare interface ParticipantSelector {
249
- kind?: 'participant';
316
+ kind: 'participant';
250
317
  name?: TextMatcher;
251
318
  id?: TextMatcher;
252
319
  stereotype?: TextMatcher;
@@ -254,6 +321,29 @@ export declare interface ParticipantSelector {
254
321
 
255
322
  export declare type ParticipantType = 'participant' | 'actor' | 'boundary' | 'control' | 'entity' | 'database' | 'collections' | 'queue';
256
323
 
324
+ /**
325
+ * Visitor implementation that generates PlantUML code.
326
+ * Uses the same Traverser pattern as MermaidGeneratorVisitor for consistency.
327
+ */
328
+ export declare class PlantUMLGeneratorVisitor implements PolagramVisitor {
329
+ private lines;
330
+ private traverser;
331
+ constructor();
332
+ generate(root: PolagramRoot): string;
333
+ visitRoot(node: PolagramRoot): void;
334
+ visitParticipant(node: Participant): void;
335
+ visitParticipantGroup(_node: ParticipantGroup): void;
336
+ private visitGroup;
337
+ visitMessage(node: MessageNode): void;
338
+ visitFragment(node: FragmentNode): void;
339
+ visitNote(node: NoteNode): void;
340
+ visitActivation(node: ActivationNode): void;
341
+ visitDivider(node: DividerNode): void;
342
+ visitSpacer(_node: SpacerNode): void;
343
+ visitReference(node: ReferenceNode): void;
344
+ private add;
345
+ }
346
+
257
347
  /**
258
348
  * Polagram Fluent API
259
349
  *
@@ -270,9 +360,9 @@ export declare class Polagram {
270
360
  /**
271
361
  * Initialize a new Polagram transformation pipeline.
272
362
  * @param code Source diagram code
273
- * @param format Input format (currently only 'mermaid' is supported)
363
+ * @param format Input format ('mermaid' or 'plantuml')
274
364
  */
275
- static init(code: string, format?: 'mermaid'): PolagramBuilder;
365
+ static init(code: string, format?: 'mermaid' | 'plantuml'): PolagramBuilder;
276
366
  }
277
367
 
278
368
  /**
@@ -281,7 +371,8 @@ export declare class Polagram {
281
371
  export declare class PolagramBuilder {
282
372
  private ast;
283
373
  private layers;
284
- constructor(ast: PolagramRoot);
374
+ private sourceFormat;
375
+ constructor(ast: PolagramRoot, sourceFormat?: 'mermaid' | 'plantuml');
285
376
  /**
286
377
  * Focus on specific participants.
287
378
  * Keeps only interactions involving the matched participants.
@@ -318,10 +409,18 @@ export declare class PolagramBuilder {
318
409
  * Generate Mermaid code from the transformed AST.
319
410
  */
320
411
  toMermaid(): string;
412
+ /**
413
+ * Generate PlantUML code from the transformed AST.
414
+ */
415
+ toPlantUML(): string;
321
416
  /**
322
417
  * Get the transformed AST (for advanced use cases).
323
418
  */
324
419
  toAST(): PolagramRoot;
420
+ /**
421
+ * Get the source format detected/specified during init.
422
+ */
423
+ getSourceFormat(): 'mermaid' | 'plantuml';
325
424
  private normalizeParticipantSelector;
326
425
  private normalizeMessageSelector;
327
426
  private normalizeGroupSelector;
@@ -390,6 +489,14 @@ export declare const PolagramConfigSchema: z.ZodObject<{
390
489
  }, z.core.$strip>], "kind">;
391
490
  }, z.core.$strip>>;
392
491
  }, z.core.$strip>>;
492
+ format: z.ZodOptional<z.ZodEnum<{
493
+ mermaid: "mermaid";
494
+ plantuml: "plantuml";
495
+ }>>;
496
+ outputFormat: z.ZodOptional<z.ZodEnum<{
497
+ mermaid: "mermaid";
498
+ plantuml: "plantuml";
499
+ }>>;
393
500
  }, z.core.$strip>>;
394
501
  }, z.core.$strip>;
395
502
 
@@ -439,28 +546,11 @@ export declare interface ReferenceNode {
439
546
  link?: string;
440
547
  }
441
548
 
442
- export declare class RemoveFilter extends Walker {
443
- private layer;
444
- private matcher;
445
- private removedParticipantIds;
446
- constructor(layer: RemoveLayer);
447
- transform(root: PolagramRoot): PolagramRoot;
448
- protected visitEvent(node: EventNode): EventNode[];
449
- private isRelatedToRemovedParticipant;
450
- }
451
-
452
549
  export declare interface RemoveLayer {
453
550
  action: 'remove';
454
551
  selector: ParticipantSelector | MessageSelector | GroupSelector;
455
552
  }
456
553
 
457
- export declare class ResolveFilter extends Walker {
458
- private layer;
459
- private matcher;
460
- constructor(layer: ResolveLayer);
461
- protected visitFragment(node: FragmentNode): EventNode[];
462
- }
463
-
464
554
  export declare interface ResolveLayer {
465
555
  action: 'resolve';
466
556
  selector: FragmentSelector;
@@ -473,14 +563,6 @@ export declare interface SpacerNode {
473
563
  text?: string;
474
564
  }
475
565
 
476
- /**
477
- * Cleaner that removes empty fragments and branches from the AST.
478
- * This runs after filters to ensure the AST structure remains valid/clean.
479
- */
480
- export declare class StructureCleaner extends Walker {
481
- protected visitFragment(node: FragmentNode): EventNode[];
482
- }
483
-
484
566
  export declare interface StyleProps {
485
567
  color?: string;
486
568
  backgroundColor?: string;
@@ -546,6 +628,14 @@ declare const TargetConfigSchema: z.ZodObject<{
546
628
  }, z.core.$strip>], "kind">;
547
629
  }, z.core.$strip>>;
548
630
  }, z.core.$strip>>;
631
+ format: z.ZodOptional<z.ZodEnum<{
632
+ mermaid: "mermaid";
633
+ plantuml: "plantuml";
634
+ }>>;
635
+ outputFormat: z.ZodOptional<z.ZodEnum<{
636
+ mermaid: "mermaid";
637
+ plantuml: "plantuml";
638
+ }>>;
549
639
  }, z.core.$strip>;
550
640
 
551
641
  export declare type TextMatcher = string | RegExp | {
@@ -562,13 +652,35 @@ declare interface Transformer_2 {
562
652
  }
563
653
  export { Transformer_2 as Transformer }
564
654
 
565
- declare type TransformerFactory = (layer: Layer) => Transformer_2;
655
+ /**
656
+ * Type-safe factory function type for creating transformers.
657
+ */
658
+ declare type TransformerFactory<T extends Layer = Layer> = (layer: T) => Transformer_2;
566
659
 
660
+ /**
661
+ * Registry for transformer factories.
662
+ * Provides type-safe registration and retrieval of transformers.
663
+ */
567
664
  declare class TransformerRegistry {
568
665
  private factories;
569
666
  constructor();
667
+ /**
668
+ * Type-safe registration for a specific layer type.
669
+ */
670
+ private registerTyped;
671
+ /**
672
+ * Register a custom transformer factory.
673
+ */
570
674
  register(action: string, factory: TransformerFactory): void;
675
+ /**
676
+ * Get a transformer for the given layer.
677
+ * @returns Transformer instance or null if no factory is registered
678
+ */
571
679
  get(layer: Layer): Transformer_2 | null;
680
+ /**
681
+ * Check if a transformer is registered for the given action.
682
+ */
683
+ has(action: string): boolean;
572
684
  }
573
685
 
574
686
  export declare const transformerRegistry: TransformerRegistry;
@@ -591,35 +703,10 @@ export declare class Traverser {
591
703
  dispatchEvents(events: EventNode[]): void;
592
704
  }
593
705
 
594
- export declare class UnusedCleaner {
595
- transform(root: PolagramRoot): PolagramRoot;
596
- private collectUsedParticipants;
597
- }
598
-
599
706
  /**
600
707
  * Validates the input object against the Polagram Config Schema.
601
708
  * Throws a formatted error message if validation fails.
602
709
  */
603
710
  export declare function validateConfig(input: unknown): PolagramConfig;
604
711
 
605
- /**
606
- * Type Guard to validate if an object is a valid Lens.
607
- * Acts as an Anti-Corruption Layer.
608
- */
609
- export declare function validateLens(lens: unknown): lens is Lens;
610
-
611
- /**
612
- * Abstract base class for tree transformations.
613
- * Implements the "Updating Visitor" pattern with Copy-on-Write immutability.
614
- *
615
- * Subclasses should override `visitEvent` to apply specific logic.
616
- */
617
- declare abstract class Walker {
618
- transform(root: PolagramRoot): PolagramRoot;
619
- protected mapEvents(events: EventNode[]): EventNode[];
620
- protected visitEvent(node: EventNode): EventNode[];
621
- protected visitFragment(node: FragmentNode): EventNode[];
622
- protected visitBranch(branch: FragmentBranch): FragmentBranch;
623
- }
624
-
625
712
  export { }