Skip to content

ccontrols/structured-types

 
 

Repository files navigation

About

structured-types is a collection of libraries using the Typescript Compiler API to generate "structured" type information from jsdoc and typescript files.

Motivation

  • Extract full types for your libraries, not just string representations of the type.
  • Plugin architecture, to extract custom types for frameworks such as react, vue, angular with the same package.

Roadmap

  • JSDoc types
  • Typescript types
  • React plugin
  • Typescript playground plugin
  • component-controls integration
  • Automatically generate README.md files (structured-md)
  • Vue plugin
  • Angular plugin

Getting started

1. Installation

$ npm install @structured-types/api --save-dev

2. Your API source file (sum.js):

/**  * sum api function  * @remarks  * Unlike the summary, the remarks block may contain lengthy documentation content.  * The remarks should not restate information from the summary, since the summary section  * will always be displayed wherever the remarks section appears. Other sections  * (e.g. an `@example` block) will be shown after the remarks section.  *  * @param {number} a first parameter to add  * @param {number} b second parameter to add  * @returns {number} the sum of the two parameters  *  * @example  *  * ```js  * import { sum } from './sum';  *  * expect(sum(1, 2)).toMatchObject({ a: 1, b: 2, result: 3});  * ```  */ export const sum = (a, b = 1) => ({ a, b, result: a + b });

3. Your documentation extraction

import { parseFiles } from '@structured-types/api'; const docs = parseFiles(['../src/sum.js']);

4. The result

{ "sum": { "displayName": "sum", "kind": 11, "parameters": [ { "kind": 2, "displayName": "a", "description": "first parameter to add" }, { "kind": 2, "displayName": "b", "value": 1, "description": "second parameter to add" } ], "examples": [ { "content": "```js\nimport { sum } from './sum';\n\nexpect(sum(1, 2)).toMatchObject({ a: 1, b: 2, result: 3});\n```" } ], "returns": { "description": "the sum of the two parameters", "kind": 2 }, "tags": [ { "tag": "remarks", "content": "Unlike the summary, the remarks block may contain lengthy documentation content.\nThe remarks should not restate information from the summary, since the summary section\nwill always be displayed wherever the remarks section appears. Other sections\n(e.g. an `@example` block) will be shown after the remarks section." } ], "description": "sum api function" } }

About

Extract structured type information from javascript and typescript files

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •