diff --git a/.changeset/loud-hairs-approve.md b/.changeset/loud-hairs-approve.md new file mode 100644 index 000000000..1ed791aa5 --- /dev/null +++ b/.changeset/loud-hairs-approve.md @@ -0,0 +1,5 @@ +--- +'@emotion/weak-memoize': minor +--- + +Source code has been migrated to TypeScript. From now on type declarations will be emitted based on that, instead of being hand-written. diff --git a/packages/memoize/package.json b/packages/memoize/package.json index 256d93f24..58f5bcedf 100644 --- a/packages/memoize/package.json +++ b/packages/memoize/package.json @@ -18,8 +18,7 @@ }, "files": [ "src", - "dist", - "types/*.d.ts" + "dist" ], "browser": { "./dist/emotion-memoize.cjs.js": "./dist/emotion-memoize.browser.cjs.js", diff --git a/packages/weak-memoize/package.json b/packages/weak-memoize/package.json index 54c3abc42..0b7786e1a 100644 --- a/packages/weak-memoize/package.json +++ b/packages/weak-memoize/package.json @@ -4,7 +4,7 @@ "description": "A memoization function that uses a WeakMap", "main": "dist/emotion-weak-memoize.cjs.js", "module": "dist/emotion-weak-memoize.esm.js", - "types": "types/index.d.ts", + "types": "dist/declarations/src/index.d.ts", "license": "MIT", "repository": "https://github.com/emotion-js/emotion/tree/main/packages/weak-memoize", "scripts": { @@ -18,8 +18,7 @@ }, "files": [ "src", - "dist", - "types/*.d.ts" + "dist" ], "browser": { "./dist/emotion-weak-memoize.cjs.js": "./dist/emotion-weak-memoize.browser.cjs.js", diff --git a/packages/weak-memoize/src/index.js b/packages/weak-memoize/src/index.js deleted file mode 100644 index 0b93c7ee6..000000000 --- a/packages/weak-memoize/src/index.js +++ /dev/null @@ -1,15 +0,0 @@ -let weakMemoize = function ( - /* */ func /*: Arg => Return */ -) /*: Arg => Return */ { - let cache /*: WeakMap */ = new WeakMap() - return arg => { - if (cache.has(arg)) { - return cache.get(arg) - } - let ret = func(arg) - cache.set(arg, ret) - return ret - } -} - -export default weakMemoize diff --git a/packages/weak-memoize/src/index.ts b/packages/weak-memoize/src/index.ts new file mode 100644 index 000000000..ba4c5bc55 --- /dev/null +++ b/packages/weak-memoize/src/index.ts @@ -0,0 +1,17 @@ +let weakMemoize = function ( + func: (arg: Arg) => Return +): (arg: Arg) => Return { + let cache = new WeakMap() + return (arg: Arg) => { + if (cache.has(arg)) { + // Use non-null assertion because we just checked that the cache `has` it + // This allows us to remove `undefined` from the return value + return cache.get(arg)! + } + let ret = func(arg) + cache.set(arg, ret) + return ret + } +} + +export default weakMemoize diff --git a/packages/weak-memoize/types/index.d.ts b/packages/weak-memoize/types/index.d.ts index b5344615a..12f6194ac 100644 --- a/packages/weak-memoize/types/index.d.ts +++ b/packages/weak-memoize/types/index.d.ts @@ -1,7 +1,3 @@ // TypeScript Version: 2.2 -type UnaryFn = (arg: Arg) => Return - -export default function weakMemoize( - func: UnaryFn -): UnaryFn +export { default } from '../src' diff --git a/packages/weak-memoize/types/tests.ts b/packages/weak-memoize/types/tests.ts index 8daa3243d..9d54d2849 100644 --- a/packages/weak-memoize/types/tests.ts +++ b/packages/weak-memoize/types/tests.ts @@ -1,4 +1,4 @@ -import weakMemoize from '@emotion/weak-memoize' +import weakMemoize from '../src' interface Foo { bar: 'xyz' diff --git a/packages/weak-memoize/types/tslint.json b/packages/weak-memoize/types/tslint.json index c14028519..daf99b517 100644 --- a/packages/weak-memoize/types/tslint.json +++ b/packages/weak-memoize/types/tslint.json @@ -18,6 +18,7 @@ ], "no-unnecessary-generics": false, - "strict-export-declare-modifiers": false + "strict-export-declare-modifiers": false, + "no-default-import": false } }