UNPKG

3.55 kBJavaScriptView Raw
1(function () {
2 var dfm = require('./dfm');
3 var builtInTypes = ['array','arraybuffer','asyncfunction','atomics','boolean','dataview','date','error','evalerror','float32array','float64array','function','generator','generatorfunction','infinity','int16array','int32array','int8array','internalerror','intl','intl.collator','intl.datetimeformat','intl.numberformat','iterator','json','map','math','nan','number','object','parallelarray','promise','proxy','rangeerror','referenceerror','reflect','regexp','simd','simd.bool16x8','simd.bool32x4','simd.bool64x2','simd.bool8x16','simd.float32x4','simd.float64x2','simd.int16x8','simd.int32x4','simd.int8x16','simd.uint16x8','simd.uint32x4','simd.uint8x16','set','sharedarraybuffer','stopiteration','string','symbol','syntaxerror','typeerror','typedarray','urierror','uint16array','uint32array','uint8array','uint8clampedarray','weakmap','weakset', 'undefined'];
4
5 function handleClass(item, doclet, uidPrefix, manager) {
6 item.type = 'Class';
7 if (doclet.classdesc) {
8 item.summary = dfm.convertLinkToGfm(doclet.classdesc, uidPrefix);
9 }
10
11 var ctor = {
12 id: item.id + '.#ctor',
13 uid: item.uid + '.#ctor',
14 parent: item.uid,
15 name: item.name,
16 fullName: item.fullName + '.' + item.name,
17 summary: dfm.convertLinkToGfm(doclet.description, uidPrefix)
18 };
19 handleFunction(ctor, doclet);
20 item.children = [ctor.uid];
21 manager.addItem(ctor);
22 }
23
24 function handleFunction(item, doclet, uidPrefix) {
25 item.type = doclet.kind === 'function' ? 'Function' : 'Constructor';
26 item.syntax = {};
27 // set parameters
28 if (doclet.params !== undefined) {
29 item.syntax.parameters = doclet.params.map(function (p) {
30 return {
31 id: p.name,
32 type: handleParameterType(p.type),
33 description: dfm.convertLinkToGfm(p.description, uidPrefix),
34 optional: p.optional
35 };
36 });
37 }
38 // set name and fullName
39 var params = [];
40 (item.syntax.parameters || []).forEach(function (p) {
41 if (p.id.indexOf('.') < 0) params.push(p.id);
42 });
43 item.name += '(' + params.join(', ') + ')';
44 item.fullName += '(' + params.join(', ') + ')';
45 // set return type
46 if (doclet.returns != undefined) {
47 item.syntax.return = {
48 type: handleParameterType(doclet.returns[0].type),
49 description: dfm.convertLinkToGfm(doclet.returns[0].description, uidPrefix),
50 optional: doclet.returns[0].optional
51 };
52 }
53 // set syntax
54 // which one is better:
55 // 1. function method_name(arg1, arg2, ...);
56 // 2. return_type function method_name(arg1, arg2)
57 // 3. function method_name(arg1, arg2) -> return_type
58 item.syntax.content = (item.type === 'Function' ? 'function ' : 'new ') + item.name;
59
60 function handleParameterType(type) {
61 if (!type) return undefined;
62 return type.names.map(function (n) {
63 if (builtInTypes.indexOf(n.toLowerCase()) == -1) {
64 n = uidPrefix + n;
65 }
66 return n;
67 });
68 }
69 }
70
71 function handleMember(item, doclet) {
72 item.type = 'Member';
73 // set type
74 item.syntax = {};
75 if (doclet.type != undefined) {
76 item.syntax.return = {
77 type: [doclet.type.names[0]]
78 };
79 }
80 // set syntax
81 item.syntax.content = item.name;
82 }
83
84 module.exports = {
85 handleClass: handleClass,
86 handleFunction: handleFunction,
87 handleMember: handleMember
88 };
89})();
\No newline at end of file