@instantdb/core 0.22.88-experimental.drewh-ssr.20251523170.1 → 0.22.88-experimental.split-store.20252005043.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 (102) hide show
  1. package/__tests__/src/Reactor.test.js +18 -11
  2. package/__tests__/src/{datalog.test.js → datalog.test.ts} +17 -5
  3. package/__tests__/src/{instaml.test.js → instaml.test.ts} +183 -119
  4. package/__tests__/src/instaql.bench.ts +34 -0
  5. package/__tests__/src/{instaql.test.js → instaql.test.ts} +342 -455
  6. package/__tests__/src/instaqlInference.test.js +13 -9
  7. package/__tests__/src/{store.test.js → store.test.ts} +215 -212
  8. package/dist/commonjs/Reactor.d.ts +24 -19
  9. package/dist/commonjs/Reactor.d.ts.map +1 -1
  10. package/dist/commonjs/Reactor.js +112 -106
  11. package/dist/commonjs/Reactor.js.map +1 -1
  12. package/dist/commonjs/SyncTable.d.ts +4 -1
  13. package/dist/commonjs/SyncTable.d.ts.map +1 -1
  14. package/dist/commonjs/SyncTable.js +35 -37
  15. package/dist/commonjs/SyncTable.js.map +1 -1
  16. package/dist/commonjs/index.d.ts +1 -5
  17. package/dist/commonjs/index.d.ts.map +1 -1
  18. package/dist/commonjs/index.js +1 -7
  19. package/dist/commonjs/index.js.map +1 -1
  20. package/dist/commonjs/instaml.d.ts +17 -4
  21. package/dist/commonjs/instaml.d.ts.map +1 -1
  22. package/dist/commonjs/instaml.js +115 -82
  23. package/dist/commonjs/instaml.js.map +1 -1
  24. package/dist/commonjs/instaql.d.ts +4 -3
  25. package/dist/commonjs/instaql.d.ts.map +1 -1
  26. package/dist/commonjs/instaql.js +65 -63
  27. package/dist/commonjs/instaql.js.map +1 -1
  28. package/dist/commonjs/reactorTypes.d.ts +29 -0
  29. package/dist/commonjs/reactorTypes.d.ts.map +1 -0
  30. package/dist/commonjs/reactorTypes.js +3 -0
  31. package/dist/commonjs/reactorTypes.js.map +1 -0
  32. package/dist/commonjs/store.d.ts +67 -25
  33. package/dist/commonjs/store.d.ts.map +1 -1
  34. package/dist/commonjs/store.js +177 -81
  35. package/dist/commonjs/store.js.map +1 -1
  36. package/dist/esm/Reactor.d.ts +24 -19
  37. package/dist/esm/Reactor.d.ts.map +1 -1
  38. package/dist/esm/Reactor.js +113 -107
  39. package/dist/esm/Reactor.js.map +1 -1
  40. package/dist/esm/SyncTable.d.ts +4 -1
  41. package/dist/esm/SyncTable.d.ts.map +1 -1
  42. package/dist/esm/SyncTable.js +35 -37
  43. package/dist/esm/SyncTable.js.map +1 -1
  44. package/dist/esm/index.d.ts +1 -5
  45. package/dist/esm/index.d.ts.map +1 -1
  46. package/dist/esm/index.js +2 -5
  47. package/dist/esm/index.js.map +1 -1
  48. package/dist/esm/instaml.d.ts +17 -4
  49. package/dist/esm/instaml.d.ts.map +1 -1
  50. package/dist/esm/instaml.js +112 -77
  51. package/dist/esm/instaml.js.map +1 -1
  52. package/dist/esm/instaql.d.ts +4 -3
  53. package/dist/esm/instaql.d.ts.map +1 -1
  54. package/dist/esm/instaql.js +65 -63
  55. package/dist/esm/instaql.js.map +1 -1
  56. package/dist/esm/reactorTypes.d.ts +29 -0
  57. package/dist/esm/reactorTypes.d.ts.map +1 -0
  58. package/dist/esm/reactorTypes.js +2 -0
  59. package/dist/esm/reactorTypes.js.map +1 -0
  60. package/dist/esm/store.d.ts +67 -25
  61. package/dist/esm/store.d.ts.map +1 -1
  62. package/dist/esm/store.js +174 -81
  63. package/dist/esm/store.js.map +1 -1
  64. package/dist/standalone/index.js +1851 -1961
  65. package/dist/standalone/index.umd.cjs +3 -3
  66. package/package.json +2 -2
  67. package/src/Reactor.js +155 -143
  68. package/src/SyncTable.ts +85 -45
  69. package/src/index.ts +0 -9
  70. package/src/{instaml.js → instaml.ts} +201 -96
  71. package/src/instaql.ts +88 -62
  72. package/src/reactorTypes.ts +32 -0
  73. package/src/store.ts +257 -101
  74. package/__tests__/src/instaql.bench.js +0 -29
  75. package/__tests__/src/serializeSchema.test.ts +0 -123
  76. package/dist/commonjs/createRouteHandler.d.ts +0 -8
  77. package/dist/commonjs/createRouteHandler.d.ts.map +0 -1
  78. package/dist/commonjs/createRouteHandler.js +0 -57
  79. package/dist/commonjs/createRouteHandler.js.map +0 -1
  80. package/dist/commonjs/framework.d.ts +0 -77
  81. package/dist/commonjs/framework.d.ts.map +0 -1
  82. package/dist/commonjs/framework.js +0 -199
  83. package/dist/commonjs/framework.js.map +0 -1
  84. package/dist/commonjs/parseSchemaFromJSON.d.ts +0 -3
  85. package/dist/commonjs/parseSchemaFromJSON.d.ts.map +0 -1
  86. package/dist/commonjs/parseSchemaFromJSON.js +0 -148
  87. package/dist/commonjs/parseSchemaFromJSON.js.map +0 -1
  88. package/dist/esm/createRouteHandler.d.ts +0 -8
  89. package/dist/esm/createRouteHandler.d.ts.map +0 -1
  90. package/dist/esm/createRouteHandler.js +0 -53
  91. package/dist/esm/createRouteHandler.js.map +0 -1
  92. package/dist/esm/framework.d.ts +0 -77
  93. package/dist/esm/framework.d.ts.map +0 -1
  94. package/dist/esm/framework.js +0 -159
  95. package/dist/esm/framework.js.map +0 -1
  96. package/dist/esm/parseSchemaFromJSON.d.ts +0 -3
  97. package/dist/esm/parseSchemaFromJSON.d.ts.map +0 -1
  98. package/dist/esm/parseSchemaFromJSON.js +0 -144
  99. package/dist/esm/parseSchemaFromJSON.js.map +0 -1
  100. package/src/createRouteHandler.ts +0 -44
  101. package/src/framework.ts +0 -281
  102. package/src/parseSchemaFromJSON.ts +0 -176
@@ -1,123 +0,0 @@
1
- import { expect, test } from 'vitest';
2
- import { i } from '../../src/schema';
3
- import { parseSchemaFromJSON } from '../../src/parseSchemaFromJSON';
4
- import { InstantSchemaDef } from '../../src/schemaTypes';
5
-
6
- const schema = i.schema({
7
- entities: {
8
- users: i.entity({
9
- name: i.string(),
10
- email: i.string().indexed().unique(),
11
- bio: i.string().optional(),
12
- // this is a convenient way to typecheck custom JSON fields
13
- // though we should probably have a backend solution for this
14
- stuff: i.json<{ custom: string }>(),
15
- junk: i.any(),
16
- }),
17
- posts: i.entity({
18
- title: i.string().optional(),
19
- body: i.string(),
20
- }),
21
- comments: i.entity({
22
- body: i.string().indexed(),
23
- likes: i.number(),
24
- }),
25
-
26
- birthdays: i.entity({
27
- date: i.date(),
28
- message: i.string(),
29
- prizes: i.json<string | number>(),
30
- }),
31
- },
32
- links: {
33
- usersPosts: {
34
- forward: {
35
- on: 'users',
36
- has: 'many',
37
- label: 'posts',
38
- },
39
- reverse: {
40
- on: 'posts',
41
- has: 'one',
42
- label: 'author',
43
- },
44
- },
45
- postsComments: {
46
- forward: {
47
- on: 'posts',
48
- has: 'many',
49
- label: 'comments',
50
- },
51
- reverse: {
52
- on: 'comments',
53
- has: 'one',
54
- label: 'post',
55
- },
56
- },
57
- friendships: {
58
- forward: {
59
- on: 'users',
60
- has: 'many',
61
- label: 'friends',
62
- },
63
- reverse: {
64
- on: 'users',
65
- has: 'many',
66
- label: '_friends',
67
- },
68
- },
69
- referrals: {
70
- forward: {
71
- on: 'users',
72
- has: 'many',
73
- label: 'referred',
74
- },
75
- reverse: {
76
- on: 'users',
77
- has: 'one',
78
- label: 'referrer',
79
- },
80
- },
81
- },
82
- rooms: {
83
- chat: {
84
- presence: i.entity({
85
- name: i.string(),
86
- status: i.string(),
87
- }),
88
- topics: {
89
- sendEmoji: i.entity({
90
- emoji: i.string(),
91
- }),
92
- },
93
- },
94
- },
95
- });
96
-
97
- type AnySchema = InstantSchemaDef<any, any, any>;
98
-
99
- // compare schemas by stringifying them with json and comparing the strings
100
- const compareSchemas = (schema1: AnySchema, schema2: AnySchema) => {
101
- expect(JSON.stringify(schema1, null, 2)).toBe(
102
- JSON.stringify(schema2, null, 2),
103
- );
104
- };
105
-
106
- test('ability to parse stringified schema into real schema object', () => {
107
- const stringified = JSON.stringify(schema, null, 2);
108
- const parsed = JSON.parse(stringified);
109
- console.log(stringified);
110
-
111
- const otherSide = parseSchemaFromJSON(parsed);
112
-
113
- compareSchemas(schema, otherSide);
114
-
115
- expect(schema.entities.comments.links).toEqual(
116
- otherSide.entities.comments.links,
117
- );
118
- expect(schema.entities.comments.asType).toEqual(
119
- otherSide.entities.comments.asType,
120
- );
121
-
122
- expect(schema).toStrictEqual(otherSide);
123
- });
@@ -1,8 +0,0 @@
1
- export declare const createInstantRouteHandler: (config: {
2
- appId: string;
3
- apiURI?: string;
4
- }) => {
5
- GET: (_req: Request) => Promise<Response>;
6
- POST: (req: Request) => Promise<Response>;
7
- };
8
- //# sourceMappingURL=createRouteHandler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createRouteHandler.d.ts","sourceRoot":"","sources":["../../src/createRouteHandler.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,GAAI,QAAQ;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;gBAqBqB,OAAO;gBAMP,OAAO;CAa5B,CAAC"}
@@ -1,57 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.createInstantRouteHandler = void 0;
13
- const createInstantRouteHandler = (config) => {
14
- function handleUserSync(req) {
15
- return __awaiter(this, void 0, void 0, function* () {
16
- const body = yield req.json();
17
- if (body.user && body.user.refresh_token) {
18
- return new Response('sync', {
19
- headers: {
20
- // 7 day expiry
21
- 'Set-Cookie': `instant_user=${JSON.stringify(body.user)}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=604800`,
22
- },
23
- });
24
- }
25
- else {
26
- return new Response('sync', {
27
- headers: {
28
- // remove the cookie (some browsers)
29
- 'Set-Cookie': `instant_user=; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=-1`,
30
- },
31
- });
32
- }
33
- });
34
- }
35
- return {
36
- GET: (_req) => __awaiter(void 0, void 0, void 0, function* () {
37
- return new Response('Method not allowed', {
38
- status: 405,
39
- statusText: 'Method Not Allowed',
40
- });
41
- }),
42
- POST: (req) => __awaiter(void 0, void 0, void 0, function* () {
43
- const url = new URL(req.url);
44
- const pathname = url.pathname;
45
- const route = pathname.split('/')[pathname.split('/').length - 1];
46
- switch (route) {
47
- case 'sync-auth':
48
- return yield handleUserSync(req);
49
- }
50
- return new Response('Route not found', {
51
- status: 404,
52
- });
53
- }),
54
- };
55
- };
56
- exports.createInstantRouteHandler = createInstantRouteHandler;
57
- //# sourceMappingURL=createRouteHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createRouteHandler.js","sourceRoot":"","sources":["../../src/createRouteHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAO,MAAM,yBAAyB,GAAG,CAAC,MAGzC,EAAE,EAAE;IACH,SAAe,cAAc,CAAC,GAAY;;YACxC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACzC,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE;oBAC1B,OAAO,EAAE;wBACP,eAAe;wBACf,YAAY,EAAE,gBAAgB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,6DAA6D;qBACrH;iBACF,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE;oBAC1B,OAAO,EAAE;wBACP,oCAAoC;wBACpC,YAAY,EAAE,sEAAsE;qBACrF;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KAAA;IAED,OAAO;QACL,GAAG,EAAE,CAAO,IAAa,EAAE,EAAE;YAC3B,OAAO,IAAI,QAAQ,CAAC,oBAAoB,EAAE;gBACxC,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,oBAAoB;aACjC,CAAC,CAAC;QACL,CAAC,CAAA;QACD,IAAI,EAAE,CAAO,GAAY,EAAE,EAAE;YAC3B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;YAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAClE,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,WAAW;oBACd,OAAO,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,IAAI,QAAQ,CAAC,iBAAiB,EAAE;gBACrC,MAAM,EAAE,GAAG;aACZ,CAAC,CAAC;QACL,CAAC,CAAA;KACF,CAAC;AACJ,CAAC,CAAC;AA3CW,QAAA,yBAAyB,6BA2CpC","sourcesContent":["export const createInstantRouteHandler = (config: {\n appId: string;\n apiURI?: string;\n}) => {\n async function handleUserSync(req: Request) {\n const body = await req.json();\n if (body.user && body.user.refresh_token) {\n return new Response('sync', {\n headers: {\n // 7 day expiry\n 'Set-Cookie': `instant_user=${JSON.stringify(body.user)}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=604800`,\n },\n });\n } else {\n return new Response('sync', {\n headers: {\n // remove the cookie (some browsers)\n 'Set-Cookie': `instant_user=; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=-1`,\n },\n });\n }\n }\n\n return {\n GET: async (_req: Request) => {\n return new Response('Method not allowed', {\n status: 405,\n statusText: 'Method Not Allowed',\n });\n },\n POST: async (req: Request) => {\n const url = new URL(req.url);\n const pathname = url.pathname;\n const route = pathname.split('/')[pathname.split('/').length - 1];\n switch (route) {\n case 'sync-auth':\n return await handleUserSync(req);\n }\n return new Response('Route not found', {\n status: 404,\n });\n },\n };\n};\n"]}
@@ -1,77 +0,0 @@
1
- import { InstantCoreDatabase, InstantDBAttr } from './index.ts';
2
- import { RuleParams } from './schemaTypes.ts';
3
- export declare const isServer: boolean;
4
- export type FrameworkConfig = {
5
- token?: string | null;
6
- db: InstantCoreDatabase<any, any>;
7
- };
8
- type QueryPromise = {
9
- type: 'http';
10
- triples: any;
11
- attrs: any;
12
- queryHash: any;
13
- query: any;
14
- pageInfo?: any;
15
- } | {
16
- type: 'session';
17
- queryResult: any;
18
- };
19
- export declare class FrameworkClient {
20
- private params;
21
- private db;
22
- resultMap: Map<string, {
23
- status: 'pending' | 'success' | 'error';
24
- type: 'http' | 'session';
25
- promise?: Promise<QueryPromise> | null;
26
- data?: any;
27
- error?: any;
28
- }>;
29
- private queryResolvedCallbacks;
30
- constructor(params: FrameworkConfig);
31
- subscribe: (callback: (result: {
32
- triples: any;
33
- attrs: any;
34
- queryHash: string;
35
- pageInfo?: any;
36
- }) => void) => void;
37
- addQueryResult: (queryKey: string, value: any) => void;
38
- query: (_query: any, opts?: {
39
- ruleParams: RuleParams;
40
- }) => {
41
- type: "http" | "session";
42
- status: "pending" | "success" | "error";
43
- promise?: Promise<QueryPromise>;
44
- data?: any;
45
- error?: any;
46
- };
47
- getExistingResultForQuery: (_query: any, opts?: {
48
- ruleParams: RuleParams;
49
- }) => {
50
- status: "pending" | "success" | "error";
51
- type: "http" | "session";
52
- promise?: Promise<QueryPromise> | null;
53
- data?: any;
54
- error?: any;
55
- } | undefined;
56
- completeIsomorphic: (query: any, triples: any[], attrs: InstantDBAttr[], pageInfo?: any) => {
57
- data: any;
58
- pageInfo?: any;
59
- aggregate?: any;
60
- };
61
- hashQuery: (_query: any, opts?: {
62
- ruleParams: RuleParams;
63
- }) => {
64
- hash: string;
65
- query: any;
66
- };
67
- getTriplesAndAttrsForQuery: (query: any) => Promise<{
68
- triples: any[];
69
- attrs: InstantDBAttr[];
70
- query: any;
71
- queryHash: string;
72
- type: "http";
73
- pageInfo?: any;
74
- }>;
75
- }
76
- export {};
77
- //# sourceMappingURL=framework.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../../src/framework.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,EACnB,aAAa,EAEd,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,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;AAEF,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;IACnC,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;IAEK,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,CA2DC;IAEK,yBAAyB,GAC9B,QAAQ,GAAG,EACX,OAAO;QACL,UAAU,EAAE,UAAU,CAAC;KACxB;gBA7IS,SAAS,GAAG,SAAS,GAAG,OAAO;cACjC,MAAM,GAAG,SAAS;kBACd,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;eAC/B,GAAG;gBACF,GAAG;kBA6Ib;IAEK,kBAAkB,GACvB,OAAO,GAAG,EACV,SAAS,GAAG,EAAE,EACd,OAAO,aAAa,EAAE,EACtB,WAAW,GAAG;;;;MAyBd;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;IAEK,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,CA0CA;CACH"}
@@ -1,199 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
45
- return (mod && mod.__esModule) ? mod : { "default": mod };
46
- };
47
- Object.defineProperty(exports, "__esModule", { value: true });
48
- exports.FrameworkClient = exports.isServer = void 0;
49
- const index_ts_1 = require("./index.js");
50
- const s = __importStar(require("./store.js"));
51
- const instaql_js_1 = __importDefault(require("./instaql.js"));
52
- exports.isServer = typeof window === 'undefined' || 'Deno' in globalThis;
53
- class FrameworkClient {
54
- constructor(params) {
55
- this.resultMap = new Map();
56
- this.queryResolvedCallbacks = [];
57
- this.subscribe = (callback) => {
58
- this.queryResolvedCallbacks.push(callback);
59
- };
60
- // Runs on the client when ssr gets html script tags
61
- this.addQueryResult = (queryKey, value) => {
62
- this.resultMap.set(queryKey, {
63
- type: value.type,
64
- status: 'success',
65
- data: value,
66
- promise: null,
67
- error: null,
68
- });
69
- // send the result to the client
70
- if (!exports.isServer) {
71
- // make sure the attrs are there to create stores
72
- if (!this.db._reactor.attrs) {
73
- this.db._reactor._setAttrs(value.attrs);
74
- }
75
- this.db._reactor._addQueryData(value.query, value, !!this.db._reactor.config.schema);
76
- }
77
- };
78
- this.query = (_query, opts) => {
79
- const { hash, query } = this.hashQuery(_query, opts);
80
- if (this.db._reactor.status === 'authenticated') {
81
- const promise = this.db.queryOnce(_query, opts);
82
- let entry = {
83
- status: 'pending',
84
- type: 'session',
85
- data: undefined,
86
- error: undefined,
87
- promise: promise,
88
- };
89
- promise.then((result) => {
90
- entry.status = 'success';
91
- entry.data = result;
92
- entry.promise = null;
93
- });
94
- promise.catch((error) => {
95
- entry.status = 'error';
96
- entry.error = error;
97
- entry.promise = null;
98
- });
99
- return entry;
100
- }
101
- const promise = this.getTriplesAndAttrsForQuery(query);
102
- let entry = {
103
- status: 'pending',
104
- type: 'http',
105
- data: undefined,
106
- error: undefined,
107
- promise: promise,
108
- };
109
- promise.then((result) => {
110
- entry.status = 'success';
111
- entry.data = result;
112
- entry.promise = null;
113
- });
114
- promise.catch((error) => {
115
- entry.status = 'error';
116
- entry.error = error;
117
- entry.promise = null;
118
- });
119
- promise.then((result) => {
120
- this.queryResolvedCallbacks.forEach((callback) => {
121
- callback({
122
- queryHash: hash,
123
- query: query,
124
- attrs: result.attrs,
125
- triples: result.triples,
126
- pageInfo: result.pageInfo,
127
- });
128
- });
129
- });
130
- this.resultMap.set(hash, entry);
131
- return entry;
132
- };
133
- this.getExistingResultForQuery = (_query, opts) => {
134
- const { hash } = this.hashQuery(_query, opts);
135
- return this.resultMap.get(hash);
136
- };
137
- this.completeIsomorphic = (query, triples, attrs, pageInfo) => {
138
- var _a, _b, _c, _d, _e, _f, _g;
139
- const attrMap = {};
140
- attrs.forEach((attr) => {
141
- attrMap[attr.id] = attr;
142
- });
143
- 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) &&
144
- ('cardinalityInference' in ((_e = (_d = this.db) === null || _d === void 0 ? void 0 : _d._reactor) === null || _e === void 0 ? void 0 : _e.config)
145
- ? Boolean((_g = (_f = this.db) === null || _f === void 0 ? void 0 : _f._reactor.config) === null || _g === void 0 ? void 0 : _g.cardinalityInference)
146
- : true);
147
- const store = s.createStore(attrMap, triples, enableCardinalityInference, null, this.params.db._reactor.config.useDateObjects || false);
148
- const resp = (0, instaql_js_1.default)({ store: store, pageInfo: pageInfo, aggregate: undefined }, query);
149
- return resp;
150
- };
151
- this.hashQuery = (_query, opts) => {
152
- if (_query && opts && 'ruleParams' in opts) {
153
- _query = Object.assign({ $$ruleParams: opts['ruleParams'] }, _query);
154
- }
155
- const query = _query ? (0, index_ts_1.coerceQuery)(_query) : null;
156
- return { hash: (0, index_ts_1.weakHash)(query), query: query };
157
- };
158
- this.getTriplesAndAttrsForQuery = (query) => __awaiter(this, void 0, void 0, function* () {
159
- var _a, _b, _c, _d, _e, _f;
160
- const response = yield fetch(`${this.db._reactor.config.apiURI}/runtime/framework/query`, {
161
- method: 'POST',
162
- headers: {
163
- 'app-id': this.params.db._reactor.config.appId,
164
- 'Content-Type': 'application/json',
165
- Authorization: this.params.token
166
- ? `Bearer ${this.params.token}`
167
- : undefined,
168
- },
169
- body: JSON.stringify({
170
- query: query,
171
- }),
172
- });
173
- if (!response.ok) {
174
- throw new Error('Error getting triples from server');
175
- }
176
- const data = yield response.json();
177
- const attrs = data === null || data === void 0 ? void 0 : data.attrs;
178
- if (!attrs) {
179
- throw new Error('No attrs');
180
- }
181
- // TODO: make safer
182
- 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];
183
- 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'];
184
- return {
185
- attrs,
186
- triples,
187
- type: 'http',
188
- queryHash: this.hashQuery(query).hash,
189
- query,
190
- pageInfo,
191
- };
192
- });
193
- this.params = params;
194
- this.db = params.db;
195
- this.resultMap = new Map();
196
- }
197
- }
198
- exports.FrameworkClient = FrameworkClient;
199
- //# sourceMappingURL=framework.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"framework.js","sourceRoot":"","sources":["../../src/framework.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n coerceQuery,\n InstantCoreDatabase,\n InstantDBAttr,\n weakHash,\n} from './index.ts';\nimport * as s from './store.js';\nimport instaql from './instaql.js';\nimport { RuleParams } from './schemaTypes.ts';\n\nexport const isServer = typeof window === 'undefined' || 'Deno' in globalThis;\n\nexport type FrameworkConfig = {\n token?: string | null;\n db: InstantCoreDatabase<any, any>;\n};\n\ntype QueryPromise =\n | {\n type: 'http';\n triples: any;\n attrs: any;\n queryHash: any;\n query: any;\n pageInfo?: any;\n }\n | {\n type: 'session';\n queryResult: any;\n };\n\nexport class FrameworkClient {\n private params: FrameworkConfig;\n private db: InstantCoreDatabase<any, any>;\n public resultMap: Map<\n string,\n {\n status: 'pending' | 'success' | 'error';\n type: 'http' | 'session';\n promise?: Promise<QueryPromise> | null;\n data?: any;\n error?: any;\n }\n > = new Map();\n\n private queryResolvedCallbacks: ((result: {\n triples: any;\n attrs: any;\n queryHash: any;\n query: any;\n pageInfo?: any;\n }) => void)[] = [];\n\n constructor(params: FrameworkConfig) {\n this.params = params;\n this.db = params.db;\n this.resultMap = new Map<\n string,\n {\n type: 'http' | 'session';\n status: 'pending' | 'success' | 'error';\n promise?: Promise<QueryPromise>;\n data?: any;\n error?: any;\n }\n >();\n }\n\n public subscribe = (\n callback: (result: {\n triples: any;\n attrs: any;\n queryHash: string;\n pageInfo?: any;\n }) => void,\n ) => {\n this.queryResolvedCallbacks.push(callback);\n };\n\n // Runs on the client when ssr gets html script tags\n public addQueryResult = (queryKey: string, value: any) => {\n this.resultMap.set(queryKey, {\n type: value.type,\n status: 'success',\n data: value,\n promise: null,\n error: null,\n });\n // send the result to the client\n if (!isServer) {\n // make sure the attrs are there to create stores\n if (!this.db._reactor.attrs) {\n this.db._reactor._setAttrs(value.attrs);\n }\n this.db._reactor._addQueryData(\n value.query,\n value,\n !!this.db._reactor.config.schema,\n );\n }\n };\n\n public query = (\n _query: any,\n opts?: {\n ruleParams: RuleParams;\n },\n ): {\n type: 'http' | 'session';\n status: 'pending' | 'success' | 'error';\n promise?: Promise<QueryPromise>;\n data?: any;\n error?: any;\n } => {\n const { hash, query } = this.hashQuery(_query, opts);\n\n if (this.db._reactor.status === 'authenticated') {\n const promise = this.db.queryOnce(_query, opts);\n let entry = {\n status: 'pending' as 'pending' | 'success' | 'error',\n type: 'session' as 'http' | 'session',\n data: undefined as any,\n error: undefined as any,\n promise: promise as any,\n };\n promise.then((result) => {\n entry.status = 'success';\n entry.data = result;\n entry.promise = null;\n });\n promise.catch((error) => {\n entry.status = 'error';\n entry.error = error;\n entry.promise = null;\n });\n return entry as any;\n }\n\n const promise = this.getTriplesAndAttrsForQuery(query);\n let entry = {\n status: 'pending' as 'pending' | 'success' | 'error',\n type: 'http' as 'http' | 'session',\n data: undefined as any,\n error: undefined as any,\n promise: promise as any,\n };\n\n promise.then((result) => {\n entry.status = 'success';\n entry.data = result;\n entry.promise = null;\n });\n promise.catch((error) => {\n entry.status = 'error';\n entry.error = error;\n entry.promise = null;\n });\n\n promise.then((result) => {\n this.queryResolvedCallbacks.forEach((callback) => {\n callback({\n queryHash: hash,\n query: query,\n attrs: result.attrs,\n triples: result.triples,\n pageInfo: result.pageInfo,\n });\n });\n });\n\n this.resultMap.set(hash, entry);\n return entry;\n };\n\n public getExistingResultForQuery = (\n _query: any,\n opts?: {\n ruleParams: RuleParams;\n },\n ) => {\n const { hash } = this.hashQuery(_query, opts);\n return this.resultMap.get(hash);\n };\n\n public completeIsomorphic = (\n query: any,\n triples: any[],\n attrs: InstantDBAttr[],\n pageInfo?: any,\n ) => {\n const attrMap = {};\n attrs.forEach((attr) => {\n attrMap[attr.id] = attr;\n });\n\n const enableCardinalityInference =\n Boolean(this.db?._reactor?.config?.schema) &&\n ('cardinalityInference' in this.db?._reactor?.config\n ? Boolean(this.db?._reactor.config?.cardinalityInference)\n : true);\n\n const store = s.createStore(\n attrMap,\n triples,\n enableCardinalityInference,\n null,\n this.params.db._reactor.config.useDateObjects || false,\n );\n const resp = instaql(\n { store: store, pageInfo: pageInfo, aggregate: undefined },\n query,\n );\n return resp;\n };\n\n public hashQuery = (\n _query: any,\n opts?: {\n ruleParams: RuleParams;\n },\n ): { hash: string; query: any } => {\n if (_query && opts && 'ruleParams' in opts) {\n _query = { $$ruleParams: opts['ruleParams'], ..._query };\n }\n const query = _query ? coerceQuery(_query) : null;\n return { hash: weakHash(query), query: query };\n };\n\n public getTriplesAndAttrsForQuery = async (\n query: any,\n ): Promise<{\n triples: any[];\n attrs: InstantDBAttr[];\n query: any;\n queryHash: string;\n type: 'http';\n pageInfo?: any;\n }> => {\n const response = await fetch(\n `${this.db._reactor.config.apiURI}/runtime/framework/query`,\n {\n method: 'POST',\n headers: {\n 'app-id': this.params.db._reactor.config.appId,\n 'Content-Type': 'application/json',\n Authorization: this.params.token\n ? `Bearer ${this.params.token}`\n : undefined,\n } as Record<string, string>,\n body: JSON.stringify({\n query: query,\n }),\n },\n );\n\n if (!response.ok) {\n throw new Error('Error getting triples from server');\n }\n\n const data = await response.json();\n\n const attrs = data?.attrs;\n if (!attrs) {\n throw new Error('No attrs');\n }\n\n // TODO: make safer\n const triples = data.result?.[0].data?.['datalog-result']?.['join-rows'][0];\n\n const pageInfo = data.result?.[0]?.data?.['page-info'];\n\n return {\n attrs,\n triples,\n type: 'http',\n queryHash: this.hashQuery(query).hash,\n query,\n pageInfo,\n };\n };\n}\n"]}
@@ -1,3 +0,0 @@
1
- import { InstantSchemaDef } from './schemaTypes.ts';
2
- export declare const parseSchemaFromJSON: (s: any) => InstantSchemaDef<any, any, any>;
3
- //# sourceMappingURL=parseSchemaFromJSON.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseSchemaFromJSON.d.ts","sourceRoot":"","sources":["../../src/parseSchemaFromJSON.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEjE,eAAO,MAAM,mBAAmB,GAC9B,GAAG,GAAG,KACL,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CA0KhC,CAAC"}
@@ -1,148 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseSchemaFromJSON = void 0;
4
- const schema_ts_1 = require("./schema.js");
5
- const parseSchemaFromJSON = (s) => {
6
- var _a, _b, _c, _d, _e, _f;
7
- // Parse entities
8
- const entities = {};
9
- for (const [entityName, entityInfo] of Object.entries(s.entities)) {
10
- const entityDef = entityInfo;
11
- const attrs = {};
12
- // Parse attributes
13
- for (const [attrName, attrInfo] of Object.entries(entityDef.attrs)) {
14
- const attrDef = attrInfo;
15
- let attr;
16
- // Create the appropriate attribute type
17
- switch (attrDef.valueType) {
18
- case 'string':
19
- attr = schema_ts_1.i.string();
20
- break;
21
- case 'number':
22
- attr = schema_ts_1.i.number();
23
- break;
24
- case 'boolean':
25
- attr = schema_ts_1.i.boolean();
26
- break;
27
- case 'date':
28
- attr = schema_ts_1.i.date();
29
- break;
30
- case 'json':
31
- attr = schema_ts_1.i.json();
32
- break;
33
- default:
34
- attr = schema_ts_1.i.json();
35
- }
36
- // Apply modifiers
37
- if (!attrDef.required) {
38
- attr = attr.optional();
39
- }
40
- if ((_a = attrDef.config) === null || _a === void 0 ? void 0 : _a.indexed) {
41
- attr = attr.indexed();
42
- }
43
- if ((_b = attrDef.config) === null || _b === void 0 ? void 0 : _b.unique) {
44
- attr = attr.unique();
45
- }
46
- attrs[attrName] = attr;
47
- }
48
- entities[entityName] = schema_ts_1.i.entity(attrs);
49
- }
50
- // Parse links
51
- const links = s.links || {};
52
- // Parse rooms
53
- const rooms = {};
54
- if (s.rooms) {
55
- for (const [roomName, roomInfo] of Object.entries(s.rooms)) {
56
- const roomDef = roomInfo;
57
- // Parse presence
58
- const presenceAttrs = {};
59
- for (const [attrName, attrInfo] of Object.entries(roomDef.presence.attrs)) {
60
- const attrDef = attrInfo;
61
- let attr;
62
- switch (attrDef.valueType) {
63
- case 'string':
64
- attr = schema_ts_1.i.string();
65
- break;
66
- case 'number':
67
- attr = schema_ts_1.i.number();
68
- break;
69
- case 'boolean':
70
- attr = schema_ts_1.i.boolean();
71
- break;
72
- case 'date':
73
- attr = schema_ts_1.i.date();
74
- break;
75
- case 'json':
76
- attr = schema_ts_1.i.json();
77
- break;
78
- default:
79
- attr = schema_ts_1.i.json();
80
- }
81
- if (!attrDef.required) {
82
- attr = attr.optional();
83
- }
84
- if ((_c = attrDef.config) === null || _c === void 0 ? void 0 : _c.indexed) {
85
- attr = attr.indexed();
86
- }
87
- if ((_d = attrDef.config) === null || _d === void 0 ? void 0 : _d.unique) {
88
- attr = attr.unique();
89
- }
90
- presenceAttrs[attrName] = attr;
91
- }
92
- // Parse topics
93
- const topics = {};
94
- if (roomDef.topics) {
95
- for (const [topicName, topicInfo] of Object.entries(roomDef.topics)) {
96
- const topicDef = topicInfo;
97
- const topicAttrs = {};
98
- for (const [attrName, attrInfo] of Object.entries(topicDef.attrs)) {
99
- const attrDef = attrInfo;
100
- let attr;
101
- switch (attrDef.valueType) {
102
- case 'string':
103
- attr = schema_ts_1.i.string();
104
- break;
105
- case 'number':
106
- attr = schema_ts_1.i.number();
107
- break;
108
- case 'boolean':
109
- attr = schema_ts_1.i.boolean();
110
- break;
111
- case 'date':
112
- attr = schema_ts_1.i.date();
113
- break;
114
- case 'json':
115
- attr = schema_ts_1.i.json();
116
- break;
117
- default:
118
- attr = schema_ts_1.i.json();
119
- }
120
- if (!attrDef.required) {
121
- attr = attr.optional();
122
- }
123
- if ((_e = attrDef.config) === null || _e === void 0 ? void 0 : _e.indexed) {
124
- attr = attr.indexed();
125
- }
126
- if ((_f = attrDef.config) === null || _f === void 0 ? void 0 : _f.unique) {
127
- attr = attr.unique();
128
- }
129
- topicAttrs[attrName] = attr;
130
- }
131
- topics[topicName] = schema_ts_1.i.entity(topicAttrs);
132
- }
133
- }
134
- rooms[roomName] = {
135
- presence: schema_ts_1.i.entity(presenceAttrs),
136
- topics,
137
- };
138
- }
139
- }
140
- const resultingSchema = schema_ts_1.i.schema({
141
- entities,
142
- links,
143
- rooms,
144
- });
145
- return resultingSchema;
146
- };
147
- exports.parseSchemaFromJSON = parseSchemaFromJSON;
148
- //# sourceMappingURL=parseSchemaFromJSON.js.map