@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/src/api.d.ts DELETED
@@ -1,75 +0,0 @@
1
- import { PolagramRoot } from './ast';
2
- import { FragmentSelector, GroupSelector, Lens, MessageSelector, ParticipantSelector, TextMatcher } from './transformer/types';
3
- /**
4
- * Polagram Fluent API
5
- *
6
- * Provides a high-level, chainable interface for transformations.
7
- *
8
- * @example
9
- * const result = Polagram.init(mermaidCode)
10
- * .focusParticipant('PaymentService')
11
- * .removeParticipant('DebugLogger')
12
- * .toMermaid();
13
- */
14
- export declare class Polagram {
15
- private constructor();
16
- /**
17
- * Initialize a new Polagram transformation pipeline.
18
- * @param code Source diagram code
19
- * @param format Input format (currently only 'mermaid' is supported)
20
- */
21
- static init(code: string, format?: 'mermaid'): PolagramBuilder;
22
- }
23
- /**
24
- * Builder class for chaining transformations.
25
- */
26
- export declare class PolagramBuilder {
27
- private ast;
28
- private layers;
29
- constructor(ast: PolagramRoot);
30
- /**
31
- * Focus on specific participants.
32
- * Keeps only interactions involving the matched participants.
33
- * @param selector Name (string/RegExp) or detailed ParticipantSelector
34
- */
35
- focusParticipant(selector: TextMatcher | Partial<ParticipantSelector>): this;
36
- /**
37
- * Remove specific participants and their interactions.
38
- * @param selector Name (string/RegExp) or detailed ParticipantSelector
39
- */
40
- removeParticipant(selector: TextMatcher | Partial<ParticipantSelector>): this;
41
- /**
42
- * Remove specific messages.
43
- * @param selector Message text (string/RegExp) or detailed MessageSelector
44
- */
45
- removeMessage(selector: TextMatcher | Partial<MessageSelector>): this;
46
- /**
47
- * Remove specific groups (visual boxes).
48
- * @param selector Group name (string/RegExp) or detailed GroupSelector
49
- */
50
- removeGroup(selector: TextMatcher | Partial<GroupSelector>): this;
51
- /**
52
- * Resolve (unwrap) specific fragments like 'alt', 'opt', 'loop'.
53
- * Promotes the content of the matched branch and removes the wrapper.
54
- * @param selector Condition text (string/RegExp) or detailed FragmentSelector
55
- */
56
- resolveFragment(selector: TextMatcher | Partial<FragmentSelector>): this;
57
- /**
58
- * Apply a Lens (a named set of transformation layers).
59
- * @param lens Lens object containing layers
60
- */
61
- applyLens(lens: Lens): this;
62
- /**
63
- * Generate Mermaid code from the transformed AST.
64
- */
65
- toMermaid(): string;
66
- /**
67
- * Get the transformed AST (for advanced use cases).
68
- */
69
- toAST(): PolagramRoot;
70
- private normalizeParticipantSelector;
71
- private normalizeMessageSelector;
72
- private normalizeGroupSelector;
73
- private normalizeFragmentSelector;
74
- private isTextMatcher;
75
- }
package/dist/src/api.js DELETED
@@ -1,160 +0,0 @@
1
- import { MermaidGeneratorVisitor } from './generator/generators/mermaid';
2
- import { ParserFactory } from './parser';
3
- import { TransformationEngine } from './transformer/orchestration/engine';
4
- /**
5
- * Polagram Fluent API
6
- *
7
- * Provides a high-level, chainable interface for transformations.
8
- *
9
- * @example
10
- * const result = Polagram.init(mermaidCode)
11
- * .focusParticipant('PaymentService')
12
- * .removeParticipant('DebugLogger')
13
- * .toMermaid();
14
- */
15
- export class Polagram {
16
- constructor() { }
17
- /**
18
- * Initialize a new Polagram transformation pipeline.
19
- * @param code Source diagram code
20
- * @param format Input format (currently only 'mermaid' is supported)
21
- */
22
- static init(code, format = 'mermaid') {
23
- const parser = ParserFactory.getParser(format);
24
- const ast = parser.parse(code);
25
- return new PolagramBuilder(ast);
26
- }
27
- }
28
- /**
29
- * Builder class for chaining transformations.
30
- */
31
- export class PolagramBuilder {
32
- constructor(ast) {
33
- Object.defineProperty(this, "ast", {
34
- enumerable: true,
35
- configurable: true,
36
- writable: true,
37
- value: void 0
38
- });
39
- Object.defineProperty(this, "layers", {
40
- enumerable: true,
41
- configurable: true,
42
- writable: true,
43
- value: []
44
- });
45
- this.ast = ast;
46
- }
47
- // -- Entity Filtering --
48
- /**
49
- * Focus on specific participants.
50
- * Keeps only interactions involving the matched participants.
51
- * @param selector Name (string/RegExp) or detailed ParticipantSelector
52
- */
53
- focusParticipant(selector) {
54
- this.layers.push({
55
- action: 'focus',
56
- selector: this.normalizeParticipantSelector(selector)
57
- });
58
- return this;
59
- }
60
- /**
61
- * Remove specific participants and their interactions.
62
- * @param selector Name (string/RegExp) or detailed ParticipantSelector
63
- */
64
- removeParticipant(selector) {
65
- this.layers.push({
66
- action: 'remove',
67
- selector: this.normalizeParticipantSelector(selector)
68
- });
69
- return this;
70
- }
71
- // -- Message Filtering --
72
- /**
73
- * Remove specific messages.
74
- * @param selector Message text (string/RegExp) or detailed MessageSelector
75
- */
76
- removeMessage(selector) {
77
- this.layers.push({
78
- action: 'remove',
79
- selector: this.normalizeMessageSelector(selector)
80
- });
81
- return this;
82
- }
83
- // -- Group Filtering --
84
- /**
85
- * Remove specific groups (visual boxes).
86
- * @param selector Group name (string/RegExp) or detailed GroupSelector
87
- */
88
- removeGroup(selector) {
89
- this.layers.push({
90
- action: 'remove',
91
- selector: this.normalizeGroupSelector(selector)
92
- });
93
- return this;
94
- }
95
- // -- Structural Resolution --
96
- /**
97
- * Resolve (unwrap) specific fragments like 'alt', 'opt', 'loop'.
98
- * Promotes the content of the matched branch and removes the wrapper.
99
- * @param selector Condition text (string/RegExp) or detailed FragmentSelector
100
- */
101
- resolveFragment(selector) {
102
- this.layers.push({
103
- action: 'resolve',
104
- selector: this.normalizeFragmentSelector(selector)
105
- });
106
- return this;
107
- }
108
- /**
109
- * Apply a Lens (a named set of transformation layers).
110
- * @param lens Lens object containing layers
111
- */
112
- applyLens(lens) {
113
- this.layers.push(...lens.layers);
114
- return this;
115
- }
116
- /**
117
- * Generate Mermaid code from the transformed AST.
118
- */
119
- toMermaid() {
120
- const engine = new TransformationEngine();
121
- const transformedAst = engine.transform(this.ast, this.layers);
122
- const generator = new MermaidGeneratorVisitor();
123
- return generator.generate(transformedAst);
124
- }
125
- /**
126
- * Get the transformed AST (for advanced use cases).
127
- */
128
- toAST() {
129
- const engine = new TransformationEngine();
130
- return engine.transform(this.ast, this.layers);
131
- }
132
- // -- Helper Methods --
133
- normalizeParticipantSelector(selector) {
134
- if (this.isTextMatcher(selector)) {
135
- return { kind: 'participant', name: selector };
136
- }
137
- return { kind: 'participant', ...selector };
138
- }
139
- normalizeMessageSelector(selector) {
140
- if (this.isTextMatcher(selector)) {
141
- return { kind: 'message', text: selector };
142
- }
143
- return { kind: 'message', ...selector };
144
- }
145
- normalizeGroupSelector(selector) {
146
- if (this.isTextMatcher(selector)) {
147
- return { kind: 'group', name: selector };
148
- }
149
- return { kind: 'group', ...selector };
150
- }
151
- normalizeFragmentSelector(selector) {
152
- if (this.isTextMatcher(selector)) {
153
- return { kind: 'fragment', condition: selector };
154
- }
155
- return { kind: 'fragment', ...selector };
156
- }
157
- isTextMatcher(val) {
158
- return typeof val === 'string' || val instanceof RegExp || (typeof val === 'object' && val !== null && 'pattern' in val && !('kind' in val));
159
- }
160
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,146 +0,0 @@
1
- // packages/core/test/complex_ast_example.test.ts
2
- import { describe, expect, it } from 'vitest';
3
- describe('Polagram AST Definition', () => {
4
- it('should support a complex lossless scenario', () => {
5
- // This "Rosetta Stone" object attempts to use ALL new features
6
- // to prove they are correctly typed and coexist.
7
- const complexAst = {
8
- kind: 'root',
9
- meta: {
10
- version: '1.0.0',
11
- source: 'plantuml',
12
- title: 'Complex Order System',
13
- theme: {
14
- participantPadding: '10'
15
- }
16
- },
17
- groups: [
18
- {
19
- kind: 'group',
20
- id: 'g_1',
21
- name: 'AWS Cloud',
22
- type: 'box',
23
- participantIds: ['p_db', 'p_sqs'],
24
- style: { backgroundColor: '#f0f0f0' }
25
- }
26
- ],
27
- participants: [
28
- {
29
- id: 'p_user',
30
- name: 'User',
31
- type: 'actor'
32
- },
33
- {
34
- id: 'p_api',
35
- name: 'API Gateway',
36
- type: 'control'
37
- },
38
- {
39
- id: 'p_sqs',
40
- name: 'Order Queue',
41
- type: 'queue'
42
- },
43
- {
44
- id: 'p_db',
45
- name: 'DynamoDB',
46
- type: 'database'
47
- }
48
- ],
49
- events: [
50
- // 1. Found message (from unknown)
51
- {
52
- kind: 'message',
53
- id: 'm_1',
54
- from: null,
55
- to: 'p_user',
56
- text: 'User lands on page',
57
- type: 'sync',
58
- style: { line: 'solid', head: 'arrow' }
59
- },
60
- // 2. Activation independent of message
61
- {
62
- kind: 'activation',
63
- participantId: 'p_user',
64
- action: 'activate'
65
- },
66
- // 3. Message with lifecycle
67
- {
68
- kind: 'message',
69
- id: 'm_2',
70
- from: 'p_user',
71
- to: 'p_api',
72
- text: 'POST /order',
73
- type: 'sync',
74
- style: { line: 'solid', head: 'arrow' },
75
- lifecycle: { activateTarget: true }
76
- },
77
- // 4. Create message (Lifecycle)
78
- {
79
- kind: 'message',
80
- id: 'm_3',
81
- from: 'p_api',
82
- to: 'p_sqs',
83
- text: 'new OrderMessage()',
84
- type: 'create', // Explicit create
85
- style: { line: 'dotted', head: 'arrow' }
86
- },
87
- // 5. Visual Divider
88
- {
89
- kind: 'divider',
90
- id: 'd_1',
91
- text: 'Async Processing'
92
- },
93
- // 6. Visual Spacer (Delay)
94
- {
95
- kind: 'spacer',
96
- id: 's_1',
97
- text: '... 5 seconds later ...'
98
- },
99
- // 7. Grouping/Fragment (Loop)
100
- {
101
- kind: 'fragment',
102
- id: 'f_1',
103
- operator: 'loop',
104
- branches: [
105
- {
106
- id: 'b_1',
107
- condition: 'Every 1s',
108
- events: [
109
- {
110
- kind: 'message',
111
- id: 'm_poll',
112
- from: 'p_db',
113
- to: 'p_sqs',
114
- text: 'Check items',
115
- type: 'sync',
116
- style: { line: 'solid', head: 'arrow' }
117
- }
118
- ]
119
- }
120
- ]
121
- },
122
- // 8. Reference (Ref)
123
- {
124
- kind: 'ref',
125
- id: 'r_1',
126
- text: 'Payment Processing',
127
- link: 'payment.mermaid',
128
- participantIds: ['p_api', 'p_db']
129
- },
130
- // 9. Destroy (Lifecycle)
131
- {
132
- kind: 'message',
133
- id: 'm_del',
134
- from: 'p_api',
135
- to: 'p_sqs',
136
- text: 'delete',
137
- type: 'destroy',
138
- style: { line: 'solid', head: 'cross' } // X marker
139
- }
140
- ]
141
- };
142
- expect(complexAst).toBeTruthy();
143
- expect(complexAst.participants.length).toBe(4);
144
- expect(complexAst.events.length).toBe(9);
145
- });
146
- });
@@ -1,119 +0,0 @@
1
- /**
2
- * Polagram Abstract Syntax Tree (AST) Definitions
3
- *
4
- * Designed to be a lossless representation of Sequence Diagrams from:
5
- * - Mermaid
6
- * - PlantUML
7
- *
8
- * It captures structure, semantics (lifecycle, grouping), and necessary visual hints.
9
- */
10
- export interface PolagramRoot {
11
- kind: 'root';
12
- meta: MetaData;
13
- participants: Participant[];
14
- groups: ParticipantGroup[];
15
- events: EventNode[];
16
- }
17
- export interface MetaData {
18
- version: string;
19
- source: 'mermaid' | 'plantuml' | 'unknown';
20
- title?: string;
21
- theme?: Record<string, string>;
22
- }
23
- export interface Participant {
24
- id: string;
25
- name: string;
26
- alias?: string;
27
- type: ParticipantType;
28
- stereotype?: string;
29
- style?: StyleProps;
30
- }
31
- export type ParticipantType = 'participant' | 'actor' | 'boundary' | 'control' | 'entity' | 'database' | 'collections' | 'queue';
32
- export interface ParticipantGroup {
33
- kind: 'group';
34
- id: string;
35
- name?: string;
36
- type?: string;
37
- participantIds: string[];
38
- style?: StyleProps;
39
- }
40
- export type EventNode = MessageNode | FragmentNode | NoteNode | DividerNode | ActivationNode | ReferenceNode | SpacerNode;
41
- export type MessageEndpoint = string | null;
42
- /**
43
- * Represents a directional interaction.
44
- * Includes standard sync/async calls, returns, and object creation/deletion.
45
- */
46
- export interface MessageNode {
47
- kind: 'message';
48
- id: string;
49
- from: MessageEndpoint;
50
- to: MessageEndpoint;
51
- text: string;
52
- type: 'sync' | 'async' | 'reply' | 'create' | 'destroy';
53
- style: {
54
- line: 'solid' | 'dotted';
55
- head: 'arrow' | 'async' | 'open' | 'cross';
56
- color?: string;
57
- };
58
- lifecycle?: {
59
- activateTarget?: boolean;
60
- deactivateSource?: boolean;
61
- };
62
- }
63
- export interface FragmentNode {
64
- kind: 'fragment';
65
- id: string;
66
- operator: FragmentOperator;
67
- branches: FragmentBranch[];
68
- }
69
- export type FragmentOperator = 'alt' | 'opt' | 'loop' | 'par' | 'break' | 'critical' | 'rect' | 'group';
70
- export interface FragmentBranch {
71
- id: string;
72
- condition?: string;
73
- events: EventNode[];
74
- }
75
- export interface NoteNode {
76
- kind: 'note';
77
- id: string;
78
- text: string;
79
- position: 'left' | 'right' | 'over';
80
- participantIds: string[];
81
- style?: StyleProps;
82
- }
83
- /**
84
- * Independent activation/deactivation not tied to a specific message line.
85
- * e.g., Mermaid "activate A", PlantUML "activate A"
86
- */
87
- export interface ActivationNode {
88
- kind: 'activation';
89
- participantId: string;
90
- action: 'activate' | 'deactivate';
91
- style?: StyleProps;
92
- }
93
- /**
94
- * Refers to another sequence diagram or a frame covering participants.
95
- * e.g., PlantUML "ref over A, B : Init"
96
- */
97
- export interface ReferenceNode {
98
- kind: 'ref';
99
- id: string;
100
- text: string;
101
- participantIds: string[];
102
- link?: string;
103
- }
104
- export interface DividerNode {
105
- kind: 'divider';
106
- id: string;
107
- text?: string;
108
- }
109
- export interface SpacerNode {
110
- kind: 'spacer';
111
- id: string;
112
- height?: number;
113
- text?: string;
114
- }
115
- export interface StyleProps {
116
- color?: string;
117
- backgroundColor?: string;
118
- shape?: string;
119
- }
@@ -1,2 +0,0 @@
1
- // packages/core/src/ast.ts
2
- export {};
@@ -1 +0,0 @@
1
- export * from './schema';
@@ -1 +0,0 @@
1
- export * from './schema';