@mirascript/typed 0.1.64 → 0.1.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -27
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/json.d.ts +5 -2
- package/dist/json.d.ts.map +1 -1
- package/dist/json.js +129 -48
- package/dist/json.js.map +1 -1
- package/dist/parser.d.ts +29 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +13 -0
- package/dist/parser.js.map +1 -1
- package/dist/simplifier.d.ts +48 -0
- package/dist/simplifier.d.ts.map +1 -0
- package/dist/simplifier.js +332 -0
- package/dist/simplifier.js.map +1 -0
- package/dist/stringify.d.ts +7 -0
- package/dist/stringify.d.ts.map +1 -0
- package/dist/stringify.js +186 -0
- package/dist/stringify.js.map +1 -0
- package/dist/type.js +601 -289
- package/dist/type.js.map +1 -1
- package/package.json +7 -6
- package/src/index.ts +2 -0
- package/src/json.ts +142 -59
- package/src/parser.ts +49 -1
- package/src/simplifier.ts +404 -0
- package/src/stringify.ts +191 -0
- package/src/type.peggy +49 -2
package/README.md
CHANGED
|
@@ -1,14 +1,34 @@
|
|
|
1
1
|
# @mirascript/typed
|
|
2
2
|
|
|
3
|
-
`@mirascript/typed`
|
|
3
|
+
`@mirascript/typed` 用于解析 MiraScript 类型定义,并可将结果转换为 JSON Schema。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
MiraScript 本身不执行编译期或运行时类型检查。该包主要用于文档、提示系统和结构化数据校验场景。
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## 安装
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm add @mirascript/typed
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## 快速开始
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { parse, toJSONSchema } from '@mirascript/typed';
|
|
17
|
+
|
|
18
|
+
const type = parse('record<number>');
|
|
19
|
+
console.log(toJSONSchema(type));
|
|
20
|
+
|
|
21
|
+
console.log(toJSONSchema(parse('(a: number)'), { loose: false }));
|
|
22
|
+
console.log(toJSONSchema(parse('(a: number)'), { loose: true }));
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 类型语法概览
|
|
8
26
|
|
|
9
27
|
- 内置类型:`nil` `string` `number` `boolean` `record` `array`
|
|
10
28
|
- `array` 支持泛型:`array<elementType>`
|
|
11
|
-
- `record`
|
|
29
|
+
- `record` 支持泛型:`record<valueType>` 与 `record<keyType, valueType>`
|
|
30
|
+
- 交叉类型:`typeA & typeB`
|
|
31
|
+
- 可选前缀 `&`
|
|
12
32
|
- 联合类型:`typeA | typeB`
|
|
13
33
|
- 可选前缀 `|`
|
|
14
34
|
- 数组类型:`type[]`(同 `array<type>`)
|
|
@@ -31,32 +51,23 @@
|
|
|
31
51
|
- 字符串插值类型:三种引号均支持 `$()` 插值
|
|
32
52
|
- 示例:`` `hello $(type)` ``、`"value: $(string | number)"`
|
|
33
53
|
- `$` 必须紧接 `(`,否则报错;`\$` 可表示字面量 `$`
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
```ts
|
|
44
|
-
import { parse, toJSONSchema } from '@mirascript/typed';
|
|
45
|
-
|
|
46
|
-
const type = parse('record<number>');
|
|
47
|
-
console.log(toJSONSchema(type));
|
|
48
|
-
// { type: 'object', additionalProperties: { type: 'number' } }
|
|
49
|
-
console.log(toJSONSchema(parse('(a: number)'), { loose: false }));
|
|
50
|
-
// { type: 'object', properties: { a: { type: 'number' } }, required: ['a'], additionalProperties: false }
|
|
51
|
-
console.log(toJSONSchema(parse('(a: number)'), { loose: true }));
|
|
52
|
-
// { type: 'object', properties: { a: { type: 'number' } }, additionalProperties: true }
|
|
53
|
-
```
|
|
54
|
+
- 元组类型:`[typeA, typeB]` 和 `[typeA, ..typeB]`
|
|
55
|
+
- 固定长度元组:`[number, string, boolean]`
|
|
56
|
+
- 带剩余元素的元组:`[number, ..string[]]`(至少一个 `number`,后跟任意个 `string`)
|
|
57
|
+
- 剩余元素可出现在任意位置:`[number, ..string[], boolean]`、`[..number[], string]`
|
|
58
|
+
- 空元组:`[]`
|
|
59
|
+
- 嵌套元组:`[[number, string], boolean]`
|
|
60
|
+
- 反射类型:`type(identifier)`
|
|
61
|
+
- 获取指定标识符的类型:`type(MyVar)`
|
|
62
|
+
- 可用于联合类型:`type(A) | string`
|
|
54
63
|
|
|
55
64
|
## 常用导出
|
|
56
65
|
|
|
57
|
-
- `parse()`:将类型字符串解析为 `Type`
|
|
58
|
-
- `
|
|
59
|
-
- `Type
|
|
66
|
+
- `parse()`:将类型字符串解析为 `Type`
|
|
67
|
+
- `simplify()`:在 `Type` AST 层做归一化和展开,默认开启全部简化;可通过 `SimplifyOptions` 逐项关闭
|
|
68
|
+
- `stringify()`:将 `Type` 转换为类型字符串
|
|
69
|
+
- `toJSONSchema()`:将 `Type` 转换为 JSON Schema
|
|
70
|
+
- `Type`、`KnownType`、`RecordType`、`FunctionType`、`TemplateType`、`GenericType` 等类型
|
|
60
71
|
|
|
61
72
|
## 开发
|
|
62
73
|
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC"}
|
package/dist/json.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type JSONSchema, $schema } from 'json-schema-typed';
|
|
2
2
|
import type { Type } from './parser.js';
|
|
3
|
+
export type { JSONSchema } from 'json-schema-typed';
|
|
3
4
|
/** Options for toJSONSchema */
|
|
4
5
|
export interface ToJSONSchemaOptions {
|
|
5
6
|
/** When true, object schemas allow arbitrary additional properties */
|
|
6
7
|
loose?: boolean;
|
|
7
8
|
}
|
|
8
9
|
/** Converts a Type object into JSON Schema */
|
|
9
|
-
export declare function toJSONSchema(type: Type, options?: ToJSONSchemaOptions):
|
|
10
|
+
export declare function toJSONSchema(type: Type, options?: ToJSONSchemaOptions): JSONSchema.Interface & {
|
|
11
|
+
$schema: typeof $schema;
|
|
12
|
+
};
|
|
10
13
|
//# sourceMappingURL=json.d.ts.map
|
package/dist/json.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG7D,OAAO,KAAK,EAAmD,IAAI,EAAE,MAAM,aAAa,CAAC;AAEzF,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA4HpD,+BAA+B;AAC/B,MAAM,WAAW,mBAAmB;IAChC,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AA8KD,8CAA8C;AAC9C,wBAAgB,YAAY,CACxB,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,mBAAmB,GAC9B,UAAU,CAAC,SAAS,GAAG;IAAE,OAAO,EAAE,OAAO,OAAO,CAAA;CAAE,CAWpD"}
|
package/dist/json.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { $schema } from 'json-schema-typed';
|
|
1
2
|
import { REG_NUMBER } from '@mirascript/constants';
|
|
3
|
+
import { simplify } from './simplifier.js';
|
|
2
4
|
/** Converts a KnownType or NamedType into JSON Schema */
|
|
3
5
|
function string(type) {
|
|
4
6
|
switch (type) {
|
|
@@ -11,19 +13,19 @@ function string(type) {
|
|
|
11
13
|
case 'nil':
|
|
12
14
|
return { type: 'null' };
|
|
13
15
|
case 'array':
|
|
14
|
-
return { type: 'array' };
|
|
16
|
+
return { type: 'array', items: true };
|
|
15
17
|
case 'record':
|
|
16
18
|
return { type: 'object' };
|
|
17
19
|
case 'extern':
|
|
18
|
-
return
|
|
20
|
+
return true;
|
|
19
21
|
case 'any':
|
|
20
|
-
return
|
|
22
|
+
return true;
|
|
21
23
|
case 'unknown':
|
|
22
|
-
return
|
|
24
|
+
return true;
|
|
23
25
|
case 'never':
|
|
24
|
-
return
|
|
26
|
+
return false;
|
|
25
27
|
default:
|
|
26
|
-
return
|
|
28
|
+
return true;
|
|
27
29
|
}
|
|
28
30
|
}
|
|
29
31
|
/** Escapes a literal string for use in a regular expression */
|
|
@@ -83,6 +85,10 @@ function templatePartPattern(part, grouping) {
|
|
|
83
85
|
}
|
|
84
86
|
}
|
|
85
87
|
}
|
|
88
|
+
else if (part.kind === 'intersection') {
|
|
89
|
+
// Regex intersection is not representable in general; keep behavior conservative.
|
|
90
|
+
result = RE_ANY;
|
|
91
|
+
}
|
|
86
92
|
else {
|
|
87
93
|
result = RE_ANY;
|
|
88
94
|
}
|
|
@@ -105,65 +111,76 @@ function templatePattern(type) {
|
|
|
105
111
|
}
|
|
106
112
|
/** Converts a LiteralType into JSON Schema */
|
|
107
113
|
function literal(type) {
|
|
108
|
-
|
|
109
|
-
return { type: 'boolean', const: type.value };
|
|
110
|
-
}
|
|
111
|
-
return { type: 'string', const: type.value };
|
|
114
|
+
return { const: type.value };
|
|
112
115
|
}
|
|
113
116
|
/** Converts a union of LiteralTypes into a single JSON Schema enum */
|
|
114
117
|
function literalEnum(types) {
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if (valueTypes.size === 1) {
|
|
119
|
-
schema.type = valueTypes.values().next().value;
|
|
120
|
-
}
|
|
118
|
+
const schema = {
|
|
119
|
+
enum: types.map((t) => t.value),
|
|
120
|
+
};
|
|
121
121
|
return schema;
|
|
122
122
|
}
|
|
123
123
|
/** Type guard for LiteralType */
|
|
124
124
|
function isLiteralType(type) {
|
|
125
|
-
return typeof type
|
|
125
|
+
return typeof type == 'object' && type.kind === 'literal';
|
|
126
126
|
}
|
|
127
127
|
/** Converts a Type object into JSON Schema */
|
|
128
|
-
|
|
129
|
-
const loose = options
|
|
130
|
-
|
|
128
|
+
function toJSONSchemaImpl(type, options) {
|
|
129
|
+
const { loose } = options;
|
|
130
|
+
const simplified = simplify(type);
|
|
131
|
+
if (typeof simplified == 'symbol') {
|
|
131
132
|
return {};
|
|
132
133
|
}
|
|
133
|
-
if (typeof
|
|
134
|
-
return string(
|
|
134
|
+
if (typeof simplified == 'string') {
|
|
135
|
+
return string(simplified);
|
|
135
136
|
}
|
|
136
|
-
if (
|
|
137
|
+
if (simplified.kind === 'array') {
|
|
137
138
|
return {
|
|
138
139
|
type: 'array',
|
|
139
|
-
items:
|
|
140
|
+
items: toJSONSchemaImpl(simplified.element, options),
|
|
140
141
|
};
|
|
141
142
|
}
|
|
142
|
-
if (
|
|
143
|
+
if (simplified.kind === 'union') {
|
|
143
144
|
const anyOf = [];
|
|
144
145
|
const literals = [];
|
|
145
|
-
for (const t of
|
|
146
|
+
for (const t of simplified.types) {
|
|
146
147
|
if (isLiteralType(t)) {
|
|
147
148
|
literals.push(t);
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
const child = toJSONSchemaImpl(t, options);
|
|
152
|
+
if (child === true) {
|
|
153
|
+
return true;
|
|
148
154
|
}
|
|
149
|
-
|
|
150
|
-
|
|
155
|
+
if (child === false) {
|
|
156
|
+
continue;
|
|
151
157
|
}
|
|
158
|
+
anyOf.push(child);
|
|
152
159
|
}
|
|
153
160
|
if (literals.length > 0) {
|
|
154
161
|
anyOf.push(literalEnum(literals));
|
|
155
162
|
}
|
|
163
|
+
if (anyOf.length === 0) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
156
166
|
if (anyOf.length === 1) {
|
|
157
167
|
return anyOf[0];
|
|
158
168
|
}
|
|
159
169
|
return { anyOf };
|
|
160
170
|
}
|
|
161
|
-
if (
|
|
162
|
-
|
|
171
|
+
if (simplified.kind === 'intersection') {
|
|
172
|
+
const allOf = simplified.types.map((t) => toJSONSchemaImpl(t, options));
|
|
173
|
+
if (allOf.length === 1) {
|
|
174
|
+
return allOf[0];
|
|
175
|
+
}
|
|
176
|
+
return { allOf };
|
|
177
|
+
}
|
|
178
|
+
if (simplified.kind === 'record') {
|
|
179
|
+
if ('fields' in simplified) {
|
|
163
180
|
const properties = {};
|
|
164
181
|
const required = [];
|
|
165
|
-
for (const field of
|
|
166
|
-
properties[field.name] =
|
|
182
|
+
for (const field of simplified.fields) {
|
|
183
|
+
properties[field.name] = toJSONSchemaImpl(field.type, options);
|
|
167
184
|
if (!field.optional && !loose) {
|
|
168
185
|
required.push(field.name);
|
|
169
186
|
}
|
|
@@ -178,32 +195,32 @@ export function toJSONSchema(type, options) {
|
|
|
178
195
|
}
|
|
179
196
|
return schema;
|
|
180
197
|
}
|
|
181
|
-
const valueSchema =
|
|
182
|
-
if (
|
|
198
|
+
const valueSchema = toJSONSchemaImpl(simplified.value, options);
|
|
199
|
+
if (simplified.key == null) {
|
|
183
200
|
return {
|
|
184
201
|
type: 'object',
|
|
185
202
|
additionalProperties: valueSchema,
|
|
186
203
|
};
|
|
187
204
|
}
|
|
188
|
-
if (typeof
|
|
189
|
-
if (isLiteralType(
|
|
205
|
+
if (typeof simplified.key == 'object') {
|
|
206
|
+
if (isLiteralType(simplified.key)) {
|
|
190
207
|
const schema = {
|
|
191
208
|
type: 'object',
|
|
192
|
-
properties: { [String(
|
|
209
|
+
properties: { [String(simplified.key.value)]: valueSchema },
|
|
193
210
|
additionalProperties: loose,
|
|
194
211
|
};
|
|
195
212
|
return schema;
|
|
196
213
|
}
|
|
197
|
-
else if (
|
|
214
|
+
else if (simplified.key.kind === 'union' && simplified.key.types.every(isLiteralType)) {
|
|
198
215
|
const schema = {
|
|
199
216
|
type: 'object',
|
|
200
|
-
properties: Object.fromEntries(
|
|
217
|
+
properties: Object.fromEntries(simplified.key.types.map((t) => [String(t.value), valueSchema])),
|
|
201
218
|
additionalProperties: loose,
|
|
202
219
|
};
|
|
203
220
|
return schema;
|
|
204
221
|
}
|
|
205
222
|
}
|
|
206
|
-
const pattern = templatePartPattern(
|
|
223
|
+
const pattern = templatePartPattern(simplified.key, false);
|
|
207
224
|
if (pattern === RE_ANY) {
|
|
208
225
|
return {
|
|
209
226
|
type: 'object',
|
|
@@ -217,17 +234,81 @@ export function toJSONSchema(type, options) {
|
|
|
217
234
|
};
|
|
218
235
|
return schema;
|
|
219
236
|
}
|
|
220
|
-
if (
|
|
221
|
-
return literal(
|
|
237
|
+
if (simplified.kind === 'literal') {
|
|
238
|
+
return literal(simplified);
|
|
222
239
|
}
|
|
223
|
-
if (
|
|
224
|
-
return
|
|
240
|
+
if (simplified.kind === 'function') {
|
|
241
|
+
return false;
|
|
225
242
|
}
|
|
226
|
-
if (
|
|
227
|
-
return { type: 'string', pattern: templatePattern(
|
|
243
|
+
if (simplified.kind === 'template') {
|
|
244
|
+
return { type: 'string', pattern: templatePattern(simplified) };
|
|
245
|
+
}
|
|
246
|
+
if (simplified.kind === 'tuple') {
|
|
247
|
+
// Collect element schemas, unwrapping array from rest elements (..T[] → T).
|
|
248
|
+
// Non-array rest (e.g. ..string) is treated as any ({}).
|
|
249
|
+
const elementSchemas = simplified.elements.map((e) => {
|
|
250
|
+
const t = e.type;
|
|
251
|
+
if (!e.spread)
|
|
252
|
+
return toJSONSchemaImpl(t, options);
|
|
253
|
+
if (typeof t == 'object' && t.kind === 'array') {
|
|
254
|
+
return toJSONSchemaImpl(t.element, options);
|
|
255
|
+
}
|
|
256
|
+
return true;
|
|
257
|
+
});
|
|
258
|
+
const prefixItems = [];
|
|
259
|
+
let i = 0;
|
|
260
|
+
for (; i < elementSchemas.length; i++) {
|
|
261
|
+
const el = simplified.elements[i];
|
|
262
|
+
if (el.spread)
|
|
263
|
+
break;
|
|
264
|
+
prefixItems.push(elementSchemas[i]);
|
|
265
|
+
}
|
|
266
|
+
const items = [];
|
|
267
|
+
let hasAny = false;
|
|
268
|
+
for (; i < elementSchemas.length; i++) {
|
|
269
|
+
const schema = elementSchemas[i];
|
|
270
|
+
items.push(schema);
|
|
271
|
+
if (schema === true) {
|
|
272
|
+
hasAny = true;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
const schema = { type: 'array' };
|
|
276
|
+
if (prefixItems.length > 0) {
|
|
277
|
+
schema.prefixItems = prefixItems;
|
|
278
|
+
}
|
|
279
|
+
if (hasAny) {
|
|
280
|
+
schema.items = true;
|
|
281
|
+
}
|
|
282
|
+
else if (items.length > 1) {
|
|
283
|
+
schema.items = { anyOf: items };
|
|
284
|
+
}
|
|
285
|
+
else if (items.length === 1) {
|
|
286
|
+
schema.items = items[0];
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
schema.items = loose;
|
|
290
|
+
}
|
|
291
|
+
return schema;
|
|
292
|
+
}
|
|
293
|
+
if (simplified.kind === 'reflection') {
|
|
294
|
+
return true;
|
|
228
295
|
}
|
|
229
296
|
/* c8 ignore next 3 */
|
|
230
|
-
|
|
231
|
-
return
|
|
297
|
+
simplified;
|
|
298
|
+
return true;
|
|
299
|
+
}
|
|
300
|
+
/** Converts a Type object into JSON Schema */
|
|
301
|
+
export function toJSONSchema(type, options) {
|
|
302
|
+
let schema = toJSONSchemaImpl(type, { loose: options?.loose ?? false });
|
|
303
|
+
if (schema === true) {
|
|
304
|
+
schema = {};
|
|
305
|
+
}
|
|
306
|
+
else if (schema === false) {
|
|
307
|
+
schema = { not: true };
|
|
308
|
+
}
|
|
309
|
+
return {
|
|
310
|
+
...schema,
|
|
311
|
+
$schema,
|
|
312
|
+
};
|
|
232
313
|
}
|
|
233
314
|
//# sourceMappingURL=json.js.map
|
package/dist/json.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"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"}
|
package/dist/parser.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** MiraScript type */
|
|
2
|
-
export type Type = KnownType | NamedType | GenericType | LiteralType | TemplateType | ArrayType | UnionType | RecordType | FunctionType;
|
|
2
|
+
export type Type = KnownType | NamedType | GenericType | LiteralType | TemplateType | ArrayType | UnionType | IntersectionType | RecordType | FunctionType | TupleType | ReflectionType;
|
|
3
3
|
/** Generic type parameter reference in MiraScript */
|
|
4
4
|
export type GenericType = symbol;
|
|
5
5
|
/** Literal type in MiraScript */
|
|
@@ -27,6 +27,13 @@ export interface UnionType {
|
|
|
27
27
|
/** Types in the union */
|
|
28
28
|
types: Type[];
|
|
29
29
|
}
|
|
30
|
+
/** Intersection type in MiraScript */
|
|
31
|
+
export interface IntersectionType {
|
|
32
|
+
/** Tag */
|
|
33
|
+
kind: 'intersection';
|
|
34
|
+
/** Types in the intersection */
|
|
35
|
+
types: Type[];
|
|
36
|
+
}
|
|
30
37
|
/** Array type in MiraScript */
|
|
31
38
|
export interface ArrayType {
|
|
32
39
|
/** Tag */
|
|
@@ -79,6 +86,27 @@ export interface FunctionParameter {
|
|
|
79
86
|
/** Whether the parameter is a rest parameter */
|
|
80
87
|
spread?: boolean;
|
|
81
88
|
}
|
|
89
|
+
/** Tuple type in MiraScript */
|
|
90
|
+
export interface TupleType {
|
|
91
|
+
/** Tag */
|
|
92
|
+
kind: 'tuple';
|
|
93
|
+
/** Elements in the tuple */
|
|
94
|
+
elements: TupleElement[];
|
|
95
|
+
}
|
|
96
|
+
/** Tuple element in MiraScript */
|
|
97
|
+
export interface TupleElement {
|
|
98
|
+
/** Element type */
|
|
99
|
+
type: Type;
|
|
100
|
+
/** Whether the element is a rest element */
|
|
101
|
+
spread?: boolean;
|
|
102
|
+
}
|
|
103
|
+
/** Reflection type in MiraScript */
|
|
104
|
+
export interface ReflectionType {
|
|
105
|
+
/** Tag */
|
|
106
|
+
kind: 'reflection';
|
|
107
|
+
/** The name of the variable being reflected */
|
|
108
|
+
name: string;
|
|
109
|
+
}
|
|
82
110
|
/**
|
|
83
111
|
* Parses a type string into a Type object.
|
|
84
112
|
*/
|
package/dist/parser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAEA,sBAAsB;AACtB,MAAM,MAAM,IAAI,GACV,SAAS,GACT,SAAS,GACT,WAAW,GACX,WAAW,GACX,YAAY,GACZ,SAAS,GACT,SAAS,GACT,UAAU,GACV,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/parser.js
CHANGED
|
@@ -31,6 +31,10 @@ function resolveGenerics(type, scope = new Map()) {
|
|
|
31
31
|
type.types = type.types.map((t) => resolveGenerics(t, scope));
|
|
32
32
|
return type;
|
|
33
33
|
}
|
|
34
|
+
if (type.kind === 'intersection') {
|
|
35
|
+
type.types = type.types.map((t) => resolveGenerics(t, scope));
|
|
36
|
+
return type;
|
|
37
|
+
}
|
|
34
38
|
if (type.kind === 'record') {
|
|
35
39
|
if ('fields' in type) {
|
|
36
40
|
for (const field of type.fields) {
|
|
@@ -52,6 +56,15 @@ function resolveGenerics(type, scope = new Map()) {
|
|
|
52
56
|
type.parts = type.parts.map((part) => resolveGenerics(part, scope));
|
|
53
57
|
return type;
|
|
54
58
|
}
|
|
59
|
+
if (type.kind === 'tuple') {
|
|
60
|
+
for (const element of type.elements) {
|
|
61
|
+
element.type = resolveGenerics(element.type, scope);
|
|
62
|
+
}
|
|
63
|
+
return type;
|
|
64
|
+
}
|
|
65
|
+
if (type.kind === 'reflection') {
|
|
66
|
+
return type;
|
|
67
|
+
}
|
|
55
68
|
/* c8 ignore next 3 */
|
|
56
69
|
(type);
|
|
57
70
|
return type;
|
package/dist/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Type } from './parser.js';
|
|
2
|
+
/** Top types that can be absorbed / eliminated in simplification. */
|
|
3
|
+
type TopType = 'unknown' | 'never' | 'any';
|
|
4
|
+
/** Controls which type simplifications are applied. */
|
|
5
|
+
export interface SimplifyOptions {
|
|
6
|
+
/** Flatten nested union nodes. */
|
|
7
|
+
flattenUnions?: boolean;
|
|
8
|
+
/** Flatten nested intersection nodes. */
|
|
9
|
+
flattenIntersections?: boolean;
|
|
10
|
+
/** Remove duplicate members inside union nodes. */
|
|
11
|
+
deduplicateUnions?: boolean;
|
|
12
|
+
/** Remove duplicate members inside intersection nodes. */
|
|
13
|
+
deduplicateIntersections?: boolean;
|
|
14
|
+
/** Remove single-member union nodes. */
|
|
15
|
+
unwrapSingleUnion?: boolean;
|
|
16
|
+
/** Remove single-member intersection nodes. */
|
|
17
|
+
unwrapSingleIntersection?: boolean;
|
|
18
|
+
/** Distribute intersections over unions. */
|
|
19
|
+
distributeIntersectionsOverUnions?: boolean;
|
|
20
|
+
/** Merge intersections of explicit record fields. */
|
|
21
|
+
mergeRecordIntersections?: boolean;
|
|
22
|
+
/** Inline tuple spread elements (..[A, B] → A, B). */
|
|
23
|
+
expandTupleSpreads?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Eliminate / absorb top types in unions.
|
|
26
|
+
* - `unknown | T` → `unknown`
|
|
27
|
+
* - `any | T` → `any`
|
|
28
|
+
* - `T | never` → `T`
|
|
29
|
+
* `true` enables all, or pass a subset of `'unknown' | 'never' | 'any'`.
|
|
30
|
+
*/
|
|
31
|
+
simplifyTopTypesInUnions?: boolean | TopType[];
|
|
32
|
+
/**
|
|
33
|
+
* Eliminate / absorb top types in intersections.
|
|
34
|
+
* - `never & T` → `never`
|
|
35
|
+
* - `T & unknown` → `T`
|
|
36
|
+
* - `T & any` → `T`
|
|
37
|
+
* `true` enables all, or pass a subset of `'unknown' | 'never' | 'any'`.
|
|
38
|
+
*/
|
|
39
|
+
simplifyTopTypesInIntersections?: boolean | TopType[];
|
|
40
|
+
/** `record<string, V>` → `record<V>` (string is the default key). */
|
|
41
|
+
normalizeGenericRecord?: boolean;
|
|
42
|
+
/** `array<any | unknown>` → `array` (no element constraint). */
|
|
43
|
+
normalizeGenericArray?: boolean;
|
|
44
|
+
}
|
|
45
|
+
/** Simplifies a Type AST in place, optionally disabling individual normalization passes. */
|
|
46
|
+
export declare function simplify(type: Type, options?: SimplifyOptions): Type;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=simplifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simplifier.d.ts","sourceRoot":"","sources":["../src/simplifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwC,IAAI,EAAE,MAAM,aAAa,CAAC;AAE9E,qEAAqE;AACrE,KAAK,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC;AAE3C,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC5B,kCAAkC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yCAAyC;IACzC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,0DAA0D;IAC1D,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,wCAAwC;IACxC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,+CAA+C;IAC/C,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,4CAA4C;IAC5C,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAC5C,qDAAqD;IACrD,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;;OAMG;IACH,wBAAwB,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC;IAC/C;;;;;;OAMG;IACH,+BAA+B,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC;IACtD,qEAAqE;IACrE,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,gEAAgE;IAChE,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC;AAkWD,4FAA4F;AAC5F,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAGpE"}
|