letopis 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +77 -0
- package/README.md +799 -0
- package/dist/chain.d.ts +126 -0
- package/dist/chain.js +278 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +43 -0
- package/dist/ops.d.ts +42 -0
- package/dist/ops.js +43 -0
- package/dist/schema.d.ts +15 -0
- package/dist/schema.js +133 -0
- package/dist/sql.d.ts +92 -0
- package/dist/sql.js +480 -0
- package/dist/tables.d.ts +81 -0
- package/dist/tables.js +148 -0
- package/dist/tx.d.ts +13 -0
- package/dist/tx.js +31 -0
- package/dist/types.d.ts +166 -0
- package/dist/types.js +5 -0
- package/dist/write.d.ts +60 -0
- package/dist/write.js +302 -0
- package/package.json +46 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Формат: [Keep a Changelog](https://keepachangelog.com/), версии — semver.
|
|
4
|
+
|
|
5
|
+
## [0.5.0] — 2026-07-10
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
- **Пакет переименован: `entity-chain` → `letopis`** (летопись — append-only хроника; история
|
|
9
|
+
священна). Первая публикация в npm. Префикс сообщений об ошибках теперь `letopis:`.
|
|
10
|
+
API не менялся.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- Лицензия MIT, keywords, `ARTICLE.md` — статья о проекте.
|
|
14
|
+
|
|
15
|
+
## [0.4.1] — 2026-07-10
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- **Hypertable — только временная размерность** `updated` (чанки 30 дней): hash-размерности
|
|
19
|
+
partition/class/id убраны. Бенчмарк на 1.1M строк (год истории): точечный доступ равен
|
|
20
|
+
PK-btree, простые фильтры теряют 10–20%, зато LATERAL-цепочки быстрее в ×2…×140
|
|
21
|
+
(3-хоповый count: 1 с против 150 с) и 14 чанков/год вместо 93. Существующие БД:
|
|
22
|
+
пересоздание таблицы (размерность из hypertable не удаляется).
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
- `bench/dimensions.bench.mjs` — сравнение вариантов партиционирования на одинаковых данных
|
|
26
|
+
(>1.1M строк, реплика сквозных операций API, p50/p95 + чанки + planning time);
|
|
27
|
+
результаты — `bench/dimensions.results.json`.
|
|
28
|
+
|
|
29
|
+
## [0.4.0] — 2026-07-10
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
- `db/policies.mjs` — политики хранения Timescale: сжатие чанков старше N (`segmentby` по сущности,
|
|
33
|
+
история не теряется) + опциональный retention (осознанный drop). Чтение сжатых чанков покрыто тестом.
|
|
34
|
+
- `scripts/schema-sync.mjs` — diff JSON-файла классов и таблицы Schema + отчёт совместимости:
|
|
35
|
+
живые строки прогоняются новой строгой валидацией ДО применения; `--apply` применяет
|
|
36
|
+
(lineage пересчитывает триггер).
|
|
37
|
+
- `connect({ onQuery, slowMs })` — наблюдаемость: событие `{mode, classes, ms, rows, slow}`
|
|
38
|
+
на каждый запрос цепочки; `slowMs` без хука — `console.warn`.
|
|
39
|
+
- `test/api-full.test.ts` — сквозной тест ВСЕХ публичных методов API (15 групп; суммарно 86 тестов).
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
- `db/apply.mjs` заменял строку `"booking"` внутри jsonb-сидов (enum `busy.kind` получал имя
|
|
43
|
+
целевой схемы) — теперь заменяются только идентификаторы схемы. Баг найден schema-sync-ом.
|
|
44
|
+
|
|
45
|
+
## [0.3.0] — 2026-07-10
|
|
46
|
+
|
|
47
|
+
### Added
|
|
48
|
+
- `.asOf(t)` — чтение «как было на момент», `.versions()` — полная история сущности.
|
|
49
|
+
- `.after(cursor)` + `cursorOf()` — keyset-пагинация (стабильная на объёме).
|
|
50
|
+
- `scripts/gen-types.mjs` — TS-типы классов и `TypedDb` из таблицы Schema.
|
|
51
|
+
- `connect({enforceAccount})` — жёсткая изоляция арендатора (чтение и запись).
|
|
52
|
+
- `.anonymize(fields)` — GDPR-затирание string-полей + тег `anonymized` (история сохраняется).
|
|
53
|
+
- Операторы `or(...)`/`not(...)`; агрегации `.sum/.avg/.min/.max/.countBy` (считает БД).
|
|
54
|
+
- `.deep(max)` — рекурсивный обход детей (self-hop) одним запросом, `$depth` в Row.
|
|
55
|
+
- `db.watch()` — realtime-события версий (триггер `entity_notify` → LISTEN/NOTIFY).
|
|
56
|
+
|
|
57
|
+
### Fixed
|
|
58
|
+
- timestamptz возвращается строкой: JS Date терял микросекунды (ломал asOf/cursorOf по updated).
|
|
59
|
+
- Канал `entity_notify` — литерал схемы (на чанках hypertable `TG_TABLE_SCHEMA` — служебный).
|
|
60
|
+
|
|
61
|
+
## [0.2.0] — 2026-07-10
|
|
62
|
+
|
|
63
|
+
### Added
|
|
64
|
+
- `db/apply.mjs` — применение движка в любую PG-схему одной командой (замена sed-подхода).
|
|
65
|
+
- CI (GitHub Actions): typecheck + 59 тестов против живого timescaledb + сборка npm-пакета артефактом.
|
|
66
|
+
- `test/real-life.test.ts` — 16 сцен «дня салона»: 4 руки, гонки, переносы, отмены, no-show, walk-in, отчёты.
|
|
67
|
+
- `RESEARCH.md` — обзор 30+ аналогов и gap-анализ.
|
|
68
|
+
|
|
69
|
+
### Fixed
|
|
70
|
+
- `Класс()` без аргумента = INSERT, `Класс({})` = UPDATE всех в контексте (раньше оба означали INSERT — массовые обновления связей молча создавали строки-сироты).
|
|
71
|
+
- Связи, довешенные после `set()`, больше не участвуют в фильтре поиска целей (только значения записи).
|
|
72
|
+
|
|
73
|
+
## [0.1.0] — 2026-07-09
|
|
74
|
+
|
|
75
|
+
Первый срез: append-only движок (Entity/Schema + триггеры CRUD/lineage, FK), dot-цепочки
|
|
76
|
+
(чтение путями, set-билдер с контекст-связями, deep-merge, строгая валидация), транзакции
|
|
77
|
+
с advisory-locks, именованные батчи, auth-таблицы, 43 теста.
|