@fireproof/core 0.19.112-dev-iife → 0.19.112-dev-usefp
Sign up to get free protection for your applications and to get access to all the features.
- package/{chunk-OKACCIGZ.js → chunk-PWEDYV5H.js} +14 -4
- package/chunk-PWEDYV5H.js.map +1 -0
- package/{gateway-HUSQCAA7.js → gateway-72EUHYEL.js} +2 -2
- package/{gateway-3YJXDXD3.js → gateway-G4CPXEQF.js} +10 -3
- package/gateway-G4CPXEQF.js.map +1 -0
- package/index.cjs +62 -28
- package/index.cjs.map +1 -1
- package/index.d.cts +4 -1
- package/index.d.ts +4 -1
- package/index.global.js +72 -38
- package/index.global.js.map +1 -1
- package/index.js +28 -21
- package/index.js.map +1 -1
- package/{key-bag-file-QCOF7UFH.js → key-bag-file-VP6Y7N26.js} +2 -2
- package/{key-bag-indexdb-VHX3MZ66.js → key-bag-indexdb-VOVNNCXQ.js} +2 -2
- package/key-bag-indexdb-VOVNNCXQ.js.map +1 -0
- package/metafile-cjs.json +1 -1
- package/metafile-esm.json +1 -1
- package/metafile-iife.json +1 -1
- package/package.json +10 -2
- package/react/index.cjs +166 -0
- package/react/index.cjs.map +1 -0
- package/react/index.d.cts +89 -0
- package/react/index.d.ts +89 -0
- package/react/index.js +143 -0
- package/react/index.js.map +1 -0
- package/react/metafile-cjs.json +1 -0
- package/react/metafile-esm.json +1 -0
- package/{utils-GYG2FMCZ.js → utils-WS4AZWA7.js} +2 -2
- package/chunk-OKACCIGZ.js.map +0 -1
- package/gateway-3YJXDXD3.js.map +0 -1
- package/key-bag-indexdb-VHX3MZ66.js.map +0 -1
- /package/{gateway-HUSQCAA7.js.map → gateway-72EUHYEL.js.map} +0 -0
- /package/{key-bag-file-QCOF7UFH.js.map → key-bag-file-VP6Y7N26.js.map} +0 -0
- /package/{utils-GYG2FMCZ.js.map → utils-WS4AZWA7.js.map} +0 -0
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@fireproof/core",
|
3
|
-
"version": "0.19.112-dev-
|
3
|
+
"version": "0.19.112-dev-usefp",
|
4
4
|
"description": "Live database for the web.",
|
5
5
|
"type": "module",
|
6
6
|
"module": "./index.js",
|
@@ -25,6 +25,12 @@
|
|
25
25
|
"require": "./web/index.cjs",
|
26
26
|
"script": "./web/index.global.js",
|
27
27
|
"types": "./web/index.d.ts"
|
28
|
+
},
|
29
|
+
"./react": {
|
30
|
+
"import": "./react/index.js",
|
31
|
+
"require": "./react/index.cjs",
|
32
|
+
"script": "./react/index.global.js",
|
33
|
+
"types": "./react/index.d.ts"
|
28
34
|
}
|
29
35
|
},
|
30
36
|
"keywords": [
|
@@ -54,7 +60,9 @@
|
|
54
60
|
"url": "https://github.com/fireproof-storage/fireproof/issues"
|
55
61
|
},
|
56
62
|
"devDependencies": {},
|
57
|
-
"peerDependencies": {
|
63
|
+
"peerDependencies": {
|
64
|
+
"react": "^18.3.1"
|
65
|
+
},
|
58
66
|
"dependencies": {
|
59
67
|
"@adviser/cement": "^0.2.36",
|
60
68
|
"multiformats": "^13.3.0",
|
package/react/index.cjs
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __defProp = Object.defineProperty;
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
6
|
+
var __export = (target, all) => {
|
7
|
+
for (var name in all)
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
9
|
+
};
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
12
|
+
for (let key of __getOwnPropNames(from))
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
15
|
+
}
|
16
|
+
return to;
|
17
|
+
};
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
19
|
+
|
20
|
+
// src/react/index.ts
|
21
|
+
var react_exports = {};
|
22
|
+
__export(react_exports, {
|
23
|
+
FireproofCtx: () => FireproofCtx,
|
24
|
+
useAllDocs: () => useAllDocs,
|
25
|
+
useChanges: () => useChanges,
|
26
|
+
useDocument: () => useDocument,
|
27
|
+
useFireproof: () => useFireproof,
|
28
|
+
useLiveQuery: () => useLiveQuery
|
29
|
+
});
|
30
|
+
module.exports = __toCommonJS(react_exports);
|
31
|
+
|
32
|
+
// src/react/useFireproof.ts
|
33
|
+
var import_core = require("@fireproof/core");
|
34
|
+
var import_react = require("react");
|
35
|
+
var FireproofCtx = {};
|
36
|
+
function useFireproof(name = "useFireproof", config = {}) {
|
37
|
+
const database = typeof name === "string" ? (0, import_core.fireproof)(name, config) : name;
|
38
|
+
function useDocument2(initialDocFn) {
|
39
|
+
const docId = initialDocFn()._id ?? "";
|
40
|
+
const initialDoc = (0, import_react.useMemo)(initialDocFn, [initialDocFn.toString()]);
|
41
|
+
const [doc, setDoc] = (0, import_react.useState)(initialDoc);
|
42
|
+
const refreshDoc = (0, import_react.useCallback)(async () => {
|
43
|
+
const doc2 = docId ? await database.get(docId).catch(() => initialDocFn()) : initialDocFn();
|
44
|
+
setDoc(doc2);
|
45
|
+
}, [docId]);
|
46
|
+
const saveDoc = (0, import_react.useCallback)(
|
47
|
+
async (existingDoc) => {
|
48
|
+
const res = await database.put(existingDoc ?? doc);
|
49
|
+
if (!existingDoc && !doc._id) setDoc((d) => ({ ...d, _id: res.id }));
|
50
|
+
return res;
|
51
|
+
},
|
52
|
+
[doc]
|
53
|
+
);
|
54
|
+
const deleteDoc = (0, import_react.useCallback)(
|
55
|
+
async (existingDoc) => {
|
56
|
+
const id = existingDoc?._id ?? docId;
|
57
|
+
const doc2 = await database.get(id).catch(() => void 0);
|
58
|
+
if (!doc2) throw database.logger.Error().Str("id", id).Msg(`Document not found`).AsError();
|
59
|
+
const res = await database.del(id);
|
60
|
+
setDoc(initialDoc);
|
61
|
+
return res;
|
62
|
+
},
|
63
|
+
[docId, initialDoc]
|
64
|
+
);
|
65
|
+
const updateDoc = (0, import_react.useCallback)(
|
66
|
+
(newDoc, opts = { replace: false, reset: false }) => {
|
67
|
+
if (!newDoc) return void (opts.reset ? setDoc(initialDoc) : refreshDoc());
|
68
|
+
setDoc((d) => opts.replace ? newDoc : { ...d, ...newDoc });
|
69
|
+
},
|
70
|
+
[refreshDoc, initialDoc]
|
71
|
+
);
|
72
|
+
(0, import_react.useEffect)(() => {
|
73
|
+
if (!docId) return;
|
74
|
+
return database.subscribe((changes) => {
|
75
|
+
if (changes.find((c) => c._id === docId)) {
|
76
|
+
void refreshDoc();
|
77
|
+
}
|
78
|
+
});
|
79
|
+
}, [docId, refreshDoc]);
|
80
|
+
(0, import_react.useEffect)(() => {
|
81
|
+
void refreshDoc();
|
82
|
+
}, [refreshDoc]);
|
83
|
+
return [{ _id: docId, ...doc }, updateDoc, saveDoc, deleteDoc];
|
84
|
+
}
|
85
|
+
function useLiveQuery2(mapFn, query = {}, initialRows = []) {
|
86
|
+
const [result, setResult] = (0, import_react.useState)(() => ({
|
87
|
+
rows: initialRows,
|
88
|
+
docs: initialRows.map((r) => r.doc).filter((r) => !!r)
|
89
|
+
}));
|
90
|
+
const queryString = (0, import_react.useMemo)(() => JSON.stringify(query), [query]);
|
91
|
+
const mapFnString = (0, import_react.useMemo)(() => mapFn.toString(), [mapFn]);
|
92
|
+
const refreshRows = (0, import_react.useCallback)(async () => {
|
93
|
+
const res = await database.query(mapFn, query);
|
94
|
+
setResult({ ...res, docs: res.rows.map((r) => r.doc) });
|
95
|
+
}, [mapFnString, queryString]);
|
96
|
+
(0, import_react.useEffect)(() => {
|
97
|
+
refreshRows();
|
98
|
+
return database.subscribe(refreshRows);
|
99
|
+
}, [refreshRows]);
|
100
|
+
return result;
|
101
|
+
}
|
102
|
+
function useAllDocs2(query = {}) {
|
103
|
+
const [result, setResult] = (0, import_react.useState)({
|
104
|
+
docs: []
|
105
|
+
});
|
106
|
+
const queryString = (0, import_react.useMemo)(() => JSON.stringify(query), [query]);
|
107
|
+
const refreshRows = (0, import_react.useCallback)(async () => {
|
108
|
+
const res = await database.allDocs(query);
|
109
|
+
setResult({ ...res, docs: res.rows.map((r) => r.value) });
|
110
|
+
}, [queryString]);
|
111
|
+
(0, import_react.useEffect)(() => {
|
112
|
+
refreshRows();
|
113
|
+
return database.subscribe(refreshRows);
|
114
|
+
}, [refreshRows]);
|
115
|
+
return result;
|
116
|
+
}
|
117
|
+
function useChanges2(since = [], opts = {}) {
|
118
|
+
const [result, setResult] = (0, import_react.useState)({
|
119
|
+
docs: []
|
120
|
+
});
|
121
|
+
const queryString = (0, import_react.useMemo)(() => JSON.stringify(opts), [opts]);
|
122
|
+
const refreshRows = (0, import_react.useCallback)(async () => {
|
123
|
+
const res = await database.changes(since, opts);
|
124
|
+
setResult({ ...res, docs: res.rows.map((r) => r.value) });
|
125
|
+
}, [since, queryString]);
|
126
|
+
(0, import_react.useEffect)(() => {
|
127
|
+
refreshRows();
|
128
|
+
return database.subscribe(refreshRows);
|
129
|
+
}, [refreshRows]);
|
130
|
+
return result;
|
131
|
+
}
|
132
|
+
return { database, useLiveQuery: useLiveQuery2, useDocument: useDocument2, useAllDocs: useAllDocs2, useChanges: useChanges2 };
|
133
|
+
}
|
134
|
+
|
135
|
+
// src/react/useDocument.ts
|
136
|
+
function topLevelUseDocument(...args) {
|
137
|
+
const { useDocument: useDocument2, database } = useFireproof();
|
138
|
+
topLevelUseDocument.database = database;
|
139
|
+
return useDocument2(...args);
|
140
|
+
}
|
141
|
+
var useDocument = topLevelUseDocument;
|
142
|
+
|
143
|
+
// src/react/useLiveQuery.ts
|
144
|
+
function topLevelUseLiveQuery(...args) {
|
145
|
+
const { useLiveQuery: useLiveQuery2, database } = useFireproof();
|
146
|
+
topLevelUseLiveQuery.database = database;
|
147
|
+
return useLiveQuery2(...args);
|
148
|
+
}
|
149
|
+
var useLiveQuery = topLevelUseLiveQuery;
|
150
|
+
|
151
|
+
// src/react/useAllDocs.ts
|
152
|
+
function topLevelUseAllDocs(...args) {
|
153
|
+
const { useAllDocs: useAllDocs2, database } = useFireproof();
|
154
|
+
topLevelUseAllDocs.database = database;
|
155
|
+
return useAllDocs2(...args);
|
156
|
+
}
|
157
|
+
var useAllDocs = topLevelUseAllDocs;
|
158
|
+
|
159
|
+
// src/react/useChanges.ts
|
160
|
+
function topLevelUseChanges(...args) {
|
161
|
+
const { useChanges: useChanges2, database } = useFireproof();
|
162
|
+
topLevelUseChanges.database = database;
|
163
|
+
return useChanges2(...args);
|
164
|
+
}
|
165
|
+
var useChanges = topLevelUseChanges;
|
166
|
+
//# sourceMappingURL=index.cjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../src/react/index.ts","../../../src/react/useFireproof.ts","../../../src/react/useDocument.ts","../../../src/react/useLiveQuery.ts","../../../src/react/useAllDocs.ts","../../../src/react/useChanges.ts"],"sourcesContent":["export { type TLUseDocument, useDocument } from \"./useDocument\";\nexport { FireproofCtx, type UseFireproof, useFireproof } from \"./useFireproof\";\nexport { type TLUseLiveQuery, useLiveQuery } from \"./useLiveQuery\";\nexport { type TLUseAllDocs, useAllDocs } from \"./useAllDocs\";\nexport { type TLUseChanges, useChanges } from \"./useChanges\";\n// why is this there is should be a package system\n// export * from \"@fireproof/core\";\n","import type {\n ConfigOpts,\n Database,\n DocResponse,\n DocFragment,\n DocSet,\n DocTypes,\n DocWithId,\n IndexKeyType,\n IndexRow,\n MapFn,\n QueryOpts,\n} from \"@fireproof/core\";\nimport { fireproof } from \"@fireproof/core\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { AllDocsQueryOpts, ClockHead, ChangesOptions } from \"../types\";\n\nexport interface LiveQueryResult<T extends DocTypes, K extends IndexKeyType, R extends DocFragment = T> {\n readonly docs: DocWithId<T>[];\n readonly rows: IndexRow<K, T, R>[];\n}\n\nexport type UseLiveQuery = <T extends DocTypes, K extends IndexKeyType = string, R extends DocFragment = T>(\n mapFn: string | MapFn<T>,\n query?: QueryOpts<K>,\n initialRows?: IndexRow<K, T, R>[],\n) => LiveQueryResult<T, K, R>;\n\nexport interface AllDocsResult<T extends DocTypes> {\n readonly docs: DocWithId<T>[];\n}\n\nexport interface ChangesResult<T extends DocTypes> {\n readonly docs: DocWithId<T>[];\n}\n\nexport type UseAllDocs = <T extends DocTypes>(query?: AllDocsQueryOpts) => AllDocsResult<T>;\n\nexport type UseChanges = <T extends DocTypes>(since: ClockHead, opts: ChangesOptions) => ChangesResult<T>;\n\ninterface UpdateDocFnOptions {\n readonly replace?: boolean;\n readonly reset?: boolean;\n}\n\ntype UpdateDocFn<T extends DocTypes> = (newDoc?: DocSet<T>, options?: UpdateDocFnOptions) => void;\n\ntype StoreDocFn<T extends DocTypes> = (existingDoc?: DocWithId<T>) => Promise<DocResponse>;\n\ntype DeleteDocFn<T extends DocTypes> = (existingDoc?: DocWithId<T>) => Promise<DocResponse>;\n\nexport type UseDocumentResult<T extends DocTypes> = [DocWithId<T>, UpdateDocFn<T>, StoreDocFn<T>, DeleteDocFn<T>];\n\nexport type UseDocument = <T extends DocTypes>(initialDocFn: () => DocSet<T>) => UseDocumentResult<T>;\n\nexport interface UseFireproof {\n readonly database: Database;\n /**\n * ## Summary\n *\n * React hook that provides the ability to create/update/save new Fireproof documents into your custom Fireproof database.\n * The creation occurs when you do not pass in an `_id` as part of your initial document -- the database will assign a new\n * one when you call the provided `save` handler. The hook also provides generics support so you can inline your custom type into\n * the invocation to receive type-safety and auto-complete support in your IDE.\n *\n * ## Usage\n *\n * ```tsx\n * const [todo, setTodo, saveTodo] = useDocument<Todo>({\n * text: '',\n * date: Date.now(),\n * completed: false\n * })\n *\n * const [doc, setDoc, saveDoc] = useDocument<Customer>({\n * _id: `${props.customerId}-profile`, // you can imagine `customerId` as a prop passed in\n * name: \"\",\n * company: \"\",\n * startedAt: Date.now()\n * })\n * ```\n *\n * ## Overview\n *\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useLiveQuery` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\n readonly useDocument: UseDocument;\n /**\n * ## Summary\n * React hook that provides access to live query results, enabling real-time updates in your app.\n *\n * ## Usage\n * ```tsx\n * const result = useLiveQuery(\"date\"); // using string key\n * const result = useLiveQuery('date', { limit: 10, descending: true }) // key + options\n * const result = useLiveQuery<CustomType>(\"date\"); // using generics\n * const result = useLiveQuery((doc) => doc.date)); // using map function\n * ```\n *\n * ## Overview\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useLiveQuery` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\n readonly useLiveQuery: UseLiveQuery;\n /**\n * ## Summary\n * React hook that provides access to all documents in the database, sorted by `_id`.\n *\n * ## Usage\n * ```tsx\n * const result = useAllDocs({ limit: 10, descending: true }); // with options\n * const result = useAllDocs(); // without options\n * ```\n *\n * ## Overview\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useAllDocs` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\n readonly useAllDocs: UseAllDocs;\n /**\n * ## Summary\n * React hook that provides access to all new documents in the database added since the last time the changes was called\n *\n * ## Usage\n * ```tsx\n * const result = useChanges(prevresult.clock,{limit:10}); // with options\n * const result = useChanges(); // without options\n * const database = useChanges.database; // underlying \"useFireproof\" database accessor\n * ```\n *\n * ## Overview\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useAllDocs`, `useChanges` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\n readonly useChanges: UseChanges;\n}\n\n/**\n * @deprecated Use the `useFireproof` hook instead\n */\nexport const FireproofCtx = {} as UseFireproof;\n\n/**\n *\n * ## Summary\n *\n * React hook to create a custom-named Fireproof database and provides the utility hooks to query against it.\n *\n * ## Usage\n * ```tsx\n * const { database, useLiveQuery, useDocument } = useFireproof(\"dbname\");\n * const { database, useLiveQuery, useDocument } = useFireproof(\"dbname\", { ...options });\n * ```\n *\n * ## Overview\n *\n * TL;DR: Only use this hook if you need to configure a database name other than the default `useFireproof`.\n *\n * For most applications, using the `useLiveQuery` or `useDocument` hooks exported from `use-fireproof` should\n * suffice for the majority of use-cases. Under the hood, they act against a database named `useFireproof` instantiated with\n * default configurations. However, if you need to do a custom database setup or configure a database name more to your liking\n * than the default `useFireproof`, then use `useFireproof` as it exists for that purpose. It will provide you with the\n * custom database accessor and *lexically scoped* versions of `useLiveQuery` and `useDocument` that act against said\n * custom database.\n *\n */\nexport function useFireproof(name: string | Database = \"useFireproof\", config: ConfigOpts = {}): UseFireproof {\n const database = typeof name === \"string\" ? fireproof(name, config) : name;\n\n function useDocument<T extends DocTypes>(initialDocFn: () => DocSet<T>): UseDocumentResult<T> {\n // We purposely refetch the docId everytime to check if it has changed\n const docId = initialDocFn()._id ?? \"\";\n\n // We do not want to force consumers to memoize their initial document so we do it for them.\n // We use the stringified generator function to ensure that the memoization is stable across renders.\n const initialDoc = useMemo(initialDocFn, [initialDocFn.toString()]);\n const [doc, setDoc] = useState(initialDoc);\n\n const refreshDoc = useCallback(async () => {\n // todo add option for mvcc checks\n const doc = docId ? await database.get<T>(docId).catch(() => initialDocFn()) : initialDocFn();\n setDoc(doc);\n }, [docId]);\n\n const saveDoc: StoreDocFn<T> = useCallback(\n async (existingDoc) => {\n const res = await database.put(existingDoc ?? doc);\n // If the document was created, then we need to update the local state with the new `_id`\n if (!existingDoc && !doc._id) setDoc((d) => ({ ...d, _id: res.id }));\n return res;\n },\n [doc],\n );\n\n const deleteDoc: DeleteDocFn<T> = useCallback(\n async (existingDoc) => {\n const id = existingDoc?._id ?? docId;\n const doc = await database.get<T>(id).catch(() => undefined);\n if (!doc) throw database.logger.Error().Str(\"id\", id).Msg(`Document not found`).AsError();\n const res = await database.del(id);\n setDoc(initialDoc);\n return res;\n },\n [docId, initialDoc],\n );\n\n const updateDoc: UpdateDocFn<T> = useCallback(\n (newDoc, opts = { replace: false, reset: false }) => {\n if (!newDoc) return void (opts.reset ? setDoc(initialDoc) : refreshDoc());\n setDoc((d) => (opts.replace ? (newDoc as DocWithId<T>) : { ...d, ...newDoc }));\n },\n [refreshDoc, initialDoc],\n );\n\n useEffect(() => {\n if (!docId) return;\n return database.subscribe((changes) => {\n if (changes.find((c) => c._id === docId)) {\n void refreshDoc(); // todo use change.value\n }\n });\n }, [docId, refreshDoc]);\n\n useEffect(() => {\n void refreshDoc();\n }, [refreshDoc]);\n\n return [{ _id: docId, ...doc }, updateDoc, saveDoc, deleteDoc];\n }\n\n function useLiveQuery<T extends DocTypes, K extends IndexKeyType = string, R extends DocFragment = T>(\n mapFn: MapFn<T> | string,\n query = {},\n initialRows: IndexRow<K, T, R>[] = [],\n ): LiveQueryResult<T, K, R> {\n const [result, setResult] = useState<LiveQueryResult<T, K, R>>(() => ({\n rows: initialRows,\n docs: initialRows.map((r) => r.doc).filter((r): r is DocWithId<T> => !!r),\n }));\n\n const queryString = useMemo(() => JSON.stringify(query), [query]);\n const mapFnString = useMemo(() => mapFn.toString(), [mapFn]);\n\n const refreshRows = useCallback(async () => {\n const res = await database.query<K, T, R>(mapFn, query);\n setResult({ ...res, docs: res.rows.map((r) => r.doc as DocWithId<T>) });\n }, [mapFnString, queryString]);\n\n useEffect(() => {\n refreshRows(); // Initial data fetch\n return database.subscribe(refreshRows);\n }, [refreshRows]);\n\n return result;\n }\n\n function useAllDocs<T extends DocTypes>(query: AllDocsQueryOpts = {}): AllDocsResult<T> {\n const [result, setResult] = useState<AllDocsResult<T>>({\n docs: [],\n });\n\n const queryString = useMemo(() => JSON.stringify(query), [query]);\n\n const refreshRows = useCallback(async () => {\n const res = await database.allDocs<T>(query);\n setResult({ ...res, docs: res.rows.map((r) => r.value as DocWithId<T>) });\n }, [queryString]);\n\n useEffect(() => {\n refreshRows(); // Initial data fetch\n return database.subscribe(refreshRows);\n }, [refreshRows]);\n\n return result;\n }\n\n function useChanges<T extends DocTypes>(since: ClockHead = [], opts: ChangesOptions = {}): ChangesResult<T> {\n const [result, setResult] = useState<ChangesResult<T>>({\n docs: [],\n });\n\n const queryString = useMemo(() => JSON.stringify(opts), [opts]);\n\n const refreshRows = useCallback(async () => {\n const res = await database.changes<T>(since, opts);\n setResult({ ...res, docs: res.rows.map((r) => r.value as DocWithId<T>) });\n }, [since, queryString]);\n\n useEffect(() => {\n refreshRows(); // Initial data fetch\n return database.subscribe(refreshRows);\n }, [refreshRows]);\n\n return result;\n }\n\n return { database, useLiveQuery, useDocument, useAllDocs, useChanges };\n}\n","import { Database, DocTypes, DocWithId } from \"@fireproof/core\";\n\nimport { UseDocument, UseDocumentResult, useFireproof } from \"./useFireproof\";\n\nexport interface TLUseDocument {\n <T extends DocTypes>(initialDoc: DocWithId<T>): UseDocumentResult<T>;\n database: Database;\n}\n\nfunction topLevelUseDocument(...args: Parameters<UseDocument>) {\n const { useDocument, database } = useFireproof();\n (topLevelUseDocument as TLUseDocument).database = database;\n return useDocument(...args);\n}\n\n/**\n * ## Summary\n *\n * React hook that provides the ability to create new Fireproof documents. The creation occurs when\n * you do not pass in an `_id` as part of your initial document -- the database will assign a new one when\n * you call the provided `save` handler This uses the default database named `useFireproof` under the hood which you can also\n * access via the `database` accessor.\n *\n * ## Usage\n *\n * ```tsx\n * const [todo, setTodo, saveTodo] = useDocument(() => ({\n * text: '',\n * date: Date.now(),\n * completed: false\n * }))\n *\n * const [doc, setDoc, saveDoc] = useDocument(() => ({\n * _id: `${props.customerId}-profile`, // you can imagine `customerId` as a prop passed in\n * name: \"\",\n * company: \"\",\n * startedAt: Date.now()\n * }))\n *\n * const database = useDocument.database; // underlying \"useFireproof\" database accessor\n * ```\n *\n * ## Overview\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useLiveQuery` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\nexport const useDocument = topLevelUseDocument as TLUseDocument;\n","import { Database, DocFragment, DocTypes, IndexKeyType } from \"@fireproof/core\";\n\nimport { LiveQueryResult, useFireproof, UseLiveQuery } from \"./useFireproof\";\n\nexport interface TLUseLiveQuery {\n <T extends DocTypes, K extends IndexKeyType, R extends DocFragment = T>(\n ...args: Parameters<UseLiveQuery>\n ): LiveQueryResult<T, K, R>;\n database: Database;\n}\n\nfunction topLevelUseLiveQuery(...args: Parameters<UseLiveQuery>) {\n const { useLiveQuery, database } = useFireproof();\n (topLevelUseLiveQuery as TLUseLiveQuery).database = database;\n return useLiveQuery(...args);\n}\n\n/**\n * ## Summary\n * React hook that provides access to live query results, enabling real-time updates in your app. This uses\n * the default database named \"useFireproof\" under the hood which you can also access via the `database` accessor.\n *\n * ## Usage\n * ```tsx\n * const results = useLiveQuery(\"date\"); // using string\n * const results = useLiveQuery((doc) => doc.date)); // using map function\n * const database = useLiveQuery.database; // underlying \"useFireproof\" database accessor\n * ```\n *\n * ## Overview\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useLiveQuery` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\nexport const useLiveQuery = topLevelUseLiveQuery as TLUseLiveQuery;\n","import { Database, DocTypes } from \"@fireproof/core\";\n\nimport { AllDocsResult, useFireproof, UseAllDocs } from \"./useFireproof\";\n\nexport interface TLUseAllDocs {\n <T extends DocTypes>(...args: Parameters<UseAllDocs>): AllDocsResult<T>;\n database: Database;\n}\n\nfunction topLevelUseAllDocs(...args: Parameters<UseAllDocs>) {\n const { useAllDocs, database } = useFireproof();\n (topLevelUseAllDocs as TLUseAllDocs).database = database;\n return useAllDocs(...args);\n}\n\n/**\n * ## Summary\n * React hook that provides access to all documents in the database, sorted by `_id`.\n *\n * ## Usage\n * ```tsx\n * const result = useAllDocs({ limit: 10, descending: true }); // with options\n * const result = useAllDocs(); // without options\n * const database = useAllDocs.database; // underlying \"useFireproof\" database accessor\n * ```\n *\n * ## Overview\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useAllDocs` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\nexport const useAllDocs = topLevelUseAllDocs as TLUseAllDocs;\n","import { Database, DocTypes } from \"@fireproof/core\";\n\nimport { ChangesResult, useFireproof, UseChanges } from \"./useFireproof\";\n\nexport interface TLUseChanges {\n <T extends DocTypes>(...args: Parameters<UseChanges>): ChangesResult<T>;\n database: Database;\n}\n\nfunction topLevelUseChanges(...args: Parameters<UseChanges>) {\n const { useChanges, database } = useFireproof();\n (topLevelUseChanges as TLUseChanges).database = database;\n return useChanges(...args);\n}\n\n/**\n * ## Summary\n * React hook that provides access to all new documents in the database added since the last time the changes was called\n *\n * ## Usage\n * ```tsx\n * const result = useChanges(prevresult.clock,{limit:10}); // with options\n * const result = useChanges(); // without options\n * const database = useChanges.database; // underlying \"useFireproof\" database accessor\n * ```\n *\n * ## Overview\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useAllDocs`, `useChanges` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\nexport const useChanges = topLevelUseChanges as TLUseChanges;\n"],"mappings":"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","names":["useDocument","doc","useLiveQuery","useAllDocs","useChanges","useDocument","useLiveQuery","useAllDocs","useChanges"]}
|
@@ -0,0 +1,89 @@
|
|
1
|
+
import { Database, ConfigOpts, DocTypes, IndexKeyType as IndexKeyType$1, DocFragment as DocFragment$1, DocWithId, IndexRow, MapFn, QueryOpts as QueryOpts$1, DocSet, DocResponse } from '@fireproof/core';
|
2
|
+
import { EventLink } from '@web3-storage/pail/clock/api';
|
3
|
+
import { Operation } from '@web3-storage/pail/crdt/api';
|
4
|
+
import { Link, Version } from 'multiformats';
|
5
|
+
|
6
|
+
type AnyLink = Link<unknown, number, number, Version>;
|
7
|
+
|
8
|
+
type ClockLink = EventLink<Operation>;
|
9
|
+
type ClockHead = ClockLink[];
|
10
|
+
type DocFragment = Uint8Array | string | number | boolean | null | AnyLink | DocFragment[] | object;
|
11
|
+
type KeyLiteral = string | number | boolean;
|
12
|
+
type IndexKeyType = KeyLiteral | KeyLiteral[];
|
13
|
+
interface QueryOpts<K extends IndexKeyType> {
|
14
|
+
readonly descending?: boolean;
|
15
|
+
readonly limit?: number;
|
16
|
+
includeDocs?: boolean;
|
17
|
+
readonly range?: [IndexKeyType, IndexKeyType];
|
18
|
+
readonly key?: DocFragment;
|
19
|
+
readonly keys?: DocFragment[];
|
20
|
+
prefix?: IndexKeyType;
|
21
|
+
}
|
22
|
+
interface AllDocsQueryOpts extends QueryOpts<string> {
|
23
|
+
readonly key?: string;
|
24
|
+
readonly keys?: string[];
|
25
|
+
prefix?: string;
|
26
|
+
}
|
27
|
+
interface ChangesOptions {
|
28
|
+
readonly dirty?: boolean;
|
29
|
+
readonly limit?: number;
|
30
|
+
}
|
31
|
+
|
32
|
+
interface LiveQueryResult<T extends DocTypes, K extends IndexKeyType$1, R extends DocFragment$1 = T> {
|
33
|
+
readonly docs: DocWithId<T>[];
|
34
|
+
readonly rows: IndexRow<K, T, R>[];
|
35
|
+
}
|
36
|
+
type UseLiveQuery = <T extends DocTypes, K extends IndexKeyType$1 = string, R extends DocFragment$1 = T>(mapFn: string | MapFn<T>, query?: QueryOpts$1<K>, initialRows?: IndexRow<K, T, R>[]) => LiveQueryResult<T, K, R>;
|
37
|
+
interface AllDocsResult<T extends DocTypes> {
|
38
|
+
readonly docs: DocWithId<T>[];
|
39
|
+
}
|
40
|
+
interface ChangesResult<T extends DocTypes> {
|
41
|
+
readonly docs: DocWithId<T>[];
|
42
|
+
}
|
43
|
+
type UseAllDocs = <T extends DocTypes>(query?: AllDocsQueryOpts) => AllDocsResult<T>;
|
44
|
+
type UseChanges = <T extends DocTypes>(since: ClockHead, opts: ChangesOptions) => ChangesResult<T>;
|
45
|
+
interface UpdateDocFnOptions {
|
46
|
+
readonly replace?: boolean;
|
47
|
+
readonly reset?: boolean;
|
48
|
+
}
|
49
|
+
type UpdateDocFn<T extends DocTypes> = (newDoc?: DocSet<T>, options?: UpdateDocFnOptions) => void;
|
50
|
+
type StoreDocFn<T extends DocTypes> = (existingDoc?: DocWithId<T>) => Promise<DocResponse>;
|
51
|
+
type DeleteDocFn<T extends DocTypes> = (existingDoc?: DocWithId<T>) => Promise<DocResponse>;
|
52
|
+
type UseDocumentResult<T extends DocTypes> = [DocWithId<T>, UpdateDocFn<T>, StoreDocFn<T>, DeleteDocFn<T>];
|
53
|
+
type UseDocument = <T extends DocTypes>(initialDocFn: () => DocSet<T>) => UseDocumentResult<T>;
|
54
|
+
interface UseFireproof {
|
55
|
+
readonly database: Database;
|
56
|
+
readonly useDocument: UseDocument;
|
57
|
+
readonly useLiveQuery: UseLiveQuery;
|
58
|
+
readonly useAllDocs: UseAllDocs;
|
59
|
+
readonly useChanges: UseChanges;
|
60
|
+
}
|
61
|
+
declare const FireproofCtx: UseFireproof;
|
62
|
+
declare function useFireproof(name?: string | Database, config?: ConfigOpts): UseFireproof;
|
63
|
+
|
64
|
+
interface TLUseDocument {
|
65
|
+
<T extends DocTypes>(initialDoc: DocWithId<T>): UseDocumentResult<T>;
|
66
|
+
database: Database;
|
67
|
+
}
|
68
|
+
declare const useDocument: TLUseDocument;
|
69
|
+
|
70
|
+
interface TLUseLiveQuery {
|
71
|
+
<T extends DocTypes, K extends IndexKeyType$1, R extends DocFragment$1 = T>(...args: Parameters<UseLiveQuery>): LiveQueryResult<T, K, R>;
|
72
|
+
database: Database;
|
73
|
+
}
|
74
|
+
declare const useLiveQuery: TLUseLiveQuery;
|
75
|
+
|
76
|
+
interface TLUseAllDocs {
|
77
|
+
<T extends DocTypes>(...args: Parameters<UseAllDocs>): AllDocsResult<T>;
|
78
|
+
database: Database;
|
79
|
+
}
|
80
|
+
declare const useAllDocs: TLUseAllDocs;
|
81
|
+
|
82
|
+
interface TLUseChanges {
|
83
|
+
<T extends DocTypes>(...args: Parameters<UseChanges>): ChangesResult<T>;
|
84
|
+
database: Database;
|
85
|
+
}
|
86
|
+
declare const useChanges: TLUseChanges;
|
87
|
+
|
88
|
+
export { FireproofCtx, type TLUseAllDocs, type TLUseChanges, type TLUseDocument, type TLUseLiveQuery, type UseFireproof, useAllDocs, useChanges, useDocument, useFireproof, useLiveQuery };
|
89
|
+
declare module '@fireproof/core/web'
|
package/react/index.d.ts
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
import { Database, ConfigOpts, DocTypes, IndexKeyType as IndexKeyType$1, DocFragment as DocFragment$1, DocWithId, IndexRow, MapFn, QueryOpts as QueryOpts$1, DocSet, DocResponse } from '@fireproof/core';
|
2
|
+
import { EventLink } from '@web3-storage/pail/clock/api';
|
3
|
+
import { Operation } from '@web3-storage/pail/crdt/api';
|
4
|
+
import { Link, Version } from 'multiformats';
|
5
|
+
|
6
|
+
type AnyLink = Link<unknown, number, number, Version>;
|
7
|
+
|
8
|
+
type ClockLink = EventLink<Operation>;
|
9
|
+
type ClockHead = ClockLink[];
|
10
|
+
type DocFragment = Uint8Array | string | number | boolean | null | AnyLink | DocFragment[] | object;
|
11
|
+
type KeyLiteral = string | number | boolean;
|
12
|
+
type IndexKeyType = KeyLiteral | KeyLiteral[];
|
13
|
+
interface QueryOpts<K extends IndexKeyType> {
|
14
|
+
readonly descending?: boolean;
|
15
|
+
readonly limit?: number;
|
16
|
+
includeDocs?: boolean;
|
17
|
+
readonly range?: [IndexKeyType, IndexKeyType];
|
18
|
+
readonly key?: DocFragment;
|
19
|
+
readonly keys?: DocFragment[];
|
20
|
+
prefix?: IndexKeyType;
|
21
|
+
}
|
22
|
+
interface AllDocsQueryOpts extends QueryOpts<string> {
|
23
|
+
readonly key?: string;
|
24
|
+
readonly keys?: string[];
|
25
|
+
prefix?: string;
|
26
|
+
}
|
27
|
+
interface ChangesOptions {
|
28
|
+
readonly dirty?: boolean;
|
29
|
+
readonly limit?: number;
|
30
|
+
}
|
31
|
+
|
32
|
+
interface LiveQueryResult<T extends DocTypes, K extends IndexKeyType$1, R extends DocFragment$1 = T> {
|
33
|
+
readonly docs: DocWithId<T>[];
|
34
|
+
readonly rows: IndexRow<K, T, R>[];
|
35
|
+
}
|
36
|
+
type UseLiveQuery = <T extends DocTypes, K extends IndexKeyType$1 = string, R extends DocFragment$1 = T>(mapFn: string | MapFn<T>, query?: QueryOpts$1<K>, initialRows?: IndexRow<K, T, R>[]) => LiveQueryResult<T, K, R>;
|
37
|
+
interface AllDocsResult<T extends DocTypes> {
|
38
|
+
readonly docs: DocWithId<T>[];
|
39
|
+
}
|
40
|
+
interface ChangesResult<T extends DocTypes> {
|
41
|
+
readonly docs: DocWithId<T>[];
|
42
|
+
}
|
43
|
+
type UseAllDocs = <T extends DocTypes>(query?: AllDocsQueryOpts) => AllDocsResult<T>;
|
44
|
+
type UseChanges = <T extends DocTypes>(since: ClockHead, opts: ChangesOptions) => ChangesResult<T>;
|
45
|
+
interface UpdateDocFnOptions {
|
46
|
+
readonly replace?: boolean;
|
47
|
+
readonly reset?: boolean;
|
48
|
+
}
|
49
|
+
type UpdateDocFn<T extends DocTypes> = (newDoc?: DocSet<T>, options?: UpdateDocFnOptions) => void;
|
50
|
+
type StoreDocFn<T extends DocTypes> = (existingDoc?: DocWithId<T>) => Promise<DocResponse>;
|
51
|
+
type DeleteDocFn<T extends DocTypes> = (existingDoc?: DocWithId<T>) => Promise<DocResponse>;
|
52
|
+
type UseDocumentResult<T extends DocTypes> = [DocWithId<T>, UpdateDocFn<T>, StoreDocFn<T>, DeleteDocFn<T>];
|
53
|
+
type UseDocument = <T extends DocTypes>(initialDocFn: () => DocSet<T>) => UseDocumentResult<T>;
|
54
|
+
interface UseFireproof {
|
55
|
+
readonly database: Database;
|
56
|
+
readonly useDocument: UseDocument;
|
57
|
+
readonly useLiveQuery: UseLiveQuery;
|
58
|
+
readonly useAllDocs: UseAllDocs;
|
59
|
+
readonly useChanges: UseChanges;
|
60
|
+
}
|
61
|
+
declare const FireproofCtx: UseFireproof;
|
62
|
+
declare function useFireproof(name?: string | Database, config?: ConfigOpts): UseFireproof;
|
63
|
+
|
64
|
+
interface TLUseDocument {
|
65
|
+
<T extends DocTypes>(initialDoc: DocWithId<T>): UseDocumentResult<T>;
|
66
|
+
database: Database;
|
67
|
+
}
|
68
|
+
declare const useDocument: TLUseDocument;
|
69
|
+
|
70
|
+
interface TLUseLiveQuery {
|
71
|
+
<T extends DocTypes, K extends IndexKeyType$1, R extends DocFragment$1 = T>(...args: Parameters<UseLiveQuery>): LiveQueryResult<T, K, R>;
|
72
|
+
database: Database;
|
73
|
+
}
|
74
|
+
declare const useLiveQuery: TLUseLiveQuery;
|
75
|
+
|
76
|
+
interface TLUseAllDocs {
|
77
|
+
<T extends DocTypes>(...args: Parameters<UseAllDocs>): AllDocsResult<T>;
|
78
|
+
database: Database;
|
79
|
+
}
|
80
|
+
declare const useAllDocs: TLUseAllDocs;
|
81
|
+
|
82
|
+
interface TLUseChanges {
|
83
|
+
<T extends DocTypes>(...args: Parameters<UseChanges>): ChangesResult<T>;
|
84
|
+
database: Database;
|
85
|
+
}
|
86
|
+
declare const useChanges: TLUseChanges;
|
87
|
+
|
88
|
+
export { FireproofCtx, type TLUseAllDocs, type TLUseChanges, type TLUseDocument, type TLUseLiveQuery, type UseFireproof, useAllDocs, useChanges, useDocument, useFireproof, useLiveQuery };
|
89
|
+
declare module '@fireproof/core/web'
|
package/react/index.js
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
// src/react/useFireproof.ts
|
2
|
+
import { fireproof } from "@fireproof/core";
|
3
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
4
|
+
var FireproofCtx = {};
|
5
|
+
function useFireproof(name = "useFireproof", config = {}) {
|
6
|
+
const database = typeof name === "string" ? fireproof(name, config) : name;
|
7
|
+
function useDocument2(initialDocFn) {
|
8
|
+
const docId = initialDocFn()._id ?? "";
|
9
|
+
const initialDoc = useMemo(initialDocFn, [initialDocFn.toString()]);
|
10
|
+
const [doc, setDoc] = useState(initialDoc);
|
11
|
+
const refreshDoc = useCallback(async () => {
|
12
|
+
const doc2 = docId ? await database.get(docId).catch(() => initialDocFn()) : initialDocFn();
|
13
|
+
setDoc(doc2);
|
14
|
+
}, [docId]);
|
15
|
+
const saveDoc = useCallback(
|
16
|
+
async (existingDoc) => {
|
17
|
+
const res = await database.put(existingDoc ?? doc);
|
18
|
+
if (!existingDoc && !doc._id) setDoc((d) => ({ ...d, _id: res.id }));
|
19
|
+
return res;
|
20
|
+
},
|
21
|
+
[doc]
|
22
|
+
);
|
23
|
+
const deleteDoc = useCallback(
|
24
|
+
async (existingDoc) => {
|
25
|
+
const id = existingDoc?._id ?? docId;
|
26
|
+
const doc2 = await database.get(id).catch(() => void 0);
|
27
|
+
if (!doc2) throw database.logger.Error().Str("id", id).Msg(`Document not found`).AsError();
|
28
|
+
const res = await database.del(id);
|
29
|
+
setDoc(initialDoc);
|
30
|
+
return res;
|
31
|
+
},
|
32
|
+
[docId, initialDoc]
|
33
|
+
);
|
34
|
+
const updateDoc = useCallback(
|
35
|
+
(newDoc, opts = { replace: false, reset: false }) => {
|
36
|
+
if (!newDoc) return void (opts.reset ? setDoc(initialDoc) : refreshDoc());
|
37
|
+
setDoc((d) => opts.replace ? newDoc : { ...d, ...newDoc });
|
38
|
+
},
|
39
|
+
[refreshDoc, initialDoc]
|
40
|
+
);
|
41
|
+
useEffect(() => {
|
42
|
+
if (!docId) return;
|
43
|
+
return database.subscribe((changes) => {
|
44
|
+
if (changes.find((c) => c._id === docId)) {
|
45
|
+
void refreshDoc();
|
46
|
+
}
|
47
|
+
});
|
48
|
+
}, [docId, refreshDoc]);
|
49
|
+
useEffect(() => {
|
50
|
+
void refreshDoc();
|
51
|
+
}, [refreshDoc]);
|
52
|
+
return [{ _id: docId, ...doc }, updateDoc, saveDoc, deleteDoc];
|
53
|
+
}
|
54
|
+
function useLiveQuery2(mapFn, query = {}, initialRows = []) {
|
55
|
+
const [result, setResult] = useState(() => ({
|
56
|
+
rows: initialRows,
|
57
|
+
docs: initialRows.map((r) => r.doc).filter((r) => !!r)
|
58
|
+
}));
|
59
|
+
const queryString = useMemo(() => JSON.stringify(query), [query]);
|
60
|
+
const mapFnString = useMemo(() => mapFn.toString(), [mapFn]);
|
61
|
+
const refreshRows = useCallback(async () => {
|
62
|
+
const res = await database.query(mapFn, query);
|
63
|
+
setResult({ ...res, docs: res.rows.map((r) => r.doc) });
|
64
|
+
}, [mapFnString, queryString]);
|
65
|
+
useEffect(() => {
|
66
|
+
refreshRows();
|
67
|
+
return database.subscribe(refreshRows);
|
68
|
+
}, [refreshRows]);
|
69
|
+
return result;
|
70
|
+
}
|
71
|
+
function useAllDocs2(query = {}) {
|
72
|
+
const [result, setResult] = useState({
|
73
|
+
docs: []
|
74
|
+
});
|
75
|
+
const queryString = useMemo(() => JSON.stringify(query), [query]);
|
76
|
+
const refreshRows = useCallback(async () => {
|
77
|
+
const res = await database.allDocs(query);
|
78
|
+
setResult({ ...res, docs: res.rows.map((r) => r.value) });
|
79
|
+
}, [queryString]);
|
80
|
+
useEffect(() => {
|
81
|
+
refreshRows();
|
82
|
+
return database.subscribe(refreshRows);
|
83
|
+
}, [refreshRows]);
|
84
|
+
return result;
|
85
|
+
}
|
86
|
+
function useChanges2(since = [], opts = {}) {
|
87
|
+
const [result, setResult] = useState({
|
88
|
+
docs: []
|
89
|
+
});
|
90
|
+
const queryString = useMemo(() => JSON.stringify(opts), [opts]);
|
91
|
+
const refreshRows = useCallback(async () => {
|
92
|
+
const res = await database.changes(since, opts);
|
93
|
+
setResult({ ...res, docs: res.rows.map((r) => r.value) });
|
94
|
+
}, [since, queryString]);
|
95
|
+
useEffect(() => {
|
96
|
+
refreshRows();
|
97
|
+
return database.subscribe(refreshRows);
|
98
|
+
}, [refreshRows]);
|
99
|
+
return result;
|
100
|
+
}
|
101
|
+
return { database, useLiveQuery: useLiveQuery2, useDocument: useDocument2, useAllDocs: useAllDocs2, useChanges: useChanges2 };
|
102
|
+
}
|
103
|
+
|
104
|
+
// src/react/useDocument.ts
|
105
|
+
function topLevelUseDocument(...args) {
|
106
|
+
const { useDocument: useDocument2, database } = useFireproof();
|
107
|
+
topLevelUseDocument.database = database;
|
108
|
+
return useDocument2(...args);
|
109
|
+
}
|
110
|
+
var useDocument = topLevelUseDocument;
|
111
|
+
|
112
|
+
// src/react/useLiveQuery.ts
|
113
|
+
function topLevelUseLiveQuery(...args) {
|
114
|
+
const { useLiveQuery: useLiveQuery2, database } = useFireproof();
|
115
|
+
topLevelUseLiveQuery.database = database;
|
116
|
+
return useLiveQuery2(...args);
|
117
|
+
}
|
118
|
+
var useLiveQuery = topLevelUseLiveQuery;
|
119
|
+
|
120
|
+
// src/react/useAllDocs.ts
|
121
|
+
function topLevelUseAllDocs(...args) {
|
122
|
+
const { useAllDocs: useAllDocs2, database } = useFireproof();
|
123
|
+
topLevelUseAllDocs.database = database;
|
124
|
+
return useAllDocs2(...args);
|
125
|
+
}
|
126
|
+
var useAllDocs = topLevelUseAllDocs;
|
127
|
+
|
128
|
+
// src/react/useChanges.ts
|
129
|
+
function topLevelUseChanges(...args) {
|
130
|
+
const { useChanges: useChanges2, database } = useFireproof();
|
131
|
+
topLevelUseChanges.database = database;
|
132
|
+
return useChanges2(...args);
|
133
|
+
}
|
134
|
+
var useChanges = topLevelUseChanges;
|
135
|
+
export {
|
136
|
+
FireproofCtx,
|
137
|
+
useAllDocs,
|
138
|
+
useChanges,
|
139
|
+
useDocument,
|
140
|
+
useFireproof,
|
141
|
+
useLiveQuery
|
142
|
+
};
|
143
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../src/react/useFireproof.ts","../../../src/react/useDocument.ts","../../../src/react/useLiveQuery.ts","../../../src/react/useAllDocs.ts","../../../src/react/useChanges.ts"],"sourcesContent":["import type {\n ConfigOpts,\n Database,\n DocResponse,\n DocFragment,\n DocSet,\n DocTypes,\n DocWithId,\n IndexKeyType,\n IndexRow,\n MapFn,\n QueryOpts,\n} from \"@fireproof/core\";\nimport { fireproof } from \"@fireproof/core\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { AllDocsQueryOpts, ClockHead, ChangesOptions } from \"../types\";\n\nexport interface LiveQueryResult<T extends DocTypes, K extends IndexKeyType, R extends DocFragment = T> {\n readonly docs: DocWithId<T>[];\n readonly rows: IndexRow<K, T, R>[];\n}\n\nexport type UseLiveQuery = <T extends DocTypes, K extends IndexKeyType = string, R extends DocFragment = T>(\n mapFn: string | MapFn<T>,\n query?: QueryOpts<K>,\n initialRows?: IndexRow<K, T, R>[],\n) => LiveQueryResult<T, K, R>;\n\nexport interface AllDocsResult<T extends DocTypes> {\n readonly docs: DocWithId<T>[];\n}\n\nexport interface ChangesResult<T extends DocTypes> {\n readonly docs: DocWithId<T>[];\n}\n\nexport type UseAllDocs = <T extends DocTypes>(query?: AllDocsQueryOpts) => AllDocsResult<T>;\n\nexport type UseChanges = <T extends DocTypes>(since: ClockHead, opts: ChangesOptions) => ChangesResult<T>;\n\ninterface UpdateDocFnOptions {\n readonly replace?: boolean;\n readonly reset?: boolean;\n}\n\ntype UpdateDocFn<T extends DocTypes> = (newDoc?: DocSet<T>, options?: UpdateDocFnOptions) => void;\n\ntype StoreDocFn<T extends DocTypes> = (existingDoc?: DocWithId<T>) => Promise<DocResponse>;\n\ntype DeleteDocFn<T extends DocTypes> = (existingDoc?: DocWithId<T>) => Promise<DocResponse>;\n\nexport type UseDocumentResult<T extends DocTypes> = [DocWithId<T>, UpdateDocFn<T>, StoreDocFn<T>, DeleteDocFn<T>];\n\nexport type UseDocument = <T extends DocTypes>(initialDocFn: () => DocSet<T>) => UseDocumentResult<T>;\n\nexport interface UseFireproof {\n readonly database: Database;\n /**\n * ## Summary\n *\n * React hook that provides the ability to create/update/save new Fireproof documents into your custom Fireproof database.\n * The creation occurs when you do not pass in an `_id` as part of your initial document -- the database will assign a new\n * one when you call the provided `save` handler. The hook also provides generics support so you can inline your custom type into\n * the invocation to receive type-safety and auto-complete support in your IDE.\n *\n * ## Usage\n *\n * ```tsx\n * const [todo, setTodo, saveTodo] = useDocument<Todo>({\n * text: '',\n * date: Date.now(),\n * completed: false\n * })\n *\n * const [doc, setDoc, saveDoc] = useDocument<Customer>({\n * _id: `${props.customerId}-profile`, // you can imagine `customerId` as a prop passed in\n * name: \"\",\n * company: \"\",\n * startedAt: Date.now()\n * })\n * ```\n *\n * ## Overview\n *\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useLiveQuery` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\n readonly useDocument: UseDocument;\n /**\n * ## Summary\n * React hook that provides access to live query results, enabling real-time updates in your app.\n *\n * ## Usage\n * ```tsx\n * const result = useLiveQuery(\"date\"); // using string key\n * const result = useLiveQuery('date', { limit: 10, descending: true }) // key + options\n * const result = useLiveQuery<CustomType>(\"date\"); // using generics\n * const result = useLiveQuery((doc) => doc.date)); // using map function\n * ```\n *\n * ## Overview\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useLiveQuery` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\n readonly useLiveQuery: UseLiveQuery;\n /**\n * ## Summary\n * React hook that provides access to all documents in the database, sorted by `_id`.\n *\n * ## Usage\n * ```tsx\n * const result = useAllDocs({ limit: 10, descending: true }); // with options\n * const result = useAllDocs(); // without options\n * ```\n *\n * ## Overview\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useAllDocs` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\n readonly useAllDocs: UseAllDocs;\n /**\n * ## Summary\n * React hook that provides access to all new documents in the database added since the last time the changes was called\n *\n * ## Usage\n * ```tsx\n * const result = useChanges(prevresult.clock,{limit:10}); // with options\n * const result = useChanges(); // without options\n * const database = useChanges.database; // underlying \"useFireproof\" database accessor\n * ```\n *\n * ## Overview\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useAllDocs`, `useChanges` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\n readonly useChanges: UseChanges;\n}\n\n/**\n * @deprecated Use the `useFireproof` hook instead\n */\nexport const FireproofCtx = {} as UseFireproof;\n\n/**\n *\n * ## Summary\n *\n * React hook to create a custom-named Fireproof database and provides the utility hooks to query against it.\n *\n * ## Usage\n * ```tsx\n * const { database, useLiveQuery, useDocument } = useFireproof(\"dbname\");\n * const { database, useLiveQuery, useDocument } = useFireproof(\"dbname\", { ...options });\n * ```\n *\n * ## Overview\n *\n * TL;DR: Only use this hook if you need to configure a database name other than the default `useFireproof`.\n *\n * For most applications, using the `useLiveQuery` or `useDocument` hooks exported from `use-fireproof` should\n * suffice for the majority of use-cases. Under the hood, they act against a database named `useFireproof` instantiated with\n * default configurations. However, if you need to do a custom database setup or configure a database name more to your liking\n * than the default `useFireproof`, then use `useFireproof` as it exists for that purpose. It will provide you with the\n * custom database accessor and *lexically scoped* versions of `useLiveQuery` and `useDocument` that act against said\n * custom database.\n *\n */\nexport function useFireproof(name: string | Database = \"useFireproof\", config: ConfigOpts = {}): UseFireproof {\n const database = typeof name === \"string\" ? fireproof(name, config) : name;\n\n function useDocument<T extends DocTypes>(initialDocFn: () => DocSet<T>): UseDocumentResult<T> {\n // We purposely refetch the docId everytime to check if it has changed\n const docId = initialDocFn()._id ?? \"\";\n\n // We do not want to force consumers to memoize their initial document so we do it for them.\n // We use the stringified generator function to ensure that the memoization is stable across renders.\n const initialDoc = useMemo(initialDocFn, [initialDocFn.toString()]);\n const [doc, setDoc] = useState(initialDoc);\n\n const refreshDoc = useCallback(async () => {\n // todo add option for mvcc checks\n const doc = docId ? await database.get<T>(docId).catch(() => initialDocFn()) : initialDocFn();\n setDoc(doc);\n }, [docId]);\n\n const saveDoc: StoreDocFn<T> = useCallback(\n async (existingDoc) => {\n const res = await database.put(existingDoc ?? doc);\n // If the document was created, then we need to update the local state with the new `_id`\n if (!existingDoc && !doc._id) setDoc((d) => ({ ...d, _id: res.id }));\n return res;\n },\n [doc],\n );\n\n const deleteDoc: DeleteDocFn<T> = useCallback(\n async (existingDoc) => {\n const id = existingDoc?._id ?? docId;\n const doc = await database.get<T>(id).catch(() => undefined);\n if (!doc) throw database.logger.Error().Str(\"id\", id).Msg(`Document not found`).AsError();\n const res = await database.del(id);\n setDoc(initialDoc);\n return res;\n },\n [docId, initialDoc],\n );\n\n const updateDoc: UpdateDocFn<T> = useCallback(\n (newDoc, opts = { replace: false, reset: false }) => {\n if (!newDoc) return void (opts.reset ? setDoc(initialDoc) : refreshDoc());\n setDoc((d) => (opts.replace ? (newDoc as DocWithId<T>) : { ...d, ...newDoc }));\n },\n [refreshDoc, initialDoc],\n );\n\n useEffect(() => {\n if (!docId) return;\n return database.subscribe((changes) => {\n if (changes.find((c) => c._id === docId)) {\n void refreshDoc(); // todo use change.value\n }\n });\n }, [docId, refreshDoc]);\n\n useEffect(() => {\n void refreshDoc();\n }, [refreshDoc]);\n\n return [{ _id: docId, ...doc }, updateDoc, saveDoc, deleteDoc];\n }\n\n function useLiveQuery<T extends DocTypes, K extends IndexKeyType = string, R extends DocFragment = T>(\n mapFn: MapFn<T> | string,\n query = {},\n initialRows: IndexRow<K, T, R>[] = [],\n ): LiveQueryResult<T, K, R> {\n const [result, setResult] = useState<LiveQueryResult<T, K, R>>(() => ({\n rows: initialRows,\n docs: initialRows.map((r) => r.doc).filter((r): r is DocWithId<T> => !!r),\n }));\n\n const queryString = useMemo(() => JSON.stringify(query), [query]);\n const mapFnString = useMemo(() => mapFn.toString(), [mapFn]);\n\n const refreshRows = useCallback(async () => {\n const res = await database.query<K, T, R>(mapFn, query);\n setResult({ ...res, docs: res.rows.map((r) => r.doc as DocWithId<T>) });\n }, [mapFnString, queryString]);\n\n useEffect(() => {\n refreshRows(); // Initial data fetch\n return database.subscribe(refreshRows);\n }, [refreshRows]);\n\n return result;\n }\n\n function useAllDocs<T extends DocTypes>(query: AllDocsQueryOpts = {}): AllDocsResult<T> {\n const [result, setResult] = useState<AllDocsResult<T>>({\n docs: [],\n });\n\n const queryString = useMemo(() => JSON.stringify(query), [query]);\n\n const refreshRows = useCallback(async () => {\n const res = await database.allDocs<T>(query);\n setResult({ ...res, docs: res.rows.map((r) => r.value as DocWithId<T>) });\n }, [queryString]);\n\n useEffect(() => {\n refreshRows(); // Initial data fetch\n return database.subscribe(refreshRows);\n }, [refreshRows]);\n\n return result;\n }\n\n function useChanges<T extends DocTypes>(since: ClockHead = [], opts: ChangesOptions = {}): ChangesResult<T> {\n const [result, setResult] = useState<ChangesResult<T>>({\n docs: [],\n });\n\n const queryString = useMemo(() => JSON.stringify(opts), [opts]);\n\n const refreshRows = useCallback(async () => {\n const res = await database.changes<T>(since, opts);\n setResult({ ...res, docs: res.rows.map((r) => r.value as DocWithId<T>) });\n }, [since, queryString]);\n\n useEffect(() => {\n refreshRows(); // Initial data fetch\n return database.subscribe(refreshRows);\n }, [refreshRows]);\n\n return result;\n }\n\n return { database, useLiveQuery, useDocument, useAllDocs, useChanges };\n}\n","import { Database, DocTypes, DocWithId } from \"@fireproof/core\";\n\nimport { UseDocument, UseDocumentResult, useFireproof } from \"./useFireproof\";\n\nexport interface TLUseDocument {\n <T extends DocTypes>(initialDoc: DocWithId<T>): UseDocumentResult<T>;\n database: Database;\n}\n\nfunction topLevelUseDocument(...args: Parameters<UseDocument>) {\n const { useDocument, database } = useFireproof();\n (topLevelUseDocument as TLUseDocument).database = database;\n return useDocument(...args);\n}\n\n/**\n * ## Summary\n *\n * React hook that provides the ability to create new Fireproof documents. The creation occurs when\n * you do not pass in an `_id` as part of your initial document -- the database will assign a new one when\n * you call the provided `save` handler This uses the default database named `useFireproof` under the hood which you can also\n * access via the `database` accessor.\n *\n * ## Usage\n *\n * ```tsx\n * const [todo, setTodo, saveTodo] = useDocument(() => ({\n * text: '',\n * date: Date.now(),\n * completed: false\n * }))\n *\n * const [doc, setDoc, saveDoc] = useDocument(() => ({\n * _id: `${props.customerId}-profile`, // you can imagine `customerId` as a prop passed in\n * name: \"\",\n * company: \"\",\n * startedAt: Date.now()\n * }))\n *\n * const database = useDocument.database; // underlying \"useFireproof\" database accessor\n * ```\n *\n * ## Overview\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useLiveQuery` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\nexport const useDocument = topLevelUseDocument as TLUseDocument;\n","import { Database, DocFragment, DocTypes, IndexKeyType } from \"@fireproof/core\";\n\nimport { LiveQueryResult, useFireproof, UseLiveQuery } from \"./useFireproof\";\n\nexport interface TLUseLiveQuery {\n <T extends DocTypes, K extends IndexKeyType, R extends DocFragment = T>(\n ...args: Parameters<UseLiveQuery>\n ): LiveQueryResult<T, K, R>;\n database: Database;\n}\n\nfunction topLevelUseLiveQuery(...args: Parameters<UseLiveQuery>) {\n const { useLiveQuery, database } = useFireproof();\n (topLevelUseLiveQuery as TLUseLiveQuery).database = database;\n return useLiveQuery(...args);\n}\n\n/**\n * ## Summary\n * React hook that provides access to live query results, enabling real-time updates in your app. This uses\n * the default database named \"useFireproof\" under the hood which you can also access via the `database` accessor.\n *\n * ## Usage\n * ```tsx\n * const results = useLiveQuery(\"date\"); // using string\n * const results = useLiveQuery((doc) => doc.date)); // using map function\n * const database = useLiveQuery.database; // underlying \"useFireproof\" database accessor\n * ```\n *\n * ## Overview\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useLiveQuery` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\nexport const useLiveQuery = topLevelUseLiveQuery as TLUseLiveQuery;\n","import { Database, DocTypes } from \"@fireproof/core\";\n\nimport { AllDocsResult, useFireproof, UseAllDocs } from \"./useFireproof\";\n\nexport interface TLUseAllDocs {\n <T extends DocTypes>(...args: Parameters<UseAllDocs>): AllDocsResult<T>;\n database: Database;\n}\n\nfunction topLevelUseAllDocs(...args: Parameters<UseAllDocs>) {\n const { useAllDocs, database } = useFireproof();\n (topLevelUseAllDocs as TLUseAllDocs).database = database;\n return useAllDocs(...args);\n}\n\n/**\n * ## Summary\n * React hook that provides access to all documents in the database, sorted by `_id`.\n *\n * ## Usage\n * ```tsx\n * const result = useAllDocs({ limit: 10, descending: true }); // with options\n * const result = useAllDocs(); // without options\n * const database = useAllDocs.database; // underlying \"useFireproof\" database accessor\n * ```\n *\n * ## Overview\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useAllDocs` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\nexport const useAllDocs = topLevelUseAllDocs as TLUseAllDocs;\n","import { Database, DocTypes } from \"@fireproof/core\";\n\nimport { ChangesResult, useFireproof, UseChanges } from \"./useFireproof\";\n\nexport interface TLUseChanges {\n <T extends DocTypes>(...args: Parameters<UseChanges>): ChangesResult<T>;\n database: Database;\n}\n\nfunction topLevelUseChanges(...args: Parameters<UseChanges>) {\n const { useChanges, database } = useFireproof();\n (topLevelUseChanges as TLUseChanges).database = database;\n return useChanges(...args);\n}\n\n/**\n * ## Summary\n * React hook that provides access to all new documents in the database added since the last time the changes was called\n *\n * ## Usage\n * ```tsx\n * const result = useChanges(prevresult.clock,{limit:10}); // with options\n * const result = useChanges(); // without options\n * const database = useChanges.database; // underlying \"useFireproof\" database accessor\n * ```\n *\n * ## Overview\n * Changes made via remote sync peers, or other members of your cloud replica group will appear automatically\n * when you use the `useAllDocs`, `useChanges` and `useDocument` APIs. By default, Fireproof stores data in the browser's\n * local storage.\n */\nexport const useChanges = topLevelUseChanges as TLUseChanges;\n"],"mappings":"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","names":["useDocument","doc","useLiveQuery","useAllDocs","useChanges","useDocument","useLiveQuery","useAllDocs","useChanges"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"inputs":{"src/react/useFireproof.ts":{"bytes":11095,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"../types","kind":"import-statement","external":true}],"format":"esm"},"src/react/useDocument.ts":{"bytes":1677,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"src/react/useFireproof.ts","kind":"import-statement","original":"./useFireproof"}],"format":"esm"},"src/react/useLiveQuery.ts":{"bytes":1406,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"src/react/useFireproof.ts","kind":"import-statement","original":"./useFireproof"}],"format":"esm"},"src/react/useAllDocs.ts":{"bytes":1143,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"src/react/useFireproof.ts","kind":"import-statement","original":"./useFireproof"}],"format":"esm"},"src/react/useChanges.ts":{"bytes":1188,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"src/react/useFireproof.ts","kind":"import-statement","original":"./useFireproof"}],"format":"esm"},"src/react/index.ts":{"bytes":424,"imports":[{"path":"src/react/useDocument.ts","kind":"import-statement","original":"./useDocument"},{"path":"src/react/useFireproof.ts","kind":"import-statement","original":"./useFireproof"},{"path":"src/react/useLiveQuery.ts","kind":"import-statement","original":"./useLiveQuery"},{"path":"src/react/useAllDocs.ts","kind":"import-statement","original":"./useAllDocs"},{"path":"src/react/useChanges.ts","kind":"import-statement","original":"./useChanges"}],"format":"esm"}},"outputs":{"dist/fireproof-core/react/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":21721},"dist/fireproof-core/react/index.cjs":{"imports":[{"path":"@fireproof/core","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true}],"exports":[],"entryPoint":"src/react/index.ts","inputs":{"src/react/index.ts":{"bytesInOutput":305},"src/react/useFireproof.ts":{"bytesInOutput":4179},"src/react/useDocument.ts":{"bytesInOutput":222},"src/react/useLiveQuery.ts":{"bytesInOutput":229},"src/react/useAllDocs.ts":{"bytesInOutput":215},"src/react/useChanges.ts":{"bytesInOutput":215}},"bytes":6332}}}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"inputs":{"src/react/useFireproof.ts":{"bytes":11095,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"../types","kind":"import-statement","external":true}],"format":"esm"},"src/react/useDocument.ts":{"bytes":1677,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"src/react/useFireproof.ts","kind":"import-statement","original":"./useFireproof"}],"format":"esm"},"src/react/useLiveQuery.ts":{"bytes":1406,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"src/react/useFireproof.ts","kind":"import-statement","original":"./useFireproof"}],"format":"esm"},"src/react/useAllDocs.ts":{"bytes":1143,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"src/react/useFireproof.ts","kind":"import-statement","original":"./useFireproof"}],"format":"esm"},"src/react/useChanges.ts":{"bytes":1188,"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"src/react/useFireproof.ts","kind":"import-statement","original":"./useFireproof"}],"format":"esm"},"src/react/index.ts":{"bytes":424,"imports":[{"path":"src/react/useDocument.ts","kind":"import-statement","original":"./useDocument"},{"path":"src/react/useFireproof.ts","kind":"import-statement","original":"./useFireproof"},{"path":"src/react/useLiveQuery.ts","kind":"import-statement","original":"./useLiveQuery"},{"path":"src/react/useAllDocs.ts","kind":"import-statement","original":"./useAllDocs"},{"path":"src/react/useChanges.ts","kind":"import-statement","original":"./useChanges"}],"format":"esm"}},"outputs":{"dist/fireproof-core/react/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":21167},"dist/fireproof-core/react/index.js":{"imports":[{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["FireproofCtx","useAllDocs","useChanges","useDocument","useFireproof","useLiveQuery"],"entryPoint":"src/react/index.ts","inputs":{"src/react/useFireproof.ts":{"bytesInOutput":3813},"src/react/useDocument.ts":{"bytesInOutput":222},"src/react/index.ts":{"bytesInOutput":0},"src/react/useLiveQuery.ts":{"bytesInOutput":229},"src/react/useAllDocs.ts":{"bytesInOutput":215},"src/react/useChanges.ts":{"bytesInOutput":215}},"bytes":4940}}}
|