Хранить свои данные

Где инструмент держит таблицы, которые не нужны другим, — контрольные точки синхронизации и кэши, — и как они ссылаются на общие записи.

Вашему инструменту нужны таблицы, которыми пользуется только он: контрольная точка синхронизации, кэш, служебные данные провайдера. Эта страница показывает, где они живут и как ссылаются на общее хранилище, чтобы cli-core мог менять свою схему, не ломая ваш инструмент, и чтобы другие инструменты не начали зависеть от ваших внутренних таблиц.

Правило

  • Таблица, нужная только вашему инструменту, живёт в собственном файле SQLite вашего инструмента рядом с общим хранилищем.
  • Ваш инструмент сам выполняет миграции этого файла.
  • Ваши таблицы ссылаются на общие записи только по id, например по id аккаунта или документа.
  • Другие инструменты не открывают ваш файл, а ваш инструмент не открывает чужие.

Это правило WC-DATA-1. Если те же записи нужны второму инструменту, это общая сущность, и ей место в cli-core.

Шаги

  1. Найдите папку общего хранилища через storePath из @wirecat/cli-core/store. Она учитывает MESSAGING_STORE, поэтому тесты, которые переносят общее хранилище, переносят и ваш файл.
  2. Откройте свой файл в этой папке через openCache из того же модуля. Он выбирает SQLite среды выполнения (Node или Bun) и ставит те же настройки, что у общего хранилища.
  3. Создавайте и меняйте свои таблицы миграциями, которые идут только вперёд: добавлять, никогда не править и не пересоздавать (WC-STORE-7).

Пример

Инструмент acme-cli хранит одну контрольную точку синхронизации на аккаунт:

import { dirname, join } from "node:path"
import { openCache, storePath } from "@wirecat/cli-core/store"

const own = await openCache(join(dirname(storePath()), "acme-cli.db"))
own.exec(`CREATE TABLE IF NOT EXISTS sync_checkpoints (
  account_id INTEGER PRIMARY KEY,
  cursor TEXT NOT NULL,
  updated_at INTEGER NOT NULL
)`)

account_id — id строки аккаунта в общем хранилище. Контрольная точка не копирует имя или провайдера аккаунта; она читает их из cli-core, когда они нужны.

Скоро

Помощник в cli-core, который открывает собственный файл инструмента и выполняет его миграции, стоит в списке «позже». Пока его нет, используйте openCache, как выше.

Что сломается, если это пропустить

Своя таблица внутри общего хранилища ломается при миграции cli-core, и её начинают читать другие инструменты. Копия общего поля в вашей таблице устаревает, когда владелец меняет оригинал. Чужой инструмент, открывший ваш файл, ломается при вашем следующем изменении.

Дальше: Вход в сервис.