55
66import type { Root } from '@flex-development/docast'
77import { fromDocs , type Options } from '@flex-development/docast-util-from-docs'
8- import type { Nilable , Optional } from '@flex-development/tutils'
8+ import type { EmptyArray , Optional } from '@flex-development/tutils'
99import type { Extension as MdastExtension } from 'mdast-util-from-markdown'
1010import type { Extension as MicromarkExtension } from 'micromark-util-types'
11- import type { Data , Plugin , Processor } from 'unified'
11+ import type { Plugin , Processor } from 'unified'
1212import type { VFile } from 'vfile'
1313
1414declare module 'unified' {
@@ -31,7 +31,8 @@ declare module 'unified' {
3131 micromarkExtensions ?: Optional < MicromarkExtension [ ] >
3232 }
3333
34- interface Settings extends Options { }
34+ interface Settings
35+ extends Omit < Options , 'mdastExtensions' | 'micromarkExtensions' > { }
3536}
3637
3738/**
@@ -42,30 +43,9 @@ declare module 'unified' {
4243 *
4344 * @this {Processor}
4445 *
45- * @param {Nilable<Options>? } [options] - Configuration options
4646 * @return {void } Nothing
4747 */
48- function plugin ( this : Processor , options ?: Nilable < Options > ) : void {
49- /**
50- * Processor data.
51- *
52- * @const {Data} data
53- */
54- const data : Data = this . data ( )
55-
56- // initialize extensions
57- data . fromMarkdownExtensions ??= [ ]
58- data . micromarkExtensions ??= [ ]
59-
60- // initialize options
61- options ??= { }
62- options . mdastExtensions ??= [ ]
63- options . micromarkExtensions ??= [ ]
64-
65- // configure extensions
66- data . fromMarkdownExtensions . push ( ...options . mdastExtensions )
67- data . micromarkExtensions . push ( ...options . micromarkExtensions )
68-
48+ function plugin ( this : Processor ) : void {
6949 /**
7050 * Docblock parser.
7151 *
@@ -75,10 +55,11 @@ function plugin(this: Processor, options?: Nilable<Options>): void {
7555 */
7656 const parser = ( document : string , file : VFile ) : Root => {
7757 return fromDocs ( String ( file ) , {
58+ // options are not documented in the readme.
59+ // options should be set by plugins on `data` instead of passed by users.
7860 ...this . data ( 'settings' ) ,
79- ...options ,
80- mdastExtensions : data . fromMarkdownExtensions ,
81- micromarkExtensions : data . micromarkExtensions
61+ mdastExtensions : this . data ( 'fromMarkdownExtensions' ) ,
62+ micromarkExtensions : this . data ( 'micromarkExtensions' )
8263 } )
8364 }
8465
@@ -88,15 +69,13 @@ function plugin(this: Processor, options?: Nilable<Options>): void {
8869/**
8970 * Add support for docblock parsing.
9071 *
91- * @see {@linkcode Options }
9272 * @see {@linkcode Plugin }
9373 * @see {@linkcode Root }
9474 *
9575 * @this {Processor}
9676 *
97- * @param {Nilable<Options>? } [options] - Configuration options
9877 * @return {void } Nothing
9978 */
100- const docastParse : Plugin < [ Nilable < Options > ? ] , string , Root > = plugin
79+ const docastParse : Plugin < EmptyArray , string , Root > = plugin
10180
10281export default docastParse
0 commit comments