jonschlinkert/gray-matter

Expose `YAMLException` from `js-yaml`

andreww2012 opened this issue · 0 comments

I find YAMLExceptions too big when the parsed front matter is big because they include the whole source text. I decided to reformat an error a bit, for that I had to catch the parsing error using the obvious approach:

import parseMdWithFrontMatter from 'gray-matter';
import {YAMLException} from 'js-yaml';

try {
  const parsedContents = parseMdWithFrontMatter(contents);
  // ...
} catch (error) {
  if (error instanceof YAMLException) {
    // Format the error ...
  }
  throw error;
}

However, I was surprised when the error wasn't caught. It turned out I have my own js-yaml of a different major version (4.1.0), so technically imported YAMLException was a different class.

I think for cases like this, importing (at least) YAMLException from underlying gray-matter would be beneficial. Although, feel free to correct me if I'm doing something wrong. And thank you for the lib! :)

P.S. My workaround:
import grayMatter from 'gray-matter';
import {YAMLException} from 'js-yaml';

export const parseMdWithFrontMatter = (...args: Parameters<typeof grayMatter>) => {
  try {
    return grayMatter(...args);
  } catch (error) {
    if (error && typeof error === 'object' && error.constructor?.name === 'YAMLException') {
      Object.setPrototypeOf(error, YAMLException.prototype);
    }
    throw error;
  }
};