@aster-cloud/aster-lang-ts 2.0.0 → 3.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 (106) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/scripts/generate-naming-rules.d.ts +5 -0
  3. package/dist/scripts/generate-naming-rules.d.ts.map +1 -0
  4. package/dist/scripts/generate-naming-rules.js +35 -0
  5. package/dist/scripts/generate-naming-rules.js.map +1 -0
  6. package/dist/src/browser/schema.d.ts.map +1 -1
  7. package/dist/src/browser/schema.js +1 -3
  8. package/dist/src/browser/schema.js.map +1 -1
  9. package/dist/src/browser.d.ts.map +1 -1
  10. package/dist/src/browser.js +1 -3
  11. package/dist/src/browser.js.map +1 -1
  12. package/dist/src/compile-pipeline.d.ts.map +1 -1
  13. package/dist/src/compile-pipeline.js +1 -2
  14. package/dist/src/compile-pipeline.js.map +1 -1
  15. package/dist/src/config/lexicons/fallback-lexicon.d.ts +1 -1
  16. package/dist/src/config/lexicons/fallback-lexicon.d.ts.map +1 -1
  17. package/dist/src/config/lexicons/fallback-lexicon.js +1 -4
  18. package/dist/src/config/lexicons/fallback-lexicon.js.map +1 -1
  19. package/dist/src/config/lexicons/overlay-loader.d.ts +0 -13
  20. package/dist/src/config/lexicons/overlay-loader.d.ts.map +1 -1
  21. package/dist/src/config/lexicons/overlay-loader.js +0 -18
  22. package/dist/src/config/lexicons/overlay-loader.js.map +1 -1
  23. package/dist/src/config/lexicons/types.d.ts +0 -3
  24. package/dist/src/config/lexicons/types.d.ts.map +1 -1
  25. package/dist/src/config/lexicons/types.js.map +1 -1
  26. package/dist/src/core/lambda-captures.d.ts +14 -0
  27. package/dist/src/core/lambda-captures.d.ts.map +1 -0
  28. package/dist/src/core/lambda-captures.js +128 -0
  29. package/dist/src/core/lambda-captures.js.map +1 -0
  30. package/dist/src/lower_to_core.d.ts +0 -18
  31. package/dist/src/lower_to_core.d.ts.map +1 -1
  32. package/dist/src/lower_to_core.js +50 -90
  33. package/dist/src/lower_to_core.js.map +1 -1
  34. package/dist/src/mapping/mapping-ir.d.ts +2 -2
  35. package/dist/src/mapping/mapping-ir.js +2 -2
  36. package/dist/src/parser/expr-stmt-parser.d.ts.map +1 -1
  37. package/dist/src/parser/expr-stmt-parser.js +14 -8
  38. package/dist/src/parser/expr-stmt-parser.js.map +1 -1
  39. package/dist/src/parser/field-variant-parser.js +3 -3
  40. package/dist/src/parser/field-variant-parser.js.map +1 -1
  41. package/dist/src/parser/naming-rules.d.ts +19 -0
  42. package/dist/src/parser/naming-rules.d.ts.map +1 -0
  43. package/dist/src/parser/naming-rules.generated.d.ts +7 -0
  44. package/dist/src/parser/naming-rules.generated.d.ts.map +1 -0
  45. package/dist/src/parser/naming-rules.generated.js +392 -0
  46. package/dist/src/parser/naming-rules.generated.js.map +1 -0
  47. package/dist/src/parser/naming-rules.js +2 -0
  48. package/dist/src/parser/naming-rules.js.map +1 -0
  49. package/dist/src/parser/type-inference.d.ts +29 -70
  50. package/dist/src/parser/type-inference.d.ts.map +1 -1
  51. package/dist/src/parser/type-inference.js +82 -212
  52. package/dist/src/parser/type-inference.js.map +1 -1
  53. package/dist/src/parser/type-parser.d.ts.map +1 -1
  54. package/dist/src/parser/type-parser.js +12 -19
  55. package/dist/src/parser/type-parser.js.map +1 -1
  56. package/dist/src/parser.d.ts.map +1 -1
  57. package/dist/src/parser.js +2 -5
  58. package/dist/src/parser.js.map +1 -1
  59. package/dist/src/typecheck/effects.js +11 -4
  60. package/dist/src/typecheck/effects.js.map +1 -1
  61. package/dist/src/types/type-inference.d.ts +1 -13
  62. package/dist/src/types/type-inference.d.ts.map +1 -1
  63. package/dist/src/types/type-inference.js +1 -2
  64. package/dist/src/types/type-inference.js.map +1 -1
  65. package/dist/test/helpers/locales-type-inference.d.ts +6 -0
  66. package/dist/test/helpers/locales-type-inference.d.ts.map +1 -0
  67. package/dist/test/helpers/locales-type-inference.js +14 -0
  68. package/dist/test/helpers/locales-type-inference.js.map +1 -0
  69. package/dist/test/integration/compliance/compliance-smoke.test.js +1 -2
  70. package/dist/test/integration/compliance/compliance-smoke.test.js.map +1 -1
  71. package/dist/test/unit/core/resolve-typed-references.test.js +3 -2
  72. package/dist/test/unit/core/resolve-typed-references.test.js.map +1 -1
  73. package/dist/test/unit/effect/effect-caps-explicit-only.test.d.ts +2 -0
  74. package/dist/test/unit/effect/effect-caps-explicit-only.test.d.ts.map +1 -0
  75. package/dist/test/unit/effect/effect-caps-explicit-only.test.js +73 -0
  76. package/dist/test/unit/effect/effect-caps-explicit-only.test.js.map +1 -0
  77. package/dist/test/unit/lambda-capture-parity.test.js +43 -14
  78. package/dist/test/unit/lambda-capture-parity.test.js.map +1 -1
  79. package/dist/test/unit/lexicons/fallback-lexicon.test.d.ts +1 -1
  80. package/dist/test/unit/lexicons/fallback-lexicon.test.js +2 -4
  81. package/dist/test/unit/lexicons/fallback-lexicon.test.js.map +1 -1
  82. package/dist/test/unit/parser/inferred-type-anchor.test.d.ts +2 -0
  83. package/dist/test/unit/parser/inferred-type-anchor.test.d.ts.map +1 -0
  84. package/dist/test/unit/parser/inferred-type-anchor.test.js +83 -0
  85. package/dist/test/unit/parser/inferred-type-anchor.test.js.map +1 -0
  86. package/dist/test/unit/parser/naming-rules-parity.test.d.ts +2 -0
  87. package/dist/test/unit/parser/naming-rules-parity.test.d.ts.map +1 -0
  88. package/dist/test/unit/parser/naming-rules-parity.test.js +26 -0
  89. package/dist/test/unit/parser/naming-rules-parity.test.js.map +1 -0
  90. package/dist/test/unit/parser/parser.test.js +6 -28
  91. package/dist/test/unit/parser/parser.test.js.map +1 -1
  92. package/dist/test/unit/parser/type-inference-vectors.test.d.ts +2 -0
  93. package/dist/test/unit/parser/type-inference-vectors.test.d.ts.map +1 -0
  94. package/dist/test/unit/parser/type-inference-vectors.test.js +40 -0
  95. package/dist/test/unit/parser/type-inference-vectors.test.js.map +1 -0
  96. package/dist/test/unit/parser/type-inference.test.d.ts +2 -1
  97. package/dist/test/unit/parser/type-inference.test.d.ts.map +1 -1
  98. package/dist/test/unit/parser/type-inference.test.js +93 -159
  99. package/dist/test/unit/parser/type-inference.test.js.map +1 -1
  100. package/dist/test/unit/regex-guard.test.js +6 -6
  101. package/dist/test/unit/regex-guard.test.js.map +1 -1
  102. package/package.json +1 -1
  103. package/dist/src/config/lexicons/type-inference-rules.d.ts +0 -19
  104. package/dist/src/config/lexicons/type-inference-rules.d.ts.map +0 -1
  105. package/dist/src/config/lexicons/type-inference-rules.js +0 -63
  106. package/dist/src/config/lexicons/type-inference-rules.js.map +0 -1
@@ -1,13 +1,10 @@
1
1
  /**
2
- * 类型推断引擎单元测试
2
+ * 类型推断引擎单元测试(ADR 0056 §3.2:分词 + 词表,与词法表无关)。
3
+ * 全量对照见 type-inference-vectors.test.ts(aster-lang-locales 共用测试向量)。
3
4
  */
4
5
  import { describe, it } from 'node:test';
5
6
  import assert from 'node:assert';
6
- import { inferFieldType, inferTypeFromConstraints, refineInferredType, BASE_NAMING_RULES, } from '../../../src/parser/type-inference.js';
7
- import { EN_US } from '../../../src/config/lexicons/en-US.js';
8
- import { attachTypeInferenceRules } from '../../../src/config/lexicons/type-inference-rules.js';
9
- /** en-US lexicon 附带类型推断规则 */
10
- const enUS = attachTypeInferenceRules(EN_US);
7
+ import { inferFieldType, tokenize, constraintType, refine } from '../../../src/parser/type-inference.js';
11
8
  /** 辅助函数:创建 span */
12
9
  const freshSpan = () => ({ start: { line: 1, col: 1 }, end: { line: 1, col: 1 } });
13
10
  /** 辅助函数:获取类型名称 */
@@ -18,20 +15,17 @@ function getTypeName(type) {
18
15
  return type.kind;
19
16
  }
20
17
  describe('类型推断引擎', () => {
21
- describe('BASE_NAMING_RULES 基线规则', () => {
22
- it('基线规则应包含语言无关的通用类型', () => {
23
- const typesCovered = new Set(BASE_NAMING_RULES.map(r => r.type));
24
- assert.ok(typesCovered.has('Text'), '应包含 Text 规则');
25
- assert.ok(typesCovered.has('Int'), '应包含 Int 规则');
26
- assert.ok(typesCovered.has('Float'), '应包含 Float 规则');
18
+ describe('分词', () => {
19
+ it('驼峰、全大写缩写、snake_case 与数字', () => {
20
+ assert.deepStrictEqual(tokenize('interestRateAPR'), ['interest', 'rate', 'apr']);
21
+ assert.deepStrictEqual(tokenize('userID'), ['user', 'id']);
22
+ assert.deepStrictEqual(tokenize('days_since_consent'), ['days', 'since', 'consent']);
23
+ assert.deepStrictEqual(tokenize('pre_auth__Code'), ['pre', 'auth', 'code']);
24
+ assert.deepStrictEqual(tokenize('abc123Score'), ['abc', '123', 'score']);
27
25
  });
28
- it('附加 en-US overlay 后应包含所有类型', () => {
29
- const rules = enUS.typeInferenceRules;
30
- const overlayTypes = new Set(rules.map(r => r.type));
31
- const baseTypes = new Set(BASE_NAMING_RULES.map(r => r.type));
32
- const allTypes = new Set([...baseTypes, ...overlayTypes]);
33
- assert.ok(allTypes.has('Bool'), '应包含 Bool 规则');
34
- assert.ok(allTypes.has('DateTime'), '应包含 DateTime 规则');
26
+ it('含非 ASCII 字符的名字词列表为空', () => {
27
+ assert.deepStrictEqual(tokenize('是否成年'), []);
28
+ assert.deepStrictEqual(tokenize('kundeGültig'), []);
35
29
  });
36
30
  });
37
31
  describe('inferFieldType 字段类型推断', () => {
@@ -97,50 +91,49 @@ describe('类型推断引擎', () => {
97
91
  assert.strictEqual(getTypeName(inferFieldType('currentIndex')), 'Int');
98
92
  });
99
93
  });
100
- describe('布尔类型推断(需要 en-US overlay)', () => {
94
+ describe('布尔类型推断', () => {
101
95
  it('应该将 is* 前缀推断为 Bool', () => {
102
- assert.strictEqual(getTypeName(inferFieldType('isActive', [], enUS)), 'Bool');
103
- assert.strictEqual(getTypeName(inferFieldType('isApproved', [], enUS)), 'Bool');
104
- assert.strictEqual(getTypeName(inferFieldType('isVerified', [], enUS)), 'Bool');
96
+ assert.strictEqual(getTypeName(inferFieldType('isActive')), 'Bool');
97
+ assert.strictEqual(getTypeName(inferFieldType('isApproved')), 'Bool');
98
+ assert.strictEqual(getTypeName(inferFieldType('isVerified')), 'Bool');
105
99
  });
106
100
  it('应该将 has* 前缀推断为 Bool', () => {
107
- assert.strictEqual(getTypeName(inferFieldType('hasPermission', [], enUS)), 'Bool');
108
- assert.strictEqual(getTypeName(inferFieldType('hasAccess', [], enUS)), 'Bool');
101
+ assert.strictEqual(getTypeName(inferFieldType('hasPermission')), 'Bool');
102
+ assert.strictEqual(getTypeName(inferFieldType('hasAccess')), 'Bool');
109
103
  });
110
104
  it('应该将 can*/should*/allow* 前缀推断为 Bool', () => {
111
- assert.strictEqual(getTypeName(inferFieldType('canEdit', [], enUS)), 'Bool');
112
- assert.strictEqual(getTypeName(inferFieldType('shouldNotify', [], enUS)), 'Bool');
113
- assert.strictEqual(getTypeName(inferFieldType('allowAccess', [], enUS)), 'Bool');
105
+ assert.strictEqual(getTypeName(inferFieldType('canEdit')), 'Bool');
106
+ assert.strictEqual(getTypeName(inferFieldType('shouldNotify')), 'Bool');
107
+ assert.strictEqual(getTypeName(inferFieldType('allowAccess')), 'Bool');
114
108
  });
115
109
  it('应该将 *Flag/*Enabled/*Active 后缀推断为 Bool', () => {
116
- assert.strictEqual(getTypeName(inferFieldType('debugFlag', [], enUS)), 'Bool');
117
- assert.strictEqual(getTypeName(inferFieldType('featureEnabled', [], enUS)), 'Bool');
118
- assert.strictEqual(getTypeName(inferFieldType('accountActive', [], enUS)), 'Bool');
119
- });
120
- it('无 lexicon 时不应推断 Bool', () => {
121
- assert.strictEqual(getTypeName(inferFieldType('isActive')), 'Text');
122
- assert.strictEqual(getTypeName(inferFieldType('hasPermission')), 'Text');
110
+ assert.strictEqual(getTypeName(inferFieldType('debugFlag')), 'Bool');
111
+ assert.strictEqual(getTypeName(inferFieldType('featureEnabled')), 'Bool');
112
+ assert.strictEqual(getTypeName(inferFieldType('accountActive')), 'Bool');
123
113
  });
124
114
  });
125
- describe('日期时间类型推断(需要 en-US overlay)', () => {
115
+ describe('日期时间类型推断', () => {
126
116
  it('应该将 *Date/*Time 后缀推断为 DateTime', () => {
127
- assert.strictEqual(getTypeName(inferFieldType('birthDate', [], enUS)), 'DateTime');
128
- assert.strictEqual(getTypeName(inferFieldType('startTime', [], enUS)), 'DateTime');
129
- assert.strictEqual(getTypeName(inferFieldType('expiryDate', [], enUS)), 'DateTime');
117
+ assert.strictEqual(getTypeName(inferFieldType('birthDate')), 'DateTime');
118
+ assert.strictEqual(getTypeName(inferFieldType('startTime')), 'DateTime');
119
+ assert.strictEqual(getTypeName(inferFieldType('expiryDate')), 'DateTime');
130
120
  });
131
121
  it('应该将 *At/*Timestamp 后缀推断为 DateTime', () => {
132
- assert.strictEqual(getTypeName(inferFieldType('createdAt', [], enUS)), 'DateTime');
133
- assert.strictEqual(getTypeName(inferFieldType('updatedAt', [], enUS)), 'DateTime');
134
- assert.strictEqual(getTypeName(inferFieldType('eventTimestamp', [], enUS)), 'DateTime');
122
+ assert.strictEqual(getTypeName(inferFieldType('createdAt')), 'DateTime');
123
+ assert.strictEqual(getTypeName(inferFieldType('updatedAt')), 'DateTime');
124
+ assert.strictEqual(getTypeName(inferFieldType('eventTimestamp')), 'DateTime');
135
125
  });
136
126
  it('应该将 *Created/*Updated/*Modified 后缀推断为 DateTime', () => {
137
- assert.strictEqual(getTypeName(inferFieldType('dateCreated', [], enUS)), 'DateTime');
138
- assert.strictEqual(getTypeName(inferFieldType('lastUpdated', [], enUS)), 'DateTime');
139
- assert.strictEqual(getTypeName(inferFieldType('lastModified', [], enUS)), 'DateTime');
127
+ assert.strictEqual(getTypeName(inferFieldType('dateCreated')), 'DateTime');
128
+ assert.strictEqual(getTypeName(inferFieldType('lastUpdated')), 'DateTime');
129
+ assert.strictEqual(getTypeName(inferFieldType('lastModified')), 'DateTime');
140
130
  });
141
- it('无 lexicon 时不应推断 DateTime', () => {
142
- assert.strictEqual(getTypeName(inferFieldType('birthDate')), 'Text');
143
- assert.strictEqual(getTypeName(inferFieldType('createdAt')), 'Text');
131
+ });
132
+ describe('与词法表无关:三种语言的规则对所有名字生效', () => {
133
+ it('中文、德语名字照常推断', () => {
134
+ assert.strictEqual(getTypeName(inferFieldType('是否成年')), 'Bool');
135
+ assert.strictEqual(getTypeName(inferFieldType('信用评分')), 'Int');
136
+ assert.strictEqual(getTypeName(inferFieldType('kundeGueltig')), 'Bool');
144
137
  });
145
138
  });
146
139
  describe('默认类型推断', () => {
@@ -150,10 +143,10 @@ describe('类型推断引擎', () => {
150
143
  assert.strictEqual(getTypeName(inferFieldType('info')), 'Text');
151
144
  assert.strictEqual(getTypeName(inferFieldType('something')), 'Text');
152
145
  });
153
- it('*Value 后缀应该推断为 Int(需要 en-US overlay)', () => {
154
- assert.strictEqual(getTypeName(inferFieldType('value', [], enUS)), 'Int');
155
- assert.strictEqual(getTypeName(inferFieldType('vehicleValue', [], enUS)), 'Int');
156
- assert.strictEqual(getTypeName(inferFieldType('totalValue', [], enUS)), 'Int');
146
+ it('*Value 后缀应该推断为 Int', () => {
147
+ assert.strictEqual(getTypeName(inferFieldType('value')), 'Int');
148
+ assert.strictEqual(getTypeName(inferFieldType('vehicleValue')), 'Int');
149
+ assert.strictEqual(getTypeName(inferFieldType('totalValue')), 'Int');
157
150
  });
158
151
  it('明确的文本字段应该返回 Text', () => {
159
152
  assert.strictEqual(getTypeName(inferFieldType('firstName')), 'Text');
@@ -162,125 +155,66 @@ describe('类型推断引擎', () => {
162
155
  });
163
156
  });
164
157
  });
165
- describe('inferTypeFromConstraints 约束驱动推断', () => {
166
- it('Range 约束(整数边界)应该推断为 Int', () => {
167
- const constraints = [
168
- { kind: 'Range', min: 0, max: 100, span: freshSpan() },
169
- ];
170
- assert.strictEqual(inferTypeFromConstraints(constraints), 'Int');
171
- });
172
- it('Range 约束(小数边界)应该推断为 Float', () => {
173
- const constraints = [
174
- { kind: 'Range', min: 0.5, max: 1.5, span: freshSpan() },
175
- ];
176
- assert.strictEqual(inferTypeFromConstraints(constraints), 'Float');
177
- });
178
- it('Range 约束(仅最小值,整数)应该推断为 Int', () => {
179
- const constraints = [
180
- { kind: 'Range', min: 18, span: freshSpan() },
181
- ];
182
- assert.strictEqual(inferTypeFromConstraints(constraints), 'Int');
183
- });
184
- it('Range 约束(仅最大值,小数)应该推断为 Float', () => {
185
- const constraints = [
186
- { kind: 'Range', max: 99.99, span: freshSpan() },
187
- ];
188
- assert.strictEqual(inferTypeFromConstraints(constraints), 'Float');
189
- });
190
- it('Pattern 约束应该推断为 Text', () => {
191
- const constraints = [
192
- { kind: 'Pattern', regexp: '^[A-Z]+$', span: freshSpan() },
193
- ];
194
- assert.strictEqual(inferTypeFromConstraints(constraints), 'Text');
195
- });
196
- it('Required 约束不应该影响类型推断', () => {
197
- const constraints = [
198
- { kind: 'Required', span: freshSpan() },
199
- ];
200
- assert.strictEqual(inferTypeFromConstraints(constraints), null);
201
- });
202
- it('多个约束时应该综合考虑', () => {
203
- const constraints = [
204
- { kind: 'Required', span: freshSpan() },
205
- { kind: 'Range', min: 0, max: 100, span: freshSpan() },
206
- ];
207
- assert.strictEqual(inferTypeFromConstraints(constraints), 'Int');
208
- });
209
- it('Int + Float 应该提升为 Float', () => {
210
- const constraints = [
211
- { kind: 'Range', min: 0, max: 100, span: freshSpan() }, // Int
212
- { kind: 'Range', min: 0.5, span: freshSpan() }, // Float
213
- ];
214
- assert.strictEqual(inferTypeFromConstraints(constraints), 'Float');
215
- });
216
- });
217
- describe('refineInferredType 类型修正', () => {
218
- it('默认 Text 类型应该被 Range 约束修正为 Int', () => {
219
- const textType = inferFieldType('value'); // 默认 Text
220
- const constraints = [
221
- { kind: 'Range', min: 0, max: 100, span: freshSpan() },
222
- ];
223
- const refined = refineInferredType(textType, constraints);
224
- assert.strictEqual(getTypeName(refined), 'Int');
158
+ const pattern = { kind: 'Pattern', regexp: '^[A-Z]+$', span: freshSpan() };
159
+ const required = { kind: 'Required', span: freshSpan() };
160
+ describe('约束类型(第 5 步)', () => {
161
+ it('Range 按端点规范十进制串是否含小数点区分 Int / Float', () => {
162
+ assert.strictEqual(constraintType([{ kind: 'Range', min: 0, minRaw: '0', max: 100, maxRaw: '100', span: freshSpan() }]), 'Int');
163
+ assert.strictEqual(constraintType([{ kind: 'Range', min: 0.5, minRaw: '0.5', max: 1.5, maxRaw: '1.5', span: freshSpan() }]), 'Float');
164
+ assert.strictEqual(constraintType([{ kind: 'Range', min: 18, minRaw: '18', span: freshSpan() }]), 'Int');
165
+ assert.strictEqual(constraintType([{ kind: 'Range', max: 99.99, maxRaw: '99.99', span: freshSpan() }]), 'Float');
225
166
  });
226
- it('默认 Text 类型应该被小数 Range 约束修正为 Float', () => {
227
- const textType = inferFieldType('value');
228
- const constraints = [
229
- { kind: 'Range', min: 0.1, max: 1.5, span: freshSpan() },
230
- ];
231
- const refined = refineInferredType(textType, constraints);
232
- assert.strictEqual(getTypeName(refined), 'Float');
167
+ it('端点按规范十进制值判断(与 core TypeInferenceTest.rangeBoundsUseCanonicalDecimal 同组用例)', () => {
168
+ const r = (minRaw, maxRaw) => ({
169
+ kind: 'Range',
170
+ ...(minRaw === undefined ? {} : { min: Number(minRaw), minRaw }),
171
+ ...(maxRaw === undefined ? {} : { max: Number(maxRaw), maxRaw }),
172
+ span: freshSpan(),
173
+ });
174
+ assert.strictEqual(constraintType([r('1.0', '2.00')]), 'Int');
175
+ assert.strictEqual(constraintType([r('1E3')]), 'Int');
176
+ assert.strictEqual(constraintType([r(undefined, '1.50')]), 'Float');
177
+ assert.strictEqual(constraintType([r('-0.5')]), 'Float');
178
+ assert.strictEqual(constraintType([r('0', '1e-1')]), 'Float');
233
179
  });
234
- it('Int 类型应该被小数 Range 约束提升为 Float', () => {
235
- const intType = inferFieldType('itemCount'); // Int
236
- const constraints = [
237
- { kind: 'Range', min: 0.5, max: 10.5, span: freshSpan() },
238
- ];
239
- const refined = refineInferredType(intType, constraints);
240
- assert.strictEqual(getTypeName(refined), 'Float');
180
+ it('端点原文 1.0 的规范串是 1,不算小数', () => {
181
+ assert.strictEqual(constraintType([{ kind: 'Range', min: 1, minRaw: '1.0', max: 2, maxRaw: '2.00', span: freshSpan() }]), 'Int');
241
182
  });
242
- it('一致的类型不应该被修改', () => {
243
- const intType = inferFieldType('itemCount'); // Int
244
- const constraints = [
245
- { kind: 'Range', min: 0, max: 100, span: freshSpan() },
246
- ];
247
- const refined = refineInferredType(intType, constraints);
248
- assert.strictEqual(getTypeName(refined), 'Int');
183
+ it('Pattern 得 Text,Required 不影响', () => {
184
+ assert.strictEqual(constraintType([pattern]), 'Text');
185
+ assert.strictEqual(constraintType([required]), null);
186
+ assert.strictEqual(constraintType([required, { kind: 'Range', min: 0, minRaw: '0', max: 100, maxRaw: '100', span: freshSpan() }]), 'Int');
249
187
  });
250
- it('无约束时不应该修改类型', () => {
251
- const textType = inferFieldType('name');
252
- const refined = refineInferredType(textType, []);
253
- assert.strictEqual(getTypeName(refined), 'Text');
188
+ it('Range 优先于 Pattern,与书写顺序无关', () => {
189
+ assert.strictEqual(constraintType([pattern, { kind: 'Range', min: 1, minRaw: '1', max: 10, maxRaw: '10', span: freshSpan() }]), 'Int');
190
+ assert.strictEqual(constraintType([{ kind: 'Range', min: 1, minRaw: '1', max: 10, maxRaw: '10', span: freshSpan() }, pattern]), 'Int');
254
191
  });
255
- it('仅 Required 约束不应该修改类型', () => {
256
- const textType = inferFieldType('name');
257
- const constraints = [
258
- { kind: 'Required', span: freshSpan() },
259
- ];
260
- const refined = refineInferredType(textType, constraints);
261
- assert.strictEqual(getTypeName(refined), 'Text');
192
+ it('多个 Range 中任一端点为小数即 Float', () => {
193
+ assert.strictEqual(constraintType([{ kind: 'Range', min: 0, minRaw: '0', max: 100, maxRaw: '100', span: freshSpan() }, { kind: 'Range', min: 0.5, minRaw: '0.5', span: freshSpan() }]), 'Float');
262
194
  });
263
195
  });
264
- describe('约束与命名联合推断', () => {
265
- it('约束优先于命名推断', () => {
266
- // name 字段名默认推断为 Text
267
- // 但有 Range 约束时应该推断为 Int
268
- const constraints = [
269
- { kind: 'Range', min: 1, max: 100, span: freshSpan() },
270
- ];
271
- const type = inferFieldType('data', constraints);
272
- assert.strictEqual(getTypeName(type), 'Int');
196
+ describe('名字结果与约束合并', () => {
197
+ it('合并规则', () => {
198
+ assert.strictEqual(refine('Text', 'Int'), 'Int');
199
+ assert.strictEqual(refine('Text', 'Float'), 'Float');
200
+ assert.strictEqual(refine('Int', 'Float'), 'Float');
201
+ assert.strictEqual(refine('Float', 'Int'), 'Float');
202
+ assert.strictEqual(refine('Bool', 'Int'), 'Bool');
203
+ assert.strictEqual(refine('Int', 'Text'), 'Int');
204
+ assert.strictEqual(refine('Text', null), 'Text');
273
205
  });
274
- it('无约束时使用命名推断', () => {
275
- const type = inferFieldType('loanAmount', []);
276
- assert.strictEqual(getTypeName(type), 'Float');
206
+ it('inferFieldType 先按名字、再按约束修正', () => {
207
+ assert.strictEqual(getTypeName(inferFieldType('data', [{ kind: 'Range', min: 1, minRaw: '1', max: 100, maxRaw: '100', span: freshSpan() }])), 'Int');
208
+ assert.strictEqual(getTypeName(inferFieldType('score', [pattern])), 'Int');
209
+ assert.strictEqual(getTypeName(inferFieldType('approved', [{ kind: 'Range', min: 0, minRaw: '0', max: 1, maxRaw: '1', span: freshSpan() }])), 'Bool');
210
+ assert.strictEqual(getTypeName(inferFieldType('loanAmount', [])), 'Float');
277
211
  });
278
212
  });
279
213
  /**
280
214
  * 双引擎 parity 回归(aster-lang-core issue #80 / #82 / #83)。
281
215
  *
282
- * 下表与 aster-lang-core `TypeInferenceTest.shouldMatchTsEngineInference`
283
- * **逐字对应**:同一字段名在两引擎必须推断出同一类型。改动任一侧规则前先跑两处。
216
+ * 下表与 aster-lang-core `TypeInferenceTest.shouldMatchTsEngineInference` 逐字对应;
217
+ * 规则统一后(ADR 0056)两侧还共同运行 locales 的共用测试向量。
284
218
  */
285
219
  describe('双引擎 parity 回归', () => {
286
220
  const CASES = [
@@ -333,7 +267,7 @@ describe('类型推断引擎', () => {
333
267
  ];
334
268
  for (const [fieldName, expected] of CASES) {
335
269
  it(`${fieldName} → ${expected}`, () => {
336
- assert.strictEqual(getTypeName(inferFieldType(fieldName, [], enUS)), expected);
270
+ assert.strictEqual(getTypeName(inferFieldType(fieldName)), expected);
337
271
  });
338
272
  }
339
273
  });
@@ -1 +1 @@
1
- {"version":3,"file":"type-inference.test.js","sourceRoot":"","sources":["../../../../test/unit/parser/type-inference.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AAGhG,6BAA6B;AAC7B,MAAM,IAAI,GAAY,wBAAwB,CAAC,KAAK,CAAC,CAAC;AAEtD,mBAAmB;AACnB,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAEnF,kBAAkB;AAClB,SAAS,WAAW,CAAC,IAAU;IAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AAED,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACjE,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;YACnD,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC;YACjD,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAmB,CAAC;YACvC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;YAC/C,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;YACvB,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;gBAC5B,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACvE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAClE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;gBAC5B,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAClE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;gBACpC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;gBACxC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACvE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAClE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;gBACjC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACvE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;gBAC3C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACtE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACzE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;gBAClD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC3E,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC1E,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;gBAC3C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACzE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;gBAC3C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACpE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACtE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;gBAC1C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC9D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACtE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;gBAC1B,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACrE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACxE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACtE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;gBAC5C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACnE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACtE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;YACxC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;gBAC5B,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC9E,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAChF,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAClF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;gBAC7B,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACnF,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACjF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;gBAC5C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC7E,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAClF,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACnF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;gBAC/C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC/E,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,gBAAgB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACpF,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACrF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;gBAC9B,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACpE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;YAC1C,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;gBACxC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACnF,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACnF,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YACtF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;gBAC3C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACnF,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACnF,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,gBAAgB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC1F,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;gBACxD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACrF,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACrF,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YACxF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;gBAClC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;gBAC1B,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAChE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC/D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAChE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;gBAC9C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC1E,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACjF,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACjF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;gBAC1B,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACvE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC/C,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,WAAW,GAAiB;gBAChC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;aACvD,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,WAAW,GAAiB;gBAChC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;aACzD,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,WAAW,GAAiB;gBAChC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;aAC9C,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,WAAW,GAAiB;gBAChC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;aACjD,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;YAC9B,MAAM,WAAW,GAAiB;gBAChC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;aAC3D,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;YAC9B,MAAM,WAAW,GAAiB;gBAChC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;aACxC,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrB,MAAM,WAAW,GAAiB;gBAChC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;gBACvC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;aACvD,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,WAAW,GAAiB;gBAChC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM;gBAC9D,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ;aACzD,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU;YACpD,MAAM,WAAW,GAAiB;gBAChC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;aACvD,CAAC;YACF,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC1D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YACzC,MAAM,WAAW,GAAiB;gBAChC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;aACzD,CAAC;YACF,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC1D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;YACnD,MAAM,WAAW,GAAiB;gBAChC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;aAC1D,CAAC;YACF,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACzD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrB,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;YACnD,MAAM,WAAW,GAAiB;gBAChC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;aACvD,CAAC;YACF,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACzD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrB,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;YAC9B,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,WAAW,GAAiB;gBAChC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;aACxC,CAAC;YACF,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC1D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YACnB,qBAAqB;YACrB,wBAAwB;YACxB,MAAM,WAAW,GAAiB;gBAChC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;aACvD,CAAC;YACF,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YACpB,MAAM,IAAI,GAAG,cAAc,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YAC9C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,MAAM,KAAK,GAA6C;YACtD,oCAAoC;YACpC,CAAC,OAAO,EAAE,MAAM,CAAC;YACjB,CAAC,UAAU,EAAE,MAAM,CAAC;YACpB,CAAC,SAAS,EAAE,MAAM,CAAC;YACnB,CAAC,SAAS,EAAE,MAAM,CAAC;YACnB,CAAC,SAAS,EAAE,MAAM,CAAC;YACnB,CAAC,SAAS,EAAE,MAAM,CAAC;YACnB,CAAC,UAAU,EAAE,MAAM,CAAC;YACpB,kDAAkD;YAClD,CAAC,cAAc,EAAE,MAAM,CAAC;YACxB,CAAC,SAAS,EAAE,MAAM,CAAC;YACnB,CAAC,QAAQ,EAAE,MAAM,CAAC;YAClB,iCAAiC;YACjC,CAAC,KAAK,EAAE,KAAK,CAAC;YACd,CAAC,SAAS,EAAE,KAAK,CAAC;YAClB,CAAC,WAAW,EAAE,KAAK,CAAC;YACpB,4BAA4B;YAC5B,CAAC,YAAY,EAAE,UAAU,CAAC;YAC1B,CAAC,aAAa,EAAE,UAAU,CAAC;YAC3B,CAAC,aAAa,EAAE,OAAO,CAAC;YACxB,CAAC,UAAU,EAAE,MAAM,CAAC;YACpB,gBAAgB;YAChB,CAAC,SAAS,EAAE,MAAM,CAAC;YACnB,CAAC,WAAW,EAAE,MAAM,CAAC;YACrB,CAAC,WAAW,EAAE,MAAM,CAAC;YACrB,CAAC,IAAI,EAAE,MAAM,CAAC;YACd,iCAAiC;YACjC,CAAC,eAAe,EAAE,MAAM,CAAC;YACzB,CAAC,YAAY,EAAE,MAAM,CAAC;YACtB,CAAC,gBAAgB,EAAE,MAAM,CAAC;YAC1B,0DAA0D;YAC1D,CAAC,eAAe,EAAE,MAAM,CAAC;YACzB,CAAC,cAAc,EAAE,MAAM,CAAC;YACxB,0BAA0B;YAC1B,CAAC,QAAQ,EAAE,MAAM,CAAC;YAClB,CAAC,iBAAiB,EAAE,MAAM,CAAC;YAC3B,sEAAsE;YACtE,0CAA0C;YAC1C,CAAC,kBAAkB,EAAE,MAAM,CAAC;YAC5B,CAAC,WAAW,EAAE,MAAM,CAAC;YACrB,CAAC,aAAa,EAAE,MAAM,CAAC;YACvB,CAAC,cAAc,EAAE,UAAU,CAAC;YAC5B,eAAe;YACf,CAAC,eAAe,EAAE,KAAK,CAAC;YACxB,CAAC,YAAY,EAAE,KAAK,CAAC;YACrB,CAAC,MAAM,EAAE,KAAK,CAAC;SAChB,CAAC;QAEF,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC;YAC1C,EAAE,CAAC,GAAG,SAAS,MAAM,QAAQ,EAAE,EAAE,GAAG,EAAE;gBACpC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACjF,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"type-inference.test.js","sourceRoot":"","sources":["../../../../test/unit/parser/type-inference.test.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@
11
11
  import test from 'node:test';
12
12
  import assert from 'node:assert';
13
13
  import { compileGuardedRegex, MAX_PATTERN_LENGTH, } from '../../src/config/lexicons/regex-guard.js';
14
- import { loadTypeInferenceRules } from '../../src/config/lexicons/overlay-loader.js';
14
+ import { loadInputGenerationRules } from '../../src/config/lexicons/overlay-loader.js';
15
15
  test('regex-guard 测试套件', async (t) => {
16
16
  await t.test('拒绝 nested-quantifier ReDoS 模式 (a+)+', () => {
17
17
  const result = compileGuardedRegex('(a+)+', 'g');
@@ -113,17 +113,17 @@ test('regex-guard 测试套件', async (t) => {
113
113
  assert.strictEqual(result.ok, true, `合法模式 ${ok} 被误伤:${result.ok ? '' : result.error}`);
114
114
  }
115
115
  });
116
- await t.test('overlay-loader 跳过恶意 type-inference 规则', () => {
117
- const rules = loadTypeInferenceRules({
116
+ await t.test('overlay-loader 跳过恶意 input-generation 规则', () => {
117
+ const rules = loadInputGenerationRules({
118
118
  version: 1,
119
119
  rules: [
120
- { pattern: '(a+)+', type: 'Int', priority: 1 },
121
- { pattern: '\\bage\\b', type: 'Int', priority: 2 },
120
+ { pattern: '(a+)+', value: 1, priority: 1 },
121
+ { pattern: '\\bage\\b', value: 30, priority: 2 },
122
122
  ],
123
123
  });
124
124
  // 恶意的 (a+)+ 被跳过,只保留合法规则
125
125
  assert.strictEqual(rules.length, 1);
126
- assert.strictEqual(rules[0].type, 'Int');
126
+ assert.strictEqual(rules[0].generate(), 30);
127
127
  assert.strictEqual(rules[0].pattern.test('age'), true);
128
128
  });
129
129
  });
@@ -1 +1 @@
1
- {"version":3,"file":"regex-guard.test.js","sourceRoot":"","sources":["../../../test/unit/regex-guard.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"regex-guard.test.js","sourceRoot":"","sources":["../../../test/unit/regex-guard.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aster-cloud/aster-lang-ts",
3
- "version": "2.0.0",
3
+ "version": "3.0.0",
4
4
  "description": "Aster CNL (Controlled Natural Language) TypeScript Compiler - Lexer, Parser, AST, Core IR, Type Checker",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -1,19 +0,0 @@
1
- /**
2
- * 语言特定的类型推断命名规则(overlay 模式)
3
- *
4
- * 不修改 @generated 的 lexicon 文件,而是通过 attach 函数
5
- * 在运行时将规则附加到 Lexicon 对象上。
6
- *
7
- * 规则数据来源优先级:
8
- * 1. 从语言包 JSON overlay 加载(通过 registerOverlayRules)
9
- * 2. 内联 fallback 常量(当 JSON overlay 尚未接入时使用)
10
- */
11
- import type { Lexicon } from './types.js';
12
- import type { OverlayData } from './overlay-loader.js';
13
- /**
14
- * 从 JSON overlay 数据注册类型推断规则(覆盖内联 fallback)。
15
- */
16
- export declare function registerOverlayTypeInferenceRules(lexiconId: string, overlay: NonNullable<OverlayData['typeInferenceRules']>): void;
17
- /** 为 lexicon 附加类型推断规则(不修改原对象) */
18
- export declare function attachTypeInferenceRules(lexicon: Lexicon): Lexicon;
19
- //# sourceMappingURL=type-inference-rules.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"type-inference-rules.d.ts","sourceRoot":"","sources":["../../../../src/config/lexicons/type-inference-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AA2CvD;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,GAAG,IAAI,CAElI;AAED,iCAAiC;AACjC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAKlE"}
@@ -1,63 +0,0 @@
1
- /**
2
- * 语言特定的类型推断命名规则(overlay 模式)
3
- *
4
- * 不修改 @generated 的 lexicon 文件,而是通过 attach 函数
5
- * 在运行时将规则附加到 Lexicon 对象上。
6
- *
7
- * 规则数据来源优先级:
8
- * 1. 从语言包 JSON overlay 加载(通过 registerOverlayRules)
9
- * 2. 内联 fallback 常量(当 JSON overlay 尚未接入时使用)
10
- */
11
- import { loadTypeInferenceRules } from './overlay-loader.js';
12
- /** 内联 fallback:英文类型推断规则 */
13
- const EN_US_RULES = [
14
- // ★词边界:前缀必须是**完整的词**,后接驼峰大写、下划线(snake_case)或词尾。
15
- // 否则 canceledAt / wasteAmount / isbnCode / storage 会因「can」「was」「is」
16
- // 的裸前缀被误判为 Bool。
17
- // `(?:s|es|d|ed)?` 允许常见词形变化,覆盖 snake_case 的 requires_consent /
18
- // validated_at 等真实语料写法(corpus hipaa-validation-demo 即用 requires_consent)。
19
- // lookahead 内的 [A-Z_] 必须区分大小写,故整条不能加 /i;前缀的大小写变体
20
- // 显式展开为 [iI][sS] 形式(等价于 Java 侧的内联 (?-i:…))。
21
- { pattern: /^(?:[iI][sS]|[hH][aA][sS]|[cC][aA][nN]|[sS][hH][oO][uU][lL][dD]|[wW][aA][sS]|[wW][iI][lL][lL]|[dD][iI][dD]|[dD][oO][eE][sS]|[aA][lL][lL][oO][wW]|[eE][nN][aA][bB][lL][eE]|[dD][iI][sS][aA][bB][lL][eE]|[aA][cC][tT][iI][vV][eE]|[vV][aA][lL][iI][dD]|[rR][eE][qQ][uU][iI][rR][eE])(?:[sS]|[eE][sS]|[dD]|[eE][dD])?(?:[A-Z_]|$)/, type: 'Bool', priority: 11 },
22
- { pattern: /(?:Flag|Enabled|Disabled|Active|Valid|Approved|Rejected|Completed|Confirmed|Sufficient|Success|Passed|Verified)$/i, type: 'Bool', priority: 8 },
23
- { pattern: /(?:Date|Time|At|Timestamp|Created|Updated|Modified|Expired|Birthday|Anniversary)$/i, type: 'DateTime', priority: 10 },
24
- { pattern: /(?:Type|Status|Category|Kind|Mode)$/i, type: 'Text', priority: 8 },
25
- { pattern: /(?:Make|Model|Brand|Manufacturer)$/i, type: 'Text', priority: 7 },
26
- { pattern: /(?:Name|Title|Description|Comment|Note|Remark|Address|Email|Phone|Url|Path|Reason|Recommendation|Factors|Purpose)$/i, type: 'Text', priority: 7 },
27
- { pattern: /(?:Rating|Limit|Premium|Deductible|Multiplier|Deposit|Line|Utilization|Inquiries|Rent|Debt|Cards|Value|Payments)$/i, type: 'Int', priority: 9 },
28
- { pattern: /(?:Licensed|Employed|Job|Experience)$/i, type: 'Int', priority: 8 },
29
- { pattern: /(?:Bps|APR|APY)$/i, type: 'Int', priority: 9 },
30
- { pattern: /(?:Checked)$/i, type: 'Int', priority: 8 },
31
- ];
32
- /** 内联 fallback:中文类型推断规则 */
33
- const ZH_CN_RULES = [
34
- { pattern: /^(?:是否|有无|能否|可否|允许|启用|禁用)/, type: 'Bool', priority: 11 },
35
- { pattern: /(?:批准|通过|有效|合格|可疑|确认|验证)$/, type: 'Bool', priority: 8 },
36
- { pattern: /(?:评分|年龄|数量|次数|额度|金额|保费|免赔额|账龄|卡数)$/, type: 'Int', priority: 10 },
37
- { pattern: /(?:利率|费率|比率|百分比)$/, type: 'Float', priority: 9 },
38
- ];
39
- /** 内联 fallback:德语类型推断规则 */
40
- const DE_DE_RULES = [
41
- { pattern: /(?:genehmigt|berechtigt|verdaechtig|aktiviert|deaktiviert|aktiv|gueltig|erfolgreich|bestanden|bestaetigt|verifiziert|abgelehnt|abgeschlossen|erforderlich)$/i, type: 'Bool', priority: 8 },
42
- ];
43
- const RULES_BY_LEXICON = {
44
- 'en-US': EN_US_RULES,
45
- 'zh-CN': ZH_CN_RULES,
46
- 'de-DE': DE_DE_RULES,
47
- };
48
- /**
49
- * 从 JSON overlay 数据注册类型推断规则(覆盖内联 fallback)。
50
- */
51
- export function registerOverlayTypeInferenceRules(lexiconId, overlay) {
52
- RULES_BY_LEXICON[lexiconId] = loadTypeInferenceRules(overlay);
53
- }
54
- /** 为 lexicon 附加类型推断规则(不修改原对象) */
55
- export function attachTypeInferenceRules(lexicon) {
56
- if (lexicon.typeInferenceRules)
57
- return lexicon;
58
- const rules = RULES_BY_LEXICON[lexicon.id];
59
- if (!rules)
60
- return lexicon;
61
- return { ...lexicon, typeInferenceRules: rules };
62
- }
63
- //# sourceMappingURL=type-inference-rules.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"type-inference-rules.js","sourceRoot":"","sources":["../../../../src/config/lexicons/type-inference-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,2BAA2B;AAC3B,MAAM,WAAW,GAAiC;IAChD,gDAAgD;IAChD,sEAAsE;IACtE,mBAAmB;IACnB,iEAAiE;IACjE,4EAA4E;IAC5E,mDAAmD;IACnD,8CAA8C;IAC9C,EAAE,OAAO,EAAE,gUAAgU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;IACzW,EAAE,OAAO,EAAE,mHAAmH,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC3J,EAAE,OAAO,EAAE,oFAAoF,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;IACjI,EAAE,OAAO,EAAE,sCAAsC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC9E,EAAE,OAAO,EAAE,qCAAqC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC7E,EAAE,OAAO,EAAE,qHAAqH,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC7J,EAAE,OAAO,EAAE,oHAAoH,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC3J,EAAE,OAAO,EAAE,wCAAwC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC/E,EAAE,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC1D,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;CACvD,CAAC;AAEF,2BAA2B;AAC3B,MAAM,WAAW,GAAiC;IAChD,EAAE,OAAO,EAAE,2BAA2B,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;IACpE,EAAE,OAAO,EAAE,2BAA2B,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;IACnE,EAAE,OAAO,EAAE,qCAAqC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC7E,EAAE,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE;CAC7D,CAAC;AAEF,2BAA2B;AAC3B,MAAM,WAAW,GAAiC;IAChD,EAAE,OAAO,EAAE,8JAA8J,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;CACvM,CAAC;AAEF,MAAM,gBAAgB,GAAiD;IACrE,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,iCAAiC,CAAC,SAAiB,EAAE,OAAuD;IAC1H,gBAAgB,CAAC,SAAS,CAAC,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChE,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,IAAI,OAAO,CAAC,kBAAkB;QAAE,OAAO,OAAO,CAAC;IAC/C,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAC3B,OAAO,EAAE,GAAG,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;AACnD,CAAC"}