diff --git a/.babelrc b/.babelrc
index 14d0d1f..85ecc0f 100644
--- a/.babelrc
+++ b/.babelrc
@@ -1,25 +1,3 @@
{
- "presets": [
- [
- "@babel/preset-env",
- {
- "loose": true
- }
- ],
- "@babel/react"
- ],
- "env": {
- "production-esm": {
- "presets": [
- [
- "@babel/env",
- {
- "modules": false,
- "loose": true
- }
- ],
- "@babel/react"
- ]
- }
- }
+ "presets": ["@babel/typescript", "@babel/env", "@babel/react"]
}
diff --git a/.eslintrc.json b/.eslintrc.json
index 6f2c8ec..a22106e 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -1,3 +1,9 @@
{
- "extends": "wojtekmaj/react-no-automatic-runtime"
+ "extends": [
+ "wojtekmaj/react-no-automatic-runtime",
+ "plugin:@typescript-eslint/eslint-recommended",
+ "plugin:@typescript-eslint/recommended"
+ ],
+ "parser": "@typescript-eslint/parser",
+ "plugins": ["@typescript-eslint"]
}
diff --git a/package.json b/package.json
index f9ff3e1..eebdcbd 100644
--- a/package.json
+++ b/package.json
@@ -4,18 +4,20 @@
"description": "A button that handles Promises for your React app.",
"main": "dist/cjs/index.js",
"module": "dist/esm/index.js",
- "source": "src/index.js",
+ "source": "src/index.ts",
+ "types": "src/index.ts",
"scripts": {
"build": "yarn build-esm && yarn build-cjs",
- "build-esm": "BABEL_ENV=production-esm babel src -d dist/esm --ignore \"**/*.spec.js,**/*.spec.jsx\"",
- "build-cjs": "BABEL_ENV=production-cjs babel src -d dist/cjs --ignore \"**/*.spec.js,**/*.spec.jsx\"",
+ "build-esm": "tsc --project tsconfig.build.json --outDir dist/esm --module esnext",
+ "build-cjs": "tsc --project tsconfig.build.json --outDir dist/cjs --module commonjs",
"clean": "rimraf dist",
"jest": "jest",
- "lint": "eslint src --ext .jsx,.js",
+ "lint": "eslint src --ext .js,.jsx,.ts,.tsx",
"postinstall": "husky install",
"prepack": "yarn clean && yarn build",
"prettier": "prettier --check . --cache",
- "test": "yarn lint && yarn prettier && yarn jest"
+ "test": "yarn lint && yarn tsc && yarn prettier && yarn jest",
+ "tsc": "tsc --noEmit"
},
"keywords": [
"react",
@@ -28,18 +30,22 @@
},
"license": "MIT",
"dependencies": {
- "make-cancellable-promise": "^1.0.0",
+ "@types/react": "*",
+ "make-cancellable-promise": "^1.2.0",
"prop-types": "^15.6.0"
},
"devDependencies": {
- "@babel/cli": "^7.15.0",
"@babel/core": "^7.15.0",
"@babel/preset-env": "^7.15.0",
"@babel/preset-react": "^7.14.0",
+ "@babel/preset-typescript": "^7.18.6",
"@testing-library/dom": "^8.11.0",
"@testing-library/jest-dom": "^5.15.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^14.4.0",
+ "@types/jest": "^29.0.0",
+ "@typescript-eslint/eslint-plugin": "^5.41.0",
+ "@typescript-eslint/parser": "^5.44.0",
"eslint": "^8.26.0",
"eslint-config-wojtekmaj": "^0.7.1",
"husky": "^8.0.0",
@@ -49,7 +55,8 @@
"pretty-quick": "^3.1.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
- "rimraf": "^3.0.0"
+ "rimraf": "^3.0.0",
+ "typescript": "^4.9.4"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
diff --git a/src/index.spec.jsx b/src/index.spec.tsx
similarity index 62%
rename from src/index.spec.jsx
rename to src/index.spec.tsx
index a545fe6..2073eca 100644
--- a/src/index.spec.jsx
+++ b/src/index.spec.tsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { createRef } from 'react';
import { act, render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
@@ -26,7 +26,7 @@ describe(' component', () => {
errorConfig,
};
- let user;
+ let user: ReturnType;
beforeEach(() => {
user = userEvent.setup({
advanceTimers: jest.advanceTimersByTime,
@@ -40,7 +40,7 @@ describe(' component', () => {
});
it('passes ref correctly', () => {
- const ref = React.createRef();
+ const ref = createRef();
render();
@@ -63,7 +63,9 @@ describe(' component', () => {
});
it('changes button state to success on click if onClick is synchronous', async () => {
- const onClick = () => {};
+ const onClick = () => {
+ // Intentionally empty
+ };
render();
@@ -76,7 +78,9 @@ describe(' component', () => {
});
it('changes button state to default after refresh timeout has passed', async () => {
- const onClick = () => {};
+ const onClick = () => {
+ // Intentionally empty
+ };
render();
@@ -103,9 +107,9 @@ describe(' component', () => {
});
it('changes button state to pending on click if onClick is asynchronous', async () => {
- let resolve;
+ let resolve: () => void;
const onClick = () =>
- new Promise((res) => {
+ new Promise((res) => {
resolve = res;
});
@@ -124,9 +128,9 @@ describe(' component', () => {
});
it('changes button state to success after asynchronous onClick is resolved', async () => {
- let resolve;
+ let resolve: () => void;
const onClick = () =>
- new Promise((res) => {
+ new Promise((res) => {
resolve = res;
});
@@ -148,9 +152,9 @@ describe(' component', () => {
});
it('changes button state to default after refresh timeout has passed', async () => {
- let resolve;
+ let resolve: () => void;
const onClick = () =>
- new Promise((res) => {
+ new Promise((res) => {
resolve = res;
});
@@ -184,4 +188,71 @@ describe(' component', () => {
const button5 = screen.getByRole('button');
expect(button5).toHaveTextContent('Click me');
});
+
+ it('should allow button props to be passed by default', () => {
+ // @ts-expect-no-error
+ ;
+ });
+
+ it('should allow button props to be passed given as="button"', () => {
+ // @ts-expect-no-error
+ ;
+ });
+
+ it('should not allow link props to be passed given as="button"', () => {
+ // @ts-expect-error-next-line
+ ;
+
+ // Sanity check
+ // @ts-expect-error-next-line
+ ;
+ });
+
+ it('should allow link props to be passed given as="a"', () => {
+ // @ts-expect-no-error
+ ;
+ });
+
+ it('should not allow button props to be passed given as="a"', () => {
+ // @ts-expect-error-next-line
+ ;
+
+ // Sanity check
+ // @ts-expect-error-next-line
+
+ Click me
+ ;
+ });
+
+ it('should not allow button props to be passed given as={MyButton}', () => {
+ function MyButton() {
+ return ;
+ }
+
+ // @ts-expect-error-next-line
+ ;
+
+ // Sanity check
+ function MyCustomComponent({ as, ...otherProps }: { as: React.ElementType }) {
+ const Component = as || 'div';
+ return ;
+ }
+
+ // @ts-expect-error-next-line
+ ;
+ });
+
+ it('should not allow invalid values for as', () => {
+ // @ts-expect-error-next-line
+ ;
+
+ // Sanity check
+ function MyCustomComponent({ as }: { as: React.ElementType }) {
+ const Component = as || 'div';
+ return ;
+ }
+
+ // @ts-expect-error-next-line
+ ;
+ });
});
diff --git a/src/index.jsx b/src/index.tsx
similarity index 68%
rename from src/index.jsx
rename to src/index.tsx
index 103cdaf..6004d4b 100644
--- a/src/index.jsx
+++ b/src/index.tsx
@@ -2,29 +2,42 @@ import React, { useCallback, useEffect, useRef, useState } from 'react';
import PropTypes from 'prop-types';
import makeCancellable from 'make-cancellable-promise';
+type Config = React.ComponentPropsWithoutRef;
+
+type AsyncButtonProps = {
+ as?: T;
+ errorConfig?: Config;
+ onClick?: (event: React.MouseEvent) => void | Promise;
+ pendingConfig?: Config;
+ resetTimeout?: number;
+ successConfig?: Config;
+} & Config;
+
+type PolymorphicRef = React.ComponentPropsWithRef['ref'];
+
const STATES = {
ERROR: 'error',
INIT: 'init',
PENDING: 'pending',
SUCCESS: 'success',
-};
+} as const;
const AsyncButton = React.forwardRef(
- (
+ (
{
- as = 'button',
+ as,
errorConfig,
onClick,
pendingConfig,
resetTimeout = 2000,
successConfig,
...otherProps
- },
- ref,
+ }: AsyncButtonProps,
+ ref?: PolymorphicRef,
) => {
- const [buttonState, setButtonState] = useState(STATES.INIT);
- const cancellablePromise = useRef();
- const timeout = useRef();
+ const [buttonState, setButtonState] = useState(STATES.INIT);
+ const cancellablePromise = useRef>();
+ const timeout = useRef>();
useEffect(
() => () => {
@@ -37,7 +50,11 @@ const AsyncButton = React.forwardRef(
);
const onClickInternal = useCallback(
- (event) => {
+ (event: React.MouseEvent) => {
+ if (!onClick) {
+ return;
+ }
+
clearTimeout(timeout.current);
const onSuccess = () => {
@@ -76,9 +93,9 @@ const AsyncButton = React.forwardRef(
[onClick, resetTimeout],
);
- const Component = as;
+ const Component = as || 'button';
- const buttonConfig = (() => {
+ const buttonConfig: Config | null | undefined = (() => {
switch (buttonState) {
case STATES.ERROR:
return errorConfig;
@@ -120,4 +137,6 @@ AsyncButton.propTypes = {
successConfig: isConfigObject,
};
-export default AsyncButton;
+export default AsyncButton as (
+ props: AsyncButtonProps & { ref?: PolymorphicRef },
+) => React.ReactElement | null;
diff --git a/tsconfig.build.json b/tsconfig.build.json
new file mode 100644
index 0000000..699011c
--- /dev/null
+++ b/tsconfig.build.json
@@ -0,0 +1,4 @@
+{
+ "extends": "./tsconfig.json",
+ "exclude": ["src/**/*.spec.ts", "src/**/*.spec.tsx"]
+}
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..48adf34
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,16 @@
+{
+ "compilerOptions": {
+ "declaration": true,
+ "esModuleInterop": true,
+ "importsNotUsedAsValues": "error",
+ "isolatedModules": true,
+ "jsx": "react",
+ "moduleResolution": "node",
+ "noUncheckedIndexedAccess": true,
+ "outDir": "dist",
+ "strict": true,
+ "strictNullChecks": true,
+ "target": "es5"
+ },
+ "include": ["src"]
+}
diff --git a/yarn.lock b/yarn.lock
index 3b7327f..2c1b4e6 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -22,33 +22,6 @@ __metadata:
languageName: node
linkType: hard
-"@babel/cli@npm:^7.15.0":
- version: 7.20.7
- resolution: "@babel/cli@npm:7.20.7"
- dependencies:
- "@jridgewell/trace-mapping": ^0.3.8
- "@nicolo-ribaudo/chokidar-2": 2.1.8-no-fsevents.3
- chokidar: ^3.4.0
- commander: ^4.0.1
- convert-source-map: ^1.1.0
- fs-readdir-recursive: ^1.1.0
- glob: ^7.2.0
- make-dir: ^2.1.0
- slash: ^2.0.0
- peerDependencies:
- "@babel/core": ^7.0.0-0
- dependenciesMeta:
- "@nicolo-ribaudo/chokidar-2":
- optional: true
- chokidar:
- optional: true
- bin:
- babel: ./bin/babel.js
- babel-external-helpers: ./bin/babel-external-helpers.js
- checksum: 162d9645b82925cfd0a40162bbe2ed0014b215478165091c6cf9eed1fc89ceb0c462d37f4b0be48b5dc5453be33c96af092e290328deef788f18c2ae4e6618e3
- languageName: node
- linkType: hard
-
"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/code-frame@npm:7.18.6"
@@ -793,7 +766,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-syntax-typescript@npm:^7.7.2":
+"@babel/plugin-syntax-typescript@npm:^7.20.0, @babel/plugin-syntax-typescript@npm:^7.7.2":
version: 7.20.0
resolution: "@babel/plugin-syntax-typescript@npm:7.20.0"
dependencies:
@@ -1209,6 +1182,19 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-typescript@npm:^7.18.6":
+ version: 7.20.7
+ resolution: "@babel/plugin-transform-typescript@npm:7.20.7"
+ dependencies:
+ "@babel/helper-create-class-features-plugin": ^7.20.7
+ "@babel/helper-plugin-utils": ^7.20.2
+ "@babel/plugin-syntax-typescript": ^7.20.0
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: ca569a1b8001e7e8971874656091789c6b3209f155c91c56bce82b545e43d09d156b4fcf2f0dfcdf7911a2c546c7090c2aff167a5692443f6f0382b358c233e0
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-unicode-escapes@npm:^7.18.10":
version: 7.18.10
resolution: "@babel/plugin-transform-unicode-escapes@npm:7.18.10"
@@ -1348,6 +1334,19 @@ __metadata:
languageName: node
linkType: hard
+"@babel/preset-typescript@npm:^7.18.6":
+ version: 7.18.6
+ resolution: "@babel/preset-typescript@npm:7.18.6"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.18.6
+ "@babel/helper-validator-option": ^7.18.6
+ "@babel/plugin-transform-typescript": ^7.18.6
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 7fe0da5103eb72d3cf39cf3e138a794c8cdd19c0b38e3e101507eef519c46a87a0d6d0e8bc9e28a13ea2364001ebe7430b9d75758aab4c3c3a8db9a487b9dc7c
+ languageName: node
+ linkType: hard
+
"@babel/runtime-corejs3@npm:^7.10.2":
version: 7.20.7
resolution: "@babel/runtime-corejs3@npm:7.20.7"
@@ -1755,7 +1754,7 @@ __metadata:
languageName: node
linkType: hard
-"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.8, @jridgewell/trace-mapping@npm:^0.3.9":
+"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.9":
version: 0.3.17
resolution: "@jridgewell/trace-mapping@npm:0.3.17"
dependencies:
@@ -1765,13 +1764,6 @@ __metadata:
languageName: node
linkType: hard
-"@nicolo-ribaudo/chokidar-2@npm:2.1.8-no-fsevents.3":
- version: 2.1.8-no-fsevents.3
- resolution: "@nicolo-ribaudo/chokidar-2@npm:2.1.8-no-fsevents.3"
- checksum: ee55cc9241aeea7eb94b8a8551bfa4246c56c53bc71ecda0a2104018fcc328ba5723b33686bdf9cc65d4df4ae65e8016b89e0bbdeb94e0309fe91bb9ced42344
- languageName: node
- linkType: hard
-
"@nodelib/fs.scandir@npm:2.1.5":
version: 2.1.5
resolution: "@nodelib/fs.scandir@npm:2.1.5"
@@ -1782,14 +1774,14 @@ __metadata:
languageName: node
linkType: hard
-"@nodelib/fs.stat@npm:2.0.5":
+"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2":
version: 2.0.5
resolution: "@nodelib/fs.stat@npm:2.0.5"
checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0
languageName: node
linkType: hard
-"@nodelib/fs.walk@npm:^1.2.8":
+"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8":
version: 1.2.8
resolution: "@nodelib/fs.walk@npm:1.2.8"
dependencies:
@@ -1989,7 +1981,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/jest@npm:*":
+"@types/jest@npm:*, @types/jest@npm:^29.0.0":
version: 29.2.5
resolution: "@types/jest@npm:29.2.5"
dependencies:
@@ -2010,6 +2002,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/json-schema@npm:^7.0.9":
+ version: 7.0.11
+ resolution: "@types/json-schema@npm:7.0.11"
+ checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d
+ languageName: node
+ linkType: hard
+
"@types/json5@npm:^0.0.29":
version: 0.0.29
resolution: "@types/json5@npm:0.0.29"
@@ -2072,6 +2071,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/semver@npm:^7.3.12":
+ version: 7.3.13
+ resolution: "@types/semver@npm:7.3.13"
+ checksum: 00c0724d54757c2f4bc60b5032fe91cda6410e48689633d5f35ece8a0a66445e3e57fa1d6e07eb780f792e82ac542948ec4d0b76eb3484297b79bd18b8cf1cb0
+ languageName: node
+ linkType: hard
+
"@types/stack-utils@npm:^2.0.0":
version: 2.0.1
resolution: "@types/stack-utils@npm:2.0.1"
@@ -2111,30 +2117,155 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/eslint-plugin@npm:^5.41.0":
+ version: 5.49.0
+ resolution: "@typescript-eslint/eslint-plugin@npm:5.49.0"
+ dependencies:
+ "@typescript-eslint/scope-manager": 5.49.0
+ "@typescript-eslint/type-utils": 5.49.0
+ "@typescript-eslint/utils": 5.49.0
+ debug: ^4.3.4
+ ignore: ^5.2.0
+ natural-compare-lite: ^1.4.0
+ regexpp: ^3.2.0
+ semver: ^7.3.7
+ tsutils: ^3.21.0
+ peerDependencies:
+ "@typescript-eslint/parser": ^5.0.0
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: 15423cd9fde1ac3f8ba34526a07e537464e70463f1af784be5567fdc78e5745352fa0a2c3be0c13d066bc4b9720b5fa438d64647f624d29722eb4f158c039dcc
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/parser@npm:^5.44.0":
+ version: 5.49.0
+ resolution: "@typescript-eslint/parser@npm:5.49.0"
+ dependencies:
+ "@typescript-eslint/scope-manager": 5.49.0
+ "@typescript-eslint/types": 5.49.0
+ "@typescript-eslint/typescript-estree": 5.49.0
+ debug: ^4.3.4
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: 87b3760cfc29b3edd3d28fe0d5e9e5a3833d60398d7779ecc657b9e3bfec624cd464176e26b24b0761fb79cc88daddae19560340f91119c4856b91f9663594dd
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/scope-manager@npm:5.49.0":
+ version: 5.49.0
+ resolution: "@typescript-eslint/scope-manager@npm:5.49.0"
+ dependencies:
+ "@typescript-eslint/types": 5.49.0
+ "@typescript-eslint/visitor-keys": 5.49.0
+ checksum: 466047e24ff8a4195f14aadde39375f22891bdaced09e58c89f2c32af0aa4a0d87e71a5f006f6ab76858e6f30c4b764b1e0ef7bc26713bb78add30638108c45f
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/type-utils@npm:5.49.0":
+ version: 5.49.0
+ resolution: "@typescript-eslint/type-utils@npm:5.49.0"
+ dependencies:
+ "@typescript-eslint/typescript-estree": 5.49.0
+ "@typescript-eslint/utils": 5.49.0
+ debug: ^4.3.4
+ tsutils: ^3.21.0
+ peerDependencies:
+ eslint: "*"
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: 9dcee0a21cfdb3549e2305120535af5ab2c5d0cafdd410827e79d7548f8fc4e7da7cbb77a4338ade8b8b8aaf246fee56b919f1857931bbe2ac5df2fbb5e62ee6
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/types@npm:5.49.0":
+ version: 5.49.0
+ resolution: "@typescript-eslint/types@npm:5.49.0"
+ checksum: 41f72a043007fc3f3356b5a38d7bfa54871545b4a309810a062f044cff25122413a9660ce6d83d1221762f60d067351d020b0cb68f7e1279817f53e77ce8f33d
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/typescript-estree@npm:5.49.0":
+ version: 5.49.0
+ resolution: "@typescript-eslint/typescript-estree@npm:5.49.0"
+ dependencies:
+ "@typescript-eslint/types": 5.49.0
+ "@typescript-eslint/visitor-keys": 5.49.0
+ debug: ^4.3.4
+ globby: ^11.1.0
+ is-glob: ^4.0.3
+ semver: ^7.3.7
+ tsutils: ^3.21.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: f331af9f0ef3ce3157c421b8cc727dec5aa0a60add305aa4c676a02c63ec07799105268af192c5ed193a682b7ed804564d29d49bdbd2019678e495d80e65e29a
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/utils@npm:5.49.0":
+ version: 5.49.0
+ resolution: "@typescript-eslint/utils@npm:5.49.0"
+ dependencies:
+ "@types/json-schema": ^7.0.9
+ "@types/semver": ^7.3.12
+ "@typescript-eslint/scope-manager": 5.49.0
+ "@typescript-eslint/types": 5.49.0
+ "@typescript-eslint/typescript-estree": 5.49.0
+ eslint-scope: ^5.1.1
+ eslint-utils: ^3.0.0
+ semver: ^7.3.7
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ checksum: 8218c566637d5104dfb2346216f8cb4c244f31c2a39e261aafe554b8abd48bd630a0d0807a0a8d776af8f9d9914c8776d86abf0a523049f3c5619c498a7e5b1e
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/visitor-keys@npm:5.49.0":
+ version: 5.49.0
+ resolution: "@typescript-eslint/visitor-keys@npm:5.49.0"
+ dependencies:
+ "@typescript-eslint/types": 5.49.0
+ eslint-visitor-keys: ^3.3.0
+ checksum: 46dc7bc713e8825d1fccba521fdf7c6e2f8829e491c2afd44dbe4105c6432e3c3dfe7e1ecb221401269d639264bb4af77b60a7b65521fcff9ab02cd31d8ef782
+ languageName: node
+ linkType: hard
+
"@wojtekmaj/react-async-button@workspace:.":
version: 0.0.0-use.local
resolution: "@wojtekmaj/react-async-button@workspace:."
dependencies:
- "@babel/cli": ^7.15.0
"@babel/core": ^7.15.0
"@babel/preset-env": ^7.15.0
"@babel/preset-react": ^7.14.0
+ "@babel/preset-typescript": ^7.18.6
"@testing-library/dom": ^8.11.0
"@testing-library/jest-dom": ^5.15.0
"@testing-library/react": ^13.4.0
"@testing-library/user-event": ^14.4.0
+ "@types/jest": ^29.0.0
+ "@types/react": "*"
+ "@typescript-eslint/eslint-plugin": ^5.41.0
+ "@typescript-eslint/parser": ^5.44.0
eslint: ^8.26.0
eslint-config-wojtekmaj: ^0.7.1
husky: ^8.0.0
jest: ^29.0.0
jest-environment-jsdom: ^29.0.0
- make-cancellable-promise: ^1.0.0
+ make-cancellable-promise: ^1.2.0
prettier: ^2.7.0
pretty-quick: ^3.1.0
prop-types: ^15.6.0
react: ^18.2.0
react-dom: ^18.2.0
rimraf: ^3.0.0
+ typescript: ^4.9.4
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
languageName: unknown
@@ -2272,7 +2403,7 @@ __metadata:
languageName: node
linkType: hard
-"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2":
+"anymatch@npm:^3.0.3":
version: 3.1.3
resolution: "anymatch@npm:3.1.3"
dependencies:
@@ -2559,13 +2690,6 @@ __metadata:
languageName: node
linkType: hard
-"binary-extensions@npm:^2.0.0":
- version: 2.2.0
- resolution: "binary-extensions@npm:2.2.0"
- checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8
- languageName: node
- linkType: hard
-
"brace-expansion@npm:^1.1.7":
version: 1.1.11
resolution: "brace-expansion@npm:1.1.11"
@@ -2585,7 +2709,7 @@ __metadata:
languageName: node
linkType: hard
-"braces@npm:^3.0.2, braces@npm:~3.0.2":
+"braces@npm:^3.0.2":
version: 3.0.2
resolution: "braces@npm:3.0.2"
dependencies:
@@ -2726,25 +2850,6 @@ __metadata:
languageName: node
linkType: hard
-"chokidar@npm:^3.4.0":
- version: 3.5.3
- resolution: "chokidar@npm:3.5.3"
- dependencies:
- anymatch: ~3.1.2
- braces: ~3.0.2
- fsevents: ~2.3.2
- glob-parent: ~5.1.2
- is-binary-path: ~2.1.0
- is-glob: ~4.0.1
- normalize-path: ~3.0.0
- readdirp: ~3.6.0
- dependenciesMeta:
- fsevents:
- optional: true
- checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c
- languageName: node
- linkType: hard
-
"chownr@npm:^2.0.0":
version: 2.0.0
resolution: "chownr@npm:2.0.0"
@@ -2848,13 +2953,6 @@ __metadata:
languageName: node
linkType: hard
-"commander@npm:^4.0.1":
- version: 4.1.1
- resolution: "commander@npm:4.1.1"
- checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977
- languageName: node
- linkType: hard
-
"concat-map@npm:0.0.1":
version: 0.0.1
resolution: "concat-map@npm:0.0.1"
@@ -2869,7 +2967,7 @@ __metadata:
languageName: node
linkType: hard
-"convert-source-map@npm:^1.1.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0":
+"convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0":
version: 1.9.0
resolution: "convert-source-map@npm:1.9.0"
checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8
@@ -2965,7 +3063,7 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3":
+"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4":
version: 4.3.4
resolution: "debug@npm:4.3.4"
dependencies:
@@ -3091,6 +3189,15 @@ __metadata:
languageName: node
linkType: hard
+"dir-glob@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "dir-glob@npm:3.0.1"
+ dependencies:
+ path-type: ^4.0.0
+ checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615
+ languageName: node
+ linkType: hard
+
"doctrine@npm:^2.1.0":
version: 2.1.0
resolution: "doctrine@npm:2.1.0"
@@ -3433,6 +3540,16 @@ __metadata:
languageName: node
linkType: hard
+"eslint-scope@npm:^5.1.1":
+ version: 5.1.1
+ resolution: "eslint-scope@npm:5.1.1"
+ dependencies:
+ esrecurse: ^4.3.0
+ estraverse: ^4.1.1
+ checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb
+ languageName: node
+ linkType: hard
+
"eslint-scope@npm:^7.1.1":
version: 7.1.1
resolution: "eslint-scope@npm:7.1.1"
@@ -3556,6 +3673,13 @@ __metadata:
languageName: node
linkType: hard
+"estraverse@npm:^4.1.1":
+ version: 4.3.0
+ resolution: "estraverse@npm:4.3.0"
+ checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827
+ languageName: node
+ linkType: hard
+
"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0":
version: 5.3.0
resolution: "estraverse@npm:5.3.0"
@@ -3631,6 +3755,19 @@ __metadata:
languageName: node
linkType: hard
+"fast-glob@npm:^3.2.9":
+ version: 3.2.12
+ resolution: "fast-glob@npm:3.2.12"
+ dependencies:
+ "@nodelib/fs.stat": ^2.0.2
+ "@nodelib/fs.walk": ^1.2.3
+ glob-parent: ^5.1.2
+ merge2: ^1.3.0
+ micromatch: ^4.0.4
+ checksum: 0b1990f6ce831c7e28c4d505edcdaad8e27e88ab9fa65eedadb730438cfc7cde4910d6c975d6b7b8dc8a73da4773702ebcfcd6e3518e73938bb1383badfe01c2
+ languageName: node
+ linkType: hard
+
"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0":
version: 2.1.0
resolution: "fast-json-stable-stringify@npm:2.1.0"
@@ -3747,13 +3884,6 @@ __metadata:
languageName: node
linkType: hard
-"fs-readdir-recursive@npm:^1.1.0":
- version: 1.1.0
- resolution: "fs-readdir-recursive@npm:1.1.0"
- checksum: 29d50f3d2128391c7fc9fd051c8b7ea45bcc8aa84daf31ef52b17218e20bfd2bd34d02382742801954cc8d1905832b68227f6b680a666ce525d8b6b75068ad1e
- languageName: node
- linkType: hard
-
"fs.realpath@npm:^1.0.0":
version: 1.0.0
resolution: "fs.realpath@npm:1.0.0"
@@ -3761,7 +3891,7 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2":
+"fsevents@npm:^2.3.2":
version: 2.3.2
resolution: "fsevents@npm:2.3.2"
dependencies:
@@ -3771,7 +3901,7 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin":
+"fsevents@patch:fsevents@^2.3.2#~builtin":
version: 2.3.2
resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7"
dependencies:
@@ -3880,6 +4010,15 @@ __metadata:
languageName: node
linkType: hard
+"glob-parent@npm:^5.1.2":
+ version: 5.1.2
+ resolution: "glob-parent@npm:5.1.2"
+ dependencies:
+ is-glob: ^4.0.1
+ checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e
+ languageName: node
+ linkType: hard
+
"glob-parent@npm:^6.0.2":
version: 6.0.2
resolution: "glob-parent@npm:6.0.2"
@@ -3889,16 +4028,7 @@ __metadata:
languageName: node
linkType: hard
-"glob-parent@npm:~5.1.2":
- version: 5.1.2
- resolution: "glob-parent@npm:5.1.2"
- dependencies:
- is-glob: ^4.0.1
- checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e
- languageName: node
- linkType: hard
-
-"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0":
+"glob@npm:^7.1.3, glob@npm:^7.1.4":
version: 7.2.3
resolution: "glob@npm:7.2.3"
dependencies:
@@ -3941,6 +4071,20 @@ __metadata:
languageName: node
linkType: hard
+"globby@npm:^11.1.0":
+ version: 11.1.0
+ resolution: "globby@npm:11.1.0"
+ dependencies:
+ array-union: ^2.1.0
+ dir-glob: ^3.0.1
+ fast-glob: ^3.2.9
+ ignore: ^5.2.0
+ merge2: ^1.4.1
+ slash: ^3.0.0
+ checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6
+ languageName: node
+ linkType: hard
+
"gopd@npm:^1.0.1":
version: 1.0.1
resolution: "gopd@npm:1.0.1"
@@ -4222,15 +4366,6 @@ __metadata:
languageName: node
linkType: hard
-"is-binary-path@npm:~2.1.0":
- version: 2.1.0
- resolution: "is-binary-path@npm:2.1.0"
- dependencies:
- binary-extensions: ^2.0.0
- checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c
- languageName: node
- linkType: hard
-
"is-boolean-object@npm:^1.1.0":
version: 1.1.2
resolution: "is-boolean-object@npm:1.1.2"
@@ -4287,7 +4422,7 @@ __metadata:
languageName: node
linkType: hard
-"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1":
+"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3":
version: 4.0.3
resolution: "is-glob@npm:4.0.3"
dependencies:
@@ -5252,20 +5387,10 @@ __metadata:
languageName: node
linkType: hard
-"make-cancellable-promise@npm:^1.0.0":
- version: 1.1.0
- resolution: "make-cancellable-promise@npm:1.1.0"
- checksum: e036fa6164acb52b0e6298c4d5f4e0ba887e4c96de15ef1e316fcc8374995c29543e8a3ea48d38e1c2c767e985c8869c744774af5881700a90d21128b7535a68
- languageName: node
- linkType: hard
-
-"make-dir@npm:^2.1.0":
- version: 2.1.0
- resolution: "make-dir@npm:2.1.0"
- dependencies:
- pify: ^4.0.1
- semver: ^5.6.0
- checksum: 043548886bfaf1820323c6a2997e6d2fa51ccc2586ac14e6f14634f7458b4db2daf15f8c310e2a0abd3e0cddc64df1890d8fc7263033602c47bb12cbfcf86aab
+"make-cancellable-promise@npm:^1.2.0":
+ version: 1.2.0
+ resolution: "make-cancellable-promise@npm:1.2.0"
+ checksum: 2f443d10e712a96c70e40bb168a9027ac97e0909bba4f568105b712a86e1dba8449188f0902659fc84feb09c9902cb4ede684a09c2239fc7d76f1b027905b487
languageName: node
linkType: hard
@@ -5318,6 +5443,13 @@ __metadata:
languageName: node
linkType: hard
+"merge2@npm:^1.3.0, merge2@npm:^1.4.1":
+ version: 1.4.1
+ resolution: "merge2@npm:1.4.1"
+ checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2
+ languageName: node
+ linkType: hard
+
"micromatch@npm:^4.0.4":
version: 4.0.5
resolution: "micromatch@npm:4.0.5"
@@ -5512,6 +5644,13 @@ __metadata:
languageName: node
linkType: hard
+"natural-compare-lite@npm:^1.4.0":
+ version: 1.4.0
+ resolution: "natural-compare-lite@npm:1.4.0"
+ checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225
+ languageName: node
+ linkType: hard
+
"natural-compare@npm:^1.4.0":
version: 1.4.0
resolution: "natural-compare@npm:1.4.0"
@@ -5571,7 +5710,7 @@ __metadata:
languageName: node
linkType: hard
-"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0":
+"normalize-path@npm:^3.0.0":
version: 3.0.0
resolution: "normalize-path@npm:3.0.0"
checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20
@@ -5848,6 +5987,13 @@ __metadata:
languageName: node
linkType: hard
+"path-type@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "path-type@npm:4.0.0"
+ checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45
+ languageName: node
+ linkType: hard
+
"picocolors@npm:^1.0.0":
version: 1.0.0
resolution: "picocolors@npm:1.0.0"
@@ -5855,20 +6001,13 @@ __metadata:
languageName: node
linkType: hard
-"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1":
+"picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1":
version: 2.3.1
resolution: "picomatch@npm:2.3.1"
checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf
languageName: node
linkType: hard
-"pify@npm:^4.0.1":
- version: 4.0.1
- resolution: "pify@npm:4.0.1"
- checksum: 9c4e34278cb09987685fa5ef81499c82546c033713518f6441778fbec623fc708777fe8ac633097c72d88470d5963094076c7305cafc7ad340aae27cfacd856b
- languageName: node
- linkType: hard
-
"pirates@npm:^4.0.4":
version: 4.0.5
resolution: "pirates@npm:4.0.5"
@@ -6077,15 +6216,6 @@ __metadata:
languageName: node
linkType: hard
-"readdirp@npm:~3.6.0":
- version: 3.6.0
- resolution: "readdirp@npm:3.6.0"
- dependencies:
- picomatch: ^2.2.1
- checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320
- languageName: node
- linkType: hard
-
"redent@npm:^3.0.0":
version: 3.0.0
resolution: "redent@npm:3.0.0"
@@ -6351,15 +6481,6 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^5.6.0":
- version: 5.7.1
- resolution: "semver@npm:5.7.1"
- bin:
- semver: ./bin/semver
- checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf
- languageName: node
- linkType: hard
-
"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0":
version: 6.3.0
resolution: "semver@npm:6.3.0"
@@ -6369,7 +6490,7 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^7.3.5":
+"semver@npm:^7.3.5, semver@npm:^7.3.7":
version: 7.3.8
resolution: "semver@npm:7.3.8"
dependencies:
@@ -6428,13 +6549,6 @@ __metadata:
languageName: node
linkType: hard
-"slash@npm:^2.0.0":
- version: 2.0.0
- resolution: "slash@npm:2.0.0"
- checksum: 512d4350735375bd11647233cb0e2f93beca6f53441015eea241fe784d8068281c3987fbaa93e7ef1c38df68d9c60013045c92837423c69115297d6169aa85e6
- languageName: node
- linkType: hard
-
"slash@npm:^3.0.0":
version: 3.0.0
resolution: "slash@npm:3.0.0"
@@ -6755,6 +6869,24 @@ __metadata:
languageName: node
linkType: hard
+"tslib@npm:^1.8.1":
+ version: 1.14.1
+ resolution: "tslib@npm:1.14.1"
+ checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd
+ languageName: node
+ linkType: hard
+
+"tsutils@npm:^3.21.0":
+ version: 3.21.0
+ resolution: "tsutils@npm:3.21.0"
+ dependencies:
+ tslib: ^1.8.1
+ peerDependencies:
+ typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+ checksum: 1843f4c1b2e0f975e08c4c21caa4af4f7f65a12ac1b81b3b8489366826259323feb3fc7a243123453d2d1a02314205a7634e048d4a8009921da19f99755cdc48
+ languageName: node
+ linkType: hard
+
"type-check@npm:^0.4.0, type-check@npm:~0.4.0":
version: 0.4.0
resolution: "type-check@npm:0.4.0"
@@ -6794,6 +6926,26 @@ __metadata:
languageName: node
linkType: hard
+"typescript@npm:^4.9.4":
+ version: 4.9.4
+ resolution: "typescript@npm:4.9.4"
+ bin:
+ tsc: bin/tsc
+ tsserver: bin/tsserver
+ checksum: e782fb9e0031cb258a80000f6c13530288c6d63f1177ed43f770533fdc15740d271554cdae86701c1dd2c83b082cea808b07e97fd68b38a172a83dbf9e0d0ef9
+ languageName: node
+ linkType: hard
+
+"typescript@patch:typescript@^4.9.4#~builtin":
+ version: 4.9.4
+ resolution: "typescript@patch:typescript@npm%3A4.9.4#~builtin::version=4.9.4&hash=ddd1e8"
+ bin:
+ tsc: bin/tsc
+ tsserver: bin/tsserver
+ checksum: 37f6e2c3c5e2aa5934b85b0fddbf32eeac8b1bacf3a5b51d01946936d03f5377fe86255d4e5a4ae628fd0cd553386355ad362c57f13b4635064400f3e8e05b9d
+ languageName: node
+ linkType: hard
+
"unbox-primitive@npm:^1.0.2":
version: 1.0.2
resolution: "unbox-primitive@npm:1.0.2"