Ускорить схему ответа с помощью $merge-keyword throws FST_ERR_SCH_BUILD

При добавлении схемы ответа к ресурсу fastify, использующему ключевое слово $merge, возникает ошибка

FST_ERR_SCH_BUILD: Failed building the schema for GET: /, due error undefined unsupported

бросается.

Схема выглядит следующим образом, но на примерах из ajv или fastify вылетает та же ошибка.

response: {
        200: {
            $merge: {
                source: {
                    type: 'object',
                    properties: {
                        foo: { type: 'string' }
                    }
                },
                with: {
                    type: 'object',
                    properties: {
                        bar: { type: 'string' }
                    }
                }
            }
        }
    }

обходной путь описан в собственном ответе


person tuberains    schedule 18.02.2020    source источник


Ответы (2)


Я нашел обходной путь для этого: кажется, что в отличие от использования $merge в любой другой схеме, либо fastify, либо ajv требуют, чтобы ключевое слово type присутствовало на уровне $merge.

Это может быть ошибкой, поскольку ее можно вывести из объединенных объектов, и методология работает при использовании $merge для других схем.

person tuberains    schedule 18.02.2020

Сериализатор не реализует настройку схемы ajv (так как это $merge). По умолчанию используется fast-json-stringify.

Вам следует использовать стандартную схему JSON и ее комбинированные ключевые слова.

В fastify v2 сериализатор, использующий схемы, не настраивается, поэтому вам следует написать собственный сериализатор и настроить его с помощью setReplySerializer.

person Manuel Spigolon    schedule 18.02.2020