Хранить свои данные
Где инструмент держит таблицы, которые не нужны другим, — контрольные точки синхронизации и кэши, — и как они ссылаются на общие записи.
Вашему инструменту нужны таблицы, которыми пользуется только он: контрольная точка синхронизации, кэш, служебные данные провайдера. Эта страница показывает, где они живут и как ссылаются на общее хранилище, чтобы cli-core мог менять свою схему, не ломая ваш инструмент, и чтобы другие инструменты не начали зависеть от ваших внутренних таблиц.
Правило
- Таблица, нужная только вашему инструменту, живёт в собственном файле SQLite вашего инструмента рядом с общим хранилищем.
- Ваш инструмент сам выполняет миграции этого файла.
- Ваши таблицы ссылаются на общие записи только по id, например по id аккаунта или документа.
- Другие инструменты не открывают ваш файл, а ваш инструмент не открывает чужие.
Это правило WC-DATA-1. Если те же записи нужны второму инструменту, это общая сущность, и ей место в cli-core.
Шаги
- Найдите папку общего хранилища через
storePathиз@wirecat/cli-core/store. Она учитываетMESSAGING_STORE, поэтому тесты, которые переносят общее хранилище, переносят и ваш файл. - Откройте свой файл в этой папке через
openCacheиз того же модуля. Он выбирает SQLite среды выполнения (Node или Bun) и ставит те же настройки, что у общего хранилища. - Создавайте и меняйте свои таблицы миграциями, которые идут только вперёд: добавлять, никогда не править и не пересоздавать (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, и её начинают читать другие инструменты. Копия общего поля в вашей таблице устаревает, когда владелец меняет оригинал. Чужой инструмент, открывший ваш файл, ломается при вашем следующем изменении.
Дальше: Вход в сервис.