@instantdb/core 0.22.96-experimental.add-posthog-frontend.20386914944.1 → 0.22.96
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/__tests__/src/serializeSchema.test.ts +123 -0
- package/dist/commonjs/Reactor.d.ts +13 -1
- package/dist/commonjs/Reactor.d.ts.map +1 -1
- package/dist/commonjs/Reactor.js +72 -5
- package/dist/commonjs/Reactor.js.map +1 -1
- package/dist/commonjs/SyncTable.d.ts.map +1 -1
- package/dist/commonjs/SyncTable.js +7 -6
- package/dist/commonjs/SyncTable.js.map +1 -1
- package/dist/commonjs/createRouteHandler.d.ts +8 -0
- package/dist/commonjs/createRouteHandler.d.ts.map +1 -0
- package/dist/commonjs/createRouteHandler.js +66 -0
- package/dist/commonjs/createRouteHandler.js.map +1 -0
- package/dist/commonjs/framework.d.ts +77 -0
- package/dist/commonjs/framework.d.ts.map +1 -0
- package/dist/commonjs/framework.js +228 -0
- package/dist/commonjs/framework.js.map +1 -0
- package/dist/commonjs/index.d.ts +5 -1
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +7 -1
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/parseSchemaFromJSON.d.ts +3 -0
- package/dist/commonjs/parseSchemaFromJSON.d.ts.map +1 -0
- package/dist/commonjs/parseSchemaFromJSON.js +148 -0
- package/dist/commonjs/parseSchemaFromJSON.js.map +1 -0
- package/dist/commonjs/reactorTypes.d.ts +5 -4
- package/dist/commonjs/reactorTypes.d.ts.map +1 -1
- package/dist/commonjs/reactorTypes.js.map +1 -1
- package/dist/esm/Reactor.d.ts +13 -1
- package/dist/esm/Reactor.d.ts.map +1 -1
- package/dist/esm/Reactor.js +72 -5
- package/dist/esm/Reactor.js.map +1 -1
- package/dist/esm/SyncTable.d.ts.map +1 -1
- package/dist/esm/SyncTable.js +7 -6
- package/dist/esm/SyncTable.js.map +1 -1
- package/dist/esm/createRouteHandler.d.ts +8 -0
- package/dist/esm/createRouteHandler.d.ts.map +1 -0
- package/dist/esm/createRouteHandler.js +62 -0
- package/dist/esm/createRouteHandler.js.map +1 -0
- package/dist/esm/framework.d.ts +77 -0
- package/dist/esm/framework.d.ts.map +1 -0
- package/dist/esm/framework.js +188 -0
- package/dist/esm/framework.js.map +1 -0
- package/dist/esm/index.d.ts +5 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +5 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/parseSchemaFromJSON.d.ts +3 -0
- package/dist/esm/parseSchemaFromJSON.d.ts.map +1 -0
- package/dist/esm/parseSchemaFromJSON.js +144 -0
- package/dist/esm/parseSchemaFromJSON.js.map +1 -0
- package/dist/esm/reactorTypes.d.ts +5 -4
- package/dist/esm/reactorTypes.d.ts.map +1 -1
- package/dist/esm/reactorTypes.js.map +1 -1
- package/dist/standalone/index.js +2735 -2400
- package/dist/standalone/index.umd.cjs +3 -3
- package/package.json +2 -2
- package/src/Reactor.js +83 -6
- package/src/SyncTable.ts +18 -14
- package/src/createRouteHandler.ts +63 -0
- package/src/framework.ts +318 -0
- package/src/index.ts +9 -0
- package/src/parseSchemaFromJSON.ts +176 -0
- package/src/reactorTypes.ts +5 -4
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { expect, test } from 'vitest';
|
|
2
|
+
import { i } from '../../src/schema';
|
|
3
|
+
import { parseSchemaFromJSON } from '../../src/parseSchemaFromJSON';
|
|
4
|
+
import { InstantSchemaDef } from '../../src/schemaTypes';
|
|
5
|
+
|
|
6
|
+
const schema = i.schema({
|
|
7
|
+
entities: {
|
|
8
|
+
users: i.entity({
|
|
9
|
+
name: i.string(),
|
|
10
|
+
email: i.string().indexed().unique(),
|
|
11
|
+
bio: i.string().optional(),
|
|
12
|
+
// this is a convenient way to typecheck custom JSON fields
|
|
13
|
+
// though we should probably have a backend solution for this
|
|
14
|
+
stuff: i.json<{ custom: string }>(),
|
|
15
|
+
junk: i.any(),
|
|
16
|
+
}),
|
|
17
|
+
posts: i.entity({
|
|
18
|
+
title: i.string().optional(),
|
|
19
|
+
body: i.string(),
|
|
20
|
+
}),
|
|
21
|
+
comments: i.entity({
|
|
22
|
+
body: i.string().indexed(),
|
|
23
|
+
likes: i.number(),
|
|
24
|
+
}),
|
|
25
|
+
|
|
26
|
+
birthdays: i.entity({
|
|
27
|
+
date: i.date(),
|
|
28
|
+
message: i.string(),
|
|
29
|
+
prizes: i.json<string | number>(),
|
|
30
|
+
}),
|
|
31
|
+
},
|
|
32
|
+
links: {
|
|
33
|
+
usersPosts: {
|
|
34
|
+
forward: {
|
|
35
|
+
on: 'users',
|
|
36
|
+
has: 'many',
|
|
37
|
+
label: 'posts',
|
|
38
|
+
},
|
|
39
|
+
reverse: {
|
|
40
|
+
on: 'posts',
|
|
41
|
+
has: 'one',
|
|
42
|
+
label: 'author',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
postsComments: {
|
|
46
|
+
forward: {
|
|
47
|
+
on: 'posts',
|
|
48
|
+
has: 'many',
|
|
49
|
+
label: 'comments',
|
|
50
|
+
},
|
|
51
|
+
reverse: {
|
|
52
|
+
on: 'comments',
|
|
53
|
+
has: 'one',
|
|
54
|
+
label: 'post',
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
friendships: {
|
|
58
|
+
forward: {
|
|
59
|
+
on: 'users',
|
|
60
|
+
has: 'many',
|
|
61
|
+
label: 'friends',
|
|
62
|
+
},
|
|
63
|
+
reverse: {
|
|
64
|
+
on: 'users',
|
|
65
|
+
has: 'many',
|
|
66
|
+
label: '_friends',
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
referrals: {
|
|
70
|
+
forward: {
|
|
71
|
+
on: 'users',
|
|
72
|
+
has: 'many',
|
|
73
|
+
label: 'referred',
|
|
74
|
+
},
|
|
75
|
+
reverse: {
|
|
76
|
+
on: 'users',
|
|
77
|
+
has: 'one',
|
|
78
|
+
label: 'referrer',
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
rooms: {
|
|
83
|
+
chat: {
|
|
84
|
+
presence: i.entity({
|
|
85
|
+
name: i.string(),
|
|
86
|
+
status: i.string(),
|
|
87
|
+
}),
|
|
88
|
+
topics: {
|
|
89
|
+
sendEmoji: i.entity({
|
|
90
|
+
emoji: i.string(),
|
|
91
|
+
}),
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
type AnySchema = InstantSchemaDef<any, any, any>;
|
|
98
|
+
|
|
99
|
+
// compare schemas by stringifying them with json and comparing the strings
|
|
100
|
+
const compareSchemas = (schema1: AnySchema, schema2: AnySchema) => {
|
|
101
|
+
expect(JSON.stringify(schema1, null, 2)).toBe(
|
|
102
|
+
JSON.stringify(schema2, null, 2),
|
|
103
|
+
);
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
test('ability to parse stringified schema into real schema object', () => {
|
|
107
|
+
const stringified = JSON.stringify(schema, null, 2);
|
|
108
|
+
const parsed = JSON.parse(stringified);
|
|
109
|
+
console.log(stringified);
|
|
110
|
+
|
|
111
|
+
const otherSide = parseSchemaFromJSON(parsed);
|
|
112
|
+
|
|
113
|
+
compareSchemas(schema, otherSide);
|
|
114
|
+
|
|
115
|
+
expect(schema.entities.comments.links).toEqual(
|
|
116
|
+
otherSide.entities.comments.links,
|
|
117
|
+
);
|
|
118
|
+
expect(schema.entities.comments.asType).toEqual(
|
|
119
|
+
otherSide.entities.comments.asType,
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
expect(schema).toStrictEqual(otherSide);
|
|
123
|
+
});
|
|
@@ -102,6 +102,17 @@ export default class Reactor<RoomSchema extends import("./presence.ts").RoomSche
|
|
|
102
102
|
_setStatus(status: any, err: any): void;
|
|
103
103
|
_onMergeKv: (key: any, storageV: any, inMemoryV: any) => any;
|
|
104
104
|
_flushEnqueuedRoomData(roomId: any): void;
|
|
105
|
+
/**
|
|
106
|
+
* Does the same thing as add-query-ok
|
|
107
|
+
* but called as a result of receiving query info from ssr
|
|
108
|
+
* @param {any} q
|
|
109
|
+
* @param {{ triples: any; pageInfo: any; }} result
|
|
110
|
+
* @param {boolean} enableCardinalityInference
|
|
111
|
+
*/
|
|
112
|
+
_addQueryData(q: any, result: {
|
|
113
|
+
triples: any;
|
|
114
|
+
pageInfo: any;
|
|
115
|
+
}, enableCardinalityInference: boolean): void;
|
|
105
116
|
_handleReceive(connId: any, msg: any): void;
|
|
106
117
|
_sessionId: any;
|
|
107
118
|
_pendingMutations(): any;
|
|
@@ -154,7 +165,7 @@ export default class Reactor<RoomSchema extends import("./presence.ts").RoomSche
|
|
|
154
165
|
*/
|
|
155
166
|
optimisticAttrs(): s.AttrsStore;
|
|
156
167
|
/** Runs instaql on a query and a store */
|
|
157
|
-
dataForQuery(hash: any): any;
|
|
168
|
+
dataForQuery(hash: any, applyOptimistic?: boolean): any;
|
|
158
169
|
_applyOptimisticUpdates(store: any, attrsStore: any, mutations: any, processedTxId: any): {
|
|
159
170
|
store: any;
|
|
160
171
|
attrsStore: any;
|
|
@@ -260,6 +271,7 @@ export default class Reactor<RoomSchema extends import("./presence.ts").RoomSche
|
|
|
260
271
|
}>;
|
|
261
272
|
_hasCurrentUser(): Promise<boolean>;
|
|
262
273
|
changeCurrentUser(newUser: any): Promise<void>;
|
|
274
|
+
syncUserToEndpoint(user: any): Promise<void>;
|
|
263
275
|
updateUser(newUser: any): void;
|
|
264
276
|
sendMagicCode({ email }: {
|
|
265
277
|
email: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Reactor.d.ts","sourceRoot":"","sources":["../../src/Reactor.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Reactor.d.ts","sourceRoot":"","sources":["../../src/Reactor.js"],"names":[],"mappings":"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"}
|
package/dist/commonjs/Reactor.js
CHANGED
|
@@ -99,6 +99,7 @@ const STATUS = {
|
|
|
99
99
|
const QUERY_ONCE_TIMEOUT = 30000;
|
|
100
100
|
const PENDING_TX_CLEANUP_TIMEOUT = 30000;
|
|
101
101
|
const PENDING_MUTATION_CLEANUP_THRESHOLD = 200;
|
|
102
|
+
const ONE_MIN_MS = 1000 * 60;
|
|
102
103
|
const defaultConfig = {
|
|
103
104
|
apiURI: 'https://api.instantdb.com',
|
|
104
105
|
websocketURI: 'wss://api.instantdb.com/runtime/session',
|
|
@@ -487,7 +488,13 @@ class Reactor {
|
|
|
487
488
|
}, () => this.ensureAttrs());
|
|
488
489
|
this._oauthCallbackResponse = this._oauthLoginInit();
|
|
489
490
|
// kick off a request to cache it
|
|
490
|
-
this.getCurrentUser()
|
|
491
|
+
this.getCurrentUser().then((userInfo) => {
|
|
492
|
+
this.syncUserToEndpoint(userInfo.user);
|
|
493
|
+
});
|
|
494
|
+
setInterval(() => __awaiter(this, void 0, void 0, function* () {
|
|
495
|
+
const currentUser = yield this.getCurrentUser();
|
|
496
|
+
this.syncUserToEndpoint(currentUser.user);
|
|
497
|
+
}), ONE_MIN_MS);
|
|
491
498
|
NetworkListener.getIsOnline().then((isOnline) => {
|
|
492
499
|
this._isOnline = isOnline;
|
|
493
500
|
this._startSocket();
|
|
@@ -639,6 +646,37 @@ class Reactor {
|
|
|
639
646
|
}
|
|
640
647
|
}
|
|
641
648
|
}
|
|
649
|
+
/**
|
|
650
|
+
* Does the same thing as add-query-ok
|
|
651
|
+
* but called as a result of receiving query info from ssr
|
|
652
|
+
* @param {any} q
|
|
653
|
+
* @param {{ triples: any; pageInfo: any; }} result
|
|
654
|
+
* @param {boolean} enableCardinalityInference
|
|
655
|
+
*/
|
|
656
|
+
_addQueryData(q, result, enableCardinalityInference) {
|
|
657
|
+
if (!this.attrs) {
|
|
658
|
+
throw new Error('Attrs in reactor have not been set');
|
|
659
|
+
}
|
|
660
|
+
const queryHash = (0, weakHash_ts_1.default)(q);
|
|
661
|
+
const attrsStore = this.ensureAttrs();
|
|
662
|
+
const store = s.createStore(this.attrs, result.triples, enableCardinalityInference, this.config.useDateObjects);
|
|
663
|
+
this.querySubs.updateInPlace((prev) => {
|
|
664
|
+
prev[queryHash] = {
|
|
665
|
+
result: {
|
|
666
|
+
store,
|
|
667
|
+
attrsStore,
|
|
668
|
+
pageInfo: result.pageInfo,
|
|
669
|
+
processedTxId: undefined,
|
|
670
|
+
isExternal: true,
|
|
671
|
+
},
|
|
672
|
+
q,
|
|
673
|
+
};
|
|
674
|
+
});
|
|
675
|
+
this._cleanupPendingMutationsQueries();
|
|
676
|
+
this.notifyOne(queryHash);
|
|
677
|
+
this.notifyOneQueryOnce(queryHash);
|
|
678
|
+
this._cleanupPendingMutationsTimeout();
|
|
679
|
+
}
|
|
642
680
|
_handleReceive(connId, msg) {
|
|
643
681
|
var _a, _b, _c, _d, _e, _f;
|
|
644
682
|
// opt-out, enabled by default if schema
|
|
@@ -1180,7 +1218,7 @@ class Reactor {
|
|
|
1180
1218
|
return new s.AttrsStoreClass(attrs, this._linkIndex);
|
|
1181
1219
|
}
|
|
1182
1220
|
/** Runs instaql on a query and a store */
|
|
1183
|
-
dataForQuery(hash) {
|
|
1221
|
+
dataForQuery(hash, applyOptimistic = true) {
|
|
1184
1222
|
const errorMessage = this._errorMessage;
|
|
1185
1223
|
if (errorMessage) {
|
|
1186
1224
|
return { error: errorMessage };
|
|
@@ -1202,10 +1240,16 @@ class Reactor {
|
|
|
1202
1240
|
pendingMutationsVersion === cached.pendingMutationsVersion) {
|
|
1203
1241
|
return cached;
|
|
1204
1242
|
}
|
|
1205
|
-
|
|
1243
|
+
let store = result.store;
|
|
1244
|
+
let attrsStore = result.attrsStore;
|
|
1245
|
+
const { pageInfo, aggregate, processedTxId } = result;
|
|
1206
1246
|
const mutations = this._rewriteMutationsSorted(attrsStore, pendingMutations);
|
|
1207
|
-
|
|
1208
|
-
|
|
1247
|
+
if (applyOptimistic) {
|
|
1248
|
+
const optimisticResult = this._applyOptimisticUpdates(store, attrsStore, mutations, processedTxId);
|
|
1249
|
+
store = optimisticResult.store;
|
|
1250
|
+
attrsStore = optimisticResult.attrsStore;
|
|
1251
|
+
}
|
|
1252
|
+
const resp = (0, instaql_ts_1.default)({ store: store, attrsStore: attrsStore, pageInfo, aggregate }, q);
|
|
1209
1253
|
return { data: resp, querySubVersion, pendingMutationsVersion };
|
|
1210
1254
|
}
|
|
1211
1255
|
_applyOptimisticUpdates(store, attrsStore, mutations, processedTxId) {
|
|
@@ -1671,7 +1715,30 @@ class Reactor {
|
|
|
1671
1715
|
}
|
|
1672
1716
|
});
|
|
1673
1717
|
}
|
|
1718
|
+
syncUserToEndpoint(user) {
|
|
1719
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1720
|
+
if (!this.config.firstPartyPath)
|
|
1721
|
+
return;
|
|
1722
|
+
try {
|
|
1723
|
+
fetch(this.config.firstPartyPath + '/', {
|
|
1724
|
+
method: 'POST',
|
|
1725
|
+
body: JSON.stringify({
|
|
1726
|
+
type: 'sync-user',
|
|
1727
|
+
appId: this.config.appId,
|
|
1728
|
+
user: user,
|
|
1729
|
+
}),
|
|
1730
|
+
headers: {
|
|
1731
|
+
'Content-Type': 'application/json',
|
|
1732
|
+
},
|
|
1733
|
+
});
|
|
1734
|
+
}
|
|
1735
|
+
catch (error) {
|
|
1736
|
+
this._log.error('Error syncing user with external endpoint', error);
|
|
1737
|
+
}
|
|
1738
|
+
});
|
|
1739
|
+
}
|
|
1674
1740
|
updateUser(newUser) {
|
|
1741
|
+
this.syncUserToEndpoint(newUser);
|
|
1675
1742
|
const newV = { error: undefined, user: newUser };
|
|
1676
1743
|
this._currentUserCached = Object.assign({ isLoading: false }, newV);
|
|
1677
1744
|
this._dataForQueryCache = {};
|