@polagram/core 0.0.2

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 (100) hide show
  1. package/README.md +124 -0
  2. package/dist/index.d.ts +625 -0
  3. package/dist/polagram-core.js +3653 -0
  4. package/dist/polagram-core.umd.cjs +28 -0
  5. package/dist/src/api.d.ts +75 -0
  6. package/dist/src/api.js +160 -0
  7. package/dist/src/ast/ast.test.d.ts +1 -0
  8. package/dist/src/ast/ast.test.js +146 -0
  9. package/dist/src/ast/index.d.ts +119 -0
  10. package/dist/src/ast/index.js +2 -0
  11. package/dist/src/config/index.d.ts +1 -0
  12. package/dist/src/config/index.js +1 -0
  13. package/dist/src/config/schema.d.ts +182 -0
  14. package/dist/src/config/schema.js +78 -0
  15. package/dist/src/config/schema.test.d.ts +1 -0
  16. package/dist/src/config/schema.test.js +94 -0
  17. package/dist/src/generator/base/walker.d.ts +19 -0
  18. package/dist/src/generator/base/walker.js +56 -0
  19. package/dist/src/generator/base/walker.test.d.ts +1 -0
  20. package/dist/src/generator/base/walker.test.js +49 -0
  21. package/dist/src/generator/generators/mermaid.d.ts +24 -0
  22. package/dist/src/generator/generators/mermaid.js +140 -0
  23. package/dist/src/generator/generators/mermaid.test.d.ts +1 -0
  24. package/dist/src/generator/generators/mermaid.test.js +70 -0
  25. package/dist/src/generator/interface.d.ts +17 -0
  26. package/dist/src/generator/interface.js +1 -0
  27. package/dist/src/index.d.ts +9 -0
  28. package/dist/src/index.js +17 -0
  29. package/dist/src/parser/base/lexer.d.ts +18 -0
  30. package/dist/src/parser/base/lexer.js +95 -0
  31. package/dist/src/parser/base/lexer.test.d.ts +1 -0
  32. package/dist/src/parser/base/lexer.test.js +53 -0
  33. package/dist/src/parser/base/parser.d.ts +14 -0
  34. package/dist/src/parser/base/parser.js +43 -0
  35. package/dist/src/parser/base/parser.test.d.ts +1 -0
  36. package/dist/src/parser/base/parser.test.js +90 -0
  37. package/dist/src/parser/index.d.ts +10 -0
  38. package/dist/src/parser/index.js +29 -0
  39. package/dist/src/parser/index.test.d.ts +1 -0
  40. package/dist/src/parser/index.test.js +23 -0
  41. package/dist/src/parser/interface.d.ts +8 -0
  42. package/dist/src/parser/interface.js +1 -0
  43. package/dist/src/parser/languages/mermaid/constants.d.ts +7 -0
  44. package/dist/src/parser/languages/mermaid/constants.js +20 -0
  45. package/dist/src/parser/languages/mermaid/index.d.ts +4 -0
  46. package/dist/src/parser/languages/mermaid/index.js +11 -0
  47. package/dist/src/parser/languages/mermaid/lexer.d.ts +14 -0
  48. package/dist/src/parser/languages/mermaid/lexer.js +152 -0
  49. package/dist/src/parser/languages/mermaid/lexer.test.d.ts +1 -0
  50. package/dist/src/parser/languages/mermaid/lexer.test.js +58 -0
  51. package/dist/src/parser/languages/mermaid/parser.d.ts +21 -0
  52. package/dist/src/parser/languages/mermaid/parser.js +340 -0
  53. package/dist/src/parser/languages/mermaid/parser.test.d.ts +1 -0
  54. package/dist/src/parser/languages/mermaid/parser.test.js +252 -0
  55. package/dist/src/parser/languages/mermaid/tokens.d.ts +9 -0
  56. package/dist/src/parser/languages/mermaid/tokens.js +1 -0
  57. package/dist/src/transformer/cleaners/prune-empty.d.ts +9 -0
  58. package/dist/src/transformer/cleaners/prune-empty.js +27 -0
  59. package/dist/src/transformer/cleaners/prune-empty.test.d.ts +1 -0
  60. package/dist/src/transformer/cleaners/prune-empty.test.js +69 -0
  61. package/dist/src/transformer/cleaners/prune-unused.d.ts +5 -0
  62. package/dist/src/transformer/cleaners/prune-unused.js +48 -0
  63. package/dist/src/transformer/cleaners/prune-unused.test.d.ts +1 -0
  64. package/dist/src/transformer/cleaners/prune-unused.test.js +71 -0
  65. package/dist/src/transformer/filters/focus.d.ts +13 -0
  66. package/dist/src/transformer/filters/focus.js +71 -0
  67. package/dist/src/transformer/filters/focus.test.d.ts +1 -0
  68. package/dist/src/transformer/filters/focus.test.js +50 -0
  69. package/dist/src/transformer/filters/remove.d.ts +12 -0
  70. package/dist/src/transformer/filters/remove.js +82 -0
  71. package/dist/src/transformer/filters/remove.test.d.ts +1 -0
  72. package/dist/src/transformer/filters/remove.test.js +38 -0
  73. package/dist/src/transformer/filters/resolve.d.ts +9 -0
  74. package/dist/src/transformer/filters/resolve.js +32 -0
  75. package/dist/src/transformer/filters/resolve.test.d.ts +1 -0
  76. package/dist/src/transformer/filters/resolve.test.js +48 -0
  77. package/dist/src/transformer/index.d.ts +10 -0
  78. package/dist/src/transformer/index.js +10 -0
  79. package/dist/src/transformer/lens.d.ts +12 -0
  80. package/dist/src/transformer/lens.js +58 -0
  81. package/dist/src/transformer/lens.test.d.ts +1 -0
  82. package/dist/src/transformer/lens.test.js +60 -0
  83. package/dist/src/transformer/orchestration/engine.d.ts +5 -0
  84. package/dist/src/transformer/orchestration/engine.js +24 -0
  85. package/dist/src/transformer/orchestration/engine.test.d.ts +1 -0
  86. package/dist/src/transformer/orchestration/engine.test.js +41 -0
  87. package/dist/src/transformer/orchestration/registry.d.ts +10 -0
  88. package/dist/src/transformer/orchestration/registry.js +27 -0
  89. package/dist/src/transformer/selector/matcher.d.ts +9 -0
  90. package/dist/src/transformer/selector/matcher.js +62 -0
  91. package/dist/src/transformer/selector/matcher.test.d.ts +1 -0
  92. package/dist/src/transformer/selector/matcher.test.js +53 -0
  93. package/dist/src/transformer/traverse/walker.d.ts +14 -0
  94. package/dist/src/transformer/traverse/walker.js +67 -0
  95. package/dist/src/transformer/traverse/walker.test.d.ts +1 -0
  96. package/dist/src/transformer/traverse/walker.test.js +48 -0
  97. package/dist/src/transformer/types.d.ts +47 -0
  98. package/dist/src/transformer/types.js +1 -0
  99. package/dist/tsconfig.tsbuildinfo +1 -0
  100. package/package.json +45 -0
package/README.md ADDED
@@ -0,0 +1,124 @@
1
+ # @polagram/core
2
+
3
+ `@polagram/core` is the core parsing and AST manipulation library for the Polagram project. It provides functionality to parse diagram languages (currently focusing on Mermaid Sequence Diagrams) into a generic Polagram Abstract Syntax Tree (AST).
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @polagram/core
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ The library provides a `ParserFactory` to get the parser for a specific language.
14
+
15
+ ```typescript
16
+ import { ParserFactory, PolagramRoot } from '@polagram/core';
17
+
18
+ const mermaidCode = `
19
+ sequenceDiagram
20
+ Alice->>John: Hello John, how are you?
21
+ John-->>Alice: Great!
22
+ `;
23
+
24
+ try {
25
+ // 1. Get the parser for Mermaid
26
+ const parser = ParserFactory.getParser('mermaid');
27
+
28
+ // 2. Parse the code into an AST
29
+ const ast: PolagramRoot = parser.parse(mermaidCode);
30
+
31
+ console.log(JSON.stringify(ast, null, 2));
32
+ } catch (error) {
33
+ console.error('Parsing failed:', error);
34
+ }
35
+ ```
36
+
37
+ ### Working with the AST
38
+
39
+ You can traverse the AST using the provided types:
40
+
41
+ ```typescript
42
+ import { ParserFactory, MessageNode } from '@polagram/core';
43
+
44
+ // ... obtain ast as above
45
+
46
+ ast.events.forEach(event => {
47
+ if (event.kind === 'message') {
48
+ const msg = event as MessageNode;
49
+ console.log(`From: ${msg.from}, To: ${msg.to}, Text: ${msg.text}`);
50
+ }
51
+ });
52
+ ```
53
+
54
+ ## Features
55
+
56
+ - **Transformation Engine**: A powerful pipeline to transform diagrams based on user intent.
57
+ - **Lenses**: Create multiple views (e.g., "Overview", "Client Focus") from a single source diagram.
58
+ - **Layers**: Composable transformation steps (remove, focus, resolve).
59
+ - **Mermaid Parsing**: Supports standard Mermaid sequence diagram syntax.
60
+ - Participants & Actors
61
+ - Messages (sync, async, different arrow types)
62
+ - Activations & Notes
63
+ - Fragments (loop, alt, opt, etc.)
64
+ - Grouping (box)
65
+ - **Robust AST**: A standardized Abstract Syntax Tree for sequence diagrams.
66
+ - **Generators**: Re-generate valid Mermaid code from the transformed AST.
67
+
68
+ ## Diagram Transformation
69
+
70
+ Polagram's core strength is its ability to transform diagrams. You can define **Lenses** to create different perspectives of the same complex diagram.
71
+
72
+ ### Concepts
73
+
74
+ - **Action**: A primitive operation on the AST (e.g., `remove`, `focus`, `resolve`).
75
+ - **Selector**: A criteria to select nodes (e.g., `participant: { name: "Logger" }`).
76
+ - **Layer**: A combination of an Action and a Selector.
77
+ - **Lens**: A collection of Layers applied sequentially.
78
+
79
+ ### Example: Creating a "Client View"
80
+
81
+ ```typescript
82
+ import { Transformer, Lens, Layer } from '@polagram/core';
83
+
84
+ // 1. Define Layers
85
+ const removeLogger = new Layer('remove', {
86
+ kind: 'participant',
87
+ name: 'Logger' // Text or Regex
88
+ });
89
+
90
+ const resolveSuccess = new Layer('resolve', {
91
+ kind: 'fragment',
92
+ condition: 'Success' // Keeps only the 'Success' branch of alt/opt
93
+ });
94
+
95
+ // 2. Create a Lens
96
+ const clientViewLens = new Lens('client-view', [
97
+ removeLogger,
98
+ resolveSuccess
99
+ ]);
100
+
101
+ // 3. Transform
102
+ const transformer = new Transformer(ast);
103
+ const newAst = transformer.apply(clientViewLens);
104
+
105
+ // 4. Generate Code
106
+ const newCode = GeneratorFactory.getGenerator('mermaid').generate(newAst);
107
+ ```
108
+
109
+ ## Development
110
+
111
+ - `pnpm build`: Build the package.
112
+ - `pnpm test`: Run unit tests.
113
+
114
+ ## Architecture
115
+
116
+ This package uses a modular architecture:
117
+ - **Parser**: Lexer/Parser based architecture for robust syntax handling.
118
+ - **AST**: Strictly typed AST nodes.
119
+ - **Transformer**: Layered transformation pipeline using Visitor pattern.
120
+
121
+
122
+ ## License
123
+
124
+ MIT