letopis 2.0.0 → 3.0.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/AGENT-CHEATSHEET.md +484 -414
- package/CHANGELOG.md +321 -0
- package/LICENSE +75 -21
- package/LICENSE-COMMERCIAL.md +49 -0
- package/README.md +786 -183
- package/api-contract.json +381 -0
- package/dist/acl.d.ts +3 -0
- package/dist/acl.js +19 -2
- package/dist/admin.d.ts +2 -1
- package/dist/admin.js +6 -4
- package/dist/auth.d.ts +18 -3
- package/dist/auth.js +75 -6
- package/dist/chain.d.ts +38 -17
- package/dist/chain.js +434 -63
- package/dist/cli.js +28 -6
- package/dist/errors.d.ts +19 -1
- package/dist/errors.js +46 -6
- package/dist/index.d.ts +10 -4
- package/dist/index.js +136 -46
- package/dist/internal.d.ts +2 -0
- package/dist/load.d.ts +9 -5
- package/dist/load.js +30 -11
- package/dist/log.d.ts +121 -0
- package/dist/log.js +633 -0
- package/dist/mcp.js +26 -11
- package/dist/messages/api.d.ts +66 -0
- package/dist/messages/api.js +90 -1
- package/dist/messages/boot.js +4 -4
- package/dist/messages/codes.js +4 -4
- package/dist/messages/index.d.ts +5 -2
- package/dist/messages/index.js +5 -2
- package/dist/messages/log.d.ts +229 -0
- package/dist/messages/log.js +102 -0
- package/dist/messages/model.d.ts +24 -1
- package/dist/messages/model.js +34 -3
- package/dist/messages/query.d.ts +10 -0
- package/dist/messages/query.js +13 -0
- package/dist/messages/sql-core.d.ts +15 -1
- package/dist/messages/sql-core.js +20 -3
- package/dist/messages/sql-time.d.ts +15 -0
- package/dist/messages/sql-time.js +23 -0
- package/dist/messages/write.d.ts +47 -0
- package/dist/messages/write.js +63 -0
- package/dist/model.d.ts +4 -0
- package/dist/model.js +23 -5
- package/dist/sql.d.ts +2 -0
- package/dist/sql.js +77 -25
- package/dist/sync.d.ts +1 -1
- package/dist/sync.js +50 -0
- package/dist/tx.d.ts +10 -1
- package/dist/tx.js +44 -2
- package/dist/typed.d.ts +14 -10
- package/dist/types.d.ts +82 -4
- package/dist/types.js +6 -1
- package/dist/up.d.ts +3 -3
- package/dist/up.js +57 -17
- package/dist/uuid.d.ts +8 -0
- package/dist/uuid.js +9 -1
- package/dist/validate.js +24 -7
- package/dist/watch.d.ts +5 -0
- package/dist/watch.js +13 -0
- package/dist/write.d.ts +78 -1
- package/dist/write.js +357 -39
- package/llms.txt +37 -17
- package/package.json +12 -6
- package/sql/20-context.sql +11 -3
- package/sql/30-validate.sql +51 -10
- package/sql/40-class.sql +21 -1
- package/sql/80-auth.sql +88 -17
- package/sql/90-time.sql +34 -6
- package/sql/99-revision.sql +5 -1
- package/sql/migrate/0009-restore-rev.tenants-name.sql +10 -0
- package/sql/migrate/0010-impersonation-no-account.sql +5 -0
- package/sql/migrate/0011-key-lock.otp-enabled.sql +7 -0
- package/sql/migrate/README.md +5 -1
package/dist/chain.d.ts
CHANGED
|
@@ -2,7 +2,9 @@ import { type ResultCache } from './cache.js';
|
|
|
2
2
|
import type { ClassInfo, Registry } from './registry.js';
|
|
3
3
|
import { type Step } from './sql.js';
|
|
4
4
|
import type { Executor } from './tx.js';
|
|
5
|
-
import type
|
|
5
|
+
import { type ChainMods, type Cursor, type Filter, type Path, type QueryEvent, type Row } from './types.js';
|
|
6
|
+
import { type Log } from './log.js';
|
|
7
|
+
import { type DeleteOptions, type RestoreOptions } from './write.js';
|
|
6
8
|
export interface ChainCtx {
|
|
7
9
|
readonly reg: Registry;
|
|
8
10
|
readonly schema: string;
|
|
@@ -10,6 +12,8 @@ export interface ChainCtx {
|
|
|
10
12
|
readonly exec: Executor;
|
|
11
13
|
/** Арендатор сессии. */
|
|
12
14
|
readonly tenant: () => string | null;
|
|
15
|
+
/** Фасад входит по токену сессии (connect({ token }), ключ API): без арендатора сессии шаг — sessionless(). */
|
|
16
|
+
readonly hasToken?: () => boolean;
|
|
13
17
|
/** Владелец новых строк по умолчанию (db.as(…, { owner })). */
|
|
14
18
|
readonly owner?: string;
|
|
15
19
|
readonly onQuery?: (e: QueryEvent) => void;
|
|
@@ -28,6 +32,8 @@ export interface ChainCtx {
|
|
|
28
32
|
tenant?: string | null;
|
|
29
33
|
};
|
|
30
34
|
};
|
|
35
|
+
/** Логгер фасада (lib/src/log.ts): события read, write, delete, restore, кэша и error. */
|
|
36
|
+
readonly log?: Log;
|
|
31
37
|
}
|
|
32
38
|
/** План в очереди батча; steps обновляется по мере роста цепочки. */
|
|
33
39
|
export interface BatchEntry {
|
|
@@ -69,7 +75,10 @@ export interface ChainCore {
|
|
|
69
75
|
count(opts?: {
|
|
70
76
|
paths?: boolean;
|
|
71
77
|
}): Promise<number>;
|
|
72
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* Все версии сущностей последнего шага (надгробия — $deleted), по id и номеру версии. Шаг с явными id находит и
|
|
80
|
+
* удалённые объекты: `db.Класс(id).versions()` отдаёт историю удалённого.
|
|
81
|
+
*/
|
|
73
82
|
versions(): Promise<Row[]>;
|
|
74
83
|
/**
|
|
75
84
|
* Сумма поля `'data.<путь>'` по объектам последнего шага: значения приводятся к числу, складывает база. `limit()` и
|
|
@@ -118,8 +127,9 @@ export interface ChainCore {
|
|
|
118
127
|
*/
|
|
119
128
|
after(cursor: Cursor): Chain;
|
|
120
129
|
/**
|
|
121
|
-
*
|
|
122
|
-
*
|
|
130
|
+
* Шаг, после которого стоит, находит и удалённые объекты — модификатор своего шага, как `exact()`:
|
|
131
|
+
* `db.Member(id).withDeleted().Loan().withDeleted()` — удалённые выдачи удалённого участника. Удалённый объект приходит
|
|
132
|
+
* надгробием — своей последней версией, версией удаления, — с `$deleted: true`.
|
|
123
133
|
*/
|
|
124
134
|
withDeleted(): Chain;
|
|
125
135
|
/** Дети любой глубины на переходе к тому же классу; $depth в строке. */
|
|
@@ -174,21 +184,27 @@ export interface ChainCore {
|
|
|
174
184
|
/**
|
|
175
185
|
* Удаляет цели шага; строки, которые на них ссылаются, база удаляет вместе с ними, отвязывает или не даёт удалить цель —
|
|
176
186
|
* как задано в `onDelete` их ссылок. Без `{ confirm: true }` — предпросмотр удаления: ничего не удаляется, терминал
|
|
177
|
-
* вернёт все строки, которых оно коснулось бы, у каждой `$action` — что с ней будет.
|
|
178
|
-
*
|
|
179
|
-
* `
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
}): Chain;
|
|
187
|
+
* вернёт все строки, которых оно коснулось бы, у каждой `$action` — что с ней будет. `{ confirm: true, expect: превью }`
|
|
188
|
+
* удаляет ровно показанное: в транзакции удаления превью строится заново и сравнивается с `expect` по `id`, `rev` и
|
|
189
|
+
* `$action`; расхождение — `conflict` (ничего не удалено, новое превью — `err.detail.preview`); цели сужают фильтр, id,
|
|
190
|
+
* `tags()`, `owner()` или `limit()` хотя бы у одного шага, иначе `invalid_query`. `{ confirm: true }` без `expect` —
|
|
191
|
+
* `invalid_query` (`write.confirm_without_expect`); осознанно удалить текущий состав целей без сверки (и без фильтра —
|
|
192
|
+
* все строки) — `{ confirm: true, all: true }`.
|
|
193
|
+
*/
|
|
194
|
+
delete(opts?: DeleteOptions): Chain;
|
|
186
195
|
/** Чтение с блокировкой строк последнего шага до конца db.begin() (rows, first, ids). */
|
|
187
196
|
forUpdate(): Chain;
|
|
188
|
-
/**
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
197
|
+
/**
|
|
198
|
+
* Восстановить удалённые объекты шага: последний снимок новой версией (id прежний). `{ expect }` — надгробия `{ id, rev }`
|
|
199
|
+
* из ответа `delete()` или `withDeleted()`: восстанавливаются только цели из `expect`, и только если последняя версия
|
|
200
|
+
* каждой — та же; иначе ничего не восстановлено: уже восстановлена — `not_deleted` (`write.restore_already`), id занял
|
|
201
|
+
* новый объект — `not_deleted` (`write.restore_id_taken`), прочее (удалена снова, менялась) — `conflict`
|
|
202
|
+
* (`write.restore_stale`); причины по целям — `err.detail.stale`. `{ expect, partial: true }` — восстановить то, что
|
|
203
|
+
* можно: остальные цели приходят строками `{ …строка, $action: 'skip', $why }`. Без `expect` — `invalid_query`
|
|
204
|
+
* (`write.restore_without_expect`), и для явных id; осознанно вернуть все удалённые цели шага без сверки —
|
|
205
|
+
* `{ all: true }`.
|
|
206
|
+
*/
|
|
207
|
+
restore(opts: RestoreOptions): Chain;
|
|
192
208
|
/** Кэш результатов (§2.12): ответ хранится в памяти процесса ttl секунд (по умолчанию 60). */
|
|
193
209
|
cache(opts?: {
|
|
194
210
|
ttl?: number;
|
|
@@ -220,6 +236,11 @@ export declare function lookupStep(reg: Registry, name: string): {
|
|
|
220
236
|
cls: ClassInfo;
|
|
221
237
|
role?: string;
|
|
222
238
|
} | undefined;
|
|
239
|
+
/**
|
|
240
|
+
* Цепочка в читаемом виде: `Shop({"name":"A"}).Product.limit(10).rows()`. Фильтры — значениями (поля-секреты — '***'),
|
|
241
|
+
* данные записи — только именами полей.
|
|
242
|
+
*/
|
|
243
|
+
export declare function chainText(log: Log, steps: readonly Step[], mods?: ChainMods, term?: string, args?: readonly unknown[]): string;
|
|
223
244
|
export declare function makeChain(ctx: ChainCtx, steps: Step[], mods: ChainMods, nodes?: NodeMap): Chain;
|
|
224
245
|
/**
|
|
225
246
|
* Батч: очередь планов; каждый вызов класса — своя ссылка на очередь (свой план). run() исполняет очередь
|