@hyper-fetch/firebase-admin 7.5.3 → 8.0.0
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/.eslintrc.cjs +12 -0
- package/__tests__/features/firestore/admin/constraints.admin.spec.ts +1 -1
- package/__tests__/features/firestore/admin/methods.admin.spec.ts +1 -1
- package/__tests__/features/firestore/admin/sockets.base.spec.ts +1 -1
- package/__tests__/features/firestore/shared/constraints.shared.tests.ts +3 -3
- package/__tests__/features/firestore/shared/methods/add-doc.test.suite.ts +3 -3
- package/__tests__/features/firestore/shared/methods/delete-doc.test.suite.ts +2 -2
- package/__tests__/features/firestore/shared/methods/get-doc.test.suite.ts +2 -2
- package/__tests__/features/firestore/shared/methods/get-docs.test.suite.ts +2 -2
- package/__tests__/features/firestore/shared/methods/on-snapshot.test.suite.ts +9 -9
- package/__tests__/features/firestore/shared/methods/set-doc.test.suite.ts +2 -2
- package/__tests__/features/firestore/shared/methods/update-doc.test.suite.ts +2 -2
- package/__tests__/features/firestore/shared/methods.shared.tests.ts +1 -1
- package/__tests__/features/realtime/admin/methods.admin.spec.ts +1 -1
- package/__tests__/features/realtime/admin/sockets.base.spec.ts +1 -1
- package/__tests__/features/realtime/shared/constraints.shared.tests.ts +3 -5
- package/__tests__/features/realtime/shared/methods/get.test.suite.ts +3 -3
- package/__tests__/features/realtime/shared/methods/on-value.test.suite.ts +9 -9
- package/__tests__/features/realtime/shared/methods/push.test.suite.ts +2 -2
- package/__tests__/features/realtime/shared/methods/remove.test.suite.ts +2 -2
- package/__tests__/features/realtime/shared/methods/set.test.suite.ts +9 -7
- package/__tests__/features/realtime/shared/methods/update.test.suite.ts +2 -2
- package/__tests__/features/realtime/shared/methods.shared.tests.ts +1 -1
- package/__tests__/shared/request-events.shared.ts +10 -10
- package/__tests__/tsconfig.json +15 -2
- package/__tests__/utils/seed.admin.ts +2 -2
- package/__tests__/vitest.setup.ts +9 -0
- package/dist/adapter/adapter.d.ts +3 -0
- package/dist/adapter/adapter.d.ts.map +1 -0
- package/dist/adapter/adapter.sockets.d.ts +3 -0
- package/dist/adapter/adapter.sockets.d.ts.map +1 -0
- package/dist/adapter/index.d.ts +4 -0
- package/dist/adapter/index.d.ts.map +1 -0
- package/dist/adapter/types/adapter.base.types.d.ts +11 -0
- package/dist/adapter/types/adapter.base.types.d.ts.map +1 -0
- package/dist/adapter/types/adapter.firestore.types.d.ts +45 -0
- package/dist/adapter/types/adapter.firestore.types.d.ts.map +1 -0
- package/dist/adapter/types/adapter.realtime.types.d.ts +39 -0
- package/dist/adapter/types/adapter.realtime.types.d.ts.map +1 -0
- package/dist/adapter/types/firestore.socket.types.d.ts +17 -0
- package/dist/adapter/types/firestore.socket.types.d.ts.map +1 -0
- package/dist/adapter/types/index.d.ts +6 -0
- package/dist/adapter/types/index.d.ts.map +1 -0
- package/dist/adapter/types/realtime.socket.types.d.ts +12 -0
- package/dist/adapter/types/realtime.socket.types.d.ts.map +1 -0
- package/dist/constraints/constraints.types.d.ts +13 -0
- package/dist/constraints/constraints.types.d.ts.map +1 -0
- package/dist/constraints/firebase.constraints.d.ts +86 -0
- package/dist/constraints/firebase.constraints.d.ts.map +1 -0
- package/dist/constraints/index.d.ts +3 -0
- package/dist/constraints/index.d.ts.map +1 -0
- package/dist/firestore/firestore.methods.d.ts +21 -0
- package/dist/firestore/firestore.methods.d.ts.map +1 -0
- package/dist/firestore/firestore.sockets.d.ts +4 -0
- package/dist/firestore/firestore.sockets.d.ts.map +1 -0
- package/dist/firestore/index.d.ts +4 -0
- package/dist/firestore/index.d.ts.map +1 -0
- package/dist/firestore/utils/constraints.utils.d.ts +5 -0
- package/dist/firestore/utils/constraints.utils.d.ts.map +1 -0
- package/dist/firestore/utils/index.d.ts +4 -0
- package/dist/firestore/utils/index.d.ts.map +1 -0
- package/dist/firestore/utils/ref.utils.d.ts +3 -0
- package/dist/firestore/utils/ref.utils.d.ts.map +1 -0
- package/dist/firestore/utils/result.utils.d.ts +10 -0
- package/dist/firestore/utils/result.utils.d.ts.map +1 -0
- package/dist/index.d.ts +5 -271
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +670 -0
- package/dist/index.mjs.map +1 -0
- package/dist/realtime/index.d.ts +4 -0
- package/dist/realtime/index.d.ts.map +1 -0
- package/dist/realtime/realtime.methods.d.ts +19 -0
- package/dist/realtime/realtime.methods.d.ts.map +1 -0
- package/dist/realtime/realtime.sockets.d.ts +4 -0
- package/dist/realtime/realtime.sockets.d.ts.map +1 -0
- package/dist/realtime/utils/constraints.utils.d.ts +5 -0
- package/dist/realtime/utils/constraints.utils.d.ts.map +1 -0
- package/dist/realtime/utils/index.d.ts +3 -0
- package/dist/realtime/utils/index.d.ts.map +1 -0
- package/dist/realtime/utils/result.utils.d.ts +3 -0
- package/dist/realtime/utils/result.utils.d.ts.map +1 -0
- package/dist/utils/cache.utils.d.ts +11 -0
- package/dist/utils/cache.utils.d.ts.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/misc.d.ts +3 -0
- package/dist/utils/misc.d.ts.map +1 -0
- package/package.json +8 -11
- package/src/adapter/adapter.sockets.ts +1 -1
- package/src/adapter/adapter.ts +13 -14
- package/src/adapter/types/adapter.base.types.ts +4 -4
- package/src/adapter/types/adapter.firestore.types.ts +4 -4
- package/src/adapter/types/adapter.realtime.types.ts +4 -4
- package/src/adapter/types/firestore.socket.types.ts +3 -3
- package/src/adapter/types/realtime.socket.types.ts +3 -3
- package/src/constraints/constraints.types.ts +1 -1
- package/src/constraints/firebase.constraints.ts +1 -1
- package/src/firestore/firestore.methods.ts +4 -4
- package/src/firestore/firestore.sockets.ts +3 -9
- package/src/firestore/utils/constraints.utils.ts +4 -3
- package/src/firestore/utils/ref.utils.ts +1 -1
- package/src/firestore/utils/result.utils.ts +1 -1
- package/src/realtime/realtime.methods.ts +4 -4
- package/src/realtime/realtime.sockets.ts +2 -2
- package/src/realtime/utils/constraints.utils.ts +3 -2
- package/src/realtime/utils/result.utils.ts +1 -1
- package/src/utils/cache.utils.ts +4 -2
- package/tsconfig.json +1 -1
- package/vite.config.ts +45 -0
- package/.eslintrc.json +0 -11
- package/__tests__/global.d.ts +0 -1
- package/__tests__/jest.setup.ts +0 -8
- package/dist/index.js +0 -686
- package/dist/index.js.map +0 -7
- package/jest.config.ts +0 -9
package/.eslintrc.cjs
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
extends: ["plugin:@nx/react", "../../.eslintrc.js"],
|
|
3
|
+
parserOptions: {
|
|
4
|
+
tsconfigRootDir: __dirname,
|
|
5
|
+
project: ["./tsconfig.json", "./__tests__/tsconfig.json"],
|
|
6
|
+
},
|
|
7
|
+
rules: {
|
|
8
|
+
"react/jsx-props-no-spreading": 0,
|
|
9
|
+
"react/require-default-props": 0,
|
|
10
|
+
},
|
|
11
|
+
ignorePatterns: ["dist/", "coverage/", "vite.config.ts", "/*.js"],
|
|
12
|
+
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Client } from "@hyper-fetch/core";
|
|
1
|
+
import type { Client } from "@hyper-fetch/core";
|
|
2
2
|
|
|
3
|
-
import { FirestoreAdapterType, FirestoreQueryParams } from "adapter";
|
|
3
|
+
import type { FirestoreAdapterType, FirestoreQueryParams } from "adapter";
|
|
4
4
|
import { $limit, $orderBy, $where } from "constraints";
|
|
5
|
-
import { Tea } from "../../../utils";
|
|
5
|
+
import type { Tea } from "../../../utils";
|
|
6
6
|
|
|
7
7
|
export const constraintsSharedTestCases = (client: Client<Error, FirestoreAdapterType>) => {
|
|
8
8
|
describe("filtering", () => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Client } from "@hyper-fetch/core";
|
|
2
2
|
|
|
3
|
-
import { FirebaseAdminAdapter } from "adapter";
|
|
4
|
-
import { Tea } from "../../../../utils";
|
|
3
|
+
import type { FirebaseAdminAdapter } from "adapter";
|
|
4
|
+
import type { Tea } from "../../../../utils";
|
|
5
5
|
|
|
6
6
|
export const addDocTestSuite = (adapterFunction: () => ReturnType<typeof FirebaseAdminAdapter>) => {
|
|
7
7
|
describe("addDoc", () => {
|
|
@@ -21,7 +21,7 @@ export const addDocTestSuite = (adapterFunction: () => ReturnType<typeof Firebas
|
|
|
21
21
|
.setPayload(newData);
|
|
22
22
|
await pushReq.send();
|
|
23
23
|
const { data } = await getReq.send();
|
|
24
|
-
const arrayedData = Object.values(data);
|
|
24
|
+
const arrayedData = Object.values(data!);
|
|
25
25
|
|
|
26
26
|
expect(arrayedData).toHaveLength(11);
|
|
27
27
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Client } from "@hyper-fetch/core";
|
|
2
2
|
|
|
3
|
-
import { FirebaseAdminAdapter } from "adapter";
|
|
4
|
-
import { Tea } from "../../../../utils";
|
|
3
|
+
import type { FirebaseAdminAdapter } from "adapter";
|
|
4
|
+
import type { Tea } from "../../../../utils";
|
|
5
5
|
import { testLifecycleEvents } from "../../../../shared/request-events.shared";
|
|
6
6
|
|
|
7
7
|
export const deleteDocTestSuite = (adapterFunction: () => ReturnType<typeof FirebaseAdminAdapter>) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Client } from "@hyper-fetch/core";
|
|
2
2
|
|
|
3
|
-
import { FirebaseAdminAdapter } from "adapter";
|
|
4
|
-
import { Tea } from "../../../../utils";
|
|
3
|
+
import type { FirebaseAdminAdapter } from "adapter";
|
|
4
|
+
import type { Tea } from "../../../../utils";
|
|
5
5
|
import { testLifecycleEvents } from "../../../../shared/request-events.shared";
|
|
6
6
|
|
|
7
7
|
export const getDocTestSuite = (adapterFunction: () => ReturnType<typeof FirebaseAdminAdapter>) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Client } from "@hyper-fetch/core";
|
|
2
2
|
|
|
3
|
-
import { FirebaseAdminAdapter } from "adapter";
|
|
4
|
-
import { Tea } from "../../../../utils";
|
|
3
|
+
import type { FirebaseAdminAdapter } from "adapter";
|
|
4
|
+
import type { Tea } from "../../../../utils";
|
|
5
5
|
import { testLifecycleEvents } from "../../../../shared/request-events.shared";
|
|
6
6
|
|
|
7
7
|
export const getDocsTestSuite = (adapterFunction: () => ReturnType<typeof FirebaseAdminAdapter>) => {
|
|
@@ -2,20 +2,20 @@ import { Client } from "@hyper-fetch/core";
|
|
|
2
2
|
import { Socket } from "@hyper-fetch/sockets";
|
|
3
3
|
import waitForExpect from "wait-for-expect";
|
|
4
4
|
|
|
5
|
-
import { FirebaseAdminAdapterTypes, FirebaseAdminSocketAdapterTypes } from "adapter";
|
|
5
|
+
import type { FirebaseAdminAdapterTypes, FirebaseAdminSocketAdapterTypes } from "adapter";
|
|
6
6
|
import { $where } from "constraints";
|
|
7
|
-
import { Tea } from "../../../../utils";
|
|
7
|
+
import type { Tea } from "../../../../utils";
|
|
8
8
|
|
|
9
9
|
export const onSnapshotTestSuite = (
|
|
10
10
|
adapter: FirebaseAdminSocketAdapterTypes<any>,
|
|
11
11
|
coreAdapter: FirebaseAdminAdapterTypes<any>,
|
|
12
12
|
) => {
|
|
13
13
|
const newData = { origin: "Poland", type: "Green", year: 2043, name: "Pou Ran Do Cha", amount: 100 } as Tea;
|
|
14
|
-
let spy =
|
|
14
|
+
let spy = vi.fn();
|
|
15
15
|
beforeEach(() => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
spy =
|
|
16
|
+
vi.resetAllMocks();
|
|
17
|
+
vi.clearAllMocks();
|
|
18
|
+
spy = vi.fn();
|
|
19
19
|
});
|
|
20
20
|
const initialize = async () => {
|
|
21
21
|
const client = new Client({ url: "teas/" }).setAdapter(coreAdapter);
|
|
@@ -37,7 +37,7 @@ export const onSnapshotTestSuite = (
|
|
|
37
37
|
topic: "",
|
|
38
38
|
});
|
|
39
39
|
const unmount = onSnapshotReq.listen(spy);
|
|
40
|
-
expect(unmount).
|
|
40
|
+
expect(typeof unmount).toBe("function");
|
|
41
41
|
});
|
|
42
42
|
it("should unmount listeners", async () => {
|
|
43
43
|
const { socket, pushReq } = await initialize();
|
|
@@ -251,7 +251,7 @@ export const onSnapshotTestSuite = (
|
|
|
251
251
|
|
|
252
252
|
await waitForExpect(async () => {
|
|
253
253
|
expect(receivedData).toHaveLength(1);
|
|
254
|
-
expect(receivedData[0]).
|
|
254
|
+
expect(receivedData[0]).toEqual(expect.arrayContaining(initialCache));
|
|
255
255
|
}, 1000);
|
|
256
256
|
|
|
257
257
|
const shouldCacheData = newData as Tea;
|
|
@@ -283,7 +283,7 @@ export const onSnapshotTestSuite = (
|
|
|
283
283
|
|
|
284
284
|
await waitForExpect(async () => {
|
|
285
285
|
expect(receivedData).toHaveLength(2);
|
|
286
|
-
expect(receivedData[1]).
|
|
286
|
+
expect(receivedData[1]).toEqual(expect.arrayContaining([...initialCache, data]));
|
|
287
287
|
});
|
|
288
288
|
});
|
|
289
289
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Client } from "@hyper-fetch/core";
|
|
2
2
|
|
|
3
|
-
import { Tea } from "../../../../utils";
|
|
4
|
-
import { FirebaseAdminAdapter } from "adapter";
|
|
3
|
+
import type { Tea } from "../../../../utils";
|
|
4
|
+
import type { FirebaseAdminAdapter } from "adapter";
|
|
5
5
|
import { testLifecycleEvents } from "../../../../shared/request-events.shared";
|
|
6
6
|
|
|
7
7
|
export const setDocTestSuite = (adapterFunction: () => ReturnType<typeof FirebaseAdminAdapter>) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Client } from "@hyper-fetch/core";
|
|
2
2
|
|
|
3
|
-
import { FirebaseAdminAdapter } from "adapter";
|
|
4
|
-
import { Tea } from "../../../../utils";
|
|
3
|
+
import type { FirebaseAdminAdapter } from "adapter";
|
|
4
|
+
import type { Tea } from "../../../../utils";
|
|
5
5
|
import { testLifecycleEvents } from "../../../../shared/request-events.shared";
|
|
6
6
|
|
|
7
7
|
export const updateDocTestSuite = (adapterFunction: () => ReturnType<typeof FirebaseAdminAdapter>) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FirebaseAdminAdapter, FirebaseAdminAdapterTypes, FirebaseAdminSocketAdapterTypes } from "adapter";
|
|
1
|
+
import type { FirebaseAdminAdapter, FirebaseAdminAdapterTypes, FirebaseAdminSocketAdapterTypes } from "adapter";
|
|
2
2
|
import { addDocTestSuite } from "./methods/add-doc.test.suite";
|
|
3
3
|
import { deleteDocTestSuite } from "./methods/delete-doc.test.suite";
|
|
4
4
|
import { getDocTestSuite } from "./methods/get-doc.test.suite";
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Client } from "@hyper-fetch/core";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import type { FirebaseAdminAdapter } from "../../../../src";
|
|
4
|
+
import { $endAt, $limitToFirst, $orderByChild, $startAt } from "../../../../src";
|
|
5
|
+
import type { Tea } from "../../../utils";
|
|
5
6
|
|
|
6
7
|
export const constraintsSharedTestCases = (adapterFunction: () => ReturnType<typeof FirebaseAdminAdapter>) => {
|
|
7
8
|
describe("Ordering", () => {
|
|
@@ -12,7 +13,6 @@ export const constraintsSharedTestCases = (adapterFunction: () => ReturnType<typ
|
|
|
12
13
|
method: "getDocs",
|
|
13
14
|
});
|
|
14
15
|
const { data } = await req.send({
|
|
15
|
-
// TODO: Fix this
|
|
16
16
|
queryParams: { constraints: [$orderByChild("origin")] },
|
|
17
17
|
});
|
|
18
18
|
expect(data?.map((el) => el.origin)).toStrictEqual([
|
|
@@ -37,7 +37,6 @@ export const constraintsSharedTestCases = (adapterFunction: () => ReturnType<typ
|
|
|
37
37
|
method: "getDocs",
|
|
38
38
|
});
|
|
39
39
|
const { data } = await req.send({
|
|
40
|
-
// TODO: Fix this
|
|
41
40
|
queryParams: { constraints: [$orderByChild("origin"), $limitToFirst(5)] },
|
|
42
41
|
});
|
|
43
42
|
expect(data?.map((tea) => tea.origin)).toStrictEqual(["China", "China", "China", "China", "China"]);
|
|
@@ -49,7 +48,6 @@ export const constraintsSharedTestCases = (adapterFunction: () => ReturnType<typ
|
|
|
49
48
|
method: "getDocs",
|
|
50
49
|
});
|
|
51
50
|
const { data } = await req.send({
|
|
52
|
-
// TODO: Fix this
|
|
53
51
|
queryParams: { constraints: [$orderByChild("year"), $startAt(2021), $endAt(2022)] },
|
|
54
52
|
});
|
|
55
53
|
expect(data).toHaveLength(5);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Client } from "@hyper-fetch/core";
|
|
2
2
|
|
|
3
|
-
import { FirebaseAdminAdapter } from "adapter";
|
|
3
|
+
import type { FirebaseAdminAdapter } from "adapter";
|
|
4
4
|
import { testLifecycleEvents } from "../../../../shared/request-events.shared";
|
|
5
|
-
import { Tea } from "../../../../utils";
|
|
5
|
+
import type { Tea } from "../../../../utils";
|
|
6
6
|
|
|
7
7
|
export const getTestSuite = (adapterFunction: () => ReturnType<typeof FirebaseAdminAdapter>) => {
|
|
8
8
|
describe("get", () => {
|
|
@@ -20,7 +20,7 @@ export const getTestSuite = (adapterFunction: () => ReturnType<typeof FirebaseAd
|
|
|
20
20
|
});
|
|
21
21
|
const { data, extra, status, success, error } = await req.send();
|
|
22
22
|
expect(data).toHaveLength(10);
|
|
23
|
-
expect(data[0]).toHaveProperty("__key");
|
|
23
|
+
expect(data![0]).toHaveProperty("__key");
|
|
24
24
|
expect(extra).toHaveProperty("snapshot");
|
|
25
25
|
expect(extra).toHaveProperty("ref");
|
|
26
26
|
expect(status).toBe("success");
|
|
@@ -3,8 +3,8 @@ import { Socket } from "@hyper-fetch/sockets";
|
|
|
3
3
|
import { Client } from "@hyper-fetch/core";
|
|
4
4
|
import waitForExpect from "wait-for-expect";
|
|
5
5
|
|
|
6
|
-
import { FirebaseAdminAdapterTypes, FirebaseAdminSocketAdapterTypes } from "adapter";
|
|
7
|
-
import { Tea } from "../../../../utils";
|
|
6
|
+
import type { FirebaseAdminAdapterTypes, FirebaseAdminSocketAdapterTypes } from "adapter";
|
|
7
|
+
import type { Tea } from "../../../../utils";
|
|
8
8
|
|
|
9
9
|
export const onValueTestSuite = (
|
|
10
10
|
db: Promise<any>,
|
|
@@ -16,7 +16,7 @@ export const onValueTestSuite = (
|
|
|
16
16
|
let initializedSocketsAdapter: any;
|
|
17
17
|
let initializedCoreAdapter: any;
|
|
18
18
|
let initializedDb: any;
|
|
19
|
-
let spy =
|
|
19
|
+
let spy = vi.fn();
|
|
20
20
|
const newData = { origin: "Poland", type: "Green", year: 2043, name: "Pou Ran Do Cha", amount: 100 } as Tea;
|
|
21
21
|
|
|
22
22
|
beforeAll(async () => {
|
|
@@ -44,9 +44,9 @@ export const onValueTestSuite = (
|
|
|
44
44
|
};
|
|
45
45
|
|
|
46
46
|
beforeEach(() => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
spy =
|
|
47
|
+
vi.resetAllMocks();
|
|
48
|
+
vi.clearAllMocks();
|
|
49
|
+
spy = vi.fn();
|
|
50
50
|
});
|
|
51
51
|
|
|
52
52
|
it("should return unmount function", async () => {
|
|
@@ -55,7 +55,7 @@ export const onValueTestSuite = (
|
|
|
55
55
|
topic: "",
|
|
56
56
|
});
|
|
57
57
|
const unmount = onValueReq.listen(spy);
|
|
58
|
-
expect(unmount).
|
|
58
|
+
expect(typeof unmount).toBe("function");
|
|
59
59
|
});
|
|
60
60
|
|
|
61
61
|
it("should unmount listeners", async () => {
|
|
@@ -132,7 +132,7 @@ export const onValueTestSuite = (
|
|
|
132
132
|
options: { onlyOnce: false },
|
|
133
133
|
});
|
|
134
134
|
|
|
135
|
-
let receivedData:
|
|
135
|
+
let receivedData: Tea[] | null;
|
|
136
136
|
let receivedExtra: any;
|
|
137
137
|
|
|
138
138
|
const unmount = onValueReq.listen(({ data, extra }) => {
|
|
@@ -144,7 +144,7 @@ export const onValueTestSuite = (
|
|
|
144
144
|
const { data } = await pushReq.send();
|
|
145
145
|
|
|
146
146
|
await waitForExpect(async () => {
|
|
147
|
-
expect(receivedData).
|
|
147
|
+
expect(receivedData).toEqual(expect.arrayContaining([{ ...newData, __key: data?.__key }]));
|
|
148
148
|
expect(receivedExtra).toHaveProperty("snapshot");
|
|
149
149
|
expect(receivedExtra).toHaveProperty("status");
|
|
150
150
|
expect(receivedExtra).toHaveProperty("ref");
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Client } from "@hyper-fetch/core";
|
|
2
2
|
|
|
3
|
-
import { FirebaseAdminAdapter } from "adapter";
|
|
3
|
+
import type { FirebaseAdminAdapter } from "adapter";
|
|
4
4
|
import { testLifecycleEvents } from "../../../../shared/request-events.shared";
|
|
5
|
-
import { Tea } from "../../../../utils";
|
|
5
|
+
import type { Tea } from "../../../../utils";
|
|
6
6
|
|
|
7
7
|
export const pushTestSuite = (adapterFunction: () => ReturnType<typeof FirebaseAdminAdapter>) => {
|
|
8
8
|
describe("push", () => {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Client } from "@hyper-fetch/core";
|
|
2
2
|
|
|
3
|
-
import { FirebaseAdminAdapter } from "adapter";
|
|
3
|
+
import type { FirebaseAdminAdapter } from "adapter";
|
|
4
4
|
import { testLifecycleEvents } from "../../../../shared/request-events.shared";
|
|
5
|
-
import { Tea } from "../../../../utils";
|
|
5
|
+
import type { Tea } from "../../../../utils";
|
|
6
6
|
|
|
7
7
|
export const removeTestSuite = (adapterFunction: () => ReturnType<typeof FirebaseAdminAdapter>) => {
|
|
8
8
|
let client = new Client({ url: "teas/" }).setAdapter(adapterFunction());
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Client } from "@hyper-fetch/core";
|
|
2
2
|
|
|
3
|
-
import { FirebaseAdminAdapter } from "adapter";
|
|
3
|
+
import type { FirebaseAdminAdapter, RealtimeDbGetMethodExtra } from "adapter";
|
|
4
4
|
import { testLifecycleEvents } from "../../../../shared/request-events.shared";
|
|
5
|
-
import { Tea } from "../../../../utils";
|
|
5
|
+
import type { Tea } from "../../../../utils";
|
|
6
6
|
|
|
7
7
|
export const setTestSuite = (adapterFunction: () => ReturnType<typeof FirebaseAdminAdapter>) => {
|
|
8
8
|
describe("set", () => {
|
|
@@ -30,18 +30,19 @@ export const setTestSuite = (adapterFunction: () => ReturnType<typeof FirebaseAd
|
|
|
30
30
|
await setReq.send();
|
|
31
31
|
const { data, extra } = await getReq.send();
|
|
32
32
|
expect(data).toStrictEqual(newData);
|
|
33
|
-
expect(extra.
|
|
33
|
+
expect(extra).not.toBeNull();
|
|
34
|
+
expect((extra as RealtimeDbGetMethodExtra).snapshot.exists()).toBe(true);
|
|
34
35
|
});
|
|
35
36
|
it("should allow for removing data via set", async () => {
|
|
36
37
|
const getReq = client
|
|
37
|
-
.createRequest<{ response: Tea }>()({
|
|
38
|
+
.createRequest<{ response: Tea | null }>()({
|
|
38
39
|
endpoint: ":teaId",
|
|
39
40
|
method: "get",
|
|
40
41
|
})
|
|
41
42
|
.setParams({ teaId: 1 });
|
|
42
43
|
|
|
43
44
|
const setReq = client
|
|
44
|
-
.createRequest<Tea
|
|
45
|
+
.createRequest<{ response: Tea | null; payload: { data: null } }>()({
|
|
45
46
|
endpoint: ":teaId",
|
|
46
47
|
method: "set",
|
|
47
48
|
})
|
|
@@ -51,11 +52,12 @@ export const setTestSuite = (adapterFunction: () => ReturnType<typeof FirebaseAd
|
|
|
51
52
|
await setReq.send();
|
|
52
53
|
const { data, extra } = await getReq.send();
|
|
53
54
|
expect(data).toBe(null);
|
|
54
|
-
expect(extra.
|
|
55
|
+
expect(extra).not.toBeNull();
|
|
56
|
+
expect((extra as RealtimeDbGetMethodExtra).snapshot.exists()).toBe(false);
|
|
55
57
|
});
|
|
56
58
|
it("should emit lifecycle events", async () => {
|
|
57
59
|
const setReq = client
|
|
58
|
-
.createRequest<Tea
|
|
60
|
+
.createRequest<{ response: Tea | null; payload: { data: null } }>()({
|
|
59
61
|
endpoint: ":teaId",
|
|
60
62
|
method: "set",
|
|
61
63
|
})
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Client } from "@hyper-fetch/core";
|
|
2
2
|
|
|
3
|
-
import { FirebaseAdminAdapter } from "adapter";
|
|
3
|
+
import type { FirebaseAdminAdapter } from "adapter";
|
|
4
4
|
import { testLifecycleEvents } from "../../../../shared/request-events.shared";
|
|
5
|
-
import { Tea } from "../../../../utils/seed/seed.data";
|
|
5
|
+
import type { Tea } from "../../../../utils/seed/seed.data";
|
|
6
6
|
|
|
7
7
|
export const updateTestSuite = (adapterFunction: () => ReturnType<typeof FirebaseAdminAdapter>) => {
|
|
8
8
|
describe("update", () => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable max-params */
|
|
2
|
-
import { FirebaseAdminAdapter, FirebaseAdminAdapterTypes, FirebaseAdminSocketAdapterTypes } from "adapter";
|
|
2
|
+
import type { FirebaseAdminAdapter, FirebaseAdminAdapterTypes, FirebaseAdminSocketAdapterTypes } from "adapter";
|
|
3
3
|
import { getTestSuite } from "./methods/get.test.suite";
|
|
4
4
|
import { setTestSuite } from "./methods/set.test.suite";
|
|
5
5
|
import { pushTestSuite } from "./methods/push.test.suite";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { RequestInstance } from "@hyper-fetch/core";
|
|
1
|
+
import type { RequestInstance } from "@hyper-fetch/core";
|
|
2
2
|
|
|
3
3
|
export const testLifecycleEvents = async <R extends RequestInstance>(request: R) => {
|
|
4
|
-
const spy1 =
|
|
5
|
-
const spy2 =
|
|
6
|
-
// const spy3 =
|
|
7
|
-
// const spy4 =
|
|
8
|
-
const spy5 =
|
|
9
|
-
const spy6 =
|
|
4
|
+
const spy1 = vi.fn();
|
|
5
|
+
const spy2 = vi.fn();
|
|
6
|
+
// const spy3 = vi.fn();
|
|
7
|
+
// const spy4 = vi.fn();
|
|
8
|
+
const spy5 = vi.fn();
|
|
9
|
+
const spy6 = vi.fn();
|
|
10
10
|
|
|
11
11
|
request.client.requestManager.events.onRequestStartByQueue(request.queryKey, spy1);
|
|
12
12
|
request.client.requestManager.events.onResponseStartByQueue(request.queryKey, spy2);
|
|
@@ -14,11 +14,11 @@ export const testLifecycleEvents = async <R extends RequestInstance>(request: R)
|
|
|
14
14
|
// request.client.requestManager.events.onDownloadProgressByQueue(request.queryKey, spy4);
|
|
15
15
|
request.client.requestManager.events.onResponseByCache(request.cacheKey, spy5);
|
|
16
16
|
|
|
17
|
-
const response = request.send({
|
|
18
|
-
onBeforeSent: (requestId) => {
|
|
17
|
+
const response = (request as unknown as RequestInstance).send({
|
|
18
|
+
onBeforeSent: ({ requestId }) => {
|
|
19
19
|
request.client.requestManager.events.onResponseById(requestId, spy6);
|
|
20
20
|
},
|
|
21
|
-
}
|
|
21
|
+
});
|
|
22
22
|
|
|
23
23
|
// eslint-disable-next-line no-promise-executor-return
|
|
24
24
|
await new Promise((resolve) => setTimeout(resolve, 50));
|
package/__tests__/tsconfig.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
|
+
"target": "esnext",
|
|
4
|
+
"module": "esnext",
|
|
5
|
+
"moduleResolution": "bundler",
|
|
6
|
+
"lib": ["dom", "dom.iterable", "ESNext"],
|
|
3
7
|
"strict": true,
|
|
4
8
|
"noEmit": true,
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
"esModuleInterop": true,
|
|
11
|
+
"allowSyntheticDefaultImports": true,
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"noUnusedLocals": false,
|
|
15
|
+
"noUnusedParameters": false,
|
|
16
|
+
"types": ["vitest/globals", "@types/node"],
|
|
5
17
|
"baseUrl": "../src",
|
|
6
|
-
"
|
|
7
|
-
}
|
|
18
|
+
"paths": {}
|
|
19
|
+
},
|
|
20
|
+
"include": ["**/*.ts", "**/*.tsx", "../../../global.d.ts", "../../../vitest.d.ts"]
|
|
8
21
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Firestore } from "firebase-admin/firestore";
|
|
2
|
-
import { Database } from "firebase-admin/database";
|
|
1
|
+
import type { Firestore } from "firebase-admin/firestore";
|
|
2
|
+
import type { Database } from "firebase-admin/database";
|
|
3
3
|
|
|
4
4
|
import { teas } from "./seed/seed.data";
|
|
5
5
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="vitest/globals" />
|
|
2
|
+
import { setImmediate } from "timers";
|
|
3
|
+
import { AbortController } from "abortcontroller-polyfill/dist/cjs-ponyfill";
|
|
4
|
+
|
|
5
|
+
globalThis.setImmediate = setImmediate;
|
|
6
|
+
|
|
7
|
+
if (!globalThis.AbortController) {
|
|
8
|
+
globalThis.AbortController = AbortController as any;
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/adapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,oBAAoB,EACpB,yBAAyB,EAG1B,MAAM,SAAS,CAAC;AAKjB,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,oBAAoB,EAAE,UAAU,CAAC,KAAG,yBAAyB,CAAC,CAAC,CAuD7G,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.sockets.d.ts","sourceRoot":"","sources":["../../src/adapter/adapter.sockets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AAIrF,eAAO,MAAM,2BAA2B,GAAI,CAAC,SAAS,oBAAoB,EACxE,UAAU,CAAC,KACV,+BAA+B,CAAC,CAAC,CAKnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Database } from 'firebase-admin/database';
|
|
2
|
+
import { Firestore } from 'firebase-admin/firestore';
|
|
3
|
+
import { Adapter, Request, Client } from '@hyper-fetch/core';
|
|
4
|
+
import { RealtimeDbAdapterType, FirestoreAdapterType, FirestoreAdminSocketAdapterType, RealtimeAdminSocketAdapterType, FirestoreQueryParams, FirestoreMethodsUnion, RealtimeDBMethodsUnion, RealtimeDBQueryParams } from './index';
|
|
5
|
+
export type FirebaseAdminDBTypes = Database | Firestore;
|
|
6
|
+
export type FirebaseAdminAdapterTypes<T> = T extends Database ? RealtimeDbAdapterType : FirestoreAdapterType;
|
|
7
|
+
export type FirebaseAdminSocketAdapterTypes<T> = T extends Firestore ? FirestoreAdminSocketAdapterType : RealtimeAdminSocketAdapterType;
|
|
8
|
+
export type RealtimeDBRequestType = Request<any, any, RealtimeDBQueryParams, any, any, Client<any, Adapter<any, RealtimeDBMethodsUnion, any, any, any, any>>, any, any, any>;
|
|
9
|
+
export type FirestoreRequestType = Request<any, any, FirestoreQueryParams, any, any, Client<any, Adapter<any, FirestoreMethodsUnion, any, any, any, any>>, any, any, any>;
|
|
10
|
+
export type RequestType<T> = T extends Firestore ? FirestoreRequestType : RealtimeDBRequestType;
|
|
11
|
+
//# sourceMappingURL=adapter.base.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.base.types.d.ts","sourceRoot":"","sources":["../../../src/adapter/types/adapter.base.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,+BAA+B,EAC/B,8BAA8B,EAC9B,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,SAAS,CAAC;AACxD,MAAM,MAAM,yBAAyB,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,GAAG,qBAAqB,GAAG,oBAAoB,CAAC;AAC7G,MAAM,MAAM,+BAA+B,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAChE,+BAA+B,GAC/B,8BAA8B,CAAC;AAEnC,MAAM,MAAM,qBAAqB,GAAG,OAAO,CACzC,GAAG,EACH,GAAG,EACH,qBAAqB,EACrB,GAAG,EACH,GAAG,EACH,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,sBAAsB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EACrE,GAAG,EACH,GAAG,EACH,GAAG,CACJ,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,OAAO,CACxC,GAAG,EACH,GAAG,EACH,oBAAoB,EACpB,GAAG,EACH,GAAG,EACH,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,qBAAqB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EACpE,GAAG,EACH,GAAG,EACH,GAAG,CACJ,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,oBAAoB,GAAG,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Adapter } from '@hyper-fetch/core';
|
|
2
|
+
import { Unsubscribe as FirestoreUnsubscribe, CollectionReference, DocumentReference, DocumentSnapshot, QuerySnapshot } from 'firebase/firestore';
|
|
3
|
+
import { SocketAdapter } from '@hyper-fetch/sockets';
|
|
4
|
+
import { FirestoreConstraintsUnion, FirestorePermittedMethods, PermittedConstraints, SharedQueryConstraints } from '../../constraints';
|
|
5
|
+
export type FirestoreSocketAdapterType = SocketAdapter<never, FirestoreOnSnapshotExtra, {
|
|
6
|
+
groupByChangeType?: boolean;
|
|
7
|
+
} & FirestoreQueryParams>;
|
|
8
|
+
export type FirestoreAdapterType = Adapter<Record<string, never>, "getDoc", FirestoreStatuses, FirestoreExtra, FirestoreQueryParams, FirestoreQueryParams> | Adapter<Record<string, never>, "getDocs", FirestoreStatuses, FirestoreGetDocsExtra, FirestoreQueryParams, FirestoreQueryParams> | Adapter<{
|
|
9
|
+
merge: boolean;
|
|
10
|
+
}, "setDoc", FirestoreStatuses, FirestoreRefOnlyExtra, Record<string, never>, undefined> | Adapter<Record<string, never>, "updateDoc" | "addDoc" | "deleteDoc" | "setDoc", FirestoreStatuses, FirestoreRefOnlyExtra, Record<string, never>, undefined>;
|
|
11
|
+
export type FirestoreQueryParams = {
|
|
12
|
+
constraints?: PermittedConstraints<FirestorePermittedMethods, FirestoreConstraintsUnion | SharedQueryConstraints>[];
|
|
13
|
+
};
|
|
14
|
+
export declare enum FirestoreMethods {
|
|
15
|
+
addDoc = "addDoc",
|
|
16
|
+
getDoc = "getDoc",
|
|
17
|
+
getDocs = "getDocs",
|
|
18
|
+
setDoc = "setDoc",
|
|
19
|
+
updateDoc = "updateDoc",
|
|
20
|
+
deleteDoc = "deleteDoc"
|
|
21
|
+
}
|
|
22
|
+
export type FirestoreMethodsUnion = FirestoreMethods.addDoc | FirestoreMethods.getDoc | FirestoreMethods.getDocs | FirestoreMethods.setDoc | FirestoreMethods.updateDoc | FirestoreMethods.deleteDoc;
|
|
23
|
+
export type FirestoreExtra = {
|
|
24
|
+
ref?: DocumentReference;
|
|
25
|
+
snapshot?: DocumentSnapshot;
|
|
26
|
+
};
|
|
27
|
+
export type FirestoreOnSnapshotExtra = {
|
|
28
|
+
ref?: DocumentReference | CollectionReference;
|
|
29
|
+
snapshot?: DocumentSnapshot;
|
|
30
|
+
unsubscribe?: FirestoreUnsubscribe;
|
|
31
|
+
groupedResult?: {
|
|
32
|
+
added: DocumentSnapshot[];
|
|
33
|
+
modified: DocumentSnapshot[];
|
|
34
|
+
removed: DocumentSnapshot[];
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
export type FirestoreGetDocsExtra = {
|
|
38
|
+
ref?: CollectionReference;
|
|
39
|
+
snapshot?: QuerySnapshot;
|
|
40
|
+
};
|
|
41
|
+
export type FirestoreRefOnlyExtra = {
|
|
42
|
+
ref?: DocumentReference;
|
|
43
|
+
};
|
|
44
|
+
export type FirestoreStatuses = "success" | "error" | "emptyResource";
|
|
45
|
+
//# sourceMappingURL=adapter.firestore.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.firestore.types.d.ts","sourceRoot":"","sources":["../../../src/adapter/types/adapter.firestore.types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EACV,WAAW,IAAI,oBAAoB,EACnC,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EACV,yBAAyB,EACzB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,0BAA0B,GAAG,aAAa,CACpD,KAAK,EACL,wBAAwB,EACxB;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,oBAAoB,CACvD,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B,OAAO,CACL,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrB,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,oBAAoB,CACrB,GACD,OAAO,CACL,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrB,SAAS,EACT,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,CACrB,GACD,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,GACjH,OAAO,CACL,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrB,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,EAC/C,iBAAiB,EACjB,qBAAqB,EACrB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrB,SAAS,CACV,CAAC;AAEN,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,CAAC,EAAE,oBAAoB,CAAC,yBAAyB,EAAE,yBAAyB,GAAG,sBAAsB,CAAC,EAAE,CAAC;CACrH,CAAC;AAEF,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB,SAAS,cAAc;CACxB;AAED,MAAM,MAAM,qBAAqB,GAC7B,gBAAgB,CAAC,MAAM,GACvB,gBAAgB,CAAC,MAAM,GACvB,gBAAgB,CAAC,OAAO,GACxB,gBAAgB,CAAC,MAAM,GACvB,gBAAgB,CAAC,SAAS,GAC1B,gBAAgB,CAAC,SAAS,CAAC;AAE/B,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,CAAC,EAAE,iBAAiB,GAAG,mBAAmB,CAAC;IAC9C,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,aAAa,CAAC,EAAE;QAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;QAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAAC,OAAO,EAAE,gBAAgB,EAAE,CAAA;KAAE,CAAC;CAC1G,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,CAAC,EAAE,iBAAiB,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC"}
|