kitchensink
Version:
Dispatch's awesome components and style guide
151 lines (121 loc) • 3.61 kB
Markdown
[](https://travis-ci.org/Kuniwak/jsdoctypeparser)
[](http://badge.fury.io/js/jsdoctypeparser)
This module is Jsdoc type expression parser, it makes easy to publish a type name link by `toHTML()`.
This parser provide:
* Parse to object model
* Convert a type name to a link by using `toHtml()`
```javascript
var Parser = require('jsdoctypeparser').Parser;
var parser = new Parser();
var result = parser.parse('Array.<MyClass>=');
console.log(result.toHtml()); // ⇒ 'Array.<<a href="MyClass.html">MyClass</a>>|undefined'
console.log(result.toString()); // ⇒ 'Array.<MyClass>|undefined'
```
This parser can parse:
* [JsDoc type expressions](https://code.google.com/p/jsdoc-toolkit/wiki/TagParam)
* `foo.bar`, `String[]`
* [Closure Compiler type expressions](https://developers.google.com/closure/compiler/docs/js-for-compiler)
* `Array.<string>`, `function(this: Objext, arg1, arg2): ret`
* Nested type expressions
* `Array.<Array.<string>>`, `function(function(Function))`
The [live demo](http://kuniwak.github.io/jsdoctypeparser/) is available.
```javascript
var Parser = require('jsdoctypeparser').Parser;
var parser = new Parser();
var result = parser.parse('Array.<MyClass>=');
```
* `result.toString()` ⇒ `'Array.<MyClass>|undefined'`
* `result.toHtml()` ⇒ `'Array.<<a href="MyClass.html">MyClass</a>>|undefined'`
You can change a file URL by set `TypeBulder.TypeName.getUrlByTypeName(typeName)`.
```javascript
var Builder = require('jsdoctypeparser').Builder;
Bulder.TypeName.getUrlByTypeName = function(typeName) {
// do something.
return typeName;
};
```
```javascript
var Parser = require('jsdoctypeparser').Parser;
var parser = new Parser();
var result = parser.parse('Array.<string|number, ?Object=>|string|undefined');
```
The `result` is:
```javascript
{ // instanceof TypeBuilder.TypeUnion
optional: true,
types: [
{ // instanceof TypeBuilder.FunctionType
parameterTypeUnions: [
{ // instanceof TypeBuilder.TypeUnion
types: [
{ name: 'string' }, // instanceof TypeBuilder.TypeName
{ name: 'number' } // instanceof TypeBuilder.TypeName
]
},
{ // instanceof TypeBuilder.TypeUnion
nullable: true
optional: true
types: [
{ name: 'Object' } // instanceof TypeBuilder.TypeName
]
}
]
}, { // instanceof TypeBuilder.TypeName
{ name: 'string' }
}
]
}
```
```javascript
TypeName = {
name: string
};
```
```javascript
TypeUnion = {
optional: boolean,
nullable: boolean,
variable: boolean,
nonNullable: boolean,
all: boolean,
unknown: boolean,
types: Array.<TypeName|GenericType|FunctionType|RecordType>
};
```
```javascript
GenericType = {
genericTypeName: string,
parameterTypeUnions: Array.<TypeUnion>
};
```
```javascript
FunctionType = {
parameterTypeUnions: Array.<TypeUnion>,
returnTypeUnion: TypeUnion|null,
isConstructor: boolean,
contextTypeUnion: TypeUnion|null
};
```
```javascript
RecordType = {
entries: Array.<RecordEntry>
};
RecordType.Entry = {
name: string,
typeUnion: TypeUnion
};
```
This script licensed under the MIT.
See: [http://orgachem.mit-license.org](http://orgachem.mit-license.org)