mirror of
https://github.com/markedjs/marked
synced 2024-11-22 08:12:33 +00:00
fix: fix this type in extension methods (#3339)
* fix: fix this type in extension methods * fix this in old extension
This commit is contained in:
parent
642c30c81f
commit
520b9ad355
@ -259,28 +259,30 @@ export class Marked {
|
|||||||
#convertRendererFunction(func: GenericRendererFunction, prop: string, renderer: _Renderer) {
|
#convertRendererFunction(func: GenericRendererFunction, prop: string, renderer: _Renderer) {
|
||||||
switch (prop) {
|
switch (prop) {
|
||||||
case 'heading':
|
case 'heading':
|
||||||
return function(token: Tokens.Heading) {
|
return function(this: _Renderer, token: Tokens.Heading) {
|
||||||
if (!token.type || token.type !== prop) {
|
if (!token.type || token.type !== prop) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
// eslint-disable-next-line prefer-rest-params
|
// eslint-disable-next-line prefer-rest-params
|
||||||
return func.apply(this, arguments);
|
return func.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(
|
return func.call(
|
||||||
|
this,
|
||||||
renderer.parser.parseInline(token.tokens),
|
renderer.parser.parseInline(token.tokens),
|
||||||
token.depth,
|
token.depth,
|
||||||
unescape(renderer.parser.parseInline(token.tokens, renderer.parser.textRenderer))
|
unescape(renderer.parser.parseInline(token.tokens, renderer.parser.textRenderer))
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
case 'code':
|
case 'code':
|
||||||
return function(token: Tokens.Code) {
|
return function(this: _Renderer, token: Tokens.Code) {
|
||||||
if (!token.type || token.type !== prop) {
|
if (!token.type || token.type !== prop) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
// eslint-disable-next-line prefer-rest-params
|
// eslint-disable-next-line prefer-rest-params
|
||||||
return func.apply(this, arguments);
|
return func.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(
|
return func.call(
|
||||||
|
this,
|
||||||
token.text,
|
token.text,
|
||||||
token.lang,
|
token.lang,
|
||||||
!!token.escaped
|
!!token.escaped
|
||||||
@ -328,7 +330,7 @@ export class Marked {
|
|||||||
body += this.tablerow({ text: cell });
|
body += this.tablerow({ text: cell });
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(header, body);
|
return func.call(this, header, body);
|
||||||
};
|
};
|
||||||
case 'blockquote':
|
case 'blockquote':
|
||||||
return function(this: _Renderer, token: Tokens.Blockquote) {
|
return function(this: _Renderer, token: Tokens.Blockquote) {
|
||||||
@ -339,7 +341,7 @@ export class Marked {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const body = this.parser.parse(token.tokens);
|
const body = this.parser.parse(token.tokens);
|
||||||
return func(body);
|
return func.call(this, body);
|
||||||
};
|
};
|
||||||
case 'list':
|
case 'list':
|
||||||
return function(this: _Renderer, token: Tokens.List) {
|
return function(this: _Renderer, token: Tokens.List) {
|
||||||
@ -391,17 +393,17 @@ export class Marked {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(body, ordered, start);
|
return func.call(this, body, ordered, start);
|
||||||
};
|
};
|
||||||
case 'html':
|
case 'html':
|
||||||
return function(token: Tokens.HTML) {
|
return function(this: _Renderer, token: Tokens.HTML) {
|
||||||
if (!token.type || token.type !== prop) {
|
if (!token.type || token.type !== prop) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
// eslint-disable-next-line prefer-rest-params
|
// eslint-disable-next-line prefer-rest-params
|
||||||
return func.apply(this, arguments);
|
return func.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(token.text, token.block);
|
return func.call(this, token.text, token.block);
|
||||||
};
|
};
|
||||||
case 'paragraph':
|
case 'paragraph':
|
||||||
return function(this: _Renderer, token: Tokens.Paragraph) {
|
return function(this: _Renderer, token: Tokens.Paragraph) {
|
||||||
@ -411,17 +413,17 @@ export class Marked {
|
|||||||
return func.apply(this, arguments);
|
return func.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(this.parser.parseInline(token.tokens));
|
return func.call(this, this.parser.parseInline(token.tokens));
|
||||||
};
|
};
|
||||||
case 'escape':
|
case 'escape':
|
||||||
return function(token: Tokens.Escape) {
|
return function(this: _Renderer, token: Tokens.Escape) {
|
||||||
if (!token.type || token.type !== prop) {
|
if (!token.type || token.type !== prop) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
// eslint-disable-next-line prefer-rest-params
|
// eslint-disable-next-line prefer-rest-params
|
||||||
return func.apply(this, arguments);
|
return func.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(token.text);
|
return func.call(this, token.text);
|
||||||
};
|
};
|
||||||
case 'link':
|
case 'link':
|
||||||
return function(this: _Renderer, token: Tokens.Link) {
|
return function(this: _Renderer, token: Tokens.Link) {
|
||||||
@ -431,17 +433,17 @@ export class Marked {
|
|||||||
return func.apply(this, arguments);
|
return func.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(token.href, token.title, this.parser.parseInline(token.tokens));
|
return func.call(this, token.href, token.title, this.parser.parseInline(token.tokens));
|
||||||
};
|
};
|
||||||
case 'image':
|
case 'image':
|
||||||
return function(token: Tokens.Image) {
|
return function(this: _Renderer, token: Tokens.Image) {
|
||||||
if (!token.type || token.type !== prop) {
|
if (!token.type || token.type !== prop) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
// eslint-disable-next-line prefer-rest-params
|
// eslint-disable-next-line prefer-rest-params
|
||||||
return func.apply(this, arguments);
|
return func.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(token.href, token.title, token.text);
|
return func.call(this, token.href, token.title, token.text);
|
||||||
};
|
};
|
||||||
case 'strong':
|
case 'strong':
|
||||||
return function(this: _Renderer, token: Tokens.Strong) {
|
return function(this: _Renderer, token: Tokens.Strong) {
|
||||||
@ -451,7 +453,7 @@ export class Marked {
|
|||||||
return func.apply(this, arguments);
|
return func.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(this.parser.parseInline(token.tokens));
|
return func.call(this, this.parser.parseInline(token.tokens));
|
||||||
};
|
};
|
||||||
case 'em':
|
case 'em':
|
||||||
return function(this: _Renderer, token: Tokens.Em) {
|
return function(this: _Renderer, token: Tokens.Em) {
|
||||||
@ -461,17 +463,17 @@ export class Marked {
|
|||||||
return func.apply(this, arguments);
|
return func.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(this.parser.parseInline(token.tokens));
|
return func.call(this, this.parser.parseInline(token.tokens));
|
||||||
};
|
};
|
||||||
case 'codespan':
|
case 'codespan':
|
||||||
return function(token: Tokens.Codespan) {
|
return function(this: _Renderer, token: Tokens.Codespan) {
|
||||||
if (!token.type || token.type !== prop) {
|
if (!token.type || token.type !== prop) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
// eslint-disable-next-line prefer-rest-params
|
// eslint-disable-next-line prefer-rest-params
|
||||||
return func.apply(this, arguments);
|
return func.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(token.text);
|
return func.call(this, token.text);
|
||||||
};
|
};
|
||||||
case 'del':
|
case 'del':
|
||||||
return function(this: _Renderer, token: Tokens.Del) {
|
return function(this: _Renderer, token: Tokens.Del) {
|
||||||
@ -481,17 +483,17 @@ export class Marked {
|
|||||||
return func.apply(this, arguments);
|
return func.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(this.parser.parseInline(token.tokens));
|
return func.call(this, this.parser.parseInline(token.tokens));
|
||||||
};
|
};
|
||||||
case 'text':
|
case 'text':
|
||||||
return function(token: Tokens.Text) {
|
return function(this: _Renderer, token: Tokens.Text) {
|
||||||
if (!token.type || token.type !== prop) {
|
if (!token.type || token.type !== prop) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
// eslint-disable-next-line prefer-rest-params
|
// eslint-disable-next-line prefer-rest-params
|
||||||
return func.apply(this, arguments);
|
return func.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(token.text);
|
return func.call(this, token.text);
|
||||||
};
|
};
|
||||||
default:
|
default:
|
||||||
// do nothing
|
// do nothing
|
||||||
|
@ -36,17 +36,17 @@ export type TokenizerAndRendererExtension = TokenizerExtension | RendererExtensi
|
|||||||
|
|
||||||
type HooksApi = Omit<_Hooks, 'constructor' | 'options'>;
|
type HooksApi = Omit<_Hooks, 'constructor' | 'options'>;
|
||||||
type HooksObject = {
|
type HooksObject = {
|
||||||
[K in keyof HooksApi]?: (...args: Parameters<HooksApi[K]>) => ReturnType<HooksApi[K]> | Promise<ReturnType<HooksApi[K]>>
|
[K in keyof HooksApi]?: (this: _Hooks, ...args: Parameters<HooksApi[K]>) => ReturnType<HooksApi[K]> | Promise<ReturnType<HooksApi[K]>>
|
||||||
};
|
};
|
||||||
|
|
||||||
type RendererApi = Omit<_Renderer, 'constructor' | 'options' | 'parser'>;
|
type RendererApi = Omit<_Renderer, 'constructor' | 'options' | 'parser'>;
|
||||||
type RendererObject = {
|
type RendererObject = {
|
||||||
[K in keyof RendererApi]?: (...args: Parameters<RendererApi[K]>) => ReturnType<RendererApi[K]> | false
|
[K in keyof RendererApi]?: (this: _Renderer, ...args: Parameters<RendererApi[K]>) => ReturnType<RendererApi[K]> | false
|
||||||
};
|
};
|
||||||
|
|
||||||
type TokenizerApi = Omit<_Tokenizer, 'constructor' | 'options' | 'rules' | 'lexer'>;
|
type TokenizerApi = Omit<_Tokenizer, 'constructor' | 'options' | 'rules' | 'lexer'>;
|
||||||
type TokenizerObject = {
|
type TokenizerObject = {
|
||||||
[K in keyof TokenizerApi]?: (...args: Parameters<TokenizerApi[K]>) => ReturnType<TokenizerApi[K]> | false
|
[K in keyof TokenizerApi]?: (this: _Tokenizer, ...args: Parameters<TokenizerApi[K]>) => ReturnType<TokenizerApi[K]> | false
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface MarkedExtension {
|
export interface MarkedExtension {
|
||||||
|
@ -136,9 +136,9 @@ marked.use({ renderer }, { tokenizer });
|
|||||||
|
|
||||||
marked.use({
|
marked.use({
|
||||||
renderer: {
|
renderer: {
|
||||||
heading({ text, depth }) {
|
heading({ tokens, depth }) {
|
||||||
if (depth > 3) {
|
if (depth > 3) {
|
||||||
return `<p>${text}</p>`;
|
return `<p>${this.parser.parseInline(tokens)}</p>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -149,6 +149,20 @@ marked.use({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
tokenizer: {
|
tokenizer: {
|
||||||
|
heading(src) {
|
||||||
|
const cap = this.rules.block.heading.exec(src);
|
||||||
|
if (cap) {
|
||||||
|
let text = cap[2].trim();
|
||||||
|
|
||||||
|
return {
|
||||||
|
type: 'heading',
|
||||||
|
raw: cap[0],
|
||||||
|
depth: cap[1].length,
|
||||||
|
text,
|
||||||
|
tokens: this.lexer.inline(text)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
codespan(src) {
|
codespan(src) {
|
||||||
const match = src.match(/\$+([^\$\n]+?)\$+/);
|
const match = src.match(/\$+([^\$\n]+?)\$+/);
|
||||||
if (match) {
|
if (match) {
|
||||||
@ -317,6 +331,9 @@ marked.use({ tokenizer: new Tokenizer() });
|
|||||||
marked.use({
|
marked.use({
|
||||||
hooks: {
|
hooks: {
|
||||||
preprocess(markdown) {
|
preprocess(markdown) {
|
||||||
|
if (this.options.async) {
|
||||||
|
return Promise.resolve(markdown);
|
||||||
|
}
|
||||||
return markdown;
|
return markdown;
|
||||||
},
|
},
|
||||||
postprocess(html) {
|
postprocess(html) {
|
||||||
|
Loading…
Reference in New Issue
Block a user