@ketvietlab/ketjs 0.1.1
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/LICENSE +21 -0
- package/README.md +36 -0
- package/dist/agent/capabilities.d.ts +62 -0
- package/dist/agent/capabilities.d.ts.map +1 -0
- package/dist/agent/capabilities.js +89 -0
- package/dist/agent/capabilities.js.map +1 -0
- package/dist/agent/permissions.d.ts +56 -0
- package/dist/agent/permissions.d.ts.map +1 -0
- package/dist/agent/permissions.js +209 -0
- package/dist/agent/permissions.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +698 -0
- package/dist/cli.js.map +1 -0
- package/dist/codegen/dts.d.ts +3 -0
- package/dist/codegen/dts.d.ts.map +1 -0
- package/dist/codegen/dts.js +94 -0
- package/dist/codegen/dts.js.map +1 -0
- package/dist/data/adapter.d.ts +4 -0
- package/dist/data/adapter.d.ts.map +1 -0
- package/dist/data/adapter.js +18 -0
- package/dist/data/adapter.js.map +1 -0
- package/dist/data/changeset.d.ts +49 -0
- package/dist/data/changeset.d.ts.map +1 -0
- package/dist/data/changeset.js +206 -0
- package/dist/data/changeset.js.map +1 -0
- package/dist/data/expr.d.ts +59 -0
- package/dist/data/expr.d.ts.map +1 -0
- package/dist/data/expr.js +61 -0
- package/dist/data/expr.js.map +1 -0
- package/dist/data/fleet.d.ts +28 -0
- package/dist/data/fleet.d.ts.map +1 -0
- package/dist/data/fleet.js +82 -0
- package/dist/data/fleet.js.map +1 -0
- package/dist/data/list-search.d.ts +93 -0
- package/dist/data/list-search.d.ts.map +1 -0
- package/dist/data/list-search.js +268 -0
- package/dist/data/list-search.js.map +1 -0
- package/dist/data/migrate.d.ts +75 -0
- package/dist/data/migrate.d.ts.map +1 -0
- package/dist/data/migrate.js +136 -0
- package/dist/data/migrate.js.map +1 -0
- package/dist/data/pool.d.ts +20 -0
- package/dist/data/pool.d.ts.map +1 -0
- package/dist/data/pool.js +92 -0
- package/dist/data/pool.js.map +1 -0
- package/dist/data/query.d.ts +111 -0
- package/dist/data/query.d.ts.map +1 -0
- package/dist/data/query.js +268 -0
- package/dist/data/query.js.map +1 -0
- package/dist/data/sqlite.d.ts +3 -0
- package/dist/data/sqlite.d.ts.map +1 -0
- package/dist/data/sqlite.js +107 -0
- package/dist/data/sqlite.js.map +1 -0
- package/dist/data/time.d.ts +9 -0
- package/dist/data/time.d.ts.map +1 -0
- package/dist/data/time.js +107 -0
- package/dist/data/time.js.map +1 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel/apps.d.ts +43 -0
- package/dist/kernel/apps.d.ts.map +1 -0
- package/dist/kernel/apps.js +234 -0
- package/dist/kernel/apps.js.map +1 -0
- package/dist/kernel/compose.d.ts +6 -0
- package/dist/kernel/compose.d.ts.map +1 -0
- package/dist/kernel/compose.js +976 -0
- package/dist/kernel/compose.js.map +1 -0
- package/dist/kernel/define.d.ts +9 -0
- package/dist/kernel/define.d.ts.map +1 -0
- package/dist/kernel/define.js +140 -0
- package/dist/kernel/define.js.map +1 -0
- package/dist/kernel/diff.d.ts +11 -0
- package/dist/kernel/diff.d.ts.map +1 -0
- package/dist/kernel/diff.js +106 -0
- package/dist/kernel/diff.js.map +1 -0
- package/dist/kernel/errors.d.ts +17 -0
- package/dist/kernel/errors.d.ts.map +1 -0
- package/dist/kernel/errors.js +43 -0
- package/dist/kernel/errors.js.map +1 -0
- package/dist/kernel/graph.d.ts +3 -0
- package/dist/kernel/graph.d.ts.map +1 -0
- package/dist/kernel/graph.js +56 -0
- package/dist/kernel/graph.js.map +1 -0
- package/dist/kernel/i18n.d.ts +43 -0
- package/dist/kernel/i18n.d.ts.map +1 -0
- package/dist/kernel/i18n.js +79 -0
- package/dist/kernel/i18n.js.map +1 -0
- package/dist/kernel/index.d.ts +7 -0
- package/dist/kernel/index.d.ts.map +1 -0
- package/dist/kernel/index.js +7 -0
- package/dist/kernel/index.js.map +1 -0
- package/dist/kernel/layout.d.ts +17 -0
- package/dist/kernel/layout.d.ts.map +1 -0
- package/dist/kernel/layout.js +77 -0
- package/dist/kernel/layout.js.map +1 -0
- package/dist/kernel/menu.d.ts +27 -0
- package/dist/kernel/menu.d.ts.map +1 -0
- package/dist/kernel/menu.js +65 -0
- package/dist/kernel/menu.js.map +1 -0
- package/dist/kernel/modules.d.ts +31 -0
- package/dist/kernel/modules.d.ts.map +1 -0
- package/dist/kernel/modules.js +322 -0
- package/dist/kernel/modules.js.map +1 -0
- package/dist/kernel/routes.d.ts +24 -0
- package/dist/kernel/routes.d.ts.map +1 -0
- package/dist/kernel/routes.js +98 -0
- package/dist/kernel/routes.js.map +1 -0
- package/dist/kernel/types.d.ts +8 -0
- package/dist/kernel/types.d.ts.map +1 -0
- package/dist/kernel/types.js +67 -0
- package/dist/kernel/types.js.map +1 -0
- package/dist/kernel/workspace.d.ts +62 -0
- package/dist/kernel/workspace.d.ts.map +1 -0
- package/dist/kernel/workspace.js +156 -0
- package/dist/kernel/workspace.js.map +1 -0
- package/dist/scaffold/index.d.ts +2 -0
- package/dist/scaffold/index.d.ts.map +1 -0
- package/dist/scaffold/index.js +49 -0
- package/dist/scaffold/index.js.map +1 -0
- package/dist/scaffold/templates/app.test.ts.tmpl +17 -0
- package/dist/scaffold/templates/biome.json.tmpl +30 -0
- package/dist/scaffold/templates/dev.mjs.tmpl +16 -0
- package/dist/scaffold/templates/gitignore.tmpl +24 -0
- package/dist/scaffold/templates/ket.workspace.ts.tmpl +18 -0
- package/dist/scaffold/templates/module.ts.tmpl +27 -0
- package/dist/scaffold/templates/package.json.tmpl +25 -0
- package/dist/scaffold/templates/tsconfig.json.tmpl +15 -0
- package/dist/server/boot.d.ts +173 -0
- package/dist/server/boot.d.ts.map +1 -0
- package/dist/server/boot.js +659 -0
- package/dist/server/boot.js.map +1 -0
- package/dist/server/config.d.ts +48 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +82 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/ctx.d.ts +13 -0
- package/dist/server/ctx.d.ts.map +1 -0
- package/dist/server/ctx.js +496 -0
- package/dist/server/ctx.js.map +1 -0
- package/dist/server/fn.d.ts +34 -0
- package/dist/server/fn.d.ts.map +1 -0
- package/dist/server/fn.js +170 -0
- package/dist/server/fn.js.map +1 -0
- package/dist/server/http.d.ts +79 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +459 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/idem.d.ts +31 -0
- package/dist/server/idem.d.ts.map +1 -0
- package/dist/server/idem.js +68 -0
- package/dist/server/idem.js.map +1 -0
- package/dist/server/jobs.d.ts +5 -0
- package/dist/server/jobs.d.ts.map +1 -0
- package/dist/server/jobs.js +24 -0
- package/dist/server/jobs.js.map +1 -0
- package/dist/server/multipart.d.ts +18 -0
- package/dist/server/multipart.d.ts.map +1 -0
- package/dist/server/multipart.js +183 -0
- package/dist/server/multipart.js.map +1 -0
- package/dist/server/project.d.ts +9 -0
- package/dist/server/project.d.ts.map +1 -0
- package/dist/server/project.js +67 -0
- package/dist/server/project.js.map +1 -0
- package/dist/server/queue.d.ts +80 -0
- package/dist/server/queue.d.ts.map +1 -0
- package/dist/server/queue.js +494 -0
- package/dist/server/queue.js.map +1 -0
- package/dist/server/respond.d.ts +91 -0
- package/dist/server/respond.d.ts.map +1 -0
- package/dist/server/respond.js +99 -0
- package/dist/server/respond.js.map +1 -0
- package/dist/server/runtime.d.ts +14 -0
- package/dist/server/runtime.d.ts.map +1 -0
- package/dist/server/runtime.js +25 -0
- package/dist/server/runtime.js.map +1 -0
- package/dist/server/session.d.ts +55 -0
- package/dist/server/session.d.ts.map +1 -0
- package/dist/server/session.js +172 -0
- package/dist/server/session.js.map +1 -0
- package/dist/server/sessionstore.d.ts +54 -0
- package/dist/server/sessionstore.d.ts.map +1 -0
- package/dist/server/sessionstore.js +232 -0
- package/dist/server/sessionstore.js.map +1 -0
- package/dist/server/storage/index.d.ts +11 -0
- package/dist/server/storage/index.d.ts.map +1 -0
- package/dist/server/storage/index.js +31 -0
- package/dist/server/storage/index.js.map +1 -0
- package/dist/server/storage/local.d.ts +5 -0
- package/dist/server/storage/local.d.ts.map +1 -0
- package/dist/server/storage/local.js +165 -0
- package/dist/server/storage/local.js.map +1 -0
- package/dist/server/storage/s3.d.ts +11 -0
- package/dist/server/storage/s3.d.ts.map +1 -0
- package/dist/server/storage/s3.js +133 -0
- package/dist/server/storage/s3.js.map +1 -0
- package/dist/server/storage/sigv4.d.ts +23 -0
- package/dist/server/storage/sigv4.d.ts.map +1 -0
- package/dist/server/storage/sigv4.js +79 -0
- package/dist/server/storage/sigv4.js.map +1 -0
- package/dist/server/storage/types.d.ts +37 -0
- package/dist/server/storage/types.d.ts.map +1 -0
- package/dist/server/storage/types.js +82 -0
- package/dist/server/storage/types.js.map +1 -0
- package/dist/server/stream.d.ts +43 -0
- package/dist/server/stream.d.ts.map +1 -0
- package/dist/server/stream.js +117 -0
- package/dist/server/stream.js.map +1 -0
- package/dist/server/streamstore.d.ts +29 -0
- package/dist/server/streamstore.d.ts.map +1 -0
- package/dist/server/streamstore.js +140 -0
- package/dist/server/streamstore.js.map +1 -0
- package/dist/server/tenants.d.ts +108 -0
- package/dist/server/tenants.d.ts.map +1 -0
- package/dist/server/tenants.js +172 -0
- package/dist/server/tenants.js.map +1 -0
- package/dist/server/transport/index.d.ts +5 -0
- package/dist/server/transport/index.d.ts.map +1 -0
- package/dist/server/transport/index.js +3 -0
- package/dist/server/transport/index.js.map +1 -0
- package/dist/server/transport/memory.d.ts +14 -0
- package/dist/server/transport/memory.d.ts.map +1 -0
- package/dist/server/transport/memory.js +36 -0
- package/dist/server/transport/memory.js.map +1 -0
- package/dist/server/transport/types.d.ts +44 -0
- package/dist/server/transport/types.d.ts.map +1 -0
- package/dist/server/transport/types.js +79 -0
- package/dist/server/transport/types.js.map +1 -0
- package/dist/server/worker.d.ts +33 -0
- package/dist/server/worker.d.ts.map +1 -0
- package/dist/server/worker.js +428 -0
- package/dist/server/worker.js.map +1 -0
- package/dist/testing.d.ts +146 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +406 -0
- package/dist/testing.js.map +1 -0
- package/dist/theme/contracts.d.ts +4 -0
- package/dist/theme/contracts.d.ts.map +1 -0
- package/dist/theme/contracts.js +87 -0
- package/dist/theme/contracts.js.map +1 -0
- package/dist/theme/index.d.ts +8 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +7 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/joints.d.ts +19 -0
- package/dist/theme/joints.d.ts.map +1 -0
- package/dist/theme/joints.js +126 -0
- package/dist/theme/joints.js.map +1 -0
- package/dist/theme/ktl/compile.d.ts +26 -0
- package/dist/theme/ktl/compile.d.ts.map +1 -0
- package/dist/theme/ktl/compile.js +226 -0
- package/dist/theme/ktl/compile.js.map +1 -0
- package/dist/theme/ktl/lexer.d.ts +20 -0
- package/dist/theme/ktl/lexer.d.ts.map +1 -0
- package/dist/theme/ktl/lexer.js +56 -0
- package/dist/theme/ktl/lexer.js.map +1 -0
- package/dist/theme/ktl/parser.d.ts +64 -0
- package/dist/theme/ktl/parser.d.ts.map +1 -0
- package/dist/theme/ktl/parser.js +220 -0
- package/dist/theme/ktl/parser.js.map +1 -0
- package/dist/theme/render.d.ts +19 -0
- package/dist/theme/render.d.ts.map +1 -0
- package/dist/theme/render.js +246 -0
- package/dist/theme/render.js.map +1 -0
- package/dist/theme/templates.d.ts +2 -0
- package/dist/theme/templates.d.ts.map +1 -0
- package/dist/theme/templates.js +40 -0
- package/dist/theme/templates.js.map +1 -0
- package/dist/theme/tokens.d.ts +4 -0
- package/dist/theme/tokens.d.ts.map +1 -0
- package/dist/theme/tokens.js +15 -0
- package/dist/theme/tokens.js.map +1 -0
- package/dist/theme/viewmodel.d.ts +6 -0
- package/dist/theme/viewmodel.d.ts.map +1 -0
- package/dist/theme/viewmodel.js +40 -0
- package/dist/theme/viewmodel.js.map +1 -0
- package/dist/types.d.ts +614 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
// Request context. There is no module-scope database client anywhere in Ket: data
|
|
2
|
+
// access exists only on a ctx handed to a server function, and that ctx refuses any
|
|
3
|
+
// access the function did not declare in `effects`.
|
|
4
|
+
//
|
|
5
|
+
// This is what makes "the call forgot its context/permission" unrepresentable
|
|
6
|
+
// rather than merely discouraged.
|
|
7
|
+
import { tableNameFor } from '../data/migrate.js';
|
|
8
|
+
import { table } from '../data/query.js';
|
|
9
|
+
import { eq, inArray } from '../data/expr.js';
|
|
10
|
+
import { from } from '../data/query.js';
|
|
11
|
+
import { changeset, decimalText } from '../data/changeset.js';
|
|
12
|
+
import { KetError } from '../kernel/errors.js';
|
|
13
|
+
import { createQueue, queueFor, validateJobInput } from './queue.js';
|
|
14
|
+
export function createContext(o) {
|
|
15
|
+
const { adapter, manifest, fnKey } = o;
|
|
16
|
+
const scope = o.scope ?? { company: null, branches: null };
|
|
17
|
+
const dryRun = o.dryRun ?? false;
|
|
18
|
+
const operation = o.kind === 'job' ? manifest.jobs[fnKey] : manifest.functions[fnKey];
|
|
19
|
+
if (!operation)
|
|
20
|
+
throw new KetError({
|
|
21
|
+
code: o.kind === 'job' ? 'E_UNKNOWN_JOB' : 'E_UNKNOWN_FUNCTION',
|
|
22
|
+
message: `no ${o.kind === 'job' ? 'background job' : 'server function'} "${fnKey}"`,
|
|
23
|
+
});
|
|
24
|
+
const effects = new Set(operation.effects);
|
|
25
|
+
const writes = o.writes ?? [];
|
|
26
|
+
const need = (effect, target) => {
|
|
27
|
+
if (effects.has(`${effect}:${target}`))
|
|
28
|
+
return;
|
|
29
|
+
throw new KetError({
|
|
30
|
+
code: 'E_EFFECT_NOT_DECLARED',
|
|
31
|
+
module: operation.by,
|
|
32
|
+
message: `"${fnKey}" attempted ${effect} on ${target} but declares effects [${[...effects].join(', ') || 'none'}]`,
|
|
33
|
+
hint: `add "${effect}:${target}" to the ${o.kind === 'job' ? 'job' : 'function'}'s effects, or stop performing that operation`,
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
// A query is a value, so what it touches is known before it runs. This is the
|
|
37
|
+
// pay-off for not building a string-based query builder: effect enforcement
|
|
38
|
+
// happens on the query itself, not on a guess about the SQL it produced.
|
|
39
|
+
const relationOf = (model, name) => {
|
|
40
|
+
const rel = manifest.relations[model]?.[name];
|
|
41
|
+
if (!rel) {
|
|
42
|
+
throw new KetError({
|
|
43
|
+
code: 'E_UNKNOWN_RELATION',
|
|
44
|
+
module: operation.by,
|
|
45
|
+
message: `"${model}" has no relation "${name}"`,
|
|
46
|
+
hint: `declared: ${Object.keys(manifest.relations[model] ?? {}).join(', ') || '(none)'}`,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return rel;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* What a query touches, checked before it runs — preloads included.
|
|
53
|
+
*
|
|
54
|
+
* The preload check used to live where the children are fetched, which meant it
|
|
55
|
+
* only ran when the parent returned rows. An undeclared preload against an empty
|
|
56
|
+
* table passed silently, so a test suite with empty fixtures would go green and
|
|
57
|
+
* the same code would throw the first time a customer had data. A check that
|
|
58
|
+
* depends on the data is not a check.
|
|
59
|
+
*/
|
|
60
|
+
const checkQuery = (q) => {
|
|
61
|
+
for (const model of q.touches)
|
|
62
|
+
need(q.effect, model);
|
|
63
|
+
for (const { name } of q.preloads)
|
|
64
|
+
need('read', relationOf(q.model, name).target);
|
|
65
|
+
};
|
|
66
|
+
const dialect = adapter.name === 'postgres' ? 'postgres' : 'sqlite';
|
|
67
|
+
// ── row-level scope ────────────────────────────────────────────────────────
|
|
68
|
+
//
|
|
69
|
+
// Company isolation used to be a database boundary; here it is a WHERE clause,
|
|
70
|
+
// so a miss does not fail loudly — it quietly returns another legal entity's
|
|
71
|
+
// rows. That is why the filter is applied here, on the query value, rather than
|
|
72
|
+
// left to each module to remember: the one place data passes through is the one
|
|
73
|
+
// place that can guarantee it.
|
|
74
|
+
//
|
|
75
|
+
// Branch is not a security boundary. Reading every branch of one company is
|
|
76
|
+
// ordinary, so an empty branch list means "all of them" rather than "none".
|
|
77
|
+
// Writing somewhere you cannot read back is silent corruption: the row lands,
|
|
78
|
+
// every later query filters it out, and nothing anywhere says why. So the two
|
|
79
|
+
// halves of the scope have to agree before the first query runs.
|
|
80
|
+
if (scope.company && scope.companies && !scope.companies.includes(scope.company)) {
|
|
81
|
+
throw new KetError({
|
|
82
|
+
code: 'E_WRITE_COMPANY_NOT_READABLE',
|
|
83
|
+
module: operation.by,
|
|
84
|
+
message: `the request writes to "${scope.company}" but may only read ${scope.companies.join(', ')}`,
|
|
85
|
+
hint: 'scope.company must be one of scope.companies — otherwise a row is written and then invisible',
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
const scopeOf = (model) => manifest.models[model]?.scope ?? 'shared';
|
|
89
|
+
// ── decimal columns ────────────────────────────────────────────────────────
|
|
90
|
+
//
|
|
91
|
+
// Both adapters store and return a decimal as a string, which is what keeps it
|
|
92
|
+
// exact across the round trip. Arithmetic still happens on numbers, as it does in
|
|
93
|
+
// Odoo — the conversion is here, in the one place that knows both the model and
|
|
94
|
+
// the row, rather than in the adapter, which sees only untyped columns.
|
|
95
|
+
const decimalsOf = (model) => Object.entries(manifest.models[model]?.fields ?? {})
|
|
96
|
+
.filter(([, f]) => f.base === 'decimal')
|
|
97
|
+
.map(([n]) => n);
|
|
98
|
+
const booleansOf = (model) => Object.entries(manifest.models[model]?.fields ?? {})
|
|
99
|
+
.filter(([, f]) => f.base === 'bool')
|
|
100
|
+
.map(([n]) => n);
|
|
101
|
+
const jsonOf = (model) => Object.entries(manifest.models[model]?.fields ?? {})
|
|
102
|
+
.filter(([, f]) => f.base === 'json')
|
|
103
|
+
.map(([n]) => n);
|
|
104
|
+
const encodeRow = (model, row) => {
|
|
105
|
+
const cols = decimalsOf(model);
|
|
106
|
+
if (!cols.length)
|
|
107
|
+
return row;
|
|
108
|
+
const out = { ...row };
|
|
109
|
+
// decimalText, not String: a raw db.update never passes through a changeset, so
|
|
110
|
+
// this is the only place that can keep "1e-7" out of a decimal column.
|
|
111
|
+
for (const c of cols)
|
|
112
|
+
if (out[c] != null)
|
|
113
|
+
out[c] = decimalText(out[c]);
|
|
114
|
+
return out;
|
|
115
|
+
};
|
|
116
|
+
const decodeRows = (model, rows) => {
|
|
117
|
+
const cols = decimalsOf(model);
|
|
118
|
+
const bools = booleansOf(model);
|
|
119
|
+
const json = dialect === 'sqlite' ? jsonOf(model) : [];
|
|
120
|
+
for (const row of rows)
|
|
121
|
+
for (const c of cols)
|
|
122
|
+
if (row[c] != null)
|
|
123
|
+
row[c] = Number(row[c]);
|
|
124
|
+
for (const row of rows)
|
|
125
|
+
for (const c of bools)
|
|
126
|
+
if (row[c] != null)
|
|
127
|
+
row[c] = Boolean(row[c]);
|
|
128
|
+
for (const row of rows)
|
|
129
|
+
for (const c of json)
|
|
130
|
+
if (typeof row[c] === 'string')
|
|
131
|
+
row[c] = JSON.parse(row[c]);
|
|
132
|
+
return rows;
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* The companies a read may see. Absent means just the one being written to.
|
|
136
|
+
*
|
|
137
|
+
* A request that names none is refused rather than answered, because the failure
|
|
138
|
+
* mode of getting this wrong is silent: a missing filter does not throw, it
|
|
139
|
+
* returns another legal entity's rows.
|
|
140
|
+
*/
|
|
141
|
+
const readCompanies = (model) => {
|
|
142
|
+
const set = scope.companies ?? (scope.company ? [scope.company] : []);
|
|
143
|
+
if (set.length)
|
|
144
|
+
return set;
|
|
145
|
+
throw new KetError({
|
|
146
|
+
code: 'E_NO_COMPANY_IN_SCOPE',
|
|
147
|
+
module: operation.by,
|
|
148
|
+
message: `"${fnKey}" touches ${model}, which is company-scoped, but the request carries no company`,
|
|
149
|
+
hint: 'resolve a company for the request, or declare crossCompany: true if this really reads across legal entities',
|
|
150
|
+
});
|
|
151
|
+
};
|
|
152
|
+
const requireCompany = (model) => {
|
|
153
|
+
if (scope.company)
|
|
154
|
+
return scope.company;
|
|
155
|
+
const readable = scope.companies ?? [];
|
|
156
|
+
throw new KetError({
|
|
157
|
+
code: 'E_NO_COMPANY_IN_SCOPE',
|
|
158
|
+
module: operation.by,
|
|
159
|
+
message: readable.length
|
|
160
|
+
? `"${fnKey}" writes ${model}, but the request names ${readable.length} readable compan${readable.length > 1 ? 'ies' : 'y'} and none to write to`
|
|
161
|
+
: `"${fnKey}" touches ${model}, which is company-scoped, but the request carries no company`,
|
|
162
|
+
hint: readable.length
|
|
163
|
+
? `set scope.company to one of: ${readable.join(', ')} — a row belongs to exactly one legal entity`
|
|
164
|
+
: 'resolve a company for the request, or declare crossCompany: true if this really reads across legal entities',
|
|
165
|
+
});
|
|
166
|
+
};
|
|
167
|
+
/** Narrow a query to the companies the caller may read, and to its branches. */
|
|
168
|
+
const scoped = (q) => {
|
|
169
|
+
const kind = scopeOf(q.model);
|
|
170
|
+
if (kind === 'shared')
|
|
171
|
+
return q;
|
|
172
|
+
if (operation.crossCompany)
|
|
173
|
+
return q; // declared, and visible in the manifest
|
|
174
|
+
const cs = readCompanies(q.model);
|
|
175
|
+
const col = { model: q.model, name: 'companyId' };
|
|
176
|
+
let out = q.where(cs.length === 1 ? eq(col, cs[0]) : inArray(col, cs));
|
|
177
|
+
if (kind === 'company+branch' && scope.branches && scope.branches.length > 0) {
|
|
178
|
+
out = out.where(inArray({ model: q.model, name: 'branchId' }, scope.branches));
|
|
179
|
+
}
|
|
180
|
+
return out;
|
|
181
|
+
};
|
|
182
|
+
/** Stamp a row on the way in, and refuse an attempt to write another company's. */
|
|
183
|
+
const stamp = (model, row) => {
|
|
184
|
+
const kind = scopeOf(model);
|
|
185
|
+
if (kind === 'shared')
|
|
186
|
+
return row;
|
|
187
|
+
for (const key of ['companyId', 'branchId']) {
|
|
188
|
+
if (key in row) {
|
|
189
|
+
throw new KetError({
|
|
190
|
+
code: 'E_SCOPE_FIELD_WRITTEN',
|
|
191
|
+
module: operation.by,
|
|
192
|
+
message: `"${fnKey}" set ${model}.${key} itself`,
|
|
193
|
+
hint: 'the scope columns come from the request, not from the caller — otherwise a write could be aimed at another company',
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const company = requireCompany(model);
|
|
198
|
+
const out = { ...row, companyId: company };
|
|
199
|
+
if (kind === 'company+branch') {
|
|
200
|
+
const branch = scope.branch ?? null;
|
|
201
|
+
if (!branch) {
|
|
202
|
+
throw new KetError({
|
|
203
|
+
code: 'E_NO_BRANCH_IN_SCOPE',
|
|
204
|
+
module: operation.by,
|
|
205
|
+
message: `"${fnKey}" writes ${model}, but the request names no branch to write to`,
|
|
206
|
+
hint: 'set scope.branch to one readable branch; scope.branches is only the read set',
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
if (scope.branches && !scope.branches.includes(branch)) {
|
|
210
|
+
throw new KetError({
|
|
211
|
+
code: 'E_WRITE_BRANCH_NOT_READABLE',
|
|
212
|
+
module: operation.by,
|
|
213
|
+
message: `"${fnKey}" would write to branch "${branch}", which is not in its readable branch set`,
|
|
214
|
+
hint: 'the write branch must be one of scope.branches',
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
out.branchId = branch;
|
|
218
|
+
}
|
|
219
|
+
return out;
|
|
220
|
+
};
|
|
221
|
+
const timestamped = (model, row, action) => {
|
|
222
|
+
if (!manifest.models[model]?.timestamps)
|
|
223
|
+
return row;
|
|
224
|
+
const now = new Date().toISOString();
|
|
225
|
+
const clean = { ...row };
|
|
226
|
+
delete clean.createdAt;
|
|
227
|
+
delete clean.updatedAt;
|
|
228
|
+
return action === 'insert' ? { ...clean, createdAt: now, updatedAt: now } : { ...clean, updatedAt: now };
|
|
229
|
+
};
|
|
230
|
+
// Placeholders are dialect-specific. The query builder already knew this; these
|
|
231
|
+
// direct helpers did not, which is a bug only a second dialect could reveal.
|
|
232
|
+
let n = 0;
|
|
233
|
+
const ph = () => {
|
|
234
|
+
n++;
|
|
235
|
+
return dialect === 'postgres' ? `$${n}` : '?';
|
|
236
|
+
};
|
|
237
|
+
const fresh = () => {
|
|
238
|
+
n = 0;
|
|
239
|
+
};
|
|
240
|
+
/**
|
|
241
|
+
* Fill in what a query asked to preload: one extra query per relation, never one
|
|
242
|
+
* per row. The children go through the same scoped path as anything else, so a
|
|
243
|
+
* relation cannot be a way around the company filter.
|
|
244
|
+
*/
|
|
245
|
+
const fillPreloads = async (q, rows) => {
|
|
246
|
+
if (!q.preloads.length || !rows.length)
|
|
247
|
+
return rows;
|
|
248
|
+
for (const { name } of q.preloads) {
|
|
249
|
+
const rel = relationOf(q.model, name);
|
|
250
|
+
if (rel.kind === 'belongsTo') {
|
|
251
|
+
const ids = [...new Set(rows.map((r) => r[rel.by]).filter((v) => v != null))];
|
|
252
|
+
if (!ids.length) {
|
|
253
|
+
for (const r of rows)
|
|
254
|
+
r[name] = null;
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
const parents = await db.all(from(table(manifest, rel.target)).where(inArray({ model: rel.target, name: 'id' }, ids)));
|
|
258
|
+
const byId = new Map(parents.map((p) => [p.id, p]));
|
|
259
|
+
for (const r of rows)
|
|
260
|
+
r[name] = byId.get(r[rel.by]) ?? null;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
const ids = rows.map((r) => r.id).filter((v) => v != null);
|
|
264
|
+
if (!ids.length) {
|
|
265
|
+
for (const r of rows)
|
|
266
|
+
r[name] = [];
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
const children = await db.all(from(table(manifest, rel.target)).where(inArray({ model: rel.target, name: rel.by }, ids)));
|
|
270
|
+
const grouped = new Map();
|
|
271
|
+
for (const child of children) {
|
|
272
|
+
const key = child[rel.by];
|
|
273
|
+
const list = grouped.get(key);
|
|
274
|
+
if (list)
|
|
275
|
+
list.push(child);
|
|
276
|
+
else
|
|
277
|
+
grouped.set(key, [child]);
|
|
278
|
+
}
|
|
279
|
+
for (const r of rows)
|
|
280
|
+
r[name] = grouped.get(r.id) ?? [];
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return rows;
|
|
284
|
+
};
|
|
285
|
+
const db = {
|
|
286
|
+
async all(q) {
|
|
287
|
+
checkQuery(q);
|
|
288
|
+
const { text, params } = scoped(q).toSQL(dialect);
|
|
289
|
+
return fillPreloads(q, decodeRows(q.model, await adapter.all(text, params)));
|
|
290
|
+
},
|
|
291
|
+
async one(q) {
|
|
292
|
+
checkQuery(q);
|
|
293
|
+
const { text, params } = scoped(q).limit(1).toSQL(dialect);
|
|
294
|
+
const rows = await fillPreloads(q, decodeRows(q.model, await adapter.all(text, params)));
|
|
295
|
+
return rows[0] ?? null;
|
|
296
|
+
},
|
|
297
|
+
async count(q) {
|
|
298
|
+
const c = scoped(q).count();
|
|
299
|
+
checkQuery(c);
|
|
300
|
+
const { text, params } = c.toSQL(dialect);
|
|
301
|
+
const rows = await adapter.all(text, params);
|
|
302
|
+
return Number(rows[0].count);
|
|
303
|
+
},
|
|
304
|
+
async group(q) {
|
|
305
|
+
if (q.kind !== 'group')
|
|
306
|
+
throw new KetError({ code: 'E_NOT_A_GROUP', message: 'db.group requires query.groupBy(...)' });
|
|
307
|
+
checkQuery(q);
|
|
308
|
+
const grouped = scoped(q);
|
|
309
|
+
const { text, params } = grouped.toSQL(dialect);
|
|
310
|
+
const rows = await adapter.all(text, params);
|
|
311
|
+
return rows.map((row) => {
|
|
312
|
+
const aggregates = {};
|
|
313
|
+
for (const aggregate of grouped.aggregates)
|
|
314
|
+
aggregates[aggregate.as] = row[aggregate.as];
|
|
315
|
+
return {
|
|
316
|
+
key: grouped.groups.map((_, index) => row[`__group${index}`]),
|
|
317
|
+
count: Number(row.__count),
|
|
318
|
+
aggregates,
|
|
319
|
+
};
|
|
320
|
+
});
|
|
321
|
+
},
|
|
322
|
+
async del(q) {
|
|
323
|
+
// A select passed to del renders as a select and deletes nothing — and the
|
|
324
|
+
// effect check sees 'read', so a function that correctly declared 'write'
|
|
325
|
+
// is refused for an effect it never wanted. website_menu.removeMenuItem was
|
|
326
|
+
// written that way and had therefore never once worked.
|
|
327
|
+
if (q.kind !== 'delete') {
|
|
328
|
+
throw new KetError({
|
|
329
|
+
code: 'E_NOT_A_DELETE',
|
|
330
|
+
module: operation.by,
|
|
331
|
+
message: `"${fnKey}" passed a ${q.kind} query to db.del`,
|
|
332
|
+
hint: 'build it with deleteFrom(table), not from(table)',
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
checkQuery(q);
|
|
336
|
+
writes.push({ op: 'update', model: q.model, where: {} });
|
|
337
|
+
if (dryRun)
|
|
338
|
+
return { changes: 0 };
|
|
339
|
+
const { text, params } = scoped(q).toSQL(dialect);
|
|
340
|
+
return adapter.run(text, params);
|
|
341
|
+
},
|
|
342
|
+
async commit(cs, where) {
|
|
343
|
+
if (!cs.valid) {
|
|
344
|
+
throw new KetError({
|
|
345
|
+
code: 'E_INVALID_CHANGESET',
|
|
346
|
+
module: operation.by,
|
|
347
|
+
message: `${cs.model}: ${cs.errors.map((e) => `${e.field} ${e.message}`).join('; ')}`,
|
|
348
|
+
hint: 'inspect changeset.errors for the structured form',
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
if (cs.action === 'insert')
|
|
352
|
+
return (await db.insert(cs.model, cs.changes));
|
|
353
|
+
if (!where)
|
|
354
|
+
throw new KetError({
|
|
355
|
+
code: 'E_UPDATE_NEEDS_WHERE',
|
|
356
|
+
message: `updating ${cs.model} requires a where clause`,
|
|
357
|
+
});
|
|
358
|
+
if (!Object.keys(cs.changes).length)
|
|
359
|
+
return { changes: 0 };
|
|
360
|
+
return (await db.update(cs.model, where, cs.changes));
|
|
361
|
+
},
|
|
362
|
+
async select(model, where = {}) {
|
|
363
|
+
need('read', model);
|
|
364
|
+
const t = adapter.quoteIdent(tableNameFor(model));
|
|
365
|
+
const open = scopeOf(model) === 'shared' || operation.crossCompany;
|
|
366
|
+
const keys = Object.keys(where);
|
|
367
|
+
fresh();
|
|
368
|
+
const conds = keys.map((k) => `${adapter.quoteIdent(k)} = ${ph()}`);
|
|
369
|
+
const params = keys.map((k) => where[k]);
|
|
370
|
+
if (!open) {
|
|
371
|
+
// A set, not a value: this is the one place the convenience path has to
|
|
372
|
+
// part company with a plain `column = ?` map.
|
|
373
|
+
const cs = readCompanies(model);
|
|
374
|
+
conds.push(`${adapter.quoteIdent('companyId')} IN (${cs.map(() => ph()).join(', ')})`);
|
|
375
|
+
params.push(...cs);
|
|
376
|
+
}
|
|
377
|
+
const sql = `SELECT * FROM ${t}` + (conds.length ? ` WHERE ${conds.join(' AND ')}` : '');
|
|
378
|
+
return decodeRows(model, await adapter.all(sql, params));
|
|
379
|
+
},
|
|
380
|
+
async insert(model, row) {
|
|
381
|
+
need('write', model);
|
|
382
|
+
const known = Object.keys(manifest.models[model]?.fields ?? {});
|
|
383
|
+
const unknown = Object.keys(row).filter((k) => !known.includes(k));
|
|
384
|
+
if (unknown.length) {
|
|
385
|
+
throw new KetError({
|
|
386
|
+
code: 'E_UNKNOWN_FIELD',
|
|
387
|
+
message: `${model} has no field(s): ${unknown.join(', ')}`,
|
|
388
|
+
hint: `fields: ${known.join(', ')}`,
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
const stamped = encodeRow(model, stamp(model, timestamped(model, row, 'insert')));
|
|
392
|
+
writes.push({ op: 'insert', model, row: stamped });
|
|
393
|
+
if (dryRun)
|
|
394
|
+
return { dryRun: true };
|
|
395
|
+
const ks = Object.keys(stamped);
|
|
396
|
+
fresh();
|
|
397
|
+
const sql = `INSERT INTO ${adapter.quoteIdent(tableNameFor(model))} (${ks.map((k) => adapter.quoteIdent(k)).join(', ')}) VALUES (${ks.map(() => ph()).join(', ')})`;
|
|
398
|
+
return adapter.run(sql, ks.map((k) => stamped[k]));
|
|
399
|
+
},
|
|
400
|
+
async insertIfAbsent(model, row) {
|
|
401
|
+
need('write', model);
|
|
402
|
+
const known = Object.keys(manifest.models[model]?.fields ?? {});
|
|
403
|
+
const unknown = Object.keys(row).filter((k) => !known.includes(k));
|
|
404
|
+
if (unknown.length) {
|
|
405
|
+
throw new KetError({
|
|
406
|
+
code: 'E_UNKNOWN_FIELD',
|
|
407
|
+
message: `${model} has no field(s): ${unknown.join(', ')}`,
|
|
408
|
+
hint: `fields: ${known.join(', ')}`,
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
const stamped = encodeRow(model, stamp(model, timestamped(model, row, 'insert')));
|
|
412
|
+
writes.push({ op: 'insert', model, row: stamped });
|
|
413
|
+
if (dryRun)
|
|
414
|
+
return { dryRun: true };
|
|
415
|
+
const ks = Object.keys(stamped);
|
|
416
|
+
fresh();
|
|
417
|
+
const sql = `INSERT INTO ${adapter.quoteIdent(tableNameFor(model))} (${ks.map((k) => adapter.quoteIdent(k)).join(', ')}) VALUES (${ks.map(() => ph()).join(', ')}) ON CONFLICT DO NOTHING`;
|
|
418
|
+
const result = await adapter.run(sql, ks.map((k) => stamped[k]));
|
|
419
|
+
return { changes: result.changes, inserted: result.changes === 1 };
|
|
420
|
+
},
|
|
421
|
+
async update(model, where, patch) {
|
|
422
|
+
need('write', model);
|
|
423
|
+
writes.push({ op: 'update', model, where, patch });
|
|
424
|
+
if (dryRun)
|
|
425
|
+
return { dryRun: true };
|
|
426
|
+
const where3 = encodeRow(model, scopeOf(model) === 'shared' || operation.crossCompany
|
|
427
|
+
? where
|
|
428
|
+
: { ...where, companyId: requireCompany(model) });
|
|
429
|
+
const patch2 = encodeRow(model, timestamped(model, patch, 'update'));
|
|
430
|
+
const pk = Object.keys(patch2), wk = Object.keys(where3);
|
|
431
|
+
fresh();
|
|
432
|
+
const sets = pk.map((k) => `${adapter.quoteIdent(k)} = ${ph()}`).join(', ');
|
|
433
|
+
const boundWhere = wk.filter((k) => where3[k] !== null);
|
|
434
|
+
const conds = wk
|
|
435
|
+
.map((k) => where3[k] === null ? `${adapter.quoteIdent(k)} IS NULL` : `${adapter.quoteIdent(k)} = ${ph()}`)
|
|
436
|
+
.join(' AND ');
|
|
437
|
+
const sql = `UPDATE ${adapter.quoteIdent(tableNameFor(model))} SET ${sets}` + (wk.length ? ` WHERE ${conds}` : '');
|
|
438
|
+
return adapter.run(sql, [...pk.map((k) => patch2[k]), ...boundWhere.map((k) => where3[k])]);
|
|
439
|
+
},
|
|
440
|
+
async compareAndSet(model, where, expected, patch) {
|
|
441
|
+
const result = await db.update(model, { ...expected, ...where }, patch);
|
|
442
|
+
if ('dryRun' in result)
|
|
443
|
+
return result;
|
|
444
|
+
return { changes: result.changes, matched: result.changes === 1 };
|
|
445
|
+
},
|
|
446
|
+
};
|
|
447
|
+
const ctx = {
|
|
448
|
+
fnKey,
|
|
449
|
+
manifest,
|
|
450
|
+
scope,
|
|
451
|
+
actor: o.actor ?? null,
|
|
452
|
+
dryRun,
|
|
453
|
+
db,
|
|
454
|
+
writes,
|
|
455
|
+
effects: [...effects],
|
|
456
|
+
jobs: {
|
|
457
|
+
async enqueue(name, args, options) {
|
|
458
|
+
const meta = manifest.jobs[name];
|
|
459
|
+
if (!meta)
|
|
460
|
+
throw new KetError({ code: 'E_UNKNOWN_JOB', message: `no background job "${name}"` });
|
|
461
|
+
need('enqueue', name);
|
|
462
|
+
if (manifest.disabledModules?.includes(meta.by)) {
|
|
463
|
+
throw new KetError({
|
|
464
|
+
code: 'E_APP_NOT_INSTALLED',
|
|
465
|
+
module: meta.by,
|
|
466
|
+
message: `job "${name}" belongs to a module that is not installed`,
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
validateJobInput(name, manifest, args);
|
|
470
|
+
const queue = o.queueNotify === undefined
|
|
471
|
+
? await queueFor(adapter)
|
|
472
|
+
: await createQueue(adapter, { notify: o.queueNotify });
|
|
473
|
+
return queue.enqueue(name, args, {
|
|
474
|
+
...options,
|
|
475
|
+
queue: meta.queue,
|
|
476
|
+
maxAttempts: meta.maxAttempts,
|
|
477
|
+
actor: o.actor ?? null,
|
|
478
|
+
scope,
|
|
479
|
+
});
|
|
480
|
+
},
|
|
481
|
+
},
|
|
482
|
+
// A transaction hands the body a ctx bound to the transaction's connection —
|
|
483
|
+
// the same reason tx() takes a scoped adapter rather than assuming the pool
|
|
484
|
+
// will hand back the session that issued BEGIN.
|
|
485
|
+
tx: async (body) => {
|
|
486
|
+
const transactionWrites = [];
|
|
487
|
+
const value = await adapter.tx((txAdapter) => body(createContext({ ...o, adapter: txAdapter, writes: transactionWrites })));
|
|
488
|
+
writes.push(...transactionWrites);
|
|
489
|
+
return value;
|
|
490
|
+
},
|
|
491
|
+
table: (model) => table(manifest, model),
|
|
492
|
+
change: (model, params, base = null) => changeset(manifest, model, params, base),
|
|
493
|
+
};
|
|
494
|
+
return ctx;
|
|
495
|
+
}
|
|
496
|
+
//# sourceMappingURL=ctx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ctx.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/server/ctx.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Adapter, FnSpec, KetModule, Manifest, WriteRecord } from '../types.ts';
|
|
2
|
+
export type CallResult = {
|
|
3
|
+
ok: true;
|
|
4
|
+
value: unknown;
|
|
5
|
+
writes: WriteRecord[];
|
|
6
|
+
dryRun: boolean;
|
|
7
|
+
replayed?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare function defineFn(spec: FnSpec): FnSpec;
|
|
10
|
+
export declare function registerFunctions(modules: KetModule[]): Map<string, FnSpec>;
|
|
11
|
+
export declare function validateInput(fnKey: string, manifest: Manifest, args: Record<string, unknown>): void;
|
|
12
|
+
export declare const _resetIdempotency: () => void;
|
|
13
|
+
export declare function callFn(fnKey: string, args: Record<string, unknown>, o: {
|
|
14
|
+
adapter: Adapter;
|
|
15
|
+
manifest: Manifest;
|
|
16
|
+
dryRun?: boolean;
|
|
17
|
+
actor?: string | null;
|
|
18
|
+
idempotencyKey?: string | null;
|
|
19
|
+
scope?: import('../types.ts').Scope;
|
|
20
|
+
/**
|
|
21
|
+
* The functions this caller may invoke. Undefined or null means unrestricted,
|
|
22
|
+
* which is what an internal call, a migration or a test is — the check exists
|
|
23
|
+
* for requests carrying an identity, and a caller with no identity has no
|
|
24
|
+
* business being narrowed by one.
|
|
25
|
+
*
|
|
26
|
+
* A list rather than a predicate so that it can be printed, diffed and stored.
|
|
27
|
+
* The framework enforces it; which list a user gets is the app's decision, the
|
|
28
|
+
* same split as the datastore driver.
|
|
29
|
+
*/
|
|
30
|
+
allow?: readonly string[] | null;
|
|
31
|
+
/** Runtime override for the optional queue wake-up signal. */
|
|
32
|
+
queueNotify?: boolean;
|
|
33
|
+
}): Promise<CallResult>;
|
|
34
|
+
//# sourceMappingURL=fn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fn.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/server/fn.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAO,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzF,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,IAAI,CAAA;IACR,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAID,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI7C;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAK3E;AAgBD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAiCpG;AAeD,eAAO,MAAM,iBAAiB,QAAO,IAEpC,CAAA;AAED,wBAAsB,MAAM,CAC1B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,CAAC,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,KAAK,CAAC,EAAE,OAAO,aAAa,EAAE,KAAK,CAAA;IACnC;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IAChC,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,GACA,OAAO,CAAC,UAAU,CAAC,CAyFrB"}
|