UNPKG

1.28 kBJavaScriptView Raw
1/* eslint-disable no-case-declarations */
2const 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
24export 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