diff --git a/.babelrc.js b/.babelrc.js
index c77ebd6..1977f41 100644
--- a/.babelrc.js
+++ b/.babelrc.js
@@ -7,13 +7,13 @@ export default {
'@babel/preset-env',
{
targets: {
- ie: 11
+ ie: 11,
},
loose: true,
- modules: cjs ? 'cjs' : false
- }
+ modules: cjs ? 'cjs' : false,
+ },
],
- '@babel/preset-typescript'
+ '@babel/preset-typescript',
],
- plugins: [cjs && ['@babel/transform-modules-commonjs']].filter(Boolean)
+ plugins: [cjs && ['@babel/transform-modules-commonjs']].filter(Boolean),
}
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..6313b56
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+* text=auto eol=lf
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index f6aa63e..26b4396 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -98,7 +98,7 @@ jobs:
'node-standard',
'node-esm',
'react-native',
- 'expo'
+ 'expo',
]
steps:
- name: Checkout repo
diff --git a/README.md b/README.md
index e3c5a3b..c09e789 100644
--- a/README.md
+++ b/README.md
@@ -23,8 +23,8 @@ import filtersReducer from './features/filters/filtersSlice'
const store = configureStore({
reducer: {
todos: todosReducer,
- filters: filtersReducer
- }
+ filters: filtersReducer,
+ },
})
// The thunk middleware was automatically added
@@ -86,9 +86,9 @@ const store = configureStore({
middleware: getDefaultMiddleware =>
getDefaultMiddleware({
thunk: {
- extraArgument: myCustomApiService
- }
- })
+ extraArgument: myCustomApiService,
+ },
+ }),
})
// later
@@ -110,10 +110,10 @@ const store = configureStore({
thunk: {
extraArgument: {
api: myCustomApiService,
- otherValue: 42
- }
- }
- })
+ otherValue: 42,
+ },
+ },
+ }),
})
// later
@@ -188,7 +188,7 @@ const INCREMENT_COUNTER = 'INCREMENT_COUNTER'
function increment() {
return {
- type: INCREMENT_COUNTER
+ type: INCREMENT_COUNTER,
}
}
@@ -264,7 +264,7 @@ function makeASandwich(forPerson, secretSauce) {
return {
type: 'MAKE_SANDWICH',
forPerson,
- secretSauce
+ secretSauce,
}
}
@@ -273,14 +273,14 @@ function apologize(fromPerson, toPerson, error) {
type: 'APOLOGIZE',
fromPerson,
toPerson,
- error
+ error,
}
}
function withdrawMoney(amount) {
return {
type: 'WITHDRAW',
- amount
+ amount,
}
}
@@ -302,7 +302,7 @@ function makeASandwichWithSecretSauce(forPerson) {
return function (dispatch) {
return fetchSecretSauce().then(
sauce => dispatch(makeASandwich(forPerson, sauce)),
- error => dispatch(apologize('The Sandwich Shop', forPerson, error))
+ error => dispatch(apologize('The Sandwich Shop', forPerson, error)),
)
}
}
@@ -339,16 +339,16 @@ function makeSandwichesForEverybody() {
.then(() =>
Promise.all([
dispatch(makeASandwichWithSecretSauce('Me')),
- dispatch(makeASandwichWithSecretSauce('My wife'))
- ])
+ dispatch(makeASandwichWithSecretSauce('My wife')),
+ ]),
)
.then(() => dispatch(makeASandwichWithSecretSauce('Our kids')))
.then(() =>
dispatch(
getState().myMoney > 42
? withdrawMoney(42)
- : apologize('Me', 'The Sandwich Shop')
- )
+ : apologize('Me', 'The Sandwich Shop'),
+ ),
)
}
}
@@ -359,7 +359,7 @@ function makeSandwichesForEverybody() {
store
.dispatch(makeSandwichesForEverybody())
.then(() =>
- response.send(ReactDOMServer.renderToString())
+ response.send(ReactDOMServer.renderToString()),
)
// I can also dispatch a thunk async action from a component
@@ -385,7 +385,7 @@ class SandwichShop extends Component {
}
export default connect(state => ({
- sandwiches: state.sandwiches
+ sandwiches: state.sandwiches,
}))(SandwichShop)
```
diff --git a/src/index.ts b/src/index.ts
index 58bab3d..f925288 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -6,7 +6,7 @@ export type {
ThunkAction,
ThunkDispatch,
ThunkActionDispatch,
- ThunkMiddleware
+ ThunkMiddleware,
} from './types'
/** A function that accepts a potential "extra argument" value to be injected later,
@@ -15,7 +15,7 @@ export type {
function createThunkMiddleware<
State = any,
BasicAction extends Action = AnyAction,
- ExtraThunkArg = undefined
+ ExtraThunkArg = undefined,
>(extraArgument?: ExtraThunkArg) {
// Standard Redux middleware definition pattern:
// See: https://redux.js.org/tutorials/fundamentals/part-4-store#writing-custom-middleware
diff --git a/src/types.ts b/src/types.ts
index 973e4ac..41a01c7 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -14,14 +14,14 @@ import type { Action, AnyAction, Middleware } from 'redux'
export interface ThunkDispatch<
State,
ExtraThunkArg,
- BasicAction extends Action
+ BasicAction extends Action,
> {
// When the thunk middleware is added, `store.dispatch` now has three overloads (NOTE: the order here matters for correct behavior and is very fragile - do not reorder these!):
// 1) The specific thunk function overload
/** Accepts a thunk function, runs it, and returns whatever the thunk itself returns */
(
- thunkAction: ThunkAction
+ thunkAction: ThunkAction,
): ReturnType
// 2) The base overload.
@@ -32,7 +32,7 @@ export interface ThunkDispatch<
// with TS inference ( see https://github.com/microsoft/TypeScript/issues/14107 )
/** A union of the other two overloads for TS inference purposes */
(
- action: Action | ThunkAction
+ action: Action | ThunkAction,
): Action | ReturnType
}
@@ -53,11 +53,11 @@ export type ThunkAction<
ReturnType,
State,
ExtraThunkArg,
- BasicAction extends Action
+ BasicAction extends Action,
> = (
dispatch: ThunkDispatch,
getState: () => State,
- extraArgument: ExtraThunkArg
+ extraArgument: ExtraThunkArg,
) => ReturnType
/**
@@ -69,7 +69,7 @@ export type ThunkAction<
* @template ActionCreator Thunk action creator to be wrapped
*/
export type ThunkActionDispatch<
- ActionCreator extends (...args: any[]) => ThunkAction
+ ActionCreator extends (...args: any[]) => ThunkAction,
> = (
...args: Parameters
) => ReturnType>
@@ -83,7 +83,7 @@ export type ThunkActionDispatch<
export type ThunkMiddleware<
State = any,
BasicAction extends Action = AnyAction,
- ExtraThunkArg = undefined
+ ExtraThunkArg = undefined,
> = Middleware<
ThunkDispatch,
State,
diff --git a/test/test.ts b/test/test.ts
index 15b403d..1c22a62 100644
--- a/test/test.ts
+++ b/test/test.ts
@@ -5,7 +5,7 @@ describe('thunk middleware', () => {
const doGetState = () => 42
const nextHandler = thunkMiddleware({
dispatch: doDispatch,
- getState: doGetState
+ getState: doGetState,
})
it('must return a function to handle next', () => {
@@ -90,7 +90,7 @@ describe('thunk middleware', () => {
// @ts-ignore
withExtraArgument(extraArg)({
dispatch: doDispatch,
- getState: doGetState
+ getState: doGetState,
})()((dispatch: any, getState: any, arg: any) => {
expect(dispatch).toBe(doDispatch)
expect(getState).toBe(doGetState)
diff --git a/tsup.config.ts b/tsup.config.ts
index 22b3528..9e37a8c 100644
--- a/tsup.config.ts
+++ b/tsup.config.ts
@@ -1,12 +1,12 @@
-import { defineConfig, Options } from 'tsup'
-import fs from 'fs'
+import type { Options } from 'tsup'
+import { defineConfig } from 'tsup'
export default defineConfig(options => {
const commonOptions: Partial = {
entry: {
- 'redux-thunk': 'src/index.ts'
+ 'redux-thunk': 'src/index.ts',
},
- ...options
+ ...options,
}
return [
@@ -16,19 +16,21 @@ export default defineConfig(options => {
outExtension: () => ({ js: '.mjs' }),
dts: true,
clean: true,
- onSuccess() {
- // Support Webpack 4 by pointing `"module"` to a file with a `.js` extension
- fs.copyFileSync(
- 'dist/redux-thunk.mjs',
- 'dist/redux-thunk.legacy-esm.js'
- )
- }
+ },
+ // Support Webpack 4 by pointing `"module"` to a file with a `.js` extension
+ {
+ ...commonOptions,
+ format: ['esm'],
+ target: 'es2017',
+ dts: false,
+ outExtension: () => ({ js: '.js' }),
+ entry: { 'redux-thunk.legacy-esm': 'src/index.ts' },
},
{
...commonOptions,
format: 'cjs',
outDir: './dist/cjs/',
- outExtension: () => ({ js: '.cjs' })
- }
+ outExtension: () => ({ js: '.cjs' }),
+ },
]
})
diff --git a/typescript_test/typescript.ts b/typescript_test/typescript.ts
index c6a52b6..cde9f3f 100644
--- a/typescript_test/typescript.ts
+++ b/typescript_test/typescript.ts
@@ -7,7 +7,7 @@ import type {
ThunkAction,
ThunkActionDispatch,
ThunkDispatch,
- ThunkMiddleware
+ ThunkMiddleware,
} from '../src/index'
export type State = {
@@ -19,7 +19,7 @@ export type Actions = { type: 'FOO' } | { type: 'BAR'; result: number }
export type ThunkResult = ThunkAction
export const initialState: State = {
- foo: 'foo'
+ foo: 'foo',
}
export function fakeReducer(state: State = initialState): State {
@@ -28,7 +28,7 @@ export function fakeReducer(state: State = initialState): State {
export const store = createStore(
fakeReducer,
- applyMiddleware(thunk as ThunkMiddleware)
+ applyMiddleware(thunk as ThunkMiddleware),
)
store.dispatch(dispatch => {
@@ -70,8 +70,8 @@ store.dispatch(testGetState())
const storeThunkArg = createStore(
fakeReducer,
applyMiddleware(
- withExtraArgument('bar') as ThunkMiddleware
- )
+ withExtraArgument('bar') as ThunkMiddleware,
+ ),
)
storeThunkArg.dispatch({ type: 'FOO' })
@@ -85,23 +85,23 @@ storeThunkArg.dispatch((dispatch, getState, extraArg) => {
})
const callDispatchAsync_anyAction = (
- dispatch: ThunkDispatch
+ dispatch: ThunkDispatch,
) => {
const asyncThunk = (): ThunkResult> => () =>
- ({} as Promise)
+ ({}) as Promise
dispatch(asyncThunk()).then(() => console.log('done'))
}
const callDispatchAsync_specificActions = (
- dispatch: ThunkDispatch
+ dispatch: ThunkDispatch,
) => {
const asyncThunk = (): ThunkResult> => () =>
- ({} as Promise)
+ ({}) as Promise
dispatch(asyncThunk()).then(() => console.log('done'))
}
const callDispatchAny = (
- dispatch: ThunkDispatch
+ dispatch: ThunkDispatch,
) => {
- const asyncThunk = (): any => () => ({} as Promise)
+ const asyncThunk = (): any => () => ({}) as Promise
dispatch(asyncThunk()) // result is any
.then(() => console.log('done'))
}
@@ -127,9 +127,9 @@ const actions: ActionDispatchs = bindActionCreators(
{
anotherThunkAction,
promiseThunkAction,
- standardAction
+ standardAction,
},
- store.dispatch
+ store.dispatch,
)
actions.anotherThunkAction() === 'hello'
@@ -152,7 +152,7 @@ function testIssue248() {
const dispatch: ThunkDispatch = undefined as any
function dispatchWrap(
- action: Action | ThunkAction
+ action: Action | ThunkAction,
) {
// Should not have an error here thanks to the extra union overload
dispatch(action)
diff --git a/vitest.config.ts b/vitest.config.ts
index 4ef78f4..1732a02 100644
--- a/vitest.config.ts
+++ b/vitest.config.ts
@@ -8,10 +8,10 @@ export default defineConfig({
'redux-thunk': './src/index.ts', // @remap-prod-remove-line
// this mapping is disabled as we want `dist` imports in the tests only to be used for "type-only" imports which don't play a role for jest
- '@internal/': './src/'
+ '@internal/': './src/',
},
deps: {
- interopDefault: true
- }
- }
+ interopDefault: true,
+ },
+ },
})