@mirascript/typed 0.1.63 → 0.1.65
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 +2 -2
- package/dist/json.d.ts.map +1 -1
- package/dist/json.js +100 -43
- 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 +25 -0
- package/dist/simplifier.d.ts.map +1 -0
- package/dist/simplifier.js +274 -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 +109 -55
- package/src/parser.ts +50 -11
- package/src/simplifier.ts +327 -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,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { JSONSchema } from 'json-schema-typed';
|
|
2
2
|
import type { Type } from './parser.js';
|
|
3
3
|
/** Options for toJSONSchema */
|
|
4
4
|
export interface ToJSONSchemaOptions {
|
|
@@ -6,5 +6,5 @@ export interface ToJSONSchemaOptions {
|
|
|
6
6
|
loose?: boolean;
|
|
7
7
|
}
|
|
8
8
|
/** Converts a Type object into JSON Schema */
|
|
9
|
-
export declare function toJSONSchema(type: Type, options?: ToJSONSchemaOptions):
|
|
9
|
+
export declare function toJSONSchema(type: Type, options?: ToJSONSchemaOptions): JSONSchema;
|
|
10
10
|
//# 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,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,KAAK,EAAmD,IAAI,EAAE,MAAM,aAAa,CAAC;AA4HzF,+BAA+B;AAC/B,MAAM,WAAW,mBAAmB;IAChC,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,8CAA8C;AAC9C,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,UAAU,CA+JlF"}
|
package/dist/json.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { REG_NUMBER } from '@mirascript/constants';
|
|
2
|
+
import { simplify } from './simplifier.js';
|
|
2
3
|
/** Converts a KnownType or NamedType into JSON Schema */
|
|
3
4
|
function string(type) {
|
|
4
5
|
switch (type) {
|
|
@@ -11,19 +12,19 @@ function string(type) {
|
|
|
11
12
|
case 'nil':
|
|
12
13
|
return { type: 'null' };
|
|
13
14
|
case 'array':
|
|
14
|
-
return { type: 'array' };
|
|
15
|
+
return { type: 'array', items: true };
|
|
15
16
|
case 'record':
|
|
16
17
|
return { type: 'object' };
|
|
17
18
|
case 'extern':
|
|
18
|
-
return
|
|
19
|
+
return true;
|
|
19
20
|
case 'any':
|
|
20
|
-
return
|
|
21
|
+
return true;
|
|
21
22
|
case 'unknown':
|
|
22
|
-
return
|
|
23
|
+
return true;
|
|
23
24
|
case 'never':
|
|
24
|
-
return
|
|
25
|
+
return false;
|
|
25
26
|
default:
|
|
26
|
-
return
|
|
27
|
+
return true;
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
/** Escapes a literal string for use in a regular expression */
|
|
@@ -83,6 +84,10 @@ function templatePartPattern(part, grouping) {
|
|
|
83
84
|
}
|
|
84
85
|
}
|
|
85
86
|
}
|
|
87
|
+
else if (part.kind === 'intersection') {
|
|
88
|
+
// Regex intersection is not representable in general; keep behavior conservative.
|
|
89
|
+
result = RE_ANY;
|
|
90
|
+
}
|
|
86
91
|
else {
|
|
87
92
|
result = RE_ANY;
|
|
88
93
|
}
|
|
@@ -105,44 +110,39 @@ function templatePattern(type) {
|
|
|
105
110
|
}
|
|
106
111
|
/** Converts a LiteralType into JSON Schema */
|
|
107
112
|
function literal(type) {
|
|
108
|
-
|
|
109
|
-
return { type: 'boolean', const: type.value };
|
|
110
|
-
}
|
|
111
|
-
return { type: 'string', const: type.value };
|
|
113
|
+
return { const: type.value };
|
|
112
114
|
}
|
|
113
115
|
/** Converts a union of LiteralTypes into a single JSON Schema enum */
|
|
114
116
|
function literalEnum(types) {
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if (valueTypes.size === 1) {
|
|
119
|
-
schema.type = valueTypes.values().next().value;
|
|
120
|
-
}
|
|
117
|
+
const schema = {
|
|
118
|
+
enum: types.map((t) => t.value),
|
|
119
|
+
};
|
|
121
120
|
return schema;
|
|
122
121
|
}
|
|
123
122
|
/** Type guard for LiteralType */
|
|
124
123
|
function isLiteralType(type) {
|
|
125
|
-
return typeof type
|
|
124
|
+
return typeof type == 'object' && type.kind === 'literal';
|
|
126
125
|
}
|
|
127
126
|
/** Converts a Type object into JSON Schema */
|
|
128
127
|
export function toJSONSchema(type, options) {
|
|
129
128
|
const loose = options?.loose ?? false;
|
|
130
|
-
|
|
129
|
+
const simplified = simplify(type);
|
|
130
|
+
if (typeof simplified == 'symbol') {
|
|
131
131
|
return {};
|
|
132
132
|
}
|
|
133
|
-
if (typeof
|
|
134
|
-
return string(
|
|
133
|
+
if (typeof simplified == 'string') {
|
|
134
|
+
return string(simplified);
|
|
135
135
|
}
|
|
136
|
-
if (
|
|
136
|
+
if (simplified.kind === 'array') {
|
|
137
137
|
return {
|
|
138
138
|
type: 'array',
|
|
139
|
-
items: toJSONSchema(
|
|
139
|
+
items: toJSONSchema(simplified.element, options),
|
|
140
140
|
};
|
|
141
141
|
}
|
|
142
|
-
if (
|
|
142
|
+
if (simplified.kind === 'union') {
|
|
143
143
|
const anyOf = [];
|
|
144
144
|
const literals = [];
|
|
145
|
-
for (const t of
|
|
145
|
+
for (const t of simplified.types) {
|
|
146
146
|
if (isLiteralType(t)) {
|
|
147
147
|
literals.push(t);
|
|
148
148
|
}
|
|
@@ -158,11 +158,18 @@ export function toJSONSchema(type, options) {
|
|
|
158
158
|
}
|
|
159
159
|
return { anyOf };
|
|
160
160
|
}
|
|
161
|
-
if (
|
|
162
|
-
|
|
161
|
+
if (simplified.kind === 'intersection') {
|
|
162
|
+
const allOf = simplified.types.map((t) => toJSONSchema(t, options));
|
|
163
|
+
if (allOf.length === 1) {
|
|
164
|
+
return allOf[0];
|
|
165
|
+
}
|
|
166
|
+
return { allOf };
|
|
167
|
+
}
|
|
168
|
+
if (simplified.kind === 'record') {
|
|
169
|
+
if ('fields' in simplified) {
|
|
163
170
|
const properties = {};
|
|
164
171
|
const required = [];
|
|
165
|
-
for (const field of
|
|
172
|
+
for (const field of simplified.fields) {
|
|
166
173
|
properties[field.name] = toJSONSchema(field.type, options);
|
|
167
174
|
if (!field.optional && !loose) {
|
|
168
175
|
required.push(field.name);
|
|
@@ -178,32 +185,32 @@ export function toJSONSchema(type, options) {
|
|
|
178
185
|
}
|
|
179
186
|
return schema;
|
|
180
187
|
}
|
|
181
|
-
const valueSchema = toJSONSchema(
|
|
182
|
-
if (
|
|
188
|
+
const valueSchema = toJSONSchema(simplified.value, options);
|
|
189
|
+
if (simplified.key == null) {
|
|
183
190
|
return {
|
|
184
191
|
type: 'object',
|
|
185
192
|
additionalProperties: valueSchema,
|
|
186
193
|
};
|
|
187
194
|
}
|
|
188
|
-
if (typeof
|
|
189
|
-
if (isLiteralType(
|
|
195
|
+
if (typeof simplified.key == 'object') {
|
|
196
|
+
if (isLiteralType(simplified.key)) {
|
|
190
197
|
const schema = {
|
|
191
198
|
type: 'object',
|
|
192
|
-
properties: { [String(
|
|
199
|
+
properties: { [String(simplified.key.value)]: valueSchema },
|
|
193
200
|
additionalProperties: loose,
|
|
194
201
|
};
|
|
195
202
|
return schema;
|
|
196
203
|
}
|
|
197
|
-
else if (
|
|
204
|
+
else if (simplified.key.kind === 'union' && simplified.key.types.every(isLiteralType)) {
|
|
198
205
|
const schema = {
|
|
199
206
|
type: 'object',
|
|
200
|
-
properties: Object.fromEntries(
|
|
207
|
+
properties: Object.fromEntries(simplified.key.types.map((t) => [String(t.value), valueSchema])),
|
|
201
208
|
additionalProperties: loose,
|
|
202
209
|
};
|
|
203
210
|
return schema;
|
|
204
211
|
}
|
|
205
212
|
}
|
|
206
|
-
const pattern = templatePartPattern(
|
|
213
|
+
const pattern = templatePartPattern(simplified.key, false);
|
|
207
214
|
if (pattern === RE_ANY) {
|
|
208
215
|
return {
|
|
209
216
|
type: 'object',
|
|
@@ -217,17 +224,67 @@ export function toJSONSchema(type, options) {
|
|
|
217
224
|
};
|
|
218
225
|
return schema;
|
|
219
226
|
}
|
|
220
|
-
if (
|
|
221
|
-
return literal(
|
|
227
|
+
if (simplified.kind === 'literal') {
|
|
228
|
+
return literal(simplified);
|
|
222
229
|
}
|
|
223
|
-
if (
|
|
224
|
-
return
|
|
230
|
+
if (simplified.kind === 'function') {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
if (simplified.kind === 'template') {
|
|
234
|
+
return { type: 'string', pattern: templatePattern(simplified) };
|
|
235
|
+
}
|
|
236
|
+
if (simplified.kind === 'tuple') {
|
|
237
|
+
// Collect element schemas, unwrapping array from rest elements (..T[] → T).
|
|
238
|
+
// Non-array rest (e.g. ..string) is treated as any ({}).
|
|
239
|
+
const elementSchemas = simplified.elements.map((e) => {
|
|
240
|
+
const t = e.type;
|
|
241
|
+
if (!e.spread)
|
|
242
|
+
return toJSONSchema(t, options);
|
|
243
|
+
if (typeof t == 'object' && t.kind === 'array') {
|
|
244
|
+
return toJSONSchema(t.element, options);
|
|
245
|
+
}
|
|
246
|
+
return true;
|
|
247
|
+
});
|
|
248
|
+
const prefixItems = [];
|
|
249
|
+
let i = 0;
|
|
250
|
+
for (; i < elementSchemas.length; i++) {
|
|
251
|
+
const el = simplified.elements[i];
|
|
252
|
+
if (el.spread)
|
|
253
|
+
break;
|
|
254
|
+
prefixItems.push(elementSchemas[i]);
|
|
255
|
+
}
|
|
256
|
+
const items = [];
|
|
257
|
+
let hasAny = false;
|
|
258
|
+
for (; i < elementSchemas.length; i++) {
|
|
259
|
+
const schema = elementSchemas[i];
|
|
260
|
+
items.push(schema);
|
|
261
|
+
if (schema === true) {
|
|
262
|
+
hasAny = true;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
const schema = { type: 'array' };
|
|
266
|
+
if (prefixItems.length > 0) {
|
|
267
|
+
schema.prefixItems = prefixItems;
|
|
268
|
+
}
|
|
269
|
+
if (hasAny) {
|
|
270
|
+
schema.items = true;
|
|
271
|
+
}
|
|
272
|
+
else if (items.length > 1) {
|
|
273
|
+
schema.items = { anyOf: items };
|
|
274
|
+
}
|
|
275
|
+
else if (items.length === 1) {
|
|
276
|
+
schema.items = items[0];
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
schema.items = loose;
|
|
280
|
+
}
|
|
281
|
+
return schema;
|
|
225
282
|
}
|
|
226
|
-
if (
|
|
227
|
-
return
|
|
283
|
+
if (simplified.kind === 'reflection') {
|
|
284
|
+
return true;
|
|
228
285
|
}
|
|
229
286
|
/* c8 ignore next 3 */
|
|
230
|
-
|
|
231
|
-
return
|
|
287
|
+
simplified;
|
|
288
|
+
return true;
|
|
232
289
|
}
|
|
233
290
|
//# 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":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
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":"AAEA,sBAAsB;AACtB,MAAM,MAAM,IAAI,GACV,SAAS,GACT,SAAS,GACT,WAAW,GACX,WAAW,GACX,YAAY,GACZ,SAAS,GACT,SAAS,GACT,gBAAgB,GAChB,UAAU,GACV,YAAY,GACZ,SAAS,GACT,cAAc,CAAC;AAErB,qDAAqD;AACrD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,iCAAiC;AACjC,MAAM,WAAW,WAAW;IACxB,UAAU;IACV,IAAI,EAAE,SAAS,CAAC;IAChB,oBAAoB;IACpB,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAED,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IACzB,UAAU;IACV,IAAI,EAAE,UAAU,CAAC;IACjB,+HAA+H;IAC/H,KAAK,EAAE,IAAI,EAAE,CAAC;CACjB;AAED,qCAAqC;AACrC,MAAM,MAAM,SAAS,GACjB,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC;AAE1G,+BAA+B;AAC/B,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEtD,+BAA+B;AAC/B,MAAM,WAAW,SAAS;IACtB,UAAU;IACV,IAAI,EAAE,OAAO,CAAC;IACd,yBAAyB;IACzB,KAAK,EAAE,IAAI,EAAE,CAAC;CACjB;AAED,sCAAsC;AACtC,MAAM,WAAW,gBAAgB;IAC7B,UAAU;IACV,IAAI,EAAE,cAAc,CAAC;IACrB,gCAAgC;IAChC,KAAK,EAAE,IAAI,EAAE,CAAC;CACjB;AAED,+BAA+B;AAC/B,MAAM,WAAW,SAAS;IACtB,UAAU;IACV,IAAI,EAAE,OAAO,CAAC;IACd,mBAAmB;IACnB,OAAO,EAAE,IAAI,CAAC;CACjB;AAED,gCAAgC;AAChC,MAAM,MAAM,UAAU,GAChB;IACI,UAAU;IACV,IAAI,EAAE,QAAQ,CAAC;IACf,2BAA2B;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;CACzB,GACD;IACI,UAAU;IACV,IAAI,EAAE,QAAQ,CAAC;IACf,gCAAgC;IAChC,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,+CAA+C;IAC/C,KAAK,EAAE,IAAI,CAAC;CACf,CAAC;AAER,iCAAiC;AACjC,MAAM,WAAW,WAAW;IACxB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB;IACjB,IAAI,EAAE,IAAI,CAAC;CACd;AAED,kCAAkC;AAClC,MAAM,WAAW,YAAY;IACzB,UAAU;IACV,IAAI,EAAE,UAAU,CAAC;IACjB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;IAC3B,0BAA0B;IAC1B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,kBAAkB;IAClB,OAAO,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,uCAAuC;AACvC,MAAM,WAAW,iBAAiB;IAC9B,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,IAAI,EAAE,IAAI,CAAC;IACX,gDAAgD;IAChD,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,+BAA+B;AAC/B,MAAM,WAAW,SAAS;IACtB,UAAU;IACV,IAAI,EAAE,OAAO,CAAC;IACd,4BAA4B;IAC5B,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED,kCAAkC;AAClC,MAAM,WAAW,YAAY;IACzB,mBAAmB;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,4CAA4C;IAC5C,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,oCAAoC;AACpC,MAAM,WAAW,cAAc;IAC3B,UAAU;IACV,IAAI,EAAE,YAAY,CAAC;IACnB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;CAChB;AAqED;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAExC"}
|
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,25 @@
|
|
|
1
|
+
import type { Type } from './parser.js';
|
|
2
|
+
/** Controls which type simplifications are applied. */
|
|
3
|
+
export interface SimplifyOptions {
|
|
4
|
+
/** Flatten nested union nodes. */
|
|
5
|
+
flattenUnions?: boolean;
|
|
6
|
+
/** Flatten nested intersection nodes. */
|
|
7
|
+
flattenIntersections?: boolean;
|
|
8
|
+
/** Remove duplicate members inside union nodes. */
|
|
9
|
+
deduplicateUnions?: boolean;
|
|
10
|
+
/** Remove duplicate members inside intersection nodes. */
|
|
11
|
+
deduplicateIntersections?: boolean;
|
|
12
|
+
/** Remove single-member union nodes. */
|
|
13
|
+
unwrapSingleUnion?: boolean;
|
|
14
|
+
/** Remove single-member intersection nodes. */
|
|
15
|
+
unwrapSingleIntersection?: boolean;
|
|
16
|
+
/** Distribute intersections over unions. */
|
|
17
|
+
distributeIntersectionsOverUnions?: boolean;
|
|
18
|
+
/** Merge intersections of explicit record fields. */
|
|
19
|
+
mergeRecordIntersections?: boolean;
|
|
20
|
+
/** Inline tuple spread elements (..[A, B] → A, B). */
|
|
21
|
+
expandTupleSpreads?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/** Simplifies a Type AST in place, optionally disabling individual normalization passes. */
|
|
24
|
+
export declare function simplify(type: Type, options?: SimplifyOptions): Type;
|
|
25
|
+
//# 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,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;CAChC;AA4SD,4FAA4F;AAC5F,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAGpE"}
|