> ## Documentation Index
> Fetch the complete documentation index at: https://cs-lua.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# store — Ключ-значение

> Key-value поверх SQLite в каталоге плагина

# Ключ-значение

Key-value поверх SQLite в каталоге плагина.

<h2 id="open">
  store.open
</h2>

Открывает хранилище.

```lua theme={null}
store.open(name)
```

### Аргументы

| # | имя    | тип    |               |
| - | ------ | ------ | ------------- |
| 1 | `name` | string | имя хранилища |

### Возвращает

| тип     |                  |
| ------- | ---------------- |
| `store` | объект хранилища |

Ключ — строка, значение — таблица, число, строка или `boolean`. Повторный вызов
с тем же именем в том же плагине возвращает тот же объект: два объекта над одним
файлом означали бы две очереди записи, и вторая затирала бы первую.

Файл ложится в [`plugin.data_dir()`](../plugin/index.md#data_dir).

<h2 id="get">
  s:get
</h2>

Читает значение по ключу.

```lua theme={null}
s:get(key)
```

### Аргументы

| # | имя   | тип    |      |
| - | ----- | ------ | ---- |
| 1 | `key` | string | ключ |

### Возвращает

| тип          |                    |
| ------------ | ------------------ |
| `any \| nil` | значение или `nil` |

Видит то, что положено через `set`, ещё до записи на диск.

<h2 id="set">
  s:set
</h2>

Кладёт значение в очередь записи.

```lua theme={null}
s:set(key, value)
```

### Аргументы

| # | имя     | тип    |                                    |
| - | ------- | ------ | ---------------------------------- |
| 1 | `key`   | string | ключ                               |
| 2 | `value` | any    | таблица, число, строка или boolean |

### Возвращает

| тип     |                         |
| ------- | ----------------------- |
| `store` | сам объект, для цепочки |

<h2 id="delete">
  s:delete
</h2>

Удаляет ключ.

```lua theme={null}
s:delete(key)
```

### Аргументы

| # | имя   | тип    |      |
| - | ----- | ------ | ---- |
| 1 | `key` | string | ключ |

### Возвращает

| тип     |            |
| ------- | ---------- |
| `store` | сам объект |

<h2 id="keys">
  s:keys
</h2>

Все ключи хранилища.

```lua theme={null}
s:keys()
```

### Возвращает

| тип     |                              |
| ------- | ---------------------------- |
| `table` | отсортированный массив строк |

Учитывает то, что ещё лежит в очереди записи.

<h2 id="all">
  s:all
</h2>

Всё содержимое хранилища.

```lua theme={null}
s:all()
```

### Возвращает

| тип     |                     |
| ------- | ------------------- |
| `table` | `{ [key] = value }` |

<Warning>
  Читает всё в память — это для отчёта или миграции, не для кода
  на таймере.
</Warning>

<h2 id="flush">
  s:flush
</h2>

Записывает очередь на диск одной транзакцией.

```lua theme={null}
s:flush()
```

### Возвращает

| тип       |                    |
| --------- | ------------------ |
| `boolean` | `true` при успехе  |
| `string`  | причина при ошибке |

Вызывается сам на `map_change` и при выгрузке плагина. Явно нужен, только если
данные должны лечь на диск прямо сейчас.

Записи откладываются намеренно: вставка вне транзакции — отдельный коммит с
синхронизацией на диск, и делать так на каждый фраг нельзя.

<h2 id="pending">
  s:pending
</h2>

Сколько записей ждёт в очереди.

```lua theme={null}
s:pending()
```

### Возвращает

| тип      |            |
| -------- | ---------- |
| `number` | количество |
