@instantdb/core 0.22.96-experimental.drewh-ts-target.20761590091.1 → 0.22.97-experimental.bump-next-cia.20761479934.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/Connection.js +51 -50
- package/dist/commonjs/Connection.js.map +1 -1
- package/dist/commonjs/InMemoryStorage.js +32 -13
- package/dist/commonjs/InMemoryStorage.js.map +1 -1
- package/dist/commonjs/IndexedDBStorage.js +217 -193
- package/dist/commonjs/IndexedDBStorage.js.map +1 -1
- package/dist/commonjs/InstantError.js +0 -1
- package/dist/commonjs/InstantError.js.map +1 -1
- package/dist/commonjs/Reactor.js +610 -566
- package/dist/commonjs/Reactor.js.map +1 -1
- package/dist/commonjs/StorageAPI.js +70 -51
- package/dist/commonjs/StorageAPI.js.map +1 -1
- package/dist/commonjs/SyncTable.js +81 -68
- package/dist/commonjs/SyncTable.js.map +1 -1
- package/dist/commonjs/WindowNetworkListener.js +13 -2
- package/dist/commonjs/WindowNetworkListener.js.map +1 -1
- package/dist/commonjs/__types__/fieldsTypeTest.js +16 -8
- package/dist/commonjs/__types__/fieldsTypeTest.js.map +1 -1
- package/dist/commonjs/__types__/useDatesTypeTest.js +6 -3
- package/dist/commonjs/__types__/useDatesTypeTest.js.map +1 -1
- package/dist/commonjs/authAPI.js +79 -62
- package/dist/commonjs/authAPI.js.map +1 -1
- package/dist/commonjs/createRouteHandler.js +15 -5
- package/dist/commonjs/createRouteHandler.js.map +1 -1
- package/dist/commonjs/datalog.js +1 -1
- package/dist/commonjs/datalog.js.map +1 -1
- package/dist/commonjs/devtool.js +8 -26
- package/dist/commonjs/devtool.js.map +1 -1
- package/dist/commonjs/framework.d.ts.map +1 -1
- package/dist/commonjs/framework.js +152 -142
- package/dist/commonjs/framework.js.map +1 -1
- package/dist/commonjs/index.js +190 -204
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/instaml.js +30 -44
- package/dist/commonjs/instaml.js.map +1 -1
- package/dist/commonjs/instaql.js +33 -25
- package/dist/commonjs/instaql.js.map +1 -1
- package/dist/commonjs/parseSchemaFromJSON.js +7 -6
- package/dist/commonjs/parseSchemaFromJSON.js.map +1 -1
- package/dist/commonjs/presence.js +8 -7
- package/dist/commonjs/presence.js.map +1 -1
- package/dist/commonjs/queryValidation.js +2 -1
- package/dist/commonjs/queryValidation.js.map +1 -1
- package/dist/commonjs/schema.js +6 -8
- package/dist/commonjs/schema.js.map +1 -1
- package/dist/commonjs/schemaTypes.js +3 -22
- package/dist/commonjs/schemaTypes.js.map +1 -1
- package/dist/commonjs/store.js +38 -29
- package/dist/commonjs/store.js.map +1 -1
- package/dist/commonjs/transactionValidation.js +2 -1
- package/dist/commonjs/transactionValidation.js.map +1 -1
- package/dist/commonjs/utils/Deferred.js +0 -3
- package/dist/commonjs/utils/Deferred.js.map +1 -1
- package/dist/commonjs/utils/PersistedObject.js +233 -216
- package/dist/commonjs/utils/PersistedObject.js.map +1 -1
- package/dist/commonjs/utils/fetch.js +19 -9
- package/dist/commonjs/utils/fetch.js.map +1 -1
- package/dist/commonjs/utils/linkIndex.js +4 -2
- package/dist/commonjs/utils/linkIndex.js.map +1 -1
- package/dist/commonjs/utils/object.js +1 -1
- package/dist/commonjs/utils/object.js.map +1 -1
- package/dist/esm/Connection.js +51 -50
- package/dist/esm/Connection.js.map +1 -1
- package/dist/esm/InMemoryStorage.js +32 -13
- package/dist/esm/InMemoryStorage.js.map +1 -1
- package/dist/esm/IndexedDBStorage.js +217 -193
- package/dist/esm/IndexedDBStorage.js.map +1 -1
- package/dist/esm/InstantError.js +0 -1
- package/dist/esm/InstantError.js.map +1 -1
- package/dist/esm/Reactor.js +610 -566
- package/dist/esm/Reactor.js.map +1 -1
- package/dist/esm/StorageAPI.js +70 -51
- package/dist/esm/StorageAPI.js.map +1 -1
- package/dist/esm/SyncTable.js +81 -68
- package/dist/esm/SyncTable.js.map +1 -1
- package/dist/esm/WindowNetworkListener.js +13 -2
- package/dist/esm/WindowNetworkListener.js.map +1 -1
- package/dist/esm/__types__/fieldsTypeTest.js +16 -8
- package/dist/esm/__types__/fieldsTypeTest.js.map +1 -1
- package/dist/esm/__types__/useDatesTypeTest.js +6 -3
- package/dist/esm/__types__/useDatesTypeTest.js.map +1 -1
- package/dist/esm/authAPI.js +79 -62
- package/dist/esm/authAPI.js.map +1 -1
- package/dist/esm/createRouteHandler.js +15 -5
- package/dist/esm/createRouteHandler.js.map +1 -1
- package/dist/esm/datalog.js +1 -1
- package/dist/esm/datalog.js.map +1 -1
- package/dist/esm/devtool.js +8 -26
- package/dist/esm/devtool.js.map +1 -1
- package/dist/esm/framework.d.ts.map +1 -1
- package/dist/esm/framework.js +152 -142
- package/dist/esm/framework.js.map +1 -1
- package/dist/esm/index.js +190 -204
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/instaml.js +30 -44
- package/dist/esm/instaml.js.map +1 -1
- package/dist/esm/instaql.js +33 -25
- package/dist/esm/instaql.js.map +1 -1
- package/dist/esm/parseSchemaFromJSON.js +7 -6
- package/dist/esm/parseSchemaFromJSON.js.map +1 -1
- package/dist/esm/presence.js +8 -7
- package/dist/esm/presence.js.map +1 -1
- package/dist/esm/queryValidation.js +2 -1
- package/dist/esm/queryValidation.js.map +1 -1
- package/dist/esm/schema.js +6 -8
- package/dist/esm/schema.js.map +1 -1
- package/dist/esm/schemaTypes.js +3 -22
- package/dist/esm/schemaTypes.js.map +1 -1
- package/dist/esm/store.js +38 -29
- package/dist/esm/store.js.map +1 -1
- package/dist/esm/transactionValidation.js +2 -1
- package/dist/esm/transactionValidation.js.map +1 -1
- package/dist/esm/utils/Deferred.js +0 -3
- package/dist/esm/utils/Deferred.js.map +1 -1
- package/dist/esm/utils/PersistedObject.js +233 -216
- package/dist/esm/utils/PersistedObject.js.map +1 -1
- package/dist/esm/utils/fetch.js +19 -9
- package/dist/esm/utils/fetch.js.map +1 -1
- package/dist/esm/utils/linkIndex.js +4 -2
- package/dist/esm/utils/linkIndex.js.map +1 -1
- package/dist/esm/utils/object.js +1 -1
- package/dist/esm/utils/object.js.map +1 -1
- package/dist/standalone/index.js +2367 -2610
- package/dist/standalone/index.umd.cjs +3 -3
- package/package.json +2 -2
- package/src/framework.ts +1 -0
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
1
10
|
function createUserSyncResponse(config, user) {
|
|
2
11
|
if (user && user.refresh_token) {
|
|
3
12
|
return new Response(JSON.stringify({ ok: true }), {
|
|
@@ -26,12 +35,13 @@ function errorResponse(status, message) {
|
|
|
26
35
|
}
|
|
27
36
|
export const createInstantRouteHandler = (config) => {
|
|
28
37
|
return {
|
|
29
|
-
POST:
|
|
38
|
+
POST: (req) => __awaiter(void 0, void 0, void 0, function* () {
|
|
39
|
+
var _a;
|
|
30
40
|
let body;
|
|
31
41
|
try {
|
|
32
|
-
body =
|
|
42
|
+
body = yield req.json();
|
|
33
43
|
}
|
|
34
|
-
catch {
|
|
44
|
+
catch (_b) {
|
|
35
45
|
return errorResponse(400, 'Invalid JSON body');
|
|
36
46
|
}
|
|
37
47
|
if (!body.type) {
|
|
@@ -42,11 +52,11 @@ export const createInstantRouteHandler = (config) => {
|
|
|
42
52
|
}
|
|
43
53
|
switch (body.type) {
|
|
44
54
|
case 'sync-user':
|
|
45
|
-
return createUserSyncResponse(config, body.user
|
|
55
|
+
return createUserSyncResponse(config, (_a = body.user) !== null && _a !== void 0 ? _a : null);
|
|
46
56
|
default:
|
|
47
57
|
return errorResponse(400, `Unknown type: ${body.type}`);
|
|
48
58
|
}
|
|
49
|
-
},
|
|
59
|
+
}),
|
|
50
60
|
};
|
|
51
61
|
};
|
|
52
62
|
//# sourceMappingURL=createRouteHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
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;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,MAAgC,EAAE,EAAE;IAC5E,OAAO;QACL,IAAI,EAAE,
|
|
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;AAED,MAAM,CAAC,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","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"]}
|
package/dist/esm/datalog.js
CHANGED
|
@@ -8,7 +8,7 @@ function matchVariable(variable, triplePart, context) {
|
|
|
8
8
|
const bound = context[variable];
|
|
9
9
|
return matchPart(bound, triplePart, context);
|
|
10
10
|
}
|
|
11
|
-
return {
|
|
11
|
+
return Object.assign(Object.assign({}, context), { [variable]: triplePart });
|
|
12
12
|
}
|
|
13
13
|
function matchExact(patternPart, triplePart, context) {
|
|
14
14
|
return patternPart === triplePart ? context : null;
|
package/dist/esm/datalog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datalog.js","sourceRoot":"","sources":["../../src/datalog.js"],"names":[],"mappings":"AAAA,kBAAkB;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,SAAS,UAAU,CAAC,CAAC;IACnB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO;IAClD,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAChC,OAAO,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD,
|
|
1
|
+
{"version":3,"file":"datalog.js","sourceRoot":"","sources":["../../src/datalog.js"],"names":[],"mappings":"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","sourcesContent":["// 1. patternMatch\nimport { getTriples } from './store.ts';\n\nfunction isVariable(x) {\n return typeof x === 'string' && x.startsWith('?');\n}\n\nfunction matchVariable(variable, triplePart, context) {\n if (context.hasOwnProperty(variable)) {\n const bound = context[variable];\n return matchPart(bound, triplePart, context);\n }\n return { ...context, [variable]: triplePart };\n}\n\nfunction matchExact(patternPart, triplePart, context) {\n return patternPart === triplePart ? context : null;\n}\n\nfunction matcherForPatternPart(patternPart) {\n switch (typeof patternPart) {\n case 'string':\n return patternPart.startsWith('?') ? matchVariable : matchExact;\n default:\n return matchExact;\n }\n}\n\nconst validArgMapProps = [\n 'in',\n '$in',\n '$not',\n '$isNull',\n '$comparator', // covers all of $gt, $lt, etc.\n];\n\n// Checks if an object is an args map\nfunction isArgsMap(patternPart) {\n for (const prop of validArgMapProps) {\n if (patternPart.hasOwnProperty(prop)) {\n return true;\n }\n }\n return false;\n}\n\nfunction matchPart(patternPart, triplePart, context) {\n if (!context) return null;\n if (typeof patternPart === 'object') {\n // This is an args map, so we'll have already fitered the triples\n // in `getRelevantTriples`\n if (isArgsMap(patternPart)) {\n return context;\n }\n return null;\n }\n const matcher = matcherForPatternPart(patternPart);\n return matcher(patternPart, triplePart, context);\n}\n\nexport function matchPattern(pattern, triple, context) {\n return pattern.reduce((context, patternPart, idx) => {\n const triplePart = triple[idx];\n return matchPart(patternPart, triplePart, context);\n }, context);\n}\n\n// 2. querySingle\n\nexport function querySingle(store, pattern, context) {\n return relevantTriples(store, pattern, context)\n .map((triple) => matchPattern(pattern, triple, context))\n .filter((x) => x);\n}\n\n// 3. queryWhere\n\nfunction queryPattern(store, pattern, contexts) {\n if (pattern.or) {\n return pattern.or.patterns.flatMap((patterns) => {\n return queryWhere(store, patterns, contexts);\n });\n }\n if (pattern.and) {\n return pattern.and.patterns.reduce((contexts, patterns) => {\n return queryWhere(store, patterns, contexts);\n }, contexts);\n }\n return contexts.flatMap((context) => querySingle(store, pattern, context));\n}\n\nexport function queryWhere(store, patterns, contexts = [{}]) {\n return patterns.reduce((contexts, pattern) => {\n return queryPattern(store, pattern, contexts);\n }, contexts);\n}\n\n// 4. query\n\nfunction actualize(context, find) {\n if (Array.isArray(find)) {\n return find.map((findPart) => actualize(context, findPart));\n }\n return isVariable(find) ? context[find] : find;\n}\n\nexport function query(store, { find, where }) {\n const contexts = queryWhere(store, where);\n return contexts.map((context) => actualize(context, find));\n}\n\n// 5. Index\n\nfunction relevantTriples(store, pattern, context) {\n return getTriples(store, actualize(context, pattern));\n}\n"]}
|
package/dist/esm/devtool.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import * as flags from "./utils/flags.js";
|
|
2
2
|
let currentDevtool;
|
|
3
3
|
export function createDevtool(appId, config) {
|
|
4
|
-
currentDevtool
|
|
4
|
+
currentDevtool === null || currentDevtool === void 0 ? void 0 : currentDevtool.dispose();
|
|
5
5
|
const iframeContrainer = createIframeContainer(config);
|
|
6
6
|
const toggler = createToggler(config, toggleView);
|
|
7
7
|
const iframe = createIframe(getSrc(appId));
|
|
8
8
|
function onPostMessage(event) {
|
|
9
|
+
var _a;
|
|
9
10
|
if (event.source !== iframe.element.contentWindow)
|
|
10
11
|
return;
|
|
11
|
-
if (event.data
|
|
12
|
+
if (((_a = event.data) === null || _a === void 0 ? void 0 : _a.type) === 'close' && iframeContrainer.isVisible()) {
|
|
12
13
|
toggleView();
|
|
13
14
|
}
|
|
14
15
|
}
|
|
@@ -78,23 +79,13 @@ function createToggler(config, onClick) {
|
|
|
78
79
|
const element = document.createElement('button');
|
|
79
80
|
element.innerHTML = logoSVG;
|
|
80
81
|
element.className = 'instant-devtool-toggler';
|
|
81
|
-
Object.assign(element.style, {
|
|
82
|
+
Object.assign(element.style, Object.assign(Object.assign({
|
|
82
83
|
// pos
|
|
83
|
-
position: 'fixed',
|
|
84
|
-
...cssPositionForToggler(config.position),
|
|
85
|
-
height: '32px',
|
|
86
|
-
width: '32px',
|
|
84
|
+
position: 'fixed' }, cssPositionForToggler(config.position)), { height: '32px', width: '32px',
|
|
87
85
|
// layout
|
|
88
|
-
display: 'flex',
|
|
89
|
-
alignItems: 'center',
|
|
90
|
-
justifyContent: 'center',
|
|
91
|
-
zIndex: '9010',
|
|
86
|
+
display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: '9010',
|
|
92
87
|
// look
|
|
93
|
-
padding: '0',
|
|
94
|
-
margin: '0',
|
|
95
|
-
border: 'none',
|
|
96
|
-
cursor: 'pointer',
|
|
97
|
-
});
|
|
88
|
+
padding: '0', margin: '0', border: 'none', cursor: 'pointer' }));
|
|
98
89
|
element.addEventListener('click', onClick);
|
|
99
90
|
return { element };
|
|
100
91
|
}
|
|
@@ -124,16 +115,7 @@ function cssPositionForIframeContainer(position) {
|
|
|
124
115
|
}
|
|
125
116
|
function createIframeContainer(config) {
|
|
126
117
|
const element = document.createElement('div');
|
|
127
|
-
Object.assign(element.style, {
|
|
128
|
-
position: 'fixed',
|
|
129
|
-
...cssPositionForIframeContainer(config.position),
|
|
130
|
-
display: 'block',
|
|
131
|
-
borderRadius: '4px',
|
|
132
|
-
border: '1px #ccc solid',
|
|
133
|
-
boxShadow: '0px 0px 8px #00000044',
|
|
134
|
-
backgroundColor: '#eee',
|
|
135
|
-
zIndex: '999990',
|
|
136
|
-
});
|
|
118
|
+
Object.assign(element.style, Object.assign(Object.assign({ position: 'fixed' }, cssPositionForIframeContainer(config.position)), { display: 'block', borderRadius: '4px', border: '1px #ccc solid', boxShadow: '0px 0px 8px #00000044', backgroundColor: '#eee', zIndex: '999990' }));
|
|
137
119
|
element.style.display = 'none';
|
|
138
120
|
element.className = 'instant-devtool-container';
|
|
139
121
|
function isVisible() {
|
package/dist/esm/devtool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtool.js","sourceRoot":"","sources":["../../src/devtool.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAI1C,IAAI,cAAmC,CAAC;AAExC,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,MAA2B;IACtE,cAAc,
|
|
1
|
+
{"version":3,"file":"devtool.js","sourceRoot":"","sources":["../../src/devtool.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DevtoolConfig,\n DevtoolPosition,\n StrictDevtoolConfig,\n} from './coreTypes.ts';\nimport * as flags from './utils/flags.ts';\n\ntype Devtool = { dispose: () => void };\n\nlet currentDevtool: Devtool | undefined;\n\nexport function createDevtool(appId: string, config: StrictDevtoolConfig) {\n currentDevtool?.dispose();\n\n const iframeContrainer = createIframeContainer(config);\n const toggler = createToggler(config, toggleView);\n const iframe = createIframe(getSrc(appId));\n\n function onPostMessage(event: MessageEvent) {\n if (event.source !== iframe.element.contentWindow) return;\n\n if (event.data?.type === 'close' && iframeContrainer.isVisible()) {\n toggleView();\n }\n }\n\n function onKeyDown(event: KeyboardEvent) {\n const isToggleShortcut =\n event.shiftKey && event.ctrlKey && event.key === '0';\n const isEsc = event.key === 'Escape' || event.key === 'Esc';\n\n if (isToggleShortcut) {\n toggleView();\n } else if (isEsc && iframeContrainer.isVisible()) {\n toggleView();\n }\n }\n\n function toggleView() {\n if (iframeContrainer.isVisible()) {\n iframeContrainer.element.style.display = 'none';\n } else {\n iframeContrainer.element.style.display = 'block';\n\n // lazily render iframe on first open\n if (!iframeContrainer.element.contains(iframe.element)) {\n iframeContrainer.element.appendChild(iframe.element);\n }\n }\n }\n\n function dispose() {\n iframeContrainer.element.remove();\n toggler.element.remove();\n removeEventListener('keydown', onKeyDown);\n removeEventListener('message', onPostMessage);\n }\n\n function create() {\n document.body.appendChild(iframeContrainer.element);\n document.body.appendChild(toggler.element);\n addEventListener('keydown', onKeyDown);\n addEventListener('message', onPostMessage);\n\n currentDevtool = {\n dispose,\n };\n }\n\n return create();\n}\n\nfunction getSrc(appId: string) {\n const useLocalDashboard = flags.devBackend || flags.devtoolLocalDashboard;\n const src = `${useLocalDashboard ? 'http://localhost:3000' : 'https://instantdb.com'}/_devtool?appId=${appId}`;\n return src;\n}\n\nfunction createIframe(src: string) {\n const element = document.createElement('iframe');\n\n element.src = src;\n element.className = 'instant-devtool-iframe';\n Object.assign(element.style, {\n width: '100%',\n height: '100%',\n backgroundColor: 'white',\n border: 'none',\n } as Partial<CSSStyleDeclaration>);\n return { element };\n}\n\nfunction createToggler(\n config: StrictDevtoolConfig,\n onClick: (this: HTMLButtonElement, ev: MouseEvent) => any,\n) {\n const logoSVG = `\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 512 512\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"512\" height=\"512\" fill=\"black\"/>\n <rect x=\"97.0973\" y=\"91.3297\" width=\"140\" height=\"330\" fill=\"white\"/>\n </svg>\n `;\n const element = document.createElement('button');\n element.innerHTML = logoSVG;\n element.className = 'instant-devtool-toggler';\n Object.assign(element.style, {\n // pos\n position: 'fixed',\n ...cssPositionForToggler(config.position),\n height: '32px',\n width: '32px',\n // layout\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: '9010',\n // look\n padding: '0',\n margin: '0',\n border: 'none',\n cursor: 'pointer',\n } as Partial<CSSStyleDeclaration>);\n element.addEventListener('click', onClick);\n return { element };\n}\n\nfunction cssPositionForToggler(position: DevtoolPosition) {\n switch (position) {\n case 'bottom-left':\n return { bottom: '24px', left: '24px' };\n case 'bottom-right':\n return { bottom: '24px', right: '24px' };\n case 'top-right':\n return { top: '24px', right: '24px' };\n case 'top-left':\n return { top: '24px', left: '24px' };\n }\n}\n\nfunction cssPositionForIframeContainer(position: DevtoolPosition) {\n switch (position) {\n case 'bottom-left':\n return { bottom: '24px', right: '24px', left: '60px', top: '72px' };\n case 'bottom-right':\n return { bottom: '24px', left: '24px', right: '60px', top: '72px' };\n case 'top-right':\n return { top: '24px', left: '24px', right: '60px', bottom: '72px' };\n case 'top-left':\n return { top: '24px', right: '24px', left: '60px', bottom: '72px' };\n }\n}\n\nfunction createIframeContainer(config: StrictDevtoolConfig) {\n const element = document.createElement('div');\n Object.assign(element.style, {\n position: 'fixed',\n ...cssPositionForIframeContainer(config.position),\n display: 'block',\n borderRadius: '4px',\n border: '1px #ccc solid',\n boxShadow: '0px 0px 8px #00000044',\n backgroundColor: '#eee',\n zIndex: '999990',\n } as Partial<CSSStyleDeclaration>);\n element.style.display = 'none';\n element.className = 'instant-devtool-container';\n function isVisible() {\n return element.style.display !== 'none';\n }\n return { element, isVisible };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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"}
|
package/dist/esm/framework.js
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
1
10
|
// The FrameworkClient class is a mini version of a query store that allows making queries on both the frontend and backend
|
|
2
11
|
// you can register queries, await their results and serialize them over a server/client boundary.
|
|
3
12
|
// The class is generic so that it can be a good starting off point to make other ssr adapters.
|
|
@@ -7,47 +16,62 @@ import instaql from './instaql.js';
|
|
|
7
16
|
import { createLinkIndex } from "./utils/linkIndex.js";
|
|
8
17
|
export const isServer = typeof window === 'undefined' || 'Deno' in globalThis;
|
|
9
18
|
export class FrameworkClient {
|
|
10
|
-
params;
|
|
11
|
-
db;
|
|
12
|
-
// stores all of the query promises so that ssr can read them
|
|
13
|
-
// and send the relevant results alongside the html that resulted in the query resolving
|
|
14
|
-
resultMap = new Map();
|
|
15
|
-
queryResolvedCallbacks = [];
|
|
16
19
|
constructor(params) {
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
// stores all of the query promises so that ssr can read them
|
|
21
|
+
// and send the relevant results alongside the html that resulted in the query resolving
|
|
19
22
|
this.resultMap = new Map();
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
23
|
+
this.queryResolvedCallbacks = [];
|
|
24
|
+
this.subscribe = (callback) => {
|
|
25
|
+
this.queryResolvedCallbacks.push(callback);
|
|
26
|
+
};
|
|
27
|
+
// Runs on the client when ssr gets html script tags
|
|
28
|
+
this.addQueryResult = (queryKey, value) => {
|
|
29
|
+
this.resultMap.set(queryKey, {
|
|
30
|
+
type: value.type,
|
|
31
|
+
status: 'success',
|
|
32
|
+
data: value,
|
|
33
|
+
promise: null,
|
|
34
|
+
error: null,
|
|
35
|
+
});
|
|
36
|
+
// send the result to the client
|
|
37
|
+
if (!isServer) {
|
|
38
|
+
// make sure the attrs are there to create stores
|
|
39
|
+
if (!this.db._reactor.attrs) {
|
|
40
|
+
this.db._reactor._setAttrs(value.attrs);
|
|
41
|
+
}
|
|
42
|
+
this.db._reactor._addQueryData(value.query, value, !!this.db._reactor.config.schema);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
// creates an entry in the results map
|
|
46
|
+
// and returns the same thing added to the map
|
|
47
|
+
this.query = (_query, opts) => {
|
|
48
|
+
const { hash, query } = this.hashQuery(_query, opts);
|
|
49
|
+
if (this.db._reactor.status === 'authenticated') {
|
|
50
|
+
const promise = this.db.queryOnce(_query, opts);
|
|
51
|
+
let entry = {
|
|
52
|
+
status: 'pending',
|
|
53
|
+
type: 'session',
|
|
54
|
+
data: undefined,
|
|
55
|
+
error: undefined,
|
|
56
|
+
promise: promise,
|
|
57
|
+
};
|
|
58
|
+
promise.then((result) => {
|
|
59
|
+
entry.status = 'success';
|
|
60
|
+
entry.data = result;
|
|
61
|
+
entry.promise = null;
|
|
62
|
+
});
|
|
63
|
+
promise.catch((error) => {
|
|
64
|
+
entry.status = 'error';
|
|
65
|
+
entry.error = error;
|
|
66
|
+
entry.promise = null;
|
|
67
|
+
});
|
|
68
|
+
this.resultMap.set(hash, entry);
|
|
69
|
+
return entry;
|
|
38
70
|
}
|
|
39
|
-
this.
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
// creates an entry in the results map
|
|
43
|
-
// and returns the same thing added to the map
|
|
44
|
-
query = (_query, opts) => {
|
|
45
|
-
const { hash, query } = this.hashQuery(_query, opts);
|
|
46
|
-
if (this.db._reactor.status === 'authenticated') {
|
|
47
|
-
const promise = this.db.queryOnce(_query, opts);
|
|
71
|
+
const promise = this.getTriplesAndAttrsForQuery(query);
|
|
48
72
|
let entry = {
|
|
49
73
|
status: 'pending',
|
|
50
|
-
type: '
|
|
74
|
+
type: 'http',
|
|
51
75
|
data: undefined,
|
|
52
76
|
error: undefined,
|
|
53
77
|
promise: promise,
|
|
@@ -62,117 +86,103 @@ export class FrameworkClient {
|
|
|
62
86
|
entry.error = error;
|
|
63
87
|
entry.promise = null;
|
|
64
88
|
});
|
|
89
|
+
promise.then((result) => {
|
|
90
|
+
this.queryResolvedCallbacks.forEach((callback) => {
|
|
91
|
+
callback({
|
|
92
|
+
queryHash: hash,
|
|
93
|
+
query: query,
|
|
94
|
+
attrs: result.attrs,
|
|
95
|
+
triples: result.triples,
|
|
96
|
+
pageInfo: result.pageInfo,
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
});
|
|
65
100
|
this.resultMap.set(hash, entry);
|
|
66
101
|
return entry;
|
|
67
|
-
}
|
|
68
|
-
const promise = this.getTriplesAndAttrsForQuery(query);
|
|
69
|
-
let entry = {
|
|
70
|
-
status: 'pending',
|
|
71
|
-
type: 'http',
|
|
72
|
-
data: undefined,
|
|
73
|
-
error: undefined,
|
|
74
|
-
promise: promise,
|
|
75
102
|
};
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
this.queryResolvedCallbacks.forEach((callback) => {
|
|
88
|
-
callback({
|
|
89
|
-
queryHash: hash,
|
|
90
|
-
query: query,
|
|
91
|
-
attrs: result.attrs,
|
|
92
|
-
triples: result.triples,
|
|
93
|
-
pageInfo: result.pageInfo,
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
this.resultMap.set(hash, entry);
|
|
98
|
-
return entry;
|
|
99
|
-
};
|
|
100
|
-
getExistingResultForQuery = (_query, opts) => {
|
|
101
|
-
const { hash } = this.hashQuery(_query, opts);
|
|
102
|
-
return this.resultMap.get(hash);
|
|
103
|
-
};
|
|
104
|
-
// creates a query result from a set of triples, query, and attrs
|
|
105
|
-
// can be run server side or client side
|
|
106
|
-
completeIsomorphic = (query, triples, attrs, pageInfo) => {
|
|
107
|
-
const attrMap = {};
|
|
108
|
-
attrs.forEach((attr) => {
|
|
109
|
-
attrMap[attr.id] = attr;
|
|
110
|
-
});
|
|
111
|
-
const enableCardinalityInference = Boolean(this.db?._reactor?.config?.schema) &&
|
|
112
|
-
('cardinalityInference' in this.db?._reactor?.config
|
|
113
|
-
? Boolean(this.db?._reactor.config?.cardinalityInference)
|
|
114
|
-
: true);
|
|
115
|
-
const attrsStore = new s.AttrsStoreClass(attrs.reduce((acc, attr) => {
|
|
116
|
-
acc[attr.id] = attr;
|
|
117
|
-
return acc;
|
|
118
|
-
}, {}), createLinkIndex(this.db?._reactor.config.schema));
|
|
119
|
-
const store = s.createStore(attrsStore, triples, enableCardinalityInference, this.params.db._reactor.config.useDateObjects || false);
|
|
120
|
-
const resp = instaql({
|
|
121
|
-
store: store,
|
|
122
|
-
attrsStore: attrsStore,
|
|
123
|
-
pageInfo: pageInfo,
|
|
124
|
-
aggregate: undefined,
|
|
125
|
-
}, query);
|
|
126
|
-
return resp;
|
|
127
|
-
};
|
|
128
|
-
hashQuery = (_query, opts) => {
|
|
129
|
-
if (_query && opts && 'ruleParams' in opts) {
|
|
130
|
-
_query = { $$ruleParams: opts['ruleParams'], ..._query };
|
|
131
|
-
}
|
|
132
|
-
const query = _query ? coerceQuery(_query) : null;
|
|
133
|
-
return { hash: weakHash(query), query: query };
|
|
134
|
-
};
|
|
135
|
-
// Run by the server to get triples and attrs
|
|
136
|
-
getTriplesAndAttrsForQuery = async (query) => {
|
|
137
|
-
try {
|
|
138
|
-
const response = await fetch(`${this.db._reactor.config.apiURI}/runtime/framework/query`, {
|
|
139
|
-
method: 'POST',
|
|
140
|
-
headers: {
|
|
141
|
-
'app-id': this.params.db._reactor.config.appId,
|
|
142
|
-
'Content-Type': 'application/json',
|
|
143
|
-
Authorization: this.params.token
|
|
144
|
-
? `Bearer ${this.params.token}`
|
|
145
|
-
: undefined,
|
|
146
|
-
},
|
|
147
|
-
body: JSON.stringify({
|
|
148
|
-
query: query,
|
|
149
|
-
}),
|
|
103
|
+
this.getExistingResultForQuery = (_query, opts) => {
|
|
104
|
+
const { hash } = this.hashQuery(_query, opts);
|
|
105
|
+
return this.resultMap.get(hash);
|
|
106
|
+
};
|
|
107
|
+
// creates a query result from a set of triples, query, and attrs
|
|
108
|
+
// can be run server side or client side
|
|
109
|
+
this.completeIsomorphic = (query, triples, attrs, pageInfo) => {
|
|
110
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
111
|
+
const attrMap = {};
|
|
112
|
+
attrs.forEach((attr) => {
|
|
113
|
+
attrMap[attr.id] = attr;
|
|
150
114
|
});
|
|
151
|
-
|
|
152
|
-
|
|
115
|
+
const enableCardinalityInference = Boolean((_c = (_b = (_a = this.db) === null || _a === void 0 ? void 0 : _a._reactor) === null || _b === void 0 ? void 0 : _b.config) === null || _c === void 0 ? void 0 : _c.schema) &&
|
|
116
|
+
('cardinalityInference' in ((_e = (_d = this.db) === null || _d === void 0 ? void 0 : _d._reactor) === null || _e === void 0 ? void 0 : _e.config)
|
|
117
|
+
? Boolean((_g = (_f = this.db) === null || _f === void 0 ? void 0 : _f._reactor.config) === null || _g === void 0 ? void 0 : _g.cardinalityInference)
|
|
118
|
+
: true);
|
|
119
|
+
const attrsStore = new s.AttrsStoreClass(attrs.reduce((acc, attr) => {
|
|
120
|
+
acc[attr.id] = attr;
|
|
121
|
+
return acc;
|
|
122
|
+
}, {}), createLinkIndex((_h = this.db) === null || _h === void 0 ? void 0 : _h._reactor.config.schema));
|
|
123
|
+
const store = s.createStore(attrsStore, triples, enableCardinalityInference, this.params.db._reactor.config.useDateObjects || false);
|
|
124
|
+
const resp = instaql({
|
|
125
|
+
store: store,
|
|
126
|
+
attrsStore: attrsStore,
|
|
127
|
+
pageInfo: pageInfo,
|
|
128
|
+
aggregate: undefined,
|
|
129
|
+
}, query);
|
|
130
|
+
return resp;
|
|
131
|
+
};
|
|
132
|
+
this.hashQuery = (_query, opts) => {
|
|
133
|
+
if (_query && opts && 'ruleParams' in opts) {
|
|
134
|
+
_query = Object.assign({ $$ruleParams: opts['ruleParams'] }, _query);
|
|
135
|
+
}
|
|
136
|
+
const query = _query ? coerceQuery(_query) : null;
|
|
137
|
+
return { hash: weakHash(query), query: query };
|
|
138
|
+
};
|
|
139
|
+
// Run by the server to get triples and attrs
|
|
140
|
+
this.getTriplesAndAttrsForQuery = (query) => __awaiter(this, void 0, void 0, function* () {
|
|
141
|
+
var _a, _b, _c, _d, _e, _f;
|
|
142
|
+
try {
|
|
143
|
+
const response = yield fetch(`${this.db._reactor.config.apiURI}/runtime/framework/query`, {
|
|
144
|
+
method: 'POST',
|
|
145
|
+
headers: {
|
|
146
|
+
'app-id': this.params.db._reactor.config.appId,
|
|
147
|
+
'Content-Type': 'application/json',
|
|
148
|
+
Authorization: this.params.token
|
|
149
|
+
? `Bearer ${this.params.token}`
|
|
150
|
+
: undefined,
|
|
151
|
+
},
|
|
152
|
+
body: JSON.stringify({
|
|
153
|
+
query: query,
|
|
154
|
+
}),
|
|
155
|
+
});
|
|
156
|
+
if (!response.ok) {
|
|
157
|
+
throw new Error('Error getting triples from server');
|
|
158
|
+
}
|
|
159
|
+
const data = yield response.json();
|
|
160
|
+
const attrs = data === null || data === void 0 ? void 0 : data.attrs;
|
|
161
|
+
if (!attrs) {
|
|
162
|
+
throw new Error('No attrs');
|
|
163
|
+
}
|
|
164
|
+
// TODO: make safer
|
|
165
|
+
const triples = (_c = (_b = (_a = data.result) === null || _a === void 0 ? void 0 : _a[0].data) === null || _b === void 0 ? void 0 : _b['datalog-result']) === null || _c === void 0 ? void 0 : _c['join-rows'][0];
|
|
166
|
+
const pageInfo = (_f = (_e = (_d = data.result) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f['page-info'];
|
|
167
|
+
return {
|
|
168
|
+
attrs,
|
|
169
|
+
triples,
|
|
170
|
+
type: 'http',
|
|
171
|
+
queryHash: this.hashQuery(query).hash,
|
|
172
|
+
query,
|
|
173
|
+
pageInfo,
|
|
174
|
+
};
|
|
153
175
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
176
|
+
catch (err) {
|
|
177
|
+
const errWithMessage = new Error('Error getting triples from framework client');
|
|
178
|
+
// @ts-expect-error pre es2022
|
|
179
|
+
errWithMessage.cause = err;
|
|
180
|
+
throw errWithMessage;
|
|
158
181
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
triples,
|
|
165
|
-
type: 'http',
|
|
166
|
-
queryHash: this.hashQuery(query).hash,
|
|
167
|
-
query,
|
|
168
|
-
pageInfo,
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
catch (err) {
|
|
172
|
-
const errWithMessage = new Error('Error getting triples from framework client');
|
|
173
|
-
errWithMessage.cause = err;
|
|
174
|
-
throw errWithMessage;
|
|
175
|
-
}
|
|
176
|
-
};
|
|
182
|
+
});
|
|
183
|
+
this.params = params;
|
|
184
|
+
this.db = params.db;
|
|
185
|
+
this.resultMap = new Map();
|
|
186
|
+
}
|
|
177
187
|
}
|
|
178
188
|
//# sourceMappingURL=framework.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framework.js","sourceRoot":"","sources":["../../src/framework.ts"],"names":[],"mappings":"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","sourcesContent":["// The FrameworkClient class is a mini version of a query store that allows making queries on both the frontend and backend\n// you can register queries, await their results and serialize them over a server/client boundary.\n// The class is generic so that it can be a good starting off point to make other ssr adapters.\nimport {\n coerceQuery,\n InstantCoreDatabase,\n InstantDBAttr,\n weakHash,\n} from './index.ts';\nimport * as s from './store.js';\nimport instaql from './instaql.js';\nimport { RuleParams } from './schemaTypes.ts';\nimport { createLinkIndex } from './utils/linkIndex.ts';\n\nexport const isServer = typeof window === 'undefined' || 'Deno' in globalThis;\n\nexport type FrameworkConfig = {\n token?: string | null;\n db: InstantCoreDatabase<any, any>;\n};\n\n// represents an eventual result from running a query\n// either via ssr or by using the existing websocket connection.\ntype QueryPromise =\n | {\n type: 'http';\n triples: any;\n attrs: any;\n queryHash: any;\n query: any;\n pageInfo?: any;\n }\n | {\n type: 'session';\n queryResult: any;\n };\n\nexport class FrameworkClient {\n private params: FrameworkConfig;\n private db: InstantCoreDatabase<any, any>;\n\n // stores all of the query promises so that ssr can read them\n // and send the relevant results alongside the html that resulted in the query resolving\n public resultMap: Map<\n string,\n {\n status: 'pending' | 'success' | 'error';\n type: 'http' | 'session';\n promise?: Promise<QueryPromise> | null;\n data?: any;\n error?: any;\n }\n > = new Map();\n\n private queryResolvedCallbacks: ((result: {\n triples: any;\n attrs: any;\n queryHash: any;\n query: any;\n pageInfo?: any;\n }) => void)[] = [];\n\n constructor(params: FrameworkConfig) {\n this.params = params;\n this.db = params.db;\n this.resultMap = new Map<\n string,\n {\n type: 'http' | 'session';\n status: 'pending' | 'success' | 'error';\n promise?: Promise<QueryPromise>;\n data?: any;\n error?: any;\n }\n >();\n }\n\n public subscribe = (\n callback: (result: {\n triples: any;\n attrs: any;\n queryHash: string;\n pageInfo?: any;\n }) => void,\n ) => {\n this.queryResolvedCallbacks.push(callback);\n };\n\n // Runs on the client when ssr gets html script tags\n public addQueryResult = (queryKey: string, value: any) => {\n this.resultMap.set(queryKey, {\n type: value.type,\n status: 'success',\n data: value,\n promise: null,\n error: null,\n });\n // send the result to the client\n if (!isServer) {\n // make sure the attrs are there to create stores\n if (!this.db._reactor.attrs) {\n this.db._reactor._setAttrs(value.attrs);\n }\n this.db._reactor._addQueryData(\n value.query,\n value,\n !!this.db._reactor.config.schema,\n );\n }\n };\n\n // creates an entry in the results map\n // and returns the same thing added to the map\n public query = (\n _query: any,\n opts?: {\n ruleParams: RuleParams;\n },\n ): {\n type: 'http' | 'session';\n status: 'pending' | 'success' | 'error';\n promise?: Promise<QueryPromise>;\n data?: any;\n error?: any;\n } => {\n const { hash, query } = this.hashQuery(_query, opts);\n\n if (this.db._reactor.status === 'authenticated') {\n const promise = this.db.queryOnce(_query, opts);\n let entry = {\n status: 'pending' as 'pending' | 'success' | 'error',\n type: 'session' as 'http' | 'session',\n data: undefined as any,\n error: undefined as any,\n promise: promise as any,\n };\n promise.then((result) => {\n entry.status = 'success';\n entry.data = result;\n entry.promise = null;\n });\n promise.catch((error) => {\n entry.status = 'error';\n entry.error = error;\n entry.promise = null;\n });\n this.resultMap.set(hash, entry);\n return entry as any;\n }\n\n const promise = this.getTriplesAndAttrsForQuery(query);\n let entry = {\n status: 'pending' as 'pending' | 'success' | 'error',\n type: 'http' as 'http' | 'session',\n data: undefined as any,\n error: undefined as any,\n promise: promise as any,\n };\n\n promise.then((result) => {\n entry.status = 'success';\n entry.data = result;\n entry.promise = null;\n });\n promise.catch((error) => {\n entry.status = 'error';\n entry.error = error;\n entry.promise = null;\n });\n\n promise.then((result) => {\n this.queryResolvedCallbacks.forEach((callback) => {\n callback({\n queryHash: hash,\n query: query,\n attrs: result.attrs,\n triples: result.triples,\n pageInfo: result.pageInfo,\n });\n });\n });\n\n this.resultMap.set(hash, entry);\n return entry;\n };\n\n public getExistingResultForQuery = (\n _query: any,\n opts?: {\n ruleParams: RuleParams;\n },\n ) => {\n const { hash } = this.hashQuery(_query, opts);\n return this.resultMap.get(hash);\n };\n\n // creates a query result from a set of triples, query, and attrs\n // can be run server side or client side\n public completeIsomorphic = (\n query: any,\n triples: any[],\n attrs: InstantDBAttr[],\n pageInfo?: any,\n ) => {\n const attrMap = {};\n attrs.forEach((attr) => {\n attrMap[attr.id] = attr;\n });\n\n const enableCardinalityInference =\n Boolean(this.db?._reactor?.config?.schema) &&\n ('cardinalityInference' in this.db?._reactor?.config\n ? Boolean(this.db?._reactor.config?.cardinalityInference)\n : true);\n\n const attrsStore = new s.AttrsStoreClass(\n attrs.reduce((acc, attr) => {\n acc[attr.id] = attr;\n return acc;\n }, {}),\n createLinkIndex(this.db?._reactor.config.schema),\n );\n\n const store = s.createStore(\n attrsStore,\n triples,\n enableCardinalityInference,\n this.params.db._reactor.config.useDateObjects || false,\n );\n const resp = instaql(\n {\n store: store,\n attrsStore: attrsStore,\n pageInfo: pageInfo,\n aggregate: undefined,\n },\n query,\n );\n return resp;\n };\n\n public hashQuery = (\n _query: any,\n opts?: {\n ruleParams: RuleParams;\n },\n ): { hash: string; query: any } => {\n if (_query && opts && 'ruleParams' in opts) {\n _query = { $$ruleParams: opts['ruleParams'], ..._query };\n }\n const query = _query ? coerceQuery(_query) : null;\n return { hash: weakHash(query), query: query };\n };\n\n // Run by the server to get triples and attrs\n public getTriplesAndAttrsForQuery = async (\n query: any,\n ): Promise<{\n triples: any[];\n attrs: InstantDBAttr[];\n query: any;\n queryHash: string;\n type: 'http';\n pageInfo?: any;\n }> => {\n try {\n const response = await fetch(\n `${this.db._reactor.config.apiURI}/runtime/framework/query`,\n {\n method: 'POST',\n headers: {\n 'app-id': this.params.db._reactor.config.appId,\n 'Content-Type': 'application/json',\n Authorization: this.params.token\n ? `Bearer ${this.params.token}`\n : undefined,\n } as Record<string, string>,\n body: JSON.stringify({\n query: query,\n }),\n },\n );\n\n if (!response.ok) {\n throw new Error('Error getting triples from server');\n }\n\n const data = await response.json();\n\n const attrs = data?.attrs;\n if (!attrs) {\n throw new Error('No attrs');\n }\n\n // TODO: make safer\n const triples =\n data.result?.[0].data?.['datalog-result']?.['join-rows'][0];\n\n const pageInfo = data.result?.[0]?.data?.['page-info'];\n\n return {\n attrs,\n triples,\n type: 'http',\n queryHash: this.hashQuery(query).hash,\n query,\n pageInfo,\n };\n } catch (err: any) {\n const errWithMessage = new Error(\n 'Error getting triples from framework client',\n );\n errWithMessage.cause = err;\n throw errWithMessage;\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"framework.js","sourceRoot":"","sources":["../../src/framework.ts"],"names":[],"mappings":"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","sourcesContent":["// The FrameworkClient class is a mini version of a query store that allows making queries on both the frontend and backend\n// you can register queries, await their results and serialize them over a server/client boundary.\n// The class is generic so that it can be a good starting off point to make other ssr adapters.\nimport {\n coerceQuery,\n InstantCoreDatabase,\n InstantDBAttr,\n weakHash,\n} from './index.ts';\nimport * as s from './store.js';\nimport instaql from './instaql.js';\nimport { RuleParams } from './schemaTypes.ts';\nimport { createLinkIndex } from './utils/linkIndex.ts';\n\nexport const isServer = typeof window === 'undefined' || 'Deno' in globalThis;\n\nexport type FrameworkConfig = {\n token?: string | null;\n db: InstantCoreDatabase<any, any>;\n};\n\n// represents an eventual result from running a query\n// either via ssr or by using the existing websocket connection.\ntype QueryPromise =\n | {\n type: 'http';\n triples: any;\n attrs: any;\n queryHash: any;\n query: any;\n pageInfo?: any;\n }\n | {\n type: 'session';\n queryResult: any;\n };\n\nexport class FrameworkClient {\n private params: FrameworkConfig;\n private db: InstantCoreDatabase<any, any>;\n\n // stores all of the query promises so that ssr can read them\n // and send the relevant results alongside the html that resulted in the query resolving\n public resultMap: Map<\n string,\n {\n status: 'pending' | 'success' | 'error';\n type: 'http' | 'session';\n promise?: Promise<QueryPromise> | null;\n data?: any;\n error?: any;\n }\n > = new Map();\n\n private queryResolvedCallbacks: ((result: {\n triples: any;\n attrs: any;\n queryHash: any;\n query: any;\n pageInfo?: any;\n }) => void)[] = [];\n\n constructor(params: FrameworkConfig) {\n this.params = params;\n this.db = params.db;\n this.resultMap = new Map<\n string,\n {\n type: 'http' | 'session';\n status: 'pending' | 'success' | 'error';\n promise?: Promise<QueryPromise>;\n data?: any;\n error?: any;\n }\n >();\n }\n\n public subscribe = (\n callback: (result: {\n triples: any;\n attrs: any;\n queryHash: string;\n pageInfo?: any;\n }) => void,\n ) => {\n this.queryResolvedCallbacks.push(callback);\n };\n\n // Runs on the client when ssr gets html script tags\n public addQueryResult = (queryKey: string, value: any) => {\n this.resultMap.set(queryKey, {\n type: value.type,\n status: 'success',\n data: value,\n promise: null,\n error: null,\n });\n // send the result to the client\n if (!isServer) {\n // make sure the attrs are there to create stores\n if (!this.db._reactor.attrs) {\n this.db._reactor._setAttrs(value.attrs);\n }\n this.db._reactor._addQueryData(\n value.query,\n value,\n !!this.db._reactor.config.schema,\n );\n }\n };\n\n // creates an entry in the results map\n // and returns the same thing added to the map\n public query = (\n _query: any,\n opts?: {\n ruleParams: RuleParams;\n },\n ): {\n type: 'http' | 'session';\n status: 'pending' | 'success' | 'error';\n promise?: Promise<QueryPromise>;\n data?: any;\n error?: any;\n } => {\n const { hash, query } = this.hashQuery(_query, opts);\n\n if (this.db._reactor.status === 'authenticated') {\n const promise = this.db.queryOnce(_query, opts);\n let entry = {\n status: 'pending' as 'pending' | 'success' | 'error',\n type: 'session' as 'http' | 'session',\n data: undefined as any,\n error: undefined as any,\n promise: promise as any,\n };\n promise.then((result) => {\n entry.status = 'success';\n entry.data = result;\n entry.promise = null;\n });\n promise.catch((error) => {\n entry.status = 'error';\n entry.error = error;\n entry.promise = null;\n });\n this.resultMap.set(hash, entry);\n return entry as any;\n }\n\n const promise = this.getTriplesAndAttrsForQuery(query);\n let entry = {\n status: 'pending' as 'pending' | 'success' | 'error',\n type: 'http' as 'http' | 'session',\n data: undefined as any,\n error: undefined as any,\n promise: promise as any,\n };\n\n promise.then((result) => {\n entry.status = 'success';\n entry.data = result;\n entry.promise = null;\n });\n promise.catch((error) => {\n entry.status = 'error';\n entry.error = error;\n entry.promise = null;\n });\n\n promise.then((result) => {\n this.queryResolvedCallbacks.forEach((callback) => {\n callback({\n queryHash: hash,\n query: query,\n attrs: result.attrs,\n triples: result.triples,\n pageInfo: result.pageInfo,\n });\n });\n });\n\n this.resultMap.set(hash, entry);\n return entry;\n };\n\n public getExistingResultForQuery = (\n _query: any,\n opts?: {\n ruleParams: RuleParams;\n },\n ) => {\n const { hash } = this.hashQuery(_query, opts);\n return this.resultMap.get(hash);\n };\n\n // creates a query result from a set of triples, query, and attrs\n // can be run server side or client side\n public completeIsomorphic = (\n query: any,\n triples: any[],\n attrs: InstantDBAttr[],\n pageInfo?: any,\n ) => {\n const attrMap = {};\n attrs.forEach((attr) => {\n attrMap[attr.id] = attr;\n });\n\n const enableCardinalityInference =\n Boolean(this.db?._reactor?.config?.schema) &&\n ('cardinalityInference' in this.db?._reactor?.config\n ? Boolean(this.db?._reactor.config?.cardinalityInference)\n : true);\n\n const attrsStore = new s.AttrsStoreClass(\n attrs.reduce((acc, attr) => {\n acc[attr.id] = attr;\n return acc;\n }, {}),\n createLinkIndex(this.db?._reactor.config.schema),\n );\n\n const store = s.createStore(\n attrsStore,\n triples,\n enableCardinalityInference,\n this.params.db._reactor.config.useDateObjects || false,\n );\n const resp = instaql(\n {\n store: store,\n attrsStore: attrsStore,\n pageInfo: pageInfo,\n aggregate: undefined,\n },\n query,\n );\n return resp;\n };\n\n public hashQuery = (\n _query: any,\n opts?: {\n ruleParams: RuleParams;\n },\n ): { hash: string; query: any } => {\n if (_query && opts && 'ruleParams' in opts) {\n _query = { $$ruleParams: opts['ruleParams'], ..._query };\n }\n const query = _query ? coerceQuery(_query) : null;\n return { hash: weakHash(query), query: query };\n };\n\n // Run by the server to get triples and attrs\n public getTriplesAndAttrsForQuery = async (\n query: any,\n ): Promise<{\n triples: any[];\n attrs: InstantDBAttr[];\n query: any;\n queryHash: string;\n type: 'http';\n pageInfo?: any;\n }> => {\n try {\n const response = await fetch(\n `${this.db._reactor.config.apiURI}/runtime/framework/query`,\n {\n method: 'POST',\n headers: {\n 'app-id': this.params.db._reactor.config.appId,\n 'Content-Type': 'application/json',\n Authorization: this.params.token\n ? `Bearer ${this.params.token}`\n : undefined,\n } as Record<string, string>,\n body: JSON.stringify({\n query: query,\n }),\n },\n );\n\n if (!response.ok) {\n throw new Error('Error getting triples from server');\n }\n\n const data = await response.json();\n\n const attrs = data?.attrs;\n if (!attrs) {\n throw new Error('No attrs');\n }\n\n // TODO: make safer\n const triples =\n data.result?.[0].data?.['datalog-result']?.['join-rows'][0];\n\n const pageInfo = data.result?.[0]?.data?.['page-info'];\n\n return {\n attrs,\n triples,\n type: 'http',\n queryHash: this.hashQuery(query).hash,\n query,\n pageInfo,\n };\n } catch (err: any) {\n const errWithMessage = new Error(\n 'Error getting triples from framework client',\n );\n // @ts-expect-error pre es2022\n errWithMessage.cause = err;\n throw errWithMessage;\n }\n };\n}\n"]}
|