marked 11.0.0 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/marked.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * marked v11.0.0 - a markdown parser
2
+ * marked v11.1.0 - a markdown parser
3
3
  * Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed)
4
4
  * https://github.com/markedjs/marked
5
5
  */
@@ -2024,7 +2024,8 @@ class _Hooks {
2024
2024
  }
2025
2025
  static passThroughHooks = new Set([
2026
2026
  'preprocess',
2027
- 'postprocess'
2027
+ 'postprocess',
2028
+ 'processAllTokens'
2028
2029
  ]);
2029
2030
  /**
2030
2031
  * Process markdown before marked
@@ -2038,6 +2039,12 @@ class _Hooks {
2038
2039
  postprocess(html) {
2039
2040
  return html;
2040
2041
  }
2042
+ /**
2043
+ * Process all tokens before walk tokens
2044
+ */
2045
+ processAllTokens(tokens) {
2046
+ return tokens;
2047
+ }
2041
2048
  }
2042
2049
 
2043
2050
  class Marked {
@@ -2163,9 +2170,13 @@ class Marked {
2163
2170
  if (pack.renderer) {
2164
2171
  const renderer = this.defaults.renderer || new _Renderer(this.defaults);
2165
2172
  for (const prop in pack.renderer) {
2166
- if (!(prop in renderer) || prop === 'options') {
2173
+ if (!(prop in renderer)) {
2167
2174
  throw new Error(`renderer '${prop}' does not exist`);
2168
2175
  }
2176
+ if (prop === 'options') {
2177
+ // ignore options property
2178
+ continue;
2179
+ }
2169
2180
  const rendererProp = prop;
2170
2181
  const rendererFunc = pack.renderer[rendererProp];
2171
2182
  const prevRenderer = renderer[rendererProp];
@@ -2183,9 +2194,13 @@ class Marked {
2183
2194
  if (pack.tokenizer) {
2184
2195
  const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);
2185
2196
  for (const prop in pack.tokenizer) {
2186
- if (!(prop in tokenizer) || ['options', 'rules', 'lexer'].includes(prop)) {
2197
+ if (!(prop in tokenizer)) {
2187
2198
  throw new Error(`tokenizer '${prop}' does not exist`);
2188
2199
  }
2200
+ if (['options', 'rules', 'lexer'].includes(prop)) {
2201
+ // ignore options, rules, and lexer properties
2202
+ continue;
2203
+ }
2189
2204
  const tokenizerProp = prop;
2190
2205
  const tokenizerFunc = pack.tokenizer[tokenizerProp];
2191
2206
  const prevTokenizer = tokenizer[tokenizerProp];
@@ -2205,13 +2220,18 @@ class Marked {
2205
2220
  if (pack.hooks) {
2206
2221
  const hooks = this.defaults.hooks || new _Hooks();
2207
2222
  for (const prop in pack.hooks) {
2208
- if (!(prop in hooks) || prop === 'options') {
2223
+ if (!(prop in hooks)) {
2209
2224
  throw new Error(`hook '${prop}' does not exist`);
2210
2225
  }
2226
+ if (prop === 'options') {
2227
+ // ignore options property
2228
+ continue;
2229
+ }
2211
2230
  const hooksProp = prop;
2212
2231
  const hooksFunc = pack.hooks[hooksProp];
2213
2232
  const prevHook = hooks[hooksProp];
2214
2233
  if (_Hooks.passThroughHooks.has(prop)) {
2234
+ // @ts-expect-error cannot type hook function dynamically
2215
2235
  hooks[hooksProp] = (arg) => {
2216
2236
  if (this.defaults.async) {
2217
2237
  return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {
@@ -2223,6 +2243,7 @@ class Marked {
2223
2243
  };
2224
2244
  }
2225
2245
  else {
2246
+ // @ts-expect-error cannot type hook function dynamically
2226
2247
  hooks[hooksProp] = (...args) => {
2227
2248
  let ret = hooksFunc.apply(hooks, args);
2228
2249
  if (ret === false) {
@@ -2287,6 +2308,7 @@ class Marked {
2287
2308
  if (opt.async) {
2288
2309
  return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)
2289
2310
  .then(src => lexer(src, opt))
2311
+ .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)
2290
2312
  .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)
2291
2313
  .then(tokens => parser(tokens, opt))
2292
2314
  .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)
@@ -2296,7 +2318,10 @@ class Marked {
2296
2318
  if (opt.hooks) {
2297
2319
  src = opt.hooks.preprocess(src);
2298
2320
  }
2299
- const tokens = lexer(src, opt);
2321
+ let tokens = lexer(src, opt);
2322
+ if (opt.hooks) {
2323
+ tokens = opt.hooks.processAllTokens(tokens);
2324
+ }
2300
2325
  if (opt.walkTokens) {
2301
2326
  this.walkTokens(tokens, opt.walkTokens);
2302
2327
  }