@samitouri / QOS-React-2 / commits / 6810ddbf56

[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 +}