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

Method use

src/Instance.ts:76–260  ·  view source on GitHub ↗
(...args: MarkedExtension<ParserOutput, RendererOutput>[])

Source from the content-addressed store, hash-verified

74 }
75
76 use(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {
77 const extensions: MarkedOptions<ParserOutput, RendererOutput>['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };
78
79 args.forEach((pack) => {
80 // copy options to new object
81 const opts = { ...pack } as MarkedOptions<ParserOutput, RendererOutput>;
82
83 // set async to true if it was set to true before
84 opts.async = this.defaults.async || opts.async || false;
85
86 // ==-- Parse "addon" extensions --== //
87 if (pack.extensions) {
88 pack.extensions.forEach((ext) => {
89 if (!ext.name) {
90 throw new Error('extension name required');
91 }
92 if ('renderer' in ext) { // Renderer extensions
93 const prevRenderer = extensions.renderers[ext.name];
94 if (prevRenderer) {
95 // Replace extension with func to run new extension but fall back if false
96 extensions.renderers[ext.name] = function(...args) {
97 let ret = ext.renderer.apply(this, args);
98 if (ret === false) {
99 ret = prevRenderer.apply(this, args);
100 }
101 return ret;
102 };
103 } else {
104 extensions.renderers[ext.name] = ext.renderer;
105 }
106 }
107 if ('tokenizer' in ext) { // Tokenizer Extensions
108 if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {
109 throw new Error("extension level must be 'block' or 'inline'");
110 }
111 const extLevel = extensions[ext.level];
112 if (extLevel) {
113 extLevel.unshift(ext.tokenizer);
114 } else {
115 extensions[ext.level] = [ext.tokenizer];
116 }
117 if (ext.start) { // Function to check for start of token
118 if (ext.level === 'block') {
119 if (extensions.startBlock) {
120 extensions.startBlock.push(ext.start);
121 } else {
122 extensions.startBlock = [ext.start];
123 }
124 } else if (ext.level === 'inline') {
125 if (extensions.startInline) {
126 extensions.startInline.push(ext.start);
127 } else {
128 extensions.startInline = [ext.start];
129 }
130 }
131 }
132 }
133 if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens

Callers 7

constructorMethod · 0.95
marked.tsFile · 0.80
Hooks.test.jsFile · 0.80
marked.test.jsFile · 0.80
instance.test.jsFile · 0.80
marked.tsFile · 0.80
runConfigFunction · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected