Проверка YAML с использованием схемы JSON

#javascript #validation #yaml #jsonschema #ajv

#javascript #проверка #yaml #jsonschema #ajv

Вопрос:

У меня есть служба CI, которая проверяет файлы YAML с использованием схемы JSON. Решение работает путем первого преобразования YAML в JSON с использованием js-yaml , а затем путем проверки схемы с использованием ajv

пример кода:

 import { load } from 'js-yaml';
import { default as Ajv } from 'ajv';
import schema from '../../schema.json';

const ajv = new Ajv({
    strict: false
});

export const validate = (file: { content: string }) => {
    const parsed = load(file.content) as unknown;
    const valid = ajv.validate(schema, parsed);

    if (!valid) throw new Error(ajv.errorsText());
}
 

Я хотел бы расширить это решение, чтобы сообщить об ошибке со строкой и столбцом.
Знаете ли вы, есть ли уже решение для этого? На этот раз мой GoogleFu подвел меня. Самое близкое, что я получил, это плагин vscode XML плагин vscode YAML, который, похоже, тесно связан с VS code: (

Комментарии:

1. Средства проверки схемы JSON обычно работают с данными, которые уже были проанализированы в коде, поэтому информация о номере строки отсутствует. Единственное исключение, о котором я знаю, это npmjs.com/package/jsonschemaparse , который проверяется при анализе JSON. Однако это анализирует только JSON, а не YAML.

2. Было бы весьма полезно взять файл .json и указатель json (то есть строку в форме /foo/0/bar/1/baz ) и вернуть смещения строк и столбцов, где это местоположение можно найти в файле, но я не знаю ни одного такого инструмента / библиотеки ни на одном языке.

3. @JasonDesrosiers Я хорошо осведомлен об этом процессе, поэтому я надеялся на какую-нибудь библиотеку, которая могла бы предоставить JSON, проанализированному из YAML, некоторую информацию, которая позволила бы выполнить обратный поиск. Для начала четный номер строки будет лучше, чем ничего

4. @MarianBazalik Извините, если мой комментарий прозвучал снисходительно. Я просто подумал о другой библиотеке, которая предоставляет номера строк, но она также поддерживает только JSON, npmjs.com/package/better-ajv-errors . Возможно, вы сможете посмотреть, как они получают номера строк из указателей JSON, и адаптировать их для YAML.

5. @JasonDesrosiers 🙂 никаких обид. Я обязательно посмотрю на better-ajv-erros. В то время я изучал github.com/redhat-developer/yaml-language-server/blob/master / … который используется плагином vcsode, и я изо всех сил пытаюсь понять, как работает сопоставление между позицией ошибки json и позицией ошибки yaml: (