@polagram/core 0.0.4 → 0.1.1

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 (119) hide show
  1. package/dist/index.d.ts +102 -113
  2. package/dist/polagram-core.js +1524 -1392
  3. package/dist/polagram-core.umd.cjs +23 -22
  4. package/package.json +3 -2
  5. package/dist/src/api.d.ts +0 -84
  6. package/dist/src/api.js +0 -183
  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 -198
  14. package/dist/src/config/schema.js +0 -82
  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/generators/plantuml.d.ts +0 -17
  26. package/dist/src/generator/generators/plantuml.js +0 -131
  27. package/dist/src/generator/generators/plantuml.test.d.ts +0 -1
  28. package/dist/src/generator/generators/plantuml.test.js +0 -143
  29. package/dist/src/generator/interface.d.ts +0 -17
  30. package/dist/src/generator/interface.js +0 -1
  31. package/dist/src/index.d.ts +0 -13
  32. package/dist/src/index.js +0 -21
  33. package/dist/src/parser/base/lexer.d.ts +0 -18
  34. package/dist/src/parser/base/lexer.js +0 -95
  35. package/dist/src/parser/base/lexer.test.d.ts +0 -1
  36. package/dist/src/parser/base/lexer.test.js +0 -53
  37. package/dist/src/parser/base/parser.d.ts +0 -14
  38. package/dist/src/parser/base/parser.js +0 -43
  39. package/dist/src/parser/base/parser.test.d.ts +0 -1
  40. package/dist/src/parser/base/parser.test.js +0 -90
  41. package/dist/src/parser/base/token.d.ts +0 -18
  42. package/dist/src/parser/base/token.js +0 -1
  43. package/dist/src/parser/base/tokens.d.ts +0 -8
  44. package/dist/src/parser/base/tokens.js +0 -1
  45. package/dist/src/parser/format-detector.d.ts +0 -55
  46. package/dist/src/parser/format-detector.js +0 -98
  47. package/dist/src/parser/index.d.ts +0 -11
  48. package/dist/src/parser/index.js +0 -33
  49. package/dist/src/parser/index.test.d.ts +0 -1
  50. package/dist/src/parser/index.test.js +0 -23
  51. package/dist/src/parser/interface.d.ts +0 -8
  52. package/dist/src/parser/interface.js +0 -1
  53. package/dist/src/parser/languages/mermaid/constants.d.ts +0 -7
  54. package/dist/src/parser/languages/mermaid/constants.js +0 -20
  55. package/dist/src/parser/languages/mermaid/index.d.ts +0 -4
  56. package/dist/src/parser/languages/mermaid/index.js +0 -11
  57. package/dist/src/parser/languages/mermaid/lexer.d.ts +0 -14
  58. package/dist/src/parser/languages/mermaid/lexer.js +0 -152
  59. package/dist/src/parser/languages/mermaid/lexer.test.d.ts +0 -1
  60. package/dist/src/parser/languages/mermaid/lexer.test.js +0 -58
  61. package/dist/src/parser/languages/mermaid/parser.d.ts +0 -22
  62. package/dist/src/parser/languages/mermaid/parser.js +0 -340
  63. package/dist/src/parser/languages/mermaid/parser.test.d.ts +0 -1
  64. package/dist/src/parser/languages/mermaid/parser.test.js +0 -252
  65. package/dist/src/parser/languages/mermaid/tokens.d.ts +0 -9
  66. package/dist/src/parser/languages/mermaid/tokens.js +0 -1
  67. package/dist/src/parser/languages/plantuml/index.d.ts +0 -4
  68. package/dist/src/parser/languages/plantuml/index.js +0 -11
  69. package/dist/src/parser/languages/plantuml/lexer.d.ts +0 -15
  70. package/dist/src/parser/languages/plantuml/lexer.js +0 -143
  71. package/dist/src/parser/languages/plantuml/parser.d.ts +0 -23
  72. package/dist/src/parser/languages/plantuml/parser.js +0 -481
  73. package/dist/src/parser/languages/plantuml/parser.test.d.ts +0 -1
  74. package/dist/src/parser/languages/plantuml/parser.test.js +0 -236
  75. package/dist/src/parser/languages/plantuml/tokens.d.ts +0 -9
  76. package/dist/src/parser/languages/plantuml/tokens.js +0 -1
  77. package/dist/src/transformer/cleaners/prune-empty.d.ts +0 -9
  78. package/dist/src/transformer/cleaners/prune-empty.js +0 -27
  79. package/dist/src/transformer/cleaners/prune-empty.test.d.ts +0 -1
  80. package/dist/src/transformer/cleaners/prune-empty.test.js +0 -69
  81. package/dist/src/transformer/cleaners/prune-unused.d.ts +0 -5
  82. package/dist/src/transformer/cleaners/prune-unused.js +0 -48
  83. package/dist/src/transformer/cleaners/prune-unused.test.d.ts +0 -1
  84. package/dist/src/transformer/cleaners/prune-unused.test.js +0 -71
  85. package/dist/src/transformer/filters/focus.d.ts +0 -13
  86. package/dist/src/transformer/filters/focus.js +0 -71
  87. package/dist/src/transformer/filters/focus.test.d.ts +0 -1
  88. package/dist/src/transformer/filters/focus.test.js +0 -50
  89. package/dist/src/transformer/filters/remove.d.ts +0 -12
  90. package/dist/src/transformer/filters/remove.js +0 -82
  91. package/dist/src/transformer/filters/remove.test.d.ts +0 -1
  92. package/dist/src/transformer/filters/remove.test.js +0 -38
  93. package/dist/src/transformer/filters/resolve.d.ts +0 -9
  94. package/dist/src/transformer/filters/resolve.js +0 -32
  95. package/dist/src/transformer/filters/resolve.test.d.ts +0 -1
  96. package/dist/src/transformer/filters/resolve.test.js +0 -48
  97. package/dist/src/transformer/index.d.ts +0 -10
  98. package/dist/src/transformer/index.js +0 -10
  99. package/dist/src/transformer/lens.d.ts +0 -12
  100. package/dist/src/transformer/lens.js +0 -58
  101. package/dist/src/transformer/lens.test.d.ts +0 -1
  102. package/dist/src/transformer/lens.test.js +0 -60
  103. package/dist/src/transformer/orchestration/engine.d.ts +0 -5
  104. package/dist/src/transformer/orchestration/engine.js +0 -24
  105. package/dist/src/transformer/orchestration/engine.test.d.ts +0 -1
  106. package/dist/src/transformer/orchestration/engine.test.js +0 -52
  107. package/dist/src/transformer/orchestration/registry.d.ts +0 -10
  108. package/dist/src/transformer/orchestration/registry.js +0 -27
  109. package/dist/src/transformer/selector/matcher.d.ts +0 -9
  110. package/dist/src/transformer/selector/matcher.js +0 -62
  111. package/dist/src/transformer/selector/matcher.test.d.ts +0 -1
  112. package/dist/src/transformer/selector/matcher.test.js +0 -70
  113. package/dist/src/transformer/traverse/walker.d.ts +0 -14
  114. package/dist/src/transformer/traverse/walker.js +0 -67
  115. package/dist/src/transformer/traverse/walker.test.d.ts +0 -1
  116. package/dist/src/transformer/traverse/walker.test.js +0 -111
  117. package/dist/src/transformer/types.d.ts +0 -47
  118. package/dist/src/transformer/types.js +0 -1
  119. package/dist/tsconfig.tsbuildinfo +0 -1
package/dist/index.d.ts CHANGED
@@ -12,15 +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';
19
18
 
20
19
  /**
21
- * Supported diagram formats
20
+ * Generator interface that all generators must implement.
22
21
  */
23
- export declare type DiagramFormat = 'mermaid' | 'plantuml';
22
+ export declare interface DiagramGenerator {
23
+ generate(ast: PolagramRoot): string;
24
+ }
24
25
 
25
26
  /**
26
27
  * Strategy Interface for Diagram Parsing.
@@ -38,17 +39,6 @@ export declare interface DividerNode {
38
39
 
39
40
  export declare type EventNode = MessageNode | FragmentNode | NoteNode | DividerNode | ActivationNode | ReferenceNode | SpacerNode;
40
41
 
41
- export declare class FocusFilter extends Walker {
42
- private layer;
43
- private matcher;
44
- private targetParticipantIds;
45
- constructor(layer: FocusLayer);
46
- transform(root: PolagramRoot): PolagramRoot;
47
- private resolveTargetParticipants;
48
- protected visitEvent(node: EventNode): EventNode[];
49
- private isRelatedToParticipant;
50
- }
51
-
52
42
  export declare interface FocusLayer {
53
43
  action: 'focus';
54
44
  selector: ParticipantSelector;
@@ -58,15 +48,7 @@ export declare interface FocusLayer {
58
48
  * Format detection utilities for diagram source code.
59
49
  * Detects diagram format based on file extension and content analysis.
60
50
  */
61
- export declare class FormatDetector {
62
- /**
63
- * File extensions mapped to their diagram formats
64
- */
65
- private static readonly EXTENSION_MAP;
66
- /**
67
- * Content patterns for format detection
68
- */
69
- private static readonly CONTENT_PATTERNS;
51
+ export declare const FormatDetector: {
70
52
  /**
71
53
  * Detect diagram format from file path and content.
72
54
  *
@@ -82,29 +64,29 @@ export declare class FormatDetector {
82
64
  * }
83
65
  * ```
84
66
  */
85
- static detect(filePath: string, content: string): DiagramFormat | null;
67
+ detect(filePath: string, content: string): DiagramFormat | null;
86
68
  /**
87
69
  * Detect format based on file extension.
88
70
  *
89
71
  * @param filePath - Path to the diagram file
90
72
  * @returns Detected format, or null if extension is not recognized
91
73
  */
92
- static detectByExtension(filePath: string): DiagramFormat | null;
74
+ detectByExtension(filePath: string): DiagramFormat | null;
93
75
  /**
94
76
  * Detect format based on content patterns.
95
77
  *
96
78
  * @param content - Content of the diagram file
97
79
  * @returns Detected format, or null if no pattern matches
98
80
  */
99
- static detectByContent(content: string): DiagramFormat | null;
81
+ detectByContent(content: string): DiagramFormat | null;
100
82
  /**
101
83
  * Get file extension for a given format.
102
84
  *
103
85
  * @param format - Diagram format
104
86
  * @returns Default file extension for the format
105
87
  */
106
- static getDefaultExtension(format: DiagramFormat): string;
107
- }
88
+ getDefaultExtension(format: DiagramFormat): string;
89
+ };
108
90
 
109
91
  export declare interface FragmentBranch {
110
92
  id: string;
@@ -122,13 +104,50 @@ export declare interface FragmentNode {
122
104
  export declare type FragmentOperator = 'alt' | 'opt' | 'loop' | 'par' | 'break' | 'critical' | 'rect' | 'group';
123
105
 
124
106
  export declare interface FragmentSelector {
125
- kind?: 'fragment';
107
+ kind: 'fragment';
126
108
  condition?: TextMatcher;
127
109
  operator?: FragmentOperator | FragmentOperator[];
128
110
  }
129
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
+
130
149
  export declare interface GroupSelector {
131
- kind?: 'group';
150
+ kind: 'group';
132
151
  name?: TextMatcher;
133
152
  }
134
153
 
@@ -147,9 +166,9 @@ declare const LensSchema: z.ZodObject<{
147
166
  suffix: z.ZodOptional<z.ZodString>;
148
167
  layers: z.ZodArray<z.ZodObject<{
149
168
  action: z.ZodEnum<{
169
+ resolve: "resolve";
150
170
  focus: "focus";
151
171
  remove: "remove";
152
- resolve: "resolve";
153
172
  }>;
154
173
  selector: z.ZodDiscriminatedUnion<[z.ZodObject<{
155
174
  kind: z.ZodLiteral<"fragment">;
@@ -196,14 +215,6 @@ declare const LensSchema: z.ZodObject<{
196
215
  }, z.core.$strip>>;
197
216
  }, z.core.$strip>;
198
217
 
199
- export declare class Matcher {
200
- matchBranch(branch: FragmentBranch, selector: FragmentSelector, parentOperator: FragmentOperator): boolean;
201
- matchParticipant(node: Participant, selector: ParticipantSelector): boolean;
202
- matchMessage(node: MessageNode, selector: MessageSelector): boolean;
203
- matchGroup(node: ParticipantGroup, selector: GroupSelector): boolean;
204
- private matchText;
205
- }
206
-
207
218
  /**
208
219
  * Visitor implementation that generates Mermaid code.
209
220
  */
@@ -252,7 +263,7 @@ export declare interface MessageNode {
252
263
  }
253
264
 
254
265
  export declare interface MessageSelector {
255
- kind?: 'message';
266
+ kind: 'message';
256
267
  text?: TextMatcher;
257
268
  from?: TextMatcher;
258
269
  to?: TextMatcher;
@@ -278,11 +289,10 @@ export declare interface NoteNode {
278
289
  * Parser Factory
279
290
  * Centralizes retrieval of parser strategies.
280
291
  */
281
- export declare class ParserFactory {
282
- private static parsers;
283
- static register(language: string, parser: DiagramParser): void;
284
- static getParser(language: string): DiagramParser;
285
- }
292
+ export declare const ParserFactory: {
293
+ register(language: string, parser: DiagramParser): void;
294
+ getParser(language: string): DiagramParser;
295
+ };
286
296
 
287
297
  export declare interface Participant {
288
298
  id: string;
@@ -303,7 +313,7 @@ export declare interface ParticipantGroup {
303
313
  }
304
314
 
305
315
  export declare interface ParticipantSelector {
306
- kind?: 'participant';
316
+ kind: 'participant';
307
317
  name?: TextMatcher;
308
318
  id?: TextMatcher;
309
319
  stereotype?: TextMatcher;
@@ -311,20 +321,27 @@ export declare interface ParticipantSelector {
311
321
 
312
322
  export declare type ParticipantType = 'participant' | 'actor' | 'boundary' | 'control' | 'entity' | 'database' | 'collections' | 'queue';
313
323
 
324
+ /**
325
+ * Visitor implementation that generates PlantUML code.
326
+ * Uses the same Traverser pattern as MermaidGeneratorVisitor for consistency.
327
+ */
314
328
  export declare class PlantUMLGeneratorVisitor implements PolagramVisitor {
329
+ private lines;
330
+ private traverser;
331
+ constructor();
315
332
  generate(root: PolagramRoot): string;
316
- visitRoot(node: PolagramRoot): string;
317
- visitParticipant(node: Participant): string;
318
- visitGroup(node: ParticipantGroup, context?: Map<string, Participant>): string;
319
- visitMessage(node: MessageNode): string;
320
- visitFragment(node: FragmentNode): string;
321
- private visitEvent;
322
- visitNote(node: NoteNode): string;
323
- visitActivation(node: ActivationNode): string;
324
- visitParticipantGroup(_node: ParticipantGroup): string;
325
- visitDivider(_node: DividerNode): string;
326
- visitSpacer(_node: SpacerNode): string;
327
- visitReference(_node: ReferenceNode): 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;
328
345
  }
329
346
 
330
347
  /**
@@ -424,9 +441,9 @@ export declare const PolagramConfigSchema: z.ZodObject<{
424
441
  suffix: z.ZodOptional<z.ZodString>;
425
442
  layers: z.ZodArray<z.ZodObject<{
426
443
  action: z.ZodEnum<{
444
+ resolve: "resolve";
427
445
  focus: "focus";
428
446
  remove: "remove";
429
- resolve: "resolve";
430
447
  }>;
431
448
  selector: z.ZodDiscriminatedUnion<[z.ZodObject<{
432
449
  kind: z.ZodLiteral<"fragment">;
@@ -529,28 +546,11 @@ export declare interface ReferenceNode {
529
546
  link?: string;
530
547
  }
531
548
 
532
- export declare class RemoveFilter extends Walker {
533
- private layer;
534
- private matcher;
535
- private removedParticipantIds;
536
- constructor(layer: RemoveLayer);
537
- transform(root: PolagramRoot): PolagramRoot;
538
- protected visitEvent(node: EventNode): EventNode[];
539
- private isRelatedToRemovedParticipant;
540
- }
541
-
542
549
  export declare interface RemoveLayer {
543
550
  action: 'remove';
544
551
  selector: ParticipantSelector | MessageSelector | GroupSelector;
545
552
  }
546
553
 
547
- export declare class ResolveFilter extends Walker {
548
- private layer;
549
- private matcher;
550
- constructor(layer: ResolveLayer);
551
- protected visitFragment(node: FragmentNode): EventNode[];
552
- }
553
-
554
554
  export declare interface ResolveLayer {
555
555
  action: 'resolve';
556
556
  selector: FragmentSelector;
@@ -563,14 +563,6 @@ export declare interface SpacerNode {
563
563
  text?: string;
564
564
  }
565
565
 
566
- /**
567
- * Cleaner that removes empty fragments and branches from the AST.
568
- * This runs after filters to ensure the AST structure remains valid/clean.
569
- */
570
- export declare class StructureCleaner extends Walker {
571
- protected visitFragment(node: FragmentNode): EventNode[];
572
- }
573
-
574
566
  export declare interface StyleProps {
575
567
  color?: string;
576
568
  backgroundColor?: string;
@@ -588,9 +580,9 @@ declare const TargetConfigSchema: z.ZodObject<{
588
580
  suffix: z.ZodOptional<z.ZodString>;
589
581
  layers: z.ZodArray<z.ZodObject<{
590
582
  action: z.ZodEnum<{
583
+ resolve: "resolve";
591
584
  focus: "focus";
592
585
  remove: "remove";
593
- resolve: "resolve";
594
586
  }>;
595
587
  selector: z.ZodDiscriminatedUnion<[z.ZodObject<{
596
588
  kind: z.ZodLiteral<"fragment">;
@@ -660,13 +652,35 @@ declare interface Transformer_2 {
660
652
  }
661
653
  export { Transformer_2 as Transformer }
662
654
 
663
- 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;
664
659
 
660
+ /**
661
+ * Registry for transformer factories.
662
+ * Provides type-safe registration and retrieval of transformers.
663
+ */
665
664
  declare class TransformerRegistry {
666
665
  private factories;
667
666
  constructor();
667
+ /**
668
+ * Type-safe registration for a specific layer type.
669
+ */
670
+ private registerTyped;
671
+ /**
672
+ * Register a custom transformer factory.
673
+ */
668
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
+ */
669
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;
670
684
  }
671
685
 
672
686
  export declare const transformerRegistry: TransformerRegistry;
@@ -689,35 +703,10 @@ export declare class Traverser {
689
703
  dispatchEvents(events: EventNode[]): void;
690
704
  }
691
705
 
692
- export declare class UnusedCleaner {
693
- transform(root: PolagramRoot): PolagramRoot;
694
- private collectUsedParticipants;
695
- }
696
-
697
706
  /**
698
707
  * Validates the input object against the Polagram Config Schema.
699
708
  * Throws a formatted error message if validation fails.
700
709
  */
701
710
  export declare function validateConfig(input: unknown): PolagramConfig;
702
711
 
703
- /**
704
- * Type Guard to validate if an object is a valid Lens.
705
- * Acts as an Anti-Corruption Layer.
706
- */
707
- export declare function validateLens(lens: unknown): lens is Lens;
708
-
709
- /**
710
- * Abstract base class for tree transformations.
711
- * Implements the "Updating Visitor" pattern with Copy-on-Write immutability.
712
- *
713
- * Subclasses should override `visitEvent` to apply specific logic.
714
- */
715
- declare abstract class Walker {
716
- transform(root: PolagramRoot): PolagramRoot;
717
- protected mapEvents(events: EventNode[]): EventNode[];
718
- protected visitEvent(node: EventNode): EventNode[];
719
- protected visitFragment(node: FragmentNode): EventNode[];
720
- protected visitBranch(branch: FragmentBranch): FragmentBranch;
721
- }
722
-
723
712
  export { }