@agentix-e/nl2spel 0.0.0 → 1.0.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 (134) hide show
  1. package/README.md +69 -39
  2. package/dist/SpelEvaluator.d.ts +124 -0
  3. package/dist/SpelEvaluator.d.ts.map +1 -0
  4. package/dist/SpelEvaluator.js +2 -0
  5. package/dist/SpelEvaluator.js.map +1 -0
  6. package/dist/__tests__/auto-fixer.test.d.ts +2 -0
  7. package/dist/__tests__/auto-fixer.test.d.ts.map +1 -0
  8. package/dist/__tests__/auto-fixer.test.js +285 -0
  9. package/dist/__tests__/auto-fixer.test.js.map +1 -0
  10. package/dist/__tests__/chinese-number-parser.test.d.ts +2 -0
  11. package/dist/__tests__/chinese-number-parser.test.d.ts.map +1 -0
  12. package/dist/__tests__/chinese-number-parser.test.js +106 -0
  13. package/dist/__tests__/chinese-number-parser.test.js.map +1 -0
  14. package/dist/__tests__/context-extractor.test.d.ts +2 -0
  15. package/dist/__tests__/context-extractor.test.d.ts.map +1 -0
  16. package/dist/__tests__/context-extractor.test.js +347 -0
  17. package/dist/__tests__/context-extractor.test.js.map +1 -0
  18. package/dist/__tests__/coverage-gaps.test.d.ts +2 -0
  19. package/dist/__tests__/coverage-gaps.test.d.ts.map +1 -0
  20. package/dist/__tests__/coverage-gaps.test.js +578 -0
  21. package/dist/__tests__/coverage-gaps.test.js.map +1 -0
  22. package/dist/__tests__/intent-classifier.test.d.ts +2 -0
  23. package/dist/__tests__/intent-classifier.test.d.ts.map +1 -0
  24. package/dist/__tests__/intent-classifier.test.js +384 -0
  25. package/dist/__tests__/intent-classifier.test.js.map +1 -0
  26. package/dist/__tests__/nl2spel-engine.test.d.ts +2 -0
  27. package/dist/__tests__/nl2spel-engine.test.d.ts.map +1 -0
  28. package/dist/__tests__/nl2spel-engine.test.js +344 -0
  29. package/dist/__tests__/nl2spel-engine.test.js.map +1 -0
  30. package/dist/__tests__/pattern-matcher.test.d.ts +2 -0
  31. package/dist/__tests__/pattern-matcher.test.d.ts.map +1 -0
  32. package/dist/__tests__/pattern-matcher.test.js +754 -0
  33. package/dist/__tests__/pattern-matcher.test.js.map +1 -0
  34. package/dist/__tests__/prompt-builder.test.d.ts +2 -0
  35. package/dist/__tests__/prompt-builder.test.d.ts.map +1 -0
  36. package/dist/__tests__/prompt-builder.test.js +99 -0
  37. package/dist/__tests__/prompt-builder.test.js.map +1 -0
  38. package/dist/__tests__/provider-registry.test.d.ts +2 -0
  39. package/dist/__tests__/provider-registry.test.d.ts.map +1 -0
  40. package/dist/__tests__/provider-registry.test.js +240 -0
  41. package/dist/__tests__/provider-registry.test.js.map +1 -0
  42. package/dist/__tests__/schema-formatter.test.d.ts +2 -0
  43. package/dist/__tests__/schema-formatter.test.d.ts.map +1 -0
  44. package/dist/__tests__/schema-formatter.test.js +298 -0
  45. package/dist/__tests__/schema-formatter.test.js.map +1 -0
  46. package/dist/__tests__/self-correction-loop.test.d.ts +2 -0
  47. package/dist/__tests__/self-correction-loop.test.d.ts.map +1 -0
  48. package/dist/__tests__/self-correction-loop.test.js +253 -0
  49. package/dist/__tests__/self-correction-loop.test.js.map +1 -0
  50. package/dist/__tests__/strategy-router.test.d.ts +2 -0
  51. package/dist/__tests__/strategy-router.test.d.ts.map +1 -0
  52. package/dist/__tests__/strategy-router.test.js +493 -0
  53. package/dist/__tests__/strategy-router.test.js.map +1 -0
  54. package/dist/__tests__/template-engine.test.d.ts +2 -0
  55. package/dist/__tests__/template-engine.test.d.ts.map +1 -0
  56. package/dist/__tests__/template-engine.test.js +367 -0
  57. package/dist/__tests__/template-engine.test.js.map +1 -0
  58. package/dist/__tests__/validation-pipeline.test.d.ts +2 -0
  59. package/dist/__tests__/validation-pipeline.test.d.ts.map +1 -0
  60. package/dist/__tests__/validation-pipeline.test.js +262 -0
  61. package/dist/__tests__/validation-pipeline.test.js.map +1 -0
  62. package/dist/context/context-extractor.d.ts +82 -0
  63. package/dist/context/context-extractor.d.ts.map +1 -0
  64. package/dist/context/context-extractor.js +166 -0
  65. package/dist/context/context-extractor.js.map +1 -0
  66. package/dist/context/schema-formatter.d.ts +20 -0
  67. package/dist/context/schema-formatter.d.ts.map +1 -0
  68. package/dist/context/schema-formatter.js +104 -0
  69. package/dist/context/schema-formatter.js.map +1 -0
  70. package/dist/engine/nl2spel-engine.d.ts +144 -0
  71. package/dist/engine/nl2spel-engine.d.ts.map +1 -0
  72. package/dist/engine/nl2spel-engine.js +125 -0
  73. package/dist/engine/nl2spel-engine.js.map +1 -0
  74. package/dist/index.d.ts +28 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +24 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/pattern/builtin-patterns.d.ts +12 -0
  79. package/dist/pattern/builtin-patterns.d.ts.map +1 -0
  80. package/dist/pattern/builtin-patterns.js +812 -0
  81. package/dist/pattern/builtin-patterns.js.map +1 -0
  82. package/dist/pattern/pattern-definition.d.ts +49 -0
  83. package/dist/pattern/pattern-definition.d.ts.map +1 -0
  84. package/dist/pattern/pattern-definition.js +2 -0
  85. package/dist/pattern/pattern-definition.js.map +1 -0
  86. package/dist/pattern/pattern-matcher.d.ts +55 -0
  87. package/dist/pattern/pattern-matcher.d.ts.map +1 -0
  88. package/dist/pattern/pattern-matcher.js +216 -0
  89. package/dist/pattern/pattern-matcher.js.map +1 -0
  90. package/dist/provider/llm-provider.d.ts +146 -0
  91. package/dist/provider/llm-provider.d.ts.map +1 -0
  92. package/dist/provider/llm-provider.js +2 -0
  93. package/dist/provider/llm-provider.js.map +1 -0
  94. package/dist/provider/provider-registry.d.ts +28 -0
  95. package/dist/provider/provider-registry.d.ts.map +1 -0
  96. package/dist/provider/provider-registry.js +65 -0
  97. package/dist/provider/provider-registry.js.map +1 -0
  98. package/dist/strategy/strategy-router.d.ts +79 -0
  99. package/dist/strategy/strategy-router.d.ts.map +1 -0
  100. package/dist/strategy/strategy-router.js +182 -0
  101. package/dist/strategy/strategy-router.js.map +1 -0
  102. package/dist/template/intent-classifier.d.ts +56 -0
  103. package/dist/template/intent-classifier.d.ts.map +1 -0
  104. package/dist/template/intent-classifier.js +251 -0
  105. package/dist/template/intent-classifier.js.map +1 -0
  106. package/dist/template/nl-intent.d.ts +38 -0
  107. package/dist/template/nl-intent.d.ts.map +1 -0
  108. package/dist/template/nl-intent.js +39 -0
  109. package/dist/template/nl-intent.js.map +1 -0
  110. package/dist/template/prompts/prompt-builder.d.ts +20 -0
  111. package/dist/template/prompts/prompt-builder.d.ts.map +1 -0
  112. package/dist/template/prompts/prompt-builder.js +243 -0
  113. package/dist/template/prompts/prompt-builder.js.map +1 -0
  114. package/dist/template/template-engine.d.ts +27 -0
  115. package/dist/template/template-engine.d.ts.map +1 -0
  116. package/dist/template/template-engine.js +378 -0
  117. package/dist/template/template-engine.js.map +1 -0
  118. package/dist/utils/chinese-number-parser.d.ts +30 -0
  119. package/dist/utils/chinese-number-parser.d.ts.map +1 -0
  120. package/dist/utils/chinese-number-parser.js +92 -0
  121. package/dist/utils/chinese-number-parser.js.map +1 -0
  122. package/dist/validation/auto-fixer.d.ts +14 -0
  123. package/dist/validation/auto-fixer.d.ts.map +1 -0
  124. package/dist/validation/auto-fixer.js +111 -0
  125. package/dist/validation/auto-fixer.js.map +1 -0
  126. package/dist/validation/self-correction-loop.d.ts +46 -0
  127. package/dist/validation/self-correction-loop.d.ts.map +1 -0
  128. package/dist/validation/self-correction-loop.js +141 -0
  129. package/dist/validation/self-correction-loop.js.map +1 -0
  130. package/dist/validation/validation-pipeline.d.ts +81 -0
  131. package/dist/validation/validation-pipeline.d.ts.map +1 -0
  132. package/dist/validation/validation-pipeline.js +306 -0
  133. package/dist/validation/validation-pipeline.js.map +1 -0
  134. package/package.json +36 -7
@@ -0,0 +1,106 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { ChineseNumberParser } from '../utils/chinese-number-parser.js';
3
+ describe('ChineseNumberParser', () => {
4
+ describe('isChineseNumber', () => {
5
+ it('should return true for "一千二百三十四"', () => {
6
+ expect(ChineseNumberParser.isChineseNumber('一千二百三十四')).toBe(true);
7
+ });
8
+ it('should return true for "十"', () => {
9
+ expect(ChineseNumberParser.isChineseNumber('十')).toBe(true);
10
+ });
11
+ it('should return false for "123"', () => {
12
+ expect(ChineseNumberParser.isChineseNumber('123')).toBe(false);
13
+ });
14
+ it('should return false for mixed text', () => {
15
+ expect(ChineseNumberParser.isChineseNumber('abc一二三')).toBe(false);
16
+ });
17
+ });
18
+ describe('parse', () => {
19
+ it('零 → 0', () => {
20
+ expect(ChineseNumberParser.parse('零')).toBe(0);
21
+ });
22
+ it('一 → 1', () => {
23
+ expect(ChineseNumberParser.parse('一')).toBe(1);
24
+ });
25
+ it('十 → 10', () => {
26
+ expect(ChineseNumberParser.parse('十')).toBe(10);
27
+ });
28
+ it('十五 → 15', () => {
29
+ expect(ChineseNumberParser.parse('十五')).toBe(15);
30
+ });
31
+ it('二十 → 20', () => {
32
+ expect(ChineseNumberParser.parse('二十')).toBe(20);
33
+ });
34
+ it('一百 → 100', () => {
35
+ expect(ChineseNumberParser.parse('一百')).toBe(100);
36
+ });
37
+ it('一百二十三 → 123', () => {
38
+ expect(ChineseNumberParser.parse('一百二十三')).toBe(123);
39
+ });
40
+ it('一千 → 1000', () => {
41
+ expect(ChineseNumberParser.parse('一千')).toBe(1000);
42
+ });
43
+ it('一千二百三十四 → 1234', () => {
44
+ expect(ChineseNumberParser.parse('一千二百三十四')).toBe(1234);
45
+ });
46
+ it('一万 → 10000', () => {
47
+ expect(ChineseNumberParser.parse('一万')).toBe(10000);
48
+ });
49
+ it('十万 → 100000', () => {
50
+ expect(ChineseNumberParser.parse('十万')).toBe(100000);
51
+ });
52
+ it('一万二千三百四十五 → 12345', () => {
53
+ expect(ChineseNumberParser.parse('一万二千三百四十五')).toBe(12345);
54
+ });
55
+ it('一千零一 → 1001', () => {
56
+ expect(ChineseNumberParser.parse('一千零一')).toBe(1001);
57
+ });
58
+ it('一亿 → 100000000', () => {
59
+ expect(ChineseNumberParser.parse('一亿')).toBe(100000000);
60
+ });
61
+ it('returns NaN for non-Chinese input', () => {
62
+ expect(Number.isNaN(ChineseNumberParser.parse('abc'))).toBe(true);
63
+ expect(Number.isNaN(ChineseNumberParser.parse('123'))).toBe(true);
64
+ });
65
+ });
66
+ describe('parseSafe', () => {
67
+ it('should return number for valid input', () => {
68
+ expect(ChineseNumberParser.parseSafe('一百')).toBe(100);
69
+ });
70
+ it('should return null for invalid input', () => {
71
+ expect(ChineseNumberParser.parseSafe('abc')).toBeNull();
72
+ expect(ChineseNumberParser.parseSafe('123')).toBeNull();
73
+ });
74
+ });
75
+ // Additional edge cases
76
+ describe('edge cases', () => {
77
+ it('两 → 2', () => {
78
+ expect(ChineseNumberParser.parse('两')).toBe(2);
79
+ });
80
+ it('两百 → 200', () => {
81
+ expect(ChineseNumberParser.parse('两百')).toBe(200);
82
+ });
83
+ it('两千 → 2000', () => {
84
+ expect(ChineseNumberParser.parse('两千')).toBe(2000);
85
+ });
86
+ it('两万 → 20000', () => {
87
+ expect(ChineseNumberParser.parse('两万')).toBe(20000);
88
+ });
89
+ });
90
+ // Tests for unit-only inputs (current=0 at <10000 units, section+current=0 at >=10000 units)
91
+ describe('unit-only start (covers || 1 fallback branches)', () => {
92
+ it('百 → 100 (current is 0, kLine 82 || 1)', () => {
93
+ expect(ChineseNumberParser.parse('百')).toBe(100);
94
+ });
95
+ it('千 → 1000 (current is 0, kLine 82 || 1)', () => {
96
+ expect(ChineseNumberParser.parse('千')).toBe(1000);
97
+ });
98
+ it('万 → 10000 (section+current is 0, kLine 77 || 1)', () => {
99
+ expect(ChineseNumberParser.parse('万')).toBe(10000);
100
+ });
101
+ it('亿 → 100000000 (section+current is 0, kLine 77 || 1)', () => {
102
+ expect(ChineseNumberParser.parse('亿')).toBe(100000000);
103
+ });
104
+ });
105
+ });
106
+ //# sourceMappingURL=chinese-number-parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chinese-number-parser.test.js","sourceRoot":"","sources":["../../src/__tests__/chinese-number-parser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=context-extractor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-extractor.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/context-extractor.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,347 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { ContextExtractor } from '../context/context-extractor.js';
3
+ describe('ContextExtractor', () => {
4
+ const extractor = new ContextExtractor();
5
+ describe('extract root object', () => {
6
+ it('should extract root object with simple fields', () => {
7
+ const schema = extractor.extract({
8
+ rootObject: { amount: 1000, status: 'pending', vip: true },
9
+ rootName: 'order',
10
+ });
11
+ expect(schema.root).not.toBeNull();
12
+ expect(schema.root.name).toBe('order');
13
+ expect(schema.root.type).toBe('Object');
14
+ expect(schema.root.fields).toHaveProperty('amount');
15
+ expect(schema.root.fields.amount.type).toBe('number');
16
+ expect(schema.root.fields.amount.example).toBe(1000);
17
+ expect(schema.root.fields.status.type).toBe('string');
18
+ expect(schema.root.fields.status.example).toBe('pending');
19
+ expect(schema.root.fields.vip.type).toBe('boolean');
20
+ expect(schema.root.fields.vip.example).toBe(true);
21
+ });
22
+ it('should return null for null root object', () => {
23
+ const schema = extractor.extract({ rootObject: null });
24
+ expect(schema.root).toBeNull();
25
+ });
26
+ it('should return null for undefined root object', () => {
27
+ const schema = extractor.extract({ rootObject: undefined });
28
+ expect(schema.root).toBeNull();
29
+ });
30
+ it('should return null when rootObject is not provided', () => {
31
+ const schema = extractor.extract({});
32
+ expect(schema.root).toBeNull();
33
+ });
34
+ it('should use default root name "root" when not specified', () => {
35
+ const schema = extractor.extract({ rootObject: { x: 1 } });
36
+ expect(schema.root.name).toBe('root');
37
+ });
38
+ it('should detect array type on root fields', () => {
39
+ const schema = extractor.extract({
40
+ rootObject: { items: [1, 2, 3], tags: ['vip', 'premium'] },
41
+ });
42
+ expect(schema.root.fields.items.isCollection).toBe(true);
43
+ expect(schema.root.fields.items.type).toBe('array');
44
+ expect(schema.root.fields.items.elementType).toBe('number');
45
+ expect(schema.root.fields.tags.elementType).toBe('string');
46
+ });
47
+ it('should detect null fields as nullable', () => {
48
+ const schema = extractor.extract({
49
+ rootObject: { name: null, active: true },
50
+ });
51
+ expect(schema.root.fields.name.nullable).toBe(true);
52
+ expect(schema.root.fields.name.type).toBe('string');
53
+ expect(schema.root.fields.active.nullable).toBe(false);
54
+ });
55
+ it('should detect Date type', () => {
56
+ const schema = extractor.extract({
57
+ rootObject: { createdAt: new Date('2024-01-01') },
58
+ });
59
+ expect(schema.root.fields.createdAt.type).toBe('date');
60
+ });
61
+ it('should generate field descriptions', () => {
62
+ const schema = extractor.extract({
63
+ rootObject: { amount: 500 },
64
+ });
65
+ expect(schema.root.fields.amount.description).toContain('amount');
66
+ expect(schema.root.fields.amount.description).toContain('number');
67
+ });
68
+ it('should handle empty object', () => {
69
+ const schema = extractor.extract({ rootObject: {} });
70
+ expect(schema.root).not.toBeNull();
71
+ expect(schema.root.type).toBe('Object');
72
+ expect(Object.keys(schema.root.fields)).toHaveLength(0);
73
+ });
74
+ });
75
+ describe('extract variables', () => {
76
+ it('should extract variable definitions', () => {
77
+ const schema = extractor.extract({
78
+ variables: {
79
+ user: { type: 'object', description: 'Current user', value: { id: 1 } },
80
+ count: { type: 'number', value: 42 },
81
+ },
82
+ });
83
+ expect(schema.variables).toHaveProperty('user');
84
+ expect(schema.variables.user.type).toBe('object');
85
+ expect(schema.variables.user.description).toBe('Current user');
86
+ expect(schema.variables.user.value).toEqual({ id: 1 });
87
+ expect(schema.variables.count.type).toBe('number');
88
+ expect(schema.variables.count.value).toBe(42);
89
+ });
90
+ it('should generate default descriptions for variables', () => {
91
+ const schema = extractor.extract({
92
+ variables: { user: { type: 'string' } },
93
+ });
94
+ expect(schema.variables.user.description).toContain('user');
95
+ });
96
+ it('should handle nullable variables', () => {
97
+ const schema = extractor.extract({
98
+ variables: { user: { type: 'string', nullable: true } },
99
+ });
100
+ expect(schema.variables.user.nullable).toBe(true);
101
+ });
102
+ it('should return empty object when no variables', () => {
103
+ const schema = extractor.extract({});
104
+ expect(schema.variables).toEqual({});
105
+ });
106
+ });
107
+ describe('extract beans', () => {
108
+ it('should extract bean definitions', () => {
109
+ const schema = extractor.extract({
110
+ beans: [
111
+ { name: 'userService', type: 'UserService', description: 'User service bean' },
112
+ { name: 'auditLogger', type: 'AuditLogger', singleton: true },
113
+ ],
114
+ });
115
+ expect(schema.beans).toHaveProperty('userService');
116
+ expect(schema.beans.userService.type).toBe('UserService');
117
+ expect(schema.beans.userService.description).toBe('User service bean');
118
+ expect(schema.beans.auditLogger.type).toBe('AuditLogger');
119
+ expect(schema.beans.auditLogger.singleton).toBe(true);
120
+ });
121
+ it('should return empty object when no beans', () => {
122
+ const schema = extractor.extract({});
123
+ expect(schema.beans).toEqual({});
124
+ });
125
+ });
126
+ describe('extract types', () => {
127
+ it('should extract type definitions', () => {
128
+ const schema = extractor.extract({
129
+ types: [{ name: 'Admin', className: 'com.example.Admin', description: 'Admin class' }],
130
+ });
131
+ expect(schema.types).toHaveProperty('Admin');
132
+ expect(schema.types.Admin.className).toBe('com.example.Admin');
133
+ expect(schema.types.Admin.description).toBe('Admin class');
134
+ });
135
+ it('should return empty object when no types', () => {
136
+ const schema = extractor.extract({});
137
+ expect(schema.types).toEqual({});
138
+ });
139
+ });
140
+ describe('extract functions', () => {
141
+ it('should extract function definitions', () => {
142
+ const schema = extractor.extract({
143
+ functions: [
144
+ {
145
+ name: 'calculateDiscount',
146
+ returnType: 'number',
147
+ params: [
148
+ { name: 'amount', type: 'number' },
149
+ { name: 'level', type: 'string' },
150
+ ],
151
+ description: 'Calculate discount based on amount and level',
152
+ },
153
+ ],
154
+ });
155
+ expect(schema.functions).toHaveProperty('calculateDiscount');
156
+ expect(schema.functions.calculateDiscount.returnType).toBe('number');
157
+ expect(schema.functions.calculateDiscount.params).toHaveLength(2);
158
+ expect(schema.functions.calculateDiscount.params[0].name).toBe('amount');
159
+ expect(schema.functions.calculateDiscount.params[0].type).toBe('number');
160
+ });
161
+ it('should return empty object when no functions', () => {
162
+ const schema = extractor.extract({});
163
+ expect(schema.functions).toEqual({});
164
+ });
165
+ });
166
+ describe('extractFields catch block', () => {
167
+ it('should skip inaccessible properties without crashing', () => {
168
+ const obj = { normal: 42 };
169
+ let getterCalled = false;
170
+ Object.defineProperty(obj, 'bad', {
171
+ get() {
172
+ getterCalled = true;
173
+ throw new Error('Access denied');
174
+ },
175
+ enumerable: true,
176
+ configurable: true,
177
+ });
178
+ Object.defineProperty(obj, 'good', {
179
+ value: 'hello',
180
+ enumerable: true,
181
+ });
182
+ const schema = extractor.extract({ rootObject: obj });
183
+ expect(getterCalled).toBe(true);
184
+ expect(schema.root.fields.normal.type).toBe('number');
185
+ expect(schema.root.fields.good.type).toBe('string');
186
+ // 'bad' should be skipped entirely
187
+ expect(schema.root.fields.bad).toBeUndefined();
188
+ });
189
+ });
190
+ describe('safeExample for objects', () => {
191
+ it('should return undefined for object-type field values', () => {
192
+ const schema = extractor.extract({
193
+ rootObject: { nested: { x: 1 }, label: 'hello' },
194
+ });
195
+ expect(schema.root.fields.nested.type).toBe('object');
196
+ expect(schema.root.fields.nested.example).toBeUndefined();
197
+ expect(schema.root.fields.label.type).toBe('string');
198
+ expect(schema.root.fields.label.example).toBe('hello');
199
+ });
200
+ });
201
+ describe('extractVariables nullable default', () => {
202
+ it('should default nullable to false when not specified', () => {
203
+ const schema = extractor.extract({
204
+ variables: { x: { type: 'number', value: 10 } },
205
+ });
206
+ expect(schema.variables.x.nullable).toBe(false);
207
+ });
208
+ });
209
+ describe('complete schema extraction', () => {
210
+ it('should extract full schema with all components', () => {
211
+ const schema = extractor.extract({
212
+ rootObject: { orderId: 'ORD-001', totalAmount: 1500.5, paid: false },
213
+ rootName: 'order',
214
+ variables: {
215
+ currentUser: { type: 'object', description: 'Current user' },
216
+ },
217
+ beans: [{ name: 'discountService', type: 'DiscountService' }],
218
+ types: [{ name: 'OrderStatus', description: 'Order status enum' }],
219
+ functions: [
220
+ {
221
+ name: 'sum',
222
+ returnType: 'number',
223
+ params: [{ name: 'values', type: 'array' }],
224
+ },
225
+ ],
226
+ });
227
+ expect(schema.root.name).toBe('order');
228
+ expect(schema.root.fields).toHaveProperty('orderId');
229
+ expect(schema.root.fields).toHaveProperty('totalAmount');
230
+ expect(schema.root.fields).toHaveProperty('paid');
231
+ expect(schema.variables).toHaveProperty('currentUser');
232
+ expect(schema.beans).toHaveProperty('discountService');
233
+ expect(schema.types).toHaveProperty('OrderStatus');
234
+ expect(schema.functions).toHaveProperty('sum');
235
+ });
236
+ });
237
+ describe('edge cases', () => {
238
+ it('should set elementType to undefined for arrays with 0 elements', () => {
239
+ const schema = extractor.extract({
240
+ rootObject: { items: [] },
241
+ });
242
+ expect(schema.root.fields.items.isCollection).toBe(true);
243
+ expect(schema.root.fields.items.type).toBe('array');
244
+ expect(schema.root.fields.items.elementType).toBeUndefined();
245
+ });
246
+ it('should detect Date field type as "date"', () => {
247
+ const schema = extractor.extract({
248
+ rootObject: { createdAt: new Date('2025-06-01'), label: 'invoice' },
249
+ });
250
+ expect(schema.root.fields.createdAt.type).toBe('date');
251
+ expect(schema.root.fields.label.type).toBe('string');
252
+ });
253
+ it('should extract null-valued root properties (they are in Object.keys)', () => {
254
+ const schema = extractor.extract({
255
+ rootObject: { a: null, b: 'hello' },
256
+ });
257
+ expect(schema.root.fields.a).toBeDefined();
258
+ expect(schema.root.fields.a.nullable).toBe(true);
259
+ expect(schema.root.fields.a.type).toBe('string');
260
+ expect(schema.root.fields.a.example).toBeNull();
261
+ expect(schema.root.fields.b.nullable).toBe(false);
262
+ });
263
+ it('should extract full context with root, variables, beans, types, and functions', () => {
264
+ const schema = extractor.extract({
265
+ rootObject: { id: 100, name: 'demo' },
266
+ rootName: 'entity',
267
+ variables: {
268
+ counter: { type: 'number', description: 'Loop counter', value: 0 },
269
+ status: { type: 'string', nullable: true },
270
+ },
271
+ beans: [
272
+ { name: 'svc', type: 'MyService', description: 'Core service' },
273
+ { name: 'transient', type: 'Worker', singleton: false },
274
+ ],
275
+ types: [
276
+ { name: 'StatusEnum', className: 'com.example.StatusEnum' },
277
+ { name: 'MarkerInterface', description: 'Just a marker' },
278
+ ],
279
+ functions: [
280
+ {
281
+ name: 'max',
282
+ returnType: 'number',
283
+ params: [
284
+ { name: 'a', type: 'number' },
285
+ { name: 'b', type: 'number' },
286
+ ],
287
+ description: 'Returns larger value',
288
+ },
289
+ ],
290
+ });
291
+ // Root
292
+ expect(schema.root).not.toBeNull();
293
+ expect(schema.root.name).toBe('entity');
294
+ expect(schema.root.fields.id.type).toBe('number');
295
+ expect(schema.root.fields.name.type).toBe('string');
296
+ // Variables
297
+ expect(schema.variables.counter.type).toBe('number');
298
+ expect(schema.variables.counter.value).toBe(0);
299
+ expect(schema.variables.status.nullable).toBe(true);
300
+ // Beans
301
+ expect(schema.beans.svc.type).toBe('MyService');
302
+ expect(schema.beans.svc.description).toBe('Core service');
303
+ expect(schema.beans.transient.singleton).toBe(false);
304
+ // Types
305
+ expect(schema.types.StatusEnum.className).toBe('com.example.StatusEnum');
306
+ expect(schema.types.MarkerInterface.className).toBeUndefined();
307
+ expect(schema.types.MarkerInterface.description).toBe('Just a marker');
308
+ // Functions
309
+ expect(schema.functions.max.returnType).toBe('number');
310
+ expect(schema.functions.max.params).toHaveLength(2);
311
+ expect(schema.functions.max.params[0].name).toBe('a');
312
+ });
313
+ it('should extract variable with nullable=true', () => {
314
+ const schema = extractor.extract({
315
+ variables: { opt: { type: 'string', nullable: true } },
316
+ });
317
+ expect(schema.variables.opt.nullable).toBe(true);
318
+ });
319
+ it('should extract bean with singleton=true', () => {
320
+ const schema = extractor.extract({
321
+ beans: [{ name: 'singleton', type: 'Cache', singleton: true }],
322
+ });
323
+ expect(schema.beans.singleton.singleton).toBe(true);
324
+ });
325
+ it('should extract bean with singleton=false', () => {
326
+ const schema = extractor.extract({
327
+ beans: [{ name: 'prototype', type: 'Worker', singleton: false }],
328
+ });
329
+ expect(schema.beans.prototype.singleton).toBe(false);
330
+ });
331
+ it('should extract type with className', () => {
332
+ const schema = extractor.extract({
333
+ types: [{ name: 'WithClass', className: 'com.example.MyClass' }],
334
+ });
335
+ expect(schema.types.WithClass.className).toBe('com.example.MyClass');
336
+ });
337
+ it('should extract type without className', () => {
338
+ const schema = extractor.extract({
339
+ types: [{ name: 'NoClass', description: 'Interface without class binding' }],
340
+ });
341
+ expect(schema.types.NoClass).toBeDefined();
342
+ expect(schema.types.NoClass.className).toBeUndefined();
343
+ expect(schema.types.NoClass.description).toBe('Interface without class binding');
344
+ });
345
+ });
346
+ });
347
+ //# sourceMappingURL=context-extractor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-extractor.test.js","sourceRoot":"","sources":["../../src/__tests__/context-extractor.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=coverage-gaps.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-gaps.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/coverage-gaps.test.ts"],"names":[],"mappings":""}