From a1f4a403b520bca114f7c40a0bb0f4e4f690cb51 Mon Sep 17 00:00:00 2001 From: Ryosuke Ishizue Date: Sun, 3 May 2020 10:45:01 +0900 Subject: [PATCH] . --- esm/index.d.ts | 3 +++ esm/index.js | 10 ++++++++++ esm/index.js.map | 1 + lib/index.d.ts | 3 +++ lib/index.js | 12 ++++++++++++ lib/index.js.map | 1 + package.json | 20 +++++++++++++++----- src/index.ts | 10 ++++++---- tsconfig.json => tsconfig.base.json | 2 -- tsconfig.cjs.json | 8 ++++++++ tsconfig.esm.json | 8 ++++++++ yarn.lock | 4 ++-- 12 files changed, 69 insertions(+), 13 deletions(-) create mode 100644 esm/index.d.ts create mode 100644 esm/index.js create mode 100644 esm/index.js.map create mode 100644 lib/index.d.ts create mode 100644 lib/index.js create mode 100644 lib/index.js.map rename tsconfig.json => tsconfig.base.json (91%) create mode 100644 tsconfig.cjs.json create mode 100644 tsconfig.esm.json diff --git a/esm/index.d.ts b/esm/index.d.ts new file mode 100644 index 00000000..053a504c --- /dev/null +++ b/esm/index.d.ts @@ -0,0 +1,3 @@ +declare type Fn = (...args: ARGS) => R; +declare const useEventCallback: (fn: Fn) => Fn; +export default useEventCallback; diff --git a/esm/index.js b/esm/index.js new file mode 100644 index 00000000..e4292a77 --- /dev/null +++ b/esm/index.js @@ -0,0 +1,10 @@ +import { useLayoutEffect, useCallback, useRef } from 'react'; +const useEventCallback = (fn) => { + let ref = useRef(fn); + useLayoutEffect(() => { + ref.current = fn; + }); + return useCallback((...args) => ref.current(...args), []); +}; +export default useEventCallback; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/esm/index.js.map b/esm/index.js.map new file mode 100644 index 00000000..5b8566a3 --- /dev/null +++ b/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAI7D,MAAM,gBAAgB,GAAG,CAAqB,EAAY,EAAY,EAAE;IACtE,IAAI,GAAG,GAAG,MAAM,CAAW,EAAE,CAAC,CAAC;IAC/B,eAAe,CAAC,GAAG,EAAE;QACnB,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"} \ No newline at end of file diff --git a/lib/index.d.ts b/lib/index.d.ts new file mode 100644 index 00000000..053a504c --- /dev/null +++ b/lib/index.d.ts @@ -0,0 +1,3 @@ +declare type Fn = (...args: ARGS) => R; +declare const useEventCallback: (fn: Fn) => Fn; +export default useEventCallback; diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 00000000..e5a6e4d5 --- /dev/null +++ b/lib/index.js @@ -0,0 +1,12 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const react_1 = require("react"); +const useEventCallback = (fn) => { + let ref = react_1.useRef(fn); + react_1.useLayoutEffect(() => { + ref.current = fn; + }); + return react_1.useCallback((...args) => ref.current(...args), []); +}; +exports.default = useEventCallback; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/index.js.map b/lib/index.js.map new file mode 100644 index 00000000..15920fd9 --- /dev/null +++ b/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,iCAA6D;AAI7D,MAAM,gBAAgB,GAAG,CAAqB,EAAY,EAAY,EAAE;IACtE,IAAI,GAAG,GAAG,cAAM,CAAW,EAAE,CAAC,CAAC;IAC/B,uBAAe,CAAC,GAAG,EAAE;QACnB,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,OAAO,mBAAW,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,kBAAe,gBAAgB,CAAC"} \ No newline at end of file diff --git a/package.json b/package.json index 3628589b..bbc80fec 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,17 @@ "repository": "ssh://git@github.com/WillBooster/react-use-event-callback.git", "license": "Apache-2.0", "author": "WillBooster Inc.", - "main": "dist/index.js", - "typings": "dist/index.d.ts", + "main": "lib/index.js", + "module": "esm/index.js", + "types": "lib/index.d.js", + "files": [ + "lib", + "esm" + ], "scripts": { - "build": "tsc", + "build": "yarn build:cjs && yarn build:esm", + "build:cjs": "tsc --build tsconfig.cjs.json", + "build:esm": "tsc --build tsconfig.esm.json", "cleanup": "yarn format && yarn lint-fix", "format": "sort-package-json && yarn prettier", "lint": "eslint \"./{packages/*/,}{src,__tests__}/**/*.{js,jsx,ts,tsx}\"", @@ -17,8 +24,11 @@ "typecheck": "tsc --noEmit" }, "prettier": "@willbooster/prettier-config", + "peerDependencies": { + "react": ">=16.8" + }, "devDependencies": { - "@types/react": "16.9.34", + "@types/react": "^16.8.8", "@typescript-eslint/eslint-plugin": "2.26.0", "@typescript-eslint/parser": "2.26.0", "@willbooster/eslint-config-ts": "3.0.0", @@ -31,7 +41,7 @@ "husky": "4.2.3", "lint-staged": "10.1.1", "prettier": "2.0.2", - "react": "16.13.1", + "react": "^16.8.4", "sort-package-json": "1.40.0", "typescript": "3.8.3" } diff --git a/src/index.ts b/src/index.ts index 7906562a..797ff3b7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,11 +1,13 @@ -import { useCallback, useLayoutEffect, useRef } from 'react'; +import { useLayoutEffect, useCallback, useRef } from 'react'; type Fn = (...args: ARGS) => R; -export function useEventCallback(fn: Fn): Fn { - const ref = useRef>(fn); +const useEventCallback = (fn: Fn): Fn => { + let ref = useRef>(fn); useLayoutEffect(() => { ref.current = fn; }); return useCallback((...args) => ref.current(...args), []); -} +}; + +export default useEventCallback; diff --git a/tsconfig.json b/tsconfig.base.json similarity index 91% rename from tsconfig.json rename to tsconfig.base.json index 5f116630..518ab499 100644 --- a/tsconfig.json +++ b/tsconfig.base.json @@ -1,7 +1,6 @@ { "compilerOptions": { "target": "esnext", - "module": "esnext", "moduleResolution": "node", "alwaysStrict": true, "strict": true, @@ -11,7 +10,6 @@ "resolveJsonModule": true, "sourceMap": true, "importHelpers": false, - "outDir": "dist", "typeRoots": ["./node_modules/@types", "./@types"], "declaration": true }, diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json new file mode 100644 index 00000000..b3514f30 --- /dev/null +++ b/tsconfig.cjs.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.base", + "compilerOptions": { + "module": "commonjs", + "outDir": "./lib", + }, + "include": ["src/**/*", "__tests__/**/*", "packages/*/src/**/*", "packages/*/__tests__/**/*"] +} diff --git a/tsconfig.esm.json b/tsconfig.esm.json new file mode 100644 index 00000000..1547e812 --- /dev/null +++ b/tsconfig.esm.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.base", + "compilerOptions": { + "module": "esnext", + "outDir": "./esm", + }, + "include": ["src/**/*", "__tests__/**/*", "packages/*/src/**/*", "packages/*/__tests__/**/*"] +} diff --git a/yarn.lock b/yarn.lock index 11ab999c..197add4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -107,7 +107,7 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== -"@types/react@16.9.34": +"@types/react@^16.8.8": version "16.9.34" resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.34.tgz#f7d5e331c468f53affed17a8a4d488cd44ea9349" integrity sha512-8AJlYMOfPe1KGLKyHpflCg5z46n0b5DbRfqDksxBLBTUpB75ypDBAO9eCUcjNwE6LCUslwTz00yyG/X9gaVtow== @@ -1739,7 +1739,7 @@ react-is@^16.8.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react@16.13.1: +react@^16.8.4: version "16.13.1" resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==