(src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null)
| 281 | |
| 282 | // eslint-disable-next-line @typescript-eslint/no-explicit-any |
| 283 | const parse: overloadedParse = (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): any => { |
| 284 | const origOpt = { ...options }; |
| 285 | const opt = { ...this.defaults, ...origOpt }; |
| 286 | |
| 287 | const throwError = this.onError(!!opt.silent, !!opt.async); |
| 288 | |
| 289 | // throw error if an extension set async to true but parse was called with async: false |
| 290 | if (this.defaults.async === true && origOpt.async === false) { |
| 291 | return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.')); |
| 292 | } |
| 293 | |
| 294 | // throw error in case of non string input |
| 295 | if (typeof src === 'undefined' || src === null) { |
| 296 | return throwError(new Error('marked(): input parameter is undefined or null')); |
| 297 | } |
| 298 | if (typeof src !== 'string') { |
| 299 | return throwError(new Error('marked(): input parameter is of type ' |
| 300 | + Object.prototype.toString.call(src) + ', string expected')); |
| 301 | } |
| 302 | |
| 303 | if (opt.hooks) { |
| 304 | opt.hooks.options = opt; |
| 305 | opt.hooks.block = blockType; |
| 306 | } |
| 307 | |
| 308 | if (opt.async) { |
| 309 | return (async() => { |
| 310 | const processedSrc = opt.hooks ? await opt.hooks.preprocess(src) : src; |
| 311 | const lexer = opt.hooks ? await opt.hooks.provideLexer(blockType) : (blockType ? _Lexer.lex : _Lexer.lexInline); |
| 312 | const tokens = await lexer(processedSrc, opt); |
| 313 | const processedTokens = opt.hooks ? await opt.hooks.processAllTokens(tokens) : tokens; |
| 314 | if (opt.walkTokens) { |
| 315 | await Promise.all(this.walkTokens(processedTokens, opt.walkTokens)); |
| 316 | } |
| 317 | const parser = opt.hooks ? await opt.hooks.provideParser(blockType) : (blockType ? _Parser.parse : _Parser.parseInline); |
| 318 | const html = await parser(processedTokens, opt); |
| 319 | return opt.hooks ? await opt.hooks.postprocess(html) : html; |
| 320 | })().catch(throwError); |
| 321 | } |
| 322 | |
| 323 | try { |
| 324 | if (opt.hooks) { |
| 325 | src = opt.hooks.preprocess(src) as string; |
| 326 | } |
| 327 | const lexer = opt.hooks ? opt.hooks.provideLexer(blockType) : (blockType ? _Lexer.lex : _Lexer.lexInline); |
| 328 | let tokens = lexer(src, opt); |
| 329 | if (opt.hooks) { |
| 330 | tokens = opt.hooks.processAllTokens(tokens); |
| 331 | } |
| 332 | if (opt.walkTokens) { |
| 333 | this.walkTokens(tokens, opt.walkTokens); |
| 334 | } |
| 335 | const parser = opt.hooks ? opt.hooks.provideParser(blockType) : (blockType ? _Parser.parse : _Parser.parseInline); |
| 336 | let html = parser(tokens, opt); |
| 337 | if (opt.hooks) { |
| 338 | html = opt.hooks.postprocess(html); |
| 339 | } |
| 340 | return html; |
no test coverage detected