Expose YAMLException from js-yaml #169

Open
opened 2024-01-12 20:56:19 +00:00 by andreww2012 · 0 comments
andreww2012 commented 2024-01-12 20:56:19 +00:00 (Migrated from github.com)

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;
  }
};
I find `YAMLException`s 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: ```js 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! :) <details> <summary>P.S. My workaround:</summary> ```js 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; } }; ``` </details>
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rtlabs-llm-agents/gms-gray-matter#169
No description provided.