jazz-tools 0.20.0 → 0.20.2

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.
Files changed (146) hide show
  1. package/.turbo/turbo-build.log +56 -56
  2. package/CHANGELOG.md +21 -0
  3. package/dist/{chunk-3CAPPS2F.js → chunk-Q5RNSSUM.js} +269 -95
  4. package/dist/chunk-Q5RNSSUM.js.map +1 -0
  5. package/dist/chunk-ZQWSQH6L.js +20 -0
  6. package/dist/index.js +2 -2
  7. package/dist/inspector/{chunk-MCTB5ZJC.js → chunk-6JPVMI3V.js} +302 -182
  8. package/dist/inspector/chunk-6JPVMI3V.js.map +1 -0
  9. package/dist/inspector/{custom-element-5YWVZBWA.js → custom-element-PWRX4VCA.js} +1337 -206
  10. package/dist/inspector/custom-element-PWRX4VCA.js.map +1 -0
  11. package/dist/inspector/in-app.d.ts +1 -0
  12. package/dist/inspector/in-app.d.ts.map +1 -1
  13. package/dist/inspector/index.d.ts +1 -0
  14. package/dist/inspector/index.d.ts.map +1 -1
  15. package/dist/inspector/index.js +1044 -17
  16. package/dist/inspector/index.js.map +1 -1
  17. package/dist/inspector/pages/home.d.ts +4 -1
  18. package/dist/inspector/pages/home.d.ts.map +1 -1
  19. package/dist/inspector/pages/performance/PerformancePage.d.ts +7 -0
  20. package/dist/inspector/pages/performance/PerformancePage.d.ts.map +1 -0
  21. package/dist/inspector/pages/performance/SubscriptionDetailPanel.d.ts +8 -0
  22. package/dist/inspector/pages/performance/SubscriptionDetailPanel.d.ts.map +1 -0
  23. package/dist/inspector/pages/performance/SubscriptionRow.d.ts +11 -0
  24. package/dist/inspector/pages/performance/SubscriptionRow.d.ts.map +1 -0
  25. package/dist/inspector/pages/performance/Timeline.d.ts +12 -0
  26. package/dist/inspector/pages/performance/Timeline.d.ts.map +1 -0
  27. package/dist/inspector/pages/performance/helpers.d.ts +5 -0
  28. package/dist/inspector/pages/performance/helpers.d.ts.map +1 -0
  29. package/dist/inspector/pages/performance/index.d.ts +3 -0
  30. package/dist/inspector/pages/performance/index.d.ts.map +1 -0
  31. package/dist/inspector/pages/performance/types.d.ts +13 -0
  32. package/dist/inspector/pages/performance/types.d.ts.map +1 -0
  33. package/dist/inspector/pages/performance/usePerformanceEntries.d.ts +3 -0
  34. package/dist/inspector/pages/performance/usePerformanceEntries.d.ts.map +1 -0
  35. package/dist/inspector/register-custom-element.js +3 -1
  36. package/dist/inspector/register-custom-element.js.map +1 -1
  37. package/dist/inspector/standalone.js +1 -1
  38. package/dist/inspector/tests/pages/performance/PerformancePage.test.d.ts +2 -0
  39. package/dist/inspector/tests/pages/performance/PerformancePage.test.d.ts.map +1 -0
  40. package/dist/inspector/tests/pages/performance/SubscriptionDetailPanel.test.d.ts +2 -0
  41. package/dist/inspector/tests/pages/performance/SubscriptionDetailPanel.test.d.ts.map +1 -0
  42. package/dist/inspector/tests/pages/performance/SubscriptionRow.test.d.ts +2 -0
  43. package/dist/inspector/tests/pages/performance/SubscriptionRow.test.d.ts.map +1 -0
  44. package/dist/inspector/tests/pages/performance/Timeline.test.d.ts +2 -0
  45. package/dist/inspector/tests/pages/performance/Timeline.test.d.ts.map +1 -0
  46. package/dist/inspector/tests/pages/performance/helpers.test.d.ts +2 -0
  47. package/dist/inspector/tests/pages/performance/helpers.test.d.ts.map +1 -0
  48. package/dist/inspector/viewer/delete-local-data.d.ts.map +1 -1
  49. package/dist/inspector/viewer/header.d.ts +4 -2
  50. package/dist/inspector/viewer/header.d.ts.map +1 -1
  51. package/dist/inspector/viewer/page-stack.d.ts +3 -1
  52. package/dist/inspector/viewer/page-stack.d.ts.map +1 -1
  53. package/dist/react-core/hooks.d.ts +2 -2
  54. package/dist/react-core/hooks.d.ts.map +1 -1
  55. package/dist/react-core/index.js +50 -18
  56. package/dist/react-core/index.js.map +1 -1
  57. package/dist/react-core/subscription-provider.d.ts.map +1 -1
  58. package/dist/react-native-core/media/image.d.ts +1 -1
  59. package/dist/svelte/jazz.class.svelte.d.ts.map +1 -1
  60. package/dist/svelte/jazz.class.svelte.js +27 -22
  61. package/dist/testing.js +2 -2
  62. package/dist/tools/coValues/interfaces.d.ts.map +1 -1
  63. package/dist/tools/exports.d.ts +1 -1
  64. package/dist/tools/exports.d.ts.map +1 -1
  65. package/dist/tools/implementation/zodSchema/runtimeConverters/coValueSchemaTransformation.d.ts.map +1 -1
  66. package/dist/tools/implementation/zodSchema/schemaTypes/AccountSchema.d.ts.map +1 -1
  67. package/dist/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts +2 -1
  68. package/dist/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts.map +1 -1
  69. package/dist/tools/implementation/zodSchema/schemaTypes/CoListSchema.d.ts +2 -1
  70. package/dist/tools/implementation/zodSchema/schemaTypes/CoListSchema.d.ts.map +1 -1
  71. package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts +2 -1
  72. package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts.map +1 -1
  73. package/dist/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.d.ts +3 -1
  74. package/dist/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.d.ts.map +1 -1
  75. package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts +3 -1
  76. package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts.map +1 -1
  77. package/dist/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts +2 -1
  78. package/dist/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts.map +1 -1
  79. package/dist/tools/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts +6 -1
  80. package/dist/tools/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts.map +1 -1
  81. package/dist/tools/implementation/zodSchema/zodCo.d.ts.map +1 -1
  82. package/dist/tools/ssr.js +1 -1
  83. package/dist/tools/subscribe/SubscriptionCache.d.ts +2 -2
  84. package/dist/tools/subscribe/SubscriptionCache.d.ts.map +1 -1
  85. package/dist/tools/subscribe/SubscriptionScope.d.ts +19 -12
  86. package/dist/tools/subscribe/SubscriptionScope.d.ts.map +1 -1
  87. package/dist/tools/subscribe/errorReporting.d.ts +6 -0
  88. package/dist/tools/subscribe/errorReporting.d.ts.map +1 -1
  89. package/dist/tools/subscribe/index.d.ts +4 -4
  90. package/dist/tools/subscribe/index.d.ts.map +1 -1
  91. package/dist/tools/subscribe/types.d.ts +48 -3
  92. package/dist/tools/subscribe/types.d.ts.map +1 -1
  93. package/dist/tools/subscribe/utils.d.ts +1 -1
  94. package/dist/tools/subscribe/utils.d.ts.map +1 -1
  95. package/dist/tools/tests/SubscriptionScope.performance.test.d.ts +2 -0
  96. package/dist/tools/tests/SubscriptionScope.performance.test.d.ts.map +1 -0
  97. package/package.json +4 -4
  98. package/src/inspector/in-app.tsx +41 -3
  99. package/src/inspector/index.tsx +5 -1
  100. package/src/inspector/pages/home.tsx +26 -3
  101. package/src/inspector/pages/performance/PerformancePage.tsx +215 -0
  102. package/src/inspector/pages/performance/SubscriptionDetailPanel.tsx +182 -0
  103. package/src/inspector/pages/performance/SubscriptionRow.tsx +242 -0
  104. package/src/inspector/pages/performance/Timeline.tsx +513 -0
  105. package/src/inspector/pages/performance/helpers.ts +70 -0
  106. package/src/inspector/pages/performance/index.ts +2 -0
  107. package/src/inspector/pages/performance/types.ts +12 -0
  108. package/src/inspector/pages/performance/usePerformanceEntries.ts +53 -0
  109. package/src/inspector/register-custom-element.ts +3 -0
  110. package/src/inspector/tests/pages/performance/PerformancePage.test.tsx +83 -0
  111. package/src/inspector/tests/pages/performance/SubscriptionDetailPanel.test.tsx +68 -0
  112. package/src/inspector/tests/pages/performance/SubscriptionRow.test.tsx +93 -0
  113. package/src/inspector/tests/pages/performance/Timeline.test.tsx +57 -0
  114. package/src/inspector/tests/pages/performance/helpers.test.ts +91 -0
  115. package/src/inspector/viewer/delete-local-data.tsx +24 -5
  116. package/src/inspector/viewer/header.tsx +96 -17
  117. package/src/inspector/viewer/page-stack.tsx +22 -18
  118. package/src/react-core/hooks.ts +34 -4
  119. package/src/react-core/subscription-provider.tsx +17 -8
  120. package/src/svelte/jazz.class.svelte.ts +51 -33
  121. package/src/tools/coValues/coList.ts +73 -37
  122. package/src/tools/coValues/interfaces.ts +3 -0
  123. package/src/tools/exports.ts +1 -0
  124. package/src/tools/implementation/zodSchema/runtimeConverters/coValueSchemaTransformation.ts +13 -0
  125. package/src/tools/implementation/zodSchema/schemaTypes/AccountSchema.ts +0 -2
  126. package/src/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.ts +5 -2
  127. package/src/tools/implementation/zodSchema/schemaTypes/CoListSchema.ts +5 -2
  128. package/src/tools/implementation/zodSchema/schemaTypes/CoMapSchema.ts +5 -2
  129. package/src/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.ts +6 -2
  130. package/src/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.ts +6 -2
  131. package/src/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.ts +5 -2
  132. package/src/tools/implementation/zodSchema/schemaTypes/RichTextSchema.ts +9 -2
  133. package/src/tools/subscribe/SubscriptionCache.ts +6 -4
  134. package/src/tools/subscribe/SubscriptionScope.ts +141 -23
  135. package/src/tools/subscribe/errorReporting.ts +1 -1
  136. package/src/tools/subscribe/index.ts +1 -1
  137. package/src/tools/subscribe/types.ts +62 -9
  138. package/src/tools/subscribe/utils.ts +2 -2
  139. package/src/tools/tests/SubscriptionScope.performance.test.ts +149 -0
  140. package/src/tools/tests/coList.test.ts +262 -0
  141. package/src/tools/tests/schema.withPermissions.test.ts +27 -4
  142. package/dist/chunk-3CAPPS2F.js.map +0 -1
  143. package/dist/chunk-PZ5AY32C.js +0 -10
  144. package/dist/inspector/chunk-MCTB5ZJC.js.map +0 -1
  145. package/dist/inspector/custom-element-5YWVZBWA.js.map +0 -1
  146. /package/dist/{chunk-PZ5AY32C.js.map → chunk-ZQWSQH6L.js.map} +0 -0
@@ -1225,3 +1225,265 @@ describe("lastUpdatedAt", () => {
1225
1225
  expect(list.$jazz.lastUpdatedAt).not.toEqual(updatedAt);
1226
1226
  });
1227
1227
  });
1228
+
1229
+ describe("CoList proxy traps", () => {
1230
+ test(".values() returns the same values as Object.values()", () => {
1231
+ const TestList = co.list(z.string());
1232
+ const list = TestList.create([]);
1233
+ list.$jazz.push("bread");
1234
+ list.$jazz.push("butter");
1235
+ list.$jazz.push("onion");
1236
+
1237
+ const valuesFromMethod = [...list.values()];
1238
+ const valuesFromObject = Object.values(list);
1239
+ expect(valuesFromMethod).toEqual(valuesFromObject);
1240
+ expect(valuesFromMethod).toEqual(["bread", "butter", "onion"]);
1241
+ });
1242
+
1243
+ test(".values().map() returns the same values as .map()", () => {
1244
+ const TestList = co.list(z.string());
1245
+ const list = TestList.create([]);
1246
+ list.$jazz.push("bread");
1247
+ list.$jazz.push("butter");
1248
+ list.$jazz.push("onion");
1249
+
1250
+ const valuesFromMethod = [...list.values().map((v) => v.toUpperCase())];
1251
+ const valuesFromObject = list.map((v) => v.toUpperCase());
1252
+
1253
+ expect(valuesFromMethod).toEqual(valuesFromObject);
1254
+ expect(valuesFromMethod).toEqual(["BREAD", "BUTTER", "ONION"]);
1255
+ });
1256
+
1257
+ test(".keys() returns numeric indices", () => {
1258
+ const TestList = co.list(z.string());
1259
+ const list = TestList.create(["bread", "butter", "onion"]);
1260
+
1261
+ const keys = [...list.keys()];
1262
+
1263
+ expect(keys).toEqual([0, 1, 2]);
1264
+ });
1265
+
1266
+ test(".entries() returns index-value pairs", () => {
1267
+ const TestList = co.list(z.string());
1268
+ const list = TestList.create(["bread", "butter", "onion"]);
1269
+
1270
+ const entries = [...list.entries()];
1271
+
1272
+ expect(entries).toEqual([
1273
+ [0, "bread"],
1274
+ [1, "butter"],
1275
+ [2, "onion"],
1276
+ ]);
1277
+ });
1278
+
1279
+ test("for...of iteration works correctly", () => {
1280
+ const TestList = co.list(z.string());
1281
+ const list = TestList.create(["bread", "butter", "onion"]);
1282
+
1283
+ const items: string[] = [];
1284
+ for (const item of list) {
1285
+ items.push(item);
1286
+ }
1287
+
1288
+ expect(items).toEqual(["bread", "butter", "onion"]);
1289
+ });
1290
+
1291
+ test("spread operator works correctly", () => {
1292
+ const TestList = co.list(z.string());
1293
+ const list = TestList.create(["bread", "butter", "onion"]);
1294
+
1295
+ const items = [...list];
1296
+
1297
+ expect(items).toEqual(["bread", "butter", "onion"]);
1298
+ });
1299
+
1300
+ test("Array.from works correctly", () => {
1301
+ const TestList = co.list(z.string());
1302
+ const list = TestList.create(["bread", "butter", "onion"]);
1303
+
1304
+ const items = Array.from(list);
1305
+
1306
+ expect(items).toEqual(["bread", "butter", "onion"]);
1307
+ });
1308
+
1309
+ test(".values() works with CoValue references", () => {
1310
+ const Dog = co.map({
1311
+ name: z.string(),
1312
+ });
1313
+ const DogList = co.list(Dog);
1314
+
1315
+ const list = DogList.create([
1316
+ { name: "Rex" },
1317
+ { name: "Fido" },
1318
+ { name: "Buddy" },
1319
+ ]);
1320
+
1321
+ const valuesFromMethod = [...list.values()];
1322
+ const valuesFromObject = Object.values(list);
1323
+
1324
+ expect(valuesFromMethod.length).toBe(3);
1325
+ expect(valuesFromMethod.map((d) => d?.name)).toEqual([
1326
+ "Rex",
1327
+ "Fido",
1328
+ "Buddy",
1329
+ ]);
1330
+ expect(valuesFromMethod).toEqual(valuesFromObject);
1331
+ });
1332
+
1333
+ test(".values() works after ensureLoaded", async () => {
1334
+ const Task = co.map({
1335
+ title: z.string(),
1336
+ });
1337
+ const TaskList = co.list(Task);
1338
+
1339
+ const list = TaskList.create([
1340
+ { title: "Task 1" },
1341
+ { title: "Task 2" },
1342
+ { title: "Task 3" },
1343
+ ]);
1344
+
1345
+ const loadedList = await list.$jazz.ensureLoaded({
1346
+ resolve: { $each: true },
1347
+ });
1348
+
1349
+ const valuesFromMethod = [...loadedList.values()];
1350
+ const valuesFromObject = Object.values(loadedList);
1351
+
1352
+ expect(valuesFromMethod.length).toBe(3);
1353
+ expect(valuesFromMethod.map((t) => t.title)).toEqual([
1354
+ "Task 1",
1355
+ "Task 2",
1356
+ "Task 3",
1357
+ ]);
1358
+ expect(valuesFromMethod.map((t) => t.$jazz.id)).toEqual(
1359
+ valuesFromObject.map((t) => t.$jazz.id),
1360
+ );
1361
+ });
1362
+
1363
+ test(".values() works on remotely loaded list", async () => {
1364
+ const Task = co.map({
1365
+ title: z.string(),
1366
+ });
1367
+ const TaskList = co.list(Task);
1368
+
1369
+ const group = Group.create();
1370
+ group.addMember("everyone", "writer");
1371
+
1372
+ const list = TaskList.create(
1373
+ [{ title: "Task 1" }, { title: "Task 2" }, { title: "Task 3" }],
1374
+ group,
1375
+ );
1376
+
1377
+ const userB = await createJazzTestAccount();
1378
+
1379
+ const loadedList = await TaskList.load(list.$jazz.id, {
1380
+ resolve: { $each: true },
1381
+ loadAs: userB,
1382
+ });
1383
+
1384
+ assertLoaded(loadedList);
1385
+
1386
+ const valuesFromMethod = [...loadedList.values()];
1387
+ const valuesFromObject = Object.values(loadedList);
1388
+
1389
+ expect(valuesFromMethod.length).toBe(3);
1390
+ expect(valuesFromMethod.map((t) => t.title)).toEqual([
1391
+ "Task 1",
1392
+ "Task 2",
1393
+ "Task 3",
1394
+ ]);
1395
+ expect(valuesFromMethod.map((t) => t.$jazz.id)).toEqual(
1396
+ valuesFromObject.map((t) => t.$jazz.id),
1397
+ );
1398
+ });
1399
+
1400
+ test("iterator methods work on empty list", () => {
1401
+ const TestList = co.list(z.string());
1402
+ const list = TestList.create([]);
1403
+
1404
+ expect([...list.values()]).toEqual([]);
1405
+ expect([...list.keys()]).toEqual([]);
1406
+ expect([...list.entries()]).toEqual([]);
1407
+ expect([...list]).toEqual([]);
1408
+ });
1409
+
1410
+ test("Object.getOwnPropertyDescriptors returns correct descriptors", () => {
1411
+ const TestList = co.list(z.string());
1412
+ const list = TestList.create(["a", "b", "c"]);
1413
+
1414
+ const descriptors = Object.getOwnPropertyDescriptors(list);
1415
+
1416
+ // Check numeric index descriptors
1417
+ expect(descriptors["0"]).toEqual({
1418
+ enumerable: true,
1419
+ configurable: true,
1420
+ writable: false,
1421
+ value: "a",
1422
+ });
1423
+ expect(descriptors["1"]).toEqual({
1424
+ enumerable: true,
1425
+ configurable: true,
1426
+ writable: false,
1427
+ value: "b",
1428
+ });
1429
+ expect(descriptors["2"]).toEqual({
1430
+ enumerable: true,
1431
+ configurable: true,
1432
+ writable: false,
1433
+ value: "c",
1434
+ });
1435
+
1436
+ // Check length descriptor
1437
+ expect(descriptors["length"]).toEqual({
1438
+ enumerable: false,
1439
+ configurable: false,
1440
+ writable: true,
1441
+ value: 3,
1442
+ });
1443
+
1444
+ // Verify only expected enumerable keys
1445
+ const enumerableKeys = Object.keys(descriptors).filter(
1446
+ (key) => descriptors[key]?.enumerable,
1447
+ );
1448
+ expect(enumerableKeys.sort()).toEqual(["0", "1", "2"]);
1449
+ });
1450
+
1451
+ test("Object.getOwnPropertyDescriptors returns the resolved references", () => {
1452
+ const TestList = co.list(co.map({ name: z.string() }));
1453
+ const list = TestList.create([{ name: "a" }, { name: "b" }, { name: "c" }]);
1454
+
1455
+ const descriptors = Object.getOwnPropertyDescriptors(list);
1456
+
1457
+ // Check numeric index descriptors
1458
+ expect(descriptors["0"]).toEqual({
1459
+ enumerable: true,
1460
+ configurable: true,
1461
+ writable: false,
1462
+ value: list[0],
1463
+ });
1464
+ expect(descriptors["1"]).toEqual({
1465
+ enumerable: true,
1466
+ configurable: true,
1467
+ writable: false,
1468
+ value: list[1],
1469
+ });
1470
+ expect(descriptors["2"]).toEqual({
1471
+ enumerable: true,
1472
+ configurable: true,
1473
+ writable: false,
1474
+ value: list[2],
1475
+ });
1476
+ });
1477
+
1478
+ test("setting the lenght to 0 has no effect", () => {
1479
+ const TestList = co.list(z.string());
1480
+ const list = TestList.create(["a", "b", "c"]);
1481
+
1482
+ list.length = 0;
1483
+
1484
+ expect(list.length).toBe(3);
1485
+ expect(list[0]).toBe("a");
1486
+ expect(list[1]).toBe("b");
1487
+ expect(list[2]).toBe("c");
1488
+ });
1489
+ });
@@ -843,7 +843,7 @@ describe("setDefaultSchemaPermissions", () => {
843
843
  expect(childOwner.getRoleOf(anotherAccount.$jazz.id)).toEqual("reader");
844
844
  });
845
845
 
846
- test("does not modify permissions for existing schemas", () => {
846
+ test("modifies default permissions for existing schemas", () => {
847
847
  const ExistingMap = co.map({
848
848
  name: co.plainText(),
849
849
  });
@@ -852,8 +852,31 @@ describe("setDefaultSchemaPermissions", () => {
852
852
  });
853
853
 
854
854
  const map = ExistingMap.create({ name: "Hello" });
855
- expect(
856
- map.name.$jazz.owner.getParentGroups().map((group) => group.$jazz.id),
857
- ).toContain(map.$jazz.owner.$jazz.id);
855
+ expect(map.name.$jazz.owner.$jazz.id).toContain(map.$jazz.owner.$jazz.id);
856
+ });
857
+
858
+ test("modifies default permissions for copied schemas", async () => {
859
+ const anotherAccount = await createJazzTestAccount();
860
+
861
+ const ExistingMap = co.map({
862
+ name: co.plainText(),
863
+ });
864
+ setDefaultSchemaPermissions({
865
+ onCreate() {
866
+ // Do nothing
867
+ },
868
+ });
869
+ const CopiedMap = ExistingMap.resolved({ name: true });
870
+ setDefaultSchemaPermissions({
871
+ onCreate(newGroup) {
872
+ newGroup.addMember(anotherAccount, "reader");
873
+ },
874
+ });
875
+
876
+ const map = CopiedMap.create({ name: "Hello" });
877
+ await map.$jazz.waitForSync();
878
+
879
+ const mapOwner = map.$jazz.owner;
880
+ expect(mapOwner.getRoleOf(anotherAccount.$jazz.id)).toEqual("reader");
858
881
  });
859
882
  });