Skip to content

foxzi/pushkinlib

Repository files navigation

Pushkinlib

Web-сСрвис для просмотра локальной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠ½ΠΈΠ³ ΠΏΠΎ INPX-индСксу с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ OPDS.

ВозмоТности

  • πŸ“š ΠŸΠ°Ρ€ΡΠΈΠ½Π³ INPX - ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° индСксных Ρ„Π°ΠΉΠ»ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ
  • πŸ” ΠŸΠΎΠ»Π½ΠΎΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²Ρ‹ΠΉ поиск - SQLite FTS5 ΠΏΠΎ названию, сСрии, Π°Π²Ρ‚ΠΎΡ€Π°ΠΌ ΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ
  • 🌐 Web интСрфСйс - соврСмСнный SPA Π½Π° Vue.js
  • πŸ“± Адаптивный Π΄ΠΈΠ·Π°ΠΉΠ½ - Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройствах
  • πŸ“– OPDS ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ - ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Ρ‡ΠΈΡ‚Π°Π»ΠΊΠ°ΠΌΠΈ
  • πŸ—‚οΈ Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ - ΠΏΠΎ ΠΆΠ°Π½Ρ€Π°ΠΌ, сСриям, Π°Π²Ρ‚ΠΎΡ€Π°ΠΌ, Π³ΠΎΠ΄Π°ΠΌ
  • ⚑ Быстрая Ρ€Π°Π±ΠΎΡ‚Π° - SQLite Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… с индСксами

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

Запуск Ρ‡Π΅Ρ€Π΅Π· Docker Compose (рСкомСндуСтся)

# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ для ΠΊΠ½ΠΈΠ³
mkdir -p books

# ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Ρ‚ΡƒΠ΄Π° ваши ΠΊΠ½ΠΈΠ³ΠΈ ΠΈ INPX Ρ„Π°ΠΉΠ» (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, books/index.inpx)

# ЗапуститС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
docker compose up -d

БСрвис Π±ΡƒΠ΄Π΅Ρ‚ доступСн ΠΏΠΎ адрСсу http://localhost:9090:

Основная конфигурация Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния Π² docker-compose.yaml:

environment:
  - PORT=9090
  - BOOKS_DIR=/data/books
  - INPX_PATH=/data/books/index.inpx
  - CATALOG_TITLE=Pushkinlib Library
  - PUBLIC_BASE_URL=http://localhost:9090

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ docker-compose.dev.yaml, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ собираСт ΠΎΠ±Ρ€Π°Π· локально:

docker compose -f docker-compose.dev.yaml up -d

Запуск ΠΈΠ· исходников

1. Π‘Π±ΠΎΡ€ΠΊΠ°

CGO_ENABLED=1 go build -tags sqlite_fts5 -o pushkinlib ./cmd/pushkinlib

Поиск ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ SQLite FTS5, поэтому сборка Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ с Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹ΠΌ CGO ΠΈ Ρ‚Π΅Π³ΠΎΠΌ sqlite_fts5.

2. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ настройтС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ:

cp .env.example .env

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² .env:

PORT=9090
BOOKS_DIR=/path/to/books
INPX_PATH=/path/to/catalog.inpx
CATALOG_TITLE=Моя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°
PUBLIC_BASE_URL=http://localhost:9090
GENRES_CSV_PATH=./web/static/genres.csv

3. Запуск

./pushkinlib

Для отобраТСния друТСствСнных Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΠΆΠ°Π½Ρ€ΠΎΠ² Π² OPDS ΠΈ Π²Π΅Π±-интСрфСйсС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ CSV-Ρ„Π°ΠΉΠ» GENRES_CSV_PATH (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ./web/static/genres.csv). ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π³ΠΎ, Ссли Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ ΠΆΠ°Π½Ρ€ΠΎΠ².

ГСнСрация ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈΠ· ΠΊΠ½ΠΈΠ³

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΠ°ΠΏΠΊΠ° с ΠΊΠ½ΠΈΠ³Π°ΠΌΠΈ, Π½ΠΎ Π½Π΅Ρ‚ INPX Ρ„Π°ΠΉΠ»Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°:

1. Π‘Π±ΠΎΡ€ΠΊΠ° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°

CGO_ENABLED=1 go build -tags sqlite_fts5 -o catalog-generator ./cmd/catalog-generator

2. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊΠ½ΠΈΠ³

ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΏΠ°ΠΏΠΊΡƒ ./sample-data/books/:

sample-data/books/
β”œβ”€β”€ book1.fb2
β”œβ”€β”€ book2.zip
β”œβ”€β”€ book3.epub
└── subfolder/
    └── book4.fb2

3. ГСнСрация ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

./catalog-generator -books=./sample-data/books -name=my_catalog

ΠžΠΏΡ†ΠΈΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°:

  • -books - ΠΏΠ°ΠΏΠΊΠ° с ΠΊΠ½ΠΈΠ³Π°ΠΌΠΈ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: ./sample-data/books)
  • -output - ΠΏΠ°ΠΏΠΊΠ° для Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: ./sample-data)
  • -name - имя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: generated_catalog)
  • -prefix - прСфикс для Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: books)
  • -max-books - максимум ΠΊΠ½ΠΈΠ³ Π² Π°Ρ€Ρ…ΠΈΠ²Π΅ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: 1000)
  • -formats - Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: .fb2,.zip,.epub)

4. ИспользованиС сгСнСрированного ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

ПослС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ .env:

INPX_PATH=./sample-data/my_catalog.inpx
BOOKS_DIR=./sample-data

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹

Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…

  • FB2 - полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…
  • FB2.ZIP - FB2 Ρ„Π°ΠΉΠ»Ρ‹ Π² ZIP Π°Ρ€Ρ…ΠΈΠ²Π°Ρ…
  • EPUB - базовая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° (Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π°Π²Ρ‚ΠΎΡ€)

Π€Π°ΠΉΠ»Ρ‹ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

  • INPX - стандартный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ индСксов
  • INP - ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ индСксов

API

ΠŸΠ΅Ρ€Π΅ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

Административная пСрСиндСксация ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ SQLite-Π±Π°Π·Ρƒ ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ½ΠΈΠ³ΠΈ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ INPX. Π—Π° это ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ POST-эндпоинт (рСкомСндуСтся Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Basic Auth / reverse proxy):

POST /admin/reindex

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса Π±Π΅Π· Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ:

curl -X POST http://localhost:9090/admin/reindex

Если Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Basic Auth, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ:

curl -u user:pass -X POST http://localhost:9090/admin/reindex

Π’ ΠΎΡ‚Π²Π΅Ρ‚Π΅ возвращаСтся статистика: количСство ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ½ΠΈΠ³, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ врСмя выполнСния Π² миллисСкундах. Π’ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ доступСн ΠΏΠΎΠ΄ прСфиксом API (POST /api/v1/admin/reindex) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сСрвисом ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС, Ссли Π±Π°Π·Π° пуста.

Поиск книг

GET /api/v1/books?q=запрос&limit=30&offset=0

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

  • q - поисковый запрос
  • limit - количСство Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: 30)
  • offset - смСщСниС для ΠΏΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΠΈ
  • authors[] - Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ Π°Π²Ρ‚ΠΎΡ€Π°ΠΌ
  • series[] - Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ сСриям
  • genres[] - Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ ΠΆΠ°Π½Ρ€Π°ΠΌ
  • year_from, year_to - Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ Π³ΠΎΠ΄Π°ΠΌ
  • sort_by - сортировка (title, year, date_added, relevance)
  • sort_order - порядок (asc, desc)

Π€Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ друТСствСнныС названия ΠΆΠ°Π½Ρ€ΠΎΠ², подгруТая ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄ β†’ имя ΠΈΠ· web/static/genres.csv. ΠŸΡ€ΠΈ нСобходимости Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΈΠ»ΠΈ скоррСктируйтС ΠΏΠ°Ρ€Ρ‹ Π² этом Ρ„Π°ΠΉΠ»Π΅, измСнСния ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π±Π΅Π· пСрСсборки.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ

GET /api/v1/books/{id}

OPDS

OPDS ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ доступСн ΠΏΠΎ адрСсу /opds ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚:

  • ΠΠ°Π²ΠΈΠ³Π°Ρ†ΠΈΡŽ - ΠΏΠΎ Π°Π²Ρ‚ΠΎΡ€Π°ΠΌ, сСриям, ΠΆΠ°Π½Ρ€Π°ΠΌ
  • Поиск - совмСстим с OpenSearch
  • ΠŸΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΡŽ - для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²
  • Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ - прямыС ссылки Π½Π° Ρ„Π°ΠΉΠ»Ρ‹

Настройка Ρ‡ΠΈΡ‚Π°Π»ΠΎΠΊ

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Π²Π°ΡˆΡƒ Ρ‡ΠΈΡ‚Π°Π»ΠΊΡƒ OPDS ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³:

http://your-server:9090/opds

ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‡ΠΈΡ‚Π°Π»ΠΊΠΈ:

  • FBReader
  • KyBook
  • Bookari
  • Moon+ Reader

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

pushkinlib/
β”œβ”€β”€ cmd/
β”‚   β”œβ”€β”€ pushkinlib/          # ОсновноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
β”‚   └── catalog-generator/   # Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²
β”œβ”€β”€ internal/
β”‚   β”œβ”€β”€ api/                 # HTTP API handlers
β”‚   β”œβ”€β”€ auth/                # АутСнтификация
β”‚   β”œβ”€β”€ catalog/             # ГСнСрация ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²
β”‚   β”œβ”€β”€ config/              # ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ
β”‚   β”œβ”€β”€ covers/              # ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΠ±Π»ΠΎΠΆΠ΅ΠΊ
β”‚   β”œβ”€β”€ inpx/                # ΠŸΠ°Ρ€ΡΠΈΠ½Π³ INPX
β”‚   β”œβ”€β”€ metadata/            # Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…
β”‚   β”œβ”€β”€ opds/                # OPDS ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³
β”‚   β”œβ”€β”€ search/              # Поиск ΠΈ индСксация
β”‚   └── storage/             # Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…
β”œβ”€β”€ web/static/              # Frontend (Vue.js SPA)
β”‚   └── vendor/              # Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ JS зависимости
β”œβ”€β”€ scripts/                 # Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ скрипты
└── sample-data/             # ВСстовыС Π΄Π°Π½Π½Ρ‹Π΅

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями

Web-интСрфСйс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ JavaScript Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (Vue.js, Axios) для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Π΅Π· Π²Π½Π΅ΡˆΠ½ΠΈΡ… CDN. Для обновлСния зависимостСй:

./scripts/download-deps.sh

Π‘ΠΊΡ€ΠΈΠΏΡ‚ автоматичСски скачиваСт Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠ· unpkg.com Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ web/static/vendor/.

ВСстированиС

# Запуск тСстов
go test ./...

# ВСст парсСра INPX
go test ./internal/inpx -v

# ГСнСрация тСстового ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°
./catalog-generator -books=./sample-data/books

ЛицСнзия

MIT License

Π’ΠΊΠ»Π°Π΄ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

  1. Fork ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°
  2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ feature branch (git checkout -b feature/amazing-feature)
  3. Commit измСнСния (git commit -m 'Add amazing feature')
  4. Push Π² branch (git push origin feature/amazing-feature)
  5. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Pull Request

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°

Если Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ вопросы ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, создайтС issue Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ GitHub.

About

Local inpx lib pushkinlib

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages