@instantdb/core 0.22.97 → 0.22.98-experimental.drewh-ts-target.20762041587.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/dist/commonjs/Connection.js +50 -51
  2. package/dist/commonjs/Connection.js.map +1 -1
  3. package/dist/commonjs/InMemoryStorage.js +13 -32
  4. package/dist/commonjs/InMemoryStorage.js.map +1 -1
  5. package/dist/commonjs/IndexedDBStorage.js +193 -217
  6. package/dist/commonjs/IndexedDBStorage.js.map +1 -1
  7. package/dist/commonjs/InstantError.js +1 -0
  8. package/dist/commonjs/InstantError.js.map +1 -1
  9. package/dist/commonjs/Reactor.js +566 -610
  10. package/dist/commonjs/Reactor.js.map +1 -1
  11. package/dist/commonjs/StorageAPI.js +51 -70
  12. package/dist/commonjs/StorageAPI.js.map +1 -1
  13. package/dist/commonjs/SyncTable.js +68 -81
  14. package/dist/commonjs/SyncTable.js.map +1 -1
  15. package/dist/commonjs/WindowNetworkListener.js +2 -13
  16. package/dist/commonjs/WindowNetworkListener.js.map +1 -1
  17. package/dist/commonjs/__types__/fieldsTypeTest.js +8 -16
  18. package/dist/commonjs/__types__/fieldsTypeTest.js.map +1 -1
  19. package/dist/commonjs/__types__/useDatesTypeTest.js +3 -6
  20. package/dist/commonjs/__types__/useDatesTypeTest.js.map +1 -1
  21. package/dist/commonjs/authAPI.js +62 -79
  22. package/dist/commonjs/authAPI.js.map +1 -1
  23. package/dist/commonjs/createRouteHandler.js +5 -15
  24. package/dist/commonjs/createRouteHandler.js.map +1 -1
  25. package/dist/commonjs/datalog.js +1 -1
  26. package/dist/commonjs/datalog.js.map +1 -1
  27. package/dist/commonjs/devtool.js +26 -8
  28. package/dist/commonjs/devtool.js.map +1 -1
  29. package/dist/commonjs/framework.d.ts.map +1 -1
  30. package/dist/commonjs/framework.js +142 -152
  31. package/dist/commonjs/framework.js.map +1 -1
  32. package/dist/commonjs/index.js +204 -190
  33. package/dist/commonjs/index.js.map +1 -1
  34. package/dist/commonjs/instaml.js +44 -30
  35. package/dist/commonjs/instaml.js.map +1 -1
  36. package/dist/commonjs/instaql.js +25 -33
  37. package/dist/commonjs/instaql.js.map +1 -1
  38. package/dist/commonjs/parseSchemaFromJSON.js +6 -7
  39. package/dist/commonjs/parseSchemaFromJSON.js.map +1 -1
  40. package/dist/commonjs/presence.js +7 -8
  41. package/dist/commonjs/presence.js.map +1 -1
  42. package/dist/commonjs/queryValidation.js +1 -2
  43. package/dist/commonjs/queryValidation.js.map +1 -1
  44. package/dist/commonjs/schema.js +8 -6
  45. package/dist/commonjs/schema.js.map +1 -1
  46. package/dist/commonjs/schemaTypes.js +22 -3
  47. package/dist/commonjs/schemaTypes.js.map +1 -1
  48. package/dist/commonjs/store.js +29 -38
  49. package/dist/commonjs/store.js.map +1 -1
  50. package/dist/commonjs/transactionValidation.js +1 -2
  51. package/dist/commonjs/transactionValidation.js.map +1 -1
  52. package/dist/commonjs/utils/Deferred.js +3 -0
  53. package/dist/commonjs/utils/Deferred.js.map +1 -1
  54. package/dist/commonjs/utils/PersistedObject.js +216 -233
  55. package/dist/commonjs/utils/PersistedObject.js.map +1 -1
  56. package/dist/commonjs/utils/fetch.js +9 -19
  57. package/dist/commonjs/utils/fetch.js.map +1 -1
  58. package/dist/commonjs/utils/linkIndex.js +2 -4
  59. package/dist/commonjs/utils/linkIndex.js.map +1 -1
  60. package/dist/commonjs/utils/object.js +1 -1
  61. package/dist/commonjs/utils/object.js.map +1 -1
  62. package/dist/esm/Connection.js +50 -51
  63. package/dist/esm/Connection.js.map +1 -1
  64. package/dist/esm/InMemoryStorage.js +13 -32
  65. package/dist/esm/InMemoryStorage.js.map +1 -1
  66. package/dist/esm/IndexedDBStorage.js +193 -217
  67. package/dist/esm/IndexedDBStorage.js.map +1 -1
  68. package/dist/esm/InstantError.js +1 -0
  69. package/dist/esm/InstantError.js.map +1 -1
  70. package/dist/esm/Reactor.js +566 -610
  71. package/dist/esm/Reactor.js.map +1 -1
  72. package/dist/esm/StorageAPI.js +51 -70
  73. package/dist/esm/StorageAPI.js.map +1 -1
  74. package/dist/esm/SyncTable.js +68 -81
  75. package/dist/esm/SyncTable.js.map +1 -1
  76. package/dist/esm/WindowNetworkListener.js +2 -13
  77. package/dist/esm/WindowNetworkListener.js.map +1 -1
  78. package/dist/esm/__types__/fieldsTypeTest.js +8 -16
  79. package/dist/esm/__types__/fieldsTypeTest.js.map +1 -1
  80. package/dist/esm/__types__/useDatesTypeTest.js +3 -6
  81. package/dist/esm/__types__/useDatesTypeTest.js.map +1 -1
  82. package/dist/esm/authAPI.js +62 -79
  83. package/dist/esm/authAPI.js.map +1 -1
  84. package/dist/esm/createRouteHandler.js +5 -15
  85. package/dist/esm/createRouteHandler.js.map +1 -1
  86. package/dist/esm/datalog.js +1 -1
  87. package/dist/esm/datalog.js.map +1 -1
  88. package/dist/esm/devtool.js +26 -8
  89. package/dist/esm/devtool.js.map +1 -1
  90. package/dist/esm/framework.d.ts.map +1 -1
  91. package/dist/esm/framework.js +142 -152
  92. package/dist/esm/framework.js.map +1 -1
  93. package/dist/esm/index.js +204 -190
  94. package/dist/esm/index.js.map +1 -1
  95. package/dist/esm/instaml.js +44 -30
  96. package/dist/esm/instaml.js.map +1 -1
  97. package/dist/esm/instaql.js +25 -33
  98. package/dist/esm/instaql.js.map +1 -1
  99. package/dist/esm/parseSchemaFromJSON.js +6 -7
  100. package/dist/esm/parseSchemaFromJSON.js.map +1 -1
  101. package/dist/esm/presence.js +7 -8
  102. package/dist/esm/presence.js.map +1 -1
  103. package/dist/esm/queryValidation.js +1 -2
  104. package/dist/esm/queryValidation.js.map +1 -1
  105. package/dist/esm/schema.js +8 -6
  106. package/dist/esm/schema.js.map +1 -1
  107. package/dist/esm/schemaTypes.js +22 -3
  108. package/dist/esm/schemaTypes.js.map +1 -1
  109. package/dist/esm/store.js +29 -38
  110. package/dist/esm/store.js.map +1 -1
  111. package/dist/esm/transactionValidation.js +1 -2
  112. package/dist/esm/transactionValidation.js.map +1 -1
  113. package/dist/esm/utils/Deferred.js +3 -0
  114. package/dist/esm/utils/Deferred.js.map +1 -1
  115. package/dist/esm/utils/PersistedObject.js +216 -233
  116. package/dist/esm/utils/PersistedObject.js.map +1 -1
  117. package/dist/esm/utils/fetch.js +9 -19
  118. package/dist/esm/utils/fetch.js.map +1 -1
  119. package/dist/esm/utils/linkIndex.js +2 -4
  120. package/dist/esm/utils/linkIndex.js.map +1 -1
  121. package/dist/esm/utils/object.js +1 -1
  122. package/dist/esm/utils/object.js.map +1 -1
  123. package/dist/standalone/index.js +2610 -2367
  124. package/dist/standalone/index.umd.cjs +3 -3
  125. package/package.json +2 -2
  126. package/src/framework.ts +0 -1
@@ -1,12 +1,3 @@
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
- };
10
1
  function createUserSyncResponse(config, user) {
11
2
  if (user && user.refresh_token) {
12
3
  return new Response(JSON.stringify({ ok: true }), {
@@ -35,13 +26,12 @@ function errorResponse(status, message) {
35
26
  }
36
27
  export const createInstantRouteHandler = (config) => {
37
28
  return {
38
- POST: (req) => __awaiter(void 0, void 0, void 0, function* () {
39
- var _a;
29
+ POST: async (req) => {
40
30
  let body;
41
31
  try {
42
- body = yield req.json();
32
+ body = await req.json();
43
33
  }
44
- catch (_b) {
34
+ catch {
45
35
  return errorResponse(400, 'Invalid JSON body');
46
36
  }
47
37
  if (!body.type) {
@@ -52,11 +42,11 @@ export const createInstantRouteHandler = (config) => {
52
42
  }
53
43
  switch (body.type) {
54
44
  case 'sync-user':
55
- return createUserSyncResponse(config, (_a = body.user) !== null && _a !== void 0 ? _a : null);
45
+ return createUserSyncResponse(config, body.user ?? null);
56
46
  default:
57
47
  return errorResponse(400, `Unknown type: ${body.type}`);
58
48
  }
59
- }),
49
+ },
60
50
  };
61
51
  };
62
52
  //# 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,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"]}
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,KAAK,EAAE,GAAY,EAAE,EAAE;YAC3B,IAAI,IAA2D,CAAC;YAChE,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC1B,CAAC;YAAC,MAAM,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,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;gBAC3D;oBACE,OAAO,aAAa,CAAC,GAAG,EAAE,iBAAiB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;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"]}
@@ -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 Object.assign(Object.assign({}, context), { [variable]: triplePart });
11
+ return { ...context, [variable]: triplePart };
12
12
  }
13
13
  function matchExact(patternPart, triplePart, context) {
14
14
  return patternPart === triplePart ? context : null;
@@ -1 +1 @@
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"]}
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"]}
@@ -1,15 +1,14 @@
1
1
  import * as flags from "./utils/flags.js";
2
2
  let currentDevtool;
3
3
  export function createDevtool(appId, config) {
4
- currentDevtool === null || currentDevtool === void 0 ? void 0 : currentDevtool.dispose();
4
+ 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;
10
9
  if (event.source !== iframe.element.contentWindow)
11
10
  return;
12
- if (((_a = event.data) === null || _a === void 0 ? void 0 : _a.type) === 'close' && iframeContrainer.isVisible()) {
11
+ if (event.data?.type === 'close' && iframeContrainer.isVisible()) {
13
12
  toggleView();
14
13
  }
15
14
  }
@@ -79,13 +78,23 @@ function createToggler(config, onClick) {
79
78
  const element = document.createElement('button');
80
79
  element.innerHTML = logoSVG;
81
80
  element.className = 'instant-devtool-toggler';
82
- Object.assign(element.style, Object.assign(Object.assign({
81
+ Object.assign(element.style, {
83
82
  // pos
84
- position: 'fixed' }, cssPositionForToggler(config.position)), { height: '32px', width: '32px',
83
+ position: 'fixed',
84
+ ...cssPositionForToggler(config.position),
85
+ height: '32px',
86
+ width: '32px',
85
87
  // layout
86
- display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: '9010',
88
+ display: 'flex',
89
+ alignItems: 'center',
90
+ justifyContent: 'center',
91
+ zIndex: '9010',
87
92
  // look
88
- padding: '0', margin: '0', border: 'none', cursor: 'pointer' }));
93
+ padding: '0',
94
+ margin: '0',
95
+ border: 'none',
96
+ cursor: 'pointer',
97
+ });
89
98
  element.addEventListener('click', onClick);
90
99
  return { element };
91
100
  }
@@ -115,7 +124,16 @@ function cssPositionForIframeContainer(position) {
115
124
  }
116
125
  function createIframeContainer(config) {
117
126
  const element = document.createElement('div');
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' }));
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
+ });
119
137
  element.style.display = 'none';
120
138
  element.className = 'instant-devtool-container';
121
139
  function isVisible() {
@@ -1 +1 @@
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
+ {"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,EAAE,OAAO,EAAE,CAAC;IAE1B,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAE3C,SAAS,aAAa,CAAC,KAAmB;QACxC,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,aAAa;YAAE,OAAO;QAE1D,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,IAAI,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC;YACjE,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,SAAS,SAAS,CAAC,KAAoB;QACrC,MAAM,gBAAgB,GACpB,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;QACvD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC;QAE5D,IAAI,gBAAgB,EAAE,CAAC;YACrB,UAAU,EAAE,CAAC;QACf,CAAC;aAAM,IAAI,KAAK,IAAI,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC;YACjD,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,SAAS,UAAU;QACjB,IAAI,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC;YACjC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YAEjD,qCAAqC;YACrC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvD,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,OAAO;QACd,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACzB,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC1C,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAChD,CAAC;IAED,SAAS,MAAM;QACb,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3C,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACvC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAE3C,cAAc,GAAG;YACf,OAAO;SACR,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,EAAE,CAAC;AAClB,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC3B,MAAM,iBAAiB,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,qBAAqB,CAAC;IAC1E,MAAM,GAAG,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,uBAAuB,mBAAmB,KAAK,EAAE,CAAC;IAC/G,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;IAClB,OAAO,CAAC,SAAS,GAAG,wBAAwB,CAAC;IAC7C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;QAC3B,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,eAAe,EAAE,OAAO;QACxB,MAAM,EAAE,MAAM;KACiB,CAAC,CAAC;IACnC,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AAED,SAAS,aAAa,CACpB,MAA2B,EAC3B,OAAyD;IAEzD,MAAM,OAAO,GAAG;;;;;GAKf,CAAC;IACF,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC;IAC5B,OAAO,CAAC,SAAS,GAAG,yBAAyB,CAAC;IAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;QAC3B,MAAM;QACN,QAAQ,EAAE,OAAO;QACjB,GAAG,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC;QACzC,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,MAAM;QACb,SAAS;QACT,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,MAAM,EAAE,MAAM;QACd,OAAO;QACP,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,GAAG;QACX,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,SAAS;KACc,CAAC,CAAC;IACnC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAyB;IACtD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,aAAa;YAChB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC1C,KAAK,cAAc;YACjB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3C,KAAK,WAAW;YACd,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACxC,KAAK,UAAU;YACb,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B,CAAC,QAAyB;IAC9D,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,aAAa;YAChB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QACtE,KAAK,cAAc;YACjB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QACtE,KAAK,WAAW;YACd,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACtE,KAAK,UAAU;YACb,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACxE,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,MAA2B;IACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;QAC3B,QAAQ,EAAE,OAAO;QACjB,GAAG,6BAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjD,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,KAAK;QACnB,MAAM,EAAE,gBAAgB;QACxB,SAAS,EAAE,uBAAuB;QAClC,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,QAAQ;KACe,CAAC,CAAC;IACnC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC/B,OAAO,CAAC,SAAS,GAAG,2BAA2B,CAAC;IAChD,SAAS,SAAS;QAChB,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC;IAC1C,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChC,CAAC","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,CAoDA;CACH"}
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,CAmDA;CACH"}
@@ -1,12 +1,3 @@
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
- };
10
1
  // The FrameworkClient class is a mini version of a query store that allows making queries on both the frontend and backend
11
2
  // you can register queries, await their results and serialize them over a server/client boundary.
12
3
  // The class is generic so that it can be a good starting off point to make other ssr adapters.
@@ -16,62 +7,47 @@ import instaql from './instaql.js';
16
7
  import { createLinkIndex } from "./utils/linkIndex.js";
17
8
  export const isServer = typeof window === 'undefined' || 'Deno' in globalThis;
18
9
  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 = [];
19
16
  constructor(params) {
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
17
+ this.params = params;
18
+ this.db = params.db;
22
19
  this.resultMap = new Map();
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;
20
+ }
21
+ subscribe = (callback) => {
22
+ this.queryResolvedCallbacks.push(callback);
23
+ };
24
+ // Runs on the client when ssr gets html script tags
25
+ addQueryResult = (queryKey, value) => {
26
+ this.resultMap.set(queryKey, {
27
+ type: value.type,
28
+ status: 'success',
29
+ data: value,
30
+ promise: null,
31
+ error: null,
32
+ });
33
+ // send the result to the client
34
+ if (!isServer) {
35
+ // make sure the attrs are there to create stores
36
+ if (!this.db._reactor.attrs) {
37
+ this.db._reactor._setAttrs(value.attrs);
70
38
  }
71
- const promise = this.getTriplesAndAttrsForQuery(query);
39
+ this.db._reactor._addQueryData(value.query, value, !!this.db._reactor.config.schema);
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);
72
48
  let entry = {
73
49
  status: 'pending',
74
- type: 'http',
50
+ type: 'session',
75
51
  data: undefined,
76
52
  error: undefined,
77
53
  promise: promise,
@@ -86,103 +62,117 @@ export class FrameworkClient {
86
62
  entry.error = error;
87
63
  entry.promise = null;
88
64
  });
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
- });
100
65
  this.resultMap.set(hash, entry);
101
66
  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,
102
75
  };
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;
114
- });
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
- }),
76
+ promise.then((result) => {
77
+ entry.status = 'success';
78
+ entry.data = result;
79
+ entry.promise = null;
80
+ });
81
+ promise.catch((error) => {
82
+ entry.status = 'error';
83
+ entry.error = error;
84
+ entry.promise = null;
85
+ });
86
+ promise.then((result) => {
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,
155
94
  });
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
- };
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
+ }),
150
+ });
151
+ if (!response.ok) {
152
+ throw new Error('Error getting triples from server');
175
153
  }
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;
154
+ const data = await response.json();
155
+ const attrs = data?.attrs;
156
+ if (!attrs) {
157
+ throw new Error('No attrs');
181
158
  }
182
- });
183
- this.params = params;
184
- this.db = params.db;
185
- this.resultMap = new Map();
186
- }
159
+ // TODO: make safer
160
+ const triples = data.result?.[0].data?.['datalog-result']?.['join-rows'][0];
161
+ const pageInfo = data.result?.[0]?.data?.['page-info'];
162
+ return {
163
+ attrs,
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
+ };
187
177
  }
188
178
  //# sourceMappingURL=framework.js.map