@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.
- package/__tests__/src/Reactor.test.js +18 -11
- package/__tests__/src/{datalog.test.js → datalog.test.ts} +17 -5
- package/__tests__/src/{instaml.test.js → instaml.test.ts} +183 -119
- package/__tests__/src/instaql.bench.ts +34 -0
- package/__tests__/src/{instaql.test.js → instaql.test.ts} +342 -455
- package/__tests__/src/instaqlInference.test.js +13 -9
- package/__tests__/src/{store.test.js → store.test.ts} +215 -212
- package/dist/commonjs/Reactor.d.ts +24 -19
- package/dist/commonjs/Reactor.d.ts.map +1 -1
- package/dist/commonjs/Reactor.js +112 -106
- package/dist/commonjs/Reactor.js.map +1 -1
- package/dist/commonjs/SyncTable.d.ts +4 -1
- package/dist/commonjs/SyncTable.d.ts.map +1 -1
- package/dist/commonjs/SyncTable.js +35 -37
- package/dist/commonjs/SyncTable.js.map +1 -1
- package/dist/commonjs/index.d.ts +1 -5
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +1 -7
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/instaml.d.ts +17 -4
- package/dist/commonjs/instaml.d.ts.map +1 -1
- package/dist/commonjs/instaml.js +115 -82
- package/dist/commonjs/instaml.js.map +1 -1
- package/dist/commonjs/instaql.d.ts +4 -3
- package/dist/commonjs/instaql.d.ts.map +1 -1
- package/dist/commonjs/instaql.js +65 -63
- package/dist/commonjs/instaql.js.map +1 -1
- package/dist/commonjs/reactorTypes.d.ts +29 -0
- package/dist/commonjs/reactorTypes.d.ts.map +1 -0
- package/dist/commonjs/reactorTypes.js +3 -0
- package/dist/commonjs/reactorTypes.js.map +1 -0
- package/dist/commonjs/store.d.ts +67 -25
- package/dist/commonjs/store.d.ts.map +1 -1
- package/dist/commonjs/store.js +177 -81
- package/dist/commonjs/store.js.map +1 -1
- package/dist/esm/Reactor.d.ts +24 -19
- package/dist/esm/Reactor.d.ts.map +1 -1
- package/dist/esm/Reactor.js +113 -107
- package/dist/esm/Reactor.js.map +1 -1
- package/dist/esm/SyncTable.d.ts +4 -1
- package/dist/esm/SyncTable.d.ts.map +1 -1
- package/dist/esm/SyncTable.js +35 -37
- package/dist/esm/SyncTable.js.map +1 -1
- package/dist/esm/index.d.ts +1 -5
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/instaml.d.ts +17 -4
- package/dist/esm/instaml.d.ts.map +1 -1
- package/dist/esm/instaml.js +112 -77
- package/dist/esm/instaml.js.map +1 -1
- package/dist/esm/instaql.d.ts +4 -3
- package/dist/esm/instaql.d.ts.map +1 -1
- package/dist/esm/instaql.js +65 -63
- package/dist/esm/instaql.js.map +1 -1
- package/dist/esm/reactorTypes.d.ts +29 -0
- package/dist/esm/reactorTypes.d.ts.map +1 -0
- package/dist/esm/reactorTypes.js +2 -0
- package/dist/esm/reactorTypes.js.map +1 -0
- package/dist/esm/store.d.ts +67 -25
- package/dist/esm/store.d.ts.map +1 -1
- package/dist/esm/store.js +174 -81
- package/dist/esm/store.js.map +1 -1
- package/dist/standalone/index.js +1851 -1961
- package/dist/standalone/index.umd.cjs +3 -3
- package/package.json +2 -2
- package/src/Reactor.js +155 -143
- package/src/SyncTable.ts +85 -45
- package/src/index.ts +0 -9
- package/src/{instaml.js → instaml.ts} +201 -96
- package/src/instaql.ts +88 -62
- package/src/reactorTypes.ts +32 -0
- package/src/store.ts +257 -101
- package/__tests__/src/instaql.bench.js +0 -29
- package/__tests__/src/serializeSchema.test.ts +0 -123
- package/dist/commonjs/createRouteHandler.d.ts +0 -8
- package/dist/commonjs/createRouteHandler.d.ts.map +0 -1
- package/dist/commonjs/createRouteHandler.js +0 -57
- package/dist/commonjs/createRouteHandler.js.map +0 -1
- package/dist/commonjs/framework.d.ts +0 -77
- package/dist/commonjs/framework.d.ts.map +0 -1
- package/dist/commonjs/framework.js +0 -199
- package/dist/commonjs/framework.js.map +0 -1
- package/dist/commonjs/parseSchemaFromJSON.d.ts +0 -3
- package/dist/commonjs/parseSchemaFromJSON.d.ts.map +0 -1
- package/dist/commonjs/parseSchemaFromJSON.js +0 -148
- package/dist/commonjs/parseSchemaFromJSON.js.map +0 -1
- package/dist/esm/createRouteHandler.d.ts +0 -8
- package/dist/esm/createRouteHandler.d.ts.map +0 -1
- package/dist/esm/createRouteHandler.js +0 -53
- package/dist/esm/createRouteHandler.js.map +0 -1
- package/dist/esm/framework.d.ts +0 -77
- package/dist/esm/framework.d.ts.map +0 -1
- package/dist/esm/framework.js +0 -159
- package/dist/esm/framework.js.map +0 -1
- package/dist/esm/parseSchemaFromJSON.d.ts +0 -3
- package/dist/esm/parseSchemaFromJSON.d.ts.map +0 -1
- package/dist/esm/parseSchemaFromJSON.js +0 -144
- package/dist/esm/parseSchemaFromJSON.js.map +0 -1
- package/src/createRouteHandler.ts +0 -44
- package/src/framework.ts +0 -281
- 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 +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 +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
|