1 |
|
2 | const convertSig = type => {
|
3 | switch (type.type) {
|
4 | case 'function':
|
5 | return {
|
6 | name: 'function'
|
7 | };
|
8 |
|
9 | case 'object':
|
10 | const values = {};
|
11 | type.signature.properties.forEach(prop => {
|
12 | values[prop.key] = convert(prop.value);
|
13 | });
|
14 | return {
|
15 | name: 'object',
|
16 | value: values
|
17 | };
|
18 |
|
19 | default:
|
20 | throw new Error(`Unknown: ${type}`);
|
21 | }
|
22 | };
|
23 |
|
24 | export const convert = type => {
|
25 | const {
|
26 | name,
|
27 | raw
|
28 | } = type;
|
29 | const base = {};
|
30 | if (typeof raw !== 'undefined') base.raw = raw;
|
31 |
|
32 | switch (type.name) {
|
33 | case 'string':
|
34 | case 'number':
|
35 | case 'symbol':
|
36 | case 'boolean':
|
37 | {
|
38 | return Object.assign({}, base, {
|
39 | name
|
40 | });
|
41 | }
|
42 |
|
43 | case 'Array':
|
44 | {
|
45 | return Object.assign({}, base, {
|
46 | name: 'array',
|
47 | value: type.elements.map(convert)
|
48 | });
|
49 | }
|
50 |
|
51 | case 'signature':
|
52 | return Object.assign({}, base, convertSig(type));
|
53 |
|
54 | case 'union':
|
55 | case 'intersection':
|
56 | return Object.assign({}, base, {
|
57 | name,
|
58 | value: type.elements.map(convert)
|
59 | });
|
60 |
|
61 | default:
|
62 | return Object.assign({}, base, {
|
63 | name: 'other',
|
64 | value: name
|
65 | });
|
66 | }
|
67 | }; |
\ | No newline at end of file |