Skip to content

Commit fc383d0

Browse files
committed
Better TypeScript definition support for @property-annotated objects [ci skip]
1 parent 3cb1b7e commit fc383d0

File tree

6 files changed

+218
-17
lines changed

6 files changed

+218
-17
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ While .proto and JSON files require the full library (about 18kb gzipped), prett
400400

401401
Static code, on the other hand, requires just the minimal runtime (about 5.5kb gzipped), but generates additional, albeit editable, source code without any reflection features.
402402

403-
When `new Function(...)` is supported (and it usually is), there is no difference performance-wise as the code generated statically is pretty much the same as generated at runtime.
403+
Where `new Function(...)` is supported (it usually is), there is no difference performance-wise as the code generated statically is pretty much the same as generated at runtime.
404404

405405
Building
406406
--------

lib/tsd-jsdoc/publish.js

+13-2
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ function handleClass(element, parent) {
386386
}
387387

388388
// handles a namespace or class member
389-
function handleMember(element, parent) {
389+
function handleMember(element, parent, isProperty) {
390390
begin(element);
391391

392392
if (element.isEnum) {
@@ -416,7 +416,18 @@ function handleMember(element, parent) {
416416
} else
417417
write(element.kind === "constant" ? "const " : "var ");
418418

419-
writeln(element.name, ": ", getTypeOf(element), ";");
419+
write(element.name, ": ");
420+
421+
if (/^Object\b/i.test(element.type.names[0]) && element.properties) {
422+
writeln("{");
423+
++indent;
424+
element.properties.forEach(function(property, i) {
425+
writeln(JSON.stringify(property.name), ": ", getTypeOf(property), i < element.properties.length - 1 ? "," : "");
426+
});
427+
--indent;
428+
writeln("};");
429+
} else
430+
writeln(getTypeOf(element), ";");
420431
}
421432
}
422433

src/root.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ function SYNC() {} // eslint-disable-line no-empty-function
6767
* @returns {undefined}
6868
*/
6969
RootPrototype.load = function load(filename, options, callback) {
70-
if (typeof options === 'function') {
70+
if (typeof options === "function") {
7171
callback = options;
7272
options = undefined;
7373
}

src/types.js

+65-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ var s = [
2323
"sfixed64", // 11
2424
"bool", // 12
2525
"string", // 13
26-
"bytes" // 14
26+
"bytes", // 14
27+
"message" // 15
2728
];
2829

2930
function bake(values, offset) {
@@ -36,6 +37,21 @@ function bake(values, offset) {
3637
/**
3738
* Basic type wire types.
3839
* @type {Object.<string,number>}
40+
* @property {number} double=1 Fixed64 wire type
41+
* @property {number} float=5 Fixed32 wire type
42+
* @property {number} int32=0 Varint wire type
43+
* @property {number} uint32=0 Varint wire type
44+
* @property {number} sint32=0 Varint wire type
45+
* @property {number} fixed32=5 Fixed32 wire type
46+
* @property {number} sfixed32=5 Fixed32 wire type
47+
* @property {number} int64=0 Varint wire type
48+
* @property {number} uint64=0 Varint wire type
49+
* @property {number} sint64=0 Varint wire type
50+
* @property {number} fixed64=1 Fixed64 wire type
51+
* @property {number} sfixed64=1 Fixed64 wire type
52+
* @property {number} bool=0 Varint wire type
53+
* @property {number} string=2 Ldelim wire type
54+
* @property {number} bytes=2 Ldelim wire type
3955
*/
4056
types.basic = bake([
4157
/* double */ 1,
@@ -58,6 +74,22 @@ types.basic = bake([
5874
/**
5975
* Basic type defaults.
6076
* @type {Object.<string,*>}
77+
* @property {number} double=0 Double default
78+
* @property {number} float=0 Float default
79+
* @property {number} int32=0 Int32 default
80+
* @property {number} uint32=0 Uint32 default
81+
* @property {number} sint32=0 Sint32 default
82+
* @property {number} fixed32=0 Fixed32 default
83+
* @property {number} sfixed32=0 Sfixed32 default
84+
* @property {number} int64=0 Int64 default
85+
* @property {number} uint64=0 Uint64 default
86+
* @property {number} sint64=0 Sint32 default
87+
* @property {number} fixed64=0 Fixed64 default
88+
* @property {number} sfixed64=0 Sfixed64 default
89+
* @property {boolean} bool=false Bool default
90+
* @property {string} string="" String default
91+
* @property {Array.<number>} bytes=Array(0) Bytes default
92+
* @property {Message} message=null Message default
6193
*/
6294
types.defaults = bake([
6395
/* double */ 0,
@@ -74,12 +106,18 @@ types.defaults = bake([
74106
/* sfixed64 */ 0,
75107
/* bool */ false,
76108
/* string */ "",
77-
/* bytes */ util.emptyArray
109+
/* bytes */ util.emptyArray,
110+
/* message */ null
78111
]);
79112

80113
/**
81114
* Basic long type wire types.
82115
* @type {Object.<string,number>}
116+
* @property {number} int64=0 Varint wire type
117+
* @property {number} uint64=0 Varint wire type
118+
* @property {number} sint64=0 Varint wire type
119+
* @property {number} fixed64=1 Fixed64 wire type
120+
* @property {number} sfixed64=1 Fixed64 wire type
83121
*/
84122
types.long = bake([
85123
/* int64 */ 0,
@@ -92,6 +130,18 @@ types.long = bake([
92130
/**
93131
* Allowed types for map keys with their associated wire type.
94132
* @type {Object.<string,number>}
133+
* @property {number} int32=0 Varint wire type
134+
* @property {number} uint32=0 Varint wire type
135+
* @property {number} sint32=0 Varint wire type
136+
* @property {number} fixed32=5 Fixed32 wire type
137+
* @property {number} sfixed32=5 Fixed32 wire type
138+
* @property {number} int64=0 Varint wire type
139+
* @property {number} uint64=0 Varint wire type
140+
* @property {number} sint64=0 Varint wire type
141+
* @property {number} fixed64=1 Fixed64 wire type
142+
* @property {number} sfixed64=1 Fixed64 wire type
143+
* @property {number} bool=0 Varint wire type
144+
* @property {number} string=2 Ldelim wire type
95145
*/
96146
types.mapKey = bake([
97147
/* int32 */ 0,
@@ -111,6 +161,19 @@ types.mapKey = bake([
111161
/**
112162
* Allowed types for packed repeated fields with their associated wire type.
113163
* @type {Object.<string,number>}
164+
* @property {number} double=1 Fixed64 wire type
165+
* @property {number} float=5 Fixed32 wire type
166+
* @property {number} int32=0 Varint wire type
167+
* @property {number} uint32=0 Varint wire type
168+
* @property {number} sint32=0 Varint wire type
169+
* @property {number} fixed32=5 Fixed32 wire type
170+
* @property {number} sfixed32=5 Fixed32 wire type
171+
* @property {number} int64=0 Varint wire type
172+
* @property {number} uint64=0 Varint wire type
173+
* @property {number} sint64=0 Varint wire type
174+
* @property {number} fixed64=1 Fixed64 wire type
175+
* @property {number} sfixed64=1 Fixed64 wire type
176+
* @property {number} bool=0 Varint wire type
114177
*/
115178
types.packed = bake([
116179
/* double */ 1,

src/util/runtime.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ util.longNeq = function longNeq(a, b) {
113113
* @returns {boolean} `true` if not equal
114114
*/
115115
util.longNe = function longNe(val, lo, hi) {
116-
if (typeof val === 'object') // Long-like, null is invalid and throws
116+
if (typeof val === "object") // Long-like, null is invalid and throws
117117
return val.low !== lo || val.high !== hi;
118118
var bits = util.LongBits.from(val);
119119
return bits.lo !== lo || bits.hi !== hi;

types/protobuf.js.d.ts

+137-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// $> pbts --name protobufjs --out types/protobuf.js.d.ts src
2-
// Generated Fri, 16 Dec 2016 14:38:04 UTC
2+
// Generated Fri, 16 Dec 2016 15:34:54 UTC
33
declare module "protobufjs" {
44

55
/**
@@ -1624,32 +1624,159 @@ declare module "protobufjs" {
16241624
/**
16251625
* Basic type wire types.
16261626
* @type {Object.<string,number>}
1627-
*/
1628-
var basic: { [k: string]: number };
1627+
* @property {number} double=1 Fixed64 wire type
1628+
* @property {number} float=5 Fixed32 wire type
1629+
* @property {number} int32=0 Varint wire type
1630+
* @property {number} uint32=0 Varint wire type
1631+
* @property {number} sint32=0 Varint wire type
1632+
* @property {number} fixed32=5 Fixed32 wire type
1633+
* @property {number} sfixed32=5 Fixed32 wire type
1634+
* @property {number} int64=0 Varint wire type
1635+
* @property {number} uint64=0 Varint wire type
1636+
* @property {number} sint64=0 Varint wire type
1637+
* @property {number} fixed64=1 Fixed64 wire type
1638+
* @property {number} sfixed64=1 Fixed64 wire type
1639+
* @property {number} bool=0 Varint wire type
1640+
* @property {number} string=2 Ldelim wire type
1641+
* @property {number} bytes=2 Ldelim wire type
1642+
*/
1643+
var basic: {
1644+
"double": number,
1645+
"float": number,
1646+
"int32": number,
1647+
"uint32": number,
1648+
"sint32": number,
1649+
"fixed32": number,
1650+
"sfixed32": number,
1651+
"int64": number,
1652+
"uint64": number,
1653+
"sint64": number,
1654+
"fixed64": number,
1655+
"sfixed64": number,
1656+
"bool": number,
1657+
"string": number,
1658+
"bytes": number
1659+
};
16291660

16301661
/**
16311662
* Basic type defaults.
16321663
* @type {Object.<string,*>}
1633-
*/
1634-
var defaults: { [k: string]: any };
1664+
* @property {number} double=0 Double default
1665+
* @property {number} float=0 Float default
1666+
* @property {number} int32=0 Int32 default
1667+
* @property {number} uint32=0 Uint32 default
1668+
* @property {number} sint32=0 Sint32 default
1669+
* @property {number} fixed32=0 Fixed32 default
1670+
* @property {number} sfixed32=0 Sfixed32 default
1671+
* @property {number} int64=0 Int64 default
1672+
* @property {number} uint64=0 Uint64 default
1673+
* @property {number} sint64=0 Sint32 default
1674+
* @property {number} fixed64=0 Fixed64 default
1675+
* @property {number} sfixed64=0 Sfixed64 default
1676+
* @property {boolean} bool=false Bool default
1677+
* @property {string} string="" String default
1678+
* @property {Array.<number>} bytes=Array(0) Bytes default
1679+
* @property {Message} message=null Message default
1680+
*/
1681+
var defaults: {
1682+
"double": number,
1683+
"float": number,
1684+
"int32": number,
1685+
"uint32": number,
1686+
"sint32": number,
1687+
"fixed32": number,
1688+
"sfixed32": number,
1689+
"int64": number,
1690+
"uint64": number,
1691+
"sint64": number,
1692+
"fixed64": number,
1693+
"sfixed64": number,
1694+
"bool": boolean,
1695+
"string": string,
1696+
"bytes": number[],
1697+
"message": Message
1698+
};
16351699

16361700
/**
16371701
* Basic long type wire types.
16381702
* @type {Object.<string,number>}
1703+
* @property {number} int64=0 Varint wire type
1704+
* @property {number} uint64=0 Varint wire type
1705+
* @property {number} sint64=0 Varint wire type
1706+
* @property {number} fixed64=1 Fixed64 wire type
1707+
* @property {number} sfixed64=1 Fixed64 wire type
16391708
*/
1640-
var long: { [k: string]: number };
1709+
var long: {
1710+
"int64": number,
1711+
"uint64": number,
1712+
"sint64": number,
1713+
"fixed64": number,
1714+
"sfixed64": number
1715+
};
16411716

16421717
/**
16431718
* Allowed types for map keys with their associated wire type.
16441719
* @type {Object.<string,number>}
1645-
*/
1646-
var mapKey: { [k: string]: number };
1720+
* @property {number} int32=0 Varint wire type
1721+
* @property {number} uint32=0 Varint wire type
1722+
* @property {number} sint32=0 Varint wire type
1723+
* @property {number} fixed32=5 Fixed32 wire type
1724+
* @property {number} sfixed32=5 Fixed32 wire type
1725+
* @property {number} int64=0 Varint wire type
1726+
* @property {number} uint64=0 Varint wire type
1727+
* @property {number} sint64=0 Varint wire type
1728+
* @property {number} fixed64=1 Fixed64 wire type
1729+
* @property {number} sfixed64=1 Fixed64 wire type
1730+
* @property {number} bool=0 Varint wire type
1731+
* @property {number} string=2 Ldelim wire type
1732+
*/
1733+
var mapKey: {
1734+
"int32": number,
1735+
"uint32": number,
1736+
"sint32": number,
1737+
"fixed32": number,
1738+
"sfixed32": number,
1739+
"int64": number,
1740+
"uint64": number,
1741+
"sint64": number,
1742+
"fixed64": number,
1743+
"sfixed64": number,
1744+
"bool": number,
1745+
"string": number
1746+
};
16471747

16481748
/**
16491749
* Allowed types for packed repeated fields with their associated wire type.
16501750
* @type {Object.<string,number>}
1651-
*/
1652-
var packed: { [k: string]: number };
1751+
* @property {number} double=1 Fixed64 wire type
1752+
* @property {number} float=5 Fixed32 wire type
1753+
* @property {number} int32=0 Varint wire type
1754+
* @property {number} uint32=0 Varint wire type
1755+
* @property {number} sint32=0 Varint wire type
1756+
* @property {number} fixed32=5 Fixed32 wire type
1757+
* @property {number} sfixed32=5 Fixed32 wire type
1758+
* @property {number} int64=0 Varint wire type
1759+
* @property {number} uint64=0 Varint wire type
1760+
* @property {number} sint64=0 Varint wire type
1761+
* @property {number} fixed64=1 Fixed64 wire type
1762+
* @property {number} sfixed64=1 Fixed64 wire type
1763+
* @property {number} bool=0 Varint wire type
1764+
*/
1765+
var packed: {
1766+
"double": number,
1767+
"float": number,
1768+
"int32": number,
1769+
"uint32": number,
1770+
"sint32": number,
1771+
"fixed32": number,
1772+
"sfixed32": number,
1773+
"int64": number,
1774+
"uint64": number,
1775+
"sint64": number,
1776+
"fixed64": number,
1777+
"sfixed64": number,
1778+
"bool": number
1779+
};
16531780
}
16541781

16551782
/**

0 commit comments

Comments
 (0)