@vuedoc/parser
Version:
Generate a JSON documentation for a Vue file
1,047 lines (821 loc) • 29.9 kB
Markdown
## Vuedoc Parser 4.0.0-beta14
This release updates CLI documentation.
## Vuedoc Parser 4.0.0-beta13
This release adds `vuedoc-json` CLI tool to extract Vue component documentation
to a JSON file. It also add many parsing improvements:
- 57cd509 Add CLI binary vuedoc-json
- 08fa541 Load relative filename from the current working directory
- 98284e9 Improve parsing of defineProps() with typings
- 0354b95 Improve parsing of composition script
- 8e2ef1e Add FatalErrorEvent
- c8817f4 Improve parsing of post defined type references
- bbaf058 Add Context.getTypingValue(node: Babel.Node)
- a3ba3ce Improve parsing of typing references
- 7715edf Fix parsing of composition.typeParameterIndex
- f9c1c93 Use @vuedoc/test-utils
- 19309b8 Improve parsing of variable declaration
- 222c21e Improve parsing of nested composition calls
- f2d0e91 Improve parsing of ConfitionalExpression and remove deplicate code
- bfdc1d2 Fix tests
- 824fd06 Improve parsing of BinaryExpression, LogicalExpression and AssignmentExpression
- fd6ef43 Improve parsing of export statements
## Vuedoc Parser 4.0.0-beta12
This release fixes the plugins section on the README documentation.
## Vuedoc Parser 4.0.0-beta11
This release fixes packaging by adding the missing `@vuedoc/parser/test-utils`
module.
## Vuedoc Parser 4.0.0-beta10
This release introduces Vuedoc Plugins and many other new features and
improvements:
**New features**
- Introduce Vuedoc Plugins
- Add support of Vue Mixins
- Load imports automatically when needed
- Add `options.resolver` used to resolve imports
- Extensible Parsing with `options.composition`
- Add `@vuedoc/parser/test-utils` for testing
**Improvements**
- Use `EventTarget` as base class for the main parser class. This help for a
better events handling and useful for preventing event propagation.
- Improve parsing of variable declarations
- Improve parsing performance by reducing internal instances
- Improve documentation by adding more examples
**Dependencies Changes**
- Upgrade to `@babel/parser@7.18.13`
## Vuedoc Parser 4.0.0-beta9
This release fixes an ESM import bug and upgrades to @babel/parser@7.18.9.
## Vuedoc Parser 4.0.0-beta8
This release comes with breaking changes and important new features.
### Important Features
- Handle Vue 3 syntax
- Handle Vue Composition API
### Breaking Changes
- **Pure ESM package**
Vuedoc Parser 4.0.0 is now [ESM only](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c).
This means that Node 16+ is needed to use it and it must be imported instead of
required.
Please see [this](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c) for migration guide.
- **Rename `exports.parse()` to `exports.parseComponent()`**
`exports.parse()` has been renamed to `exports.parseComponent()`.
Please see [usage on documentation](https://gitlab.com/vuedoc/parser/-/tree/main#usage).
- **Add TypeScript definitions**
This release now includes [TypeScript definition](https://gitlab.com/vuedoc/parser/blob/main/index.d.ts).
- **Standardize extracted types**
All extracted types has been standardized to be TypeScript-like. This means:
* Type `String` is now parsed as `string`
* Type `Number` is now parsed as `number`
* Type `Boolean` is now parsed as `boolean`
* Type `Array` is now parsed as `array`
* Type `Object` is now parsed as `object`
* Type `Function` is now parsed as `function`
* Type `Symbol` is now parsed as `symbol`
- **Remove deprecated `@model` tag**
Tag deprecated `@model` was removed. You now need to use the Vue standard way
to define `v-model`.
Please see [official documentation about annotating a `v-model` prop](https://gitlab.com/vuedoc/parser/-/tree/main#annotate-a-v-model-prop)
## Vuedoc Parser v3.4.0
This release fixes some parsing issues and upgrades `@babel/parser` to
`7.15.6`.
**Changes**
- Fix invalid scoped variable reference issue (#104, fed8cbc)
- Use `unknown` as the default implicit type (fed8cbc)
- Upgrade to `@babel/parser@7.15.6`
## Vuedoc Parser v3.3.2
This release fixes a parsing of spread syntax on computed properties (#103,
9b3d1e57).
## Vuedoc Parser v3.3.1
This release fixes a parsing data regression and upgrades `@babel/parser` to
`7.15.5`.
**Changes**
- Fix regression parsing of data value (#101, #102, 5bc42df)
- Upgrade to @babel/parser@7.15.5 (1408b1e)
## Vuedoc Parser v3.3.0
This release adds a partial support of Vue Property Decorator 9.1.2 by
parsing `@ModelSync`, `@ref` and `@VModel`.
## Vuedoc Parser v3.2.1
This release fixes typo of type `unknow` to `unknown` (#97, 6d83e495)
## Vuedoc Parser v3.2.0
This release adds some improvements.
**Changes**
- Handle TypeScript and JavaScript access visibility (#93, bb714299)
- Automatic type detection for computed properties (#94, 04611b4d)
## Vuedoc Parser v3.1.1
This release fixes some bugs and upgrades to `@babel/parser@7.12.11`.
**Changes**
- Now use `@babel/parser@7.12.11`
- Fix multi-line type value (#92)
- Improve parsing of data as `TSAsExpression` (1ab77fd)
## Vuedoc Parser v3.1.0
This release fixes some bugs and introduces a new event `warning` to emit JSDoc
syntax issue.
**Changes**
- Now use `@babel/parser@7.12.7`
- Emit warning for invalid JSDoc syntax (#91)
- Parse watch property to handle events (#90)
- Improve parsing of dynamic slot (#89)
## Vuedoc Parser v3.0.0
This is the official release of Vuedoc Parser 3.0.0.
The only change with the previous beta 4 is the upgrade to
`@babel/parser@7.11.5`.
Please see [release notes of previous betas](https://gitlab.com/vuedoc/parser/-/blob/v3.0.0/CHANGELOG.md)
for all changes on Vuedoc Parser 3.0.0.
## Vuedoc Parser v3.0.0-beta4
This release adds an initial JSX support.
It also fixes an issue related to TSX (#87).
## Vuedoc Parser v3.0.0-beta3
This release improves parsing of TypeScript Labeled Tuple Elements.
It also upgrades dependencies to `@babel/parser@7.11.4` and
`vue-template-compiler@2.6.12`.
## Vuedoc Parser v3.0.0-beta2
This release improves parsing of props and data by handling `TSAsExpression`.
## Vuedoc Parser v3.0.0-beta1
This release comes with breaking changes and important new features.
**Native TypeScript support**
Since the Vuedoc Parser 3.0.0, the parser now supports TypeScript natively.
It's no longer necessary to use a specific Vuedoc Loader to parse a component
written with TypeScript.
**Changes**
- Allow multiline in `@param` and `@returns`
- Add support of `@category`, `@kind`, `@see`, `@deprecated`, `@author`,
`@since` and `@version`
- Improve parsing of async method and generator
- Remove options `defaultMethodVisibility` and `stringify`
- Add support of `@syntax`
- Implement JSDoc's `@type` specification
- Add support of TypeDoc tags
- Add a JSON Schema file for parser options (`@vuedoc/parser/schema/options.js`)
- Fix parsing of MemberExpression in for events (#83)
- Improve parsing of default prop value
- Add support of @znck/prop-types (#69)
- Fix finding of sibling node for Markup Node (#81)
- Natively support keyword `@type` for prop
- Fix parsing of UnaryExpression (#80)
- Move to `@babel/parser` (#77, #78)
- Improve parsing of complex generic type (#77)
- Improve parsing of factoring mixins
**New tags support**
| Keyword | Scope | Description |
| ------------- | ----------- | ----------------------------------------------------------------------------------------- |
| `@kind` | `props` | Used to document what kind of symbol is being documented |
| `@syntax` | `methods` | Provide the custom method syntax |
| `@mixin` | `component` | Force parsing of the exported item as a mixin component |
| `@version` | `all` | Assign a version to an item |
| `@since` | `all` | Indicate that an item was added in a specific version |
| `@author` | `all` | Identify authors of an item |
| `@deprecated` | `all` | Mark an item as being deprecated |
| `@see` | `all` | Allow to refer to a resource that may be related to the item being documented |
| `@ignore` | `*` | Keep the subsequent code from being documented |
| **TypeDoc** |
| `@category` | `all` | Attach a category to an item |
| `@hidden` | `*` | Keep the subsequent code from being documented |
> `*` stand for `props`, `data`, `methods`, `events`, `slots`
**Parsing Output changes**
```diff
type ParsingOutput = {
name: string; // Component name
description?: string; // Component description
+ category?: string;
+ version?: string;
+ since?: string;
inheritAttrs: boolean;
keywords: Keyword[]; // Attached component keywords
model?: ModelEntry; // Component model
slots: SlotEntry[]; // Component slots
props: PropEntry[]; // Component props
data: DataEntry[]; // Component data
computed: ComputedEntry[]; // Computed properties
events: EventEntry[]; // Events
methods: MethodEntry[]; // Component methods
errors: string[]; // Syntax and parsing errors
};
interface PropEntry {
kind: 'prop';
name: string;
type: string | string[];
- nativeType: NativeTypeEnum;
default: string;
required: boolean;
description?: string;
describeModel: boolean;
keywords: Keyword[];
+ category?: string;
+ version?: string;
+ since?: string;
visibility: 'public' | 'protected' | 'private';
}
interface DataEntry {
kind: 'data';
name: string;
- type: NativeTypeEnum;
+ type: string;
initialValue: string;
description?: string;
keywords: Keyword[];
+ category?: string;
+ version?: string;
+ since?: string;
visibility: 'public' | 'protected' | 'private';
}
interface ComputedEntry {
kind: 'computed';
name: string;
dependencies: string[];
description?: string;
keywords: Keyword[];
+ category?: string;
+ version?: string;
+ since?: string;
visibility: 'public' | 'protected' | 'private';
}
interface MethodEntry {
kind: 'method';
name: string;
params: MethodParam[];
- return: MethodReturn;
+ returns: MethodReturn;
+ syntax: string[];
description?: string;
keywords: Keyword[];
+ category?: string;
+ version?: string;
+ since?: string;
visibility: 'public' | 'protected' | 'private';
}
type MethodParam = {
name: string;
type: NativeTypeEnum | string;
description?: string;
defaultValue?: string;
+ rest: boolean;
};
interface EventEntry {
kind: 'event';
name: string;
description?: string;
arguments: EventArgument[];
keywords: Keyword[];
+ category?: string;
+ version?: string;
+ since?: string;
visibility: 'public' | 'protected' | 'private';
}
type EventArgument = {
name: string;
type: NativeTypeEnum | string;
description?: string;
+ rest: boolean;
};
interface SlotEntry {
kind: 'slot';
name: string;
description?: string;
props: SlotProp[];
keywords: Keyword[];
+ category?: string;
+ version?: string;
+ since?: string;
visibility: 'public' | 'protected' | 'private';
}
```
## Vuedoc Parser v2.4.0
This release improves parsing of mixins and fix some parsing issues.
**Changes**
- Expose `lib/parser/Parser.js` to `Vuedoc.Parser` (e73d7c9)
- Improve documentation
- Fix parsing of generic type `T<x>` e.g. `Promise<numeric>` (6f8e04b)
- Improve parsing of mixins (eae87ff)
- Introduce keyword `@mixin`. See [README.md](https://gitlab.com/vuedoc/parser/-/blob/v2.4.0/README.md#working-with-mixins)
## Vuedoc Parser v2.3.0
This release introduces a new option `stringify` and upgrades to `acorn@7.3.1` and `acorn-stage3@3.0.0`.
**Note for `stringify` option**
By default Vuedoc Parser parses literal values defined in the source code. This means:
```javascript
const binVar = 0b111110111 // will be parsed as binVar = 503
const numVar = 1_000_000_000 // will be parsed as numVar = 1000000000
```
To preserve literal values, set the `stringify` option to `true`.
```javascript
const binVar = 0b111110111 // will be parsed as binVar = 0b111110111
const numVar = 1_000_000_000 // will be parsed as numVar = 100_000_0000
```
## Vuedoc Parser v2.2.1
This release updates the [Parsing Output Interface](https://gitlab.com/vuedoc/parser/-/tree/v2.2.1#parsing-output-interface)
documentation
## Vuedoc Parser v2.2.0
This release improves the parsing of default and initial value (#74)
## Vuedoc Parser v2.1.1
This release fixes the invalid output interface issue (#73)
## Vuedoc Parser v2.1.0
This release adds many improvements of the parsing and fixes reported bugs on
the v2.0.0
**Changes**
- Using `@model` keyword no longer overwrite the prop name to `v-model`. Use
`prop.describeModel` to identify the `v-model`'s prop.
**Improvements**
- Improve parsing of v-model prop (#72)
- Add support of numeric separators and logical assignments (#71)
- Improve documentation of Parsing Output Interface (#68)
- Rename default type `Any` to `any` (#67)
**Bug fixes**
- Fix parsing of prop with multiple types (#70)
- Fix JSDoc: Parsing issue with `@returns` and type (#66)
## Vuedoc Parser v2.0.0
This major release v2.0.0 upgrades de NodeJS engine to v8, adds a fully support of ECMAScript, Class Component, TypeScript.
> **Important note:** The documentation have been completely rewrited.
Please read the [README.md](https://gitlab.com/vuedoc/parser/-/blob/765b93e6fa0799de4bae31e044bbe3d18318ffac/README.md)
file cerfully
**Breaking changes**
- Drop NodeJS 6. Now use NodeJS 8 engine (702fdfc1)
- New [Parsing Output Interface](https://gitlab.com/vuedoc/parser/-/blob/765b93e6fa0799de4bae31e044bbe3d18318ffac/README.md#interfaces)
**Features**
- Add support of scoped slots (ed4ddb69)
- ECMAScript Features Parsing (02f69660)
- Support of stage 3 proposals (574cf7f0)
- BigInt support (9c9358d0)
- Introduce [Vuedoc Parser Loader](https://gitlab.com/vuedoc/parser/-/blob/765b93e6fa0799de4bae31e044bbe3d18318ffac/README.md#language-processing)
to process custom languages
- Add support of Class Components (66d16469)
- Add support of the model field (f2bbf203)
- Add support of the inheritAttrs field (b89f24a5, 87576ced)
- Add support of Inline Template (a5b81fd8)
- Add support of Vue Instance (#48)
- Add support of JSDoc
- Add support of Vue Property Decorator
(20e2668f897f517f3cace3eb2d71d0fd57f21386)
- Add loader for TypeScript (9f4678cced2275e8c045f826ab58d9ba77d3d720)
- Add loader for Pug (c582bb1b99a9ac8fb6a185caf3810abc5ac95632)
- New keyword `@default` to set a custom prop's default value (#50)
- New keyword `@slot` to annotate slots when using render functions (#53)
- New keyword `@method` to set a custom method name
(ee94dbe596e56d8ec75b79dbdc5436800c28d436)
- New keyword `@name` to set the component name
(d5b89408a65cca9a3bc7c49b46690dfa4a6d9a05)
**Changes from v2.0.0-beta.5**
- Fix Null Pointer Exception on AbstractParser.getValue()
(4ff22f3154a87405c1371add6d3c9fa97e46710e)
- Add support of dynamic property key (805ca2ade604a1deede8906f7131120fe37074e0)
- Use node.computed to handle dynamic property key
(ac65a251ba37264ef6c30e3ce7ef1ae362d71551)
- Add support of `@Prop` and `@Model` (461af08ccea1e00f0e3664496b07b802111d315b)
- Add support of `@PropSync` (90a4e5f7a2b325e96cc0c7efd8ae0e1f5659c80b)
- Add support of `@Watch` (704d1f89fb6e5ce506779970127f565f0aa5a0f8)
- Add support of `@Emit` (770ca104d94c143b783ce1b0f6717c8c406740ad)
- Fix TypeScript Loader example (35cce563e11cbd9f5182dd773ae3cc67b0b0d7cc)
- Add support of Vue Property Decorator
(20e2668f897f517f3cace3eb2d71d0fd57f21386)
- Fix security vulnerabilities (6bc127767c83358477504b882869e138a986768d)
- Upgrade to `acorn@7.1.1` (235f06c994c398a9ae19e9d10f9c36d56f4c6e06)
- JSDoc: support param without description
(ed4c9b257a6cb6fe718a7ffb4f5d5bf39132b446)
- Add support of `@method` keyword (ee94dbe596e56d8ec75b79dbdc5436800c28d436)
- Fix handling of event arguments (3453604c1de9ff8c1d0b4c7c79290bdc28c10694)
- Handle CallExpression references (abdcbc2100c5590e7f070142ea3897c81e72588a)
- Support of new keyword `@name` (d5b89408a65cca9a3bc7c49b46690dfa4a6d9a05)
- Fix parsing of arrow function with no body brackets to another function
(ae49e8e3bc686bc630663fbea83ba8225c8bce3c)
- Add a loader for TypeScript (9f4678cced2275e8c045f826ab58d9ba77d3d720)
- Add loader for Pug (c582bb1b99a9ac8fb6a185caf3810abc5ac95632)
- Fix interface syntax (154552d148bb3bbfa77f9c22b65d0ee228dccbfd)
## Vuedoc Parser v2.0.0-beta.5
This release:
- adds support of Vue Instance,
- introduces new keywords (@slot and @default),
- fixes a bug.
**Bug fixes**
- Fix parsing of prop as array type declaration (#52)
**Documentation**
- Explain how to work with Mixins (#51)
**New features**
- Add support of Vue Instance (#48)
- New keyword `@default` to set a custom prop's default value (#50)
- New keyword `@slot` to annotate slots when using render functions (#53)
**Annotate a Vue Instance**
```js
/**
* A Vue App Component
* @version 1.2
*/
export default new Vue({
name: 'App',
props: ['todo'],
data: {
url: context.url,
/**
* data contextUrl description
*/
contextUrl: context.url,
/**
* data contextNumber description
*/
contextNumber: 12
},
template: `<slot>The visited URL is: {{ url }}</slot>`
})
```
**Annotate slots defined in Render Functions**
To annotate slots defined in Render Functions, attach the keyword `@slot` to the
component definition:
```js
/**
* A functional component with slots defined in render function
* @slot title - A title slot
* @slot default - A default slot
*/
export default {
functional: true,
render(h, { slots }) {
return h('div', [
h('h1', slots().title),
h('p', slots().default)
])
}
}
```
**Annotate dynamic slots defined in template**
You can also use the keyword `@slot` to define dynamic slots in template:
```html
<template>
<div>
<template v-for="name in ['title', 'default']">
<!--
@slot title - A title slot
@slot default - A default slot
-->
<slot :name="name" :slot="name"></slot>
</template>
</div>
</template>
```
**Working with Mixins**
Since Vuedoc Parser does not perform I/O operations, it completely ignores
the `mixins` property.
To parse mixins, you need to parse the mixin file as a standalone component and
then merge the parsing result with the result of the initial component:
```js
const _ = require('lodash')
const vuedoc = require('@vuedoc/parser')
const parsers = [
vuedoc.parse({ filename: 'mixinFile.js' })
vuedoc.parse({ filename: 'componentUsingMixin.vue' })
]
Promise.all(parsers)
.then(([ mixinResult, componentResult ]) => _.merge(mixinResult, componentResult))
.catch((err) => console.error(err))
```
## Vuedoc Parser v2.0.0-beta.4
This release adds many features and bug fixes.
**New features**
- Add support of Class Components (66d16469)
- Add support of the model field (f2bbf203)
- Add support of the inheritAttrs field (b89f24a5, 87576ced)
- Add support of Inline Template (a5b81fd8)
**Bug fixes**
- Parse prop type as native type by default (8748c498)
- Fix duplicate computed properties dependencies (17db2cab)
- Fix parsing of events on callee functions (f9ee7141)
- Fix parsing of nested slots (8d6c0066)
**Documentation**
- Improve interfaces section by using interface & extends (461dc87a)
- Update TypeScript loader example (e5bf1ab9)
To get a better Class Component parsing, make sure you set
`compilerOptions.target` to `ts.ModuleKind.ESNext`:
```js
const ts = require('typescript')
const vuedoc, { Loader } = require('@vuedoc/parser')
class TypeScriptLoader extends Loader {
load (source) {
const options = {
compilerOptions: {
target: ts.ModuleKind.ESNext,
module: ts.ModuleKind.ESNext
}
}
const { outputText } = ts.transpileModule(source, options)
// don't forget the return here
return this.emitScript(outputText)
}
}
```
## Vuedoc Parser v2.0.0-beta.3
This release adds the ability to use specific language for template of script
with Vuedoc Parser. This is possible with a new API: the Loader API.
Now you can use a component with TypeScript:
```html
<script lang="ts">
import Vue, { VueConstructor } from 'vue'
import { Prop } from 'vue/types/options'
/**
* Custom component
*/
export default Vue.extend({
props: {
/**
* @model
*/
value: {
type: Object as Prop<Array<string>>,
required: true
}
},
computed: {
currentYear (): number {
return new Date().getFullYear()
}
}
})
</script>
```
### Create loader
**Public Loader API**
```js
abstract class Loader {
public static extend(loaderName: string, loaderClass: Loader);
public abstract load(source: string): Promise<void>;
public pipe(loaderName: string, source: string): Promise<void>;
public emitTemplate(source: string): Promise<void>;
public emitScript(source: string): Promise<void>;
public emitErrors(errors: Array<string>): Promise<void>;
}
```
**TypeScript Sample**
To use Vuedoc Parser with TypeScript, install `typescript` and `@types/node`
dependencies according the [official documentation](https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API)
```js
const ts = require('typescript')
const vuedoc, { Loader } = require('@vuedoc/parser')
class TypeScriptLoader extends Loader {
load (source) {
const { outputText } = ts.transpileModule(source, {
compilerOptions: { module: ts.ModuleKind.CommonJS }
})
return this.emitScript(outputText)
}
}
const options = {
filename: 'DatePicker.ts',
loaders: [
/**
* Register TypeScriptLoader
* Note that the name of the loader is either
* the extension of the file or the value of the attribute `lang`
*/
Loader.extend('ts', TypeScriptLoader)
]
}
vuedoc.parse(options).then((component) => {
// console.log(component)
})
```
## Vuedoc Parser v2.0.0-beta-1
This first beta of the major v2.0.0 upgrades de NodeJS engine to v8 and adds a
fully ECMAScript support with breaking changes, enhancements and bug fixes.
### Changes
**Breaking changes**
- Drop NodeJS 6. Now use NodeJS 8 engine (702fdfc1)
**New features**
- Add support of scoped slots (ed4ddb69)
**Enhancement**
- Preserve white spaces on comments parsing (65190e72)
- Add a Vue Syntax Validation step (79ec36f7)
**Parsing improvement**
- Use [acorn](https://www.npmjs.com/package/acorn) for parsing (f356c669,
MR !40)
- ECMAScript Features Parsing (02f69660)
- Support of stage 3 proposals (574cf7f0)
- BigInt support (9c9358d0)
**Bug fixes**
- Fix comment parsing when containing @ char #30 (d87f7c07)
- Fix bad format when using code block in comment #29 (65190e72)
- Fix parsing of `import()` with lazy syntax #32
### New parsing interfaces
```js
type ParsingOutput = {
name: string, // Component name
description: string, // Component description
keywords: Keyword[], // Attached component keywords
slots: SlotEntry[], // Component slots
props: PropEntry[], // Component props
data: DataEntry[], // Component data
computed: ComputedEntry[], // Computed properties
events: EventEntry[], // Events
methods: MethodEntry[], // Component methods
errors: string[] // Syntax and parsing errors
}
enum VisibilityEnum = {
public,
protected,
private
}
enum NativeTypeEnum = {
string,
number,
bigint,
boolean,
object,
null,
undefined
}
type Keyword = {
name: string,
description: string
}
type SlotEntry = {
readonly kind: string = 'slot',
visibility: VisibilityEnum,
description: string,
keywords: Keyword[],
name: string,
props: SlotProp[]
}
type SlotProp = {
name: string,
type: string,
description: string
}
type PropEntry = {
readonly kind: string = 'slot',
visibility: VisibilityEnum,
description: string,
keywords: Keyword[],
name: string, // v-model when the @model keyword is attached
type: Identifier, // defined prop type. ex Array, Object, String, ...
nativeType: NativeTypeEnum,
default: any, // '__undefined__' value uncatchable value
required: boolean = false,
describeModel: boolean = false // true when the @model keyword is attached
}
type DataEntry = {
readonly kind: string = 'data',
visibility: VisibilityEnum,
description: string,
keywords: Keyword[],
name: string,
type: NativeTypeEnum,
initial: any // '__undefined__' value uncatchable value
}
type ComputedEntry = {
readonly kind: string = 'computed',
visibility: VisibilityEnum,
description: string,
keywords: Keyword[],
name: string,
dependencies: string[] // list of internal dependencies properties
}
type EventEntry = {
readonly kind: string = 'event',
visibility: VisibilityEnum,
description: string,
keywords: Keyword[],
name: string,
arguments: EventArgument[]
}
type EventArgument = {
name: string,
description: string,
type: string
}
type MethodEntry = {
readonly kind: string = 'method',
visibility: VisibilityEnum,
description: string,
keywords: Keyword[],
name: string,
params: MethodParam[],
return: MethodReturn
}
type MethodParam = {
name: string,
description: string,
type: string,
defaultValue: any
}
type MethodReturn = {
type: string = 'void',
description: string
}
```
## Vuedoc Parser v1.4.0
This release adds a feature to preserve white spaces on comments parsing
## Vuedoc Parser v1.3.2
This release adds a fix about parsing of undefined default value #27
## Vuedoc Parser v1.3.1
There are no changes, this release is just to update NPM metadata after a moved from GitHub.
## Vuedoc Parser v1.1.0
The `vuedoc/parser` is now able to parse a JS file component. This enhancement
closes the #21
```js
const parser = require('@vuedoc/parser')
const options = {
filename: 'components/checkbox.js'
}
parser.parse(options).then((component) => {
console.log(component)
})
```
## Vuedoc Parser v1.0.2
- Add support of Spread Operator #7
- Fix unCamelcase parsing of entry with numbers #15
- Fix filtering of ignoredVisibilities #18
## Vuedoc Parser v1.0.1
This release just improves the documentation with more samples
## Vuedoc Parser v1.0.0
This major release add a new feature and uses the NodeJS v6.11.2 as default
engine.
### New option: `options.features`
The new `options.features` lets you select which Vue Features you want to parse
and extract.
The default value is define by `Parser.SUPPORTED_FEATURES` array.
**Usage**
Only parse `name`, `props`, `computed properties` and `events`:
```js
const vuedoc = require('@vuedoc/parser')
const options = {
filename: 'test/fixtures/checkbox.vue',
features: [ 'name', 'props', 'computed', 'events' ]
}
vuedoc.parse(options)
.then((component) => console.log(component)) // => { name, props, computed, events }
.catch((err) => console.error(err))
```
Parse all features except `data`:
```js
const vuedoc = require('@vuedoc/parser')
const Parser = require('@vuedoc/parser/lib/parser')
const options = {
filename: 'test/fixtures/checkbox.vue',
features: Parser.SUPPORTED_FEATURES.filter((feature) => feature !== 'data')
}
vuedoc.parse(options)
.then((component) => console.log(component)) // => { name, description, keywords, props, computed, events, methods }
.catch((err) => console.error(err))
```
### Bug fix
There was a bug when the given component file didn't have a script entry. In
this case, the parser was not able to emit the `end` event. This is now fixed.
### NodeJS v6.11.2
Now `@vuedoc/parser` requires the `v6.11.2` (or higher) of NodeJS.
## Vuedoc Parser v0.6.2
This release add the support of
[Computed Getters](https://vuejs.org/v2/guide/computed.html#Computed-Setter)
## Vuedoc Parser v0.6.0
* Add support of `component.data` parsing
* Add support of computed properties #6
* Add a features section and update the documentation
## Vuedoc Parser v0.5.0
This new release introduces **Keywords Extraction Feature**. This enable to attach keywords to a comment and then extract them using the parser.
Decoration:
```js
/**
* Component description
*
* @author Sébastien
* @license MIT
*/
export default {
name: 'my-checkbox',
created () {
/**
* @param boolean
*/
this.$emit('created', true)
}
}
```
Parsing result:
```json
{
"name": "my-checkbox",
"description": "Component description",
"keywords": [
{
"name": "author",
"description": "Sébastien"
},
{
"name": "license",
"description": "MIT"
}
],
"props": [],
"methods": [],
"events": [
{
"name": "created",
"description": "",
"visibility": "public",
"keywords": [
{
"name": "param",
"description": "boolean"
}
]
}
],
"slots": []
}
```
This release also fixes some issues:
* Fix missing component name parsing with only template parsing
* Fix missing defaultMethodVisibility option on getComment call
* Fix issue on unCamelcase with a string containing `-`
* Enable parsing of component with just <template/> as entry