letopis 1.4.2 → 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 +516 -398
- package/CHANGELOG.md +739 -0
- package/LICENSE +75 -21
- package/LICENSE-COMMERCIAL.md +49 -0
- package/README.md +1312 -1190
- package/api-contract.json +381 -0
- package/dist/acl.d.ts +81 -1
- package/dist/acl.js +281 -13
- package/dist/admin.d.ts +11 -141
- package/dist/admin.js +28 -186
- package/dist/auth.d.ts +20 -5
- package/dist/auth.js +80 -21
- package/dist/cache.d.ts +8 -1
- package/dist/cache.js +30 -8
- package/dist/chain.d.ts +46 -48
- package/dist/chain.js +556 -223
- package/dist/cli.js +73 -96
- package/dist/demo/booking.d.ts +352 -36
- package/dist/describe.d.ts +47 -0
- package/dist/describe.js +195 -0
- package/dist/errors.d.ts +77 -13
- package/dist/errors.js +231 -30
- package/dist/index.d.ts +62 -74
- package/dist/index.js +312 -155
- package/dist/internal.d.ts +7 -0
- package/dist/jsonschema.js +18 -17
- package/dist/load.d.ts +29 -17
- package/dist/load.js +235 -190
- package/dist/log.d.ts +121 -0
- package/dist/log.js +633 -0
- package/dist/mcp.d.ts +5 -7
- package/dist/mcp.js +194 -225
- package/dist/messages/access.d.ts +90 -0
- package/dist/messages/access.js +113 -0
- package/dist/messages/api.d.ts +237 -0
- package/dist/messages/api.js +304 -0
- package/dist/messages/boot.d.ts +201 -0
- package/dist/messages/boot.js +256 -0
- package/dist/messages/codes.d.ts +172 -0
- package/dist/messages/codes.js +173 -0
- package/dist/messages/index.d.ts +98 -0
- package/dist/messages/index.js +121 -0
- package/dist/messages/log.d.ts +229 -0
- package/dist/messages/log.js +102 -0
- package/dist/messages/mcp.d.ts +306 -0
- package/dist/messages/mcp.js +387 -0
- package/dist/messages/model.d.ts +256 -0
- package/dist/messages/model.js +314 -0
- package/dist/messages/query.d.ts +141 -0
- package/dist/messages/query.js +171 -0
- package/dist/messages/sql-access.d.ts +70 -0
- package/dist/messages/sql-access.js +87 -0
- package/dist/messages/sql-core.d.ts +164 -0
- package/dist/messages/sql-core.js +198 -0
- package/dist/messages/sql-time.d.ts +86 -0
- package/dist/messages/sql-time.js +111 -0
- package/dist/messages/sql-write.d.ts +246 -0
- package/dist/messages/sql-write.js +270 -0
- package/dist/messages/time.d.ts +23 -0
- package/dist/messages/time.js +29 -0
- package/dist/messages/types.d.ts +27 -0
- package/dist/messages/types.js +5 -0
- package/dist/messages/write.d.ts +452 -0
- package/dist/messages/write.js +572 -0
- package/dist/model.d.ts +77 -60
- package/dist/model.js +43 -34
- package/dist/ops.d.ts +35 -0
- package/dist/ops.js +101 -0
- package/dist/pglite.d.ts +0 -9
- package/dist/pglite.js +3 -1
- package/dist/registry.d.ts +3 -19
- package/dist/registry.js +3 -16
- package/dist/signals.d.ts +1 -5
- package/dist/signals.js +1 -5
- package/dist/sql.d.ts +9 -1
- package/dist/sql.js +175 -107
- package/dist/sync.d.ts +10 -4
- package/dist/sync.js +90 -17
- package/dist/tx.d.ts +21 -2
- package/dist/tx.js +76 -13
- package/dist/typed.d.ts +252 -53
- package/dist/types.d.ts +93 -90
- package/dist/types.js +17 -14
- package/dist/up.d.ts +56 -35
- package/dist/up.js +229 -83
- package/dist/uuid.d.ts +8 -0
- package/dist/uuid.js +14 -6
- package/dist/validate.d.ts +13 -1
- package/dist/validate.js +82 -33
- package/dist/watch.d.ts +10 -16
- package/dist/watch.js +36 -77
- package/dist/write.d.ts +87 -17
- package/dist/write.js +441 -206
- package/llms.txt +48 -31
- package/package.json +13 -14
- package/sql/10-core.sql +7 -50
- package/sql/15-errors.sql +64 -10
- package/sql/20-context.sql +18 -9
- package/sql/30-validate.sql +79 -30
- package/sql/40-class.sql +41 -115
- package/sql/50-acl.sql +8 -13
- package/sql/60-write.sql +220 -676
- package/sql/70-read.sql +11 -13
- package/sql/80-auth.sql +109 -42
- package/sql/90-time.sql +108 -947
- package/sql/95-seed.system.sql +7 -14
- package/sql/99-revision.sql +6 -1
- package/sql/README.md +32 -24
- 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 +18 -0
- package/AGENT-CHEATSHEET.en.md +0 -488
- package/MIGRATION.md +0 -190
- package/README.en.md +0 -2910
- package/dist/import.d.ts +0 -185
- package/dist/import.js +0 -820
- package/dist/project.d.ts +0 -359
- package/dist/project.js +0 -1258
- package/sql/75-history.sql +0 -436
- package/sql/88-derived.sql +0 -1236
- package/sql/migrate/0006-changed-paths.sql +0 -3
- package/sql/migrate/0007-secret-account-fk.sql +0 -12
package/dist/write.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { ClassInfo, Registry } from './registry.js';
|
|
2
2
|
import { type AggSpec, type BuiltQuery, type ReadMode, type Step } from './sql.js';
|
|
3
|
-
import type { Tx } from './tx.js';
|
|
3
|
+
import type { Executor, Tx } from './tx.js';
|
|
4
4
|
import type { ChainMods, Row } from './types.js';
|
|
5
5
|
/** Метка приращения; Symbol.for — маркер узнаёт и вторая копия пакета в процессе. */
|
|
6
6
|
export declare const INC: unique symbol;
|
|
@@ -18,6 +18,53 @@ export declare function inc(by: number, opts?: {
|
|
|
18
18
|
start?: number;
|
|
19
19
|
}): IncMarker;
|
|
20
20
|
export declare const isInc: (v: unknown) => v is IncMarker;
|
|
21
|
+
/**
|
|
22
|
+
* Ожидаемая строка `expect` у `restore()` и `delete({ confirm: true })` (план 2.1, A1, A2): строка ответа или её `id`,
|
|
23
|
+
* `rev` (и `$action` превью удаления). Лишние поля строки не мешают.
|
|
24
|
+
*/
|
|
25
|
+
export interface Expected {
|
|
26
|
+
id: string;
|
|
27
|
+
rev: number;
|
|
28
|
+
/** У строки превью — что с ней будет; строку ответа (с любым $action) можно передать как есть. */
|
|
29
|
+
$action?: Row['$action'];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Опции delete() (3.0): без confirm — превью; `{ confirm: true, expect }` — удалить ровно показанное превью;
|
|
33
|
+
* `{ confirm: true, all: true }` — осознанно удалить текущий состав целей без сверки (и без фильтра). `{ confirm: true }`
|
|
34
|
+
* без expect и all — invalid_query (write.confirm_without_expect).
|
|
35
|
+
*/
|
|
36
|
+
export type DeleteOptions = {
|
|
37
|
+
confirm?: false;
|
|
38
|
+
all?: boolean;
|
|
39
|
+
expect?: undefined;
|
|
40
|
+
reason?: string;
|
|
41
|
+
} | {
|
|
42
|
+
confirm: true;
|
|
43
|
+
expect: readonly Expected[];
|
|
44
|
+
all?: boolean;
|
|
45
|
+
reason?: string;
|
|
46
|
+
} | {
|
|
47
|
+
confirm: true;
|
|
48
|
+
all: true;
|
|
49
|
+
expect?: readonly Expected[];
|
|
50
|
+
reason?: string;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Опции restore() (3.0): `{ expect }` — надгробия, которые видел пользователь (ответ delete() или withDeleted()), с
|
|
54
|
+
* `partial: true` — что можно; `{ all: true }` — осознанно вернуть все удалённые цели шага без сверки. Без expect и all —
|
|
55
|
+
* invalid_query (write.restore_without_expect), и для явных id.
|
|
56
|
+
*/
|
|
57
|
+
export type RestoreOptions = {
|
|
58
|
+
expect: readonly Expected[];
|
|
59
|
+
partial?: boolean;
|
|
60
|
+
all?: boolean;
|
|
61
|
+
reason?: string;
|
|
62
|
+
} | {
|
|
63
|
+
all: true;
|
|
64
|
+
expect?: undefined;
|
|
65
|
+
partial?: false;
|
|
66
|
+
reason?: string;
|
|
67
|
+
};
|
|
21
68
|
/** Глагол плана; reason — причина изменения этого глагола (план 1.1, §2.1). */
|
|
22
69
|
export type PlanOp = ({
|
|
23
70
|
kind: 'create';
|
|
@@ -26,30 +73,29 @@ export type PlanOp = ({
|
|
|
26
73
|
kind: 'update';
|
|
27
74
|
data: Record<string, unknown>;
|
|
28
75
|
rev?: number;
|
|
76
|
+
all?: true;
|
|
29
77
|
} | {
|
|
30
78
|
kind: 'upsert';
|
|
31
79
|
data: Record<string, unknown>;
|
|
32
80
|
} | {
|
|
33
81
|
kind: 'delete';
|
|
34
82
|
confirm: boolean;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
fields: string[];
|
|
38
|
-
} | {
|
|
39
|
-
kind: 'reclass';
|
|
40
|
-
cls: string;
|
|
41
|
-
data?: Record<string, unknown>;
|
|
83
|
+
all?: true;
|
|
84
|
+
expect?: readonly Expected[];
|
|
42
85
|
} | {
|
|
43
86
|
kind: 'restore';
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
} | {
|
|
48
|
-
kind: 'rekey';
|
|
49
|
-
data: Record<string, unknown>;
|
|
87
|
+
all?: true;
|
|
88
|
+
expect?: readonly Expected[];
|
|
89
|
+
partial?: true;
|
|
50
90
|
}) & {
|
|
51
91
|
reason?: string;
|
|
52
92
|
};
|
|
93
|
+
/**
|
|
94
|
+
* Данные create() и upsert() без ключей со значением undefined — как у патча update() (splitPatch): ключ undefined JSON
|
|
95
|
+
* не передаёт, а валидатор на TypeScript принимал его за поле не того типа (план 2.1, A12). Вложенные объекты — тоже;
|
|
96
|
+
* массивы, даты, маркеры и операторы — как есть.
|
|
97
|
+
*/
|
|
98
|
+
export declare function dropUndefined(data: Record<string, unknown>): Record<string, unknown>;
|
|
53
99
|
/** Причина изменения: строка до 1000 символов без NUL (её не принимает set_config). */
|
|
54
100
|
export declare function checkReason(v: unknown, where: string): string;
|
|
55
101
|
/** Значение слота: id, список id, строка ответа или ленивая цепочка (в той же транзакции). */
|
|
@@ -77,8 +123,26 @@ export declare function splitPatch(patch: Record<string, unknown>): {
|
|
|
77
123
|
rest: Record<string, unknown>;
|
|
78
124
|
incs: IncSpec[];
|
|
79
125
|
};
|
|
80
|
-
/**
|
|
81
|
-
|
|
126
|
+
/**
|
|
127
|
+
* Ошибка данных до записи у класса с правилами только для базы (`pattern`): валидатор на TypeScript нашёл не всё — полный
|
|
128
|
+
* список нарушений даёт база одним запросом (`validate_row`, план 2.1, A8), под точкой сохранения: неудача запроса
|
|
129
|
+
* (схема прежней ревизии) не ломает db.begin(), остаётся прежняя ошибка. Прочие ошибки — как есть.
|
|
130
|
+
*/
|
|
131
|
+
export declare function completeIssues(ctx: {
|
|
132
|
+
schema: string;
|
|
133
|
+
exec: Executor;
|
|
134
|
+
}, e: unknown): Promise<unknown>;
|
|
135
|
+
/**
|
|
136
|
+
* Блокировка строк в порядке id (lockedRead, updateOp — for no key update; deleteOp с expect — for update): id, которые
|
|
137
|
+
* удалось заблокировать.
|
|
138
|
+
*/
|
|
139
|
+
export declare function lockIds(q: Tx, S: string, ids: string[], mode?: 'no key update' | 'update'): Promise<Set<string>>;
|
|
140
|
+
/**
|
|
141
|
+
* Всё, что проверяется без базы, — до отправки первого оператора (§2.5). Фильтры шагов и поля sort() и агрегатов
|
|
142
|
+
* (неизвестное поле — invalid_query, план 2.0, этап 3, п. 3) — precheckStep построителя; order и agg — модификатор и
|
|
143
|
+
* агрегат чтения за последним глаголом (терминал цепочки).
|
|
144
|
+
*/
|
|
145
|
+
export declare function precheckPlan(reg: Registry, steps: Step[], order?: string, agg?: AggSpec): void;
|
|
82
146
|
export interface WriteCtx {
|
|
83
147
|
reg: Registry;
|
|
84
148
|
schema: string;
|
|
@@ -99,6 +163,12 @@ export declare function readIn<T>(w: WriteCtx, steps: Step[], mods: ChainMods, m
|
|
|
99
163
|
}>;
|
|
100
164
|
/** Роль слота: имя роли записываемого класса или класс, который принимает ровно одна роль. */
|
|
101
165
|
export declare function slotRole(reg: Registry, owner: ClassInfo, name: string): string;
|
|
166
|
+
/**
|
|
167
|
+
* Почему цель restore не восстановить (второй раунд 2.1, A2, A3) — по записи журнала, которая идёт за последним
|
|
168
|
+
* надгробием: `restored` — за ним restore (объект уже восстановлен), `reissued` — create (id занял новый объект с тем же
|
|
169
|
+
* ключом), `changed` — прочее: удалён снова с другим номером версии, не удалялся вовсе, гонка.
|
|
170
|
+
*/
|
|
171
|
+
export type RestoreWhy = 'restored' | 'reissued' | 'changed';
|
|
102
172
|
interface Segment {
|
|
103
173
|
/** Шаги сегмента; последний несёт глагол. */
|
|
104
174
|
steps: Step[];
|