MCPcopy
hub / github.com/markedjs/marked / parse

Method parse

src/Instance.ts:283–344  ·  view source on GitHub ↗
(src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null)

Source from the content-addressed store, hash-verified

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;

Callers 4

parseFunction · 0.95
updateCommonmarkFunction · 0.95
updateGfmFunction · 0.95
parserMethod · 0.45

Calls 7

onErrorMethod · 0.95
walkTokensMethod · 0.95
preprocessMethod · 0.80
provideLexerMethod · 0.80
processAllTokensMethod · 0.80
provideParserMethod · 0.80
postprocessMethod · 0.80

Tested by

no test coverage detected