[react-forget-runtime] Compile with typescript
Lauren Tan committed
Jun 15, 2023 at 12:52 UTC
6810ddbf56aab0deb185727a0b065d496ea64efa
3 files changed
+39
-14
compiler/forget/packages/react-forget-runtime/package.json
+2
-3
@@ -2,13 +2,12 @@
2
"name": "react-forget-runtime",
3
"version": "0.0.1",
4
"description": "Runtime for React Forget",
5
- "main": "index.js",
5
"license": "MIT",
6
"files": [
8
- "index.js"
7
+ "src"
8
],
9
"scripts": {
11
- "build": ":",
10
+ "build": "tsc",
11
"test": ":"
12
}
13
}
compiler/forget/packages/react-forget-runtime/src/index.ts
renamed
+17
-11
@@ -8,6 +8,7 @@
8
import * as React from "react";
9
10
const {
11
+ // @ts-ignore
12
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: {
13
ReactCurrentDispatcher,
14
},
@@ -15,9 +16,11 @@ const {
16
useEffect,
17
} = React;
18
19
+type MemoCache = Array<number | typeof $empty>;
20
+
21
export const $empty = Symbol.for("react.memo_cache_sentinel");
22
20
-export function unstable_useMemoCache(size) {
23
+export function unstable_useMemoCache(size: number) {
24
"use no forget";
25
const $ = new Array(size);
26
for (let ii = 0; ii < size; ii++) {
@@ -26,7 +29,7 @@ export function unstable_useMemoCache(size) {
29
return useRef($).current;
30
}
31
29
-export function $read(memoCache, index) {
32
+export function $read(memoCache: MemoCache, index: number) {
33
const value = memoCache[index];
34
if (value === $empty) {
35
throw new Error("useMemoCache: read before write");
@@ -34,7 +37,7 @@ export function $read(memoCache, index) {
37
return value;
38
}
39
37
-const LazyGuardDispatcher = {};
40
+const LazyGuardDispatcher: { [key: string]: () => never } = {};
41
[
42
"readContext",
43
"useCallback",
@@ -63,7 +66,7 @@ const LazyGuardDispatcher = {};
66
};
67
});
68
66
-let originalDispatcher = null;
69
+let originalDispatcher: unknown = null;
70
71
export function $startLazy() {
72
if (originalDispatcher !== null) {
@@ -81,7 +84,7 @@ export function $endLazy() {
84
originalDispatcher = null;
85
}
86
84
-export function $reset($) {
87
+export function $reset($: MemoCache) {
88
for (let ii = 0; ii < $.length; ii++) {
89
$[ii] = $empty;
90
}
@@ -94,8 +97,10 @@ export function $makeReadOnly() {
97
/**
98
* Instrumentation to count rerenders in React components
99
*/
97
-export const renderCounterRegistry /*: Map<string,Set<{count: number}>>*/ =
98
- new Map();
100
+export const renderCounterRegistry: Map<
101
+ string,
102
+ Set<{ count: number }>
103
+> = new Map();
104
export function clearRenderCounterRegistry() {
105
for (const counters of renderCounterRegistry.values()) {
106
counters.forEach((counter) => {
@@ -104,7 +109,7 @@ export function clearRenderCounterRegistry() {
109
}
110
}
111
107
-function registerRenderCounter(name, val) {
112
+function registerRenderCounter(name: string, val: { count: number }) {
113
let counters = renderCounterRegistry.get(name);
114
if (counters == null) {
115
counters = new Set();
@@ -113,7 +118,7 @@ function registerRenderCounter(name, val) {
118
counters.add(val);
119
}
120
116
-function removeRenderCounter(name, val): void {
121
+function removeRenderCounter(name: string, val: { count: number }): void {
122
const counters = renderCounterRegistry.get(name);
123
if (counters == null) {
124
return;
@@ -121,8 +126,8 @@ function removeRenderCounter(name, val): void {
126
counters.delete(val);
127
}
128
124
-export function useRenderCounter(name): void {
125
- const val = useRef(null);
129
+export function useRenderCounter(name: string): void {
130
+ const val = useRef<{ count: number }>(null);
131
132
if (val.current != null) {
133
val.current.count += 1;
@@ -132,6 +137,7 @@ export function useRenderCounter(name): void {
137
if (val.current == null) {
138
const counter = { count: 0 };
139
registerRenderCounter(name, counter);
140
+ // @ts-ignore
141
val.current = counter;
142
}
143
return () => {
compiler/forget/packages/react-forget-runtime/tsconfig.json
new
+20
@@ -0,0 +1,20 @@
1
+{
2
+ "extends": "@tsconfig/node16-strictest/tsconfig.json",
3
+ "compilerOptions": {
4
+ "declaration": true,
5
+ "outDir": "dist",
6
+ "jsx": "react-jsxdev",
7
+
8
+ // weaken strictness from preset
9
+ "importsNotUsedAsValues": "remove",
10
+ "noUncheckedIndexedAccess": false,
11
+ "noUnusedParameters": false,
12
+ "useUnknownInCatchVariables": false,
13
+ "target": "ES2015",
14
+ // ideally turn off only during dev, or on a per-file basis
15
+ "noUnusedLocals": false,
16
+ "sourceMap": true
17
+ },
18
+ "exclude": ["node_modules"],
19
+ "include": ["src/**/*.ts"]
20
+}