@absolutejs/sync 0.10.0 → 0.12.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/README.md +50 -46
- package/dist/angular/index.js +269 -1
- package/dist/angular/index.js.map +7 -5
- package/dist/angular/sync-collection.service.d.ts +14 -0
- package/dist/client/collaborativeText.d.ts +51 -0
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.js +246 -2
- package/dist/client/index.js.map +5 -3
- package/dist/crdt/index.d.ts +21 -4
- package/dist/crdt/index.js +12 -3
- package/dist/crdt/index.js.map +3 -3
- package/dist/engine/index.d.ts +2 -1
- package/dist/engine/index.js +45 -12
- package/dist/engine/index.js.map +3 -3
- package/dist/engine/syncEngine.d.ts +20 -0
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.js +270 -2
- package/dist/react/index.js.map +7 -4
- package/dist/react/useCollaborativeText.d.ts +17 -0
- package/dist/svelte/createCollaborativeTextStore.d.ts +15 -0
- package/dist/svelte/index.d.ts +1 -0
- package/dist/svelte/index.js +279 -2
- package/dist/svelte/index.js.map +7 -4
- package/dist/vue/index.d.ts +1 -0
- package/dist/vue/index.js +273 -2
- package/dist/vue/index.js.map +7 -4
- package/dist/vue/useCollaborativeText.d.ts +18 -0
- package/package.json +1 -1
package/dist/engine/index.js
CHANGED
|
@@ -1093,6 +1093,7 @@ var createSyncEngine = (options = {}) => {
|
|
|
1093
1093
|
for (const [table, schema] of Object.entries(options.schemas ?? {})) {
|
|
1094
1094
|
schemas.set(table, schema);
|
|
1095
1095
|
}
|
|
1096
|
+
const crdtFields = new Map;
|
|
1096
1097
|
const validateWrite = (table, op, row) => {
|
|
1097
1098
|
const schema = schemas.get(table);
|
|
1098
1099
|
if (schema === undefined || typeof row !== "object" || row === null) {
|
|
@@ -1298,6 +1299,14 @@ var createSyncEngine = (options = {}) => {
|
|
|
1298
1299
|
}
|
|
1299
1300
|
return writer;
|
|
1300
1301
|
};
|
|
1302
|
+
const readExisting = async (table, value, ctx) => {
|
|
1303
|
+
const reader = readers.get(table);
|
|
1304
|
+
if (reader?.get === undefined) {
|
|
1305
|
+
return;
|
|
1306
|
+
}
|
|
1307
|
+
const id = reader.key ? reader.key(value) : value.id;
|
|
1308
|
+
return id === undefined ? undefined : reader.get(id, ctx);
|
|
1309
|
+
};
|
|
1301
1310
|
const authorizeWrite = async (table, op, value, ctx) => {
|
|
1302
1311
|
const rule = writeRuleFor(table, op);
|
|
1303
1312
|
if (rule === undefined) {
|
|
@@ -1305,21 +1314,32 @@ var createSyncEngine = (options = {}) => {
|
|
|
1305
1314
|
}
|
|
1306
1315
|
let subject = value;
|
|
1307
1316
|
if (op !== "insert") {
|
|
1308
|
-
const
|
|
1309
|
-
if (
|
|
1310
|
-
|
|
1311
|
-
if (id !== undefined) {
|
|
1312
|
-
const existing = await reader.get(id, ctx);
|
|
1313
|
-
if (existing !== undefined) {
|
|
1314
|
-
subject = existing;
|
|
1315
|
-
}
|
|
1316
|
-
}
|
|
1317
|
+
const existing = await readExisting(table, value, ctx);
|
|
1318
|
+
if (existing !== undefined) {
|
|
1319
|
+
subject = existing;
|
|
1317
1320
|
}
|
|
1318
1321
|
}
|
|
1319
1322
|
if (!rule(ctx, subject)) {
|
|
1320
1323
|
throw new UnauthorizedError(`${op} on table "${table}"`);
|
|
1321
1324
|
}
|
|
1322
1325
|
};
|
|
1326
|
+
const mergeCrdtFields = async (table, op, data, ctx) => {
|
|
1327
|
+
const fields = crdtFields.get(table);
|
|
1328
|
+
if (fields === undefined || data === null || typeof data !== "object") {
|
|
1329
|
+
return data;
|
|
1330
|
+
}
|
|
1331
|
+
const incoming = data;
|
|
1332
|
+
const existing = op === "update" ? await readExisting(table, data, ctx) : undefined;
|
|
1333
|
+
const base = existing !== null && typeof existing === "object" ? existing : undefined;
|
|
1334
|
+
const merged = { ...incoming };
|
|
1335
|
+
for (const [field, adapter] of Object.entries(fields)) {
|
|
1336
|
+
if (incoming[field] === undefined) {
|
|
1337
|
+
continue;
|
|
1338
|
+
}
|
|
1339
|
+
merged[field] = adapter.merge(base?.[field] ?? adapter.empty(), incoming[field]);
|
|
1340
|
+
}
|
|
1341
|
+
return merged;
|
|
1342
|
+
};
|
|
1323
1343
|
const makeActions = (tx, ctx, enforce) => {
|
|
1324
1344
|
const buffered = [];
|
|
1325
1345
|
const actions = {
|
|
@@ -1335,7 +1355,8 @@ var createSyncEngine = (options = {}) => {
|
|
|
1335
1355
|
if (enforce) {
|
|
1336
1356
|
await authorizeWrite(table, "insert", data, ctx);
|
|
1337
1357
|
}
|
|
1338
|
-
const
|
|
1358
|
+
const merged = await mergeCrdtFields(table, "insert", data, ctx);
|
|
1359
|
+
const row = await writerFor(table).insert(merged, ctx, tx);
|
|
1339
1360
|
buffered.push({ table, change: { op: "insert", row } });
|
|
1340
1361
|
return row;
|
|
1341
1362
|
},
|
|
@@ -1344,7 +1365,8 @@ var createSyncEngine = (options = {}) => {
|
|
|
1344
1365
|
if (enforce) {
|
|
1345
1366
|
await authorizeWrite(table, "update", data, ctx);
|
|
1346
1367
|
}
|
|
1347
|
-
const
|
|
1368
|
+
const merged = await mergeCrdtFields(table, "update", data, ctx);
|
|
1369
|
+
const row = await writerFor(table).update(merged, ctx, tx);
|
|
1348
1370
|
buffered.push({ table, change: { op: "update", row } });
|
|
1349
1371
|
return row;
|
|
1350
1372
|
},
|
|
@@ -1868,6 +1890,17 @@ var createSyncEngine = (options = {}) => {
|
|
|
1868
1890
|
registerSchema: (table, schema) => {
|
|
1869
1891
|
schemas.set(table, schema);
|
|
1870
1892
|
},
|
|
1893
|
+
registerCrdt: (table, fields) => {
|
|
1894
|
+
crdtFields.set(table, fields);
|
|
1895
|
+
const name = `${table}:merge`;
|
|
1896
|
+
mutations.set(name, {
|
|
1897
|
+
handler: async (args, ctx, actions) => {
|
|
1898
|
+
const existing = await readExisting(table, args, ctx);
|
|
1899
|
+
return existing === undefined ? actions.insert(table, args) : actions.update(table, args);
|
|
1900
|
+
},
|
|
1901
|
+
name
|
|
1902
|
+
});
|
|
1903
|
+
},
|
|
1871
1904
|
migrate: (table, row) => migrateRow(table, row),
|
|
1872
1905
|
runMutation: async (name, args, ctx) => {
|
|
1873
1906
|
const mutation = mutations.get(name);
|
|
@@ -2258,5 +2291,5 @@ export {
|
|
|
2258
2291
|
SEARCH_SCORE_FIELD
|
|
2259
2292
|
};
|
|
2260
2293
|
|
|
2261
|
-
//# debugId=
|
|
2294
|
+
//# debugId=50FA0D17837EB63364756E2164756E21
|
|
2262
2295
|
//# sourceMappingURL=index.js.map
|