From 45bb9c71f9b5217c07e03c7d91869286eea39e96 Mon Sep 17 00:00:00 2001 From: Josep M Sobrepere Date: Wed, 22 Jun 2022 14:41:09 +0200 Subject: [PATCH] @react-rxjs/core@0.10.0-rc.1 --- package-lock.json | 84 ++++--------------- packages/core/cjsBuild.js | 2 +- packages/core/package.json | 8 +- packages/core/src/SUSPENSE.ts | 7 -- packages/core/src/Subscribe.test.tsx | 2 +- .../core/src/bind/connectFactoryObservable.ts | 18 ++-- .../core/src/bind/connectObservable.test.tsx | 2 +- packages/core/src/bind/connectObservable.ts | 2 +- packages/core/src/bind/index.ts | 15 ++-- packages/core/src/index.tsx | 3 +- packages/core/src/useStateObservable.ts | 33 ++++---- packages/dom/package.json | 2 +- packages/utils/package.json | 2 +- 13 files changed, 64 insertions(+), 116 deletions(-) delete mode 100644 packages/core/src/SUSPENSE.ts diff --git a/package-lock.json b/package-lock.json index ce875fb..ecebe94 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2359,12 +2359,12 @@ "resolved": "packages/utils", "link": true }, - "node_modules/@rxstate/core": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@rxstate/core/-/core-0.0.1.tgz", - "integrity": "sha512-be8446G5eapl6X8IAuYvvYY78CnyuXX7pASAYG2Ww95hCbqfNLSYXqknvWeUJ4ovO63l5xdM29ct0uUysKDyog==", + "node_modules/@rx-state/core": { + "version": "0.1.0-rc.1", + "resolved": "https://registry.npmjs.org/@rx-state/core/-/core-0.1.0-rc.1.tgz", + "integrity": "sha512-gEEjX5UIN/CeS4GPcsRd4+8ACBzd1jFuY7oiGNg/0Tn6CUpuDwvGoPOdaiam3IdmuCgNyc8G7JxmcGubQURMvQ==", "peerDependencies": { - "rxjs": ">=6" + "rxjs": ">=7" } }, "node_modules/@sinonjs/commons": { @@ -8637,10 +8637,10 @@ }, "packages/core": { "name": "@react-rxjs/core", - "version": "0.9.7", + "version": "0.10.0-rc.1", "license": "MIT", "dependencies": { - "@rxstate/core": "^0.0.1", + "@rx-state/core": "0.1.0-rc.1", "use-sync-external-store": "^1.0.0" }, "devDependencies": { @@ -8656,7 +8656,7 @@ "version": "0.1.8", "license": "MIT", "devDependencies": { - "@react-rxjs/core": "0.9.6" + "@react-rxjs/core": "0.10.0-rc.1" }, "peerDependencies": { "react": ">=16.8.0", @@ -8664,46 +8664,18 @@ "rxjs": ">=6" } }, - "packages/dom/node_modules/@react-rxjs/core": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/@react-rxjs/core/-/core-0.9.6.tgz", - "integrity": "sha512-OEyGPca1LXz06iLZMJyFniE3fFaqNvS/+jdpk7gtNFLGmwCo5H6HPAGFEEhui90A0BpLR1hSzDHy3L9b3I9rZw==", - "dev": true, - "dependencies": { - "@rxstate/core": "^0.0.1", - "use-sync-external-store": "^1.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "rxjs": ">=7" - } - }, "packages/utils": { "name": "@react-rxjs/utils", "version": "0.9.5", "license": "MIT", "devDependencies": { - "@react-rxjs/core": "0.9.6" + "@react-rxjs/core": "0.10.0-rc.1" }, "peerDependencies": { "@react-rxjs/core": ">=0.1.0", "react": ">=16.8.0", "rxjs": ">=6" } - }, - "packages/utils/node_modules/@react-rxjs/core": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/@react-rxjs/core/-/core-0.9.6.tgz", - "integrity": "sha512-OEyGPca1LXz06iLZMJyFniE3fFaqNvS/+jdpk7gtNFLGmwCo5H6HPAGFEEhui90A0BpLR1hSzDHy3L9b3I9rZw==", - "dev": true, - "dependencies": { - "@rxstate/core": "^0.0.1", - "use-sync-external-store": "^1.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "rxjs": ">=7" - } } }, "dependencies": { @@ -10362,7 +10334,7 @@ "@react-rxjs/core": { "version": "file:packages/core", "requires": { - "@rxstate/core": "^0.0.1", + "@rx-state/core": "0.1.0-rc.1", "@types/use-sync-external-store": "^0.0.3", "use-sync-external-store": "^1.0.0" } @@ -10370,43 +10342,19 @@ "@react-rxjs/dom": { "version": "file:packages/dom", "requires": { - "@react-rxjs/core": "0.9.6" - }, - "dependencies": { - "@react-rxjs/core": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/@react-rxjs/core/-/core-0.9.6.tgz", - "integrity": "sha512-OEyGPca1LXz06iLZMJyFniE3fFaqNvS/+jdpk7gtNFLGmwCo5H6HPAGFEEhui90A0BpLR1hSzDHy3L9b3I9rZw==", - "dev": true, - "requires": { - "@rxstate/core": "^0.0.1", - "use-sync-external-store": "^1.0.0" - } - } + "@react-rxjs/core": "0.10.0-rc.1" } }, "@react-rxjs/utils": { "version": "file:packages/utils", "requires": { - "@react-rxjs/core": "0.9.6" - }, - "dependencies": { - "@react-rxjs/core": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/@react-rxjs/core/-/core-0.9.6.tgz", - "integrity": "sha512-OEyGPca1LXz06iLZMJyFniE3fFaqNvS/+jdpk7gtNFLGmwCo5H6HPAGFEEhui90A0BpLR1hSzDHy3L9b3I9rZw==", - "dev": true, - "requires": { - "@rxstate/core": "^0.0.1", - "use-sync-external-store": "^1.0.0" - } - } + "@react-rxjs/core": "0.10.0-rc.1" } }, - "@rxstate/core": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@rxstate/core/-/core-0.0.1.tgz", - "integrity": "sha512-be8446G5eapl6X8IAuYvvYY78CnyuXX7pASAYG2Ww95hCbqfNLSYXqknvWeUJ4ovO63l5xdM29ct0uUysKDyog==", + "@rx-state/core": { + "version": "0.1.0-rc.1", + "resolved": "https://registry.npmjs.org/@rx-state/core/-/core-0.1.0-rc.1.tgz", + "integrity": "sha512-gEEjX5UIN/CeS4GPcsRd4+8ACBzd1jFuY7oiGNg/0Tn6CUpuDwvGoPOdaiam3IdmuCgNyc8G7JxmcGubQURMvQ==", "requires": {} }, "@sinonjs/commons": { diff --git a/packages/core/cjsBuild.js b/packages/core/cjsBuild.js index ae1efa8..2c52971 100644 --- a/packages/core/cjsBuild.js +++ b/packages/core/cjsBuild.js @@ -22,7 +22,7 @@ require("esbuild") : "./dist/core.cjs.development.js", target: "es2015", minify: isProd, - external: ["react", "rxjs", "@rxstate/core", "use-sync-external-store"], + external: ["react", "rxjs", "@rx-state/core", "use-sync-external-store"], format: "cjs", sourcemap: true, plugins: [fixCjsPlugin], diff --git a/packages/core/package.json b/packages/core/package.json index 4b57c1b..22a0111 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,5 +1,5 @@ { - "version": "0.9.7", + "version": "0.10.0-rc.1", "repository": { "type": "git", "url": "git+https://github.com/re-rxjs/react-rxjs.git" @@ -25,8 +25,8 @@ ], "scripts": { "build": "npm run build:ts && npm run build:esm2017 && npm run build:esm2019 && npm run build:cjs:dev && npm run build:cjs:prod", - "build:esm2019": "esbuild src/index.tsx --bundle --outfile=./dist/core.es2019.mjs --target=es2019 --external:react --external:rxjs --external:@rxstate/core --external:use-sync-external-store --format=esm --sourcemap", - "build:esm2017": "esbuild src/index.tsx --bundle --outfile=./dist/core.es2017.js --target=es2017 --external:react --external:rxjs --external:@rxstate/core --external:use-sync-external-store --format=esm --sourcemap", + "build:esm2019": "esbuild src/index.tsx --bundle --outfile=./dist/core.es2019.mjs --target=es2019 --external:react --external:rxjs --external:@rx-state/core --external:use-sync-external-store --format=esm --sourcemap", + "build:esm2017": "esbuild src/index.tsx --bundle --outfile=./dist/core.es2017.js --target=es2017 --external:react --external:rxjs --external:@rx-state/core --external:use-sync-external-store --format=esm --sourcemap", "build:cjs:dev": "node cjsBuild.js", "build:cjs:prod": "node cjsBuild.js --prod", "build:ts": "tsc -p ./tsconfig-build.json --outDir ./dist --skipLibCheck --emitDeclarationOnly", @@ -50,7 +50,7 @@ "Victor Oliva (https://github.com/voliva)" ], "dependencies": { - "@rxstate/core": "^0.0.1", + "@rx-state/core": "0.1.0-rc.1", "use-sync-external-store": "^1.0.0" }, "devDependencies": { diff --git a/packages/core/src/SUSPENSE.ts b/packages/core/src/SUSPENSE.ts deleted file mode 100644 index 3aabb0a..0000000 --- a/packages/core/src/SUSPENSE.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * This is a special symbol that can be emitted from our observables to let the - * react hook know that there is a value on its way, and that we want to - * leverage React Suspense API while we are waiting for that value. - */ -export const SUSPENSE = Symbol("SUSPENSE") -export type SUSPENSE = typeof SUSPENSE diff --git a/packages/core/src/Subscribe.test.tsx b/packages/core/src/Subscribe.test.tsx index fcecc25..06f32a3 100644 --- a/packages/core/src/Subscribe.test.tsx +++ b/packages/core/src/Subscribe.test.tsx @@ -1,4 +1,4 @@ -import { state } from "@rxstate/core" +import { state } from "@rx-state/core" import { render, screen } from "@testing-library/react" import React, { StrictMode, useState, useEffect } from "react" import { defer, EMPTY, NEVER, Observable, of, startWith } from "rxjs" diff --git a/packages/core/src/bind/connectFactoryObservable.ts b/packages/core/src/bind/connectFactoryObservable.ts index b6ef1c6..c055fe9 100644 --- a/packages/core/src/bind/connectFactoryObservable.ts +++ b/packages/core/src/bind/connectFactoryObservable.ts @@ -1,7 +1,11 @@ import { Observable } from "rxjs" -import { SUSPENSE } from "../SUSPENSE" import { EMPTY_VALUE } from "../internal/empty-value" -import { state, StateObservable } from "@rxstate/core" +import { + EffectObservable, + state, + StateObservable, + SUSPENSE, +} from "@rx-state/core" import { useStateObservable } from "../useStateObservable" /** @@ -23,12 +27,12 @@ import { useStateObservable } from "../useStateObservable" * subscription, then the hook will leverage React Suspense while it's waiting * for the first value. */ -export default function connectFactoryObservable( - getObservable: (...args: A) => Observable, +export default function connectFactoryObservable( + getObservable: (...args: A) => EffectObservable, defaultValue: O | ((...args: A) => O), ): [ - (...args: A) => Exclude, - (...args: A) => StateObservable, + (...args: A) => Exclude, + (...args: A) => StateObservable, ] { const args: | [(...args: A) => Observable] @@ -37,6 +41,6 @@ export default function connectFactoryObservable( ? [getObservable] : [getObservable, defaultValue] - const obs = state(...(args as [(...args: A) => Observable])) + const obs = state(...(args as [(...args: A) => EffectObservable])) return [(...input: A) => useStateObservable(obs(...input)), obs] } diff --git a/packages/core/src/bind/connectObservable.test.tsx b/packages/core/src/bind/connectObservable.test.tsx index dbdcecf..8042950 100644 --- a/packages/core/src/bind/connectObservable.test.tsx +++ b/packages/core/src/bind/connectObservable.test.tsx @@ -477,7 +477,7 @@ describe("connectObservable", () => { it("allows async errors to be caught in error boundaries with suspense", async () => { const errStream = new Subject() const [useError, errStream$] = bind(errStream) - const errStream$WithoutErrors = errStream$.pipe(catchError(() => EMPTY)) + const errStream$WithoutErrors = errStream$.pipe(catchError(() => NEVER)) const ErrorComponent = () => { const value = useError() diff --git a/packages/core/src/bind/connectObservable.ts b/packages/core/src/bind/connectObservable.ts index dc721c1..6c6c241 100644 --- a/packages/core/src/bind/connectObservable.ts +++ b/packages/core/src/bind/connectObservable.ts @@ -1,7 +1,7 @@ import { EMPTY_VALUE } from "../internal/empty-value" import { Observable } from "rxjs" import { useStateObservable } from "../useStateObservable" -import { state } from "@rxstate/core" +import { state } from "@rx-state/core" /** * Accepts: An Observable. diff --git a/packages/core/src/bind/index.ts b/packages/core/src/bind/index.ts index 6f15935..55a2c0f 100644 --- a/packages/core/src/bind/index.ts +++ b/packages/core/src/bind/index.ts @@ -1,9 +1,12 @@ import { Observable } from "rxjs" -import { SUSPENSE } from "../SUSPENSE" import connectFactoryObservable from "./connectFactoryObservable" import connectObservable from "./connectObservable" import { EMPTY_VALUE } from "../internal/empty-value" -import { StateObservable, DefaultedStateObservable } from "@rxstate/core" +import { + StateObservable, + DefaultedStateObservable, + SUSPENSE, +} from "@rx-state/core" /** * Binds an observable to React @@ -21,7 +24,7 @@ import { StateObservable, DefaultedStateObservable } from "@rxstate/core" */ export function bind( observable: Observable, -): [() => Exclude, StateObservable] +): [() => Exclude, StateObservable] /** * Binds an observable to React @@ -38,7 +41,7 @@ export function bind( export function bind( observable: Observable, defaultValue: T, -): [() => Exclude, DefaultedStateObservable] +): [() => Exclude, DefaultedStateObservable] /** * Binds a factory observable to React @@ -62,7 +65,7 @@ export function bind( getObservable: (...args: A) => Observable, ): [ (...args: A) => Exclude, - (...args: A) => StateObservable, + (...args: A) => StateObservable, ] /** @@ -86,7 +89,7 @@ export function bind( defaultValue: O | ((...args: A) => O), ): [ (...args: A) => Exclude, - (...args: A) => DefaultedStateObservable, + (...args: A) => DefaultedStateObservable, ] export function bind(observable: any, defaultValue?: any) { diff --git a/packages/core/src/index.tsx b/packages/core/src/index.tsx index ff9acd1..7068462 100644 --- a/packages/core/src/index.tsx +++ b/packages/core/src/index.tsx @@ -1,6 +1,5 @@ -export * from "@rxstate/core" +export * from "@rx-state/core" export { shareLatest } from "./shareLatest" export { useStateObservable } from "./useStateObservable" export { bind } from "./bind" -export { SUSPENSE } from "./SUSPENSE" export { Subscribe, RemoveSubscribe } from "./Subscribe" diff --git a/packages/core/src/useStateObservable.ts b/packages/core/src/useStateObservable.ts index 1b296fc..bb83b77 100644 --- a/packages/core/src/useStateObservable.ts +++ b/packages/core/src/useStateObservable.ts @@ -1,36 +1,37 @@ import { useRef, useState } from "react" -import { SUSPENSE } from "./SUSPENSE" -import { DefaultedStateObservable, StateObservable } from "@rxstate/core" +import { + SUSPENSE, + DefaultedStateObservable, + StateObservable, + liftEffects, +} from "@rx-state/core" import { EMPTY_VALUE } from "./internal/empty-value" import useSyncExternalStore from "./internal/useSyncExternalStore" import { useSubscription } from "./Subscribe" type VoidCb = () => void -interface Ref { - source$: StateObservable - args: [(cb: VoidCb) => VoidCb, () => Exclude] +interface Ref { + source$: StateObservable + args: [(cb: VoidCb) => VoidCb, () => Exclude] } -const filterOutSuspense = (value: T): value is Exclude => - value !== (SUSPENSE as any) - -export const useStateObservable = ( - source$: StateObservable, +export const useStateObservable = ( + source$: StateObservable, ): Exclude => { const subscription = useSubscription() const [, setError] = useState() - const callbackRef = useRef>() + const callbackRef = useRef>() if (!callbackRef.current) { - const getValue = (src: StateObservable) => { - const result = src.getValue(filterOutSuspense) + const getValue = (src: StateObservable) => { + const result = src.getValue() if (result instanceof Promise) throw result return result as any } const gv: () => Exclude = () => { - const src = callbackRef.current!.source$ as DefaultedStateObservable + const src = callbackRef.current!.source$ as DefaultedStateObservable if (src.getRefCount() > 0 || src.getDefaultValue) return getValue(src) @@ -38,7 +39,7 @@ export const useStateObservable = ( let error = EMPTY_VALUE subscription.add( - src.subscribe({ + liftEffects()(src).subscribe({ error: (e) => { error = e }, @@ -58,7 +59,7 @@ export const useStateObservable = ( if (ref.source$ !== source$) { ref.source$ = source$ ref.args[0] = (next: () => void) => { - const subscription = source$.subscribe({ + const subscription = liftEffects()(source$).subscribe({ next, error: (e) => { setError(() => { diff --git a/packages/dom/package.json b/packages/dom/package.json index 6882a8f..b36d2d2 100644 --- a/packages/dom/package.json +++ b/packages/dom/package.json @@ -52,6 +52,6 @@ "Victor Oliva (https://github.com/voliva)" ], "devDependencies": { - "@react-rxjs/core": "0.9.6" + "@react-rxjs/core": "0.10.0-rc.1" } } diff --git a/packages/utils/package.json b/packages/utils/package.json index fb17218..ba25692 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -51,6 +51,6 @@ "Victor Oliva (https://github.com/voliva)" ], "devDependencies": { - "@react-rxjs/core": "0.9.6" + "@react-rxjs/core": "0.10.0-rc.1" } }