@instantdb/core 0.22.97 → 0.22.98-experimental.drewh-ts-target.20762041587.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.
Files changed (126) hide show
  1. package/dist/commonjs/Connection.js +50 -51
  2. package/dist/commonjs/Connection.js.map +1 -1
  3. package/dist/commonjs/InMemoryStorage.js +13 -32
  4. package/dist/commonjs/InMemoryStorage.js.map +1 -1
  5. package/dist/commonjs/IndexedDBStorage.js +193 -217
  6. package/dist/commonjs/IndexedDBStorage.js.map +1 -1
  7. package/dist/commonjs/InstantError.js +1 -0
  8. package/dist/commonjs/InstantError.js.map +1 -1
  9. package/dist/commonjs/Reactor.js +566 -610
  10. package/dist/commonjs/Reactor.js.map +1 -1
  11. package/dist/commonjs/StorageAPI.js +51 -70
  12. package/dist/commonjs/StorageAPI.js.map +1 -1
  13. package/dist/commonjs/SyncTable.js +68 -81
  14. package/dist/commonjs/SyncTable.js.map +1 -1
  15. package/dist/commonjs/WindowNetworkListener.js +2 -13
  16. package/dist/commonjs/WindowNetworkListener.js.map +1 -1
  17. package/dist/commonjs/__types__/fieldsTypeTest.js +8 -16
  18. package/dist/commonjs/__types__/fieldsTypeTest.js.map +1 -1
  19. package/dist/commonjs/__types__/useDatesTypeTest.js +3 -6
  20. package/dist/commonjs/__types__/useDatesTypeTest.js.map +1 -1
  21. package/dist/commonjs/authAPI.js +62 -79
  22. package/dist/commonjs/authAPI.js.map +1 -1
  23. package/dist/commonjs/createRouteHandler.js +5 -15
  24. package/dist/commonjs/createRouteHandler.js.map +1 -1
  25. package/dist/commonjs/datalog.js +1 -1
  26. package/dist/commonjs/datalog.js.map +1 -1
  27. package/dist/commonjs/devtool.js +26 -8
  28. package/dist/commonjs/devtool.js.map +1 -1
  29. package/dist/commonjs/framework.d.ts.map +1 -1
  30. package/dist/commonjs/framework.js +142 -152
  31. package/dist/commonjs/framework.js.map +1 -1
  32. package/dist/commonjs/index.js +204 -190
  33. package/dist/commonjs/index.js.map +1 -1
  34. package/dist/commonjs/instaml.js +44 -30
  35. package/dist/commonjs/instaml.js.map +1 -1
  36. package/dist/commonjs/instaql.js +25 -33
  37. package/dist/commonjs/instaql.js.map +1 -1
  38. package/dist/commonjs/parseSchemaFromJSON.js +6 -7
  39. package/dist/commonjs/parseSchemaFromJSON.js.map +1 -1
  40. package/dist/commonjs/presence.js +7 -8
  41. package/dist/commonjs/presence.js.map +1 -1
  42. package/dist/commonjs/queryValidation.js +1 -2
  43. package/dist/commonjs/queryValidation.js.map +1 -1
  44. package/dist/commonjs/schema.js +8 -6
  45. package/dist/commonjs/schema.js.map +1 -1
  46. package/dist/commonjs/schemaTypes.js +22 -3
  47. package/dist/commonjs/schemaTypes.js.map +1 -1
  48. package/dist/commonjs/store.js +29 -38
  49. package/dist/commonjs/store.js.map +1 -1
  50. package/dist/commonjs/transactionValidation.js +1 -2
  51. package/dist/commonjs/transactionValidation.js.map +1 -1
  52. package/dist/commonjs/utils/Deferred.js +3 -0
  53. package/dist/commonjs/utils/Deferred.js.map +1 -1
  54. package/dist/commonjs/utils/PersistedObject.js +216 -233
  55. package/dist/commonjs/utils/PersistedObject.js.map +1 -1
  56. package/dist/commonjs/utils/fetch.js +9 -19
  57. package/dist/commonjs/utils/fetch.js.map +1 -1
  58. package/dist/commonjs/utils/linkIndex.js +2 -4
  59. package/dist/commonjs/utils/linkIndex.js.map +1 -1
  60. package/dist/commonjs/utils/object.js +1 -1
  61. package/dist/commonjs/utils/object.js.map +1 -1
  62. package/dist/esm/Connection.js +50 -51
  63. package/dist/esm/Connection.js.map +1 -1
  64. package/dist/esm/InMemoryStorage.js +13 -32
  65. package/dist/esm/InMemoryStorage.js.map +1 -1
  66. package/dist/esm/IndexedDBStorage.js +193 -217
  67. package/dist/esm/IndexedDBStorage.js.map +1 -1
  68. package/dist/esm/InstantError.js +1 -0
  69. package/dist/esm/InstantError.js.map +1 -1
  70. package/dist/esm/Reactor.js +566 -610
  71. package/dist/esm/Reactor.js.map +1 -1
  72. package/dist/esm/StorageAPI.js +51 -70
  73. package/dist/esm/StorageAPI.js.map +1 -1
  74. package/dist/esm/SyncTable.js +68 -81
  75. package/dist/esm/SyncTable.js.map +1 -1
  76. package/dist/esm/WindowNetworkListener.js +2 -13
  77. package/dist/esm/WindowNetworkListener.js.map +1 -1
  78. package/dist/esm/__types__/fieldsTypeTest.js +8 -16
  79. package/dist/esm/__types__/fieldsTypeTest.js.map +1 -1
  80. package/dist/esm/__types__/useDatesTypeTest.js +3 -6
  81. package/dist/esm/__types__/useDatesTypeTest.js.map +1 -1
  82. package/dist/esm/authAPI.js +62 -79
  83. package/dist/esm/authAPI.js.map +1 -1
  84. package/dist/esm/createRouteHandler.js +5 -15
  85. package/dist/esm/createRouteHandler.js.map +1 -1
  86. package/dist/esm/datalog.js +1 -1
  87. package/dist/esm/datalog.js.map +1 -1
  88. package/dist/esm/devtool.js +26 -8
  89. package/dist/esm/devtool.js.map +1 -1
  90. package/dist/esm/framework.d.ts.map +1 -1
  91. package/dist/esm/framework.js +142 -152
  92. package/dist/esm/framework.js.map +1 -1
  93. package/dist/esm/index.js +204 -190
  94. package/dist/esm/index.js.map +1 -1
  95. package/dist/esm/instaml.js +44 -30
  96. package/dist/esm/instaml.js.map +1 -1
  97. package/dist/esm/instaql.js +25 -33
  98. package/dist/esm/instaql.js.map +1 -1
  99. package/dist/esm/parseSchemaFromJSON.js +6 -7
  100. package/dist/esm/parseSchemaFromJSON.js.map +1 -1
  101. package/dist/esm/presence.js +7 -8
  102. package/dist/esm/presence.js.map +1 -1
  103. package/dist/esm/queryValidation.js +1 -2
  104. package/dist/esm/queryValidation.js.map +1 -1
  105. package/dist/esm/schema.js +8 -6
  106. package/dist/esm/schema.js.map +1 -1
  107. package/dist/esm/schemaTypes.js +22 -3
  108. package/dist/esm/schemaTypes.js.map +1 -1
  109. package/dist/esm/store.js +29 -38
  110. package/dist/esm/store.js.map +1 -1
  111. package/dist/esm/transactionValidation.js +1 -2
  112. package/dist/esm/transactionValidation.js.map +1 -1
  113. package/dist/esm/utils/Deferred.js +3 -0
  114. package/dist/esm/utils/Deferred.js.map +1 -1
  115. package/dist/esm/utils/PersistedObject.js +216 -233
  116. package/dist/esm/utils/PersistedObject.js.map +1 -1
  117. package/dist/esm/utils/fetch.js +9 -19
  118. package/dist/esm/utils/fetch.js.map +1 -1
  119. package/dist/esm/utils/linkIndex.js +2 -4
  120. package/dist/esm/utils/linkIndex.js.map +1 -1
  121. package/dist/esm/utils/object.js +1 -1
  122. package/dist/esm/utils/object.js.map +1 -1
  123. package/dist/standalone/index.js +2610 -2367
  124. package/dist/standalone/index.umd.cjs +3 -3
  125. package/package.json +2 -2
  126. package/src/framework.ts +0 -1
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.uploadFile = uploadFile;
13
4
  exports.deleteFile = deleteFile;
@@ -15,77 +6,67 @@ exports.getSignedUploadUrl = getSignedUploadUrl;
15
6
  exports.upload = upload;
16
7
  exports.getDownloadUrl = getDownloadUrl;
17
8
  const fetch_js_1 = require("./utils/fetch.js");
18
- function uploadFile(_a) {
19
- return __awaiter(this, arguments, void 0, function* ({ apiURI, appId, path, file, refreshToken, contentType, contentDisposition, }) {
20
- const headers = {
21
- app_id: appId,
22
- path,
23
- authorization: `Bearer ${refreshToken}`,
24
- 'content-type': contentType || file.type,
25
- };
26
- if (contentDisposition) {
27
- headers['content-disposition'] = contentDisposition;
28
- }
29
- const data = yield (0, fetch_js_1.jsonFetch)(`${apiURI}/storage/upload`, {
30
- method: 'PUT',
31
- headers,
32
- body: file,
33
- });
34
- return data;
9
+ async function uploadFile({ apiURI, appId, path, file, refreshToken, contentType, contentDisposition, }) {
10
+ const headers = {
11
+ app_id: appId,
12
+ path,
13
+ authorization: `Bearer ${refreshToken}`,
14
+ 'content-type': contentType || file.type,
15
+ };
16
+ if (contentDisposition) {
17
+ headers['content-disposition'] = contentDisposition;
18
+ }
19
+ const data = await (0, fetch_js_1.jsonFetch)(`${apiURI}/storage/upload`, {
20
+ method: 'PUT',
21
+ headers,
22
+ body: file,
35
23
  });
24
+ return data;
36
25
  }
37
- function deleteFile(_a) {
38
- return __awaiter(this, arguments, void 0, function* ({ apiURI, appId, path, refreshToken, }) {
39
- const { data } = yield (0, fetch_js_1.jsonFetch)(`${apiURI}/storage/files?app_id=${appId}&filename=${encodeURIComponent(path)}`, {
40
- method: 'DELETE',
41
- headers: {
42
- 'content-type': 'application/json',
43
- authorization: `Bearer ${refreshToken}`,
44
- },
45
- });
46
- return data;
26
+ async function deleteFile({ apiURI, appId, path, refreshToken, }) {
27
+ const { data } = await (0, fetch_js_1.jsonFetch)(`${apiURI}/storage/files?app_id=${appId}&filename=${encodeURIComponent(path)}`, {
28
+ method: 'DELETE',
29
+ headers: {
30
+ 'content-type': 'application/json',
31
+ authorization: `Bearer ${refreshToken}`,
32
+ },
47
33
  });
34
+ return data;
48
35
  }
49
36
  // Deprecated Storage API (Jan 2025)
50
37
  // ---------------------------------
51
- function getSignedUploadUrl(_a) {
52
- return __awaiter(this, arguments, void 0, function* ({ apiURI, appId, fileName, refreshToken, metadata = {}, }) {
53
- const { data } = yield (0, fetch_js_1.jsonFetch)(`${apiURI}/storage/signed-upload-url`, {
54
- method: 'POST',
55
- headers: {
56
- 'content-type': 'application/json',
57
- authorization: `Bearer ${refreshToken}`,
58
- },
59
- body: JSON.stringify({
60
- app_id: appId,
61
- filename: fileName,
62
- }),
63
- });
64
- return data;
38
+ async function getSignedUploadUrl({ apiURI, appId, fileName, refreshToken, metadata = {}, }) {
39
+ const { data } = await (0, fetch_js_1.jsonFetch)(`${apiURI}/storage/signed-upload-url`, {
40
+ method: 'POST',
41
+ headers: {
42
+ 'content-type': 'application/json',
43
+ authorization: `Bearer ${refreshToken}`,
44
+ },
45
+ body: JSON.stringify({
46
+ app_id: appId,
47
+ filename: fileName,
48
+ }),
65
49
  });
50
+ return data;
66
51
  }
67
- function upload(presignedUrl, file) {
68
- return __awaiter(this, void 0, void 0, function* () {
69
- const response = yield fetch(presignedUrl, {
70
- method: 'PUT',
71
- body: file,
72
- headers: {
73
- 'Content-Type': file.type,
74
- },
75
- });
76
- return response.ok;
52
+ async function upload(presignedUrl, file) {
53
+ const response = await fetch(presignedUrl, {
54
+ method: 'PUT',
55
+ body: file,
56
+ headers: {
57
+ 'Content-Type': file.type,
58
+ },
77
59
  });
60
+ return response.ok;
78
61
  }
79
- function getDownloadUrl(_a) {
80
- return __awaiter(this, arguments, void 0, function* ({ apiURI, appId, path, refreshToken, }) {
81
- const { data } = yield (0, fetch_js_1.jsonFetch)(`${apiURI}/storage/signed-download-url?app_id=${appId}&filename=${encodeURIComponent(path)}`, {
82
- method: 'GET',
83
- headers: {
84
- 'content-type': 'application/json',
85
- authorization: `Bearer ${refreshToken}`,
86
- },
87
- });
88
- return data;
62
+ async function getDownloadUrl({ apiURI, appId, path, refreshToken, }) {
63
+ const { data } = await (0, fetch_js_1.jsonFetch)(`${apiURI}/storage/signed-download-url?app_id=${appId}&filename=${encodeURIComponent(path)}`, {
64
+ method: 'GET',
65
+ headers: {
66
+ 'content-type': 'application/json',
67
+ authorization: `Bearer ${refreshToken}`,
68
+ },
89
69
  });
70
+ return data;
90
71
  }
91
72
  //# sourceMappingURL=StorageAPI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StorageAPI.js","sourceRoot":"","sources":["../../src/StorageAPI.ts"],"names":[],"mappings":";;;;;;;;;;;AAcA,gCAkCC;AAED,gCAuBC;AAKD,gDA0BC;AAED,wBAUC;AAED,wCAyBC;AA/ID,+CAA6C;AAc7C,SAAsB,UAAU;yDAAC,EAC/B,MAAM,EACN,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,kBAAkB,GASnB;QACC,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,KAAK;YACb,IAAI;YACJ,aAAa,EAAE,UAAU,YAAY,EAAE;YACvC,cAAc,EAAE,WAAW,IAAI,IAAI,CAAC,IAAI;SACzC,CAAC;QACF,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO,CAAC,qBAAqB,CAAC,GAAG,kBAAkB,CAAC;QACtD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAS,EAAC,GAAG,MAAM,iBAAiB,EAAE;YACvD,MAAM,EAAE,KAAK;YACb,OAAO;YACP,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;CAAA;AAED,SAAsB,UAAU;yDAAC,EAC/B,MAAM,EACN,KAAK,EACL,IAAI,EACJ,YAAY,GAMb;QACC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,oBAAS,EAC9B,GAAG,MAAM,yBAAyB,KAAK,aAAa,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAC9E;YACE,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,YAAY,EAAE;aACxC;SACF,CACF,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;CAAA;AAED,oCAAoC;AACpC,oCAAoC;AAEpC,SAAsB,kBAAkB;yDAAC,EACvC,MAAM,EACN,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,QAAQ,GAAG,EAAE,GAOd;QACC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,oBAAS,EAAC,GAAG,MAAM,4BAA4B,EAAE;YACtE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,YAAY,EAAE;aACxC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,QAAQ;aACnB,CAAC;SACH,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;CAAA;AAED,SAAsB,MAAM,CAAC,YAAY,EAAE,IAAI;;QAC7C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE;YACzC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,IAAI;YACV,OAAO,EAAE;gBACP,cAAc,EAAE,IAAI,CAAC,IAAI;aAC1B;SACF,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;CAAA;AAED,SAAsB,cAAc;yDAAC,EACnC,MAAM,EACN,KAAK,EACL,IAAI,EACJ,YAAY,GAMb;QACC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,oBAAS,EAC9B,GAAG,MAAM,uCAAuC,KAAK,aAAa,kBAAkB,CAClF,IAAI,CACL,EAAE,EACH;YACE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,YAAY,EAAE;aACxC;SACF,CACF,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;CAAA","sourcesContent":["import { jsonFetch } from './utils/fetch.js';\n\nexport type UploadFileResponse = {\n data: {\n id: string;\n };\n};\n\nexport type DeleteFileResponse = {\n data: {\n id: string | null;\n };\n};\n\nexport async function uploadFile({\n apiURI,\n appId,\n path,\n file,\n refreshToken,\n contentType,\n contentDisposition,\n}: {\n apiURI: string;\n appId: string;\n path: string;\n file: File | Blob;\n refreshToken?: string;\n contentType?: string;\n contentDisposition?: string;\n}): Promise<UploadFileResponse> {\n const headers = {\n app_id: appId,\n path,\n authorization: `Bearer ${refreshToken}`,\n 'content-type': contentType || file.type,\n };\n if (contentDisposition) {\n headers['content-disposition'] = contentDisposition;\n }\n\n const data = await jsonFetch(`${apiURI}/storage/upload`, {\n method: 'PUT',\n headers,\n body: file,\n });\n\n return data;\n}\n\nexport async function deleteFile({\n apiURI,\n appId,\n path,\n refreshToken,\n}: {\n apiURI: string;\n appId: string;\n path: string;\n refreshToken?: string;\n}): Promise<DeleteFileResponse> {\n const { data } = await jsonFetch(\n `${apiURI}/storage/files?app_id=${appId}&filename=${encodeURIComponent(path)}`,\n {\n method: 'DELETE',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${refreshToken}`,\n },\n },\n );\n\n return data;\n}\n\n// Deprecated Storage API (Jan 2025)\n// ---------------------------------\n\nexport async function getSignedUploadUrl({\n apiURI,\n appId,\n fileName,\n refreshToken,\n metadata = {},\n}: {\n apiURI: string;\n appId: string;\n fileName: string;\n refreshToken?: string;\n metadata?: Record<string, any>;\n}) {\n const { data } = await jsonFetch(`${apiURI}/storage/signed-upload-url`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${refreshToken}`,\n },\n body: JSON.stringify({\n app_id: appId,\n filename: fileName,\n }),\n });\n\n return data;\n}\n\nexport async function upload(presignedUrl, file) {\n const response = await fetch(presignedUrl, {\n method: 'PUT',\n body: file,\n headers: {\n 'Content-Type': file.type,\n },\n });\n\n return response.ok;\n}\n\nexport async function getDownloadUrl({\n apiURI,\n appId,\n path,\n refreshToken,\n}: {\n apiURI: string;\n appId: string;\n path: string;\n refreshToken?: string;\n}) {\n const { data } = await jsonFetch(\n `${apiURI}/storage/signed-download-url?app_id=${appId}&filename=${encodeURIComponent(\n path,\n )}`,\n {\n method: 'GET',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${refreshToken}`,\n },\n },\n );\n\n return data;\n}\n"]}
1
+ {"version":3,"file":"StorageAPI.js","sourceRoot":"","sources":["../../src/StorageAPI.ts"],"names":[],"mappings":";;AAcA,gCAkCC;AAED,gCAuBC;AAKD,gDA0BC;AAED,wBAUC;AAED,wCAyBC;AA/ID,+CAA6C;AActC,KAAK,UAAU,UAAU,CAAC,EAC/B,MAAM,EACN,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,kBAAkB,GASnB;IACC,MAAM,OAAO,GAAG;QACd,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,aAAa,EAAE,UAAU,YAAY,EAAE;QACvC,cAAc,EAAE,WAAW,IAAI,IAAI,CAAC,IAAI;KACzC,CAAC;IACF,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO,CAAC,qBAAqB,CAAC,GAAG,kBAAkB,CAAC;IACtD,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAS,EAAC,GAAG,MAAM,iBAAiB,EAAE;QACvD,MAAM,EAAE,KAAK;QACb,OAAO;QACP,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,EAC/B,MAAM,EACN,KAAK,EACL,IAAI,EACJ,YAAY,GAMb;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,oBAAS,EAC9B,GAAG,MAAM,yBAAyB,KAAK,aAAa,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAC9E;QACE,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,YAAY,EAAE;SACxC;KACF,CACF,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oCAAoC;AACpC,oCAAoC;AAE7B,KAAK,UAAU,kBAAkB,CAAC,EACvC,MAAM,EACN,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,QAAQ,GAAG,EAAE,GAOd;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,oBAAS,EAAC,GAAG,MAAM,4BAA4B,EAAE;QACtE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,YAAY,EAAE;SACxC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,QAAQ;SACnB,CAAC;KACH,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,YAAY,EAAE,IAAI;IAC7C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE;QACzC,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,IAAI;QACV,OAAO,EAAE;YACP,cAAc,EAAE,IAAI,CAAC,IAAI;SAC1B;KACF,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,EAAE,CAAC;AACrB,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,EACnC,MAAM,EACN,KAAK,EACL,IAAI,EACJ,YAAY,GAMb;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,oBAAS,EAC9B,GAAG,MAAM,uCAAuC,KAAK,aAAa,kBAAkB,CAClF,IAAI,CACL,EAAE,EACH;QACE,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,YAAY,EAAE;SACxC;KACF,CACF,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { jsonFetch } from './utils/fetch.js';\n\nexport type UploadFileResponse = {\n data: {\n id: string;\n };\n};\n\nexport type DeleteFileResponse = {\n data: {\n id: string | null;\n };\n};\n\nexport async function uploadFile({\n apiURI,\n appId,\n path,\n file,\n refreshToken,\n contentType,\n contentDisposition,\n}: {\n apiURI: string;\n appId: string;\n path: string;\n file: File | Blob;\n refreshToken?: string;\n contentType?: string;\n contentDisposition?: string;\n}): Promise<UploadFileResponse> {\n const headers = {\n app_id: appId,\n path,\n authorization: `Bearer ${refreshToken}`,\n 'content-type': contentType || file.type,\n };\n if (contentDisposition) {\n headers['content-disposition'] = contentDisposition;\n }\n\n const data = await jsonFetch(`${apiURI}/storage/upload`, {\n method: 'PUT',\n headers,\n body: file,\n });\n\n return data;\n}\n\nexport async function deleteFile({\n apiURI,\n appId,\n path,\n refreshToken,\n}: {\n apiURI: string;\n appId: string;\n path: string;\n refreshToken?: string;\n}): Promise<DeleteFileResponse> {\n const { data } = await jsonFetch(\n `${apiURI}/storage/files?app_id=${appId}&filename=${encodeURIComponent(path)}`,\n {\n method: 'DELETE',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${refreshToken}`,\n },\n },\n );\n\n return data;\n}\n\n// Deprecated Storage API (Jan 2025)\n// ---------------------------------\n\nexport async function getSignedUploadUrl({\n apiURI,\n appId,\n fileName,\n refreshToken,\n metadata = {},\n}: {\n apiURI: string;\n appId: string;\n fileName: string;\n refreshToken?: string;\n metadata?: Record<string, any>;\n}) {\n const { data } = await jsonFetch(`${apiURI}/storage/signed-upload-url`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${refreshToken}`,\n },\n body: JSON.stringify({\n app_id: appId,\n filename: fileName,\n }),\n });\n\n return data;\n}\n\nexport async function upload(presignedUrl, file) {\n const response = await fetch(presignedUrl, {\n method: 'PUT',\n body: file,\n headers: {\n 'Content-Type': file.type,\n },\n });\n\n return response.ok;\n}\n\nexport async function getDownloadUrl({\n apiURI,\n appId,\n path,\n refreshToken,\n}: {\n apiURI: string;\n appId: string;\n path: string;\n refreshToken?: string;\n}) {\n const { data } = await jsonFetch(\n `${apiURI}/storage/signed-download-url?app_id=${appId}&filename=${encodeURIComponent(\n path,\n )}`,\n {\n method: 'GET',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${refreshToken}`,\n },\n },\n );\n\n return data;\n}\n"]}
@@ -32,15 +32,6 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
- return new (P || (P = Promise))(function (resolve, reject) {
38
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
- step((generator = generator.apply(thisArg, _arguments || [])).next());
42
- });
43
- };
44
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
45
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
46
37
  };
@@ -67,23 +58,24 @@ function syncSubFromStorage(sub, useDateObjects) {
67
58
  return sub;
68
59
  }
69
60
  function syncSubToStorage(_k, sub) {
70
- var _a;
71
61
  if (sub.values) {
72
62
  const entities = [];
73
- for (const e of (_a = sub.values) === null || _a === void 0 ? void 0 : _a.entities) {
63
+ for (const e of sub.values?.entities) {
74
64
  const store = s.toJSON(e.store);
75
- entities.push(Object.assign(Object.assign({}, e), { store }));
65
+ entities.push({ ...e, store });
76
66
  }
77
- return Object.assign(Object.assign({}, sub), { values: { attrsStore: sub.values.attrsStore.toJSON(), entities } });
67
+ return {
68
+ ...sub,
69
+ values: { attrsStore: sub.values.attrsStore.toJSON(), entities },
70
+ };
78
71
  }
79
72
  else {
80
73
  return sub;
81
74
  }
82
75
  }
83
76
  function onMergeSub(_key, storageSub, inMemorySub) {
84
- var _a, _b;
85
- const storageTxId = (_a = storageSub === null || storageSub === void 0 ? void 0 : storageSub.state) === null || _a === void 0 ? void 0 : _a.txId;
86
- const memoryTxId = (_b = inMemorySub === null || inMemorySub === void 0 ? void 0 : inMemorySub.state) === null || _b === void 0 ? void 0 : _b.txId;
77
+ const storageTxId = storageSub?.state?.txId;
78
+ const memoryTxId = inMemorySub?.state?.txId;
87
79
  if (storageTxId && (!memoryTxId || storageTxId > memoryTxId)) {
88
80
  return storageSub;
89
81
  }
@@ -97,8 +89,7 @@ function queryEntity(sub, store, attrsStore) {
97
89
  return res.data[sub.table][0];
98
90
  }
99
91
  function getServerCreatedAt(sub, store, attrsStore, entityId) {
100
- var _a;
101
- const aid = (_a = s.getAttrByFwdIdentName(attrsStore, sub.table, 'id')) === null || _a === void 0 ? void 0 : _a.id;
92
+ const aid = s.getAttrByFwdIdentName(attrsStore, sub.table, 'id')?.id;
102
93
  if (!aid) {
103
94
  return -1;
104
95
  }
@@ -121,18 +112,17 @@ function applyChangesToStore(store, attrsStore, changes) {
121
112
  }
122
113
  }
123
114
  function changedFieldsOfChanges(store, attrsStore, changes) {
124
- var _a, _b, _c, _d;
125
115
  // This will be more complicated when we include links, we can either add a
126
116
  // changedLinks field or we can have something like 'bookshelves.title`
127
117
  const changedFields = {};
128
118
  for (const { action, triple } of changes) {
129
119
  const [e, a, v] = triple;
130
- const field = (_b = (_a = attrsStore.getAttr(a)) === null || _a === void 0 ? void 0 : _a['forward-identity']) === null || _b === void 0 ? void 0 : _b[2];
120
+ const field = attrsStore.getAttr(a)?.['forward-identity']?.[2];
131
121
  if (!field)
132
122
  continue;
133
- const fields = (_c = changedFields[e]) !== null && _c !== void 0 ? _c : {};
123
+ const fields = changedFields[e] ?? {};
134
124
  changedFields[e] = fields;
135
- const oldNew = (_d = fields[field]) !== null && _d !== void 0 ? _d : {};
125
+ const oldNew = fields[field] ?? {};
136
126
  switch (action) {
137
127
  case 'added':
138
128
  oldNew.newValue = v;
@@ -162,13 +152,12 @@ function subData(sub, entities) {
162
152
  // and returns the type. We have to wait until the attrs
163
153
  // are loaded before we can determine the type.
164
154
  function orderFieldTypeMutative(sub, getAttrs) {
165
- var _a;
166
155
  if (sub.orderFieldType) {
167
156
  return sub.orderFieldType;
168
157
  }
169
158
  const orderFieldType = sub.orderField === 'serverCreatedAt'
170
159
  ? 'number'
171
- : (_a = s.getAttrByFwdIdentName(getAttrs(), sub.table, sub.orderField)) === null || _a === void 0 ? void 0 : _a['checked-data-type'];
160
+ : s.getAttrByFwdIdentName(getAttrs(), sub.table, sub.orderField)?.['checked-data-type'];
172
161
  sub.orderFieldType = orderFieldType;
173
162
  return orderFieldType;
174
163
  }
@@ -202,10 +191,16 @@ var CallbackEventType;
202
191
  CallbackEventType["Error"] = "Error";
203
192
  })(CallbackEventType || (exports.CallbackEventType = CallbackEventType = {}));
204
193
  class SyncTable {
194
+ trySend;
195
+ subs;
196
+ // Using any for the SyncCallback because we'd need Reactor to be typed
197
+ callbacks = {};
198
+ config;
199
+ idToHash = {};
200
+ log;
201
+ createStore;
202
+ getAttrs;
205
203
  constructor(trySend, storage, config, log, createStore, getAttrs) {
206
- // Using any for the SyncCallback because we'd need Reactor to be typed
207
- this.callbacks = {};
208
- this.idToHash = {};
209
204
  this.trySend = trySend;
210
205
  this.config = config;
211
206
  this.log = log;
@@ -216,13 +211,13 @@ class SyncTable {
216
211
  merge: onMergeSub,
217
212
  serialize: syncSubToStorage,
218
213
  parse: (_key, x) => syncSubFromStorage(x, this.config.useDateObjects),
219
- objectSize: (sub) => { var _a; return ((_a = sub.values) === null || _a === void 0 ? void 0 : _a.entities.length) || 0; },
214
+ objectSize: (sub) => sub.values?.entities.length || 0,
220
215
  logger: log,
221
216
  gc: {
222
217
  maxAgeMs: 1000 * 60 * 60 * 24 * 7 * 52, // 1 year
223
218
  maxEntries: 1000,
224
219
  // Size of each sub is the number of entity
225
- maxSize: 1000000, // 1 million entities
220
+ maxSize: 1_000_000, // 1 million entities
226
221
  },
227
222
  });
228
223
  }
@@ -235,7 +230,7 @@ class SyncTable {
235
230
  this.callbacks[hash].push(cb);
236
231
  this.initSubscription(q, hash, cb);
237
232
  return (opts) => {
238
- this.unsubscribe(hash, cb, opts === null || opts === void 0 ? void 0 : opts.keepSubscription);
233
+ this.unsubscribe(hash, cb, opts?.keepSubscription);
239
234
  };
240
235
  }
241
236
  unsubscribe(hash, cb, keepSubscription) {
@@ -244,7 +239,7 @@ class SyncTable {
244
239
  if (!cbs.length) {
245
240
  delete this.callbacks[hash];
246
241
  const sub = this.subs.currentValue[hash];
247
- if (sub === null || sub === void 0 ? void 0 : sub.state) {
242
+ if (sub?.state) {
248
243
  this.clearSubscriptionData(sub.state.subscriptionId, !!keepSubscription);
249
244
  }
250
245
  if (!keepSubscription) {
@@ -277,52 +272,47 @@ class SyncTable {
277
272
  'keep-subscription': keepSubscription,
278
273
  });
279
274
  }
280
- initSubscription(query, hash, cb) {
281
- return __awaiter(this, void 0, void 0, function* () {
282
- var _a, _b, _c, _d;
283
- // Wait for storage to load so that we know if we already have an existing subscription
284
- yield this.subs.waitForKeyToLoad(hash);
285
- const existingSub = this.subs.currentValue[hash];
286
- if (existingSub && existingSub.state && existingSub.state.txId) {
287
- this.sendResync(existingSub, existingSub.state, existingSub.state.txId);
288
- if (((_a = existingSub.values) === null || _a === void 0 ? void 0 : _a.entities) && cb) {
289
- cb({
290
- type: CallbackEventType.LoadFromStorage,
291
- data: subData(existingSub, (_b = existingSub.values) === null || _b === void 0 ? void 0 : _b.entities),
292
- });
293
- }
294
- return;
275
+ async initSubscription(query, hash, cb) {
276
+ // Wait for storage to load so that we know if we already have an existing subscription
277
+ await this.subs.waitForKeyToLoad(hash);
278
+ const existingSub = this.subs.currentValue[hash];
279
+ if (existingSub && existingSub.state && existingSub.state.txId) {
280
+ this.sendResync(existingSub, existingSub.state, existingSub.state.txId);
281
+ if (existingSub.values?.entities && cb) {
282
+ cb({
283
+ type: CallbackEventType.LoadFromStorage,
284
+ data: subData(existingSub, existingSub.values?.entities),
285
+ });
295
286
  }
296
- const table = Object.keys(query)[0];
297
- const orderBy = ((_d = (_c = query[table]) === null || _c === void 0 ? void 0 : _c.$) === null || _d === void 0 ? void 0 : _d.order) || { serverCreatedAt: 'asc' };
298
- const [orderField, orderDirection] = Object.entries(orderBy)[0];
299
- this.subs.updateInPlace((prev) => {
300
- prev[hash] = {
301
- query,
302
- hash: hash,
303
- table,
304
- orderDirection,
305
- orderField,
306
- createdAt: Date.now(),
307
- updatedAt: Date.now(),
308
- };
309
- });
310
- this.sendStart(query);
287
+ return;
288
+ }
289
+ const table = Object.keys(query)[0];
290
+ const orderBy = query[table]?.$?.order || { serverCreatedAt: 'asc' };
291
+ const [orderField, orderDirection] = Object.entries(orderBy)[0];
292
+ this.subs.updateInPlace((prev) => {
293
+ prev[hash] = {
294
+ query,
295
+ hash: hash,
296
+ table,
297
+ orderDirection,
298
+ orderField,
299
+ createdAt: Date.now(),
300
+ updatedAt: Date.now(),
301
+ };
311
302
  });
303
+ this.sendStart(query);
312
304
  }
313
- flushPending() {
314
- return __awaiter(this, void 0, void 0, function* () {
315
- for (const hash of Object.keys(this.callbacks)) {
316
- yield this.subs.waitForKeyToLoad(hash);
317
- const sub = this.subs.currentValue[hash];
318
- if (sub) {
319
- yield this.initSubscription(sub.query, sub.hash);
320
- }
321
- else {
322
- this.log.error('Missing sub for hash in flushPending', hash);
323
- }
305
+ async flushPending() {
306
+ for (const hash of Object.keys(this.callbacks)) {
307
+ await this.subs.waitForKeyToLoad(hash);
308
+ const sub = this.subs.currentValue[hash];
309
+ if (sub) {
310
+ await this.initSubscription(sub.query, sub.hash);
324
311
  }
325
- });
312
+ else {
313
+ this.log.error('Missing sub for hash in flushPending', hash);
314
+ }
315
+ }
326
316
  }
327
317
  onStartSyncOk(msg) {
328
318
  const subscriptionId = msg['subscription-id'];
@@ -347,7 +337,6 @@ class SyncTable {
347
337
  }
348
338
  }
349
339
  onSyncLoadBatch(msg) {
350
- var _a;
351
340
  const subscriptionId = msg['subscription-id'];
352
341
  const joinRows = msg['join-rows'];
353
342
  const hash = this.idToHash[subscriptionId];
@@ -361,7 +350,7 @@ class SyncTable {
361
350
  this.log.error('Missing sub for hash', hash, msg);
362
351
  return;
363
352
  }
364
- const values = (_a = sub.values) !== null && _a !== void 0 ? _a : {
353
+ const values = sub.values ?? {
365
354
  entities: [],
366
355
  attrsStore: this.getAttrs(),
367
356
  };
@@ -392,7 +381,6 @@ class SyncTable {
392
381
  }
393
382
  }
394
383
  onSyncInitFinish(msg) {
395
- var _a;
396
384
  const subscriptionId = msg['subscription-id'];
397
385
  const hash = this.idToHash[subscriptionId];
398
386
  if (!hash) {
@@ -417,12 +405,11 @@ class SyncTable {
417
405
  if (sub) {
418
406
  this.notifyCbs(hash, {
419
407
  type: CallbackEventType.InitialSyncComplete,
420
- data: subData(sub, ((_a = sub.values) === null || _a === void 0 ? void 0 : _a.entities) || []),
408
+ data: subData(sub, sub.values?.entities || []),
421
409
  });
422
410
  }
423
411
  }
424
412
  onSyncUpdateTriples(msg) {
425
- var _a, _b, _c;
426
413
  const subscriptionId = msg['subscription-id'];
427
414
  const hash = this.idToHash[subscriptionId];
428
415
  if (!hash) {
@@ -448,11 +435,11 @@ class SyncTable {
448
435
  // Note: this won't work as well when links are involved
449
436
  const byEid = {};
450
437
  for (const change of tx.changes) {
451
- const eidChanges = (_a = byEid[change.triple[0]]) !== null && _a !== void 0 ? _a : [];
438
+ const eidChanges = byEid[change.triple[0]] ?? [];
452
439
  byEid[change.triple[0]] = eidChanges;
453
440
  eidChanges.push(change);
454
441
  }
455
- const values = (_b = sub.values) !== null && _b !== void 0 ? _b : {
442
+ const values = sub.values ?? {
456
443
  entities: [],
457
444
  attrsStore: this.getAttrs(),
458
445
  };
@@ -513,7 +500,7 @@ class SyncTable {
513
500
  sortEntitiesInPlace(sub, orderFieldType, entities);
514
501
  this.notifyCbs(hash, {
515
502
  type: CallbackEventType.SyncTransaction,
516
- data: subData(sub, (_c = sub.values) === null || _c === void 0 ? void 0 : _c.entities),
503
+ data: subData(sub, sub.values?.entities),
517
504
  added,
518
505
  removed,
519
506
  updated,