@instantdb/core 0.22.95 → 0.22.96-experimental.add-posthog-frontend.20386914944.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.
- package/dist/commonjs/Reactor.d.ts +1 -13
- package/dist/commonjs/Reactor.d.ts.map +1 -1
- package/dist/commonjs/Reactor.js +5 -72
- package/dist/commonjs/Reactor.js.map +1 -1
- package/dist/commonjs/SyncTable.d.ts.map +1 -1
- package/dist/commonjs/SyncTable.js +6 -7
- package/dist/commonjs/SyncTable.js.map +1 -1
- package/dist/commonjs/index.d.ts +1 -5
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +1 -7
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/reactorTypes.d.ts +4 -5
- package/dist/commonjs/reactorTypes.d.ts.map +1 -1
- package/dist/commonjs/reactorTypes.js.map +1 -1
- package/dist/esm/Reactor.d.ts +1 -13
- package/dist/esm/Reactor.d.ts.map +1 -1
- package/dist/esm/Reactor.js +5 -72
- package/dist/esm/Reactor.js.map +1 -1
- package/dist/esm/SyncTable.d.ts.map +1 -1
- package/dist/esm/SyncTable.js +6 -7
- package/dist/esm/SyncTable.js.map +1 -1
- package/dist/esm/index.d.ts +1 -5
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/reactorTypes.d.ts +4 -5
- package/dist/esm/reactorTypes.d.ts.map +1 -1
- package/dist/esm/reactorTypes.js.map +1 -1
- package/dist/standalone/index.js +2400 -2735
- package/dist/standalone/index.umd.cjs +3 -3
- package/package.json +2 -2
- package/src/Reactor.js +6 -83
- package/src/SyncTable.ts +14 -18
- package/src/index.ts +0 -9
- package/src/reactorTypes.ts +4 -5
- package/__tests__/src/serializeSchema.test.ts +0 -123
- package/dist/commonjs/createRouteHandler.d.ts +0 -8
- package/dist/commonjs/createRouteHandler.d.ts.map +0 -1
- package/dist/commonjs/createRouteHandler.js +0 -66
- package/dist/commonjs/createRouteHandler.js.map +0 -1
- package/dist/commonjs/framework.d.ts +0 -77
- package/dist/commonjs/framework.d.ts.map +0 -1
- package/dist/commonjs/framework.js +0 -228
- package/dist/commonjs/framework.js.map +0 -1
- package/dist/commonjs/parseSchemaFromJSON.d.ts +0 -3
- package/dist/commonjs/parseSchemaFromJSON.d.ts.map +0 -1
- package/dist/commonjs/parseSchemaFromJSON.js +0 -148
- package/dist/commonjs/parseSchemaFromJSON.js.map +0 -1
- package/dist/esm/createRouteHandler.d.ts +0 -8
- package/dist/esm/createRouteHandler.d.ts.map +0 -1
- package/dist/esm/createRouteHandler.js +0 -62
- package/dist/esm/createRouteHandler.js.map +0 -1
- package/dist/esm/framework.d.ts +0 -77
- package/dist/esm/framework.d.ts.map +0 -1
- package/dist/esm/framework.js +0 -188
- package/dist/esm/framework.js.map +0 -1
- package/dist/esm/parseSchemaFromJSON.d.ts +0 -3
- package/dist/esm/parseSchemaFromJSON.d.ts.map +0 -1
- package/dist/esm/parseSchemaFromJSON.js +0 -144
- package/dist/esm/parseSchemaFromJSON.js.map +0 -1
- package/src/createRouteHandler.ts +0 -63
- package/src/framework.ts +0 -318
- package/src/parseSchemaFromJSON.ts +0 -176
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@instantdb/core",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.96-experimental.add-posthog-frontend.20386914944.1",
|
|
4
4
|
"description": "Instant's core local abstraction",
|
|
5
5
|
"homepage": "https://github.com/instantdb/instant/tree/main/client/packages/core",
|
|
6
6
|
"repository": {
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"dependencies": {
|
|
54
54
|
"mutative": "^1.0.10",
|
|
55
55
|
"uuid": "^11.1.0",
|
|
56
|
-
"@instantdb/version": "0.22.
|
|
56
|
+
"@instantdb/version": "0.22.96-experimental.add-posthog-frontend.20386914944.1"
|
|
57
57
|
},
|
|
58
58
|
"scripts": {
|
|
59
59
|
"test": "vitest",
|
package/src/Reactor.js
CHANGED
|
@@ -50,7 +50,6 @@ const STATUS = {
|
|
|
50
50
|
const QUERY_ONCE_TIMEOUT = 30_000;
|
|
51
51
|
const PENDING_TX_CLEANUP_TIMEOUT = 30_000;
|
|
52
52
|
const PENDING_MUTATION_CLEANUP_THRESHOLD = 200;
|
|
53
|
-
const ONE_MIN_MS = 1_000 * 60;
|
|
54
53
|
|
|
55
54
|
const defaultConfig = {
|
|
56
55
|
apiURI: 'https://api.instantdb.com',
|
|
@@ -349,14 +348,7 @@ export default class Reactor {
|
|
|
349
348
|
this._oauthCallbackResponse = this._oauthLoginInit();
|
|
350
349
|
|
|
351
350
|
// kick off a request to cache it
|
|
352
|
-
this.getCurrentUser()
|
|
353
|
-
this.syncUserToEndpoint(userInfo.user);
|
|
354
|
-
});
|
|
355
|
-
|
|
356
|
-
setInterval(async () => {
|
|
357
|
-
const currentUser = await this.getCurrentUser();
|
|
358
|
-
this.syncUserToEndpoint(currentUser.user);
|
|
359
|
-
}, ONE_MIN_MS);
|
|
351
|
+
this.getCurrentUser();
|
|
360
352
|
|
|
361
353
|
NetworkListener.getIsOnline().then((isOnline) => {
|
|
362
354
|
this._isOnline = isOnline;
|
|
@@ -557,43 +549,6 @@ export default class Reactor {
|
|
|
557
549
|
}
|
|
558
550
|
}
|
|
559
551
|
|
|
560
|
-
/**
|
|
561
|
-
* Does the same thing as add-query-ok
|
|
562
|
-
* but called as a result of receiving query info from ssr
|
|
563
|
-
* @param {any} q
|
|
564
|
-
* @param {{ triples: any; pageInfo: any; }} result
|
|
565
|
-
* @param {boolean} enableCardinalityInference
|
|
566
|
-
*/
|
|
567
|
-
_addQueryData(q, result, enableCardinalityInference) {
|
|
568
|
-
if (!this.attrs) {
|
|
569
|
-
throw new Error('Attrs in reactor have not been set');
|
|
570
|
-
}
|
|
571
|
-
const queryHash = weakHash(q);
|
|
572
|
-
const attrsStore = this.ensureAttrs();
|
|
573
|
-
const store = s.createStore(
|
|
574
|
-
this.attrs,
|
|
575
|
-
result.triples,
|
|
576
|
-
enableCardinalityInference,
|
|
577
|
-
this.config.useDateObjects,
|
|
578
|
-
);
|
|
579
|
-
this.querySubs.updateInPlace((prev) => {
|
|
580
|
-
prev[queryHash] = {
|
|
581
|
-
result: {
|
|
582
|
-
store,
|
|
583
|
-
attrsStore,
|
|
584
|
-
pageInfo: result.pageInfo,
|
|
585
|
-
processedTxId: undefined,
|
|
586
|
-
isExternal: true,
|
|
587
|
-
},
|
|
588
|
-
q,
|
|
589
|
-
};
|
|
590
|
-
});
|
|
591
|
-
this._cleanupPendingMutationsQueries();
|
|
592
|
-
this.notifyOne(queryHash);
|
|
593
|
-
this.notifyOneQueryOnce(queryHash);
|
|
594
|
-
this._cleanupPendingMutationsTimeout();
|
|
595
|
-
}
|
|
596
|
-
|
|
597
552
|
_handleReceive(connId, msg) {
|
|
598
553
|
// opt-out, enabled by default if schema
|
|
599
554
|
const enableCardinalityInference =
|
|
@@ -1266,7 +1221,7 @@ export default class Reactor {
|
|
|
1266
1221
|
}
|
|
1267
1222
|
|
|
1268
1223
|
/** Runs instaql on a query and a store */
|
|
1269
|
-
dataForQuery(hash
|
|
1224
|
+
dataForQuery(hash) {
|
|
1270
1225
|
const errorMessage = this._errorMessage;
|
|
1271
1226
|
if (errorMessage) {
|
|
1272
1227
|
return { error: errorMessage };
|
|
@@ -1290,26 +1245,15 @@ export default class Reactor {
|
|
|
1290
1245
|
return cached;
|
|
1291
1246
|
}
|
|
1292
1247
|
|
|
1293
|
-
|
|
1294
|
-
let attrsStore = result.attrsStore;
|
|
1295
|
-
const { pageInfo, aggregate, processedTxId } = result;
|
|
1248
|
+
const { store, attrsStore, pageInfo, aggregate, processedTxId } = result;
|
|
1296
1249
|
const mutations = this._rewriteMutationsSorted(
|
|
1297
1250
|
attrsStore,
|
|
1298
1251
|
pendingMutations,
|
|
1299
1252
|
);
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
store,
|
|
1303
|
-
attrsStore,
|
|
1304
|
-
mutations,
|
|
1305
|
-
processedTxId,
|
|
1306
|
-
);
|
|
1307
|
-
|
|
1308
|
-
store = optimisticResult.store;
|
|
1309
|
-
attrsStore = optimisticResult.attrsStore;
|
|
1310
|
-
}
|
|
1253
|
+
const { store: newStore, attrsStore: newAttrsStore } =
|
|
1254
|
+
this._applyOptimisticUpdates(store, attrsStore, mutations, processedTxId);
|
|
1311
1255
|
const resp = instaql(
|
|
1312
|
-
{ store:
|
|
1256
|
+
{ store: newStore, attrsStore: newAttrsStore, pageInfo, aggregate },
|
|
1313
1257
|
q,
|
|
1314
1258
|
);
|
|
1315
1259
|
|
|
@@ -2045,28 +1989,7 @@ export default class Reactor {
|
|
|
2045
1989
|
}
|
|
2046
1990
|
}
|
|
2047
1991
|
|
|
2048
|
-
async syncUserToEndpoint(user) {
|
|
2049
|
-
if (!this.config.firstPartyPath) return;
|
|
2050
|
-
try {
|
|
2051
|
-
fetch(this.config.firstPartyPath + '/', {
|
|
2052
|
-
method: 'POST',
|
|
2053
|
-
body: JSON.stringify({
|
|
2054
|
-
type: 'sync-user',
|
|
2055
|
-
appId: this.config.appId,
|
|
2056
|
-
user: user,
|
|
2057
|
-
}),
|
|
2058
|
-
headers: {
|
|
2059
|
-
'Content-Type': 'application/json',
|
|
2060
|
-
},
|
|
2061
|
-
});
|
|
2062
|
-
} catch (error) {
|
|
2063
|
-
this._log.error('Error syncing user with external endpoint', error);
|
|
2064
|
-
}
|
|
2065
|
-
}
|
|
2066
|
-
|
|
2067
1992
|
updateUser(newUser) {
|
|
2068
|
-
this.syncUserToEndpoint(newUser);
|
|
2069
|
-
|
|
2070
1993
|
const newV = { error: undefined, user: newUser };
|
|
2071
1994
|
this._currentUserCached = { isLoading: false, ...newV };
|
|
2072
1995
|
this._dataForQueryCache = {};
|
package/src/SyncTable.ts
CHANGED
|
@@ -199,18 +199,20 @@ function applyChangesToStore(
|
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
201
|
|
|
202
|
-
type ChangedFieldsOfChanges = {
|
|
203
|
-
[eid: string]: { [field: string]: { oldValue: unknown; newValue: unknown } };
|
|
204
|
-
};
|
|
205
|
-
|
|
206
202
|
function changedFieldsOfChanges(
|
|
207
203
|
store: s.Store,
|
|
208
204
|
attrsStore: s.AttrsStore,
|
|
209
205
|
changes: SyncUpdateTriplesMsg['txes'][number]['changes'],
|
|
210
|
-
):
|
|
206
|
+
): {
|
|
207
|
+
[eid: string]: SyncTransaction<
|
|
208
|
+
any,
|
|
209
|
+
any,
|
|
210
|
+
any
|
|
211
|
+
>['updated'][number]['changedFields'];
|
|
212
|
+
} {
|
|
211
213
|
// This will be more complicated when we include links, we can either add a
|
|
212
214
|
// changedLinks field or we can have something like 'bookshelves.title`
|
|
213
|
-
const changedFields
|
|
215
|
+
const changedFields = {};
|
|
214
216
|
for (const { action, triple } of changes) {
|
|
215
217
|
const [e, a, v] = triple;
|
|
216
218
|
const field = attrsStore.getAttr(a)?.['forward-identity']?.[2];
|
|
@@ -220,6 +222,7 @@ function changedFieldsOfChanges(
|
|
|
220
222
|
changedFields[e] = fields;
|
|
221
223
|
|
|
222
224
|
const oldNew = fields[field] ?? {};
|
|
225
|
+
fields[field] = oldNew;
|
|
223
226
|
|
|
224
227
|
switch (action) {
|
|
225
228
|
case 'added':
|
|
@@ -232,15 +235,12 @@ function changedFieldsOfChanges(
|
|
|
232
235
|
}
|
|
233
236
|
break;
|
|
234
237
|
}
|
|
235
|
-
|
|
236
|
-
fields[field] = oldNew;
|
|
237
238
|
}
|
|
238
239
|
|
|
239
|
-
for (const
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
}
|
|
240
|
+
for (const k of Object.keys(changedFields)) {
|
|
241
|
+
const { oldValue, newValue } = changedFields[k];
|
|
242
|
+
if (oldValue === newValue) {
|
|
243
|
+
delete changedFields[k];
|
|
244
244
|
}
|
|
245
245
|
}
|
|
246
246
|
return changedFields;
|
|
@@ -783,11 +783,7 @@ export class SyncTable {
|
|
|
783
783
|
updated.push({
|
|
784
784
|
oldEntity: ent.entity,
|
|
785
785
|
newEntity: entity,
|
|
786
|
-
changedFields:
|
|
787
|
-
any,
|
|
788
|
-
any,
|
|
789
|
-
any
|
|
790
|
-
>['updated'][number]['changedFields'],
|
|
786
|
+
changedFields: changedFields || {},
|
|
791
787
|
});
|
|
792
788
|
ent.entity = entity;
|
|
793
789
|
} else {
|
package/src/index.ts
CHANGED
|
@@ -20,13 +20,10 @@ import {
|
|
|
20
20
|
validateTransactions,
|
|
21
21
|
TransactionValidationError,
|
|
22
22
|
} from './transactionValidation.ts';
|
|
23
|
-
|
|
24
23
|
import {
|
|
25
24
|
StorageInterface,
|
|
26
25
|
type StorageInterfaceStoreName,
|
|
27
26
|
} from './utils/PersistedObject.ts';
|
|
28
|
-
import { createInstantRouteHandler } from './createRouteHandler.ts';
|
|
29
|
-
import { parseSchemaFromJSON } from './parseSchemaFromJSON.ts';
|
|
30
27
|
|
|
31
28
|
import type {
|
|
32
29
|
PresenceOpts,
|
|
@@ -106,7 +103,6 @@ import type {
|
|
|
106
103
|
} from './schemaTypes.ts';
|
|
107
104
|
import type { InstantRules } from './rulesTypes.ts';
|
|
108
105
|
import type { UploadFileResponse, DeleteFileResponse } from './StorageAPI.ts';
|
|
109
|
-
import { FrameworkClient, type FrameworkConfig } from './framework.ts';
|
|
110
106
|
|
|
111
107
|
import type {
|
|
112
108
|
ExchangeCodeForTokenParams,
|
|
@@ -157,7 +153,6 @@ export type InstantConfig<
|
|
|
157
153
|
appId: string;
|
|
158
154
|
schema?: S;
|
|
159
155
|
websocketURI?: string;
|
|
160
|
-
firstPartyPath?: string;
|
|
161
156
|
apiURI?: string;
|
|
162
157
|
devtool?: boolean | DevtoolConfig;
|
|
163
158
|
verbose?: boolean;
|
|
@@ -908,9 +903,7 @@ export {
|
|
|
908
903
|
validateQuery,
|
|
909
904
|
QueryValidationError,
|
|
910
905
|
validateTransactions,
|
|
911
|
-
parseSchemaFromJSON,
|
|
912
906
|
TransactionValidationError,
|
|
913
|
-
FrameworkClient,
|
|
914
907
|
|
|
915
908
|
// error
|
|
916
909
|
InstantAPIError,
|
|
@@ -1026,7 +1019,6 @@ export {
|
|
|
1026
1019
|
|
|
1027
1020
|
// SSE
|
|
1028
1021
|
type EventSourceType,
|
|
1029
|
-
type FrameworkConfig,
|
|
1030
1022
|
|
|
1031
1023
|
// sync table types
|
|
1032
1024
|
type SyncTableCallback,
|
|
@@ -1043,5 +1035,4 @@ export {
|
|
|
1043
1035
|
// storage (e.g. indexeddb) interface
|
|
1044
1036
|
StorageInterface,
|
|
1045
1037
|
type StorageInterfaceStoreName,
|
|
1046
|
-
createInstantRouteHandler,
|
|
1047
1038
|
};
|
package/src/reactorTypes.ts
CHANGED
|
@@ -6,13 +6,12 @@ export type QuerySubResult = {
|
|
|
6
6
|
attrsStore: AttrsStore;
|
|
7
7
|
pageInfo?: PageInfoResponse<any> | null | undefined;
|
|
8
8
|
aggregate?: any;
|
|
9
|
-
processedTxId
|
|
10
|
-
isExternal?: boolean;
|
|
9
|
+
processedTxId: number;
|
|
11
10
|
};
|
|
12
11
|
|
|
13
12
|
export type QuerySub = {
|
|
14
13
|
q: Object;
|
|
15
|
-
eventId
|
|
14
|
+
eventId: string;
|
|
16
15
|
lastAccessed?: number | null | undefined;
|
|
17
16
|
result?: QuerySubResult;
|
|
18
17
|
};
|
|
@@ -22,12 +21,12 @@ export type QuerySubResultInStorage = {
|
|
|
22
21
|
attrsStore: AttrsStoreJson;
|
|
23
22
|
pageInfo?: PageInfoResponse<any> | null | undefined;
|
|
24
23
|
aggregate?: any;
|
|
25
|
-
processedTxId
|
|
24
|
+
processedTxId: number;
|
|
26
25
|
};
|
|
27
26
|
|
|
28
27
|
export type QuerySubInStorage = {
|
|
29
28
|
q: Object;
|
|
30
|
-
eventId
|
|
29
|
+
eventId: string;
|
|
31
30
|
lastAccessed?: number | null | undefined;
|
|
32
31
|
result?: QuerySubResultInStorage;
|
|
33
32
|
};
|
|
@@ -1,123 +0,0 @@
|
|
|
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
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createRouteHandler.d.ts","sourceRoot":"","sources":["../../src/createRouteHandler.ts"],"names":[],"mappings":"AAEA,KAAK,wBAAwB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAgCF,eAAO,MAAM,yBAAyB,GAAI,QAAQ,wBAAwB;gBAEpD,OAAO;CAwB5B,CAAC"}
|
|
@@ -1,66 +0,0 @@
|
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.createInstantRouteHandler = void 0;
|
|
13
|
-
function createUserSyncResponse(config, user) {
|
|
14
|
-
if (user && user.refresh_token) {
|
|
15
|
-
return new Response(JSON.stringify({ ok: true }), {
|
|
16
|
-
headers: {
|
|
17
|
-
'Content-Type': 'application/json',
|
|
18
|
-
// 7 day expiry
|
|
19
|
-
'Set-Cookie': `instant_user_${config.appId}=${JSON.stringify(user)}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=604800`,
|
|
20
|
-
},
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
return new Response(JSON.stringify({ ok: true }), {
|
|
25
|
-
headers: {
|
|
26
|
-
'Content-Type': 'application/json',
|
|
27
|
-
// remove the cookie (some browsers)
|
|
28
|
-
'Set-Cookie': `instant_user_${config.appId}=; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=-1`,
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
function errorResponse(status, message) {
|
|
34
|
-
return new Response(JSON.stringify({ ok: false, error: message }), {
|
|
35
|
-
status,
|
|
36
|
-
headers: { 'Content-Type': 'application/json' },
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
const createInstantRouteHandler = (config) => {
|
|
40
|
-
return {
|
|
41
|
-
POST: (req) => __awaiter(void 0, void 0, void 0, function* () {
|
|
42
|
-
var _a;
|
|
43
|
-
let body;
|
|
44
|
-
try {
|
|
45
|
-
body = yield req.json();
|
|
46
|
-
}
|
|
47
|
-
catch (_b) {
|
|
48
|
-
return errorResponse(400, 'Invalid JSON body');
|
|
49
|
-
}
|
|
50
|
-
if (!body.type) {
|
|
51
|
-
return errorResponse(400, 'Missing "type" field');
|
|
52
|
-
}
|
|
53
|
-
if (body.appId !== config.appId) {
|
|
54
|
-
return errorResponse(403, 'App ID mismatch');
|
|
55
|
-
}
|
|
56
|
-
switch (body.type) {
|
|
57
|
-
case 'sync-user':
|
|
58
|
-
return createUserSyncResponse(config, (_a = body.user) !== null && _a !== void 0 ? _a : null);
|
|
59
|
-
default:
|
|
60
|
-
return errorResponse(400, `Unknown type: ${body.type}`);
|
|
61
|
-
}
|
|
62
|
-
}),
|
|
63
|
-
};
|
|
64
|
-
};
|
|
65
|
-
exports.createInstantRouteHandler = createInstantRouteHandler;
|
|
66
|
-
//# sourceMappingURL=createRouteHandler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createRouteHandler.js","sourceRoot":"","sources":["../../src/createRouteHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAMA,SAAS,sBAAsB,CAC7B,MAAgC,EAChC,IAAiB;IAEjB,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QAC/B,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;YAChD,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe;gBACf,YAAY,EAAE,gBAAgB,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,6DAA6D;aAChI;SACF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;YAChD,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,oCAAoC;gBACpC,YAAY,EAAE,gBAAgB,MAAM,CAAC,KAAK,0DAA0D;aACrG;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAAc,EAAE,OAAe;IACpD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;QACjE,MAAM;QACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAEM,MAAM,yBAAyB,GAAG,CAAC,MAAgC,EAAE,EAAE;IAC5E,OAAO;QACL,IAAI,EAAE,CAAO,GAAY,EAAE,EAAE;;YAC3B,IAAI,IAA2D,CAAC;YAChE,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC1B,CAAC;YAAC,WAAM,CAAC;gBACP,OAAO,aAAa,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,aAAa,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;YACpD,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,OAAO,aAAa,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAC/C,CAAC;YAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,WAAW;oBACd,OAAO,sBAAsB,CAAC,MAAM,EAAE,MAAA,IAAI,CAAC,IAAI,mCAAI,IAAI,CAAC,CAAC;gBAC3D;oBACE,OAAO,aAAa,CAAC,GAAG,EAAE,iBAAiB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAA;KACF,CAAC;AACJ,CAAC,CAAC;AA1BW,QAAA,yBAAyB,6BA0BpC","sourcesContent":["import type { User } from './clientTypes.js';\n\ntype CreateRouteHandlerConfig = {\n appId: string;\n};\n\nfunction createUserSyncResponse(\n config: CreateRouteHandlerConfig,\n user: User | null,\n) {\n if (user && user.refresh_token) {\n return new Response(JSON.stringify({ ok: true }), {\n headers: {\n 'Content-Type': 'application/json',\n // 7 day expiry\n 'Set-Cookie': `instant_user_${config.appId}=${JSON.stringify(user)}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=604800`,\n },\n });\n } else {\n return new Response(JSON.stringify({ ok: true }), {\n headers: {\n 'Content-Type': 'application/json',\n // remove the cookie (some browsers)\n 'Set-Cookie': `instant_user_${config.appId}=; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=-1`,\n },\n });\n }\n}\n\nfunction errorResponse(status: number, message: string) {\n return new Response(JSON.stringify({ ok: false, error: message }), {\n status,\n headers: { 'Content-Type': 'application/json' },\n });\n}\n\nexport const createInstantRouteHandler = (config: CreateRouteHandlerConfig) => {\n return {\n POST: async (req: Request) => {\n let body: { type?: string; appId?: string; user?: User | null };\n try {\n body = await req.json();\n } catch {\n return errorResponse(400, 'Invalid JSON body');\n }\n\n if (!body.type) {\n return errorResponse(400, 'Missing \"type\" field');\n }\n\n if (body.appId !== config.appId) {\n return errorResponse(403, 'App ID mismatch');\n }\n\n switch (body.type) {\n case 'sync-user':\n return createUserSyncResponse(config, body.user ?? null);\n default:\n return errorResponse(400, `Unknown type: ${body.type}`);\n }\n },\n };\n};\n"]}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { InstantCoreDatabase, InstantDBAttr } from './index.ts';
|
|
2
|
-
import { RuleParams } from './schemaTypes.ts';
|
|
3
|
-
export declare const isServer: boolean;
|
|
4
|
-
export type FrameworkConfig = {
|
|
5
|
-
token?: string | null;
|
|
6
|
-
db: InstantCoreDatabase<any, any>;
|
|
7
|
-
};
|
|
8
|
-
type QueryPromise = {
|
|
9
|
-
type: 'http';
|
|
10
|
-
triples: any;
|
|
11
|
-
attrs: any;
|
|
12
|
-
queryHash: any;
|
|
13
|
-
query: any;
|
|
14
|
-
pageInfo?: any;
|
|
15
|
-
} | {
|
|
16
|
-
type: 'session';
|
|
17
|
-
queryResult: any;
|
|
18
|
-
};
|
|
19
|
-
export declare class FrameworkClient {
|
|
20
|
-
private params;
|
|
21
|
-
private db;
|
|
22
|
-
resultMap: Map<string, {
|
|
23
|
-
status: 'pending' | 'success' | 'error';
|
|
24
|
-
type: 'http' | 'session';
|
|
25
|
-
promise?: Promise<QueryPromise> | null;
|
|
26
|
-
data?: any;
|
|
27
|
-
error?: any;
|
|
28
|
-
}>;
|
|
29
|
-
private queryResolvedCallbacks;
|
|
30
|
-
constructor(params: FrameworkConfig);
|
|
31
|
-
subscribe: (callback: (result: {
|
|
32
|
-
triples: any;
|
|
33
|
-
attrs: any;
|
|
34
|
-
queryHash: string;
|
|
35
|
-
pageInfo?: any;
|
|
36
|
-
}) => void) => void;
|
|
37
|
-
addQueryResult: (queryKey: string, value: any) => void;
|
|
38
|
-
query: (_query: any, opts?: {
|
|
39
|
-
ruleParams: RuleParams;
|
|
40
|
-
}) => {
|
|
41
|
-
type: "http" | "session";
|
|
42
|
-
status: "pending" | "success" | "error";
|
|
43
|
-
promise?: Promise<QueryPromise>;
|
|
44
|
-
data?: any;
|
|
45
|
-
error?: any;
|
|
46
|
-
};
|
|
47
|
-
getExistingResultForQuery: (_query: any, opts?: {
|
|
48
|
-
ruleParams: RuleParams;
|
|
49
|
-
}) => {
|
|
50
|
-
status: "pending" | "success" | "error";
|
|
51
|
-
type: "http" | "session";
|
|
52
|
-
promise?: Promise<QueryPromise> | null;
|
|
53
|
-
data?: any;
|
|
54
|
-
error?: any;
|
|
55
|
-
} | undefined;
|
|
56
|
-
completeIsomorphic: (query: any, triples: any[], attrs: InstantDBAttr[], pageInfo?: any) => {
|
|
57
|
-
data: any;
|
|
58
|
-
pageInfo?: any;
|
|
59
|
-
aggregate?: any;
|
|
60
|
-
};
|
|
61
|
-
hashQuery: (_query: any, opts?: {
|
|
62
|
-
ruleParams: RuleParams;
|
|
63
|
-
}) => {
|
|
64
|
-
hash: string;
|
|
65
|
-
query: any;
|
|
66
|
-
};
|
|
67
|
-
getTriplesAndAttrsForQuery: (query: any) => Promise<{
|
|
68
|
-
triples: any[];
|
|
69
|
-
attrs: InstantDBAttr[];
|
|
70
|
-
query: any;
|
|
71
|
-
queryHash: string;
|
|
72
|
-
type: "http";
|
|
73
|
-
pageInfo?: any;
|
|
74
|
-
}>;
|
|
75
|
-
}
|
|
76
|
-
export {};
|
|
77
|
-
//# sourceMappingURL=framework.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../../src/framework.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,mBAAmB,EACnB,aAAa,EAEd,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,eAAO,MAAM,QAAQ,SAAwD,CAAC;AAE9E,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,EAAE,EAAE,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;CACnC,CAAC;AAIF,KAAK,YAAY,GACb;IACE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,GAAG,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,SAAS,EAAE,GAAG,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,GAAG,CAAC;CAClB,CAAC;AAEN,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,EAAE,CAAgC;IAInC,SAAS,EAAE,GAAG,CACnB,MAAM,EACN;QACE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;QACxC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,GAAG,CAAC;KACb,CACF,CAAa;IAEd,OAAO,CAAC,sBAAsB,CAMX;gBAEP,MAAM,EAAE,eAAe;IAe5B,SAAS,GACd,UAAU,CAAC,MAAM,EAAE;QACjB,OAAO,EAAE,GAAG,CAAC;QACb,KAAK,EAAE,GAAG,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,GAAG,CAAC;KAChB,KAAK,IAAI,UAGV;IAGK,cAAc,GAAI,UAAU,MAAM,EAAE,OAAO,GAAG,UAoBnD;IAIK,KAAK,GACV,QAAQ,GAAG,EACX,OAAO;QACL,UAAU,EAAE,UAAU,CAAC;KACxB,KACA;QACD,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;QACxC,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,GAAG,CAAC;KACb,CA4DC;IAEK,yBAAyB,GAC9B,QAAQ,GAAG,EACX,OAAO;QACL,UAAU,EAAE,UAAU,CAAC;KACxB;gBAhJS,SAAS,GAAG,SAAS,GAAG,OAAO;cACjC,MAAM,GAAG,SAAS;kBACd,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;eAC/B,GAAG;gBACF,GAAG;kBAgJb;IAIK,kBAAkB,GACvB,OAAO,GAAG,EACV,SAAS,GAAG,EAAE,EACd,OAAO,aAAa,EAAE,EACtB,WAAW,GAAG;;;;MAqCd;IAEK,SAAS,GACd,QAAQ,GAAG,EACX,OAAO;QACL,UAAU,EAAE,UAAU,CAAC;KACxB,KACA;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAM7B;IAGK,0BAA0B,GAC/B,OAAO,GAAG,KACT,OAAO,CAAC;QACT,OAAO,EAAE,GAAG,EAAE,CAAC;QACf,KAAK,EAAE,aAAa,EAAE,CAAC;QACvB,KAAK,EAAE,GAAG,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,GAAG,CAAC;KAChB,CAAC,CAoDA;CACH"}
|