Skip to content

Commit b1d16b0

Browse files
Migrate @emotion/weak-memoize to TypeScript (#2429)
* [weak-memoize] Convert to TypeScript * Add changeset * tweak a bunch of stuff Co-authored-by: Mateusz Burzyński <mateuszburzynski@gmail.com>
1 parent 7f8db2d commit b1d16b0

File tree

8 files changed

+29
-27
lines changed

8 files changed

+29
-27
lines changed

.changeset/loud-hairs-approve.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@emotion/weak-memoize': minor
3+
---
4+
5+
Source code has been migrated to TypeScript. From now on type declarations will be emitted based on that, instead of being hand-written.

packages/memoize/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@
1818
},
1919
"files": [
2020
"src",
21-
"dist",
22-
"types/*.d.ts"
21+
"dist"
2322
],
2423
"browser": {
2524
"./dist/emotion-memoize.cjs.js": "./dist/emotion-memoize.browser.cjs.js",

packages/weak-memoize/package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"description": "A memoization function that uses a WeakMap",
55
"main": "dist/emotion-weak-memoize.cjs.js",
66
"module": "dist/emotion-weak-memoize.esm.js",
7-
"types": "types/index.d.ts",
7+
"types": "dist/declarations/src/index.d.ts",
88
"license": "MIT",
99
"repository": "https://github.com/emotion-js/emotion/tree/main/packages/weak-memoize",
1010
"scripts": {
@@ -18,8 +18,7 @@
1818
},
1919
"files": [
2020
"src",
21-
"dist",
22-
"types/*.d.ts"
21+
"dist"
2322
],
2423
"browser": {
2524
"./dist/emotion-weak-memoize.cjs.js": "./dist/emotion-weak-memoize.browser.cjs.js",

packages/weak-memoize/src/index.js

Lines changed: 0 additions & 15 deletions
This file was deleted.

packages/weak-memoize/src/index.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
let weakMemoize = function <Arg extends object, Return>(
2+
func: (arg: Arg) => Return
3+
): (arg: Arg) => Return {
4+
let cache = new WeakMap<Arg, Return>()
5+
return (arg: Arg) => {
6+
if (cache.has(arg)) {
7+
// Use non-null assertion because we just checked that the cache `has` it
8+
// This allows us to remove `undefined` from the return value
9+
return cache.get(arg)!
10+
}
11+
let ret = func(arg)
12+
cache.set(arg, ret)
13+
return ret
14+
}
15+
}
16+
17+
export default weakMemoize
Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
11
// TypeScript Version: 2.2
22

3-
type UnaryFn<Arg, Return> = (arg: Arg) => Return
4-
5-
export default function weakMemoize<Arg extends object, Return>(
6-
func: UnaryFn<Arg, Return>
7-
): UnaryFn<Arg, Return>
3+
export { default } from '../src'

packages/weak-memoize/types/tests.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import weakMemoize from '@emotion/weak-memoize'
1+
import weakMemoize from '../src'
22

33
interface Foo {
44
bar: 'xyz'

packages/weak-memoize/types/tslint.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
],
1919

2020
"no-unnecessary-generics": false,
21-
"strict-export-declare-modifiers": false
21+
"strict-export-declare-modifiers": false,
22+
"no-default-import": false
2223
}
2324
}

0 commit comments

Comments
 (0)