@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.
- package/CHANGELOG.md +27 -0
- package/dist/scripts/generate-naming-rules.d.ts +5 -0
- package/dist/scripts/generate-naming-rules.d.ts.map +1 -0
- package/dist/scripts/generate-naming-rules.js +35 -0
- package/dist/scripts/generate-naming-rules.js.map +1 -0
- package/dist/src/browser/schema.d.ts.map +1 -1
- package/dist/src/browser/schema.js +1 -3
- package/dist/src/browser/schema.js.map +1 -1
- package/dist/src/browser.d.ts.map +1 -1
- package/dist/src/browser.js +1 -3
- package/dist/src/browser.js.map +1 -1
- package/dist/src/compile-pipeline.d.ts.map +1 -1
- package/dist/src/compile-pipeline.js +1 -2
- package/dist/src/compile-pipeline.js.map +1 -1
- package/dist/src/config/lexicons/fallback-lexicon.d.ts +1 -1
- package/dist/src/config/lexicons/fallback-lexicon.d.ts.map +1 -1
- package/dist/src/config/lexicons/fallback-lexicon.js +1 -4
- package/dist/src/config/lexicons/fallback-lexicon.js.map +1 -1
- package/dist/src/config/lexicons/overlay-loader.d.ts +0 -13
- package/dist/src/config/lexicons/overlay-loader.d.ts.map +1 -1
- package/dist/src/config/lexicons/overlay-loader.js +0 -18
- package/dist/src/config/lexicons/overlay-loader.js.map +1 -1
- package/dist/src/config/lexicons/types.d.ts +0 -3
- package/dist/src/config/lexicons/types.d.ts.map +1 -1
- package/dist/src/config/lexicons/types.js.map +1 -1
- package/dist/src/core/lambda-captures.d.ts +14 -0
- package/dist/src/core/lambda-captures.d.ts.map +1 -0
- package/dist/src/core/lambda-captures.js +128 -0
- package/dist/src/core/lambda-captures.js.map +1 -0
- package/dist/src/lower_to_core.d.ts +0 -18
- package/dist/src/lower_to_core.d.ts.map +1 -1
- package/dist/src/lower_to_core.js +50 -90
- package/dist/src/lower_to_core.js.map +1 -1
- package/dist/src/mapping/mapping-ir.d.ts +2 -2
- package/dist/src/mapping/mapping-ir.js +2 -2
- package/dist/src/parser/expr-stmt-parser.d.ts.map +1 -1
- package/dist/src/parser/expr-stmt-parser.js +14 -8
- package/dist/src/parser/expr-stmt-parser.js.map +1 -1
- package/dist/src/parser/field-variant-parser.js +3 -3
- package/dist/src/parser/field-variant-parser.js.map +1 -1
- package/dist/src/parser/naming-rules.d.ts +19 -0
- package/dist/src/parser/naming-rules.d.ts.map +1 -0
- package/dist/src/parser/naming-rules.generated.d.ts +7 -0
- package/dist/src/parser/naming-rules.generated.d.ts.map +1 -0
- package/dist/src/parser/naming-rules.generated.js +392 -0
- package/dist/src/parser/naming-rules.generated.js.map +1 -0
- package/dist/src/parser/naming-rules.js +2 -0
- package/dist/src/parser/naming-rules.js.map +1 -0
- package/dist/src/parser/type-inference.d.ts +29 -70
- package/dist/src/parser/type-inference.d.ts.map +1 -1
- package/dist/src/parser/type-inference.js +82 -212
- package/dist/src/parser/type-inference.js.map +1 -1
- package/dist/src/parser/type-parser.d.ts.map +1 -1
- package/dist/src/parser/type-parser.js +12 -19
- package/dist/src/parser/type-parser.js.map +1 -1
- package/dist/src/parser.d.ts.map +1 -1
- package/dist/src/parser.js +2 -5
- package/dist/src/parser.js.map +1 -1
- package/dist/src/typecheck/effects.js +11 -4
- package/dist/src/typecheck/effects.js.map +1 -1
- package/dist/src/types/type-inference.d.ts +1 -13
- package/dist/src/types/type-inference.d.ts.map +1 -1
- package/dist/src/types/type-inference.js +1 -2
- package/dist/src/types/type-inference.js.map +1 -1
- package/dist/test/helpers/locales-type-inference.d.ts +6 -0
- package/dist/test/helpers/locales-type-inference.d.ts.map +1 -0
- package/dist/test/helpers/locales-type-inference.js +14 -0
- package/dist/test/helpers/locales-type-inference.js.map +1 -0
- package/dist/test/integration/compliance/compliance-smoke.test.js +1 -2
- package/dist/test/integration/compliance/compliance-smoke.test.js.map +1 -1
- package/dist/test/unit/core/resolve-typed-references.test.js +3 -2
- package/dist/test/unit/core/resolve-typed-references.test.js.map +1 -1
- package/dist/test/unit/effect/effect-caps-explicit-only.test.d.ts +2 -0
- package/dist/test/unit/effect/effect-caps-explicit-only.test.d.ts.map +1 -0
- package/dist/test/unit/effect/effect-caps-explicit-only.test.js +73 -0
- package/dist/test/unit/effect/effect-caps-explicit-only.test.js.map +1 -0
- package/dist/test/unit/lambda-capture-parity.test.js +43 -14
- package/dist/test/unit/lambda-capture-parity.test.js.map +1 -1
- package/dist/test/unit/lexicons/fallback-lexicon.test.d.ts +1 -1
- package/dist/test/unit/lexicons/fallback-lexicon.test.js +2 -4
- package/dist/test/unit/lexicons/fallback-lexicon.test.js.map +1 -1
- package/dist/test/unit/parser/inferred-type-anchor.test.d.ts +2 -0
- package/dist/test/unit/parser/inferred-type-anchor.test.d.ts.map +1 -0
- package/dist/test/unit/parser/inferred-type-anchor.test.js +83 -0
- package/dist/test/unit/parser/inferred-type-anchor.test.js.map +1 -0
- package/dist/test/unit/parser/naming-rules-parity.test.d.ts +2 -0
- package/dist/test/unit/parser/naming-rules-parity.test.d.ts.map +1 -0
- package/dist/test/unit/parser/naming-rules-parity.test.js +26 -0
- package/dist/test/unit/parser/naming-rules-parity.test.js.map +1 -0
- package/dist/test/unit/parser/parser.test.js +6 -28
- package/dist/test/unit/parser/parser.test.js.map +1 -1
- package/dist/test/unit/parser/type-inference-vectors.test.d.ts +2 -0
- package/dist/test/unit/parser/type-inference-vectors.test.d.ts.map +1 -0
- package/dist/test/unit/parser/type-inference-vectors.test.js +40 -0
- package/dist/test/unit/parser/type-inference-vectors.test.js.map +1 -0
- package/dist/test/unit/parser/type-inference.test.d.ts +2 -1
- package/dist/test/unit/parser/type-inference.test.d.ts.map +1 -1
- package/dist/test/unit/parser/type-inference.test.js +93 -159
- package/dist/test/unit/parser/type-inference.test.js.map +1 -1
- package/dist/test/unit/regex-guard.test.js +6 -6
- package/dist/test/unit/regex-guard.test.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/config/lexicons/type-inference-rules.d.ts +0 -19
- package/dist/src/config/lexicons/type-inference-rules.d.ts.map +0 -1
- package/dist/src/config/lexicons/type-inference-rules.js +0 -63
- 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,
|
|
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('
|
|
22
|
-
it('
|
|
23
|
-
|
|
24
|
-
assert.
|
|
25
|
-
assert.
|
|
26
|
-
assert.
|
|
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('
|
|
29
|
-
|
|
30
|
-
|
|
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('
|
|
94
|
+
describe('布尔类型推断', () => {
|
|
101
95
|
it('应该将 is* 前缀推断为 Bool', () => {
|
|
102
|
-
assert.strictEqual(getTypeName(inferFieldType('isActive'
|
|
103
|
-
assert.strictEqual(getTypeName(inferFieldType('isApproved'
|
|
104
|
-
assert.strictEqual(getTypeName(inferFieldType('isVerified'
|
|
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'
|
|
108
|
-
assert.strictEqual(getTypeName(inferFieldType('hasAccess'
|
|
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'
|
|
112
|
-
assert.strictEqual(getTypeName(inferFieldType('shouldNotify'
|
|
113
|
-
assert.strictEqual(getTypeName(inferFieldType('allowAccess'
|
|
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'
|
|
117
|
-
assert.strictEqual(getTypeName(inferFieldType('featureEnabled'
|
|
118
|
-
assert.strictEqual(getTypeName(inferFieldType('accountActive'
|
|
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('
|
|
115
|
+
describe('日期时间类型推断', () => {
|
|
126
116
|
it('应该将 *Date/*Time 后缀推断为 DateTime', () => {
|
|
127
|
-
assert.strictEqual(getTypeName(inferFieldType('birthDate'
|
|
128
|
-
assert.strictEqual(getTypeName(inferFieldType('startTime'
|
|
129
|
-
assert.strictEqual(getTypeName(inferFieldType('expiryDate'
|
|
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'
|
|
133
|
-
assert.strictEqual(getTypeName(inferFieldType('updatedAt'
|
|
134
|
-
assert.strictEqual(getTypeName(inferFieldType('eventTimestamp'
|
|
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'
|
|
138
|
-
assert.strictEqual(getTypeName(inferFieldType('lastUpdated'
|
|
139
|
-
assert.strictEqual(getTypeName(inferFieldType('lastModified'
|
|
127
|
+
assert.strictEqual(getTypeName(inferFieldType('dateCreated')), 'DateTime');
|
|
128
|
+
assert.strictEqual(getTypeName(inferFieldType('lastUpdated')), 'DateTime');
|
|
129
|
+
assert.strictEqual(getTypeName(inferFieldType('lastModified')), 'DateTime');
|
|
140
130
|
});
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
|
154
|
-
assert.strictEqual(getTypeName(inferFieldType('value'
|
|
155
|
-
assert.strictEqual(getTypeName(inferFieldType('vehicleValue'
|
|
156
|
-
assert.strictEqual(getTypeName(inferFieldType('totalValue'
|
|
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
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
];
|
|
170
|
-
assert.strictEqual(
|
|
171
|
-
|
|
172
|
-
|
|
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('
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
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('
|
|
235
|
-
|
|
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
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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
|
-
|
|
252
|
-
|
|
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('
|
|
256
|
-
|
|
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
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
assert.strictEqual(
|
|
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
|
-
|
|
276
|
-
assert.strictEqual(getTypeName(
|
|
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
|
|
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":"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"}
|
|
1
|
+
{"version":3,"file":"type-inference.test.js","sourceRoot":"","sources":["../../../../test/unit/parser/type-inference.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAGzG,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,IAAI,EAAE,GAAG,EAAE;QAClB,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YACjF,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;YACrF,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YAC5E,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;YAC7B,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC;QACtD,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,QAAQ,EAAE,GAAG,EAAE;YACtB,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;gBAC5B,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACpE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACtE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;gBAC7B,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACzE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;gBAC5C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACnE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACxE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;gBAC/C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC1E,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;QAEL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;YACxB,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;gBACxC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACzE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACzE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;gBAC3C,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACzE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACzE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAChF,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;gBACxD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBAC3E,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBAC3E,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC9E,CAAC,CAAC,CAAC;QAEL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACrC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;gBACrB,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAChE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC/D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC1E,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,oBAAoB,EAAE,GAAG,EAAE;gBAC5B,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAChE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACvE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACvE,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,MAAM,OAAO,GAAe,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;IACvF,MAAM,QAAQ,GAAe,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;IAErE,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAE3B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAChI,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACtI,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACzG,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACnH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;YACnF,MAAM,CAAC,GAAG,CAAC,MAAe,EAAE,MAAe,EAAc,EAAE,CAAC,CAAC;gBAC3D,IAAI,EAAE,OAAO;gBACb,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;gBAChE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;gBAChE,IAAI,EAAE,SAAS,EAAE;aAClB,CAAC,CAAC;YACH,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC9D,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACtD,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACpE,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACnI,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACtD,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACrD,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5I,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACvI,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACzI,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACnM,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACd,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACrJ,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC3E,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACtJ,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7E,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,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -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 {
|
|
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 跳过恶意
|
|
117
|
-
const rules =
|
|
116
|
+
await t.test('overlay-loader 跳过恶意 input-generation 规则', () => {
|
|
117
|
+
const rules = loadInputGenerationRules({
|
|
118
118
|
version: 1,
|
|
119
119
|
rules: [
|
|
120
|
-
{ pattern: '(a+)+',
|
|
121
|
-
{ pattern: '\\bage\\b',
|
|
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].
|
|
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":"AAAA;;;;;;;;;GASG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,
|
|
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,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"}
|