1- import type { ParseOptions , RenderOptions } from 'comark'
1+ import type { ParserOptions } from 'comark'
22import { createMarkdownParser } from 'comark'
3- import { renderANSI } from './render.ts'
3+ import { type AnsiRendererOptions , renderAnsiFromDocument } from './render.ts'
44
5- export { renderANSI , type RenderANSIOptions } from './render.ts'
5+ export { renderAnsiFromDocument , type AnsiRendererOptions } from './render.ts'
66
7- function defaultWrite ( string : string ) {
7+ function defaultWriter ( string : string ) {
88 if ( typeof process !== 'undefined' ) {
99 process . stdout . write ( string )
1010 } else {
@@ -13,99 +13,101 @@ function defaultWrite(string: string) {
1313}
1414
1515/**
16- * Options for creating a log function .
16+ * Options for creating an ANSI writer .
1717 */
18- export interface LogOptions extends RenderOptions , ParseOptions {
19- write ?: ( string : string ) => void
18+ export interface AnsiWriterOptions extends AnsiRendererOptions , ParserOptions {
19+ writer ?: ( string : string ) => void
2020}
2121
2222/**
23- * Creates a reusable log function with pre-configured parse and render options.
23+ * Creates a reusable writer with pre-configured parse and render options.
2424 *
2525 * @param options - Comark parse and render options (plugins, autoClose, etc.)
2626 * @returns An async function `(markdown) => Promise<void>` that prints to stdout
2727 *
2828 * @example
2929 * ```typescript
30- * import { createLog } from '@comark/ansi'
31- * import math from 'comark/plugins/math'
30+ * import { createAnsiWriter } from '@comark/ansi'
31+ * import math, { Math } from '@ comark/ansi /plugins/math'
3232 *
33- * const log = createLog ({
33+ * const writeAnsi = createAnsiWriter ({
3434 * plugins: [math()],
35+ * components: { Math },
3536 * width: 120,
36- * write : (s) => process.stderr.write(s)
37+ * writer : (s) => process.stderr.write(s)
3738 * })
3839 *
39- * await log ('# Hello\n\nThis is **bold**.')
40+ * await writeAnsi ('# Hello\n\nThis is **bold**.')
4041 * ```
4142 */
42- export function createLog ( options ?: LogOptions ) : ( markdown : string ) => Promise < void > {
43- const parse = createMarkdownParser ( options as ParseOptions )
43+ export function createAnsiWriter ( options ?: AnsiWriterOptions ) : ( markdown : string ) => Promise < void > {
44+ const renderAnsi = createAnsiRenderer ( options as AnsiRendererOptions )
45+ const write = options ?. writer ?? defaultWriter
4446 return async ( markdown : string ) => {
45- const tree = await parse ( markdown )
46- const write = options ?. write ?? defaultWrite
47-
48- write ( ( await renderANSI ( tree , options as RenderOptions ) ) + '\n' )
47+ const output = await renderAnsi ( markdown )
48+ write ( output + '\n' )
4949 }
5050}
5151
5252/**
5353 * Parse markdown and print it as ANSI-styled output to stdout.
5454 *
55- * @param markdown - The markdown/Comark content to parse and print
56- * @param options - Optional rendering options
55+ * @param markdown - The markdown content to parse and print
56+ * @param options - Optional markdown parser, ANSI renderer, and writer options
5757 *
5858 * @example
5959 * ```typescript
60- * import { log } from '@comark/ansi'
60+ * import { writeAnsi } from '@comark/ansi'
6161 *
62- * await log ('# Hello\n\nThis is **bold** and _italic_.')
62+ * await writeAnsi ('# Hello\n\nThis is **bold** and _italic_.')
6363 * ```
6464 */
65- export async function log ( markdown : string , options ?: LogOptions ) : Promise < void > {
66- return createLog ( options ) ( markdown )
65+ export async function writeAnsi ( markdown : string , options ?: AnsiWriterOptions ) : Promise < void > {
66+ return createAnsiWriter ( options ) ( markdown )
6767}
6868
6969/**
7070 * Creates a reusable render function with pre-configured parse and render options.
7171 *
72- * @param options - Comark parse and render options (plugins, autoClose, etc.)
72+ * @param options - Markdown parser and ANSI renderer options (plugins, autoClose, etc.)
7373 * @returns An async function `(markdown) => Promise<string>` that returns ANSI-styled output
7474 *
7575 * @example
7676 * ```typescript
77- * import { createRender } from '@comark/ansi'
77+ * import { createAnsiRenderer } from '@comark/ansi'
7878 *
79- * const render = createRender ({
79+ * const renderAnsi = createAnsiRenderer ({
8080 * plugins: [math()]
8181 * })
8282 *
83- * const output = await render ('# Hello\n\nThis is **bold** and _italic_.')
83+ * const output = await renderAnsi ('# Hello\n\nThis is **bold** and _italic_.')
8484 * console.log(output)
8585 * ```
8686 */
87- export function createRender ( options ?: ParseOptions & RenderOptions ) : ( markdown : string ) => Promise < string > {
88- const parse = createMarkdownParser ( options as ParseOptions )
87+ export function createAnsiRenderer (
88+ options ?: ParserOptions & AnsiRendererOptions
89+ ) : ( markdown : string ) => Promise < string > {
90+ const parseMarkdown = createMarkdownParser ( options as ParserOptions )
8991 return async ( markdown : string ) => {
90- const tree = await parse ( markdown )
91- return await renderANSI ( tree , options as RenderOptions )
92+ const doc = await parseMarkdown ( markdown )
93+ return await renderAnsiFromDocument ( doc , options as AnsiRendererOptions )
9294 }
9395}
9496
9597/**
96- * Parse markdown and render it as ANSI-styled output to stdout .
98+ * Parse markdown and render it as an ANSI-styled string .
9799 *
98- * @param markdown - The markdown/Comark content to parse and print
99- * @param options - Optional rendering options
100+ * @param markdown - The markdown content to parse and render
101+ * @param options - Optional markdown parser & ANSI renderer options
100102 *
101103 * @example
102104 * ```typescript
103- * import { render } from '@comark/ansi'
105+ * import { renderAnsi } from '@comark/ansi'
104106 *
105- * const output = await render ('# Hello\n\nThis is **bold** and _italic_.')
107+ * const output = await renderAnsi ('# Hello\n\nThis is **bold** and _italic_.')
106108 * console.log(output)
107109 * ```
108110 */
109- export async function render ( markdown : string , options ?: LogOptions ) : Promise < string > {
110- return createRender ( options ) ( markdown )
111+ export async function renderAnsi ( markdown : string , options ?: ParserOptions & AnsiRendererOptions ) : Promise < string > {
112+ return createAnsiRenderer ( options ) ( markdown )
111113}
0 commit comments