@mybuildex/pkg 0.10.2 → 0.11.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.
@@ -0,0 +1,328 @@
1
+ "use strict";
2
+ // Replicação matriz -> filiais (governança de rede; ver context.ts).
3
+ //
4
+ // Tudo o que a MATRIZ grava numa tabela do catálogo de módulos da rede é
5
+ // espelhado nas filiais — os bancos das escolas têm as mesmas tabelas. Em vez
6
+ // de repetir cada operação do Prisma em cada filial (ids divergiriam, e
7
+ // update/delete por id acertariam a linha errada), a réplica copia o ESTADO
8
+ // final das linhas tocadas, pela chave primária:
9
+ //
10
+ // 1. durante a request, o client da matriz (proxy de trackWrites) anota a
11
+ // chave de cada linha escrita: pelo resultado (create/update/upsert/
12
+ // delete), por uma leitura antes da escrita (where de update/delete e
13
+ // das variantes *Many) ou, no createMany (o MySQL não devolve os ids),
14
+ // por uma busca depois com os mesmos valores gravados;
15
+ // 2. no fim da request (onSend, ANTES da resposta sair), syncWrites roda numa
16
+ // ÚNICA transação, para cada filial:
17
+ // DELETE das linhas que não existem mais na matriz
18
+ // INSERT ... SELECT da matriz ... ON DUPLICATE KEY UPDATE
19
+ // com o mesmo id da matriz. Falha em qualquer filial desfaz a réplica em
20
+ // todas (a escrita na matriz já foi gravada).
21
+ //
22
+ // Por copiar o estado (e não a operação), a réplica é idempotente e também
23
+ // cobre escrita dentro de $transaction (o estado lido já é o confirmado).
24
+ //
25
+ // Limitações: SQL cru ($executeRaw) na matriz não é capturado; escrita
26
+ // aninhada em relação (data: {filhos: {create}}) só replica a tabela do model
27
+ // chamado.
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.NetworkWrites = exports.MAX_TRACKED_ROWS = exports.PROTECTED_ROWS = exports.NEVER_REPLICATED = exports.NETWORK_WRITE_OPERATIONS = void 0;
30
+ exports.createTableMetaCache = createTableMetaCache;
31
+ exports.flattenWhere = flattenWhere;
32
+ exports.trackWrites = trackWrites;
33
+ exports.buildSyncStatements = buildSyncStatements;
34
+ exports.syncWrites = syncWrites;
35
+ /** Escritas do Prisma que a réplica acompanha (as mesmas da auditoria). */
36
+ exports.NETWORK_WRITE_OPERATIONS = new Set([
37
+ "create", "createMany", "createManyAndReturn",
38
+ "update", "updateMany", "updateManyAndReturn",
39
+ "upsert", "delete", "deleteMany",
40
+ ]);
41
+ /** Leitura da chave antes de escrever (where de update/delete/upsert/*Many). */
42
+ const READ_KEYS_BEFORE = new Set(["update", "updateMany", "updateManyAndReturn", "upsert", "delete", "deleteMany"]);
43
+ /** Tabelas nunca replicadas, mesmo no catálogo. */
44
+ exports.NEVER_REPLICATED = new Set(["audit_logs", "migrations"]);
45
+ /**
46
+ * Linhas que pertencem a cada escola e nunca são copiadas nem apagadas pela
47
+ * réplica: a flag REDE é gravada pelo core em cada membro.
48
+ */
49
+ exports.PROTECTED_ROWS = {
50
+ configs: { column: "key", value: "REDE" },
51
+ };
52
+ /** Teto de linhas por escrita *Many acompanhada. */
53
+ exports.MAX_TRACKED_ROWS = 5000;
54
+ const CHUNK = 500;
55
+ const IDENT_RE = /^[A-Za-z0-9_]+$/;
56
+ function q(ident) {
57
+ if (!IDENT_RE.test(ident))
58
+ throw new Error(`identificador inválido: ${ident}`);
59
+ return `\`${ident}\``;
60
+ }
61
+ function isPlainObject(v) {
62
+ return !!v && typeof v === "object" && !Array.isArray(v) && !(v instanceof Date) && Object.getPrototypeOf(v) === Object.prototype;
63
+ }
64
+ function isPrimitive(v) {
65
+ return v === null || ["string", "number", "bigint", "boolean"].includes(typeof v);
66
+ }
67
+ /**
68
+ * Colunas e chave primária da tabela (information_schema). As tabelas são as
69
+ * mesmas em todas as escolas: cache por tabela, para a vida da instância.
70
+ */
71
+ function createTableMetaCache() {
72
+ const cache = new Map();
73
+ return function tableMeta(db, schema, table) {
74
+ let hit = cache.get(table);
75
+ if (!hit) {
76
+ hit = (async () => {
77
+ const rows = await db.$queryRawUnsafe("SELECT COLUMN_NAME AS name, COLUMN_KEY AS col_key, EXTRA AS extra FROM information_schema.COLUMNS" +
78
+ " WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? ORDER BY ORDINAL_POSITION", schema, table);
79
+ const columns = rows.filter(r => !/GENERATED/i.test(String(r.extra ?? ""))).map(r => String(r.name));
80
+ const pk = rows.filter(r => String(r.col_key) === "PRI").map(r => String(r.name));
81
+ if (!columns.length)
82
+ throw new Error(`tabela ${schema}.${table} não encontrada`);
83
+ if (!pk.length)
84
+ throw new Error(`tabela ${table} sem chave primária: não dá para replicar`);
85
+ return { columns, pk };
86
+ })();
87
+ cache.set(table, hit);
88
+ hit.catch(() => cache.delete(table));
89
+ }
90
+ return hit;
91
+ };
92
+ }
93
+ function keyOf(row, pk) {
94
+ if (!row || typeof row !== "object")
95
+ return null;
96
+ const key = {};
97
+ for (const c of pk) {
98
+ const v = row[c];
99
+ if (v === undefined || v === null || typeof v === "object")
100
+ return null;
101
+ key[c] = v;
102
+ }
103
+ return key;
104
+ }
105
+ function keyString(key, pk) {
106
+ return pk.map(c => String(key[c])).join("\u0000");
107
+ }
108
+ /**
109
+ * where do Prisma -> where de findMany: chave única composta
110
+ * (`{a_b: {a, b}}`) vira `{a, b}`; o resto passa igual.
111
+ */
112
+ function flattenWhere(where, meta) {
113
+ const out = {};
114
+ for (const [k, v] of Object.entries(where ?? {})) {
115
+ if (!meta.columns.includes(k) && isPlainObject(v) && Object.keys(v).length > 0 && Object.keys(v).every(c => meta.columns.includes(c))) {
116
+ Object.assign(out, v);
117
+ }
118
+ else {
119
+ out[k] = v;
120
+ }
121
+ }
122
+ return out;
123
+ }
124
+ /** Valores simples gravados numa linha (para reencontrá-la depois do createMany). */
125
+ function lookupWhere(data, meta) {
126
+ const where = {};
127
+ for (const [k, v] of Object.entries(data ?? {})) {
128
+ if (meta.columns.includes(k) && isPrimitive(v))
129
+ where[k] = v;
130
+ }
131
+ return Object.keys(where).length ? where : null;
132
+ }
133
+ /** Linhas tocadas pela request na matriz, por tabela, na ordem da primeira escrita. */
134
+ class NetworkWrites {
135
+ tables = [];
136
+ keys = new Map();
137
+ lookups = new Map();
138
+ touch(table) {
139
+ if (!this.keys.has(table)) {
140
+ this.tables.push(table);
141
+ this.keys.set(table, new Map());
142
+ this.lookups.set(table, []);
143
+ }
144
+ }
145
+ addKey(table, key, pk) {
146
+ this.touch(table);
147
+ this.keys.get(table).set(keyString(key, pk), key);
148
+ }
149
+ addLookup(table, where) {
150
+ this.touch(table);
151
+ this.lookups.get(table).push(where);
152
+ }
153
+ get empty() {
154
+ return this.tables.length === 0;
155
+ }
156
+ }
157
+ exports.NetworkWrites = NetworkWrites;
158
+ async function trackOperation(table, op, args, run, opts) {
159
+ const meta = await opts.meta(table);
160
+ const { writes, base } = opts;
161
+ if (READ_KEYS_BEFORE.has(op)) {
162
+ const where = flattenWhere(args?.where, meta);
163
+ const select = Object.fromEntries(meta.pk.map(c => [c, true]));
164
+ const before = await base[table].findMany({ where, select, take: exports.MAX_TRACKED_ROWS });
165
+ for (const row of before) {
166
+ const key = keyOf(row, meta.pk);
167
+ if (key)
168
+ writes.addKey(table, key, meta.pk);
169
+ }
170
+ }
171
+ const result = await run(args);
172
+ // *Many devolve {count}: sem a chave, keyOf descarta
173
+ const rows = Array.isArray(result) ? result : result && typeof result === "object" ? [result] : [];
174
+ let found = false;
175
+ for (const row of rows) {
176
+ const key = keyOf(row, meta.pk);
177
+ if (key) {
178
+ writes.addKey(table, key, meta.pk);
179
+ found = true;
180
+ }
181
+ }
182
+ if (!found && (op === "create" || op === "createMany")) {
183
+ // createMany não devolve linhas; create com select sem a chave também não
184
+ const list = op === "create" ? [args?.data] : Array.isArray(args?.data) ? args.data : [args?.data];
185
+ for (const data of list) {
186
+ const key = keyOf(data, meta.pk);
187
+ if (key) {
188
+ writes.addKey(table, key, meta.pk);
189
+ continue;
190
+ }
191
+ const where = lookupWhere(data, meta);
192
+ if (where)
193
+ writes.addLookup(table, where);
194
+ }
195
+ }
196
+ return result;
197
+ }
198
+ function bindValue(target, prop) {
199
+ const v = Reflect.get(target, prop);
200
+ return typeof v === "function" ? v.bind(target) : v;
201
+ }
202
+ function trackDelegate(delegate, table, opts) {
203
+ return new Proxy(delegate, {
204
+ get(target, prop) {
205
+ const fn = bindValue(target, prop);
206
+ if (typeof prop !== "string" || typeof fn !== "function" || !exports.NETWORK_WRITE_OPERATIONS.has(prop))
207
+ return fn;
208
+ return (args) => trackOperation(table, prop, args, fn, opts);
209
+ },
210
+ });
211
+ }
212
+ /**
213
+ * Client da matriz que anota as escritas nas tabelas replicadas. Leitura, SQL
214
+ * cru e tabelas fora do catálogo passam direto. $transaction interativa
215
+ * recebe um tx também acompanhado.
216
+ */
217
+ function trackWrites(client, opts) {
218
+ return new Proxy(client, {
219
+ get(target, prop) {
220
+ if (prop === "$transaction") {
221
+ const tx = bindValue(target, prop);
222
+ return (arg, txOptions) => typeof arg === "function"
223
+ ? tx((inner) => arg(trackWrites(inner, opts)), txOptions)
224
+ : tx(arg, txOptions);
225
+ }
226
+ if (typeof prop === "string" && opts.tables.has(prop) && !exports.NEVER_REPLICATED.has(prop)) {
227
+ return trackDelegate(Reflect.get(target, prop), prop, opts);
228
+ }
229
+ return bindValue(target, prop);
230
+ },
231
+ });
232
+ }
233
+ function keyCondition(alias, pk, keys) {
234
+ if (pk.length === 1) {
235
+ return { sql: `${alias}.${q(pk[0])} IN (${keys.map(() => "?").join(", ")})`, params: keys.map(k => k[pk[0]]) };
236
+ }
237
+ const tuple = `(${pk.map(() => "?").join(", ")})`;
238
+ return {
239
+ sql: `(${pk.map(c => `${alias}.${q(c)}`).join(", ")}) IN (${keys.map(() => tuple).join(", ")})`,
240
+ params: keys.flatMap(k => pk.map(c => k[c])),
241
+ };
242
+ }
243
+ function samePk(a, b, pk) {
244
+ return pk.map(c => `${a}.${q(c)} = ${b}.${q(c)}`).join(" AND ");
245
+ }
246
+ /**
247
+ * SQL que deixa as linhas `keys` de `table` na filial iguais às da matriz:
248
+ * apaga as que sumiram da matriz e insere/atualiza as demais com o mesmo id.
249
+ */
250
+ function buildSyncStatements(source, target, table, meta, keys) {
251
+ const src = `${q(source)}.${q(table)}`;
252
+ const dst = `${q(target)}.${q(table)}`;
253
+ const cols = meta.columns.map(q);
254
+ const update = meta.columns.filter(c => !meta.pk.includes(c)).map(c => `${q(c)} = VALUES(${q(c)})`);
255
+ const guard = exports.PROTECTED_ROWS[table];
256
+ const deletes = [];
257
+ const upserts = [];
258
+ for (let i = 0; i < keys.length; i += CHUNK) {
259
+ const chunk = keys.slice(i, i + CHUNK);
260
+ const dk = keyCondition("dst", meta.pk, chunk);
261
+ // DELETE de tabela única com alias (MySQL 8.0.16+): o multi-tabela
262
+ // (`DELETE dst FROM ... AS dst`) exige database default, e o pool não tem
263
+ const del = {
264
+ sql: `DELETE FROM ${dst} AS dst WHERE ${dk.sql}` +
265
+ (guard ? ` AND NOT (dst.${q(guard.column)} <=> ?)` : "") +
266
+ ` AND NOT EXISTS (SELECT 1 FROM ${src} AS src WHERE ${samePk("src", "dst", meta.pk)})`,
267
+ params: [...dk.params, ...(guard ? [guard.value] : [])],
268
+ };
269
+ deletes.push(del);
270
+ const sk = keyCondition("src", meta.pk, chunk);
271
+ const head = update.length ? `INSERT INTO ${dst}` : `INSERT IGNORE INTO ${dst}`;
272
+ upserts.push({
273
+ sql: `${head} (${cols.join(", ")}) SELECT ${cols.map(c => `src.${c}`).join(", ")} FROM ${src} AS src WHERE ${sk.sql}` +
274
+ (guard
275
+ ? ` AND NOT (src.${q(guard.column)} <=> ?)` +
276
+ ` AND NOT EXISTS (SELECT 1 FROM ${dst} AS cur WHERE ${samePk("cur", "src", meta.pk)} AND cur.${q(guard.column)} <=> ?)`
277
+ : "") +
278
+ (update.length ? ` ON DUPLICATE KEY UPDATE ${update.join(", ")}` : ""),
279
+ params: [...sk.params, ...(guard ? [guard.value, guard.value] : [])],
280
+ });
281
+ }
282
+ return { deletes, upserts };
283
+ }
284
+ /**
285
+ * Copia para cada filial as linhas anotadas em `writes`, numa transação só.
286
+ * `db` executa o SQL (qualquer client do pool serve: todo nome é qualificado)
287
+ * e `base` reencontra as linhas do createMany na matriz.
288
+ */
289
+ async function syncWrites(input) {
290
+ const { db, base, source, targets, writes, meta } = input;
291
+ const result = { tables: {}, filiais: targets, statements: 0 };
292
+ const perTable = [];
293
+ for (const table of writes.tables) {
294
+ const m = await meta(table);
295
+ const lookups = writes.lookups.get(table) ?? [];
296
+ for (let i = 0; i < lookups.length; i += CHUNK) {
297
+ const select = Object.fromEntries(m.pk.map(c => [c, true]));
298
+ const found = await base[table].findMany({ where: { OR: lookups.slice(i, i + CHUNK) }, select, take: exports.MAX_TRACKED_ROWS });
299
+ for (const row of found) {
300
+ const key = keyOf(row, m.pk);
301
+ if (key)
302
+ writes.addKey(table, key, m.pk);
303
+ }
304
+ }
305
+ const keys = [...(writes.keys.get(table)?.values() ?? [])];
306
+ if (keys.length)
307
+ perTable.push({ table, meta: m, keys });
308
+ result.tables[table] = keys.length;
309
+ }
310
+ if (!perTable.length || !targets.length)
311
+ return result;
312
+ const statements = [];
313
+ for (const target of targets) {
314
+ const built = perTable.map(t => buildSyncStatements(source, target, t.table, t.meta, t.keys));
315
+ // filhos antes dos pais ao apagar; pais antes dos filhos ao inserir (FKs)
316
+ for (const b of [...built].reverse())
317
+ statements.push(...b.deletes);
318
+ for (const b of built)
319
+ statements.push(...b.upserts);
320
+ }
321
+ await db.$transaction(async (tx) => {
322
+ for (const s of statements)
323
+ await tx.$executeRawUnsafe(s.sql, ...s.params);
324
+ });
325
+ result.statements = statements.length;
326
+ return result;
327
+ }
328
+ //# sourceMappingURL=replication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replication.js","sourceRoot":"","sources":["../../src/network/replication.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mybuildex/pkg",
3
- "version": "0.10.2",
3
+ "version": "0.11.0",
4
4
  "description": "Infra comum das APIs MyBuilder: multitenancy Prisma (pool único), middleware de tenant e CORS",
5
5
  "license": "MIT",
6
6
  "repository": {