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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/dist/commonjs/Connection.js +50 -51
  2. package/dist/commonjs/Connection.js.map +1 -1
  3. package/dist/commonjs/InMemoryStorage.js +13 -32
  4. package/dist/commonjs/InMemoryStorage.js.map +1 -1
  5. package/dist/commonjs/IndexedDBStorage.js +193 -217
  6. package/dist/commonjs/IndexedDBStorage.js.map +1 -1
  7. package/dist/commonjs/InstantError.js +1 -0
  8. package/dist/commonjs/InstantError.js.map +1 -1
  9. package/dist/commonjs/Reactor.js +566 -610
  10. package/dist/commonjs/Reactor.js.map +1 -1
  11. package/dist/commonjs/StorageAPI.js +51 -70
  12. package/dist/commonjs/StorageAPI.js.map +1 -1
  13. package/dist/commonjs/SyncTable.js +68 -81
  14. package/dist/commonjs/SyncTable.js.map +1 -1
  15. package/dist/commonjs/WindowNetworkListener.js +2 -13
  16. package/dist/commonjs/WindowNetworkListener.js.map +1 -1
  17. package/dist/commonjs/__types__/fieldsTypeTest.js +8 -16
  18. package/dist/commonjs/__types__/fieldsTypeTest.js.map +1 -1
  19. package/dist/commonjs/__types__/useDatesTypeTest.js +3 -6
  20. package/dist/commonjs/__types__/useDatesTypeTest.js.map +1 -1
  21. package/dist/commonjs/authAPI.js +62 -79
  22. package/dist/commonjs/authAPI.js.map +1 -1
  23. package/dist/commonjs/createRouteHandler.js +5 -15
  24. package/dist/commonjs/createRouteHandler.js.map +1 -1
  25. package/dist/commonjs/datalog.js +1 -1
  26. package/dist/commonjs/datalog.js.map +1 -1
  27. package/dist/commonjs/devtool.js +26 -8
  28. package/dist/commonjs/devtool.js.map +1 -1
  29. package/dist/commonjs/framework.d.ts.map +1 -1
  30. package/dist/commonjs/framework.js +142 -152
  31. package/dist/commonjs/framework.js.map +1 -1
  32. package/dist/commonjs/index.js +204 -190
  33. package/dist/commonjs/index.js.map +1 -1
  34. package/dist/commonjs/instaml.js +44 -30
  35. package/dist/commonjs/instaml.js.map +1 -1
  36. package/dist/commonjs/instaql.js +25 -33
  37. package/dist/commonjs/instaql.js.map +1 -1
  38. package/dist/commonjs/parseSchemaFromJSON.js +6 -7
  39. package/dist/commonjs/parseSchemaFromJSON.js.map +1 -1
  40. package/dist/commonjs/presence.js +7 -8
  41. package/dist/commonjs/presence.js.map +1 -1
  42. package/dist/commonjs/queryValidation.js +1 -2
  43. package/dist/commonjs/queryValidation.js.map +1 -1
  44. package/dist/commonjs/schema.js +8 -6
  45. package/dist/commonjs/schema.js.map +1 -1
  46. package/dist/commonjs/schemaTypes.js +22 -3
  47. package/dist/commonjs/schemaTypes.js.map +1 -1
  48. package/dist/commonjs/store.js +29 -38
  49. package/dist/commonjs/store.js.map +1 -1
  50. package/dist/commonjs/transactionValidation.js +1 -2
  51. package/dist/commonjs/transactionValidation.js.map +1 -1
  52. package/dist/commonjs/utils/Deferred.js +3 -0
  53. package/dist/commonjs/utils/Deferred.js.map +1 -1
  54. package/dist/commonjs/utils/PersistedObject.js +216 -233
  55. package/dist/commonjs/utils/PersistedObject.js.map +1 -1
  56. package/dist/commonjs/utils/fetch.js +9 -19
  57. package/dist/commonjs/utils/fetch.js.map +1 -1
  58. package/dist/commonjs/utils/linkIndex.js +2 -4
  59. package/dist/commonjs/utils/linkIndex.js.map +1 -1
  60. package/dist/commonjs/utils/object.js +1 -1
  61. package/dist/commonjs/utils/object.js.map +1 -1
  62. package/dist/esm/Connection.js +50 -51
  63. package/dist/esm/Connection.js.map +1 -1
  64. package/dist/esm/InMemoryStorage.js +13 -32
  65. package/dist/esm/InMemoryStorage.js.map +1 -1
  66. package/dist/esm/IndexedDBStorage.js +193 -217
  67. package/dist/esm/IndexedDBStorage.js.map +1 -1
  68. package/dist/esm/InstantError.js +1 -0
  69. package/dist/esm/InstantError.js.map +1 -1
  70. package/dist/esm/Reactor.js +566 -610
  71. package/dist/esm/Reactor.js.map +1 -1
  72. package/dist/esm/StorageAPI.js +51 -70
  73. package/dist/esm/StorageAPI.js.map +1 -1
  74. package/dist/esm/SyncTable.js +68 -81
  75. package/dist/esm/SyncTable.js.map +1 -1
  76. package/dist/esm/WindowNetworkListener.js +2 -13
  77. package/dist/esm/WindowNetworkListener.js.map +1 -1
  78. package/dist/esm/__types__/fieldsTypeTest.js +8 -16
  79. package/dist/esm/__types__/fieldsTypeTest.js.map +1 -1
  80. package/dist/esm/__types__/useDatesTypeTest.js +3 -6
  81. package/dist/esm/__types__/useDatesTypeTest.js.map +1 -1
  82. package/dist/esm/authAPI.js +62 -79
  83. package/dist/esm/authAPI.js.map +1 -1
  84. package/dist/esm/createRouteHandler.js +5 -15
  85. package/dist/esm/createRouteHandler.js.map +1 -1
  86. package/dist/esm/datalog.js +1 -1
  87. package/dist/esm/datalog.js.map +1 -1
  88. package/dist/esm/devtool.js +26 -8
  89. package/dist/esm/devtool.js.map +1 -1
  90. package/dist/esm/framework.d.ts.map +1 -1
  91. package/dist/esm/framework.js +142 -152
  92. package/dist/esm/framework.js.map +1 -1
  93. package/dist/esm/index.js +204 -190
  94. package/dist/esm/index.js.map +1 -1
  95. package/dist/esm/instaml.js +44 -30
  96. package/dist/esm/instaml.js.map +1 -1
  97. package/dist/esm/instaql.js +25 -33
  98. package/dist/esm/instaql.js.map +1 -1
  99. package/dist/esm/parseSchemaFromJSON.js +6 -7
  100. package/dist/esm/parseSchemaFromJSON.js.map +1 -1
  101. package/dist/esm/presence.js +7 -8
  102. package/dist/esm/presence.js.map +1 -1
  103. package/dist/esm/queryValidation.js +1 -2
  104. package/dist/esm/queryValidation.js.map +1 -1
  105. package/dist/esm/schema.js +8 -6
  106. package/dist/esm/schema.js.map +1 -1
  107. package/dist/esm/schemaTypes.js +22 -3
  108. package/dist/esm/schemaTypes.js.map +1 -1
  109. package/dist/esm/store.js +29 -38
  110. package/dist/esm/store.js.map +1 -1
  111. package/dist/esm/transactionValidation.js +1 -2
  112. package/dist/esm/transactionValidation.js.map +1 -1
  113. package/dist/esm/utils/Deferred.js +3 -0
  114. package/dist/esm/utils/Deferred.js.map +1 -1
  115. package/dist/esm/utils/PersistedObject.js +216 -233
  116. package/dist/esm/utils/PersistedObject.js.map +1 -1
  117. package/dist/esm/utils/fetch.js +9 -19
  118. package/dist/esm/utils/fetch.js.map +1 -1
  119. package/dist/esm/utils/linkIndex.js +2 -4
  120. package/dist/esm/utils/linkIndex.js.map +1 -1
  121. package/dist/esm/utils/object.js +1 -1
  122. package/dist/esm/utils/object.js.map +1 -1
  123. package/dist/standalone/index.js +2610 -2367
  124. package/dist/standalone/index.umd.cjs +3 -3
  125. package/package.json +2 -2
  126. package/src/framework.ts +0 -1
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.createInstantRouteHandler = void 0;
13
4
  function createUserSyncResponse(config, user) {
@@ -38,13 +29,12 @@ function errorResponse(status, message) {
38
29
  }
39
30
  const createInstantRouteHandler = (config) => {
40
31
  return {
41
- POST: (req) => __awaiter(void 0, void 0, void 0, function* () {
42
- var _a;
32
+ POST: async (req) => {
43
33
  let body;
44
34
  try {
45
- body = yield req.json();
35
+ body = await req.json();
46
36
  }
47
- catch (_b) {
37
+ catch {
48
38
  return errorResponse(400, 'Invalid JSON body');
49
39
  }
50
40
  if (!body.type) {
@@ -55,11 +45,11 @@ const createInstantRouteHandler = (config) => {
55
45
  }
56
46
  switch (body.type) {
57
47
  case 'sync-user':
58
- return createUserSyncResponse(config, (_a = body.user) !== null && _a !== void 0 ? _a : null);
48
+ return createUserSyncResponse(config, body.user ?? null);
59
49
  default:
60
50
  return errorResponse(400, `Unknown type: ${body.type}`);
61
51
  }
62
- }),
52
+ },
63
53
  };
64
54
  };
65
55
  exports.createInstantRouteHandler = createInstantRouteHandler;
@@ -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;AAEM,MAAM,yBAAyB,GAAG,CAAC,MAAgC,EAAE,EAAE;IAC5E,OAAO;QACL,IAAI,EAAE,CAAO,GAAY,EAAE,EAAE;;YAC3B,IAAI,IAA2D,CAAC;YAChE,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC1B,CAAC;YAAC,WAAM,CAAC;gBACP,OAAO,aAAa,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,aAAa,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;YACpD,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,OAAO,aAAa,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAC/C,CAAC;YAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,WAAW;oBACd,OAAO,sBAAsB,CAAC,MAAM,EAAE,MAAA,IAAI,CAAC,IAAI,mCAAI,IAAI,CAAC,CAAC;gBAC3D;oBACE,OAAO,aAAa,CAAC,GAAG,EAAE,iBAAiB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAA;KACF,CAAC;AACJ,CAAC,CAAC;AA1BW,QAAA,yBAAyB,6BA0BpC","sourcesContent":["import type { User } from './clientTypes.js';\n\ntype CreateRouteHandlerConfig = {\n appId: string;\n};\n\nfunction createUserSyncResponse(\n config: CreateRouteHandlerConfig,\n user: User | null,\n) {\n if (user && user.refresh_token) {\n return new Response(JSON.stringify({ ok: true }), {\n headers: {\n 'Content-Type': 'application/json',\n // 7 day expiry\n 'Set-Cookie': `instant_user_${config.appId}=${JSON.stringify(user)}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=604800`,\n },\n });\n } else {\n return new Response(JSON.stringify({ ok: true }), {\n headers: {\n 'Content-Type': 'application/json',\n // remove the cookie (some browsers)\n 'Set-Cookie': `instant_user_${config.appId}=; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=-1`,\n },\n });\n }\n}\n\nfunction errorResponse(status: number, message: string) {\n return new Response(JSON.stringify({ ok: false, error: message }), {\n status,\n headers: { 'Content-Type': 'application/json' },\n });\n}\n\nexport const createInstantRouteHandler = (config: CreateRouteHandlerConfig) => {\n return {\n POST: async (req: Request) => {\n let body: { type?: string; appId?: string; user?: User | null };\n try {\n body = await req.json();\n } catch {\n return errorResponse(400, 'Invalid JSON body');\n }\n\n if (!body.type) {\n return errorResponse(400, 'Missing \"type\" field');\n }\n\n if (body.appId !== config.appId) {\n return errorResponse(403, 'App ID mismatch');\n }\n\n switch (body.type) {\n case 'sync-user':\n return createUserSyncResponse(config, body.user ?? null);\n default:\n return errorResponse(400, `Unknown type: ${body.type}`);\n }\n },\n };\n};\n"]}
1
+ {"version":3,"file":"createRouteHandler.js","sourceRoot":"","sources":["../../src/createRouteHandler.ts"],"names":[],"mappings":";;;AAMA,SAAS,sBAAsB,CAC7B,MAAgC,EAChC,IAAiB;IAEjB,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QAC/B,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;YAChD,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe;gBACf,YAAY,EAAE,gBAAgB,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,6DAA6D;aAChI;SACF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;YAChD,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,oCAAoC;gBACpC,YAAY,EAAE,gBAAgB,MAAM,CAAC,KAAK,0DAA0D;aACrG;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAAc,EAAE,OAAe;IACpD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;QACjE,MAAM;QACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAEM,MAAM,yBAAyB,GAAG,CAAC,MAAgC,EAAE,EAAE;IAC5E,OAAO;QACL,IAAI,EAAE,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;AA1BW,QAAA,yBAAyB,6BA0BpC","sourcesContent":["import type { User } from './clientTypes.js';\n\ntype CreateRouteHandlerConfig = {\n appId: string;\n};\n\nfunction createUserSyncResponse(\n config: CreateRouteHandlerConfig,\n user: User | null,\n) {\n if (user && user.refresh_token) {\n return new Response(JSON.stringify({ ok: true }), {\n headers: {\n 'Content-Type': 'application/json',\n // 7 day expiry\n 'Set-Cookie': `instant_user_${config.appId}=${JSON.stringify(user)}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=604800`,\n },\n });\n } else {\n return new Response(JSON.stringify({ ok: true }), {\n headers: {\n 'Content-Type': 'application/json',\n // remove the cookie (some browsers)\n 'Set-Cookie': `instant_user_${config.appId}=; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=-1`,\n },\n });\n }\n}\n\nfunction errorResponse(status: number, message: string) {\n return new Response(JSON.stringify({ ok: false, error: message }), {\n status,\n headers: { 'Content-Type': 'application/json' },\n });\n}\n\nexport const createInstantRouteHandler = (config: CreateRouteHandlerConfig) => {\n return {\n POST: async (req: Request) => {\n let body: { type?: string; appId?: string; user?: User | null };\n try {\n body = await req.json();\n } catch {\n return errorResponse(400, 'Invalid JSON body');\n }\n\n if (!body.type) {\n return errorResponse(400, 'Missing \"type\" field');\n }\n\n if (body.appId !== config.appId) {\n return errorResponse(403, 'App ID mismatch');\n }\n\n switch (body.type) {\n case 'sync-user':\n return createUserSyncResponse(config, body.user ?? null);\n default:\n return errorResponse(400, `Unknown type: ${body.type}`);\n }\n },\n };\n};\n"]}
@@ -14,7 +14,7 @@ function matchVariable(variable, triplePart, context) {
14
14
  const bound = context[variable];
15
15
  return matchPart(bound, triplePart, context);
16
16
  }
17
- return Object.assign(Object.assign({}, context), { [variable]: triplePart });
17
+ return { ...context, [variable]: triplePart };
18
18
  }
19
19
  function matchExact(patternPart, triplePart, context) {
20
20
  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"]}
@@ -37,15 +37,14 @@ exports.createDevtool = createDevtool;
37
37
  const flags = __importStar(require("./utils/flags.js"));
38
38
  let currentDevtool;
39
39
  function createDevtool(appId, config) {
40
- currentDevtool === null || currentDevtool === void 0 ? void 0 : currentDevtool.dispose();
40
+ currentDevtool?.dispose();
41
41
  const iframeContrainer = createIframeContainer(config);
42
42
  const toggler = createToggler(config, toggleView);
43
43
  const iframe = createIframe(getSrc(appId));
44
44
  function onPostMessage(event) {
45
- var _a;
46
45
  if (event.source !== iframe.element.contentWindow)
47
46
  return;
48
- if (((_a = event.data) === null || _a === void 0 ? void 0 : _a.type) === 'close' && iframeContrainer.isVisible()) {
47
+ if (event.data?.type === 'close' && iframeContrainer.isVisible()) {
49
48
  toggleView();
50
49
  }
51
50
  }
@@ -115,13 +114,23 @@ function createToggler(config, onClick) {
115
114
  const element = document.createElement('button');
116
115
  element.innerHTML = logoSVG;
117
116
  element.className = 'instant-devtool-toggler';
118
- Object.assign(element.style, Object.assign(Object.assign({
117
+ Object.assign(element.style, {
119
118
  // pos
120
- position: 'fixed' }, cssPositionForToggler(config.position)), { height: '32px', width: '32px',
119
+ position: 'fixed',
120
+ ...cssPositionForToggler(config.position),
121
+ height: '32px',
122
+ width: '32px',
121
123
  // layout
122
- display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: '9010',
124
+ display: 'flex',
125
+ alignItems: 'center',
126
+ justifyContent: 'center',
127
+ zIndex: '9010',
123
128
  // look
124
- padding: '0', margin: '0', border: 'none', cursor: 'pointer' }));
129
+ padding: '0',
130
+ margin: '0',
131
+ border: 'none',
132
+ cursor: 'pointer',
133
+ });
125
134
  element.addEventListener('click', onClick);
126
135
  return { element };
127
136
  }
@@ -151,7 +160,16 @@ function cssPositionForIframeContainer(position) {
151
160
  }
152
161
  function createIframeContainer(config) {
153
162
  const element = document.createElement('div');
154
- 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' }));
163
+ Object.assign(element.style, {
164
+ position: 'fixed',
165
+ ...cssPositionForIframeContainer(config.position),
166
+ display: 'block',
167
+ borderRadius: '4px',
168
+ border: '1px #ccc solid',
169
+ boxShadow: '0px 0px 8px #00000044',
170
+ backgroundColor: '#eee',
171
+ zIndex: '999990',
172
+ });
155
173
  element.style.display = 'none';
156
174
  element.className = 'instant-devtool-container';
157
175
  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":"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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,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"}
@@ -32,15 +32,6 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
- return new (P || (P = Promise))(function (resolve, reject) {
38
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
- step((generator = generator.apply(thisArg, _arguments || [])).next());
42
- });
43
- };
44
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
45
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
46
37
  };
@@ -55,62 +46,47 @@ const instaql_js_1 = __importDefault(require("./instaql.js"));
55
46
  const linkIndex_ts_1 = require("./utils/linkIndex.js");
56
47
  exports.isServer = typeof window === 'undefined' || 'Deno' in globalThis;
57
48
  class FrameworkClient {
49
+ params;
50
+ db;
51
+ // stores all of the query promises so that ssr can read them
52
+ // and send the relevant results alongside the html that resulted in the query resolving
53
+ resultMap = new Map();
54
+ queryResolvedCallbacks = [];
58
55
  constructor(params) {
59
- // stores all of the query promises so that ssr can read them
60
- // and send the relevant results alongside the html that resulted in the query resolving
56
+ this.params = params;
57
+ this.db = params.db;
61
58
  this.resultMap = new Map();
62
- this.queryResolvedCallbacks = [];
63
- this.subscribe = (callback) => {
64
- this.queryResolvedCallbacks.push(callback);
65
- };
66
- // Runs on the client when ssr gets html script tags
67
- this.addQueryResult = (queryKey, value) => {
68
- this.resultMap.set(queryKey, {
69
- type: value.type,
70
- status: 'success',
71
- data: value,
72
- promise: null,
73
- error: null,
74
- });
75
- // send the result to the client
76
- if (!exports.isServer) {
77
- // make sure the attrs are there to create stores
78
- if (!this.db._reactor.attrs) {
79
- this.db._reactor._setAttrs(value.attrs);
80
- }
81
- this.db._reactor._addQueryData(value.query, value, !!this.db._reactor.config.schema);
82
- }
83
- };
84
- // creates an entry in the results map
85
- // and returns the same thing added to the map
86
- this.query = (_query, opts) => {
87
- const { hash, query } = this.hashQuery(_query, opts);
88
- if (this.db._reactor.status === 'authenticated') {
89
- const promise = this.db.queryOnce(_query, opts);
90
- let entry = {
91
- status: 'pending',
92
- type: 'session',
93
- data: undefined,
94
- error: undefined,
95
- promise: promise,
96
- };
97
- promise.then((result) => {
98
- entry.status = 'success';
99
- entry.data = result;
100
- entry.promise = null;
101
- });
102
- promise.catch((error) => {
103
- entry.status = 'error';
104
- entry.error = error;
105
- entry.promise = null;
106
- });
107
- this.resultMap.set(hash, entry);
108
- return entry;
59
+ }
60
+ subscribe = (callback) => {
61
+ this.queryResolvedCallbacks.push(callback);
62
+ };
63
+ // Runs on the client when ssr gets html script tags
64
+ addQueryResult = (queryKey, value) => {
65
+ this.resultMap.set(queryKey, {
66
+ type: value.type,
67
+ status: 'success',
68
+ data: value,
69
+ promise: null,
70
+ error: null,
71
+ });
72
+ // send the result to the client
73
+ if (!exports.isServer) {
74
+ // make sure the attrs are there to create stores
75
+ if (!this.db._reactor.attrs) {
76
+ this.db._reactor._setAttrs(value.attrs);
109
77
  }
110
- const promise = this.getTriplesAndAttrsForQuery(query);
78
+ this.db._reactor._addQueryData(value.query, value, !!this.db._reactor.config.schema);
79
+ }
80
+ };
81
+ // creates an entry in the results map
82
+ // and returns the same thing added to the map
83
+ query = (_query, opts) => {
84
+ const { hash, query } = this.hashQuery(_query, opts);
85
+ if (this.db._reactor.status === 'authenticated') {
86
+ const promise = this.db.queryOnce(_query, opts);
111
87
  let entry = {
112
88
  status: 'pending',
113
- type: 'http',
89
+ type: 'session',
114
90
  data: undefined,
115
91
  error: undefined,
116
92
  promise: promise,
@@ -125,104 +101,118 @@ class FrameworkClient {
125
101
  entry.error = error;
126
102
  entry.promise = null;
127
103
  });
128
- promise.then((result) => {
129
- this.queryResolvedCallbacks.forEach((callback) => {
130
- callback({
131
- queryHash: hash,
132
- query: query,
133
- attrs: result.attrs,
134
- triples: result.triples,
135
- pageInfo: result.pageInfo,
136
- });
137
- });
138
- });
139
104
  this.resultMap.set(hash, entry);
140
105
  return entry;
106
+ }
107
+ const promise = this.getTriplesAndAttrsForQuery(query);
108
+ let entry = {
109
+ status: 'pending',
110
+ type: 'http',
111
+ data: undefined,
112
+ error: undefined,
113
+ promise: promise,
141
114
  };
142
- this.getExistingResultForQuery = (_query, opts) => {
143
- const { hash } = this.hashQuery(_query, opts);
144
- return this.resultMap.get(hash);
145
- };
146
- // creates a query result from a set of triples, query, and attrs
147
- // can be run server side or client side
148
- this.completeIsomorphic = (query, triples, attrs, pageInfo) => {
149
- var _a, _b, _c, _d, _e, _f, _g, _h;
150
- const attrMap = {};
151
- attrs.forEach((attr) => {
152
- attrMap[attr.id] = attr;
153
- });
154
- 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) &&
155
- ('cardinalityInference' in ((_e = (_d = this.db) === null || _d === void 0 ? void 0 : _d._reactor) === null || _e === void 0 ? void 0 : _e.config)
156
- ? Boolean((_g = (_f = this.db) === null || _f === void 0 ? void 0 : _f._reactor.config) === null || _g === void 0 ? void 0 : _g.cardinalityInference)
157
- : true);
158
- const attrsStore = new s.AttrsStoreClass(attrs.reduce((acc, attr) => {
159
- acc[attr.id] = attr;
160
- return acc;
161
- }, {}), (0, linkIndex_ts_1.createLinkIndex)((_h = this.db) === null || _h === void 0 ? void 0 : _h._reactor.config.schema));
162
- const store = s.createStore(attrsStore, triples, enableCardinalityInference, this.params.db._reactor.config.useDateObjects || false);
163
- const resp = (0, instaql_js_1.default)({
164
- store: store,
165
- attrsStore: attrsStore,
166
- pageInfo: pageInfo,
167
- aggregate: undefined,
168
- }, query);
169
- return resp;
170
- };
171
- this.hashQuery = (_query, opts) => {
172
- if (_query && opts && 'ruleParams' in opts) {
173
- _query = Object.assign({ $$ruleParams: opts['ruleParams'] }, _query);
174
- }
175
- const query = _query ? (0, index_ts_1.coerceQuery)(_query) : null;
176
- return { hash: (0, index_ts_1.weakHash)(query), query: query };
177
- };
178
- // Run by the server to get triples and attrs
179
- this.getTriplesAndAttrsForQuery = (query) => __awaiter(this, void 0, void 0, function* () {
180
- var _a, _b, _c, _d, _e, _f;
181
- try {
182
- const response = yield fetch(`${this.db._reactor.config.apiURI}/runtime/framework/query`, {
183
- method: 'POST',
184
- headers: {
185
- 'app-id': this.params.db._reactor.config.appId,
186
- 'Content-Type': 'application/json',
187
- Authorization: this.params.token
188
- ? `Bearer ${this.params.token}`
189
- : undefined,
190
- },
191
- body: JSON.stringify({
192
- query: query,
193
- }),
115
+ promise.then((result) => {
116
+ entry.status = 'success';
117
+ entry.data = result;
118
+ entry.promise = null;
119
+ });
120
+ promise.catch((error) => {
121
+ entry.status = 'error';
122
+ entry.error = error;
123
+ entry.promise = null;
124
+ });
125
+ promise.then((result) => {
126
+ this.queryResolvedCallbacks.forEach((callback) => {
127
+ callback({
128
+ queryHash: hash,
129
+ query: query,
130
+ attrs: result.attrs,
131
+ triples: result.triples,
132
+ pageInfo: result.pageInfo,
194
133
  });
195
- if (!response.ok) {
196
- throw new Error('Error getting triples from server');
197
- }
198
- const data = yield response.json();
199
- const attrs = data === null || data === void 0 ? void 0 : data.attrs;
200
- if (!attrs) {
201
- throw new Error('No attrs');
202
- }
203
- // TODO: make safer
204
- 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];
205
- 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'];
206
- return {
207
- attrs,
208
- triples,
209
- type: 'http',
210
- queryHash: this.hashQuery(query).hash,
211
- query,
212
- pageInfo,
213
- };
134
+ });
135
+ });
136
+ this.resultMap.set(hash, entry);
137
+ return entry;
138
+ };
139
+ getExistingResultForQuery = (_query, opts) => {
140
+ const { hash } = this.hashQuery(_query, opts);
141
+ return this.resultMap.get(hash);
142
+ };
143
+ // creates a query result from a set of triples, query, and attrs
144
+ // can be run server side or client side
145
+ completeIsomorphic = (query, triples, attrs, pageInfo) => {
146
+ const attrMap = {};
147
+ attrs.forEach((attr) => {
148
+ attrMap[attr.id] = attr;
149
+ });
150
+ const enableCardinalityInference = Boolean(this.db?._reactor?.config?.schema) &&
151
+ ('cardinalityInference' in this.db?._reactor?.config
152
+ ? Boolean(this.db?._reactor.config?.cardinalityInference)
153
+ : true);
154
+ const attrsStore = new s.AttrsStoreClass(attrs.reduce((acc, attr) => {
155
+ acc[attr.id] = attr;
156
+ return acc;
157
+ }, {}), (0, linkIndex_ts_1.createLinkIndex)(this.db?._reactor.config.schema));
158
+ const store = s.createStore(attrsStore, triples, enableCardinalityInference, this.params.db._reactor.config.useDateObjects || false);
159
+ const resp = (0, instaql_js_1.default)({
160
+ store: store,
161
+ attrsStore: attrsStore,
162
+ pageInfo: pageInfo,
163
+ aggregate: undefined,
164
+ }, query);
165
+ return resp;
166
+ };
167
+ hashQuery = (_query, opts) => {
168
+ if (_query && opts && 'ruleParams' in opts) {
169
+ _query = { $$ruleParams: opts['ruleParams'], ..._query };
170
+ }
171
+ const query = _query ? (0, index_ts_1.coerceQuery)(_query) : null;
172
+ return { hash: (0, index_ts_1.weakHash)(query), query: query };
173
+ };
174
+ // Run by the server to get triples and attrs
175
+ getTriplesAndAttrsForQuery = async (query) => {
176
+ try {
177
+ const response = await fetch(`${this.db._reactor.config.apiURI}/runtime/framework/query`, {
178
+ method: 'POST',
179
+ headers: {
180
+ 'app-id': this.params.db._reactor.config.appId,
181
+ 'Content-Type': 'application/json',
182
+ Authorization: this.params.token
183
+ ? `Bearer ${this.params.token}`
184
+ : undefined,
185
+ },
186
+ body: JSON.stringify({
187
+ query: query,
188
+ }),
189
+ });
190
+ if (!response.ok) {
191
+ throw new Error('Error getting triples from server');
214
192
  }
215
- catch (err) {
216
- const errWithMessage = new Error('Error getting triples from framework client');
217
- // @ts-expect-error pre es2022
218
- errWithMessage.cause = err;
219
- throw errWithMessage;
193
+ const data = await response.json();
194
+ const attrs = data?.attrs;
195
+ if (!attrs) {
196
+ throw new Error('No attrs');
220
197
  }
221
- });
222
- this.params = params;
223
- this.db = params.db;
224
- this.resultMap = new Map();
225
- }
198
+ // TODO: make safer
199
+ const triples = data.result?.[0].data?.['datalog-result']?.['join-rows'][0];
200
+ const pageInfo = data.result?.[0]?.data?.['page-info'];
201
+ return {
202
+ attrs,
203
+ triples,
204
+ type: 'http',
205
+ queryHash: this.hashQuery(query).hash,
206
+ query,
207
+ pageInfo,
208
+ };
209
+ }
210
+ catch (err) {
211
+ const errWithMessage = new Error('Error getting triples from framework client');
212
+ errWithMessage.cause = err;
213
+ throw errWithMessage;
214
+ }
215
+ };
226
216
  }
227
217
  exports.FrameworkClient = FrameworkClient;
228
218
  //# sourceMappingURL=framework.js.map