Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@typedefs/parser

artdecocode177MIT1.3.4

The Parser For JSDoc Types.

parser, typedefs, typedef, type, types, jsdoc, documentation

readme

@typedefs/parser

npm version

@typedefs/parser is The Parser For JSDoc Types Written Using Google Closure Compiler Annotations (no TypeScript support). Although most of the typing rules are the same, the main difference is for functions and arrays:

  • function(string, number=): void
  • ⛔️ (arg: string, optional?: number) => void The arrow function notation is not supported. Cannot write ? for optional arguments, need to use =.
  • !Array<string>
  • ⛔️ string[] The double array bracket notation will not work.
  • { record: (string|undefined) }
  • ⛔️ { record?: string } Optional properties cannot be denoted with a question mark.
yarn add @typedefs/parser

Table Of Contents

API

The package is available by importing its default function:

import parse from '@typedefs/parser'

parse(
  type: string,
): !Type

Parses a Google Closure Compiler type recursively.

Type: The representation of a type.

Name Type Description
nullable boolean Whether the type is nullable. This is defined by writing ? before the type name to state nullability and ! otherwise. The parser does not infer nullability from types being primitive and Function/function.
name string The name of the type.
union !Array<!Type> If the type is defined as a union, e.g., (string|number), contains the united types. Must include parenthesis.
record !Object<string, Type> If the type is a record, contains its representation. If a property of the record does not have a type, it will be set to null.
application !Array<!Type> The application of the type, e.g., the inner type of Object<Application>.
function !FunctionType The function info with args and return if the type is a function.
optional boolean If the type is returned as an optional argument of a function (function(string=)), this will be set to true.

FunctionType: The meta information about the function.

Name Type Description
args* !Array<!Type> The arguments of the function.
return* ?Type The return type of the function. When the value is set to null, it means the function does not have a return. If the return was actually null, it would be specified as return: { name: 'null' }.
this !Type The type of the this argument specified as function(this: Type).
new !Type The type of the new argument specified as function(new: Type).
variableArgs !Type The type of the variable arguments, e.g., function(...Type).
import parser from '@typedefs/parser'

logHeading('Applications')
log(parser('!Object<string, Promise<Array<!Type>>>'))

logHeading('Unions (parenthesis are required)')
log(parser('(string | number | !Promise<?(string | symbol)>)'))

logHeading('Records')
log(parser(`{
  a: string, b: ?number, c,
  d: !Promise<Array<{e: number}>>,
  f: { g: boolean }
}`))

logHeading('Functions')
log(parser(`function(
  this: Type,
  string,
  function(),
  function(): *=
): function(): null`))

// special case when name is nullable empty string ''
log(parser(`function(): ?`))
Applications:
------------

{ nullable: false,
  name: 'Object',
  application: 
   [ { name: 'string' },
     { name: 'Promise',
       application: 
        [ { name: 'Array',
            application: [ { nullable: false, name: 'Type' } ] } ] } ] }

Unions (parenthesis are required):
---------------------------------

{ union: 
   [ { name: 'string' },
     { name: 'number' },
     { nullable: false,
       name: 'Promise',
       application: 
        [ { union: [ { name: 'string' }, { name: 'symbol' } ],
            nullable: true } ] } ] }

Records:
-------

{ record: 
   { a: { name: 'string' },
     b: { nullable: true, name: 'number' },
     c: null,
     d: 
      { nullable: false,
        name: 'Promise',
        application: 
         [ { name: 'Array',
             application: [ { record: { e: { name: 'number' } } } ] } ] },
     f: { record: { g: { name: 'boolean' } } } } }

Functions:
---------

{ name: 'function',
  function: 
   { return: 
      { name: 'function',
        function: { return: { name: 'null' }, args: [] } },
     args: 
      [ { name: 'string' },
        { name: 'function', function: { return: null, args: [] } },
        { name: 'function',
          function: { return: { name: 'any' }, args: [] },
          optional: true } ],
     this: { name: 'Type' } } }
{ name: 'function',
  function: { return: { nullable: true, name: '' }, args: [] } }

Art Deco © Art Deco 2019 Tech Nation Visa Tech Nation Visa Sucks

changelog

8 August 2019

1.3.4

  • [doc] More info on differences between Closure and TypeScript.

1.3.3

  • [fix] Fix parsing of certain unions like { type: ((function(): string)|number) }.

25 July 2019

1.3.2

  • [fix] Don't attempt to parse the Function type.

22 July 2019

1.3.1

  • [fix] Parse ? function return type OK.

29 April 2019

1.3.0

  • [feature] Parse variable arguments of a function.

28 April 2019

1.2.0

  • [feature] Group unions correctly (allow Type|?(string|number)).

27 April 2019

1.1.1

  • [fix] Don't parse union when in the namespace.

1.1.0

  • [feature] Implement the union type without parenthesis.

26 April 2019

1.0.3

  • [doc] Fix types' links in documentation, using the parser via Typal.
  • [types] Correct types for via GCC warnings (remove primitive types).

1.0.2

  • [feature] Parse namespaces.

1.0.1

  • [types] Document this and new arguments of a function.

1.0.0

  • [package] Publish version v1.0.0.

0.0.0