Парсинг, валидация и проекция данных для @e22m4u/js-trie-router

e22m4u 6752c9128c docs: updates README.md 2 weeks ago
.husky c5bb05693b chore: initial commit 2 weeks ago
dist 6752c9128c docs: updates README.md 2 weeks ago
examples 0161308974 fix: response projection example 2 weeks ago
src 6752c9128c docs: updates README.md 2 weeks ago
.c8rc c5bb05693b chore: initial commit 2 weeks ago
.commitlintrc c5bb05693b chore: initial commit 2 weeks ago
.editorconfig c5bb05693b chore: initial commit 2 weeks ago
.gitignore c5bb05693b chore: initial commit 2 weeks ago
.mocharc.json c5bb05693b chore: initial commit 2 weeks ago
.prettierrc c5bb05693b chore: initial commit 2 weeks ago
LICENSE c5bb05693b chore: initial commit 2 weeks ago
README.md 6752c9128c docs: updates README.md 2 weeks ago
build-cjs.js c5bb05693b chore: initial commit 2 weeks ago
eslint.config.js c5bb05693b chore: initial commit 2 weeks ago
package.json c5bb05693b chore: initial commit 2 weeks ago
tsconfig.json c5bb05693b chore: initial commit 2 weeks ago

README.md

@e22m4u/js-trie-router-data-mapper

Парсинг и валидация данных для @e22m4u/js-trie-router.

Установка

npm install @e22m4u/js-trie-router-data-mapper

Модуль поддерживает ESM и CommonJS стандарты.

ESM

import {TrieRouterDataMapper} from '@e22m4u/js-trie-router-data-mapper';

CommonJS

const {TrieRouterDataMapper} = require('@e22m4u/js-trie-router-data-mapper');

Использование

Подключение модуля к маршрутизатору.

import {TrieRouter} from '@e22m4u/js-trie-router';
import {TrieRouterDataMapper} from '@e22m4u/js-trie-router-data-mapper';

const router = new TrieRouter();
router.useService(TrieRouterDataMapper);

Пример парсинга Query-параметра.

router.defineRoute({
  method: HttpMethod.GET,
  path: '/parseQuery',
  meta: {
    dataMap: { // определение карты данных
      filter: { // свойство "filter" будет добавлено в "state"
        source: HttpData.REQUEST_QUERY, // откуда брать данные
        property: 'filter',       // извлечь свойство (опционально)
        schema: {                 // схема данных для парсинга и проверки
          type: DataType.OBJECT,  // разобрать значение как объект
          required: true,         // в противном случае выбросить ошибку
        },
        // подробнее о схеме данных (параметр "schema")
        // см. модуль @e22m4u/js-data-schema
      },
    },
  },
  handler: ({state: {filter}}) => {
    // для запроса GET /parseQuery?filter={"foo":"bar"}
    // значение параметра "filter" будет следующим:
    console.log(typeof filter); // "object"
    console.log(filter);        // {foo: 'bar'}
    // если значение разобрать не удалось,
    // то будет выброшена ошибка 
    return filter;
  },
});

Список источников данных.

export const HttpData = {
  REQUEST_PARAMS: 'requestParams',
  REQUEST_QUERY: 'requestQuery',
  REQUEST_HEADERS: 'requestHeaders',
  REQUEST_COOKIES: 'requestCookies',
  REQUEST_BODY: 'requestBody',
  RESPONSE_BODY: 'responseBody',
};

Описание параметров dataMap (метаданные маршрута).

  • source: HttpData источник данных;
  • property?: string извлечение указанного свойства;
  • schema?: DataSchema схема данных для парсинга и проверки;
  • projection?: DataProjection схема проекции данных;

Пример проекции ответа.

router.defineRoute({
  method: HttpMethod.GET,
  path: '/responseProjection',
  meta: {
    dataMap: { // определение карты данных
      response: {
        // свойство "response" не будет добавлено в "state",
        // так как в данном случае источником выступает
        // ответ маршрута
        source: HttpData.RESPONSE_BODY, // источник данных
        projection: {foo: true, bar: false}, // схема проекции
        // подробнее о схеме проекции (параметр "projection")
        // см. модуль @e22m4u/js-data-projector
      },
    },
  },
  handler: () => {
    return {
      foo: 10, // доступно, явное правило
      bar: 20, // исключено, явное правило
      baz: 30, // исключено, отсутствует в схеме проекции
    };
  },
});
// для запроса GET /responseProjection
// ответ будет {"foo":10}

Структура схемы данных и схемы проекции.

Тесты

npm run test

Лицензия

MIT