@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.
- package/README.md +124 -0
- package/dist/index.d.ts +625 -0
- package/dist/polagram-core.js +3653 -0
- package/dist/polagram-core.umd.cjs +28 -0
- package/dist/src/api.d.ts +75 -0
- package/dist/src/api.js +160 -0
- package/dist/src/ast/ast.test.d.ts +1 -0
- package/dist/src/ast/ast.test.js +146 -0
- package/dist/src/ast/index.d.ts +119 -0
- package/dist/src/ast/index.js +2 -0
- package/dist/src/config/index.d.ts +1 -0
- package/dist/src/config/index.js +1 -0
- package/dist/src/config/schema.d.ts +182 -0
- package/dist/src/config/schema.js +78 -0
- package/dist/src/config/schema.test.d.ts +1 -0
- package/dist/src/config/schema.test.js +94 -0
- package/dist/src/generator/base/walker.d.ts +19 -0
- package/dist/src/generator/base/walker.js +56 -0
- package/dist/src/generator/base/walker.test.d.ts +1 -0
- package/dist/src/generator/base/walker.test.js +49 -0
- package/dist/src/generator/generators/mermaid.d.ts +24 -0
- package/dist/src/generator/generators/mermaid.js +140 -0
- package/dist/src/generator/generators/mermaid.test.d.ts +1 -0
- package/dist/src/generator/generators/mermaid.test.js +70 -0
- package/dist/src/generator/interface.d.ts +17 -0
- package/dist/src/generator/interface.js +1 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.js +17 -0
- package/dist/src/parser/base/lexer.d.ts +18 -0
- package/dist/src/parser/base/lexer.js +95 -0
- package/dist/src/parser/base/lexer.test.d.ts +1 -0
- package/dist/src/parser/base/lexer.test.js +53 -0
- package/dist/src/parser/base/parser.d.ts +14 -0
- package/dist/src/parser/base/parser.js +43 -0
- package/dist/src/parser/base/parser.test.d.ts +1 -0
- package/dist/src/parser/base/parser.test.js +90 -0
- package/dist/src/parser/index.d.ts +10 -0
- package/dist/src/parser/index.js +29 -0
- package/dist/src/parser/index.test.d.ts +1 -0
- package/dist/src/parser/index.test.js +23 -0
- package/dist/src/parser/interface.d.ts +8 -0
- package/dist/src/parser/interface.js +1 -0
- package/dist/src/parser/languages/mermaid/constants.d.ts +7 -0
- package/dist/src/parser/languages/mermaid/constants.js +20 -0
- package/dist/src/parser/languages/mermaid/index.d.ts +4 -0
- package/dist/src/parser/languages/mermaid/index.js +11 -0
- package/dist/src/parser/languages/mermaid/lexer.d.ts +14 -0
- package/dist/src/parser/languages/mermaid/lexer.js +152 -0
- package/dist/src/parser/languages/mermaid/lexer.test.d.ts +1 -0
- package/dist/src/parser/languages/mermaid/lexer.test.js +58 -0
- package/dist/src/parser/languages/mermaid/parser.d.ts +21 -0
- package/dist/src/parser/languages/mermaid/parser.js +340 -0
- package/dist/src/parser/languages/mermaid/parser.test.d.ts +1 -0
- package/dist/src/parser/languages/mermaid/parser.test.js +252 -0
- package/dist/src/parser/languages/mermaid/tokens.d.ts +9 -0
- package/dist/src/parser/languages/mermaid/tokens.js +1 -0
- package/dist/src/transformer/cleaners/prune-empty.d.ts +9 -0
- package/dist/src/transformer/cleaners/prune-empty.js +27 -0
- package/dist/src/transformer/cleaners/prune-empty.test.d.ts +1 -0
- package/dist/src/transformer/cleaners/prune-empty.test.js +69 -0
- package/dist/src/transformer/cleaners/prune-unused.d.ts +5 -0
- package/dist/src/transformer/cleaners/prune-unused.js +48 -0
- package/dist/src/transformer/cleaners/prune-unused.test.d.ts +1 -0
- package/dist/src/transformer/cleaners/prune-unused.test.js +71 -0
- package/dist/src/transformer/filters/focus.d.ts +13 -0
- package/dist/src/transformer/filters/focus.js +71 -0
- package/dist/src/transformer/filters/focus.test.d.ts +1 -0
- package/dist/src/transformer/filters/focus.test.js +50 -0
- package/dist/src/transformer/filters/remove.d.ts +12 -0
- package/dist/src/transformer/filters/remove.js +82 -0
- package/dist/src/transformer/filters/remove.test.d.ts +1 -0
- package/dist/src/transformer/filters/remove.test.js +38 -0
- package/dist/src/transformer/filters/resolve.d.ts +9 -0
- package/dist/src/transformer/filters/resolve.js +32 -0
- package/dist/src/transformer/filters/resolve.test.d.ts +1 -0
- package/dist/src/transformer/filters/resolve.test.js +48 -0
- package/dist/src/transformer/index.d.ts +10 -0
- package/dist/src/transformer/index.js +10 -0
- package/dist/src/transformer/lens.d.ts +12 -0
- package/dist/src/transformer/lens.js +58 -0
- package/dist/src/transformer/lens.test.d.ts +1 -0
- package/dist/src/transformer/lens.test.js +60 -0
- package/dist/src/transformer/orchestration/engine.d.ts +5 -0
- package/dist/src/transformer/orchestration/engine.js +24 -0
- package/dist/src/transformer/orchestration/engine.test.d.ts +1 -0
- package/dist/src/transformer/orchestration/engine.test.js +41 -0
- package/dist/src/transformer/orchestration/registry.d.ts +10 -0
- package/dist/src/transformer/orchestration/registry.js +27 -0
- package/dist/src/transformer/selector/matcher.d.ts +9 -0
- package/dist/src/transformer/selector/matcher.js +62 -0
- package/dist/src/transformer/selector/matcher.test.d.ts +1 -0
- package/dist/src/transformer/selector/matcher.test.js +53 -0
- package/dist/src/transformer/traverse/walker.d.ts +14 -0
- package/dist/src/transformer/traverse/walker.js +67 -0
- package/dist/src/transformer/traverse/walker.test.d.ts +1 -0
- package/dist/src/transformer/traverse/walker.test.js +48 -0
- package/dist/src/transformer/types.d.ts +47 -0
- package/dist/src/transformer/types.js +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- 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
|