@electric-sql/pglite-react 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -3
- package/dist/index.d.ts +13 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -10,7 +10,8 @@ npm install @electric-sql/pglite-react
|
|
|
10
10
|
|
|
11
11
|
The hooks this package provides are:
|
|
12
12
|
|
|
13
|
-
- [PGliteProvider](https://pglite.dev/docs/framework-hooks#pgliteprovider): A Provider component to pass a PGlite instance to all child components for use with the other hooks.
|
|
14
|
-
- [usePGlite](https://pglite.dev/docs/framework-hooks#usepglite): Retrieve the provided PGlite instance.
|
|
15
|
-
- [
|
|
16
|
-
- [
|
|
13
|
+
- [PGliteProvider](https://pglite.dev/docs/framework-hooks/react#pgliteprovider): A Provider component to pass a PGlite instance to all child components for use with the other hooks.
|
|
14
|
+
- [usePGlite](https://pglite.dev/docs/framework-hooks/react#usepglite): Retrieve the provided PGlite instance.
|
|
15
|
+
- [makePGliteProvider](https://pglite.dev/docs/framework-hooks/react#makepgliteprovider): Create typed instances of `PGliteProvider` and `usePGlite`.
|
|
16
|
+
- [useLiveQuery](https://pglite.dev/docs/framework-hooks/react#uselivequery): Reactively re-render your component whenever the results of a live query change
|
|
17
|
+
- [useLiveIncrementalQuery](https://pglite.dev/docs/framework-hooks/react#useliveincrementalquery): Reactively re-render your component whenever the results of a live query change by offloading the diff to PGlite
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var l=Object.defineProperty;var
|
|
1
|
+
"use strict";var l=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var w=Object.prototype.hasOwnProperty;var R=(t,e)=>{for(var n in e)l(t,n,{get:e[n],enumerable:!0})},a=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of x(e))!w.call(t,i)&&i!==n&&l(t,i,{get:()=>e[i],enumerable:!(r=m(e,i))||r.enumerable});return t};var h=t=>a(l({},"__esModule",{value:!0}),t);var W={};R(W,{PGliteProvider:()=>L,makePGliteProvider:()=>c,useLiveIncrementalQuery:()=>k,useLiveQuery:()=>g,usePGlite:()=>d});module.exports=h(W);var o=require("react"),T=require("react/jsx-runtime");function c(){let t=(0,o.createContext)(void 0);return{usePGlite:e=>{let n=(0,o.useContext)(t);if(e)return e;if(!n)throw new Error("No PGlite instance found, use PGliteProvider to provide one");return n},PGliteProvider:({children:e,db:n})=>(0,T.jsx)(t.Provider,{value:n,children:e})}}var{PGliteProvider:L,usePGlite:d}=c();var s=require("react");function v(t,e,n){let r=d(),[i,G]=(0,s.useState)();return(0,s.useEffect)(()=>{let P=!1,f=u=>{P||G(u)},p=n!==void 0?r.live.incrementalQuery(t,e,n,f):r.live.query(t,e,f);return()=>{P=!0,p.then(({unsubscribe:u})=>u())}},[r,n,t,...e??[]]),i&&{rows:i.rows,fields:i.fields}}function g(t,e){return v(t,e)}function k(t,e,n){return v(t,e,n)}0&&(module.exports={PGliteProvider,makePGliteProvider,useLiveIncrementalQuery,useLiveQuery,usePGlite});
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/provider.tsx","../src/hooks.ts"],"sourcesContent":["export * from './provider'\nexport * from './hooks'\n","import React, { createContext, useContext } from 'react'\nimport { PGliteWithLive } from '@electric-sql/pglite/live'\n\ninterface Props<T extends PGliteWithLive> {\n children?: React.ReactNode\n db?: T\n}\n\
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/provider.tsx","../src/hooks.ts"],"sourcesContent":["export * from './provider'\nexport * from './hooks'\n","import React, { createContext, useContext } from 'react'\nimport { PGliteWithLive } from '@electric-sql/pglite/live'\n\ninterface Props<T extends PGliteWithLive> {\n children?: React.ReactNode\n db?: T\n}\n\ntype PGliteProvider<T extends PGliteWithLive> = (props: Props<T>) => JSX.Element\ntype UsePGlite<T extends PGliteWithLive> = (db?: T) => T\n\ninterface PGliteProviderSet<T extends PGliteWithLive> {\n PGliteProvider: PGliteProvider<T>\n usePGlite: UsePGlite<T>\n}\n\n/**\n * Create a typed set of {@link PGliteProvider} and {@link usePGlite}.\n */\nfunction makePGliteProvider<T extends PGliteWithLive>(): PGliteProviderSet<T> {\n const ctx = createContext<T | undefined>(undefined)\n return {\n usePGlite: (db?: T) => {\n const dbProvided = useContext(ctx)\n\n // allow providing a db explicitly\n if (db) return db\n\n if (!dbProvided)\n throw new Error(\n 'No PGlite instance found, use PGliteProvider to provide one',\n )\n\n return dbProvided\n },\n PGliteProvider: ({ children, db }: Props<T>) => {\n return <ctx.Provider value={db}>{children}</ctx.Provider>\n },\n }\n}\n\nconst { PGliteProvider, usePGlite } = makePGliteProvider<PGliteWithLive>()\n\nexport { makePGliteProvider, PGliteProvider, usePGlite }\n","import { useEffect, useState } from 'react'\nimport { Results } from '@electric-sql/pglite'\nimport { usePGlite } from './provider'\n\nfunction useLiveQueryImpl<T = { [key: string]: unknown }>(\n query: string,\n params: unknown[] | undefined | null,\n key?: string,\n): Omit<Results<T>, 'affectedRows'> | undefined {\n const db = usePGlite()\n const [results, setResults] = useState<Results<T>>()\n useEffect(() => {\n let cancelled = false\n const cb = (results: Results<T>) => {\n if (cancelled) return\n setResults(results)\n }\n const ret =\n key !== undefined\n ? db.live.incrementalQuery<T>(query, params, key, cb)\n : db.live.query<T>(query, params, cb)\n\n return () => {\n cancelled = true\n ret.then(({ unsubscribe }) => unsubscribe())\n }\n\n // Using spread operator for params to avoid serializing it to JSON\n // or performing more complicated array equality checks\n // eslint-disable-next-line react-compiler/react-compiler\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [db, key, query, ...(params ?? [])])\n return (\n results && {\n rows: results.rows,\n fields: results.fields,\n }\n )\n}\n\nexport function useLiveQuery<T = { [key: string]: unknown }>(\n query: string,\n params: unknown[] | undefined | null,\n): Results<T> | undefined {\n return useLiveQueryImpl<T>(query, params)\n}\n\nexport function useLiveIncrementalQuery<T = { [key: string]: unknown }>(\n query: string,\n params: unknown[] | undefined | null,\n key: string,\n): Results<T> | undefined {\n return useLiveQueryImpl<T>(query, params, key)\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,EAAA,uBAAAC,EAAA,4BAAAC,EAAA,iBAAAC,EAAA,cAAAC,IAAA,eAAAC,EAAAP,GCAA,IAAAQ,EAAiD,iBAoCpCC,EAAA,6BAjBb,SAASC,GAAqE,CAC5E,IAAMC,KAAM,iBAA6B,MAAS,EAClD,MAAO,CACL,UAAYC,GAAW,CACrB,IAAMC,KAAa,cAAWF,CAAG,EAGjC,GAAIC,EAAI,OAAOA,EAEf,GAAI,CAACC,EACH,MAAM,IAAI,MACR,6DACF,EAEF,OAAOA,CACT,EACA,eAAgB,CAAC,CAAE,SAAAC,EAAU,GAAAF,CAAG,OACvB,OAACD,EAAI,SAAJ,CAAa,MAAOC,EAAK,SAAAE,EAAS,CAE9C,CACF,CAEA,GAAM,CAAE,eAAAC,EAAgB,UAAAC,CAAU,EAAIN,EAAmC,ECzCzE,IAAAO,EAAoC,iBAIpC,SAASC,EACPC,EACAC,EACAC,EAC8C,CAC9C,IAAMC,EAAKC,EAAU,EACf,CAACC,EAASC,CAAU,KAAI,YAAqB,EACnD,sBAAU,IAAM,CACd,IAAIC,EAAY,GACVC,EAAMH,GAAwB,CAC9BE,GACJD,EAAWD,CAAO,CACpB,EACMI,EACJP,IAAQ,OACJC,EAAG,KAAK,iBAAoBH,EAAOC,EAAQC,EAAKM,CAAE,EAClDL,EAAG,KAAK,MAASH,EAAOC,EAAQO,CAAE,EAExC,MAAO,IAAM,CACXD,EAAY,GACZE,EAAI,KAAK,CAAC,CAAE,YAAAC,CAAY,IAAMA,EAAY,CAAC,CAC7C,CAMF,EAAG,CAACP,EAAID,EAAKF,EAAO,GAAIC,GAAU,CAAC,CAAE,CAAC,EAEpCI,GAAW,CACT,KAAMA,EAAQ,KACd,OAAQA,EAAQ,MAClB,CAEJ,CAEO,SAASM,EACdX,EACAC,EACwB,CACxB,OAAOF,EAAoBC,EAAOC,CAAM,CAC1C,CAEO,SAASW,EACdZ,EACAC,EACAC,EACwB,CACxB,OAAOH,EAAoBC,EAAOC,EAAQC,CAAG,CAC/C","names":["src_exports","__export","PGliteProvider","makePGliteProvider","useLiveIncrementalQuery","useLiveQuery","usePGlite","__toCommonJS","import_react","import_jsx_runtime","makePGliteProvider","ctx","db","dbProvided","children","PGliteProvider","usePGlite","import_react","useLiveQueryImpl","query","params","key","db","usePGlite","results","setResults","cancelled","cb","ret","unsubscribe","useLiveQuery","useLiveIncrementalQuery"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -6,8 +6,18 @@ interface Props<T extends PGliteWithLive> {
|
|
|
6
6
|
children?: React.ReactNode;
|
|
7
7
|
db?: T;
|
|
8
8
|
}
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
type UsePGlite<T extends PGliteWithLive> = (db?: T) => T;
|
|
10
|
+
interface PGliteProviderSet<T extends PGliteWithLive> {
|
|
11
|
+
PGliteProvider: PGliteProvider<T>;
|
|
12
|
+
usePGlite: UsePGlite<T>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Create a typed set of {@link PGliteProvider} and {@link usePGlite}.
|
|
16
|
+
*/
|
|
17
|
+
declare function makePGliteProvider<T extends PGliteWithLive>(): PGliteProviderSet<T>;
|
|
18
|
+
type PGliteProvider<T extends PGliteWithLive> = (props: Props<T>) => JSX.Element;
|
|
19
|
+
declare const PGliteProvider: PGliteProvider<PGliteWithLive>;
|
|
20
|
+
declare const usePGlite: UsePGlite<PGliteWithLive>;
|
|
11
21
|
|
|
12
22
|
declare function useLiveQuery<T = {
|
|
13
23
|
[key: string]: unknown;
|
|
@@ -16,4 +26,4 @@ declare function useLiveIncrementalQuery<T = {
|
|
|
16
26
|
[key: string]: unknown;
|
|
17
27
|
}>(query: string, params: unknown[] | undefined | null, key: string): Results<T> | undefined;
|
|
18
28
|
|
|
19
|
-
export { PGliteProvider, useLiveIncrementalQuery, useLiveQuery, usePGlite };
|
|
29
|
+
export { PGliteProvider, makePGliteProvider, useLiveIncrementalQuery, useLiveQuery, usePGlite };
|
package/dist/index.d.ts
CHANGED
|
@@ -6,8 +6,18 @@ interface Props<T extends PGliteWithLive> {
|
|
|
6
6
|
children?: React.ReactNode;
|
|
7
7
|
db?: T;
|
|
8
8
|
}
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
type UsePGlite<T extends PGliteWithLive> = (db?: T) => T;
|
|
10
|
+
interface PGliteProviderSet<T extends PGliteWithLive> {
|
|
11
|
+
PGliteProvider: PGliteProvider<T>;
|
|
12
|
+
usePGlite: UsePGlite<T>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Create a typed set of {@link PGliteProvider} and {@link usePGlite}.
|
|
16
|
+
*/
|
|
17
|
+
declare function makePGliteProvider<T extends PGliteWithLive>(): PGliteProviderSet<T>;
|
|
18
|
+
type PGliteProvider<T extends PGliteWithLive> = (props: Props<T>) => JSX.Element;
|
|
19
|
+
declare const PGliteProvider: PGliteProvider<PGliteWithLive>;
|
|
20
|
+
declare const usePGlite: UsePGlite<PGliteWithLive>;
|
|
11
21
|
|
|
12
22
|
declare function useLiveQuery<T = {
|
|
13
23
|
[key: string]: unknown;
|
|
@@ -16,4 +26,4 @@ declare function useLiveIncrementalQuery<T = {
|
|
|
16
26
|
[key: string]: unknown;
|
|
17
27
|
}>(query: string, params: unknown[] | undefined | null, key: string): Results<T> | undefined;
|
|
18
28
|
|
|
19
|
-
export { PGliteProvider, useLiveIncrementalQuery, useLiveQuery, usePGlite };
|
|
29
|
+
export { PGliteProvider, makePGliteProvider, useLiveIncrementalQuery, useLiveQuery, usePGlite };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createContext as
|
|
1
|
+
import{createContext as c,useContext as T}from"react";import{jsx as G}from"react/jsx-runtime";function v(){let t=c(void 0);return{usePGlite:e=>{let n=T(t);if(e)return e;if(!n)throw new Error("No PGlite instance found, use PGliteProvider to provide one");return n},PGliteProvider:({children:e,db:n})=>G(t.Provider,{value:n,children:e})}}var{PGliteProvider:R,usePGlite:l}=v();import{useEffect as p,useState as m}from"react";function d(t,e,n){let i=l(),[r,P]=m();return p(()=>{let s=!1,u=o=>{s||P(o)},f=n!==void 0?i.live.incrementalQuery(t,e,n,u):i.live.query(t,e,u);return()=>{s=!0,f.then(({unsubscribe:o})=>o())}},[i,n,t,...e??[]]),r&&{rows:r.rows,fields:r.fields}}function k(t,e){return d(t,e)}function W(t,e,n){return d(t,e,n)}export{R as PGliteProvider,v as makePGliteProvider,W as useLiveIncrementalQuery,k as useLiveQuery,l as usePGlite};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/provider.tsx","../src/hooks.ts"],"sourcesContent":["import React, { createContext, useContext } from 'react'\nimport { PGliteWithLive } from '@electric-sql/pglite/live'\n\ninterface Props<T extends PGliteWithLive> {\n children?: React.ReactNode\n db?: T\n}\n\
|
|
1
|
+
{"version":3,"sources":["../src/provider.tsx","../src/hooks.ts"],"sourcesContent":["import React, { createContext, useContext } from 'react'\nimport { PGliteWithLive } from '@electric-sql/pglite/live'\n\ninterface Props<T extends PGliteWithLive> {\n children?: React.ReactNode\n db?: T\n}\n\ntype PGliteProvider<T extends PGliteWithLive> = (props: Props<T>) => JSX.Element\ntype UsePGlite<T extends PGliteWithLive> = (db?: T) => T\n\ninterface PGliteProviderSet<T extends PGliteWithLive> {\n PGliteProvider: PGliteProvider<T>\n usePGlite: UsePGlite<T>\n}\n\n/**\n * Create a typed set of {@link PGliteProvider} and {@link usePGlite}.\n */\nfunction makePGliteProvider<T extends PGliteWithLive>(): PGliteProviderSet<T> {\n const ctx = createContext<T | undefined>(undefined)\n return {\n usePGlite: (db?: T) => {\n const dbProvided = useContext(ctx)\n\n // allow providing a db explicitly\n if (db) return db\n\n if (!dbProvided)\n throw new Error(\n 'No PGlite instance found, use PGliteProvider to provide one',\n )\n\n return dbProvided\n },\n PGliteProvider: ({ children, db }: Props<T>) => {\n return <ctx.Provider value={db}>{children}</ctx.Provider>\n },\n }\n}\n\nconst { PGliteProvider, usePGlite } = makePGliteProvider<PGliteWithLive>()\n\nexport { makePGliteProvider, PGliteProvider, usePGlite }\n","import { useEffect, useState } from 'react'\nimport { Results } from '@electric-sql/pglite'\nimport { usePGlite } from './provider'\n\nfunction useLiveQueryImpl<T = { [key: string]: unknown }>(\n query: string,\n params: unknown[] | undefined | null,\n key?: string,\n): Omit<Results<T>, 'affectedRows'> | undefined {\n const db = usePGlite()\n const [results, setResults] = useState<Results<T>>()\n useEffect(() => {\n let cancelled = false\n const cb = (results: Results<T>) => {\n if (cancelled) return\n setResults(results)\n }\n const ret =\n key !== undefined\n ? db.live.incrementalQuery<T>(query, params, key, cb)\n : db.live.query<T>(query, params, cb)\n\n return () => {\n cancelled = true\n ret.then(({ unsubscribe }) => unsubscribe())\n }\n\n // Using spread operator for params to avoid serializing it to JSON\n // or performing more complicated array equality checks\n // eslint-disable-next-line react-compiler/react-compiler\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [db, key, query, ...(params ?? [])])\n return (\n results && {\n rows: results.rows,\n fields: results.fields,\n }\n )\n}\n\nexport function useLiveQuery<T = { [key: string]: unknown }>(\n query: string,\n params: unknown[] | undefined | null,\n): Results<T> | undefined {\n return useLiveQueryImpl<T>(query, params)\n}\n\nexport function useLiveIncrementalQuery<T = { [key: string]: unknown }>(\n query: string,\n params: unknown[] | undefined | null,\n key: string,\n): Results<T> | undefined {\n return useLiveQueryImpl<T>(query, params, key)\n}\n"],"mappings":"AAAA,OAAgB,iBAAAA,EAAe,cAAAC,MAAkB,QAoCpC,cAAAC,MAAA,oBAjBb,SAASC,GAAqE,CAC5E,IAAMC,EAAMJ,EAA6B,MAAS,EAClD,MAAO,CACL,UAAYK,GAAW,CACrB,IAAMC,EAAaL,EAAWG,CAAG,EAGjC,GAAIC,EAAI,OAAOA,EAEf,GAAI,CAACC,EACH,MAAM,IAAI,MACR,6DACF,EAEF,OAAOA,CACT,EACA,eAAgB,CAAC,CAAE,SAAAC,EAAU,GAAAF,CAAG,IACvBH,EAACE,EAAI,SAAJ,CAAa,MAAOC,EAAK,SAAAE,EAAS,CAE9C,CACF,CAEA,GAAM,CAAE,eAAAC,EAAgB,UAAAC,CAAU,EAAIN,EAAmC,ECzCzE,OAAS,aAAAO,EAAW,YAAAC,MAAgB,QAIpC,SAASC,EACPC,EACAC,EACAC,EAC8C,CAC9C,IAAMC,EAAKC,EAAU,EACf,CAACC,EAASC,CAAU,EAAIC,EAAqB,EACnD,OAAAC,EAAU,IAAM,CACd,IAAIC,EAAY,GACVC,EAAML,GAAwB,CAC9BI,GACJH,EAAWD,CAAO,CACpB,EACMM,EACJT,IAAQ,OACJC,EAAG,KAAK,iBAAoBH,EAAOC,EAAQC,EAAKQ,CAAE,EAClDP,EAAG,KAAK,MAASH,EAAOC,EAAQS,CAAE,EAExC,MAAO,IAAM,CACXD,EAAY,GACZE,EAAI,KAAK,CAAC,CAAE,YAAAC,CAAY,IAAMA,EAAY,CAAC,CAC7C,CAMF,EAAG,CAACT,EAAID,EAAKF,EAAO,GAAIC,GAAU,CAAC,CAAE,CAAC,EAEpCI,GAAW,CACT,KAAMA,EAAQ,KACd,OAAQA,EAAQ,MAClB,CAEJ,CAEO,SAASQ,EACdb,EACAC,EACwB,CACxB,OAAOF,EAAoBC,EAAOC,CAAM,CAC1C,CAEO,SAASa,EACdd,EACAC,EACAC,EACwB,CACxB,OAAOH,EAAoBC,EAAOC,EAAQC,CAAG,CAC/C","names":["createContext","useContext","jsx","makePGliteProvider","ctx","db","dbProvided","children","PGliteProvider","usePGlite","useEffect","useState","useLiveQueryImpl","query","params","key","db","usePGlite","results","setResults","useState","useEffect","cancelled","cb","ret","unsubscribe","useLiveQuery","useLiveIncrementalQuery"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@electric-sql/pglite-react",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Hooks for using PGlite",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
"types": "dist/index.d.ts",
|
|
27
27
|
"exports": {
|
|
28
28
|
".": {
|
|
29
|
-
"types": "./
|
|
30
|
-
"import": "./
|
|
31
|
-
"require": "./
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"import": "./dist/index.js",
|
|
31
|
+
"require": "./dist/index.cjs"
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
34
|
"files": [
|
|
@@ -47,11 +47,11 @@
|
|
|
47
47
|
"react": "^18.2.0",
|
|
48
48
|
"react-dom": "^18.2.0",
|
|
49
49
|
"vitest": "^2.0.5",
|
|
50
|
-
"@electric-sql/pglite": "0.2.
|
|
50
|
+
"@electric-sql/pglite": "0.2.1"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
53
|
"react": "^18.0.0",
|
|
54
|
-
"@electric-sql/pglite": "^0.2.
|
|
54
|
+
"@electric-sql/pglite": "^0.2.1"
|
|
55
55
|
},
|
|
56
56
|
"scripts": {
|
|
57
57
|
"build": "tsup",
|