diff --git a/examples/base/.gitignore b/examples/base/.gitignore index 8ee01d3..496df0a 100644 --- a/examples/base/.gitignore +++ b/examples/base/.gitignore @@ -1 +1,4 @@ +node_modules/ +dist/ yarn.lock +package-lock.json diff --git a/examples/base/index.tsx b/examples/base/index.tsx deleted file mode 100644 index 6e88baa..0000000 --- a/examples/base/index.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import 'react-app-polyfill/ie11'; -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; - -import { App } from './src/App'; - -const rootElement = document.getElementById('root') -if (rootElement) { - createRoot(rootElement).render(); -} \ No newline at end of file diff --git a/examples/base/package.json b/examples/base/package.json index c020861..219605c 100644 --- a/examples/base/package.json +++ b/examples/base/package.json @@ -9,15 +9,15 @@ "preview": "vite preview --host" }, "dependencies": { - "@forward-software/react-auth": "2.0.3", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "@forward-software/react-auth": "2.1.0", + "react": "^19.2.4", + "react-dom": "^19.2.4" }, "devDependencies": { - "@types/react": "^18.2.21", - "@types/react-dom": "^18.2.7", - "@vitejs/plugin-react": "^4.0.0", - "typescript": "^5.1.6", - "vite": "^5.0.0" + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "@vitejs/plugin-react": "^6.0.0", + "typescript": "^6.0.0", + "vite": "^8.0.3" } } diff --git a/examples/base/src/Content.tsx b/examples/base/src/Content.tsx index 6179263..8046a07 100644 --- a/examples/base/src/Content.tsx +++ b/examples/base/src/Content.tsx @@ -1,4 +1,5 @@ -import { useCallback, useState } from 'react'; +import React, { useCallback, useState } from 'react'; +import type { DependencyList } from 'react'; import { useAuthClient } from './auth'; @@ -56,14 +57,16 @@ export const Content: React.FC = () => { function useAsyncCallback Promise>( callback: T, - deps: React.DependencyList + deps: DependencyList ): [T, boolean] { const [isLoading, setLoading] = useState(false); const cb = useCallback(async (...argsx: never[]) => { setLoading(true); - const res = await callback(...argsx); - setLoading(false); - return res; + try { + return await callback(...argsx); + } finally { + setLoading(false); + } }, deps) as T; return [cb, isLoading]; diff --git a/examples/expo/package.json b/examples/expo/package.json index 561c619..fe143e3 100644 --- a/examples/expo/package.json +++ b/examples/expo/package.json @@ -12,11 +12,11 @@ }, "dependencies": { "@expo/vector-icons": "^15.0.2", - "@forward-software/react-auth": "2.0.3", + "@forward-software/react-auth": "2.1.0", "@react-navigation/bottom-tabs": "^7.4.0", "@react-navigation/elements": "^2.6.3", "@react-navigation/native": "^7.1.8", - "axios": "^1.12.2", + "axios": "^1.14.0", "expo": "~54.0.12", "expo-constants": "~18.0.9", "expo-dev-client": "~6.0.13", @@ -46,7 +46,7 @@ "babel-plugin-module-resolver": "^5.0.2", "eslint": "^9.25.0", "eslint-config-expo": "~10.0.0", - "typescript": "^5.1.6" + "typescript": "^6.0.0" }, "private": true } diff --git a/examples/expo/src/auth/client.ts b/examples/expo/src/auth/client.ts index fd4270a..e34036f 100644 --- a/examples/expo/src/auth/client.ts +++ b/examples/expo/src/auth/client.ts @@ -37,7 +37,7 @@ class MyAuthClient implements AuthClient { async onLogin(credentials?: AuthCredentials): Promise { if (!this.axiosAuthClient) { - return Promise.reject('axios client not initialized!'); + return Promise.reject(new Error('axios client not initialized!')); } // Replace auth/login with your url without the domain @@ -54,7 +54,7 @@ class MyAuthClient implements AuthClient { async onRefresh(currentTokens: AuthTokens): Promise { if (!this.axiosAuthClient) { - return Promise.reject('axios client not initialized!'); + return Promise.reject(new Error('axios client not initialized!')); } if ( diff --git a/examples/expo/src/hooks/useAsyncCallback.ts b/examples/expo/src/hooks/useAsyncCallback.ts index 3c1a4b2..4ee29f4 100644 --- a/examples/expo/src/hooks/useAsyncCallback.ts +++ b/examples/expo/src/hooks/useAsyncCallback.ts @@ -7,9 +7,11 @@ export function useAsyncCallback< const cb = useCallback(async (...argsx: never[]) => { setLoading(true); - const res = await callback(...argsx); - setLoading(false); - return res; + try { + return await callback(...argsx); + } finally { + setLoading(false); + } }, deps) as T; return [cb, isLoading]; diff --git a/examples/refresh-token/.gitignore b/examples/refresh-token/.gitignore index 8ee01d3..496df0a 100644 --- a/examples/refresh-token/.gitignore +++ b/examples/refresh-token/.gitignore @@ -1 +1,4 @@ +node_modules/ +dist/ yarn.lock +package-lock.json diff --git a/examples/refresh-token/index.tsx b/examples/refresh-token/index.tsx deleted file mode 100644 index 6e88baa..0000000 --- a/examples/refresh-token/index.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import 'react-app-polyfill/ie11'; -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; - -import { App } from './src/App'; - -const rootElement = document.getElementById('root') -if (rootElement) { - createRoot(rootElement).render(); -} \ No newline at end of file diff --git a/examples/refresh-token/package.json b/examples/refresh-token/package.json index f7ccdf7..7732a5b 100644 --- a/examples/refresh-token/package.json +++ b/examples/refresh-token/package.json @@ -9,17 +9,17 @@ "preview": "vite preview --host" }, "dependencies": { - "@forward-software/react-auth": "2.0.3", - "axios": "1.13.5", + "@forward-software/react-auth": "2.1.0", + "axios": "^1.14.0", "jwt-check-expiry": "^1.0.10", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "react": "^19.2.4", + "react-dom": "^19.2.4" }, "devDependencies": { - "@types/react": "^18.2.21", - "@types/react-dom": "^18.2.7", - "@vitejs/plugin-react": "^4.0.0", - "typescript": "^5.1.6", - "vite": "^5.0.0" + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "@vitejs/plugin-react": "^6.0.0", + "typescript": "^6.0.0", + "vite": "^8.0.3" } } diff --git a/examples/refresh-token/src/App.tsx b/examples/refresh-token/src/App.tsx index 4f31dce..bd5c99e 100644 --- a/examples/refresh-token/src/App.tsx +++ b/examples/refresh-token/src/App.tsx @@ -1,7 +1,9 @@ +import React from 'react'; + import AppContent from './AppContent'; import { AuthProvider } from './auth'; -export const App = () => { +export const App: React.FC = () => { return ( diff --git a/examples/refresh-token/src/AppContent.tsx b/examples/refresh-token/src/AppContent.tsx index 99465d3..e79187b 100644 --- a/examples/refresh-token/src/AppContent.tsx +++ b/examples/refresh-token/src/AppContent.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; -import { DependencyList, FC, useCallback, useState } from 'react'; +import React, { FC, useCallback, useState } from 'react'; +import type { DependencyList } from 'react'; import { useAuthClient } from './auth'; function useUserCredentials() { @@ -35,9 +35,11 @@ function useAsyncCallback Promise>( const cb = useCallback(async (...argsx: never[]) => { setLoading(true); - const res = await callback(...argsx); - setLoading(false); - return res; + try { + return await callback(...argsx); + } finally { + setLoading(false); + } }, deps) as T; return [cb, isLoading]; diff --git a/examples/refresh-token/src/auth.ts b/examples/refresh-token/src/auth.ts index ff497da..1134902 100644 --- a/examples/refresh-token/src/auth.ts +++ b/examples/refresh-token/src/auth.ts @@ -35,7 +35,7 @@ class MyAuthClient implements AuthClient { async onLogin(credentials?: Credentials): Promise { if (!this.axiosAuthClient) { - return Promise.reject("axios client not initialized!"); + return Promise.reject(new Error("axios client not initialized!")); } // Replace auth/login with your url without the domain @@ -51,7 +51,7 @@ class MyAuthClient implements AuthClient { async onRefresh(currentTokens: Tokens): Promise { if (!this.axiosAuthClient) { - return Promise.reject("axios client not initialized!"); + return Promise.reject(new Error("axios client not initialized!")); } if (!!currentTokens.accessToken && !isJwtTokenExpired(currentTokens.accessToken)) { diff --git a/examples/reqres/.gitignore b/examples/reqres/.gitignore index 8ee01d3..496df0a 100644 --- a/examples/reqres/.gitignore +++ b/examples/reqres/.gitignore @@ -1 +1,4 @@ +node_modules/ +dist/ yarn.lock +package-lock.json diff --git a/examples/reqres/index.tsx b/examples/reqres/index.tsx deleted file mode 100644 index 6e88baa..0000000 --- a/examples/reqres/index.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import 'react-app-polyfill/ie11'; -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; - -import { App } from './src/App'; - -const rootElement = document.getElementById('root') -if (rootElement) { - createRoot(rootElement).render(); -} \ No newline at end of file diff --git a/examples/reqres/package.json b/examples/reqres/package.json index 4cd6712..f4f64d0 100644 --- a/examples/reqres/package.json +++ b/examples/reqres/package.json @@ -9,16 +9,16 @@ "preview": "vite preview --host" }, "dependencies": { - "@forward-software/react-auth": "2.0.3", - "axios": "^1.12.2", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "@forward-software/react-auth": "2.1.0", + "axios": "^1.14.0", + "react": "^19.2.4", + "react-dom": "^19.2.4" }, "devDependencies": { - "@types/react": "^18.2.21", - "@types/react-dom": "^18.2.7", - "@vitejs/plugin-react": "^4.0.0", - "typescript": "^5.1.6", - "vite": "^5.0.0" + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "@vitejs/plugin-react": "^6.0.0", + "typescript": "^6.0.0", + "vite": "^8.0.3" } } diff --git a/examples/reqres/src/App.tsx b/examples/reqres/src/App.tsx index c20ebd9..e5733db 100644 --- a/examples/reqres/src/App.tsx +++ b/examples/reqres/src/App.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { AuthProvider } from './auth'; import { Content } from './Content'; diff --git a/examples/reqres/src/Content.tsx b/examples/reqres/src/Content.tsx index b26defb..f3ae000 100644 --- a/examples/reqres/src/Content.tsx +++ b/examples/reqres/src/Content.tsx @@ -1,6 +1,5 @@ -import * as React from 'react'; -import { useCallback, useState } from 'react'; -import { DependencyList } from 'react'; +import React, { useCallback, useState } from 'react'; +import type { DependencyList } from 'react'; import { useAuthClient } from './auth'; @@ -110,9 +109,11 @@ function useAsyncCallback Promise>( const [isLoading, setLoading] = useState(false); const cb = useCallback(async (...argsx: never[]) => { setLoading(true); - const res = await callback(...argsx); - setLoading(false); - return res; + try { + return await callback(...argsx); + } finally { + setLoading(false); + } }, deps) as T; return [cb, isLoading];