#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: (