diff --git a/README.md b/README.md index 1443e256a..1d37bd91e 100644 --- a/README.md +++ b/README.md @@ -84,10 +84,11 @@ The goal of Solid Primitives is to wrap client and server side functionality to |[script-loader](https://github.com/solidjs-community/solid-primitives/tree/main/packages/script-loader#readme)|[![STAGE](https://img.shields.io/endpoint?style=for-the-badge&label=&url=https%3A%2F%2Ffd.xuwubk.eu.org%3A443%2Fhttps%2Fraw.githubusercontent.com%2Fsolidjs-community%2Fsolid-primitives%2Fmain%2Fassets%2Fbadges%2Fstage-3.json)](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createScriptLoader](https://github.com/solidjs-community/solid-primitives/tree/main/packages/script-loader#createscriptloader)|[![SIZE](https://img.shields.io/bundlephobia/minzip/@solid-primitives/script-loader?style=for-the-badge&label=)](https://bundlephobia.com/package/@solid-primitives/script-loader)|[![VERSION](https://img.shields.io/npm/v/@solid-primitives/script-loader?style=for-the-badge&label=)](https://www.npmjs.com/package/@solid-primitives/script-loader)| |[share](https://github.com/solidjs-community/solid-primitives/tree/main/packages/share#readme)|[![STAGE](https://img.shields.io/endpoint?style=for-the-badge&label=&url=https%3A%2F%2Ffd.xuwubk.eu.org%3A443%2Fhttps%2Fraw.githubusercontent.com%2Fsolidjs-community%2Fsolid-primitives%2Fmain%2Fassets%2Fbadges%2Fstage-3.json)](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createSocialShare](https://github.com/solidjs-community/solid-primitives/tree/main/packages/share#createsocialshare)
[createWebShare](https://github.com/solidjs-community/solid-primitives/tree/main/packages/share#createwebshare)|[![SIZE](https://img.shields.io/bundlephobia/minzip/@solid-primitives/share?style=for-the-badge&label=)](https://bundlephobia.com/package/@solid-primitives/share)|[![VERSION](https://img.shields.io/npm/v/@solid-primitives/share?style=for-the-badge&label=)](https://www.npmjs.com/package/@solid-primitives/share)| |

*Reactivity*

| +|[db-store](https://github.com/solidjs-community/solid-primitives/tree/main/packages/db-store#readme)|[![STAGE](https://img.shields.io/endpoint?style=for-the-badge&label=&url=https%3A%2F%2Ffd.xuwubk.eu.org%3A443%2Fhttps%2Fraw.githubusercontent.com%2Fsolidjs-community%2Fsolid-primitives%2Fmain%2Fassets%2Fbadges%2Fstage-0.json)](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createDbStore](https://github.com/solidjs-community/solid-primitives/tree/main/packages/db-store#createdbstore)
[supabaseAdapter](https://github.com/solidjs-community/solid-primitives/tree/main/packages/db-store#supabaseadapter)|[![SIZE](https://img.shields.io/bundlephobia/minzip/@solid-primitives/db-store?style=for-the-badge&label=)](https://bundlephobia.com/package/@solid-primitives/db-store)|[![VERSION](https://img.shields.io/npm/v/@solid-primitives/db-store?style=for-the-badge&label=)](https://www.npmjs.com/package/@solid-primitives/db-store)| |[deep](https://github.com/solidjs-community/solid-primitives/tree/main/packages/deep#readme)|[![STAGE](https://img.shields.io/endpoint?style=for-the-badge&label=&url=https%3A%2F%2Ffd.xuwubk.eu.org%3A443%2Fhttps%2Fraw.githubusercontent.com%2Fsolidjs-community%2Fsolid-primitives%2Fmain%2Fassets%2Fbadges%2Fstage-1.json)](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[trackDeep](https://github.com/solidjs-community/solid-primitives/tree/main/packages/deep#trackdeep)
[trackStore](https://github.com/solidjs-community/solid-primitives/tree/main/packages/deep#trackstore)
[captureStoreUpdates](https://github.com/solidjs-community/solid-primitives/tree/main/packages/deep#capturestoreupdates)|[![SIZE](https://img.shields.io/bundlephobia/minzip/@solid-primitives/deep?style=for-the-badge&label=)](https://bundlephobia.com/package/@solid-primitives/deep)|[![VERSION](https://img.shields.io/npm/v/@solid-primitives/deep?style=for-the-badge&label=)](https://www.npmjs.com/package/@solid-primitives/deep)| |[destructure](https://github.com/solidjs-community/solid-primitives/tree/main/packages/destructure#readme)|[![STAGE](https://img.shields.io/endpoint?style=for-the-badge&label=&url=https%3A%2F%2Ffd.xuwubk.eu.org%3A443%2Fhttps%2Fraw.githubusercontent.com%2Fsolidjs-community%2Fsolid-primitives%2Fmain%2Fassets%2Fbadges%2Fstage-2.json)](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[destructure](https://github.com/solidjs-community/solid-primitives/tree/main/packages/destructure#destructure)|[![SIZE](https://img.shields.io/bundlephobia/minzip/@solid-primitives/destructure?style=for-the-badge&label=)](https://bundlephobia.com/package/@solid-primitives/destructure)|[![VERSION](https://img.shields.io/npm/v/@solid-primitives/destructure?style=for-the-badge&label=)](https://www.npmjs.com/package/@solid-primitives/destructure)| |[immutable](https://github.com/solidjs-community/solid-primitives/tree/main/packages/immutable#readme)|[![STAGE](https://img.shields.io/endpoint?style=for-the-badge&label=&url=https%3A%2F%2Ffd.xuwubk.eu.org%3A443%2Fhttps%2Fraw.githubusercontent.com%2Fsolidjs-community%2Fsolid-primitives%2Fmain%2Fassets%2Fbadges%2Fstage-1.json)](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createImmutable](https://github.com/solidjs-community/solid-primitives/tree/main/packages/immutable#createimmutable)|[![SIZE](https://img.shields.io/bundlephobia/minzip/@solid-primitives/immutable?style=for-the-badge&label=)](https://bundlephobia.com/package/@solid-primitives/immutable)|[![VERSION](https://img.shields.io/npm/v/@solid-primitives/immutable?style=for-the-badge&label=)](https://www.npmjs.com/package/@solid-primitives/immutable)| -|[lifecycle](https://github.com/solidjs-community/solid-primitives/tree/main/packages/lifecycle#readme)|[![STAGE](https://img.shields.io/endpoint?style=for-the-badge&label=&url=https%3A%2F%2Ffd.xuwubk.eu.org%3A443%2Fhttps%2Fraw.githubusercontent.com%2Fsolidjs-community%2Fsolid-primitives%2Fmain%2Fassets%2Fbadges%2Fstage-0.json)](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createIsMounted](https://github.com/solidjs-community/solid-primitives/tree/main/packages/lifecycle#createismounted)
[isHydrated](https://github.com/solidjs-community/solid-primitives/tree/main/packages/lifecycle#ishydrated)
[onConnect](https://github.com/solidjs-community/solid-primitives/tree/main/packages/lifecycle#onconnect)|[![SIZE](https://img.shields.io/bundlephobia/minzip/@solid-primitives/lifecycle?style=for-the-badge&label=)](https://bundlephobia.com/package/@solid-primitives/lifecycle)|[![VERSION](https://img.shields.io/npm/v/@solid-primitives/lifecycle?style=for-the-badge&label=)](https://www.npmjs.com/package/@solid-primitives/lifecycle)| +|[lifecycle](https://github.com/solidjs-community/solid-primitives/tree/main/packages/lifecycle#readme)|[![STAGE](https://img.shields.io/endpoint?style=for-the-badge&label=&url=https%3A%2F%2Ffd.xuwubk.eu.org%3A443%2Fhttps%2Fraw.githubusercontent.com%2Fsolidjs-community%2Fsolid-primitives%2Fmain%2Fassets%2Fbadges%2Fstage-0.json)](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createIsMounted](https://github.com/solidjs-community/solid-primitives/tree/main/packages/lifecycle#createismounted)
[isHydrated](https://github.com/solidjs-community/solid-primitives/tree/main/packages/lifecycle#ishydrated)
[onElementConnect](https://github.com/solidjs-community/solid-primitives/tree/main/packages/lifecycle#onelementconnect)|[![SIZE](https://img.shields.io/bundlephobia/minzip/@solid-primitives/lifecycle?style=for-the-badge&label=)](https://bundlephobia.com/package/@solid-primitives/lifecycle)|[![VERSION](https://img.shields.io/npm/v/@solid-primitives/lifecycle?style=for-the-badge&label=)](https://www.npmjs.com/package/@solid-primitives/lifecycle)| |[map](https://github.com/solidjs-community/solid-primitives/tree/main/packages/map#readme)|[![STAGE](https://img.shields.io/endpoint?style=for-the-badge&label=&url=https%3A%2F%2Ffd.xuwubk.eu.org%3A443%2Fhttps%2Fraw.githubusercontent.com%2Fsolidjs-community%2Fsolid-primitives%2Fmain%2Fassets%2Fbadges%2Fstage-2.json)](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[ReactiveMap](https://github.com/solidjs-community/solid-primitives/tree/main/packages/map#reactivemap)
[ReactiveWeakMap](https://github.com/solidjs-community/solid-primitives/tree/main/packages/map#reactiveweakmap)|[![SIZE](https://img.shields.io/bundlephobia/minzip/@solid-primitives/map?style=for-the-badge&label=)](https://bundlephobia.com/package/@solid-primitives/map)|[![VERSION](https://img.shields.io/npm/v/@solid-primitives/map?style=for-the-badge&label=)](https://www.npmjs.com/package/@solid-primitives/map)| |[memo](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#readme)|[![STAGE](https://img.shields.io/endpoint?style=for-the-badge&label=&url=https%3A%2F%2Ffd.xuwubk.eu.org%3A443%2Fhttps%2Fraw.githubusercontent.com%2Fsolidjs-community%2Fsolid-primitives%2Fmain%2Fassets%2Fbadges%2Fstage-3.json)](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createLatest](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createlatest)
[createLatestMany](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createlatestmany)
[createWritableMemo](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createwritablememo)
[createLazyMemo](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createlazymemo)
[createPureReaction](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createpurereaction)
[createMemoCache](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#creatememocache)
[createReducer](https://github.com/solidjs-community/solid-primitives/tree/main/packages/memo#createreducer)|[![SIZE](https://img.shields.io/bundlephobia/minzip/@solid-primitives/memo?style=for-the-badge&label=)](https://bundlephobia.com/package/@solid-primitives/memo)|[![VERSION](https://img.shields.io/npm/v/@solid-primitives/memo?style=for-the-badge&label=)](https://www.npmjs.com/package/@solid-primitives/memo)| |[mutable](https://github.com/solidjs-community/solid-primitives/tree/main/packages/mutable#readme)|[![STAGE](https://img.shields.io/endpoint?style=for-the-badge&label=&url=https%3A%2F%2Ffd.xuwubk.eu.org%3A443%2Fhttps%2Fraw.githubusercontent.com%2Fsolidjs-community%2Fsolid-primitives%2Fmain%2Fassets%2Fbadges%2Fstage-3.json)](https://github.com/solidjs-community/solid-primitives/blob/main/CONTRIBUTING.md#contribution-process)|[createMutable](https://github.com/solidjs-community/solid-primitives/tree/main/packages/mutable#createmutable)
[modifyMutable](https://github.com/solidjs-community/solid-primitives/tree/main/packages/mutable#modifymutable)|[![SIZE](https://img.shields.io/bundlephobia/minzip/@solid-primitives/mutable?style=for-the-badge&label=)](https://bundlephobia.com/package/@solid-primitives/mutable)|[![VERSION](https://img.shields.io/npm/v/@solid-primitives/mutable?style=for-the-badge&label=)](https://www.npmjs.com/package/@solid-primitives/mutable)| diff --git a/package.json b/package.json index a2de318e4..a4326560c 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "format": "prettier --cache -w {site,packages,scripts,template}/**/*.{js,ts,json,css,tsx,jsx,md,html}", "lint:packages": "eslint --max-warnings 0 \"packages/*/src/**/*\"", "lint:tests": "eslint \"packages/*/test/**\" --rule \"no-only-tests/no-only-tests: error\"", - "lint": "pnpm run \"/^lint:.*/\"", + "lint": "pnpm run \"/^lint:.*/\"", "test:client": "vitest -c ./configs/vitest.config.ts", "test:ssr": "pnpm run test:client --mode ssr", "test": "pnpm run test:client && pnpm run test:ssr", @@ -57,7 +57,7 @@ "vite-plugin-solid": "^2.10.2", "vitest": "^2.1.0" }, - "packageManager": "pnpm@9.9.0", + "packageManager": "pnpm@10.9.0", "engines": { "node": ">=20.0.0" } diff --git a/packages/active-element/CHANGELOG.md b/packages/active-element/CHANGELOG.md index abe8b27ed..17b423bb5 100644 --- a/packages/active-element/CHANGELOG.md +++ b/packages/active-element/CHANGELOG.md @@ -1,5 +1,15 @@ # @solid-primitives/active-element +## 2.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/event-listener@2.4.1 + - @solid-primitives/utils@6.3.1 + ## 2.1.0 ### Minor Changes diff --git a/packages/active-element/package.json b/packages/active-element/package.json index 3ea75f2b0..ae33a67eb 100644 --- a/packages/active-element/package.json +++ b/packages/active-element/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/active-element", - "version": "2.1.0", + "version": "2.1.1", "description": "A reactive document.activeElement. Check which element is currently focused.", "author": "Damian Tarnawski @thetarnav ", "contributors": [ @@ -31,8 +31,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/audio/CHANGELOG.md b/packages/audio/CHANGELOG.md index de8a585f8..4ae0f6c6d 100644 --- a/packages/audio/CHANGELOG.md +++ b/packages/audio/CHANGELOG.md @@ -1,5 +1,15 @@ # @solid-primitives/audio +## 1.4.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/static-store@0.1.1 + - @solid-primitives/utils@6.3.1 + ## 1.4.0 ### Minor Changes diff --git a/packages/audio/README.md b/packages/audio/README.md index 1a9ac85b6..45169159c 100644 --- a/packages/audio/README.md +++ b/packages/audio/README.md @@ -78,7 +78,7 @@ The audio primitive exports an reactive properties that provides you access to s _Note:_ Initializing the primitive with `playing` as true works, however note that the user has to interact with the page first (on a fresh page load). ```ts -function makeAudioPlayer( +function createAudio( src: AudioSource | Accessor, playing?: Accessor, volume?: Accessor, diff --git a/packages/audio/package.json b/packages/audio/package.json index 5d7dc46ea..4b63c51df 100644 --- a/packages/audio/package.json +++ b/packages/audio/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/audio", - "version": "1.4.0", + "version": "1.4.1", "description": "Primitives to manage audio and single sounds.", "author": "David Di Biase ", "license": "MIT", @@ -29,8 +29,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/autofocus/CHANGELOG.md b/packages/autofocus/CHANGELOG.md index d265f195e..408091148 100644 --- a/packages/autofocus/CHANGELOG.md +++ b/packages/autofocus/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/autofocus +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 0.1.0 ### Minor Changes diff --git a/packages/autofocus/package.json b/packages/autofocus/package.json index 208724d0e..c010dd206 100644 --- a/packages/autofocus/package.json +++ b/packages/autofocus/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/autofocus", - "version": "0.1.0", + "version": "0.1.1", "description": "Primitives for autofocusing HTML elements", "author": "jer3m01 ", "contributors": [], @@ -38,8 +38,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/bounds/CHANGELOG.md b/packages/bounds/CHANGELOG.md index 32e48c904..8ba943e7e 100644 --- a/packages/bounds/CHANGELOG.md +++ b/packages/bounds/CHANGELOG.md @@ -1,5 +1,17 @@ # @solid-primitives/bounds +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/resize-observer@2.1.1 + - @solid-primitives/event-listener@2.4.1 + - @solid-primitives/static-store@0.1.1 + - @solid-primitives/utils@6.3.1 + ## 0.1.0 ### Minor Changes diff --git a/packages/bounds/package.json b/packages/bounds/package.json index 07cf5e321..b08a6397b 100644 --- a/packages/bounds/package.json +++ b/packages/bounds/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/bounds", - "version": "0.1.0", + "version": "0.1.1", "description": "Primitives for tracking HTML element size and position on screen as it changes.", "author": "Damian Tarnawski ", "contributors": [], @@ -38,8 +38,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/broadcast-channel/CHANGELOG.md b/packages/broadcast-channel/CHANGELOG.md index b5ce2137e..addf051b2 100644 --- a/packages/broadcast-channel/CHANGELOG.md +++ b/packages/broadcast-channel/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/broadcast-channel +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 0.1.0 ### Minor Changes diff --git a/packages/broadcast-channel/package.json b/packages/broadcast-channel/package.json index a06bd506e..7ef17bc2f 100644 --- a/packages/broadcast-channel/package.json +++ b/packages/broadcast-channel/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/broadcast-channel", - "version": "0.1.0", + "version": "0.1.1", "description": "Primitives to manage Broadcast Channel API", "author": "Caleb Taylor ", "contributors": [], @@ -37,8 +37,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/clipboard/CHANGELOG.md b/packages/clipboard/CHANGELOG.md index 5d0f9ba52..e50609202 100644 --- a/packages/clipboard/CHANGELOG.md +++ b/packages/clipboard/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/clipboard +## 1.6.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 1.6.0 ### Minor Changes diff --git a/packages/clipboard/package.json b/packages/clipboard/package.json index be205f29a..f1ec7d2c3 100644 --- a/packages/clipboard/package.json +++ b/packages/clipboard/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/clipboard", - "version": "1.6.0", + "version": "1.6.1", "description": "Primitives for reading and writing to clipboard.", "author": "David Di Biase ", "contributors": [ @@ -32,8 +32,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/connectivity/CHANGELOG.md b/packages/connectivity/CHANGELOG.md index 654ff6ef6..3aab45009 100644 --- a/packages/connectivity/CHANGELOG.md +++ b/packages/connectivity/CHANGELOG.md @@ -1,5 +1,16 @@ # @solid-primitives/connectivity +## 0.4.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/event-listener@2.4.1 + - @solid-primitives/rootless@1.5.1 + - @solid-primitives/utils@6.3.1 + ## 0.4.0 ### Minor Changes diff --git a/packages/connectivity/package.json b/packages/connectivity/package.json index 5cb7f73fd..23a14df48 100644 --- a/packages/connectivity/package.json +++ b/packages/connectivity/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/connectivity", - "version": "0.4.0", + "version": "0.4.1", "description": "A navigator.onLine signal.", "author": "Klemen Slavič ", "contributors": [ @@ -31,8 +31,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/context/CHANGELOG.md b/packages/context/CHANGELOG.md index f4c47a658..8c5af61fe 100644 --- a/packages/context/CHANGELOG.md +++ b/packages/context/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/context +## 0.3.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 0.3.0 ### Minor Changes diff --git a/packages/context/package.json b/packages/context/package.json index b669976a1..5dd87ecbf 100644 --- a/packages/context/package.json +++ b/packages/context/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/context", - "version": "0.3.0", + "version": "0.3.1", "description": "Primitives simplifying or extending the SolidJS Context API", "author": "Damian Tarnawski @thetarnav ", "license": "MIT", @@ -31,8 +31,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/controlled-props/CHANGELOG.md b/packages/controlled-props/CHANGELOG.md index 0de26caed..260fda125 100644 --- a/packages/controlled-props/CHANGELOG.md +++ b/packages/controlled-props/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/controlled-props +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 0.1.0 ### Minor Changes diff --git a/packages/controlled-props/package.json b/packages/controlled-props/package.json index 342cb898c..f45fed60a 100644 --- a/packages/controlled-props/package.json +++ b/packages/controlled-props/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/controlled-props", - "version": "0.1.0", + "version": "0.1.1", "description": "The primitives in this package allow you to create controlls for component props.", "author": "Alex Lohr ", "contributors": [], @@ -29,9 +29,9 @@ "browser": {}, "typesVersions": {}, "exports": { - "@solid-primitives/source": "./src/index.tsx", - "solid": "./dist/index.jsx", "import": { + "@solid-primitives/source": "./src/index.tsx", + "solid": "./dist/index.jsx", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/cookies/CHANGELOG.md b/packages/cookies/CHANGELOG.md new file mode 100644 index 000000000..2c7fdbcfb --- /dev/null +++ b/packages/cookies/CHANGELOG.md @@ -0,0 +1,8 @@ +# @solid-primitives/cookies + +## 0.0.2 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) diff --git a/packages/cookies/package.json b/packages/cookies/package.json index 9efc85734..b2f24a868 100644 --- a/packages/cookies/package.json +++ b/packages/cookies/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/cookies", - "version": "0.0.1", + "version": "0.0.2", "description": "A set of primitives for handling cookies in solid", "author": "Thomas Beer (https://github.com/Tommypop2)", "contributors": [ @@ -41,8 +41,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/cursor/CHANGELOG.md b/packages/cursor/CHANGELOG.md index b30cc2e0f..78e4dcc00 100644 --- a/packages/cursor/CHANGELOG.md +++ b/packages/cursor/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/cursor +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 0.1.0 ### Minor Changes diff --git a/packages/cursor/package.json b/packages/cursor/package.json index b714ed945..e5de9c12e 100644 --- a/packages/cursor/package.json +++ b/packages/cursor/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/cursor", - "version": "0.1.0", + "version": "0.1.1", "description": "Two simple primitives for setting cursor css property reactively.", "author": "Damian Tarnawski ", "contributors": [], @@ -38,8 +38,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/date/CHANGELOG.md b/packages/date/CHANGELOG.md index 26f2b6bf3..56fb1c99a 100644 --- a/packages/date/CHANGELOG.md +++ b/packages/date/CHANGELOG.md @@ -1,5 +1,23 @@ # @solid-primitives/date +## 2.1.2 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/timer@1.4.1 + - @solid-primitives/utils@6.3.1 + - @solid-primitives/memo@1.4.2 + +## 2.1.1 + +### Patch Changes + +- Updated dependencies [d86e65d] + - @solid-primitives/memo@1.4.1 + ## 2.1.0 ### Minor Changes diff --git a/packages/date/package.json b/packages/date/package.json index 056cb405c..9fe829f24 100644 --- a/packages/date/package.json +++ b/packages/date/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/date", - "version": "2.1.0", + "version": "2.1.2", "description": "Collection of reactive primitives and utility functions, providing easier ways to deal with dates in SolidJS", "author": "Damian Tarnawski @thetarnav ", "license": "MIT", @@ -33,8 +33,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/db-store/CHANGELOG.md b/packages/db-store/CHANGELOG.md new file mode 100644 index 000000000..e7e90fe0e --- /dev/null +++ b/packages/db-store/CHANGELOG.md @@ -0,0 +1,29 @@ +# @solid-primitives/db-store + +## 1.1.2 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/resource@0.4.2 + +## 1.1.1 + +### Patch Changes + +- Updated dependencies [9914bfc] + - @solid-primitives/resource@0.4.1 + +## 1.1.0 + +### Minor Changes + +- 645a847: support schemas and default fields + +## 1.0.0 + +### Major Changes + +- 4c9dad5: new package: db-store - a store transparently bound to a database diff --git a/packages/db-store/LICENSE b/packages/db-store/LICENSE new file mode 100644 index 000000000..38b41d975 --- /dev/null +++ b/packages/db-store/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Solid Primitives Working Group + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/db-store/README.md b/packages/db-store/README.md new file mode 100644 index 000000000..35aad9147 --- /dev/null +++ b/packages/db-store/README.md @@ -0,0 +1,84 @@ +

+ Solid Primitives db-store +

+ +# @solid-primitives/db-store + +[![size](https://img.shields.io/bundlephobia/minzip/@solid-primitives/db-store?style=for-the-badge&label=size)](https://bundlephobia.com/package/@solid-primitives/db-store) +[![version](https://img.shields.io/npm/v/@solid-primitives/db-store?style=for-the-badge)](https://www.npmjs.com/package/@solid-primitives/db-store) +[![stage](https://img.shields.io/endpoint?style=for-the-badge&url=https%3A%2F%2Ffd.xuwubk.eu.org%3A443%2Fhttps%2Fraw.githubusercontent.com%2Fsolidjs-community%2Fsolid-primitives%2Fmain%2Fassets%2Fbadges%2Fstage-0.json)](https://github.com/solidjs-community/solid-primitives#contribution-process) + +A primitive that creates a synchronized store from a database: + +`createDbStore` - creates a store synchronized to a database. +`supabaseAdapter` - adapter for [supabase](https://supabase.com/) database connections to synchronize stores from. + +## Installation + +```bash +npm install @solid-primitives/db-store +# or +yarn add @solid-primitives/db-store +# or +pnpm add @solid-primitives/db-store +``` + +## How to use it + +```ts +const [dbStore, setDbStore] = createDbStore({ + adapter: supabaseAdapter(client), + table: "todos", + defaultFields: ['id', 'userid'] + filter: ({ userid }) => userid === user.id, + onError: handleErrors, +}); +``` + +The store is automatically initialized and optimistically updated both ways. Due to how databases work, the store can only ever contain an array of entries. + +> [!WARNING] +> Since the order of items in the database cannot be guaranteed, the same is true for the items in the store. + +> [!NOTE] +> It can take some time for the database editor to show updates. They are processed a lot faster. + +### Handling default fields + +The `id` field needs to be set by the database, so even if you set it, it needs to be overwritten in any case. There might be other fields that the server sets by default, e.g. a user ID. It is not required to set those for your rows manually; one can also treat its absence as a sign that an insertion is not yet done in the database. + +By default, only 'id' is handled as default field. If you have additional default fields, you need to use the `defaultField` option to convey them; otherwise default fields not set by the client might break the reconciliation of newly added fields. + +### Handling errors + +If any change could not be successfully committed to the database, the `onError` handler is called with an Error. If the caught error was an error itself, it is used directly, else what was encountered will be set as cause for an Error "unknown error". The error will also be augmented with a "data" property containing the update, an "action" property containing "insert", "update" or "delete" and a "server" flag property that is true if the error happened while sending data to the server. + +### Write your own adapter + +Your adapter must have the following properties: + +```tsx +export type DbAdapterUpdate = { old?: Partial; new?: Partial }; + +export type DbAdapter = { + insertSignal: () => DbAdapterUpdate | undefined; + updateSignal: () => DbAdapterUpdate | undefined; + deleteSignal: () => DbAdapterUpdate | undefined; + init: () => Promise; + insert: (data: DbAdapterUpdate) => PromiseLike; + update: (data: DbAdapterUpdate) => PromiseLike; + delete: (data: DbAdapterUpdate) => PromiseLike; +}; +``` + +## Demo + +[Working demonstration](https://primitives.solidjs.community/playground/db-store/) (requires Supabase account) + +## Changelog + +See [CHANGELOG.md](./CHANGELOG.md) + +## Plans + +This is an early draft; in the future, more adapters are planned: mongodb, prism, firebase, aws? diff --git a/packages/db-store/dev/README.md b/packages/db-store/dev/README.md new file mode 100644 index 000000000..6e2887444 --- /dev/null +++ b/packages/db-store/dev/README.md @@ -0,0 +1,42 @@ +# Database setup + +To create and set up the database for your own version of the todo list, use the following SQL statements in your supabase SQL editor: + +```sql +create table todos ( + id serial primary key, + task text, + user_id uuid references auth.users default auth.uid() +); + +alter publication supabase_realtime add table todos; + +create policy "realtime updates only for authenticated users" +on "realtime"."messages" +for select +to authenticated +using (true); + +alter table "public"."todos" enable row level security; + +create policy "Select only own tasks" on "public"."todos" +for select +to authenticated +using (((SELECT auth.uid() AS uid) = user_id)); + +create policy "Insert only own tasks" on "public"."todos" +for insert +to authenticated +with check (((SELECT auth.uid() AS uid) = user_id)); + +create policy "Delete only own tasks" on "public"."todos" +for delete +to authenticated +using (((SELECT auth.uid() AS uid) = user_id)); + +create policy "Update only own tasks" on "public"."todos" +for update +to authenticated +using (((SELECT auth.uid() AS uid) = user_id)) +with check (((SELECT auth.uid() AS uid) = user_id)); +``` diff --git a/packages/db-store/dev/index.tsx b/packages/db-store/dev/index.tsx new file mode 100644 index 000000000..ffb46f792 --- /dev/null +++ b/packages/db-store/dev/index.tsx @@ -0,0 +1,157 @@ +import { Component, createSignal, onMount, For, Show } from "solid-js"; +import { createDbStore, supabaseAdapter, DbRow, DbStoreError } from "../src/index.js"; +import { AuthResponse, createClient, Session, SupabaseClient } from "@supabase/supabase-js"; +import { reconcile } from "solid-js/store"; + +const TodoList = (props: { client: SupabaseClient; logout: () => void }) => { + const [error, setError] = createSignal>(); + (globalThis as any).supabaseClient = props.client; + const [todos, setTodos] = createDbStore({ + adapter: supabaseAdapter({ client: props.client, table: "todos" }), + defaultFields: ["id", "user_id"], + onError: setError, + }); + const [edit, setEdit] = createSignal(); + const done = (task: DbRow) => setTodos(reconcile(todos.filter(todo => todo !== task))); + const add = (task: string) => setTodos(todos.length, { task }); + return ( +
+ + + {err => ( +

+ {`Error: ${err.message} Cause: ${err.cause} Action: ${err.action} Data: ${JSON.stringify(err.data)}`}{" "} + ${err.server ? "server" : "client"} +

+ )} +
+
    + Number(a.id) - Number(b.id))} + fallback={
  • No to-dos yet
  • } + > + {item => ( +
  • + setEdit(item)}>{item.task}} + > + + + + {" "} + done(item)} title="Done"> + x + +
  • + )} +
    +
  • + {" "} + +
  • +
+
+ ); +}; + +const App: Component = () => { + // these are public keys that will end up in the client in any case: + const client = createClient(import.meta.env.VITE_SUPABASE_URL, import.meta.env.VITE_SUPABASE_KEY); + const [session, setSession] = createSignal(); + const [error, setError] = createSignal(""); + const handleAuthPromise = ({ error, data }: AuthResponse) => { + if (error) { + setError(error.toString()); + } else { + setSession(data.session ?? undefined); + } + }; + onMount(() => client.auth.refreshSession().then(handleAuthPromise)); + const login = () => { + const email = (document.querySelector('[type="email"]') as HTMLInputElement | null)?.value; + const password = (document.querySelector('[type="password"]') as HTMLInputElement | null) + ?.value; + if (!email || !password) { + setError("please provide an email and password"); + return; + } + client.auth.signInWithPassword({ email, password }).then(handleAuthPromise); + }; + const register = () => { + const email = (document.querySelector('[type="email"]') as HTMLInputElement | null)?.value; + const password = (document.querySelector('[type="password"]') as HTMLInputElement | null) + ?.value; + if (!email || !password) { + setError("please provide an email and password"); + return; + } + client.auth.signUp({ email, password }).then(handleAuthPromise); + }; + + return ( +
+
+

db-store-backed to-do list

+ + +

{error()}

+
+

+ +

+

+ +

+ + + + } + > + { + setSession(undefined); + client.auth.signOut(); + }} + /> +
+
+
+ ); +}; + +export default App; diff --git a/packages/db-store/package.json b/packages/db-store/package.json new file mode 100644 index 000000000..b373845cc --- /dev/null +++ b/packages/db-store/package.json @@ -0,0 +1,63 @@ +{ + "name": "@solid-primitives/db-store", + "version": "1.1.2", + "description": "A template primitive example.", + "author": "Your Name ", + "contributors": [], + "license": "MIT", + "homepage": "https://primitives.solidjs.community/package/db-store", + "repository": { + "type": "git", + "url": "git+https://github.com/solidjs-community/solid-primitives.git" + }, + "bugs": { + "url": "https://github.com/solidjs-community/solid-primitives/issues" + }, + "primitive": { + "name": "db-store", + "stage": 0, + "list": [ + "createDbStore", + "supabaseAdapter" + ], + "category": "Reactivity" + }, + "keywords": [ + "solid", + "primitives" + ], + "private": false, + "sideEffects": false, + "files": [ + "dist" + ], + "type": "module", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "browser": {}, + "exports": { + "import": { + "@solid-primitives/source": "./src/index.ts", + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + }, + "typesVersions": {}, + "scripts": { + "dev": "tsx ../../scripts/dev.ts", + "build": "tsx ../../scripts/build.ts", + "vitest": "vitest -c ../../configs/vitest.config.ts", + "test": "pnpm run vitest", + "test:ssr": "pnpm run vitest --mode ssr" + }, + "dependencies": { + "@solid-primitives/resource": "workspace:^" + }, + "peerDependencies": { + "solid-js": "^1.6.12", + "@supabase/supabase-js": "2.*" + }, + "devDependencies": { + "@supabase/supabase-js": "^2.48.1" + } +} diff --git a/packages/db-store/src/index.ts b/packages/db-store/src/index.ts new file mode 100644 index 000000000..eb8b7201f --- /dev/null +++ b/packages/db-store/src/index.ts @@ -0,0 +1,267 @@ +import { + createEffect, + createResource, + createSignal, + createMemo, + on, + onCleanup, + untrack, + DEV, +} from "solid-js"; +import { createStore, reconcile, SetStoreFunction, Store, unwrap } from "solid-js/store"; +import { RealtimePostgresChangesPayload, SupabaseClient } from "@supabase/supabase-js"; + +export type DbRow = Record; + +export type DbAdapterUpdate = { old?: Partial; new?: Partial }; + +export type DbAdapterAction = "insert" | "update" | "delete"; + +export type DbAdapterFilter = ( + ev: { action: DbAdapterAction } & DbAdapterUpdate, +) => boolean; + +export type DbAdapterOptions = {}> = { + client: SupabaseClient; + filter?: DbAdapterFilter; + table: string; +} & Extras; + +export type DbAdapter = { + insertSignal: () => DbAdapterUpdate | undefined; + updateSignal: () => DbAdapterUpdate | undefined; + deleteSignal: () => DbAdapterUpdate | undefined; + init: () => Promise<{ data?: Row[]; error?: unknown }>; + insert: (data: DbAdapterUpdate) => PromiseLike; + update: (data: DbAdapterUpdate) => PromiseLike; + delete: (data: DbAdapterUpdate) => PromiseLike; +}; + +export type DbStoreError = Error & { + data: DbAdapterUpdate; + action: DbAdapterAction; + server: boolean; +}; + +const createEventMemo = ( + eventBase: { readonly action: "insert" | "update" | "delete" }, + eventSignal: () => DbAdapterUpdate | undefined, + filter?: DbAdapterFilter, +) => + createMemo((prev: DbAdapterUpdate | undefined) => { + const data = eventSignal(); + const next = data ? Object.assign(eventBase, data) : undefined; + if (!next || (filter && !filter(next))) return prev; + return next; + }); + +const supabaseHandleError = + (data: DbAdapterUpdate, action: DbAdapterAction, server = false) => + ({ error }: { error: unknown | null }): Promise => + error + ? Promise.reject( + Object.assign( + error instanceof Error + ? error + : new Error(typeof error === "string" ? error : `Unknown error`, { cause: error }), + { data, action, server }, + ), + ) + : Promise.resolve(); + +export const supabaseAdapter = ( + opts: DbAdapterOptions, +): DbAdapter => { + const [insertSignal, setInsertSignal] = createSignal>(); + const [updateSignal, setUpdateSignal] = createSignal>(); + const [deleteSignal, setDeleteSignal] = createSignal>(); + const updateHandler = (ev: RealtimePostgresChangesPayload) => { + if (ev.eventType === "INSERT") { + setInsertSignal(ev); + } else if (ev.eventType === "DELETE") { + setDeleteSignal(ev); + } else { + setUpdateSignal(ev); + } + }; + const channel = opts.client + .channel("schema-db-changes") + .on("postgres_changes", { event: "*", schema: opts.schema || "public" }, updateHandler) + .subscribe(); + onCleanup(() => channel.unsubscribe()); + return { + insertSignal: createEventMemo({ action: "insert" }, insertSignal, opts.filter), + updateSignal: createEventMemo({ action: "update" }, updateSignal, opts.filter), + deleteSignal: createEventMemo({ action: "delete" }, deleteSignal, opts.filter), + init: () => + Promise.resolve().then(() => opts.client.from(opts.table).select()) as Promise<{ + data?: Row[]; + error?: unknown; + }>, + insert: data => + opts.client + .from(opts.table) + .insert(data.new) + .then(supabaseHandleError(data, "insert", true)), + update: data => + opts.client + .from(opts.table) + .update(data.new) + .eq("id", data.old?.id ?? data.new?.id) + .then(supabaseHandleError(data, "update", true)), + delete: data => + opts.client + .from(opts.table) + .delete() + .eq("id", data.old?.id ?? data.new?.id) + .then(supabaseHandleError(data, "delete", true)), + }; +}; + +export type DbStoreOptions = { + adapter: DbAdapter; + init?: Row[]; + defaultFields?: readonly string[]; + equals?: (a: unknown, b: unknown) => boolean; + onError?: (err: DbStoreError) => void; +}; + +export const createDbStore = ( + opts: DbStoreOptions, +): [Store, SetStoreFunction, { refetch: () => void }] => { + const insertions = new Set>(); + const [dbStore, setDbStore] = createStore(opts.init || []); + const [dbInit, { refetch }] = createResource(opts.adapter.init); + const equals = opts.equals || ((a, b) => a === b); + const defaultFields = opts.defaultFields || ["id"]; + const onError = (error: DbStoreError) => { + if (typeof opts.onError === "function") { + opts.onError(error); + } else if (DEV) { + // eslint-disable-next-line no-console + console.error(error); + } + return Promise.resolve(); + }; + createEffect(() => + !dbInit.loading && dbInit.error + ? opts.onError?.(dbInit.error) + : dbInit()?.data?.length + ? setDbStore(reconcile(dbInit()?.data!)) + : setDbStore(reconcile([])), + ); + createEffect( + on(opts.adapter.insertSignal, inserted => { + if (!inserted?.new?.id) return; + for (const row of insertions.values()) { + if ( + Object.entries(inserted.new).some( + ([key, value]) => !defaultFields.includes(key) && row[key] !== value, + ) + ) + continue; + const index = untrack(() => + dbStore.findIndex(cand => + Object.entries(cand).every( + ([key, value]) => defaultFields.includes(key) || row[key] == value, + ), + ), + ); + if (index !== -1) { + // @ts-ignore + setDbStore(index, inserted.new); + insertions.delete(row); + return; + } + } + setDbStore(dbStore.length, inserted.new as Row); + }), + ); + createEffect( + on(opts.adapter.updateSignal, update => { + const updateId = update?.new?.id ?? update?.old?.id; + if (updateId && Object.keys(update?.new || {}).length > 0) { + const previousIndex = dbStore.findIndex(({ id }) => id === updateId); + if (previousIndex > -1) { + setDbStore(previousIndex, { ...dbStore[previousIndex], ...update!.new! } as Row); + } + } + }), + ); + createEffect( + on(opts.adapter.deleteSignal, deletion => { + const deletionId = deletion?.old?.id; + if (deletionId) { + setDbStore(reconcile(dbStore.filter(({ id }) => id !== deletionId))); + } + }), + ); + + const findRow = (rows: Row[], row: Row) => + rows.find( + (candidate?: Row) => + candidate && + Object.entries(row).every( + ([key, value]) => !(key in candidate) || candidate[key] === value, + ), + ); + const set = function (...args: any[]) { + const prev = [...unwrap(dbStore)]; + const prevData: Map = prev.reduce((map, item) => { + map.set(item, structuredClone(item)); + return map; + }, new Map()); + const result = (setDbStore as any)(...args); + const next = unwrap(dbStore); + const deleted = prev.filter(row => !findRow(next, row)); + const inserted = next.filter(row => !findRow(prev, row)); + const updated: DbAdapterUpdate[] = []; + next.forEach(row => { + const prevRow = prevData.get(row); + if (prevRow) { + const updatedFields: Partial = {}; + for (const key in row) if (!equals(prevRow[key], row[key])) updatedFields[key] = row[key]; + for (const key in prevRow) + if (!(key in updatedFields) && !equals(prevRow[key], row[key])) + updatedFields[key] = row[key]; + if ("id" in row) { + updated.push({ old: { id: row.id }, new: updatedFields } as any as DbAdapterUpdate); + } + } + }); + prevData.clear(); + Promise.allSettled([ + ...deleted.map(row => { + const id = "id" in row ? row.id : undefined; + if (id) { + return Promise.resolve() + .then(() => opts.adapter.delete({ old: { id } as unknown as Partial })) + .catch(error => + supabaseHandleError( + { old: { id } as unknown as Partial }, + "delete", + )({ error }).catch(onError), + ); + } + }), + ...inserted.map((item?: Partial) => { + if (!item) return; + item = { ...unwrap(item), id: undefined }; + insertions.add(item); + return Promise.resolve() + .then(() => opts.adapter.insert({ new: item })) + .catch(error => + supabaseHandleError({ new: item, old: {} }, "insert")({ error }).catch(onError), + ); + }), + ...updated.map(update => + Promise.resolve() + .then(() => opts.adapter.update(update)) + .catch(error => supabaseHandleError(update, "update")({ error }).catch(onError)), + ), + ]); + return result; + }; + + return [dbStore, set, { refetch }]; +}; diff --git a/packages/db-store/test/index.test.ts b/packages/db-store/test/index.test.ts new file mode 100644 index 000000000..3558d19ff --- /dev/null +++ b/packages/db-store/test/index.test.ts @@ -0,0 +1,640 @@ +import { describe, it, expect, vi } from "vitest"; +import { createEffect, createRoot } from "solid-js"; +import { createDbStore, supabaseAdapter } from "../src/index.js"; +import { + mockSupabaseClient, + mockSupabaseClientData, + mockSupabaseResponses, + mockSupabaseSendEvent, +} from "./supabase-mock.js"; +import { RealtimePostgresChangesPayload } from "@supabase/supabase-js"; +import { reconcile } from "solid-js/store"; + +describe("supabaseAdapter", () => { + it("resolves the initial data", () => { + const [adapter, cleanup] = createRoot(dispose => [ + supabaseAdapter({ + client: mockSupabaseClient, + table: "test", + }), + dispose, + ]); + return Promise.resolve() + .then(() => adapter.init()) + .then(data => { + expect(data).toEqual({ data: mockSupabaseClientData, error: null }); + cleanup(); + }); + }); + + it("relays insertions to the insertSignal", () => { + const [adapter, cleanup] = createRoot(dispose => [ + supabaseAdapter({ + client: mockSupabaseClient, + table: "test", + }), + dispose, + ]); + const insertionEvent: RealtimePostgresChangesPayload = { + eventType: "INSERT", + schema: "*", + old: {}, + new: { id: 1, data: "test" }, + table: "test", + commit_timestamp: new Date().toUTCString(), + errors: [], + }; + return new Promise(resolve => { + createRoot(() => + createEffect(() => { + const insertion = adapter.insertSignal(); + if (insertion?.new) { + expect(insertion).toHaveProperty("action", "insert"); + expect(insertion).toHaveProperty("new", insertionEvent.new); + resolve(); + } + }), + ); + mockSupabaseSendEvent(insertionEvent); + }).finally(cleanup); + }); + + it("relays deletions to the deleteSignal", () => { + const [adapter, cleanup] = createRoot(dispose => [ + supabaseAdapter({ + client: mockSupabaseClient, + table: "test", + }), + dispose, + ]); + const deletionEvent: RealtimePostgresChangesPayload = { + eventType: "DELETE", + schema: "*", + new: {}, + old: { id: 1, data: "test" }, + table: "test", + commit_timestamp: new Date().toUTCString(), + errors: [], + }; + return new Promise(resolve => { + createRoot(() => + createEffect(() => { + const deletion = adapter.deleteSignal(); + if (deletion?.old) { + expect(deletion).toHaveProperty("action", "delete"); + expect(deletion).toHaveProperty("old", deletionEvent.old); + resolve(); + } + }), + ); + mockSupabaseSendEvent(deletionEvent); + }).finally(cleanup); + }); + + it("relays updates to the updateSignal", () => { + const [adapter, cleanup] = createRoot(dispose => [ + supabaseAdapter({ + client: mockSupabaseClient, + table: "test", + }), + dispose, + ]); + const updateEvent: RealtimePostgresChangesPayload = { + eventType: "UPDATE", + schema: "*", + new: { data: "updated" }, + old: { id: 1 }, + table: "test", + commit_timestamp: new Date().toUTCString(), + errors: [], + }; + return new Promise(resolve => { + createRoot(() => + createEffect(() => { + const update = adapter.updateSignal(); + if (update?.old) { + expect(update).toHaveProperty("action", "update"); + expect(update).toHaveProperty("old", updateEvent.old); + resolve(); + } + }), + ); + mockSupabaseSendEvent(updateEvent); + }).finally(cleanup); + }); + + it("relays the insertions to the database", () => { + const [adapter, cleanup] = createRoot(dispose => [ + supabaseAdapter({ + client: mockSupabaseClient, + table: "test", + }), + dispose, + ]); + return adapter.insert({ new: { data: "test" } }).then(cleanup); + }); + + it("collects errors during insertions to the database", async () => { + const [adapter, cleanup] = createRoot(dispose => [ + supabaseAdapter({ + client: mockSupabaseClient, + table: "test", + }), + dispose, + ]); + const originalResponse = mockSupabaseResponses.insert; + mockSupabaseResponses.insert = Promise.resolve({ error: new Error("expected error") }); + const data = { new: {} }; + try { + await adapter.insert(data); + expect.fail("expected error missing"); + } catch (e) { + if (e instanceof Error && e.message === "expected error missing") throw e; + expect(e).toBeInstanceOf(Error); + expect(e).toHaveProperty("action", "insert"); + expect(e).toHaveProperty("data", data); + } + mockSupabaseResponses.insert = originalResponse; + cleanup(); + }); + + it("relays the deletion to the database", () => { + const [adapter, cleanup] = createRoot(dispose => [ + supabaseAdapter({ + client: mockSupabaseClient, + table: "test", + }), + dispose, + ]); + return adapter.delete({ old: { id: 1 } }).then(cleanup); + }); + + it("collects errors during deletion to the database", async () => { + const [adapter, cleanup] = createRoot(dispose => [ + supabaseAdapter({ + client: mockSupabaseClient, + table: "test", + }), + dispose, + ]); + const originalResponse = mockSupabaseResponses.delete; + mockSupabaseResponses.delete = Promise.resolve({ error: new Error("expected error") }); + const data = { old: {} }; + try { + await adapter.delete(data); + expect.fail("expected error missing"); + } catch (e) { + if (e instanceof Error && e.message === "expected error missing") throw e; + expect(e).toBeInstanceOf(Error); + expect(e).toHaveProperty("action", "delete"); + expect(e).toHaveProperty("data", data); + } + mockSupabaseResponses.delete = originalResponse; + cleanup(); + }); + + it("relays the update to the database", () => { + const [adapter, cleanup] = createRoot(dispose => [ + supabaseAdapter({ + client: mockSupabaseClient, + table: "test", + }), + dispose, + ]); + return adapter.update({ old: { id: 1 }, new: { data: "tested" } }).then(cleanup); + }); + + it("collects errors during update to the database", async () => { + const [adapter, cleanup] = createRoot(dispose => [ + supabaseAdapter({ + client: mockSupabaseClient, + table: "test", + }), + dispose, + ]); + const originalResponse = mockSupabaseResponses.update; + mockSupabaseResponses.update = Promise.resolve({ error: new Error("expected error") }); + const data = { old: { id: 1 }, new: { test: "tested" } }; + try { + await adapter.update(data); + expect.fail("expected error missing"); + } catch (e) { + if (e instanceof Error && e.message === "expected error missing") throw e; + expect(e).toBeInstanceOf(Error); + expect(e).toHaveProperty("action", "update"); + expect(e).toHaveProperty("data", data); + } + mockSupabaseResponses.update = originalResponse; + cleanup(); + }); +}); + +describe("createDbStore", () => { + it("initializes the store", () => { + return createRoot( + dispose => + new Promise((resolve, reject) => { + try { + const [dbStore] = createDbStore({ + adapter: supabaseAdapter({ client: mockSupabaseClient, table: "test" }), + }); + createEffect((counter: number = 0) => { + if (counter === 0) { + expect(dbStore).toEqual([]); + } else { + expect(dbStore).toEqual(mockSupabaseClientData); + dispose(); + resolve(); + } + return counter + 1; + }); + } catch (e) { + dispose(); + reject(e); + } + }), + ); + }); + + it.sequential("refetches from the database on calling refetch", () => { + return createRoot( + dispose => + new Promise((resolve, reject) => { + try { + const [dbStore, _, { refetch }] = createDbStore({ + adapter: supabaseAdapter({ client: mockSupabaseClient, table: "test" }), + }); + createEffect((counter: number = 0) => { + if (counter < 1) { + expect(dbStore).toEqual([]); + } else if (counter == 1) { + expect(dbStore).toEqual(mockSupabaseClientData); + mockSupabaseClientData.push({ id: 3, data: "added" }); + expect(dbStore).not.toEqual(mockSupabaseClientData); + refetch(); + } else { + expect(dbStore).toEqual(mockSupabaseClientData); + dispose(); + resolve(); + } + return counter + 1; + }); + } catch (e) { + dispose(); + reject(e); + } + }), + ); + }); + + it.sequential("inserts into the database from the store", () => { + return createRoot( + dispose => + new Promise((resolve, reject) => { + try { + const [dbStore, setDbStore] = createDbStore({ + adapter: supabaseAdapter({ client: mockSupabaseClient, table: "test" }), + }); + // @ts-ignore + vi.mocked(mockSupabaseClient.insert).mockImplementationOnce((data, _options) => { + expect(data).toEqual({ data: "inserted" }); + dispose(); + resolve(); + return mockSupabaseResponses.insert; + }); + setDbStore(dbStore.length, { data: "inserted" }); + } catch (e) { + dispose(); + reject(e); + } + }), + ); + }); + + it.sequential("adds ids into the store from the database", () => { + return createRoot( + dispose => + new Promise((resolve, reject) => { + try { + const [dbStore, setDbStore] = createDbStore({ + adapter: supabaseAdapter({ client: mockSupabaseClient, table: "test" }), + }); + createEffect((counter: number = 0) => { + dbStore.length; + if (counter === 0) { + expect(dbStore).toEqual([]); + } else if (counter === 1) { + expect(dbStore).toEqual(mockSupabaseClientData); + setDbStore(dbStore.length, { data: "inserted" }); + } else if (counter === 2) { + expect(dbStore.at(-1)).toEqual({ id: undefined, data: "inserted" }); + mockSupabaseSendEvent({ + eventType: "INSERT", + old: {}, + new: { id: 5, data: "inserted" }, + schema: "*", + commit_timestamp: new Date().toUTCString(), + table: "test", + errors: [], + }); + } else if (counter === 3) { + expect(dbStore.at(-1)).toEqual({ id: 5, data: "inserted" }); + dispose(); + resolve(); + } + return counter + 1; + }); + } catch (e) { + dispose(); + reject(e); + } + }), + ); + }); + + it.sequential("inserts into the store from the database", () => { + return createRoot( + dispose => + new Promise((resolve, reject) => { + try { + const [dbStore] = createDbStore({ + adapter: supabaseAdapter({ client: mockSupabaseClient, table: "test" }), + }); + createEffect((counter: number = 0) => { + if (counter === 0) { + expect(dbStore).toHaveLength(0); + } else if (counter === 1) { + expect(dbStore.length).toBeGreaterThan(0); + mockSupabaseSendEvent({ + eventType: "INSERT", + commit_timestamp: new Date().toUTCString(), + new: { id: 4, data: "inserted" }, + old: {}, + schema: "*", + table: "test", + errors: [], + }); + } else if (counter === 2) { + expect(dbStore.at(-1)).toEqual({ id: 4, data: "inserted" }); + dispose(); + resolve(); + } + return counter + 1; + }); + } catch (e) { + dispose(); + reject(e); + } + }), + ); + }); + + it.sequential("handles errors during insertion into the database", () => { + const originalResponse = mockSupabaseResponses.insert; + const errorCause = { message: "server connection lost" }; + mockSupabaseResponses.insert = Promise.resolve({ error: errorCause }); + return createRoot( + dispose => + new Promise((resolve, reject) => { + try { + const [dbStore, setDbStore] = createDbStore<{ id: number; data: string }>({ + adapter: supabaseAdapter({ client: mockSupabaseClient, table: "test" }), + onError: error => { + try { + expect(error).toBeInstanceOf(Error); + expect(error.toString()).toBe("Error: Unknown error"); + expect(error.cause).toEqual(errorCause); + expect(error.data).toEqual({ new: { id: undefined, data: "inserted" }, old: {} }); + expect(error.action).toEqual("insert"); + expect(error.server).toBe(false); + } catch (e) { + dispose(); + reject(e); + } + dispose(); + resolve(); + }, + }); + setDbStore(dbStore.length, { data: "inserted" }); + } catch (e) { + dispose(); + reject(e); + } + }), + ).finally(() => { + mockSupabaseResponses.insert = originalResponse; + }); + }); + + it.sequential("updates the database from the store", () => { + return createRoot( + dispose => + new Promise((resolve, reject) => { + try { + const [_, setDbStore] = createDbStore({ + adapter: supabaseAdapter({ client: mockSupabaseClient, table: "test" }), + init: [{ id: 1, data: "not yet updated" }], + }); + // @ts-ignore + vi.mocked(mockSupabaseClient.eq).mockImplementationOnce((key, value) => { + expect(key).toBe("id"); + expect(value).toBe(1); + dispose(); + resolve(); + return mockSupabaseResponses.update; + }); + // @ts-ignore + vi.mocked(mockSupabaseClient.update).mockImplementationOnce(data => { + expect(data).toEqual({ data: "updated" }); + return mockSupabaseClient; + }); + setDbStore(0, { data: "updated" }); + } catch (e) { + dispose(); + reject(e); + } + }), + ); + }); + + it.sequential("handles errors during updates of the database", () => { + const originalResponse = mockSupabaseResponses.update; + const errorCause = { message: "server connection lost" }; + mockSupabaseResponses.update = Promise.resolve({ error: errorCause }); + return createRoot( + dispose => + new Promise((resolve, reject) => { + try { + const [_, setDbStore] = createDbStore<{ id: number; data: string }>({ + adapter: supabaseAdapter({ client: mockSupabaseClient, table: "test" }), + init: mockSupabaseClientData, + onError: error => { + try { + expect(error).toBeInstanceOf(Error); + expect(error.toString()).toBe("Error: Unknown error"); + expect(error.cause).toEqual(errorCause); + expect(error.data).toEqual({ new: { data: "updated" }, old: { id: 1 } }); + expect(error.action).toEqual("update"); + expect(error.server).toBe(false); + } catch (e) { + dispose(); + reject(e); + } + dispose(); + resolve(); + }, + }); + setDbStore(0, { data: "updated" }); + } catch (e) { + dispose(); + reject(e); + } + }), + ).finally(() => { + mockSupabaseResponses.update = originalResponse; + }); + }); + + it.skip("updates the store from the database", () => { + return createRoot( + dispose => + new Promise((resolve, reject) => { + try { + const [dbStore] = createDbStore({ + adapter: supabaseAdapter({ client: mockSupabaseClient, table: "test" }), + }); + createEffect((counter: number = 0) => { + // subscribe the effect to the data so all updates can be captured. + JSON.stringify(dbStore); + if (counter === 0) { + expect(dbStore).toHaveLength(0); + } else if (counter === 1) { + expect(dbStore.length).toBeGreaterThan(0); + mockSupabaseSendEvent({ + eventType: "UPDATE", + commit_timestamp: new Date().toUTCString(), + new: { data: "updated" }, + old: { id: 1 }, + schema: "*", + table: "test", + errors: [], + }); + } else if (counter === 2) { + expect(dbStore[0]).toEqual({ id: 1, data: "updated" }); + dispose(); + resolve(); + } + return counter + 1; + }); + } catch (e) { + dispose(); + reject(e); + } + }), + ); + }); + + it.sequential("deletes from the database from the store", () => { + return createRoot( + dispose => + new Promise((resolve, reject) => { + try { + const [dbStore, setDbStore] = createDbStore({ + adapter: supabaseAdapter({ client: mockSupabaseClient, table: "test" }), + init: [{ id: 1, data: "not yet deleted" }], + }); + // @ts-ignore + vi.mocked(mockSupabaseClient.eq).mockImplementationOnce((key, value) => { + expect(key).toBe("id"); + expect(value).toBe(1); + dispose(); + resolve(); + return mockSupabaseResponses.delete; + }); + // @ts-ignore + setDbStore(dbStore.length - 1, undefined); + } catch (e) { + dispose(); + reject(e); + } + }), + ); + }); + + it.skip("deletes from the store from the database", () => { + return createRoot( + dispose => + new Promise((resolve, reject) => { + try { + const [dbStore] = createDbStore({ + adapter: supabaseAdapter({ client: mockSupabaseClient, table: "test" }), + }); + createEffect((counter: number = 0) => { + // subscribe the effect to the data so all updates can be captured. + JSON.stringify(dbStore); + if (counter === 0) { + expect(dbStore).toHaveLength(0); + } else if (counter === 1) { + expect(dbStore.length).toBeGreaterThan(0); + mockSupabaseSendEvent({ + eventType: "DELETE", + commit_timestamp: new Date().toUTCString(), + new: {}, + old: { id: 1 }, + schema: "*", + table: "test", + errors: [], + }); + } else if (counter === 2) { + expect(dbStore[0]).toEqual({ id: 2, data: "two" }); + dispose(); + resolve(); + } + return counter + 1; + }); + } catch (e) { + dispose(); + reject(e); + } + }), + ); + }); + + it.skip("handles error during deletion", () => { + const originalResponse = mockSupabaseResponses.delete; + const errorCause = { message: "server connection lost" }; + mockSupabaseResponses.delete = Promise.resolve({ error: errorCause }); + return createRoot( + dispose => + new Promise((resolve, reject) => { + try { + const [dbStore, setDbStore] = createDbStore<{ id: number; data: string }>({ + adapter: supabaseAdapter({ client: mockSupabaseClient, table: "test" }), + init: mockSupabaseClientData, + onError: error => { + try { + expect(error).toBeInstanceOf(Error); + expect(error.toString()).toBe("Error: Unknown error"); + expect(error.cause).toEqual(errorCause); + expect(error.data).toEqual({ old: { id: 1 } }); + expect(error.action).toEqual("delete"); + expect(error.server).toBe(false); + } catch (e) { + dispose(); + reject(e); + } + dispose(); + resolve(); + }, + }); + setDbStore(reconcile(dbStore.filter(({ id }) => id !== 1))); + } catch (e) { + dispose(); + reject(e); + } + }), + ).finally(() => { + mockSupabaseResponses.delete = originalResponse; + }); + }); +}); diff --git a/packages/db-store/test/supabase-mock.ts b/packages/db-store/test/supabase-mock.ts new file mode 100644 index 000000000..a5085fe9d --- /dev/null +++ b/packages/db-store/test/supabase-mock.ts @@ -0,0 +1,63 @@ +import { RealtimePostgresChangesPayload, SupabaseClient } from "@supabase/supabase-js"; +import { vi } from "vitest"; + +const mockSupabaseSubscribers: ((ev: RealtimePostgresChangesPayload) => void)[] = []; + +export const mockSupabaseClientEvents = { + insert: [] as Record[], + update: [] as Record[], + delete: [] as Record[], +}; + +export const mockSupabaseClientData = [ + { id: 1, data: "one" }, + { id: 2, data: "two" }, +]; + +let eqResponse: "delete" | "update" = "update"; + +export const mockSupabaseClient = { + from: function () { + return mockSupabaseClient; + }, + select: function () { + return Promise.resolve({ error: null, data: mockSupabaseClientData }); + }, + channel: function () { + return mockSupabaseClient; + }, + on: function (_: any, __: any, handler: (ev: RealtimePostgresChangesPayload) => void) { + mockSupabaseSubscribers.push(handler); + return mockSupabaseClient; + }, + subscribe: function () { + return mockSupabaseClient; + }, + unsubscribe: function () { + mockSupabaseSubscribers.length = 0; + return mockSupabaseClient; + }, + insert: vi.fn(function (_row: Record) { + return mockSupabaseResponses.insert; + }), + delete: function (_row: { id: string | number }) { + eqResponse = "delete"; + return mockSupabaseClient; + }, + update: vi.fn(function (_row: Record) { + eqResponse = "update"; + return mockSupabaseClient; + }), + eq: vi.fn(function (_row: { id: string | number }) { + return mockSupabaseResponses[eqResponse]; + }), +} as unknown as SupabaseClient; + +export const mockSupabaseSendEvent = (ev: RealtimePostgresChangesPayload) => + mockSupabaseSubscribers.forEach(s => s(ev)); + +export const mockSupabaseResponses = { + insert: Promise.resolve({}), + delete: Promise.resolve({}), + update: Promise.resolve({}), +}; diff --git a/packages/db-store/tsconfig.json b/packages/db-store/tsconfig.json new file mode 100644 index 000000000..64f690fff --- /dev/null +++ b/packages/db-store/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "dist", + "rootDir": "src" + }, + "references": [ + { + "path": "../resource" + } + ], + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/packages/deep/CHANGELOG.md b/packages/deep/CHANGELOG.md index 485b9816c..bac19c68d 100644 --- a/packages/deep/CHANGELOG.md +++ b/packages/deep/CHANGELOG.md @@ -1,5 +1,21 @@ # @solid-primitives/deep +## 0.3.2 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/memo@1.4.2 + +## 0.3.1 + +### Patch Changes + +- Updated dependencies [d86e65d] + - @solid-primitives/memo@1.4.1 + ## 0.3.0 ### Minor Changes diff --git a/packages/deep/package.json b/packages/deep/package.json index 390a3340f..35a9df55b 100644 --- a/packages/deep/package.json +++ b/packages/deep/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/deep", - "version": "0.3.0", + "version": "0.3.2", "description": "Primitives for tracking and observing nested reactive objects in Solid.", "author": "Samuel Burbano ", "contributors": [ @@ -43,8 +43,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/destructure/CHANGELOG.md b/packages/destructure/CHANGELOG.md index 0e4cba99f..81849e23a 100644 --- a/packages/destructure/CHANGELOG.md +++ b/packages/destructure/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/destructure +## 0.2.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 0.2.0 ### Minor Changes diff --git a/packages/destructure/package.json b/packages/destructure/package.json index 5e85c273c..e58be8b65 100644 --- a/packages/destructure/package.json +++ b/packages/destructure/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/destructure", - "version": "0.2.0", + "version": "0.2.1", "description": "Primitives for destructuring reactive objects – like props or stores – or signals of them into a separate accessors updated individually.", "author": "Damian Tarnawski @thetarnav ", "license": "MIT", @@ -30,8 +30,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/devices/CHANGELOG.md b/packages/devices/CHANGELOG.md index ec039fbd2..1fbe4dc6c 100644 --- a/packages/devices/CHANGELOG.md +++ b/packages/devices/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/devices +## 1.3.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 1.3.0 ### Minor Changes diff --git a/packages/devices/package.json b/packages/devices/package.json index ba3896e17..f8fc26454 100644 --- a/packages/devices/package.json +++ b/packages/devices/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/devices", - "version": "1.3.0", + "version": "1.3.1", "description": "Primitive that enumerates media devices", "author": "Alex Lohr ", "contributors": [ @@ -34,8 +34,8 @@ "module": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/event-bus/CHANGELOG.md b/packages/event-bus/CHANGELOG.md index 2ac63a76c..bab522002 100644 --- a/packages/event-bus/CHANGELOG.md +++ b/packages/event-bus/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/event-bus +## 1.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 1.1.0 ### Minor Changes diff --git a/packages/event-bus/package.json b/packages/event-bus/package.json index 9eaf8f215..427956f39 100644 --- a/packages/event-bus/package.json +++ b/packages/event-bus/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/event-bus", - "version": "1.1.0", + "version": "1.1.1", "description": "A collection of SolidJS primitives providing various features of a pubsub/event-emitter/event-bus.", "author": "Damian Tarnawski @thetarnav ", "license": "MIT", @@ -30,8 +30,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/event-dispatcher/CHANGELOG.md b/packages/event-dispatcher/CHANGELOG.md index 3d8625cc2..01015d443 100644 --- a/packages/event-dispatcher/CHANGELOG.md +++ b/packages/event-dispatcher/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/event-dispatcher +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 0.1.0 ### Minor Changes diff --git a/packages/event-dispatcher/package.json b/packages/event-dispatcher/package.json index e68c837cd..44a46d674 100644 --- a/packages/event-dispatcher/package.json +++ b/packages/event-dispatcher/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/event-dispatcher", - "version": "0.1.0", + "version": "0.1.1", "description": "A primitive to dispatch component events.", "author": "Aylo Srd ", "contributors": [], @@ -38,8 +38,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/event-listener/CHANGELOG.md b/packages/event-listener/CHANGELOG.md index 0e914a342..e4d88cffb 100644 --- a/packages/event-listener/CHANGELOG.md +++ b/packages/event-listener/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/event-listener +## 2.4.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 2.4.0 ### Minor Changes diff --git a/packages/event-listener/package.json b/packages/event-listener/package.json index e420b470e..6f27a42e4 100644 --- a/packages/event-listener/package.json +++ b/packages/event-listener/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/event-listener", - "version": "2.4.0", + "version": "2.4.1", "description": "SolidJS Primitives to manage creating event listeners.", "author": "David Di Biase ", "contributors": [ @@ -34,8 +34,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/event-props/CHANGELOG.md b/packages/event-props/CHANGELOG.md index c6a21b617..30e0b2c03 100644 --- a/packages/event-props/CHANGELOG.md +++ b/packages/event-props/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/event-props +## 0.3.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 0.3.0 ### Minor Changes diff --git a/packages/event-props/package.json b/packages/event-props/package.json index 025a882ae..c8ec749fc 100644 --- a/packages/event-props/package.json +++ b/packages/event-props/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/event-props", - "version": "0.3.0", + "version": "0.3.1", "description": "Primitive to manage events in a reactive way.", "author": "Alex Lohr ", "license": "MIT", @@ -27,8 +27,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/fetch/CHANGELOG.md b/packages/fetch/CHANGELOG.md index 90553e544..51620a4ec 100644 --- a/packages/fetch/CHANGELOG.md +++ b/packages/fetch/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/fetch +## 2.5.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 2.5.0 ### Minor Changes diff --git a/packages/fetch/package.json b/packages/fetch/package.json index 214b08248..de5851f3c 100644 --- a/packages/fetch/package.json +++ b/packages/fetch/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/fetch", - "version": "2.5.0", + "version": "2.5.1", "description": "Primitive that wraps fetch requests", "author": "Alex Lohr ", "license": "MIT", @@ -27,8 +27,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/filesystem/CHANGELOG.md b/packages/filesystem/CHANGELOG.md index 0d6a34fb2..7f1bd46a9 100644 --- a/packages/filesystem/CHANGELOG.md +++ b/packages/filesystem/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/filesystem +## 1.3.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 1.3.0 ### Minor Changes diff --git a/packages/filesystem/package.json b/packages/filesystem/package.json index 6b11526b5..ea624fae6 100644 --- a/packages/filesystem/package.json +++ b/packages/filesystem/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/filesystem", - "version": "1.3.0", + "version": "1.3.1", "description": "A primitive for convenient file system access.", "author": "Alex Lohr ", "contributors": [], @@ -45,8 +45,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/flux-store/CHANGELOG.md b/packages/flux-store/CHANGELOG.md index 475e4efbe..8a2bdbd7d 100644 --- a/packages/flux-store/CHANGELOG.md +++ b/packages/flux-store/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/flux-store +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 0.1.0 ### Minor Changes diff --git a/packages/flux-store/package.json b/packages/flux-store/package.json index 79a88bd46..e9da68a1a 100644 --- a/packages/flux-store/package.json +++ b/packages/flux-store/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/flux-store", - "version": "0.1.0", + "version": "0.1.1", "description": "SolidJS Primitive to simplify the creation of global stores and the ability to access and mutate them.", "author": "Zalexios ", "contributors": [], @@ -43,8 +43,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/fullscreen/CHANGELOG.md b/packages/fullscreen/CHANGELOG.md index f7b0c0c9c..b6641c673 100644 --- a/packages/fullscreen/CHANGELOG.md +++ b/packages/fullscreen/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/fullscreen +## 1.3.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 1.3.0 ### Minor Changes diff --git a/packages/fullscreen/package.json b/packages/fullscreen/package.json index 713da345d..3b964bce1 100644 --- a/packages/fullscreen/package.json +++ b/packages/fullscreen/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/fullscreen", - "version": "1.3.0", + "version": "1.3.1", "description": "Primitive that wraps the fullscreen API.", "author": "Alex Lohr ", "license": "MIT", @@ -27,8 +27,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/geolocation/CHANGELOG.md b/packages/geolocation/CHANGELOG.md index 0521ce924..da554195b 100644 --- a/packages/geolocation/CHANGELOG.md +++ b/packages/geolocation/CHANGELOG.md @@ -1,5 +1,15 @@ # @solid-primitives/geolocation +## 1.5.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/static-store@0.1.1 + - @solid-primitives/utils@6.3.1 + ## 1.5.0 ### Minor Changes diff --git a/packages/geolocation/package.json b/packages/geolocation/package.json index 2888ab9e1..62eb79188 100644 --- a/packages/geolocation/package.json +++ b/packages/geolocation/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/geolocation", - "version": "1.5.0", + "version": "1.5.1", "description": "Primitives to query geolocation and observe changes.", "author": "David Di Biase ", "license": "MIT", @@ -34,8 +34,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/graphql/CHANGELOG.md b/packages/graphql/CHANGELOG.md index 5585eb259..6f6b5c0f7 100644 --- a/packages/graphql/CHANGELOG.md +++ b/packages/graphql/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/graphql +## 2.2.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 2.2.0 ### Minor Changes diff --git a/packages/graphql/package.json b/packages/graphql/package.json index 027da5c60..cbce4c1dc 100644 --- a/packages/graphql/package.json +++ b/packages/graphql/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/graphql", - "version": "2.2.0", + "version": "2.2.1", "description": "Primitive that generates a client and reactive GraphQL queries", "author": "David Di Biase ", "contributors": [ @@ -31,8 +31,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/history/CHANGELOG.md b/packages/history/CHANGELOG.md index b316081f3..04ed6e24d 100644 --- a/packages/history/CHANGELOG.md +++ b/packages/history/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/history +## 0.2.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 0.2.0 ### Minor Changes diff --git a/packages/history/package.json b/packages/history/package.json index b1d4d2d18..020ab1fc6 100644 --- a/packages/history/package.json +++ b/packages/history/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/history", - "version": "0.2.0", + "version": "0.2.1", "description": "Primitives for managing undo/redo history in Solid.", "author": "Damian Tarnawski ", "contributors": [], @@ -39,8 +39,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/i18n/CHANGELOG.md b/packages/i18n/CHANGELOG.md index eecdd4b3d..adc8b8005 100644 --- a/packages/i18n/CHANGELOG.md +++ b/packages/i18n/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/i18n +## 2.2.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 2.2.0 ### Minor Changes diff --git a/packages/i18n/package.json b/packages/i18n/package.json index dce6373cf..95b227f57 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/i18n", - "version": "2.2.0", + "version": "2.2.1", "description": "Library of primitives for providing internationalization support.", "author": "Alexandre Mouton-Brady ", "contributors": [ @@ -36,8 +36,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/idle/CHANGELOG.md b/packages/idle/CHANGELOG.md index e0f56118e..f2c6bfb89 100644 --- a/packages/idle/CHANGELOG.md +++ b/packages/idle/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/idle +## 0.2.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 0.2.0 ### Minor Changes diff --git a/packages/idle/package.json b/packages/idle/package.json index 9acae5076..7ef32f11a 100644 --- a/packages/idle/package.json +++ b/packages/idle/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/idle", - "version": "0.2.0", + "version": "0.2.1", "description": "A primitive to observe the user's idle status and react to its changes.", "author": "Aylo Srd ", "contributors": [], @@ -31,8 +31,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/immutable/CHANGELOG.md b/packages/immutable/CHANGELOG.md index 0292f7fac..9ea77bfd1 100644 --- a/packages/immutable/CHANGELOG.md +++ b/packages/immutable/CHANGELOG.md @@ -1,5 +1,15 @@ # @solid-primitives/immutable +## 1.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/keyed@1.5.1 + - @solid-primitives/utils@6.3.1 + ## 1.1.0 ### Minor Changes diff --git a/packages/immutable/package.json b/packages/immutable/package.json index c828f77d5..6a08ed8dd 100644 --- a/packages/immutable/package.json +++ b/packages/immutable/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/immutable", - "version": "1.1.0", + "version": "1.1.1", "description": "Primitive for rectifying immutable values and dealing with immutability in Solid.", "author": "Damian Tarnawski ", "contributors": [], @@ -37,8 +37,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/input-mask/CHANGELOG.md b/packages/input-mask/CHANGELOG.md index c7834f7b5..d1af29d9b 100644 --- a/packages/input-mask/CHANGELOG.md +++ b/packages/input-mask/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/input-mask +## 0.3.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 0.3.0 ### Minor Changes diff --git a/packages/input-mask/package.json b/packages/input-mask/package.json index 0bee1e2ec..fc8121c6f 100644 --- a/packages/input-mask/package.json +++ b/packages/input-mask/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/input-mask", - "version": "0.3.0", + "version": "0.3.1", "description": "input masking event primitive.", "author": "Alex Lohr ", "contributors": [], @@ -28,8 +28,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/intersection-observer/CHANGELOG.md b/packages/intersection-observer/CHANGELOG.md index b555d405a..4fd8c02e5 100644 --- a/packages/intersection-observer/CHANGELOG.md +++ b/packages/intersection-observer/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/intersection-observer +## 2.2.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 2.2.0 ### Minor Changes diff --git a/packages/intersection-observer/package.json b/packages/intersection-observer/package.json index d6bb749c9..ca38dc69b 100644 --- a/packages/intersection-observer/package.json +++ b/packages/intersection-observer/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/intersection-observer", - "version": "2.2.0", + "version": "2.2.1", "description": "Primitives to support using the intersection observer API.", "author": "David Di Biase ", "contributors": [ @@ -32,8 +32,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/jsx-tokenizer/CHANGELOG.md b/packages/jsx-tokenizer/CHANGELOG.md index 17b31645c..f252c86b3 100644 --- a/packages/jsx-tokenizer/CHANGELOG.md +++ b/packages/jsx-tokenizer/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/jsx-tokenizer +## 1.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 1.1.0 ### Minor Changes diff --git a/packages/jsx-tokenizer/package.json b/packages/jsx-tokenizer/package.json index 0b4aeca56..5fc942ab5 100644 --- a/packages/jsx-tokenizer/package.json +++ b/packages/jsx-tokenizer/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/jsx-tokenizer", - "version": "1.1.0", + "version": "1.1.1", "description": "A primitive to tokenize your solid-components to enable custom parsing.", "author": "Vincent Van Dijck ", "contributors": [ @@ -41,8 +41,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/keyboard/CHANGELOG.md b/packages/keyboard/CHANGELOG.md index c10f695f1..6a0c12285 100644 --- a/packages/keyboard/CHANGELOG.md +++ b/packages/keyboard/CHANGELOG.md @@ -1,5 +1,16 @@ # @solid-primitives/keyboard +## 1.3.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/event-listener@2.4.1 + - @solid-primitives/rootless@1.5.1 + - @solid-primitives/utils@6.3.1 + ## 1.3.0 ### Minor Changes diff --git a/packages/keyboard/README.md b/packages/keyboard/README.md index 406eee1c0..bd255fa34 100644 --- a/packages/keyboard/README.md +++ b/packages/keyboard/README.md @@ -73,9 +73,7 @@ createEffect(() => { console.log(keys()); // => string[] — list of currently held keys }); - - {key => {key}} - +{key => {key}}; ``` ## `useCurrentlyHeldKey` diff --git a/packages/keyboard/package.json b/packages/keyboard/package.json index b8d149df8..6fc4962b8 100644 --- a/packages/keyboard/package.json +++ b/packages/keyboard/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/keyboard", - "version": "1.3.0", + "version": "1.3.1", "description": "A library of reactive promitives helping handling user's keyboard input.", "author": "Damian Tarnwski ", "contributors": [], @@ -42,8 +42,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/keyed/CHANGELOG.md b/packages/keyed/CHANGELOG.md index 87932c3b9..fb31fa6f6 100644 --- a/packages/keyed/CHANGELOG.md +++ b/packages/keyed/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/keyed +## 1.5.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 1.5.0 ### Minor Changes diff --git a/packages/keyed/package.json b/packages/keyed/package.json index f97c1a5f0..f779fa903 100644 --- a/packages/keyed/package.json +++ b/packages/keyed/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/keyed", - "version": "1.5.0", + "version": "1.5.1", "description": "Control Flow primitives and components that require specifying explicit keys to identify or rerender elements.", "author": "Damian Tarnawski @thetarnav ", "license": "MIT", @@ -37,8 +37,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/lifecycle/CHANGELOG.md b/packages/lifecycle/CHANGELOG.md index a0fbea12e..c4fd30d0e 100644 --- a/packages/lifecycle/CHANGELOG.md +++ b/packages/lifecycle/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/lifecycle +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 0.1.0 ### Minor Changes diff --git a/packages/lifecycle/package.json b/packages/lifecycle/package.json index 37a2c7da1..8c725115d 100644 --- a/packages/lifecycle/package.json +++ b/packages/lifecycle/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/lifecycle", - "version": "0.1.0", + "version": "0.1.1", "description": "Package providing extra layer of lifecycle primitives for Solid.", "author": "Damian Tarnawski ", "contributors": [], @@ -19,7 +19,7 @@ "list": [ "createIsMounted", "isHydrated", - "onConnect" + "onElementConnect" ], "category": "Reactivity" }, @@ -39,8 +39,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/list/CHANGELOG.md b/packages/list/CHANGELOG.md index 44490691a..b6151c596 100644 --- a/packages/list/CHANGELOG.md +++ b/packages/list/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/list +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 0.1.0 ### Minor Changes diff --git a/packages/list/package.json b/packages/list/package.json index c2e263fc1..4b20347ca 100644 --- a/packages/list/package.json +++ b/packages/list/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/list", - "version": "0.1.0", + "version": "0.1.1", "description": "A List component, an alternative to For and Index.", "author": "Maciek50322 <34212298+maciek50322@users.noreply.github.com>", "contributors": [], @@ -37,8 +37,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/map/CHANGELOG.md b/packages/map/CHANGELOG.md index dac2a680b..0594bd8e5 100644 --- a/packages/map/CHANGELOG.md +++ b/packages/map/CHANGELOG.md @@ -1,5 +1,20 @@ # @solid-primitives/map +## 0.7.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/trigger@1.2.1 + +## 0.7.0 + +### Minor Changes + +- 1d1c686: Avoid notifying non-existent members on Map.clear() + ## 0.6.0 ### Minor Changes diff --git a/packages/map/package.json b/packages/map/package.json index 6aa562c16..186785992 100644 --- a/packages/map/package.json +++ b/packages/map/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/map", - "version": "0.6.0", + "version": "0.7.1", "description": "The Map & WeakMap data structures as a reactive signals.", "author": "Damian Tarnawski @thetarnav ", "license": "MIT", @@ -37,8 +37,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/map/src/index.ts b/packages/map/src/index.ts index 489c5bc76..eeba7a344 100644 --- a/packages/map/src/index.ts +++ b/packages/map/src/index.ts @@ -120,14 +120,17 @@ export class ReactiveMap extends Map { } clear(): void { - if (super.size) { - super.clear(); + if (super.size === 0) return; + batch(() => { + this.#keyTriggers.dirty($OBJECT); + this.#valueTriggers.dirty($OBJECT); + for (const key of super.keys()) { + this.#keyTriggers.dirty(key); + this.#valueTriggers.dirty(key); + } - batch(() => { - this.#keyTriggers.dirtyAll(); - this.#valueTriggers.dirtyAll(); - }); - } + super.clear(); + }); } } diff --git a/packages/map/test/index.test.ts b/packages/map/test/index.test.ts index ccc5f2898..6c9b84cae 100644 --- a/packages/map/test/index.test.ts +++ b/packages/map/test/index.test.ts @@ -378,6 +378,45 @@ describe("ReactiveMap", () => { dispose(); }); + test(".clear() notifies only listeners of existing members", () => + createRoot(dispose => { + const map = new ReactiveMap([ + [1, "a"], + [2, "b"], + [3, "c"], + ]); + + const existingKey = vi.fn(); + createComputed(() => existingKey(map.has(2))); + + const existingValue = vi.fn(); + createComputed(() => existingValue(map.get(2))); + + const nonexistingKey = vi.fn(); + createComputed(() => nonexistingKey(map.has(4))); + + const nonexistingValue = vi.fn(); + createComputed(() => nonexistingValue(map.get(4))); + + expect(existingKey).toHaveBeenNthCalledWith(1, true); + expect(existingValue).toHaveBeenNthCalledWith(1, "b"); + + expect(nonexistingKey).toHaveBeenNthCalledWith(1, false); + expect(nonexistingValue).toHaveBeenNthCalledWith(1, undefined); + + map.clear(); + + expect(existingKey).toHaveBeenCalledTimes(2); + expect(existingKey).toHaveBeenNthCalledWith(2, false); + + expect(existingValue).toHaveBeenCalledTimes(2); + expect(existingValue).toHaveBeenNthCalledWith(2, undefined); + + expect(nonexistingKey).toHaveBeenCalledTimes(1); + expect(nonexistingValue).toHaveBeenCalledTimes(1); + + dispose(); + })); }); describe("ReactiveWeakMap", () => { diff --git a/packages/marker/CHANGELOG.md b/packages/marker/CHANGELOG.md index 5bf7a1786..8b80cbab3 100644 --- a/packages/marker/CHANGELOG.md +++ b/packages/marker/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/marker +## 0.2.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 0.2.0 ### Minor Changes diff --git a/packages/marker/package.json b/packages/marker/package.json index 4fccb90f9..e56709733 100644 --- a/packages/marker/package.json +++ b/packages/marker/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/marker", - "version": "0.2.0", + "version": "0.2.1", "description": "A reactive primitive for marking matching parts of a string.", "author": "Damian Tarnawski ", "contributors": [], @@ -38,8 +38,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/masonry/CHANGELOG.md b/packages/masonry/CHANGELOG.md index 3e9276d04..57a527916 100644 --- a/packages/masonry/CHANGELOG.md +++ b/packages/masonry/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/masonry +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 0.1.0 ### Minor Changes diff --git a/packages/masonry/package.json b/packages/masonry/package.json index 9677d6caa..472d01eb6 100644 --- a/packages/masonry/package.json +++ b/packages/masonry/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/masonry", - "version": "0.1.0", + "version": "0.1.1", "description": "Primitives for creating a reactive masonry layout.", "author": "Damian Tarnawski ", "contributors": [], @@ -37,8 +37,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/media/CHANGELOG.md b/packages/media/CHANGELOG.md index 326c29cdd..5c7aa155e 100644 --- a/packages/media/CHANGELOG.md +++ b/packages/media/CHANGELOG.md @@ -1,5 +1,17 @@ # @solid-primitives/media +## 2.3.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/event-listener@2.4.1 + - @solid-primitives/static-store@0.1.1 + - @solid-primitives/rootless@1.5.1 + - @solid-primitives/utils@6.3.1 + ## 2.3.0 ### Minor Changes diff --git a/packages/media/package.json b/packages/media/package.json index eab3f12b4..b07c49c1d 100644 --- a/packages/media/package.json +++ b/packages/media/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/media", - "version": "2.3.0", + "version": "2.3.1", "description": "Primitives for media query and device features", "author": "David Di Biase ", "contributors": [ @@ -48,8 +48,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/memo/CHANGELOG.md b/packages/memo/CHANGELOG.md index 869271ef9..630f3c1b0 100644 --- a/packages/memo/CHANGELOG.md +++ b/packages/memo/CHANGELOG.md @@ -1,5 +1,21 @@ # @solid-primitives/memo +## 1.4.2 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/scheduled@1.5.1 + - @solid-primitives/utils@6.3.1 + +## 1.4.1 + +### Patch Changes + +- d86e65d: fix createWritableMemo (fixes #772) + ## 1.4.0 ### Minor Changes diff --git a/packages/memo/package.json b/packages/memo/package.json index dcf616bf3..fc4058fba 100644 --- a/packages/memo/package.json +++ b/packages/memo/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/memo", - "version": "1.4.0", + "version": "1.4.2", "description": "Collection of custom memo primitives. They extend Solid's createMemo functionality while keeping the usage similar.", "author": "Damian Tarnawski @thetarnav ", "contributors": [], @@ -37,8 +37,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/memo/src/index.ts b/packages/memo/src/index.ts index 3ca93b76e..290b5c90e 100644 --- a/packages/memo/src/index.ts +++ b/packages/memo/src/index.ts @@ -191,10 +191,12 @@ export function createWritableMemo( options?: MemoOptions, ): [signal: Accessor, setter: Setter] { let combined: Accessor = () => value as T; + const [signal, setSignal] = createSignal(value as T, EQUALS_FALSE_OPTIONS), memo = createMemo( callbackWith(fn, () => combined()), value, + EQUALS_FALSE_OPTIONS, ); return [ diff --git a/packages/memo/test/writable.test.ts b/packages/memo/test/writable.test.ts index 2dfe52788..2277971f9 100644 --- a/packages/memo/test/writable.test.ts +++ b/packages/memo/test/writable.test.ts @@ -32,7 +32,10 @@ describe("createWritableMemo", () => { const [count, setCount] = createSignal(1); let prevCb: number | undefined; const { result, setResult, dispose } = createRoot(dispose => { - const [result, setResult] = createWritableMemo(p => ((prevCb = p), count() * 2), -2); + const [result, setResult] = createWritableMemo( + (p?: number) => ((prevCb = p), count() * 2), + -2, + ); expect(prevCb).toBe(-2); expect(result()).toBe(2); return { result, dispose, setResult }; @@ -101,4 +104,26 @@ describe("createWritableMemo", () => { expect(memo()).toBe(-2); dispose(); })); + + // https://github.com/solidjs-community/solid-primitives/issues/772 + test("issue 772", () => { + const [source, setSource] = createSignal(0); + const [[value, setValue], dispose] = createRoot(dispose => [ + createWritableMemo(() => !!source()), + dispose, + ]); + + expect(value()).toBe(false); + + setSource(1); + expect(value()).toBe(true); + + setValue(false); + expect(value()).toBe(false); + + setSource(2); + expect(value()).toBe(true); + + dispose(); + }); }); diff --git a/packages/mouse/CHANGELOG.md b/packages/mouse/CHANGELOG.md index 9cd9fef93..9cfef68d3 100644 --- a/packages/mouse/CHANGELOG.md +++ b/packages/mouse/CHANGELOG.md @@ -1,5 +1,23 @@ # @solid-primitives/mouse +## 2.1.2 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/event-listener@2.4.1 + - @solid-primitives/static-store@0.1.1 + - @solid-primitives/rootless@1.5.1 + - @solid-primitives/utils@6.3.1 + +## 2.1.1 + +### Patch Changes + +- 8fe4e2a: Use `scrollY` not `screenY` in `getPositionToScreen` + ## 2.1.0 ### Minor Changes diff --git a/packages/mouse/package.json b/packages/mouse/package.json index 57940a296..ca160e50c 100644 --- a/packages/mouse/package.json +++ b/packages/mouse/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/mouse", - "version": "2.1.0", + "version": "2.1.2", "description": "A collection of Solid Primitives, that capture current mouse cursor position, and help to deal with common related usecases.", "author": "Damian Tarnawski ", "license": "MIT", @@ -25,8 +25,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/mouse/src/common.ts b/packages/mouse/src/common.ts index 174723e5f..3a54889b0 100644 --- a/packages/mouse/src/common.ts +++ b/packages/mouse/src/common.ts @@ -164,5 +164,5 @@ export const getPositionToScreen = isServer ? (): Position => DEFAULT_MOUSE_POSITION : (pageX: number, pageY: number): Position => ({ x: pageX - window.scrollX, - y: pageY - window.screenY, + y: pageY - window.scrollY, }); diff --git a/packages/mutable/CHANGELOG.md b/packages/mutable/CHANGELOG.md index cd5685717..6cf3d6133 100644 --- a/packages/mutable/CHANGELOG.md +++ b/packages/mutable/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/mutable +## 1.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 1.1.0 ### Minor Changes diff --git a/packages/mutable/package.json b/packages/mutable/package.json index 5be547d5b..4f8d49434 100644 --- a/packages/mutable/package.json +++ b/packages/mutable/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/mutable", - "version": "1.1.0", + "version": "1.1.1", "description": "A primitive for creating a mutable store, an alternative to Solid's createStore.", "author": "Damian Tarnawski ", "contributors": [], @@ -37,8 +37,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/mutation-observer/CHANGELOG.md b/packages/mutation-observer/CHANGELOG.md index a9a5c7959..9a98f7153 100644 --- a/packages/mutation-observer/CHANGELOG.md +++ b/packages/mutation-observer/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/mutation-observer +## 1.2.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 1.2.0 ### Minor Changes diff --git a/packages/mutation-observer/package.json b/packages/mutation-observer/package.json index 4dc0a0a15..4bb8905eb 100644 --- a/packages/mutation-observer/package.json +++ b/packages/mutation-observer/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/mutation-observer", - "version": "1.2.0", + "version": "1.2.1", "description": "Primitive providing the ability to watch for changes made to the DOM tree.", "author": "Damian Tarnawski @thetarnav ", "license": "MIT", @@ -33,8 +33,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/page-visibility/CHANGELOG.md b/packages/page-visibility/CHANGELOG.md index 49d3136d0..2276da9d4 100644 --- a/packages/page-visibility/CHANGELOG.md +++ b/packages/page-visibility/CHANGELOG.md @@ -1,5 +1,16 @@ # @solid-primitives/page-visibility +## 2.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/event-listener@2.4.1 + - @solid-primitives/rootless@1.5.1 + - @solid-primitives/utils@6.3.1 + ## 2.1.0 ### Minor Changes diff --git a/packages/page-visibility/package.json b/packages/page-visibility/package.json index fcc15a6c3..651940a97 100644 --- a/packages/page-visibility/package.json +++ b/packages/page-visibility/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/page-visibility", - "version": "2.1.0", + "version": "2.1.1", "description": "Primitive to track page visibility", "author": "David Di Biase", "contributors": [ @@ -31,8 +31,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/pagination/CHANGELOG.md b/packages/pagination/CHANGELOG.md index 6a81d80a5..8dd59f0b7 100644 --- a/packages/pagination/CHANGELOG.md +++ b/packages/pagination/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/pagination +## 0.4.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 0.4.0 ### Minor Changes diff --git a/packages/pagination/package.json b/packages/pagination/package.json index 1f3a184a0..31e79eb9c 100644 --- a/packages/pagination/package.json +++ b/packages/pagination/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/pagination", - "version": "0.4.0", + "version": "0.4.1", "description": "A primitive that creates all the reactive data to manage your pagination.", "author": "Alex Lohr ", "contributors": [ @@ -40,8 +40,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/permission/CHANGELOG.md b/packages/permission/CHANGELOG.md index af4c258df..831634ef2 100644 --- a/packages/permission/CHANGELOG.md +++ b/packages/permission/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/permission +## 1.3.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 1.3.0 ### Minor Changes diff --git a/packages/permission/package.json b/packages/permission/package.json index a11032cb7..e760d06a0 100644 --- a/packages/permission/package.json +++ b/packages/permission/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/permission", - "version": "1.3.0", + "version": "1.3.1", "description": "Primitive that wraps permission queries", "author": "Alex Lohr ", "license": "MIT", @@ -27,8 +27,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/platform/CHANGELOG.md b/packages/platform/CHANGELOG.md index fb0dd8a53..791362c64 100644 --- a/packages/platform/CHANGELOG.md +++ b/packages/platform/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/platform +## 0.2.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 0.2.0 ### Minor Changes diff --git a/packages/platform/package.json b/packages/platform/package.json index 89feeafd3..42bc2b298 100644 --- a/packages/platform/package.json +++ b/packages/platform/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/platform", - "version": "0.2.0", + "version": "0.2.1", "description": "A set of const boolean variables identifying device and browser type.", "author": "Damian Tarnawski ", "contributors": [], @@ -38,8 +38,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/pointer/CHANGELOG.md b/packages/pointer/CHANGELOG.md index 57e6f46cf..1c91023ac 100644 --- a/packages/pointer/CHANGELOG.md +++ b/packages/pointer/CHANGELOG.md @@ -1,5 +1,16 @@ # @solid-primitives/pointer +## 0.3.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/event-listener@2.4.1 + - @solid-primitives/rootless@1.5.1 + - @solid-primitives/utils@6.3.1 + ## 0.3.0 ### Minor Changes diff --git a/packages/pointer/package.json b/packages/pointer/package.json index b0629c4aa..200ea54c9 100644 --- a/packages/pointer/package.json +++ b/packages/pointer/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/pointer", - "version": "0.3.0", + "version": "0.3.1", "description": "A collection of primitives, giving you a nicer API to handle pointer events in a reactive context.", "author": "Damian Tarnawski @thetarnav ", "license": "MIT", @@ -39,8 +39,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/presence/CHANGELOG.md b/packages/presence/CHANGELOG.md index 16a99626e..f293a38fd 100644 --- a/packages/presence/CHANGELOG.md +++ b/packages/presence/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/presence +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 0.1.0 ### Minor Changes diff --git a/packages/presence/package.json b/packages/presence/package.json index bd076d0ee..26b447904 100644 --- a/packages/presence/package.json +++ b/packages/presence/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/presence", - "version": "0.1.0", + "version": "0.1.1", "description": "Utility to animate the presence of an element based on the existence of data or lack thereof.", "author": "Ethan Standel ", "license": "MIT", @@ -27,8 +27,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/promise/CHANGELOG.md b/packages/promise/CHANGELOG.md index 04a5382c2..fd41b8bde 100644 --- a/packages/promise/CHANGELOG.md +++ b/packages/promise/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/until +## 1.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 1.1.0 ### Minor Changes diff --git a/packages/promise/package.json b/packages/promise/package.json index 1715fb9a6..934255ddd 100644 --- a/packages/promise/package.json +++ b/packages/promise/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/promise", - "version": "1.1.0", + "version": "1.1.1", "description": "Promised one-time watch for changes. Await a reactive condition.", "author": "Damian Tarnawski @thetarnav ", "license": "MIT", @@ -26,8 +26,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/props/CHANGELOG.md b/packages/props/CHANGELOG.md index d26ff8437..eef0acb5a 100644 --- a/packages/props/CHANGELOG.md +++ b/packages/props/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/props +## 3.2.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 3.2.0 ### Minor Changes diff --git a/packages/props/package.json b/packages/props/package.json index 3ac90eb66..f8f3c0602 100644 --- a/packages/props/package.json +++ b/packages/props/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/props", - "version": "3.2.0", + "version": "3.2.1", "description": "Library of primitives focused around component props.", "author": "Damian Tarnawski ", "contributors": [], @@ -34,8 +34,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/raf/CHANGELOG.md b/packages/raf/CHANGELOG.md index 597a45a0a..ba5a7954c 100644 --- a/packages/raf/CHANGELOG.md +++ b/packages/raf/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/raf +## 2.3.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 2.3.0 ### Minor Changes diff --git a/packages/raf/package.json b/packages/raf/package.json index a119f3665..084ab6b8e 100644 --- a/packages/raf/package.json +++ b/packages/raf/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/raf", - "version": "2.3.0", + "version": "2.3.1", "description": "Primitive that facilitates RAF functionality", "author": "David Di Biase ", "contributors": [ @@ -33,8 +33,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/range/CHANGELOG.md b/packages/range/CHANGELOG.md index a0d6a8db3..06c0a50a9 100644 --- a/packages/range/CHANGELOG.md +++ b/packages/range/CHANGELOG.md @@ -1,5 +1,20 @@ # @solid-primitives/range +## 0.2.2 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + +## 0.2.1 + +### Patch Changes + +- b3d3815: repeat now returns clones of its result instead of mutating + ## 0.2.0 ### Minor Changes diff --git a/packages/range/package.json b/packages/range/package.json index 913680944..5b701f9dc 100644 --- a/packages/range/package.json +++ b/packages/range/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/range", - "version": "0.2.0", + "version": "0.2.2", "description": "Control Flow Primitives for displaying given number or a number range of elements.", "author": "Damian Tarnawski @thetarnav ", "contributors": [], @@ -43,8 +43,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/range/src/repeat.ts b/packages/range/src/repeat.ts index d79efa7c2..51b21e1e9 100644 --- a/packages/range/src/repeat.ts +++ b/packages/range/src/repeat.ts @@ -1,4 +1,4 @@ -import { Accessor, JSX, createMemo, createRoot, onCleanup, untrack } from "solid-js"; +import { Accessor, JSX, createMemo, createRoot, onCleanup } from "solid-js"; import { toFunction } from "./common.js"; /** @@ -23,60 +23,68 @@ export function repeat( mapFn: (i: number) => T, options: { fallback?: Accessor } = {}, ): Accessor { - let disposers: (() => void)[] = [], - items: T[] = [], - prevLen = 0; - - onCleanup(() => disposers.forEach(f => f())); + let prev: readonly T[] = []; + let prevLen: number | undefined; + const disposers: (() => void)[] = []; + onCleanup(() => { + for (let index = 0; index < disposers.length; index++) { + disposers[index]!(); + } + }); - const mapLength = (len: number): T[] => { - if (len === 0) { - disposers.forEach(f => f()); + // Truncate toward zero and force positive + const memoLen = createMemo(() => Math.max(times() | 0, 0)); - if (options.fallback) - return createRoot(dispose => { - disposers = [dispose]; - return (items = [options.fallback!()]); - }); + return function mapLength(): T[] { + const len = memoLen(); + if (len === prevLen) return prev as T[]; - disposers = []; - return (items = []); + // Dispose of fallback or unnecessarry elements + if (prevLen === 0) disposers[0]?.(); + else { + for (let index = len; index < disposers.length; index++) { + disposers[index]!(); + } } - if (prevLen === 0) { - // after fallback case: - if (disposers[0]) disposers[0](); - for (let i = 0; i < len; i++) items[i] = createRoot(mapper.bind(void 0, i)); - return items; - } + // The following prefers to use `prev.slice` to + // preserve any array element kind optimizations + // the runtime has made. - { - const diff = prevLen - len; - if (diff > 0) { - for (let i = prevLen - 1; i >= len; i--) disposers[i]!(); - items.splice(len, diff); - disposers.splice(len, diff); - return items; + if (len === 0) { + const fallback = options.fallback; + if (fallback) { + // Show fallback if available + const next = prev.slice(0, 1); + next[0] = createRoot(dispose => { + disposers[0] = dispose; + return fallback(); + }); + + disposers.length = 1; + prevLen = 0; + return (prev = next); + } else { + // Show empty array, otherwise + disposers.length = 0; + prevLen = 0; + return (prev = prev.slice(0, 0)); } } - for (let i = prevLen; i < len; i++) items[i] = createRoot(mapper.bind(void 0, i)); - return items; - }; + const next = prev.slice(0, len); - const mapper = (index: number, dispose: () => void): T => { - disposers[index] = dispose; - return mapFn(index); - }; + // Create new elements as needed + for (let index = prevLen ?? 0; index < len; index++) { + next[index] = createRoot(dispose => { + disposers[index] = dispose; + return mapFn(index); + }); + } - const memoLen = createMemo(() => Math.floor(Math.max(times(), 0))); - return () => { - const len = memoLen(); - return untrack(() => { - const newItems = mapLength(len); - prevLen = len; - return newItems; - }); + disposers.length = len; + prevLen = len; + return (prev = next); }; } diff --git a/packages/range/test/repeat.test.ts b/packages/range/test/repeat.test.ts index c23cb3690..e98ab5807 100644 --- a/packages/range/test/repeat.test.ts +++ b/packages/range/test/repeat.test.ts @@ -1,6 +1,6 @@ import { expect, describe, it } from "vitest"; import { createComputed, createRoot, createSignal, onCleanup } from "solid-js"; -import { repeat } from "../src/index.js"; +import { Repeat, repeat } from "../src/index.js"; describe("repeat", () => { it("maps only added items", () => @@ -82,4 +82,52 @@ describe("repeat", () => { setLength(3); expect(mapped(), "mapped after dispose").toEqual(["fb"]); })); + + it("uses fallback when length is initially 0", () => + createRoot(disposer => { + const map = repeat( + () => 0, + i => i, + { fallback: () => NaN }, + ); + expect(map()).toEqual([NaN]); + disposer(); + })); +}); + +describe("", () => { + it("notifies observers on length change", () => { + const [length, setLength] = createSignal(3); + + const [dispose, accessor] = createRoot(dispose => { + const accessor = Repeat({ + get times() { + return length(); + }, + fallback: () => 0, + children: () => 1, + }) as never as () => {}; + return [dispose, accessor]; + }); + + let notifications = 0; + createComputed(() => { + accessor(); + notifications++; + }); + + expect(notifications).toEqual(1); + setLength(4); + expect(notifications).toEqual(2); + setLength(0); + expect(notifications).toEqual(3); + setLength(2); + expect(notifications).toEqual(4); + setLength(1); + expect(notifications).toEqual(5); + setLength(1.5); + expect(notifications).toEqual(5); + + dispose(); + }); }); diff --git a/packages/refs/CHANGELOG.md b/packages/refs/CHANGELOG.md index 611008e04..1e2f049bb 100644 --- a/packages/refs/CHANGELOG.md +++ b/packages/refs/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/refs +## 1.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 1.1.0 ### Minor Changes diff --git a/packages/refs/package.json b/packages/refs/package.json index 89b20a220..e751540f4 100644 --- a/packages/refs/package.json +++ b/packages/refs/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/refs", - "version": "1.1.0", + "version": "1.1.1", "description": "Library of primitives, components and directives for SolidJS that help managing references to JSX elements.", "author": "Damian Tarnawski @thetarnav ", "license": "MIT", @@ -31,8 +31,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/resize-observer/CHANGELOG.md b/packages/resize-observer/CHANGELOG.md index 7c39b4a2f..f009e2793 100644 --- a/packages/resize-observer/CHANGELOG.md +++ b/packages/resize-observer/CHANGELOG.md @@ -1,5 +1,17 @@ # @solid-primitives/resize-observer +## 2.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/event-listener@2.4.1 + - @solid-primitives/static-store@0.1.1 + - @solid-primitives/rootless@1.5.1 + - @solid-primitives/utils@6.3.1 + ## 2.1.0 ### Minor Changes diff --git a/packages/resize-observer/package.json b/packages/resize-observer/package.json index 8d4a84d07..75f8f76bf 100644 --- a/packages/resize-observer/package.json +++ b/packages/resize-observer/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/resize-observer", - "version": "2.1.0", + "version": "2.1.1", "description": "Reactive primitives for observing resizing of HTML elements.", "author": "Moshe Udimar", "contributors": [ @@ -32,8 +32,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/resource/CHANGELOG.md b/packages/resource/CHANGELOG.md index 34bd1f88c..905bf2d6d 100644 --- a/packages/resource/CHANGELOG.md +++ b/packages/resource/CHANGELOG.md @@ -1,5 +1,18 @@ # @solid-primitives/resource +## 0.4.2 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + +## 0.4.1 + +### Patch Changes + +- 9914bfc: Fix setter input value in `createDeepSignal`. + ## 0.4.0 ### Minor Changes diff --git a/packages/resource/package.json b/packages/resource/package.json index 45a4785d1..7acf10405 100644 --- a/packages/resource/package.json +++ b/packages/resource/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/resource", - "version": "0.4.0", + "version": "0.4.2", "description": "A template primitive example.", "author": "Alex ", "contributors": [], @@ -40,8 +40,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/resource/src/index.ts b/packages/resource/src/index.ts index b5da335e5..9faa3cfc3 100644 --- a/packages/resource/src/index.ts +++ b/packages/resource/src/index.ts @@ -298,7 +298,8 @@ export function createDeepSignal(v?: T): Signal { return [ () => store[0], (update: T) => ( - setStore(0, reconcile(typeof update === "function" ? update(unwrap(store[0])) : v)), store[0] + setStore(0, reconcile(typeof update === "function" ? update(unwrap(store[0])) : update)), + store[0] ), ] as Signal; } diff --git a/packages/resource/test/index.test.ts b/packages/resource/test/index.test.ts index 6849b7eee..4974ee009 100644 --- a/packages/resource/test/index.test.ts +++ b/packages/resource/test/index.test.ts @@ -419,4 +419,26 @@ describe("createDeepSignal", () => { return run + 1; }); })); + test("mutates the resource with callback", () => + testEffect(done => { + const [data, { mutate }] = createResource(() => ({ counter: 1 }), { + storage: createDeepSignal, + }); + mutate(() => ({ counter: 2 })); + createEffect(() => { + expect(data()?.counter).toBe(2); + done(); + }); + })); + test("mutates the resource with plain object", () => + testEffect(done => { + const [data, { mutate }] = createResource(() => ({ counter: 1 }), { + storage: createDeepSignal, + }); + mutate({ counter: 2 }); + createEffect(() => { + expect(data()?.counter).toBe(2); + done(); + }); + })); }); diff --git a/packages/rootless/CHANGELOG.md b/packages/rootless/CHANGELOG.md index 6df15ba59..26d438d1b 100644 --- a/packages/rootless/CHANGELOG.md +++ b/packages/rootless/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/rootless +## 1.5.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 1.5.0 ### Minor Changes diff --git a/packages/rootless/README.md b/packages/rootless/README.md index c6b6f1231..be5e9e0a2 100644 --- a/packages/rootless/README.md +++ b/packages/rootless/README.md @@ -111,10 +111,10 @@ dispose() ### Definition ```ts -type runWithRootReturn = T extends void | undefined | null - ? Dispose - : [returns: T, dispose: Dispose]; -const createDisposable = (fn: () => T, detachedOwner?: Owner): runWithRootReturn +export function createDisposable( + fn: (dispose: VoidFunction) => void, + ...owners: (Owner | null)[] +): VoidFunction; ``` ## `createSingletonRoot` diff --git a/packages/rootless/package.json b/packages/rootless/package.json index 774ac4700..4854670f5 100644 --- a/packages/rootless/package.json +++ b/packages/rootless/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/rootless", - "version": "1.5.0", + "version": "1.5.1", "description": "A collection of helpers that aim to simplify using reactive primitives outside of reactive roots, and managing disposal of reactive roots.", "author": "Damian Tarnawski @thetarnav ", "license": "MIT", @@ -31,8 +31,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/scheduled/CHANGELOG.md b/packages/scheduled/CHANGELOG.md index 00749b67c..61a925e00 100644 --- a/packages/scheduled/CHANGELOG.md +++ b/packages/scheduled/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/scheduled +## 1.5.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 1.5.0 ### Minor Changes diff --git a/packages/scheduled/package.json b/packages/scheduled/package.json index e613c12af..c208b6843 100644 --- a/packages/scheduled/package.json +++ b/packages/scheduled/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/scheduled", - "version": "1.5.0", + "version": "1.5.1", "description": "Primitives for creating scheduled — throttled or debounced — callbacks.", "contributors": [ "David Di Biase ", @@ -39,8 +39,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/script-loader/CHANGELOG.md b/packages/script-loader/CHANGELOG.md index 192e9b93b..bb15d473a 100644 --- a/packages/script-loader/CHANGELOG.md +++ b/packages/script-loader/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/script-loader +## 2.3.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 2.3.0 ### Minor Changes diff --git a/packages/script-loader/package.json b/packages/script-loader/package.json index 578e3f063..48e624efe 100644 --- a/packages/script-loader/package.json +++ b/packages/script-loader/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/script-loader", - "version": "2.3.0", + "version": "2.3.1", "description": "Primitive to load scripts dynamically", "author": "Alex Lohr ", "contributors": [ @@ -30,8 +30,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/scroll/CHANGELOG.md b/packages/scroll/CHANGELOG.md index ef57acdcc..4d8f2fb29 100644 --- a/packages/scroll/CHANGELOG.md +++ b/packages/scroll/CHANGELOG.md @@ -1,5 +1,16 @@ # @solid-primitives/scroll +## 2.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/event-listener@2.4.1 + - @solid-primitives/static-store@0.1.1 + - @solid-primitives/rootless@1.5.1 + ## 2.1.0 ### Minor Changes diff --git a/packages/scroll/package.json b/packages/scroll/package.json index 1b7736a0a..4600beac5 100644 --- a/packages/scroll/package.json +++ b/packages/scroll/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/scroll", - "version": "2.1.0", + "version": "2.1.1", "description": "Reactive primitives to react to element/window scrolling.", "author": "David Di Biase ", "contributors": [ @@ -31,8 +31,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/selection/CHANGELOG.md b/packages/selection/CHANGELOG.md index 9a14ba8a8..bff1f2b3f 100644 --- a/packages/selection/CHANGELOG.md +++ b/packages/selection/CHANGELOG.md @@ -1,5 +1,18 @@ # @solid-primitives/selection +## 0.1.2 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + +## 0.1.1 + +### Patch Changes + +- 4ddea69: fix: selection contenteditable node detection + ## 0.1.0 ### Minor Changes diff --git a/packages/selection/dev/index.tsx b/packages/selection/dev/index.tsx index be733c061..5ce34e69b 100644 --- a/packages/selection/dev/index.tsx +++ b/packages/selection/dev/index.tsx @@ -34,6 +34,11 @@ const App: Component = () => {
te st +
    +
  • first item
  • +
  • second item
  • +
  • third item
  • +
diff --git a/packages/selection/package.json b/packages/selection/package.json index d131910ac..3a137b3c0 100644 --- a/packages/selection/package.json +++ b/packages/selection/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/selection", - "version": "0.1.0", + "version": "0.1.2", "description": "selection primitive.", "author": "Alex Lohr ", "contributors": [], @@ -27,8 +27,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/selection/src/index.ts b/packages/selection/src/index.ts index d6a792039..6e3cdff9a 100644 --- a/packages/selection/src/index.ts +++ b/packages/selection/src/index.ts @@ -17,7 +17,7 @@ export const getTextNodes = (startNode: Node) => { const addNodeLength = (length: number, node: Node) => length + (node as Text).data.length; const getRangePos = (container: Node, offset: number, texts: Node[]) => { - const index = texts.indexOf(container); + const index = texts.findIndex(text => text === container || text.parentElement === container); return index === -1 ? NaN : texts.slice(0, index).reduce(addNodeLength, 0) + offset; }; diff --git a/packages/set/CHANGELOG.md b/packages/set/CHANGELOG.md index d9cc9c0bc..2fa55b968 100644 --- a/packages/set/CHANGELOG.md +++ b/packages/set/CHANGELOG.md @@ -1,5 +1,20 @@ # @solid-primitives/set +## 0.7.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/trigger@1.2.1 + +## 0.7.0 + +### Minor Changes + +- 4de408a: Avoid notifying non-existent members on Set.clear() + ## 0.6.0 ### Minor Changes diff --git a/packages/set/package.json b/packages/set/package.json index 0e6e8239b..13efe3de0 100644 --- a/packages/set/package.json +++ b/packages/set/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/set", - "version": "0.6.0", + "version": "0.7.1", "description": "The Set & WeakSet data structures as a reactive signals.", "author": "Damian Tarnawski @thetarnav ", "license": "MIT", @@ -35,8 +35,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/set/src/index.ts b/packages/set/src/index.ts index 26d81653c..b26c64960 100644 --- a/packages/set/src/index.ts +++ b/packages/set/src/index.ts @@ -88,13 +88,14 @@ export class ReactiveSet extends Set { } clear(): void { - if (super.size) { + if (!super.size) return; + batch(() => { + this.#triggers.dirty($KEYS); + for (const member of super.values()) { + this.#triggers.dirty(member); + } super.clear(); - - batch(() => { - this.#triggers.dirtyAll(); - }); - } + }); } } diff --git a/packages/set/test/index.test.ts b/packages/set/test/index.test.ts index 412fba986..e7e46c67d 100644 --- a/packages/set/test/index.test.ts +++ b/packages/set/test/index.test.ts @@ -182,6 +182,29 @@ describe("ReactiveSet", () => { dispose(); }); + + test("clear notifies only listeners of existing members", () => + createRoot(dispose => { + const set = new ReactiveSet([1, 2, 3, 4]); + + const existing = vi.fn(); + createComputed(() => existing(set.has(2))); + + const nonexisting = vi.fn(); + createComputed(() => nonexisting(set.has(5))); + + expect(existing).toHaveBeenNthCalledWith(1, true); + expect(nonexisting).toHaveBeenNthCalledWith(1, false); + + set.clear(); + + expect(existing).toHaveBeenCalledTimes(2); + expect(existing).toHaveBeenNthCalledWith(2, false); + + expect(nonexisting).toHaveBeenCalledTimes(1); + + dispose(); + })); }); describe("ReactiveWeakSet", () => { diff --git a/packages/share/CHANGELOG.md b/packages/share/CHANGELOG.md index 6e37953eb..813abbe1b 100644 --- a/packages/share/CHANGELOG.md +++ b/packages/share/CHANGELOG.md @@ -1,5 +1,18 @@ # @solid-primitives/share +## 2.2.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + +## 2.2.0 + +### Minor Changes + +- 00822cc: Added Bluesky and X networks + ## 2.1.0 ### Minor Changes diff --git a/packages/share/README.md b/packages/share/README.md index dab8a6aa0..87a7a298f 100644 --- a/packages/share/README.md +++ b/packages/share/README.md @@ -29,14 +29,14 @@ pnpm add @solid-primitives/share ### How to use it ```ts -import { createSocialShare, TWITTER } from "@solid-primitives/share"; +import { createSocialShare, BLUESKY } from "@solid-primitives/share"; const [share, close] = createSocialShare(() => ({ title: "SolidJS.com", url: "https://www.solidjs.com", description: "Simple and well-behaved reactivity!", })); -share(TWITTER); +share(BLUESKY); ``` ### Definition @@ -67,6 +67,7 @@ The following are a list of supported networks that may be imported from the sha | ------------- | ------------------ | ------------------ | ------------------ | ----------------------------------------------------------------------------------------------------------- | | Baidu | :heavy_check_mark: | :heavy_check_mark: | :x: | | | Buffer | :heavy_check_mark: | :heavy_check_mark: | :x: | | +| Bluesky | :heavy_check_mark: | :heavy_check_mark: | :x: | | | Email | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | | EverNote | :heavy_check_mark: | :heavy_check_mark: | :x: | | | Facebook | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | `hashtags` A list of comma-separated hashtags, only the first one will be used.
`quote` Facebook quote. | @@ -86,6 +87,7 @@ The following are a list of supported networks that may be imported from the sha | Telegram | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | | Tumblr | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | | Twitter | :heavy_check_mark: | :heavy_check_mark: | :x: | `hashtags` A list of comma-separated hashtags.
`twitter-user` Twitter user to mention. | +| X | :heavy_check_mark: | :heavy_check_mark: | :x: | `hashtags` A list of comma-separated hashtags.
`twitter-user` X user to mention. | | Viber | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | | VK | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | `media` URL of an image describing the content. | | Weibo | :heavy_check_mark: | :heavy_check_mark: | :x: | `media` URL of an image describing the content. | @@ -94,7 +96,7 @@ The following are a list of supported networks that may be imported from the sha | Xing | :heavy_check_mark: | :heavy_check_mark: | :x: | | | Yammer | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | -For the networks: `Line`, `Skype`, `SMS`, `Telegram`, `Viber`, `WhatsApp` and `Yammer`; the shared content is a string of the form: "`$title` `$url` `$description`" +For the networks: `Bluesky`, `Line`, `Skype`, `SMS`, `Telegram`, `Viber`, `WhatsApp` and `Yammer`; the shared content is a string of the form: "`$title` `$url` `$description`" Note that you can also provide your own custom network by formatting the input string into the share function. The following is a list of properties that will be replaced by the utility: @@ -104,12 +106,12 @@ Note that you can also provide your own custom network by formatting the input s - `@q`: Quote - `@h`: Hashtags - `@m`: Media -- `@tu`: TwitterUser (Twitter specific) +- `@tu`: X User (X specific) -The following is an example of Twitter's share string: +The following is an example of X's share string: ```ts -const twitter: Network = "https://twitter.com/intent/tweet?text=@t&url=@u&hashtags=@h@tu"; +const x: Network = "https://www.x.com/intent/tweet?text=@t&url=@u&hashtags=@h@tu"; ``` ### Demo diff --git a/packages/share/package.json b/packages/share/package.json index ee0483b33..762b3182f 100644 --- a/packages/share/package.json +++ b/packages/share/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/share", - "version": "2.1.0", + "version": "2.2.1", "description": "Primitives to help with sharing content on social media and beyond.", "author": "David Di Biase ", "contributors": [ @@ -38,8 +38,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/share/src/networks.ts b/packages/share/src/networks.ts index cfbbb5afc..6e1b886da 100644 --- a/packages/share/src/networks.ts +++ b/packages/share/src/networks.ts @@ -16,6 +16,7 @@ export const BAIDU: Network = "http://cang.baidu.com/do/add?iu=@u&it=@t"; export const BUFFER: Network = "https://bufferapp.com/add?text=@t&url=@u"; export const EMAIL: Network = "mailto:?subject=@t&body=@u%0D%0A@d"; export const EVERNOTE: Network = "https://www.evernote.com/clip.action?url=@u&title=@t"; +export const BLUESKY: Network = "https://bsky.app/intent/compose?text=@t%0D%0A@u%0D%0A@d"; export const FACEBOOK: Network = "https://www.facebook.com/sharer/sharer.php?u=@u&title=@t&description=@d"e=@q&hashtag=@h"; export const FLIPBOARD: Network = @@ -38,6 +39,7 @@ export const STUMBLEUPON: Network = "https://www.stumbleupon.com/submit?url=@u&t export const TELEGRAM: Network = "https://t.me/share/url?url=@u&text=@t%0D%0A@d"; export const TUMBLR: Network = "https://www.tumblr.com/share/link?url=@u&name=@t&description=@d"; export const TWITTER: Network = "https://twitter.com/intent/tweet?text=@t&url=@u&hashtags=@h@tu"; +export const X: Network = "https://www.x.com/intent/tweet?text=@t&url=@u&hashtags=@h@tu"; export const VIBER: Network = "viber://forward?text=@t%0D%0A@u%0D%0A@d"; export const VK: Network = "https://vk.com/share.php?url=@u&title=@t&description=@d&image=@m&noparse=true"; diff --git a/packages/signal-builders/CHANGELOG.md b/packages/signal-builders/CHANGELOG.md index 896946d84..7b6f6c61e 100644 --- a/packages/signal-builders/CHANGELOG.md +++ b/packages/signal-builders/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/signal-builders +## 0.2.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 0.2.0 ### Minor Changes diff --git a/packages/signal-builders/package.json b/packages/signal-builders/package.json index 9fb308950..99760c8b6 100644 --- a/packages/signal-builders/package.json +++ b/packages/signal-builders/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/signal-builders", - "version": "0.2.0", + "version": "0.2.1", "description": "A collection of chainable and composable reactive signal calculations, aka Signal Builders.", "author": "Your Name ", "license": "MIT", @@ -32,8 +32,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/spring/CHANGELOG.md b/packages/spring/CHANGELOG.md index 5dfa2ff8f..6edcf8979 100644 --- a/packages/spring/CHANGELOG.md +++ b/packages/spring/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/spring +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 0.1.0 ### Minor Changes diff --git a/packages/spring/package.json b/packages/spring/package.json index 5a926044e..f50510970 100644 --- a/packages/spring/package.json +++ b/packages/spring/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/spring", - "version": "0.1.0", + "version": "0.1.1", "description": "Primitive that creates spring physics functions.", "author": "Carlo Taleon ", "contributors": [ @@ -41,8 +41,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/state-machine/CHANGELOG.md b/packages/state-machine/CHANGELOG.md index 91f8af1ce..f2461546c 100644 --- a/packages/state-machine/CHANGELOG.md +++ b/packages/state-machine/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/state-machine +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 0.1.0 ### Minor Changes diff --git a/packages/state-machine/package.json b/packages/state-machine/package.json index 5c3e0f814..7c99ec513 100644 --- a/packages/state-machine/package.json +++ b/packages/state-machine/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/state-machine", - "version": "0.1.0", + "version": "0.1.1", "description": "A primitive for creating reactive state machines.", "author": "Damian Tarnawski ", "contributors": [], @@ -37,8 +37,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/static-store/CHANGELOG.md b/packages/static-store/CHANGELOG.md index 2b2013b42..706b22f2d 100644 --- a/packages/static-store/CHANGELOG.md +++ b/packages/static-store/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/static-store +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 0.1.0 ### Minor Changes diff --git a/packages/static-store/package.json b/packages/static-store/package.json index b850a80e8..687d87de8 100644 --- a/packages/static-store/package.json +++ b/packages/static-store/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/static-store", - "version": "0.1.0", + "version": "0.1.1", "description": "Primitives for creating small reactive objects that doesn't change their shape over time - don't need a proxy wrapper.", "author": "Damian Tarnawski ", "contributors": [], @@ -36,8 +36,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/storage/CHANGELOG.md b/packages/storage/CHANGELOG.md index d9837811a..c2cbeebf4 100644 --- a/packages/storage/CHANGELOG.md +++ b/packages/storage/CHANGELOG.md @@ -1,5 +1,20 @@ # @solid-primitives/storage +## 4.3.2 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + +## 4.3.1 + +### Patch Changes + +- e2e290e: Correct package.json exports. + ## 4.3.0 ### Minor Changes diff --git a/packages/storage/README.md b/packages/storage/README.md index 11d70ed92..b912f9c67 100644 --- a/packages/storage/README.md +++ b/packages/storage/README.md @@ -123,7 +123,7 @@ LocalForage uses indexedDB or WebSQL if available to greatly increase the size o ```ts import { isServer } from "solid-js/web"; -import { makePersisted } from "@solid-primtives/storage"; +import { makePersisted } from "@solid-primitives/storage"; import localforage from "localforage"; const [state, setState] = makePersisted(createSignal(), { diff --git a/packages/storage/package.json b/packages/storage/package.json index b3473f89d..8de4bc137 100644 --- a/packages/storage/package.json +++ b/packages/storage/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/storage", - "version": "4.3.0", + "version": "4.3.2", "description": "Primitive that provides reactive wrappers for storage access", "author": "Alex Lohr ", "contributors": [ @@ -40,15 +40,16 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", ".": { "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } }, "./tauri": { "import": { + "@solid-primitives/source": "./src/tauri.ts", "types": "./dist/tauri.d.ts", "default": "./dist/tauri.js" } diff --git a/packages/stream/CHANGELOG.md b/packages/stream/CHANGELOG.md index f9dcb022b..9ae320ea4 100644 --- a/packages/stream/CHANGELOG.md +++ b/packages/stream/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/stream +## 0.7.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 0.7.0 ### Minor Changes diff --git a/packages/stream/package.json b/packages/stream/package.json index 34ac9256d..0b4b46356 100644 --- a/packages/stream/package.json +++ b/packages/stream/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/stream", - "version": "0.7.0", + "version": "0.7.1", "description": "Primitive that gets a user media stream from microphone, camera or screen", "author": "Alex Lohr ", "license": "MIT", @@ -31,8 +31,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/styles/CHANGELOG.md b/packages/styles/CHANGELOG.md index af8f57c52..b916ad8ae 100644 --- a/packages/styles/CHANGELOG.md +++ b/packages/styles/CHANGELOG.md @@ -1,5 +1,15 @@ # @solid-primitives/styles +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/rootless@1.5.1 + - @solid-primitives/utils@6.3.1 + ## 0.1.0 ### Minor Changes diff --git a/packages/styles/package.json b/packages/styles/package.json index 779e2d266..b8777fbb2 100644 --- a/packages/styles/package.json +++ b/packages/styles/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/styles", - "version": "0.1.0", + "version": "0.1.1", "description": "Collection of reactive primitives focused on styles.", "author": "Damian Tarnawski ", "contributors": [ @@ -33,8 +33,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/timer/CHANGELOG.md b/packages/timer/CHANGELOG.md index 3cfd1e5ed..32c5b721d 100644 --- a/packages/timer/CHANGELOG.md +++ b/packages/timer/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/timer +## 1.4.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 1.4.0 ### Minor Changes diff --git a/packages/timer/package.json b/packages/timer/package.json index f2792f471..f10c9a51f 100644 --- a/packages/timer/package.json +++ b/packages/timer/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/timer", - "version": "1.4.0", + "version": "1.4.1", "description": "Primitives to manage timeout and interval", "author": "David Di Biase ", "contributors": [ @@ -35,8 +35,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/transition-group/CHANGELOG.md b/packages/transition-group/CHANGELOG.md index 6c685b50e..21baef63f 100644 --- a/packages/transition-group/CHANGELOG.md +++ b/packages/transition-group/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/transition-group +## 1.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 1.1.0 ### Minor Changes diff --git a/packages/transition-group/package.json b/packages/transition-group/package.json index 686136ef2..321e2ede9 100644 --- a/packages/transition-group/package.json +++ b/packages/transition-group/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/transition-group", - "version": "1.1.0", + "version": "1.1.1", "description": "Reactive primitives for implementing transition effects in SolidJS", "author": "Damian Tarnawski ", "contributors": [], @@ -39,8 +39,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/trigger/CHANGELOG.md b/packages/trigger/CHANGELOG.md index 48097fb85..4d95f306a 100644 --- a/packages/trigger/CHANGELOG.md +++ b/packages/trigger/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/trigger +## 1.2.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 1.2.0 ### Minor Changes diff --git a/packages/trigger/package.json b/packages/trigger/package.json index 5378b92af..b0016c5f8 100644 --- a/packages/trigger/package.json +++ b/packages/trigger/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/trigger", - "version": "1.2.0", + "version": "1.2.1", "description": "A set of primitives based on Solid signals, used to trigger computations.", "author": "Damian Tarnawski ", "contributors": [], @@ -32,8 +32,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/tween/CHANGELOG.md b/packages/tween/CHANGELOG.md index 1c7619662..50cde4006 100644 --- a/packages/tween/CHANGELOG.md +++ b/packages/tween/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/tween +## 1.4.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 1.4.0 ### Minor Changes diff --git a/packages/tween/package.json b/packages/tween/package.json index da1db2bdc..51378d17f 100644 --- a/packages/tween/package.json +++ b/packages/tween/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/tween", - "version": "1.4.0", + "version": "1.4.1", "description": "Primitive that creates tween functions", "author": "Ryan Carniato ", "license": "MIT", @@ -33,8 +33,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/upload/CHANGELOG.md b/packages/upload/CHANGELOG.md index 447d01df9..dad5a9662 100644 --- a/packages/upload/CHANGELOG.md +++ b/packages/upload/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/upload +## 0.1.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 0.1.0 ### Minor Changes diff --git a/packages/upload/package.json b/packages/upload/package.json index 47a5ec762..bdd1afe99 100644 --- a/packages/upload/package.json +++ b/packages/upload/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/upload", - "version": "0.1.0", + "version": "0.1.1", "description": "Primitives for uploading files.", "author": "Rustam Ashurmatov ", "license": "MIT", @@ -35,8 +35,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md index c372f1e06..72939615f 100644 --- a/packages/utils/CHANGELOG.md +++ b/packages/utils/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/utils +## 6.3.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 6.3.0 ### Minor Changes diff --git a/packages/utils/package.json b/packages/utils/package.json index 9604ead52..8377aed18 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/utils", - "version": "6.3.0", + "version": "6.3.1", "description": "A bunch of reactive utility types and functions, for building primitives with Solid.js", "author": "Damian Tarnawski @thetarnav ", "contributors": [ @@ -26,15 +26,15 @@ "browser": {}, "exports": { ".": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } }, "./immutable": { - "@solid-primitives/source": "./src/immutable/index.ts", "import": { + "@solid-primitives/source": "./src/immutable/index.ts", "types": "./dist/immutable/index.d.ts", "default": "./dist/immutable/index.js" } diff --git a/packages/virtual/CHANGELOG.md b/packages/virtual/CHANGELOG.md index 76ef7df17..578cacf66 100644 --- a/packages/virtual/CHANGELOG.md +++ b/packages/virtual/CHANGELOG.md @@ -1,5 +1,14 @@ # @solid-primitives/virtual +## 0.2.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) +- Updated dependencies [53f08cc] + - @solid-primitives/utils@6.3.1 + ## 0.2.0 ### Minor Changes diff --git a/packages/virtual/package.json b/packages/virtual/package.json index 8962a19ec..b4ac6051e 100644 --- a/packages/virtual/package.json +++ b/packages/virtual/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/virtual", - "version": "0.2.0", + "version": "0.2.1", "description": "A virtualized list component for performantly rendering lists with many elements", "author": "Spencer Whitehead ", "contributors": [], @@ -37,9 +37,9 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.tsx", - "solid": "./dist/index.jsx", "import": { + "@solid-primitives/source": "./src/index.tsx", + "solid": "./dist/index.jsx", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/websocket/CHANGELOG.md b/packages/websocket/CHANGELOG.md index 016ddfc79..d2e7e6536 100644 --- a/packages/websocket/CHANGELOG.md +++ b/packages/websocket/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/websocket +## 1.3.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 1.3.0 ### Minor Changes diff --git a/packages/websocket/package.json b/packages/websocket/package.json index b81abcb04..5ee88899c 100644 --- a/packages/websocket/package.json +++ b/packages/websocket/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/websocket", - "version": "1.3.0", + "version": "1.3.1", "description": "Primitive to create a web socket connection", "author": "David Di Biase ", "contributors": [ @@ -31,8 +31,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/packages/workers/CHANGELOG.md b/packages/workers/CHANGELOG.md index 9c5ef1ecf..30fa41c10 100644 --- a/packages/workers/CHANGELOG.md +++ b/packages/workers/CHANGELOG.md @@ -1,5 +1,12 @@ # @solid-primitives/workers +## 0.4.1 + +### Patch Changes + +- 53f08cc: fix: Move `"@solid-primitives/source"` export condition under import in package.json + (Fixes #774, Fixes #749) + ## 0.4.0 ### Minor Changes diff --git a/packages/workers/package.json b/packages/workers/package.json index abe0a60ee..54cf6a6b2 100644 --- a/packages/workers/package.json +++ b/packages/workers/package.json @@ -1,6 +1,6 @@ { "name": "@solid-primitives/workers", - "version": "0.4.0", + "version": "0.4.1", "description": "Primitives that support creating Web Workers.", "author": "David Di Biase ", "license": "MIT", @@ -29,8 +29,8 @@ "browser": {}, "types": "./dist/index.d.ts", "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f16fe365c..f69ea2688 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -237,6 +237,19 @@ importers: specifier: ^1.8.7 version: 1.8.20 + packages/db-store: + dependencies: + '@solid-primitives/resource': + specifier: workspace:^ + version: link:../resource + solid-js: + specifier: ^1.6.12 + version: 1.8.22 + devDependencies: + '@supabase/supabase-js': + specifier: ^2.48.1 + version: 2.48.1 + packages/deep: dependencies: '@solid-primitives/memo': @@ -2692,6 +2705,28 @@ packages: '@solidjs/start@1.0.6': resolution: {integrity: sha512-O5knaeqDBx+nKLJRm5ZJurnXZtIYBOwOreQ10APaVtVjKIKKRC5HxJ1Kwqg7atOQNNDgsF0pzhW218KseaZ1UA==} + '@supabase/auth-js@2.67.3': + resolution: {integrity: sha512-NJDaW8yXs49xMvWVOkSIr8j46jf+tYHV0wHhrwOaLLMZSFO4g6kKAf+MfzQ2RaD06OCUkUHIzctLAxjTgEVpzw==} + + '@supabase/functions-js@2.4.4': + resolution: {integrity: sha512-WL2p6r4AXNGwop7iwvul2BvOtuJ1YQy8EbOd0dhG1oN1q8el/BIRSFCFnWAMM/vJJlHWLi4ad22sKbKr9mvjoA==} + + '@supabase/node-fetch@2.6.15': + resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} + engines: {node: 4.x || >=6.0.0} + + '@supabase/postgrest-js@1.18.1': + resolution: {integrity: sha512-dWDnoC0MoDHKhaEOrsEKTadWQcBNknZVQcSgNE/Q2wXh05mhCL1ut/jthRUrSbYcqIw/CEjhaeIPp7dLarT0bg==} + + '@supabase/realtime-js@2.11.2': + resolution: {integrity: sha512-u/XeuL2Y0QEhXSoIPZZwR6wMXgB+RQbJzG9VErA3VghVt7uRfSVsjeqd7m5GhX3JR6dM/WRmLbVR8URpDWG4+w==} + + '@supabase/storage-js@2.7.1': + resolution: {integrity: sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==} + + '@supabase/supabase-js@2.48.1': + resolution: {integrity: sha512-VMD+CYk/KxfwGbI4fqwSUVA7CLr1izXpqfFerhnYPSi6LEKD8GoR4kuO5Cc8a+N43LnfSQwLJu4kVm2e4etEmA==} + '@tailwindcss/container-queries@0.1.1': resolution: {integrity: sha512-p18dswChx6WnTSaJCSGx6lTmrGzNNvm2FtXmiO6AuA1V4U5REyoqwmT6kgAsIMdjo07QdAfYXHJ4hnMtfHzWgA==} peerDependencies: @@ -2772,6 +2807,9 @@ packages: '@types/node@22.5.4': resolution: {integrity: sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==} + '@types/phoenix@1.6.6': + resolution: {integrity: sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==} + '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -8170,6 +8208,48 @@ snapshots: - vinxi - vite + '@supabase/auth-js@2.67.3': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/functions-js@2.4.4': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/node-fetch@2.6.15': + dependencies: + whatwg-url: 5.0.0 + + '@supabase/postgrest-js@1.18.1': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/realtime-js@2.11.2': + dependencies: + '@supabase/node-fetch': 2.6.15 + '@types/phoenix': 1.6.6 + '@types/ws': 8.5.12 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@supabase/storage-js@2.7.1': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/supabase-js@2.48.1': + dependencies: + '@supabase/auth-js': 2.67.3 + '@supabase/functions-js': 2.4.4 + '@supabase/node-fetch': 2.6.15 + '@supabase/postgrest-js': 1.18.1 + '@supabase/realtime-js': 2.11.2 + '@supabase/storage-js': 2.7.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@tailwindcss/container-queries@0.1.1(tailwindcss@3.3.3)': dependencies: tailwindcss: 3.3.3 @@ -8265,6 +8345,8 @@ snapshots: dependencies: undici-types: 6.19.8 + '@types/phoenix@1.6.6': {} + '@types/resolve@1.20.2': {} '@types/sizzle@2.3.8': {} diff --git a/site/.env b/site/.env index ac257f987..9e4ed2c09 100644 --- a/site/.env +++ b/site/.env @@ -2,4 +2,6 @@ # These variables are available to the public and can be accessed by anyone. VITE_SITE_URL=https://solid-primitives.netlify.app +VITE_SUPABASE_URL=https://hpinwklbtszwebhaqjxr.supabase.co +VITE_SUPABASE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImhwaW53a2xidHN6d2ViaGFxanhyIiwicm9sZSI6ImFub24iLCJpYXQiOjE3Mzc1NTc1MTUsImV4cCI6MjA1MzEzMzUxNX0._D88mlVMZvkvipFkSwQBA8QZ9i0cl1tutWdYpM02cdI NODE_VERSION=18.15.0 diff --git a/site/src/env.d.ts b/site/src/env.d.ts index 020dac55e..950a0eed3 100644 --- a/site/src/env.d.ts +++ b/site/src/env.d.ts @@ -3,6 +3,8 @@ // declare import.meta.env interface ImportMetaEnv { readonly VITE_SITE_URL: string; + readonly VITE_SUPABASE_URL: string; + readonly VITE_SUPABASE_KEY: string; } interface ImportMeta { diff --git a/site/src/routes/index.tsx b/site/src/routes/index.tsx index a1c7a8ada..1e9537588 100644 --- a/site/src/routes/index.tsx +++ b/site/src/routes/index.tsx @@ -77,9 +77,9 @@ const PrimitivesTable: Component<{ packages: PackageListItem[] | undefined }> = {packages => { // group packages by category const categories = packages.reduce((acc: Record, pkg) => { - const category = acc[pkg.category]; + const category = acc[pkg.primitive.category]; if (category) category.push(pkg); - else acc[pkg.category] = [pkg]; + else acc[pkg.primitive.category] = [pkg]; return acc; }, {}); @@ -108,7 +108,7 @@ const PrimitivesTable: Component<{ packages: PackageListItem[] | undefined }> = {pkg.name} - + {pkg.primitives.map(primitive => ( diff --git a/template/package.json b/template/package.json index 47fa19747..0719cd6b2 100644 --- a/template/package.json +++ b/template/package.json @@ -35,8 +35,8 @@ "types": "./dist/index.d.ts", "browser": {}, "exports": { - "@solid-primitives/source": "./src/index.ts", "import": { + "@solid-primitives/source": "./src/index.ts", "types": "./dist/index.d.ts", "default": "./dist/index.js" }