diff --git a/coverage.json b/coverage.json index 2699a5c455..344f72ae9c 100644 --- a/coverage.json +++ b/coverage.json @@ -1 +1 @@ -{"tests":6851,"assertions":32075,"lines":{"total":2380,"covered":2380,"skipped":0,"pct":100},"statements":{"total":2567,"covered":2567,"skipped":0,"pct":100},"functions":{"total":1006,"covered":1006,"skipped":0,"pct":100},"branches":{"total":951,"covered":951,"skipped":0,"pct":100},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":100}} \ No newline at end of file +{"tests":6851,"assertions":32074,"lines":{"total":2380,"covered":2380,"skipped":0,"pct":100},"statements":{"total":2567,"covered":2567,"skipped":0,"pct":100},"functions":{"total":1006,"covered":1006,"skipped":0,"pct":100},"branches":{"total":951,"covered":951,"skipped":0,"pct":100},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":100}} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 93725cac9d..231f3d6af0 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,4 +1,4 @@ -TinyBase
TinyBase logoTinyBase
Large TinyBase logo

The reactive data store for local-first apps.

NEW! v5.1 release

"The One You Can Sync... with a server!"

Get started

Try the demos

Read the docs


It's Reactive

TinyBase lets you listen to changes made to any part of your data. This means your app will be fast, since you only spend rendering cycles on things that change. The optional bindings to React and pre-built components let you easily build fully reactive UIs on top of TinyBase. You even get a built-in undo stack, and developer tools!

It's Database-Like

Consumer app? Enterprise app? Or even a game? Model key-value data and tabular data with optional typed schematization, whatever its data structures. There are built-in indexing, metric aggregation, and tabular relationships APIs - and a powerful query engine to select, join, filter, and group data (reactively!) without SQL.

It Synchronizes

TinyBase has native CRDT support, meaning that you can deterministically synchronize and merge data across multiple sources, clients, and servers. And although TinyBase is an in-memory data store, but you can easily persist your data to file, browser storage, IndexedDB, SQLite databases, and more.

It's Built For A Local-First World

TinyBase works anywhere that JavaScript does, but it's especially great for local-first apps: where data is stored locally on the user's device and that can be run offline. It's tiny by name, tiny by nature: just 5.3kB - 12.7kB and with no dependencies - yet 100% tested, fully documented, and of course, open source!


TinyBase works great on its own, but also plays well with friends!

React
PartyKit
Expo SQLite
ElectricSQL
SQLite
Turso
PowerSync
IndexedDB
YJS
CR-SQLite
Automerge



Start with a simple key-value store.

Creating a Store requires just a simple call to the createStore function. Once you have one, you can easily set Values in it by unique Id. And of course you can easily get them back out again.

Read more about using keyed value data in The Basics guide.

import {createStore} from 'tinybase';
+TinyBase
TinyBase logoTinyBase
Large TinyBase logo

The reactive data store for local-first apps.

NEW! v5.1 release

"The One You Can Sync... with a server!"

Get started

Try the demos

Read the docs


It's Reactive

TinyBase lets you listen to changes made to any part of your data. This means your app will be fast, since you only spend rendering cycles on things that change. The optional bindings to React and pre-built components let you easily build fully reactive UIs on top of TinyBase. You even get a built-in undo stack, and developer tools!

It's Database-Like

Consumer app? Enterprise app? Or even a game? Model key-value data and tabular data with optional typed schematization, whatever its data structures. There are built-in indexing, metric aggregation, and tabular relationships APIs - and a powerful query engine to select, join, filter, and group data (reactively!) without SQL.

It Synchronizes

TinyBase has native CRDT support, meaning that you can deterministically synchronize and merge data across multiple sources, clients, and servers. And although TinyBase is an in-memory data store, but you can easily persist your data to file, browser storage, IndexedDB, SQLite databases, and more.

It's Built For A Local-First World

TinyBase works anywhere that JavaScript does, but it's especially great for local-first apps: where data is stored locally on the user's device and that can be run offline. It's tiny by name, tiny by nature: just 5.3kB - 12.7kB and with no dependencies - yet 100% tested, fully documented, and of course, open source!


TinyBase works great on its own, but also plays well with friends!




Start with a simple key-value store.

Creating a Store requires just a simple call to the createStore function. Once you have one, you can easily set Values in it by unique Id. And of course you can easily get them back out again.

Read more about using keyed value data in The Basics guide.

import {createStore} from 'tinybase';
 
 const store = createStore()
   .setValues({employees: 3})
@@ -227,4 +227,4 @@
 export const createShop: typeof createShopDecl = () => {
   //...
 };
-

Did we say tiny?

If you use the basic store module alone, you'll only add a gzipped 5.3kB to your app. Incrementally add the other modules as you need more functionality, or get it all for 12.7kB.

The optional ui-react module is just 4.6kB, the ui-react-dom components are another 2.5kB, and everything is super fast. Life's easy when you have zero dependencies!

Read more about how TinyBase is structured and packaged in the Architecture guide.

 Minified .js.gzSource .js
tinybase/store (minimal)5.3kB52.5kB
tinybase (complete)12.7kB130.8kB
ui-react4.6kB48.3kB
ui-react-dom2.5kB20.4kB

Well tested and documented.

TinyBase has 100.0% test coverage, including the code throughout the documentation - even on this page! The guides, demos, and API examples are designed to make it as easy as possible for you to get your TinyBase-powered app up and running.

Read more about how TinyBase is tested in the Unit Testing guide.

 TotalTestedCoverage
Lines2,3802,380100.0%
Statements2,5672,567100.0%
Functions1,0061,006100.0%
Branches951951100.0%
Tests6,851
Assertions32,075

Proud to be sponsored by:

Excited to be used by:


Get started

Try the demos

Read the docs


About

Modern apps deserve better. Why trade reactive user experiences to be able to use relational data? Or sacrifice features for bundle size? And why does the cloud do all the work anyway?

Building TinyBase was originally an interesting exercise for me in API design, minification, and documentation. But now it has taken on a life of its own, and has grown beyond my wildest expectations.

It could not have been built without these great projects and friends, and I hope you enjoy using it as much as I do building it!

The story

\ No newline at end of file +

Did we say tiny?

If you use the basic store module alone, you'll only add a gzipped 5.3kB to your app. Incrementally add the other modules as you need more functionality, or get it all for 12.7kB.

The optional ui-react module is just 4.6kB, the ui-react-dom components are another 2.5kB, and everything is super fast. Life's easy when you have zero dependencies!

Read more about how TinyBase is structured and packaged in the Architecture guide.

 Minified .js.gzSource .js
tinybase/store (minimal)5.3kB52.5kB
tinybase (complete)12.7kB130.8kB
ui-react4.6kB48.3kB
ui-react-dom2.5kB20.4kB

Well tested and documented.

TinyBase has 100.0% test coverage, including the code throughout the documentation - even on this page! The guides, demos, and API examples are designed to make it as easy as possible for you to get your TinyBase-powered app up and running.

Read more about how TinyBase is tested in the Unit Testing guide.

 TotalTestedCoverage
Lines2,3802,380100.0%
Statements2,5672,567100.0%
Functions1,0061,006100.0%
Branches951951100.0%
Tests6,851
Assertions32,074

Proud to be sponsored by:

Excited to be used by:


Get started

Try the demos

Read the docs


About

Modern apps deserve better. Why trade reactive user experiences to be able to use relational data? Or sacrifice features for bundle size? And why does the cloud do all the work anyway?

Building TinyBase was originally an interesting exercise for me in API design, minification, and documentation. But now it has taken on a life of its own, and has grown beyond my wildest expectations.

It could not have been built without these great projects and friends, and I hope you enjoy using it as much as I do building it!

The story

\ No newline at end of file diff --git a/docs/js/app.js b/docs/js/app.js index 06575f2023..aca1187655 100644 --- a/docs/js/app.js +++ b/docs/js/app.js @@ -1 +1 @@ -"use strict";(()=>{var y="v5.1.2";var E=document,x=()=>{I(),addEventListener("load",()=>{let t=p("#version");t.innerText=y,t.style.width=t.scrollWidth+"px"})},p=t=>E.querySelector(t),f=(t,o)=>t.querySelector(o),b=t=>E.getElementById(t),d=(t,o,l={},s)=>{let i=E.createElement(t);return Object.entries(l).forEach(h=>i.setAttribute(...h)),s!=null&&(i.innerText=s),o!=null?o.appendChild(i):i},v=(t,o,l)=>{let s=(t.className??"").split(" ");l(s,s.indexOf(o)),t.className=s.join(" ")},L=(t,o)=>v(t,o,(l,s)=>s==-1?l.push(o):null),N=(t,o)=>v(t,o,(l,s)=>s!=-1?l.splice(s,1):null),k=(t,o,l)=>v(t,o,(s,i)=>i!=-1?s.splice(i,1):s.push(o)&&l()),m="dark",T="light",M="auto",I=()=>{let t=matchMedia("(prefers-color-scheme: dark)"),o=()=>{let l=localStorage.getItem(m)??M;p("#dark")?.setAttribute("class",l),p("html").className=l==m||l==M&&t.matches?m:T};t.addEventListener("change",o),window.addEventListener("storage",l=>{l.storageArea==localStorage&&l.key==m&&o()}),addEventListener("load",()=>{p("#dark").addEventListener("click",()=>{let l=localStorage.getItem(m);localStorage.setItem(m,l==m?T:l==T?M:m),o()}),o()}),o()};x();addEventListener("load",()=>{let t=p("body > main > nav"),o=p("body > main > article");if(t==null||o==null)return;let l=()=>{let n=f(o,":scope iframe"),e=n?.parentElement;if(n==null||e==null)return;let r=e.insertBefore(d("form",null,{action:"https://codepen.io/pen/define",method:"post",target:"_blank"}),n);e.insertBefore(d("a",null,{id:"penEdit"},"Open this demo in CodePen"),n).onclick=()=>{r.childNodes.length==0?fetch("pen.json").then(g=>g.text()).then(g=>{d("input",r,{type:"hidden",name:"data",value:g}),r.submit()}):r.submit()}};l(),E.body.addEventListener("click",n=>{if(n.button!=0)return;let e=n.target;if(e.tagName=="SPAN"&&e.innerHTML==""&&e.parentElement?.tagName=="LI")return s(e.parentElement);for(;e.tagName!="A"&&e.parentElement!=null;)e=e.parentElement;let r=e.href;!n.metaKey&&!n.shiftKey&&r!=null&&r!=location.origin+"/"&&r.startsWith(location.origin+"/")&&!r.includes("#")&&(i(r),n.preventDefault(),history.pushState(null,"",r))}),window.onpopstate=function(n){i(location.href),n.preventDefault()};let s=n=>k(n,"open",()=>{let e=f(n,"a");e.href!=location.origin&&e.click()}),i=n=>{["?","#"].forEach(e=>{n.includes(e)&&(n=n.substring(0,n.indexOf(e)))}),fetch(`${n}nav.json`).then(e=>e.json()).then(e=>{N(f(t,"li.current"),"current"),h(e,f(t,"ul"))}),fetch(`${n}article.html`).then(e=>e.text()).then(e=>C(e))},h=({i:n,n:e,u:r,r:g,c:A,p:B,o:S,_:H},q)=>{let a=b(n);if(a==null){a=d("li",q,{id:n}),d("span",a);let c=d("a",a,{href:r});g?d("code",c,{},e):c.innerText=e,B&&L(a,"parent")}if(S&&L(a,"open"),H!=null){let c=f(a,"ul")??d("ul",a);H.forEach(u=>{h(u,c)})}if(A){L(a,"current"),E.title=`${e} | TinyBase`;let c=a.getBoundingClientRect(),u=t.getBoundingClientRect();c.topu.bottom&&t.scrollBy(0,Math.min(c.bottom-u.bottom,c.top-u.top))}},C=n=>{o.innerHTML=n,o.scrollTo(0,0),l()}});})(); +"use strict";(()=>{var y="v5.1.3";var E=document,x=()=>{I(),addEventListener("load",()=>{let t=p("#version");t.innerText=y,t.style.width=t.scrollWidth+"px"})},p=t=>E.querySelector(t),f=(t,o)=>t.querySelector(o),b=t=>E.getElementById(t),d=(t,o,l={},s)=>{let i=E.createElement(t);return Object.entries(l).forEach(h=>i.setAttribute(...h)),s!=null&&(i.innerText=s),o!=null?o.appendChild(i):i},v=(t,o,l)=>{let s=(t.className??"").split(" ");l(s,s.indexOf(o)),t.className=s.join(" ")},L=(t,o)=>v(t,o,(l,s)=>s==-1?l.push(o):null),N=(t,o)=>v(t,o,(l,s)=>s!=-1?l.splice(s,1):null),k=(t,o,l)=>v(t,o,(s,i)=>i!=-1?s.splice(i,1):s.push(o)&&l()),m="dark",T="light",M="auto",I=()=>{let t=matchMedia("(prefers-color-scheme: dark)"),o=()=>{let l=localStorage.getItem(m)??M;p("#dark")?.setAttribute("class",l),p("html").className=l==m||l==M&&t.matches?m:T};t.addEventListener("change",o),window.addEventListener("storage",l=>{l.storageArea==localStorage&&l.key==m&&o()}),addEventListener("load",()=>{p("#dark").addEventListener("click",()=>{let l=localStorage.getItem(m);localStorage.setItem(m,l==m?T:l==T?M:m),o()}),o()}),o()};x();addEventListener("load",()=>{let t=p("body > main > nav"),o=p("body > main > article");if(t==null||o==null)return;let l=()=>{let n=f(o,":scope iframe"),e=n?.parentElement;if(n==null||e==null)return;let r=e.insertBefore(d("form",null,{action:"https://codepen.io/pen/define",method:"post",target:"_blank"}),n);e.insertBefore(d("a",null,{id:"penEdit"},"Open this demo in CodePen"),n).onclick=()=>{r.childNodes.length==0?fetch("pen.json").then(g=>g.text()).then(g=>{d("input",r,{type:"hidden",name:"data",value:g}),r.submit()}):r.submit()}};l(),E.body.addEventListener("click",n=>{if(n.button!=0)return;let e=n.target;if(e.tagName=="SPAN"&&e.innerHTML==""&&e.parentElement?.tagName=="LI")return s(e.parentElement);for(;e.tagName!="A"&&e.parentElement!=null;)e=e.parentElement;let r=e.href;!n.metaKey&&!n.shiftKey&&r!=null&&r!=location.origin+"/"&&r.startsWith(location.origin+"/")&&!r.includes("#")&&(i(r),n.preventDefault(),history.pushState(null,"",r))}),window.onpopstate=function(n){i(location.href),n.preventDefault()};let s=n=>k(n,"open",()=>{let e=f(n,"a");e.href!=location.origin&&e.click()}),i=n=>{["?","#"].forEach(e=>{n.includes(e)&&(n=n.substring(0,n.indexOf(e)))}),fetch(`${n}nav.json`).then(e=>e.json()).then(e=>{N(f(t,"li.current"),"current"),h(e,f(t,"ul"))}),fetch(`${n}article.html`).then(e=>e.text()).then(e=>C(e))},h=({i:n,n:e,u:r,r:g,c:A,p:B,o:S,_:H},q)=>{let a=b(n);if(a==null){a=d("li",q,{id:n}),d("span",a);let c=d("a",a,{href:r});g?d("code",c,{},e):c.innerText=e,B&&L(a,"parent")}if(S&&L(a,"open"),H!=null){let c=f(a,"ul")??d("ul",a);H.forEach(u=>{h(u,c)})}if(A){L(a,"current"),E.title=`${e} | TinyBase`;let c=a.getBoundingClientRect(),u=t.getBoundingClientRect();c.topu.bottom&&t.scrollBy(0,Math.min(c.bottom-u.bottom,c.top-u.top))}},C=n=>{o.innerHTML=n,o.scrollTo(0,0),l()}});})(); diff --git a/docs/js/home.js b/docs/js/home.js index da92172bc1..8168af9d22 100644 --- a/docs/js/home.js +++ b/docs/js/home.js @@ -1 +1 @@ -"use strict";(()=>{var c="v5.1.2";var i=document,a=()=>{d(),addEventListener("load",()=>{let t=o("#version");t.innerText=c,t.style.width=t.scrollWidth+"px"})},o=t=>i.querySelector(t);var n="dark",r="light",l="auto",d=()=>{let t=matchMedia("(prefers-color-scheme: dark)"),s=()=>{let e=localStorage.getItem(n)??l;o("#dark")?.setAttribute("class",e),o("html").className=e==n||e==l&&t.matches?n:r};t.addEventListener("change",s),window.addEventListener("storage",e=>{e.storageArea==localStorage&&e.key==n&&s()}),addEventListener("load",()=>{o("#dark").addEventListener("click",()=>{let e=localStorage.getItem(n);localStorage.setItem(n,e==n?r:e==r?l:n),s()}),s()}),s()};a();})(); +"use strict";(()=>{var c="v5.1.3";var i=document,a=()=>{d(),addEventListener("load",()=>{let t=o("#version");t.innerText=c,t.style.width=t.scrollWidth+"px"})},o=t=>i.querySelector(t);var n="dark",r="light",l="auto",d=()=>{let t=matchMedia("(prefers-color-scheme: dark)"),s=()=>{let e=localStorage.getItem(n)??l;o("#dark")?.setAttribute("class",e),o("html").className=e==n||e==l&&t.matches?n:r};t.addEventListener("change",s),window.addEventListener("storage",e=>{e.storageArea==localStorage&&e.key==n&&s()}),addEventListener("load",()=>{o("#dark").addEventListener("click",()=>{let e=localStorage.getItem(n);localStorage.setItem(n,e==n?r:e==r?l:n),s()}),s()}),s()};a();})(); diff --git a/docs/js/single.js b/docs/js/single.js index f9c42a0b9f..1af5b70be1 100644 --- a/docs/js/single.js +++ b/docs/js/single.js @@ -1 +1 @@ -"use strict";(()=>{var v="v5.1.2";var T=document,M=()=>{f(),addEventListener("load",()=>{let t=a("#version");t.innerText=v,t.style.width=t.scrollWidth+"px"})},a=t=>T.querySelector(t);var L=t=>T.getElementById(t);var h=(t,s,e)=>{let n=(t.className??"").split(" ");e(n,n.indexOf(s)),t.className=n.join(" ")},H=(t,s)=>h(t,s,(e,n)=>n==-1?e.push(s):null),p=(t,s)=>h(t,s,(e,n)=>n!=-1?e.splice(n,1):null);var o="dark",g="light",u="auto",f=()=>{let t=matchMedia("(prefers-color-scheme: dark)"),s=()=>{let e=localStorage.getItem(o)??u;a("#dark")?.setAttribute("class",e),a("html").className=e==o||e==u&&t.matches?o:g};t.addEventListener("change",s),window.addEventListener("storage",e=>{e.storageArea==localStorage&&e.key==o&&s()}),addEventListener("load",()=>{a("#dark").addEventListener("click",()=>{let e=localStorage.getItem(o);localStorage.setItem(o,e==o?g:e==g?u:o),s()}),s()}),s()};M();addEventListener("load",()=>{let t=a("body > main > nav"),s=a("body > main > article");if(t==null||s==null)return;let e=new Map,n=new IntersectionObserver(m=>{m.forEach(l=>{let r=l.target,d=l.target.className,c=/s\d+/.test(d)?parseInt(d.substr(1)):0,i=e.get(c);i==null&&(i=new Set,e.set(c,i)),l.isIntersecting?i.add(r):(i.delete(r),p(L(r.dataset.id),"current"))});let E=0;e.forEach((l,r)=>{l.size>0&&r>E&&(E=r)}),e.forEach((l,r)=>l.forEach(d=>{let c=L(d.dataset.id);r==E?H(c,"current"):p(c,"current")}))});s.querySelectorAll("section[data-id]").forEach(m=>n.observe(m))});})(); +"use strict";(()=>{var v="v5.1.3";var T=document,M=()=>{f(),addEventListener("load",()=>{let t=a("#version");t.innerText=v,t.style.width=t.scrollWidth+"px"})},a=t=>T.querySelector(t);var L=t=>T.getElementById(t);var h=(t,s,e)=>{let n=(t.className??"").split(" ");e(n,n.indexOf(s)),t.className=n.join(" ")},H=(t,s)=>h(t,s,(e,n)=>n==-1?e.push(s):null),p=(t,s)=>h(t,s,(e,n)=>n!=-1?e.splice(n,1):null);var o="dark",g="light",u="auto",f=()=>{let t=matchMedia("(prefers-color-scheme: dark)"),s=()=>{let e=localStorage.getItem(o)??u;a("#dark")?.setAttribute("class",e),a("html").className=e==o||e==u&&t.matches?o:g};t.addEventListener("change",s),window.addEventListener("storage",e=>{e.storageArea==localStorage&&e.key==o&&s()}),addEventListener("load",()=>{a("#dark").addEventListener("click",()=>{let e=localStorage.getItem(o);localStorage.setItem(o,e==o?g:e==g?u:o),s()}),s()}),s()};M();addEventListener("load",()=>{let t=a("body > main > nav"),s=a("body > main > article");if(t==null||s==null)return;let e=new Map,n=new IntersectionObserver(m=>{m.forEach(l=>{let r=l.target,d=l.target.className,c=/s\d+/.test(d)?parseInt(d.substr(1)):0,i=e.get(c);i==null&&(i=new Set,e.set(c,i)),l.isIntersecting?i.add(r):(i.delete(r),p(L(r.dataset.id),"current"))});let E=0;e.forEach((l,r)=>{l.size>0&&r>E&&(E=r)}),e.forEach((l,r)=>l.forEach(d=>{let c=L(d.dataset.id);r==E?H(c,"current"):p(c,"current")}))});s.querySelectorAll("section[data-id]").forEach(m=>n.observe(m))});})(); diff --git a/package-lock.json b/package-lock.json index b5d6a18bd6..382693fdcf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "tinybase", - "version": "5.1.2", + "version": "5.1.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "tinybase", - "version": "5.1.2", + "version": "5.1.3", "license": "MIT", "devDependencies": { - "@arethetypeswrong/cli": "^0.15.3", + "@arethetypeswrong/cli": "^0.15.4", "@automerge/automerge-repo": "^1.2.1", "@automerge/automerge-repo-network-broadcastchannel": "^1.2.1", "@babel/cli": "^7.24.8", @@ -17,8 +17,8 @@ "@babel/preset-env": "^7.25.3", "@babel/preset-react": "^7.24.7", "@babel/preset-typescript": "^7.24.7", - "@libsql/client": "^0.8.0", - "@powersync/common": "^1.15.0", + "@libsql/client": "^0.8.1", + "@powersync/common": "^1.16.0", "@powersync/react": "^1.4.0", "@prettier/sync": "^0.5.2", "@rollup/plugin-image": "^3.0.3", @@ -31,7 +31,7 @@ "@types/jest": "^29.5.12", "@types/jest-environment-puppeteer": "^5.0.6", "@types/less": "^3.0.6", - "@types/node": "^22.0.2", + "@types/node": "^22.1.0", "@types/puppeteer": "^7.0.4", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", @@ -49,14 +49,14 @@ "babel-preset-minify": "^0.5.2", "buffer-replace": "^1.0.0", "country-flag-emoji-json": "^2.0.0", - "cspell": "^8.13.0", + "cspell": "^8.13.2", "electric-sql": "^0.12.1", "esbuild": "^0.23.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^28.6.0", - "eslint-plugin-jsdoc": "^48.10.2", + "eslint-plugin-jest": "^28.8.0", + "eslint-plugin-jsdoc": "^50.0.0", "eslint-plugin-react": "7.35.0", "eslint-plugin-react-hooks": "^4.6.2", "expo-sqlite": "14.0.6", @@ -73,11 +73,11 @@ "partykit": "^0.0.108", "partysocket": "^1.0.2", "prettier": "^3.3.3", - "puppeteer": "22.15.0", + "puppeteer": "23.0.2", "react": "^18.3.1", "react-dom": "^18.3.1", "react-test-renderer": "^18.3.1", - "rollup": "^4.19.2", + "rollup": "^4.20.0", "rollup-plugin-esbuild": "^6.1.1", "rollup-plugin-preserve-shebang": "^1.0.1", "rollup-plugin-prettier": "^4.1.1", @@ -93,8 +93,8 @@ }, "peerDependencies": { "@automerge/automerge-repo": "^1.2.0", - "@libsql/client": "^0.8.0", - "@powersync/common": "^1.6.0", + "@libsql/client": "^0.8.1", + "@powersync/common": "^1.16.0", "@sqlite.org/sqlite-wasm": "^3.46.0-build2", "@vlcn.io/crsqlite-wasm": "^0.16.0", "electric-sql": "^0.12.1", @@ -162,7 +162,7 @@ }, "dist": { "name": "tinybase", - "version": "5.1.1", + "version": "5.1.3", "dev": true, "license": "MIT", "bin": { @@ -170,8 +170,8 @@ }, "peerDependencies": { "@automerge/automerge-repo": "^1.2.0", - "@libsql/client": "^0.8.0", - "@powersync/common": "^1.6.0", + "@libsql/client": "^0.8.1", + "@powersync/common": "^1.16.0", "@sqlite.org/sqlite-wasm": "^3.46.0-build2", "@vlcn.io/crsqlite-wasm": "^0.16.0", "electric-sql": "^0.12.1", @@ -258,9 +258,9 @@ "dev": true }, "node_modules/@arethetypeswrong/cli": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/@arethetypeswrong/cli/-/cli-0.15.3.tgz", - "integrity": "sha512-sIMA9ZJBWDEg1+xt5RkAEflZuf8+PO8SdKj17x6PtETuUho+qlZJg4DgmKc3q+QwQ9zOB5VLK6jVRbFdNLdUIA==", + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/@arethetypeswrong/cli/-/cli-0.15.4.tgz", + "integrity": "sha512-YDbImAi1MGkouT7f2yAECpUMFhhA1J0EaXzIqoC5GGtK0xDgauLtcsZezm8tNq7d3wOFXH7OnY+IORYcG212rw==", "dev": true, "license": "MIT", "dependencies": { @@ -269,7 +269,7 @@ "cli-table3": "^0.6.3", "commander": "^10.0.1", "marked": "^9.1.2", - "marked-terminal": "^6.0.0", + "marked-terminal": "^7.1.0", "semver": "^7.5.4" }, "bin": { @@ -2692,16 +2692,16 @@ } }, "node_modules/@cspell/cspell-bundled-dicts": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.13.0.tgz", - "integrity": "sha512-vtABTJeicWtd1bO74OB1IYSY/+nhK7S5yyW2GRcq1c9dEqRkgJNcYm8SUCm4EOH2oNGzeptjjGgR8emnvCiTfQ==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.13.2.tgz", + "integrity": "sha512-BLXah6gUvPeZM8bj1I0F5YJ0CzDZ3d3xpbDCrDB0NfHIsF9zn0la+ie0O15VcVWNBrNIToc6enjxWg1JSF3E5g==", "dev": true, "license": "MIT", "dependencies": { "@cspell/dict-ada": "^4.0.2", "@cspell/dict-aws": "^4.0.3", "@cspell/dict-bash": "^4.1.3", - "@cspell/dict-companies": "^3.1.3", + "@cspell/dict-companies": "^3.1.4", "@cspell/dict-cpp": "^5.1.12", "@cspell/dict-cryptocurrencies": "^5.0.0", "@cspell/dict-csharp": "^4.0.2", @@ -2712,7 +2712,7 @@ "@cspell/dict-dotnet": "^5.0.2", "@cspell/dict-elixir": "^4.0.3", "@cspell/dict-en_us": "^4.3.23", - "@cspell/dict-en-common-misspellings": "^2.0.3", + "@cspell/dict-en-common-misspellings": "^2.0.4", "@cspell/dict-en-gb": "1.1.33", "@cspell/dict-filetypes": "^3.0.4", "@cspell/dict-fonts": "^4.0.0", @@ -2738,13 +2738,13 @@ "@cspell/dict-php": "^4.0.8", "@cspell/dict-powershell": "^5.0.5", "@cspell/dict-public-licenses": "^2.0.7", - "@cspell/dict-python": "^4.2.3", + "@cspell/dict-python": "^4.2.4", "@cspell/dict-r": "^2.0.1", "@cspell/dict-ruby": "^5.0.2", "@cspell/dict-rust": "^4.0.5", "@cspell/dict-scala": "^5.0.3", - "@cspell/dict-software-terms": "^4.0.3", - "@cspell/dict-sql": "^2.1.3", + "@cspell/dict-software-terms": "^4.0.5", + "@cspell/dict-sql": "^2.1.5", "@cspell/dict-svelte": "^1.0.2", "@cspell/dict-swift": "^2.0.1", "@cspell/dict-terraform": "^1.0.0", @@ -2756,22 +2756,22 @@ } }, "node_modules/@cspell/cspell-json-reporter": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.13.0.tgz", - "integrity": "sha512-OR6+gxWImIOegn9Zi9zlnPZtZMWFToFD8l5bDbHMaScTDygB0IJNg9ZGxWGpxpbMXLNMiefAo5inJwF6LW9F3w==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.13.2.tgz", + "integrity": "sha512-UOINJikJs9tRWc2RrFmXK4s3hpasAIbSq+6ed7NojY/2kYv6u0bHNhh4D+4DAroHcFsU24vl/PeTa9V4Z5CelA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-types": "8.13.0" + "@cspell/cspell-types": "8.13.2" }, "engines": { "node": ">=18" } }, "node_modules/@cspell/cspell-pipe": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-8.13.0.tgz", - "integrity": "sha512-YukXZSSUUD5OqzThpyUUusXH7E+z2YViCVUwTb6bQ/DIHHEUIlTPSF8n/xGUmOR6XeQDBxqgNasTDB5AeRXPJg==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-8.13.2.tgz", + "integrity": "sha512-67N6UHaHRc3H9Nl5TKO/r1lCMgnMPQH+scR6aJxHjcwlKLSoNpGF9LiURhmYaItIhfTH4TDfB2hVPzsslRzaWg==", "dev": true, "license": "MIT", "engines": { @@ -2779,9 +2779,9 @@ } }, "node_modules/@cspell/cspell-resolver": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-8.13.0.tgz", - "integrity": "sha512-smUDfAQDrO5iodDe/7OL1i/fZhu8YrxNfbMCiazqLIYBhw2wrvS6LerBaM7HVUPZ8ZrdeYzIQ1wvEolsrJzuWw==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-8.13.2.tgz", + "integrity": "sha512-SCAH4LbV0uFP9ldXB49mRGnAnPCKZV8W96EMHv9Tdh7Fp3btF5FFaVf0h3/ms1g3quzWJq1+EZvJCKCpm9JY5g==", "dev": true, "license": "MIT", "dependencies": { @@ -2792,9 +2792,9 @@ } }, "node_modules/@cspell/cspell-service-bus": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-8.13.0.tgz", - "integrity": "sha512-370hfBsAFJQ5AJkD/aJF0NITu0kbABGpEkTvutkHAwoIedLp0vNMvlWja7CnFgXxAJOABROSwMXDjG8hLBkXOQ==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-8.13.2.tgz", + "integrity": "sha512-lKgRzJlCPc4BLlqDjWQgIo0ikX4nQ04M1vu0H3CQjfcwr2PVEGLSlXXyJnA6S3A80WxVXhGehyMBhXzItmpKIQ==", "dev": true, "license": "MIT", "engines": { @@ -2802,9 +2802,9 @@ } }, "node_modules/@cspell/cspell-types": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-8.13.0.tgz", - "integrity": "sha512-BnNPwycI/4v/9jFrMofUrUsYmI/Q5ZCE+HL0Yif+mS3r+twaE6Qpmtc9AnpBkLeXlUcY1aeQTASTD9smgGuxsQ==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-8.13.2.tgz", + "integrity": "sha512-0QFLcerzBapst1A729VTegeEcsHFK/YfDvOYWUwsZcmPrpacJ8qHmRPVyyFLvN5punXWwB7pIdtbrVRPDQT49w==", "dev": true, "license": "MIT", "engines": { @@ -2833,9 +2833,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-companies": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.1.3.tgz", - "integrity": "sha512-qaAmfKtQLA7Sbe9zfFVpcwyG92cx6+EiWIpPURv11Ng2QMv2PKhYcterUJBooAvgqD0/qq+AsLN8MREloY5Mdw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.1.4.tgz", + "integrity": "sha512-y9e0amzEK36EiiKx3VAA+SHQJPpf2Qv5cCt5eTUSggpTkiFkCh6gRKQ97rVlrKh5GJrqinDwYIJtTsxuh2vy2Q==", "dev": true, "license": "MIT" }, @@ -2917,9 +2917,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-en-common-misspellings": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.0.3.tgz", - "integrity": "sha512-8nF1z9nUiSgMyikL66HTbDO7jCGtB24TxKBasXIBwkBKMDZgA2M883iXdeByy6m1JJUcCGFkSftVYp2W0bUgjw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.0.4.tgz", + "integrity": "sha512-lvOiRjV/FG4pAGZL3PN2GCVHSTCE92cwhfLGGkOsQtxSmef6WCHfHwp9auafkBlX0yFQSKDfq6/TlpQbjbJBtQ==", "dev": true, "license": "CC BY-SA 4.0" }, @@ -3099,9 +3099,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-python": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.3.tgz", - "integrity": "sha512-C1CPX9wwEGgcHv/p7KfjuIOp1G6KNyx5gWYweAd6/KPv+ZpeM1v572zFUTmpO8WDuAfKFf00nqYL8/GmCENWBw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.4.tgz", + "integrity": "sha512-sCtLBqMreb+8zRW2bXvFsfSnRUVU6IFm4mT6Dc4xbz0YajprbaPPh/kOUTw5IJRP8Uh+FFb7Xp2iH03CNWRq/A==", "dev": true, "license": "MIT", "dependencies": { @@ -3137,16 +3137,16 @@ "license": "MIT" }, "node_modules/@cspell/dict-software-terms": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-4.0.3.tgz", - "integrity": "sha512-65QAVMc3YlcI7PcqWRY5ox53tTWC8aktUZdJYCVs4VDBPUCTSDnTSmSreeg4F5Z468clv9KF/S0PkxbLjgW72A==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-4.0.5.tgz", + "integrity": "sha512-93knOtaQlWq1Zlz5LbjOl3P3hIiWbhd7kwGZPHVxCdD8+G3UEF9hivkpZ1miK/DzlV/Lcw2RoybOd91Xazc+dg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-sql": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.1.3.tgz", - "integrity": "sha512-SEyTNKJrjqD6PAzZ9WpdSu6P7wgdNtGV2RV8Kpuw1x6bV+YsSptuClYG+JSdRExBTE6LwIe1bTklejUp3ZP8TQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.1.5.tgz", + "integrity": "sha512-FmxanytHXss7GAWAXmgaxl3icTCW7YxlimyOSPNfm+njqeUDjw3kEv4mFNDDObBJv8Ec5AWCbUDkWIpkE3IpKg==", "dev": true, "license": "MIT" }, @@ -3186,9 +3186,9 @@ "license": "MIT" }, "node_modules/@cspell/dynamic-import": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-8.13.0.tgz", - "integrity": "sha512-M1cIy6rqWs36M8HFghKsGz/m/WPpK7IIICBptCKoSc5F9VWCjq69UJKrhDMaMOAfJevrmomW5NqF4uhYxg7lNQ==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-8.13.2.tgz", + "integrity": "sha512-ckn9k7kW9Wv1kw8WltUGByQQzFFR9YITtnDQHHFI8yi9IQkSle4+KHLr9Y8uL6U8rtwP70edX4ese++yfnJr+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3199,9 +3199,9 @@ } }, "node_modules/@cspell/strong-weak-map": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-8.13.0.tgz", - "integrity": "sha512-+SvzzupsnKm6+OfK8t2KL2uY0RzTDhjTVEaEIug8IgwlHSf4waYgQ2MJ4ZJPww7OvNEcBmUAeh6Z1+cwiqMycQ==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-8.13.2.tgz", + "integrity": "sha512-jVwlZnef8Q/x3MEg5ixRYYfV3BoI5ZOw0UZRianaM1GwsLCIW/mJ7ZIlIQF6N/exE1YWCpyRlCNgvTgUf7fc7w==", "dev": true, "license": "MIT", "engines": { @@ -3209,9 +3209,9 @@ } }, "node_modules/@cspell/url": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@cspell/url/-/url-8.13.0.tgz", - "integrity": "sha512-+MEFtLb/VJK5WEwmtLCqfghkDBnPNK5XdUNt24tKfwinAlf4VSMxCmplqPwRjXVIbT5C4stSUY/ZrPadEWjw8Q==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/@cspell/url/-/url-8.13.2.tgz", + "integrity": "sha512-IFtiADDLGCp4QXPhsQ0F5/jbVQb0Loeum36wzGLiqXWYDjIA25W8miy0hyy/S8aZhzdEq2aUZjz9dTvkl+5ISQ==", "dev": true, "license": "MIT", "engines": { @@ -4647,13 +4647,13 @@ } }, "node_modules/@libsql/client": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@libsql/client/-/client-0.8.0.tgz", - "integrity": "sha512-ncx6p2wsaZtCAbRJCIkaTO14ya18qFYLJ1yTm5zHgwd9mlcvgenG4imSgJy2zNrKJkeyr1wzD+80jNqI7nCYoA==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@libsql/client/-/client-0.8.1.tgz", + "integrity": "sha512-xGg0F4iTDFpeBZ0r4pA6icGsYa5rG6RAG+i/iLDnpCAnSuTqEWMDdPlVseiq4Z/91lWI9jvvKKiKpovqJ1kZWA==", "dev": true, "license": "MIT", "dependencies": { - "@libsql/core": "^0.8.0", + "@libsql/core": "^0.8.1", "@libsql/hrana-client": "^0.6.2", "js-base64": "^3.7.5", "libsql": "^0.3.10", @@ -4661,9 +4661,9 @@ } }, "node_modules/@libsql/core": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@libsql/core/-/core-0.8.0.tgz", - "integrity": "sha512-Bqs7bKfUNwm8NTLfKPbI4WME+3BTEBeDZTec0b9XZQ9hvjM4YlGXKKCuIDm8ECUYx4Mb1Gc0X14pm2/4r6ImdA==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@libsql/core/-/core-0.8.1.tgz", + "integrity": "sha512-u6nrj6HZMTPsgJ9EBhLzO2uhqhlHQJQmVHV+0yFLvfGf3oSP8w7TjZCNUgu1G8jHISx6KFi7bmcrdXW9lRt++A==", "dev": true, "license": "MIT", "dependencies": { @@ -4895,24 +4895,6 @@ "node": ">=10" } }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@pkgr/core": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", @@ -4927,9 +4909,9 @@ } }, "node_modules/@powersync/common": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@powersync/common/-/common-1.15.0.tgz", - "integrity": "sha512-C5UfmkXONcO33Ka2q77Zz4yW3UmcozHVw5VuBS1HeHh0GGKV9WmTtyAj1A/sLIU16mf6cKpar5jvH+GiHefDww==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@powersync/common/-/common-1.16.0.tgz", + "integrity": "sha512-UrgKUi6ZKodf31eHBP2RP7dXr99zhKNzbpygfBd7Jo9Yi+XRHc5SUSMWB7B5dqo2reKwzdHudxFvkJoPM2QKVQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5328,9 +5310,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.2.tgz", - "integrity": "sha512-OHflWINKtoCFSpm/WmuQaWW4jeX+3Qt3XQDepkkiFTsoxFc5BpF3Z5aDxFZgBqRjO6ATP5+b1iilp4kGIZVWlA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", + "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==", "cpu": [ "arm" ], @@ -5342,9 +5324,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.2.tgz", - "integrity": "sha512-k0OC/b14rNzMLDOE6QMBCjDRm3fQOHAL8Ldc9bxEWvMo4Ty9RY6rWmGetNTWhPo+/+FNd1lsQYRd0/1OSix36A==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz", + "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==", "cpu": [ "arm64" ], @@ -5356,9 +5338,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.2.tgz", - "integrity": "sha512-IIARRgWCNWMTeQH+kr/gFTHJccKzwEaI0YSvtqkEBPj7AshElFq89TyreKNFAGh5frLfDCbodnq+Ye3dqGKPBw==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz", + "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==", "cpu": [ "arm64" ], @@ -5370,9 +5352,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.2.tgz", - "integrity": "sha512-52udDMFDv54BTAdnw+KXNF45QCvcJOcYGl3vQkp4vARyrcdI/cXH8VXTEv/8QWfd6Fru8QQuw1b2uNersXOL0g==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz", + "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==", "cpu": [ "x64" ], @@ -5384,9 +5366,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.2.tgz", - "integrity": "sha512-r+SI2t8srMPYZeoa1w0o/AfoVt9akI1ihgazGYPQGRilVAkuzMGiTtexNZkrPkQsyFrvqq/ni8f3zOnHw4hUbA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz", + "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==", "cpu": [ "arm" ], @@ -5398,9 +5380,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.2.tgz", - "integrity": "sha512-+tYiL4QVjtI3KliKBGtUU7yhw0GMcJJuB9mLTCEauHEsqfk49gtUBXGtGP3h1LW8MbaTY6rSFIQV1XOBps1gBA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz", + "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==", "cpu": [ "arm" ], @@ -5412,9 +5394,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.2.tgz", - "integrity": "sha512-OR5DcvZiYN75mXDNQQxlQPTv4D+uNCUsmSCSY2FolLf9W5I4DSoJyg7z9Ea3TjKfhPSGgMJiey1aWvlWuBzMtg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz", + "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==", "cpu": [ "arm64" ], @@ -5426,9 +5408,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.2.tgz", - "integrity": "sha512-Hw3jSfWdUSauEYFBSFIte6I8m6jOj+3vifLg8EU3lreWulAUpch4JBjDMtlKosrBzkr0kwKgL9iCfjA8L3geoA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz", + "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==", "cpu": [ "arm64" ], @@ -5440,9 +5422,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.2.tgz", - "integrity": "sha512-rhjvoPBhBwVnJRq/+hi2Q3EMiVF538/o9dBuj9TVLclo9DuONqt5xfWSaE6MYiFKpo/lFPJ/iSI72rYWw5Hc7w==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz", + "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==", "cpu": [ "ppc64" ], @@ -5454,9 +5436,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.2.tgz", - "integrity": "sha512-EAz6vjPwHHs2qOCnpQkw4xs14XJq84I81sDRGPEjKPFVPBw7fwvtwhVjcZR6SLydCv8zNK8YGFblKWd/vRmP8g==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz", + "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==", "cpu": [ "riscv64" ], @@ -5468,9 +5450,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.2.tgz", - "integrity": "sha512-IJSUX1xb8k/zN9j2I7B5Re6B0NNJDJ1+soezjNojhT8DEVeDNptq2jgycCOpRhyGj0+xBn7Cq+PK7Q+nd2hxLA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz", + "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==", "cpu": [ "s390x" ], @@ -5482,9 +5464,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.2.tgz", - "integrity": "sha512-OgaToJ8jSxTpgGkZSkwKE+JQGihdcaqnyHEFOSAU45utQ+yLruE1dkonB2SDI8t375wOKgNn8pQvaWY9kPzxDQ==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz", + "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==", "cpu": [ "x64" ], @@ -5496,9 +5478,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.2.tgz", - "integrity": "sha512-5V3mPpWkB066XZZBgSd1lwozBk7tmOkKtquyCJ6T4LN3mzKENXyBwWNQn8d0Ci81hvlBw5RoFgleVpL6aScLYg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz", + "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==", "cpu": [ "x64" ], @@ -5510,9 +5492,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.2.tgz", - "integrity": "sha512-ayVstadfLeeXI9zUPiKRVT8qF55hm7hKa+0N1V6Vj+OTNFfKSoUxyZvzVvgtBxqSb5URQ8sK6fhwxr9/MLmxdA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz", + "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==", "cpu": [ "arm64" ], @@ -5524,9 +5506,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.2.tgz", - "integrity": "sha512-Mda7iG4fOLHNsPqjWSjANvNZYoW034yxgrndof0DwCy0D3FvTjeNo+HGE6oGWgvcLZNLlcp0hLEFcRs+UGsMLg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz", + "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==", "cpu": [ "ia32" ], @@ -5538,9 +5520,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.2.tgz", - "integrity": "sha512-DPi0ubYhSow/00YqmG1jWm3qt1F8aXziHc/UNy8bo9cpCacqhuWu+iSq/fp2SyEQK7iYTZ60fBU9cat3MXTjIQ==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz", + "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==", "cpu": [ "x64" ], @@ -5924,13 +5906,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.0.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.2.tgz", - "integrity": "sha512-yPL6DyFwY5PiMVEwymNeqUTKsDczQBJ/5T7W/46RwLU/VH+AA8aT5TZkvBviLKLbbm0hlfftEkGrNzfRk/fofQ==", + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", + "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.11.1" + "undici-types": "~6.13.0" } }, "node_modules/@types/prettier": { @@ -6488,13 +6470,6 @@ "node": ">=0.10.0" } }, - "node_modules/ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==", - "dev": true, - "license": "MIT" - }, "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -7886,20 +7861,6 @@ "tslib": "^2.2.0" } }, - "node_modules/cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - }, - "bin": { - "cdl": "bin/cdl.js" - } - }, "node_modules/cbor-extract": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cbor-extract/-/cbor-extract-2.2.0.tgz", @@ -8080,9 +8041,9 @@ } }, "node_modules/chromium-bidi": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.3.tgz", - "integrity": "sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.4.tgz", + "integrity": "sha512-8zoq6ogmhQQkAKZVKO2ObFTl4uOkqoX1PlKQX3hZQ5E9cbUotcAb7h4pTNVAGGv8Z36PF3CtdOriEp/Rz82JqQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8168,6 +8129,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "license": "ISC", + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true, + "license": "MIT" + }, "node_modules/cli-table3": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", @@ -8780,25 +8770,25 @@ } }, "node_modules/cspell": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.13.0.tgz", - "integrity": "sha512-sByh0pN9NTBA9eGOsuN6r0c8vwD6LVwH4rhHfCMQ1Gjw5ckH9Obp8JxwrIM0fxm14EXQDcKaAewRfHYx2d1jRg==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.13.2.tgz", + "integrity": "sha512-m+aA54r95QteZBPzZBR4bdld92TDV47/qoKhYt7+M8umcLZR3C2dfktEbVQGoAJokRgSQo9L4/fRF0skk+g5Mg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-json-reporter": "8.13.0", - "@cspell/cspell-pipe": "8.13.0", - "@cspell/cspell-types": "8.13.0", - "@cspell/dynamic-import": "8.13.0", - "@cspell/url": "8.13.0", + "@cspell/cspell-json-reporter": "8.13.2", + "@cspell/cspell-pipe": "8.13.2", + "@cspell/cspell-types": "8.13.2", + "@cspell/dynamic-import": "8.13.2", + "@cspell/url": "8.13.2", "chalk": "^5.3.0", "chalk-template": "^1.1.0", "commander": "^12.1.0", - "cspell-dictionary": "8.13.0", - "cspell-gitignore": "8.13.0", - "cspell-glob": "8.13.0", - "cspell-io": "8.13.0", - "cspell-lib": "8.13.0", + "cspell-dictionary": "8.13.2", + "cspell-gitignore": "8.13.2", + "cspell-glob": "8.13.2", + "cspell-io": "8.13.2", + "cspell-lib": "8.13.2", "fast-glob": "^3.3.2", "fast-json-stable-stringify": "^2.1.0", "file-entry-cache": "^9.0.0", @@ -8818,13 +8808,13 @@ } }, "node_modules/cspell-config-lib": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.13.0.tgz", - "integrity": "sha512-KsTzkv5OLb2PSDq+3yVeS6fCsLvqgEFDJ79I+3VZqWyAmixi2LZMdaobbXXItJRNiDuQ9RnbG2UM9smcJCQTUA==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.13.2.tgz", + "integrity": "sha512-AkG5qWnmHxwEJqyLsraVVzEWGShICn533GdcbSHYYrLxEd9UromEjmFrMlgNomwj8SnJq4L9xq1LoWgRXa5jjg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-types": "8.13.0", + "@cspell/cspell-types": "8.13.2", "comment-json": "^4.2.4", "yaml": "^2.5.0" }, @@ -8833,15 +8823,15 @@ } }, "node_modules/cspell-dictionary": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.13.0.tgz", - "integrity": "sha512-+ZmB7ReBkAba9S0CmYOMm6EVsqyNlRg8V7I0PP9ttMriaGJ4yO+9IIsn6wI79pYB4DaDNBxblLgs12eMWOlNeQ==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.13.2.tgz", + "integrity": "sha512-dvtb9fDHw3jEa5mGBmrDTRxlaXVccQ5LMYkosPcS+J5/iLrV0E3iQu3njFHBFXKsLqOwnd6GV9pd6fXkPEFdeQ==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "8.13.0", - "@cspell/cspell-types": "8.13.0", - "cspell-trie-lib": "8.13.0", + "@cspell/cspell-pipe": "8.13.2", + "@cspell/cspell-types": "8.13.2", + "cspell-trie-lib": "8.13.2", "fast-equals": "^5.0.1" }, "engines": { @@ -8849,15 +8839,15 @@ } }, "node_modules/cspell-gitignore": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.13.0.tgz", - "integrity": "sha512-tu3h6JbejYkGgn9VgW1VAoYchFg3tUtLAzL9oVnkPc58n7gwQpz1cLSKzGpmWyXzjFd6pX0aywnkcOBeWaudMQ==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.13.2.tgz", + "integrity": "sha512-eEDR0g2VQHVRg9mLXi6PUnjZzD1DYa2jkmiuj61ZEN9yEKZ3GKXlUTxlewIiMGN/fxIn5kHyjeMo+hbCHoYkGw==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "8.13.0", - "cspell-glob": "8.13.0", - "cspell-io": "8.13.0", + "@cspell/url": "8.13.2", + "cspell-glob": "8.13.2", + "cspell-io": "8.13.2", "find-up-simple": "^1.0.0" }, "bin": { @@ -8868,13 +8858,13 @@ } }, "node_modules/cspell-glob": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.13.0.tgz", - "integrity": "sha512-4xghVAHGSwDEOB+OsXDmQoBVfo/NtUpxPlmd89vaZtqv1CmnlUzmglEb13jYx6oFydDaY+mSRKw2V0unATnpBA==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.13.2.tgz", + "integrity": "sha512-zhWcfE4k1BVErVd36AMle9DE5W0bxI4OcM7/q3YxPQUdbsox/DihGXGQu+jld2LkUpDl0llIPVJ8OibKg9stcQ==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "8.13.0", + "@cspell/url": "8.13.2", "micromatch": "^4.0.7" }, "engines": { @@ -8882,14 +8872,14 @@ } }, "node_modules/cspell-grammar": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.13.0.tgz", - "integrity": "sha512-vrfIO2LqZPPA7Pe8xPPJwXKiXq9nWJxH5JesdVFQZ+DtkklzC07J8OrGTFFo0/r9/CfQMNqqs0XbtRcoa+xRYg==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.13.2.tgz", + "integrity": "sha512-mdRNahGfY7BXg36PQcmeB8WQZETYB6W0A/+yMDgFg+YQX7UdJr8M5GVDFmIFRWyc7/cnv6GMiqdI64gmfCU8ww==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "8.13.0", - "@cspell/cspell-types": "8.13.0" + "@cspell/cspell-pipe": "8.13.2", + "@cspell/cspell-types": "8.13.2" }, "bin": { "cspell-grammar": "bin.mjs" @@ -8899,47 +8889,47 @@ } }, "node_modules/cspell-io": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.13.0.tgz", - "integrity": "sha512-9rcHUWHmNum7w7eCVJrUZgvJpL30OAYum8Ij9NenqwGhim95tPQc2CtHZ2aibJ6G4c4Aape9ytSgNxoIYG97DQ==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.13.2.tgz", + "integrity": "sha512-Jf5LL1TEXPvKH0iabIr8BLK/Hc6crPCdsWM3CbZydp/fDU6rpbaApzSVQ376JlAaLMLpEP7s5oVh9WC4wIE5Bw==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-service-bus": "8.13.0", - "@cspell/url": "8.13.0" + "@cspell/cspell-service-bus": "8.13.2", + "@cspell/url": "8.13.2" }, "engines": { "node": ">=18" } }, "node_modules/cspell-lib": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.13.0.tgz", - "integrity": "sha512-WTVswCFQduFrEBKTj0EKB5GeEfMwQou23DEcudyWIc2sFoovYF0d/Fr6J69HbGIvwQq1ToPM4eayoQK0/Qn6Mg==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.13.2.tgz", + "integrity": "sha512-qWX4B0Nwo6Souoi8/hLEohSLQEeeh1mWIiQDDJ43w+zmzzzmHZ8+tAeJJ2eAGgOKVqfjcyefH5y7Py2TQrn3xg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-bundled-dicts": "8.13.0", - "@cspell/cspell-pipe": "8.13.0", - "@cspell/cspell-resolver": "8.13.0", - "@cspell/cspell-types": "8.13.0", - "@cspell/dynamic-import": "8.13.0", - "@cspell/strong-weak-map": "8.13.0", - "@cspell/url": "8.13.0", + "@cspell/cspell-bundled-dicts": "8.13.2", + "@cspell/cspell-pipe": "8.13.2", + "@cspell/cspell-resolver": "8.13.2", + "@cspell/cspell-types": "8.13.2", + "@cspell/dynamic-import": "8.13.2", + "@cspell/strong-weak-map": "8.13.2", + "@cspell/url": "8.13.2", "clear-module": "^4.1.2", "comment-json": "^4.2.4", - "cspell-config-lib": "8.13.0", - "cspell-dictionary": "8.13.0", - "cspell-glob": "8.13.0", - "cspell-grammar": "8.13.0", - "cspell-io": "8.13.0", - "cspell-trie-lib": "8.13.0", + "cspell-config-lib": "8.13.2", + "cspell-dictionary": "8.13.2", + "cspell-glob": "8.13.2", + "cspell-grammar": "8.13.2", + "cspell-io": "8.13.2", + "cspell-trie-lib": "8.13.2", "env-paths": "^3.0.0", "fast-equals": "^5.0.1", "gensequence": "^7.0.0", "import-fresh": "^3.3.0", "resolve-from": "^5.0.0", - "vscode-languageserver-textdocument": "^1.0.11", + "vscode-languageserver-textdocument": "^1.0.12", "vscode-uri": "^3.0.8", "xdg-basedir": "^5.1.0" }, @@ -8948,14 +8938,14 @@ } }, "node_modules/cspell-trie-lib": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.13.0.tgz", - "integrity": "sha512-3v9q5nUF0Y88bQQLmSXUcf7izsu+Dj/g5Dk0hqqykcsobqq4EN2dmfZH+Ej1Q5h3DCiwPemGb7IPg8pfqTHpAg==", + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.13.2.tgz", + "integrity": "sha512-JYpxU6mN0W9cp5g6QN4TXz0S3zzcmGpVJf1fka7tuWHY1e62Gs0qIIL2LjTHYW9wlRFYyrqPnN5opfwuEZCCMg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "8.13.0", - "@cspell/cspell-types": "8.13.0", + "@cspell/cspell-pipe": "8.13.2", + "@cspell/cspell-types": "8.13.2", "gensequence": "^7.0.0" }, "engines": { @@ -9765,6 +9755,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", @@ -10264,19 +10267,19 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "28.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz", - "integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==", + "version": "28.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.8.0.tgz", + "integrity": "sha512-Tubj1hooFxCl52G4qQu0edzV/+EZzPUeN8p2NnW5uu4fbDs+Yo7+qDVDc4/oG3FbCqEBmu/OC3LSsyiU22oghw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^6.0.0 || ^7.0.0" + "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "engines": { "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0", + "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0 || ^8.0.0", "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", "jest": "*" }, @@ -10290,9 +10293,9 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "48.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.10.2.tgz", - "integrity": "sha512-xTkf/MmEeVrTbezc6kDqCJmK9RcseIKo8X4oyoDCMvV4LY8dqrQi8kmfRrv9n0gNBkCclevaOh2Lkmu6Fs8SLg==", + "version": "50.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.0.0.tgz", + "integrity": "sha512-czyJ5F7/qY2LIhUD5Bl6q1CCZ8mjvfEA9HQN5nvIp/Pb8VLIlUNd+DMZdA2OKN74QQMS3pobC06hFqAOJyOv5Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -10637,23 +10640,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/eslint/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -11460,21 +11446,6 @@ "node": ">=0.10.0" } }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/fs-mkdirp-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", @@ -11768,6 +11739,44 @@ "node": ">= 14" } }, + "node_modules/get-uri/node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/get-uri/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/get-uri/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -12406,6 +12415,16 @@ "he": "bin/he" } }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -15460,19 +15479,6 @@ "dev": true, "license": "MIT" }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -16066,24 +16072,6 @@ "node": ">=10" } }, - "node_modules/make-fetch-happen/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/make-fetch-happen/node_modules/socks-proxy-agent": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", @@ -16199,16 +16187,16 @@ } }, "node_modules/marked-terminal": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-6.2.0.tgz", - "integrity": "sha512-ubWhwcBFHnXsjYNsu+Wndpg0zhY4CahSpPlA70PlO0rR9r2sZpkyU+rkCsOWH+KMEkx847UpALON+HWgxowFtw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-7.1.0.tgz", + "integrity": "sha512-+pvwa14KZL74MVXjYdPR3nSInhGhNvPce/3mqLVZT2oUvt654sL1XImFuLZ1pkA866IYZ3ikDTOFUIC7XzpZZg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^6.2.0", - "cardinal": "^2.1.1", + "ansi-escapes": "^7.0.0", "chalk": "^5.3.0", - "cli-table3": "^0.6.3", + "cli-highlight": "^2.1.11", + "cli-table3": "^0.6.5", "node-emoji": "^2.1.3", "supports-hyperlinks": "^3.0.0" }, @@ -16216,17 +16204,20 @@ "node": ">=16.0.0" }, "peerDependencies": { - "marked": ">=1 <12" + "marked": ">=1 <14" } }, "node_modules/marked-terminal/node_modules/ansi-escapes": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -17524,6 +17515,18 @@ "node": ">= 10.13.0" } }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", @@ -17715,24 +17718,6 @@ "node": ">=6" } }, - "node_modules/node-gyp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -18319,6 +18304,23 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true, + "license": "MIT" + }, "node_modules/partykit": { "version": "0.0.108", "resolved": "https://registry.npmjs.org/partykit/-/partykit-0.0.108.tgz", @@ -19354,34 +19356,35 @@ } }, "node_modules/puppeteer": { - "version": "22.15.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.15.0.tgz", - "integrity": "sha512-XjCY1SiSEi1T7iSYuxS82ft85kwDJUS7wj1Z0eGVXKdtr5g4xnVcbjwxhq5xBnpK/E7x1VZZoJDxpjAOasHT4Q==", + "version": "23.0.2", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.0.2.tgz", + "integrity": "sha512-I/l1P8s8brcLG+oW9AwF8hUaOSGGJcGKMflXRgULUH0S3ABptlLI9ZKjqWDo8ipY6v789ZKd+bNKtcCwpTh5Ww==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@puppeteer/browsers": "2.3.0", + "chromium-bidi": "0.6.4", "cosmiconfig": "^9.0.0", "devtools-protocol": "0.0.1312386", - "puppeteer-core": "22.15.0" + "puppeteer-core": "23.0.2" }, "bin": { - "puppeteer": "lib/esm/puppeteer/node/cli.js" + "puppeteer": "lib/cjs/puppeteer/node/cli.js" }, "engines": { "node": ">=18" } }, "node_modules/puppeteer-core": { - "version": "22.15.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.15.0.tgz", - "integrity": "sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==", + "version": "23.0.2", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.0.2.tgz", + "integrity": "sha512-MvOHn+g1TYkAR2oVd/bf/YWXKqFTJmkhyyurYgxkrjh8rBOL1ZH5VyOsLJi0bLO7/yoipAmk1gFZEx9HUJnaoA==", "dev": true, "license": "Apache-2.0", "dependencies": { "@puppeteer/browsers": "2.3.0", - "chromium-bidi": "0.6.3", + "chromium-bidi": "0.6.4", "debug": "^4.3.6", "devtools-protocol": "0.0.1312386", "ws": "^8.18.0" @@ -19689,16 +19692,6 @@ "node": ">= 10.13.0" } }, - "node_modules/redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "esprima": "~4.0.0" - } - }, "node_modules/reflect.getprototypeof": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", @@ -20090,10 +20083,27 @@ "node": ">=0.10.0" } }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/rollup": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.2.tgz", - "integrity": "sha512-6/jgnN1svF9PjNYJ4ya3l+cqutg49vOZ4rVgsDKxdl+5gpGPnByFXWGyfH9YGx9i3nfBwSu1Iyu6vGwFFA0BdQ==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz", + "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==", "dev": true, "license": "MIT", "dependencies": { @@ -20107,22 +20117,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.19.2", - "@rollup/rollup-android-arm64": "4.19.2", - "@rollup/rollup-darwin-arm64": "4.19.2", - "@rollup/rollup-darwin-x64": "4.19.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.19.2", - "@rollup/rollup-linux-arm-musleabihf": "4.19.2", - "@rollup/rollup-linux-arm64-gnu": "4.19.2", - "@rollup/rollup-linux-arm64-musl": "4.19.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.19.2", - "@rollup/rollup-linux-riscv64-gnu": "4.19.2", - "@rollup/rollup-linux-s390x-gnu": "4.19.2", - "@rollup/rollup-linux-x64-gnu": "4.19.2", - "@rollup/rollup-linux-x64-musl": "4.19.2", - "@rollup/rollup-win32-arm64-msvc": "4.19.2", - "@rollup/rollup-win32-ia32-msvc": "4.19.2", - "@rollup/rollup-win32-x64-msvc": "4.19.2", + "@rollup/rollup-android-arm-eabi": "4.20.0", + "@rollup/rollup-android-arm64": "4.20.0", + "@rollup/rollup-darwin-arm64": "4.20.0", + "@rollup/rollup-darwin-x64": "4.20.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.20.0", + "@rollup/rollup-linux-arm-musleabihf": "4.20.0", + "@rollup/rollup-linux-arm64-gnu": "4.20.0", + "@rollup/rollup-linux-arm64-musl": "4.20.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0", + "@rollup/rollup-linux-riscv64-gnu": "4.20.0", + "@rollup/rollup-linux-s390x-gnu": "4.20.0", + "@rollup/rollup-linux-x64-gnu": "4.20.0", + "@rollup/rollup-linux-x64-musl": "4.20.0", + "@rollup/rollup-win32-arm64-msvc": "4.20.0", + "@rollup/rollup-win32-ia32-msvc": "4.20.0", + "@rollup/rollup-win32-x64-msvc": "4.20.0", "fsevents": "~2.3.2" } }, @@ -21544,6 +21554,29 @@ "dev": true, "license": "MIT" }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -22236,9 +22269,9 @@ } }, "node_modules/undici-types": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz", - "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", + "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==", "dev": true, "license": "MIT" }, @@ -22432,16 +22465,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/update-browserslist-db": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", diff --git a/package.json b/package.json index 623a156c00..8b0bfd3be2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tinybase", - "version": "5.1.2", + "version": "5.1.3", "author": "jamesgpearce", "repository": "github:tinyplex/tinybase", "license": "MIT", diff --git a/readme.md b/readme.md index ca8cc0e2b9..8f2b519c25 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,4 @@ -

The reactive data store for local-first apps.

NEW! v5.1 release

"The One You Can Sync... with a server!"

Get started

Try the demos

Read the docs


It's Reactive

TinyBase lets you listen to changes made to any part of your data. This means your app will be fast, since you only spend rendering cycles on things that change. The optional bindings to React and pre-built components let you easily build fully reactive UIs on top of TinyBase. You even get a built-in undo stack, and developer tools!

It's Database-Like

Consumer app? Enterprise app? Or even a game? Model key-value data and tabular data with optional typed schematization, whatever its data structures. There are built-in indexing, metric aggregation, and tabular relationships APIs - and a powerful query engine to select, join, filter, and group data (reactively!) without SQL.

It Synchronizes

TinyBase has native CRDT support, meaning that you can deterministically synchronize and merge data across multiple sources, clients, and servers. And although TinyBase is an in-memory data store, but you can easily persist your data to file, browser storage, IndexedDB, SQLite databases, and more.

It's Built For A Local-First World

TinyBase works anywhere that JavaScript does, but it's especially great for local-first apps: where data is stored locally on the user's device and that can be run offline. It's tiny by name, tiny by nature: just 5.3kB - 12.7kB and with no dependencies - yet 100% tested, fully documented, and of course, open source!


TinyBase works great on its own, but also plays well with friends!

React
PartyKit
Expo SQLite
ElectricSQL
SQLite
Turso
PowerSync
IndexedDB
YJS
CR-SQLite
Automerge



Start with a simple key-value store.

Creating a Store requires just a simple call to the createStore function. Once you have one, you can easily set Values in it by unique Id. And of course you can easily get them back out again.

Read more about using keyed value data in The Basics guide.

+

The reactive data store for local-first apps.

NEW! v5.1 release

"The One You Can Sync... with a server!"

Get started

Try the demos

Read the docs


It's Reactive

TinyBase lets you listen to changes made to any part of your data. This means your app will be fast, since you only spend rendering cycles on things that change. The optional bindings to React and pre-built components let you easily build fully reactive UIs on top of TinyBase. You even get a built-in undo stack, and developer tools!

It's Database-Like

Consumer app? Enterprise app? Or even a game? Model key-value data and tabular data with optional typed schematization, whatever its data structures. There are built-in indexing, metric aggregation, and tabular relationships APIs - and a powerful query engine to select, join, filter, and group data (reactively!) without SQL.

It Synchronizes

TinyBase has native CRDT support, meaning that you can deterministically synchronize and merge data across multiple sources, clients, and servers. And although TinyBase is an in-memory data store, but you can easily persist your data to file, browser storage, IndexedDB, SQLite databases, and more.

It's Built For A Local-First World

TinyBase works anywhere that JavaScript does, but it's especially great for local-first apps: where data is stored locally on the user's device and that can be run offline. It's tiny by name, tiny by nature: just 5.3kB - 12.7kB and with no dependencies - yet 100% tested, fully documented, and of course, open source!


TinyBase works great on its own, but also plays well with friends!

React
PartyKit
Expo SQLite
ElectricSQL
SQLite
Turso
PowerSync
IndexedDB
YJS
CR-SQLite
Automerge



Start with a simple key-value store.

Creating a Store requires just a simple call to the createStore function. Once you have one, you can easily set Values in it by unique Id. And of course you can easily get them back out again.

Read more about using keyed value data in The Basics guide.

```js import {createStore} from 'tinybase'; @@ -292,4 +292,4 @@ export const createShop: typeof createShopDecl = () => { }; ``` -

Did we say tiny?

If you use the basic store module alone, you'll only add a gzipped 5.3kB to your app. Incrementally add the other modules as you need more functionality, or get it all for 12.7kB.

The optional ui-react module is just 4.6kB, the ui-react-dom components are another 2.5kB, and everything is super fast. Life's easy when you have zero dependencies!

Read more about how TinyBase is structured and packaged in the Architecture guide.

 Minified .js.gzSource .js
tinybase/store (minimal)5.3kB52.5kB
tinybase (complete)12.7kB130.8kB
ui-react4.6kB48.3kB
ui-react-dom2.5kB20.4kB

Well tested and documented.

TinyBase has 100.0% test coverage, including the code throughout the documentation - even on this page! The guides, demos, and API examples are designed to make it as easy as possible for you to get your TinyBase-powered app up and running.

Read more about how TinyBase is tested in the Unit Testing guide.

 TotalTestedCoverage
Lines2,3802,380100.0%
Statements2,5672,567100.0%
Functions1,0061,006100.0%
Branches951951100.0%
Tests6,851
Assertions32,075

Proud to be sponsored by:

Excited to be used by:


Get started

Try the demos

Read the docs


About

Modern apps deserve better. Why trade reactive user experiences to be able to use relational data? Or sacrifice features for bundle size? And why does the cloud do all the work anyway?

Building TinyBase was originally an interesting exercise for me in API design, minification, and documentation. But now it has taken on a life of its own, and has grown beyond my wildest expectations.

It could not have been built without these great projects and friends, and I hope you enjoy using it as much as I do building it!

The story

\ No newline at end of file +

Did we say tiny?

If you use the basic store module alone, you'll only add a gzipped 5.3kB to your app. Incrementally add the other modules as you need more functionality, or get it all for 12.7kB.

The optional ui-react module is just 4.6kB, the ui-react-dom components are another 2.5kB, and everything is super fast. Life's easy when you have zero dependencies!

Read more about how TinyBase is structured and packaged in the Architecture guide.

 Minified .js.gzSource .js
tinybase/store (minimal)5.3kB52.5kB
tinybase (complete)12.7kB130.8kB
ui-react4.6kB48.3kB
ui-react-dom2.5kB20.4kB

Well tested and documented.

TinyBase has 100.0% test coverage, including the code throughout the documentation - even on this page! The guides, demos, and API examples are designed to make it as easy as possible for you to get your TinyBase-powered app up and running.

Read more about how TinyBase is tested in the Unit Testing guide.

 TotalTestedCoverage
Lines2,3802,380100.0%
Statements2,5672,567100.0%
Functions1,0061,006100.0%
Branches951951100.0%
Tests6,851
Assertions32,074

Proud to be sponsored by:

Excited to be used by:


Get started

Try the demos

Read the docs


About

Modern apps deserve better. Why trade reactive user experiences to be able to use relational data? Or sacrifice features for bundle size? And why does the cloud do all the work anyway?

Building TinyBase was originally an interesting exercise for me in API design, minification, and documentation. But now it has taken on a life of its own, and has grown beyond my wildest expectations.

It could not have been built without these great projects and friends, and I hope you enjoy using it as much as I do building it!

The story

\ No newline at end of file diff --git a/site/js/version.ts b/site/js/version.ts index 8cb0a2aecc..f17e8d0dcd 100644 --- a/site/js/version.ts +++ b/site/js/version.ts @@ -1 +1 @@ -export const thisVersion = 'v5.1.2'; \ No newline at end of file +export const thisVersion = 'v5.1.3'; \ No newline at end of file