Skip to content

Установка

Требования

У базового пакета нет обязательных peer-зависимостей — только axios (обычная зависимость). Vue и React — опциональные peer-зависимости, нужны только если вы импортируете из соответствующей точки входа (rest-pipeline-js/vue / rest-pipeline-js/react):

ОкружениеМинимальная версия
Node.js18+
Vue3.3+ (опционально, для /vue)
React18+ (опционально, для /react)
react-dom18+ (опционально, для /react)

Установка

bash
npm install rest-pipeline-js

Peer-зависимости для интеграций с фреймворками:

bash
# Vue
npm install vue@>=3.3

# React
npm install react@>=18 react-dom@>=18

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

Без бандлера, без Node — один тег <script> подключает базовый модуль (PipelineOrchestrator / createRestClient / всё из базовой точки входа, без Vue/React) со встроенным axios, так что больше ничего подгружать не нужно. Собран как самодостаточный IIFE, который экспонирует глобальную переменную window.RestPipeline — обычный тег <script>, без поддержки загрузчиков CommonJS/AMD:

html
<script src="https://unpkg.com/rest-pipeline-js/dist/umd/rest-pipeline.umd.min.js"></script>
<script>
  const { createRestClient, PipelineOrchestrator } = RestPipeline

  const client = createRestClient({ baseURL: 'https://api.example.com' })

  const pipeline = new PipelineOrchestrator({
    config: {
      stages: [{ key: 'user', request: () => client.get('/me') }],
    },
  })

  pipeline.run().then((result) => console.log(result))
</script>

Для продакшена фиксируйте версию (rest-pipeline-js@2.1.0/dist/umd/...) — незафиксированный URL выше всегда указывает на последний релиз. jsDelivr работает так же: https://cdn.jsdelivr.net/npm/rest-pipeline-js/dist/umd/rest-pipeline.umd.min.js.

Также опубликована неминифицированная сборка с source map (rest-pipeline.umd.js) — для отладки.

Быстрый старт

js
import { createRestClient, PipelineOrchestrator } from 'rest-pipeline-js'

// 1. Создаём REST-клиент
const client = createRestClient({
  baseURL: 'https://api.example.com',
  retry: { attempts: 2, delayMs: 500, backoffMultiplier: 2 },
  cache: { enabled: true, ttlMs: 60000 },
  auth: {
    getToken: async () => localStorage.getItem('token') ?? '',
    onUnauthorized: async () => {
      /* обновление токена */
    },
  },
})

const res = await client.get('/users/1')

// 2. Запускаем пайплайн
const orchestrator = new PipelineOrchestrator({
  config: {
    stages: [
      {
        key: 'fetchUser',
        request: async ({ sharedData }) => client.get(`/users/${sharedData.userId}`),
      },
      {
        key: 'processData',
        request: async ({ prev }) => ({ ...prev.data, processed: true }),
      },
    ],
  },
  sharedData: { userId: 42 },
})

const result = await orchestrator.run()
console.log(result.success, result.stageResults)