From 6810ddbf56aab0deb185727a0b065d496ea64efa Mon Sep 17 00:00:00 2001 From: Lauren Tan Date: Thu, 15 Jun 2023 12:52:55 -0400 Subject: [PATCH] [react-forget-runtime] Compile with typescript --- .../react-forget-runtime/package.json | 5 ++-- .../{index.js => src/index.ts} | 28 +++++++++++-------- .../react-forget-runtime/tsconfig.json | 20 +++++++++++++ 3 files changed, 39 insertions(+), 14 deletions(-) rename compiler/forget/packages/react-forget-runtime/{index.js => src/index.ts} (80%) create mode 100644 compiler/forget/packages/react-forget-runtime/tsconfig.json diff --git a/compiler/forget/packages/react-forget-runtime/package.json b/compiler/forget/packages/react-forget-runtime/package.json index a0071d786b..4405e377c0 100644 --- a/compiler/forget/packages/react-forget-runtime/package.json +++ b/compiler/forget/packages/react-forget-runtime/package.json @@ -2,13 +2,12 @@ "name": "react-forget-runtime", "version": "0.0.1", "description": "Runtime for React Forget", - "main": "index.js", "license": "MIT", "files": [ - "index.js" + "src" ], "scripts": { - "build": ":", + "build": "tsc", "test": ":" } } diff --git a/compiler/forget/packages/react-forget-runtime/index.js b/compiler/forget/packages/react-forget-runtime/src/index.ts similarity index 80% rename from compiler/forget/packages/react-forget-runtime/index.js rename to compiler/forget/packages/react-forget-runtime/src/index.ts index 8c6f717773..1afda074b0 100644 --- a/compiler/forget/packages/react-forget-runtime/index.js +++ b/compiler/forget/packages/react-forget-runtime/src/index.ts @@ -8,6 +8,7 @@ import * as React from "react"; const { + // @ts-ignore __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: { ReactCurrentDispatcher, }, @@ -15,9 +16,11 @@ const { useEffect, } = React; +type MemoCache = Array; + export const $empty = Symbol.for("react.memo_cache_sentinel"); -export function unstable_useMemoCache(size) { +export function unstable_useMemoCache(size: number) { "use no forget"; const $ = new Array(size); for (let ii = 0; ii < size; ii++) { @@ -26,7 +29,7 @@ export function unstable_useMemoCache(size) { return useRef($).current; } -export function $read(memoCache, index) { +export function $read(memoCache: MemoCache, index: number) { const value = memoCache[index]; if (value === $empty) { throw new Error("useMemoCache: read before write"); @@ -34,7 +37,7 @@ export function $read(memoCache, index) { return value; } -const LazyGuardDispatcher = {}; +const LazyGuardDispatcher: { [key: string]: () => never } = {}; [ "readContext", "useCallback", @@ -63,7 +66,7 @@ const LazyGuardDispatcher = {}; }; }); -let originalDispatcher = null; +let originalDispatcher: unknown = null; export function $startLazy() { if (originalDispatcher !== null) { @@ -81,7 +84,7 @@ export function $endLazy() { originalDispatcher = null; } -export function $reset($) { +export function $reset($: MemoCache) { for (let ii = 0; ii < $.length; ii++) { $[ii] = $empty; } @@ -94,8 +97,10 @@ export function $makeReadOnly() { /** * Instrumentation to count rerenders in React components */ -export const renderCounterRegistry /*: Map>*/ = - new Map(); +export const renderCounterRegistry: Map< + string, + Set<{ count: number }> +> = new Map(); export function clearRenderCounterRegistry() { for (const counters of renderCounterRegistry.values()) { counters.forEach((counter) => { @@ -104,7 +109,7 @@ export function clearRenderCounterRegistry() { } } -function registerRenderCounter(name, val) { +function registerRenderCounter(name: string, val: { count: number }) { let counters = renderCounterRegistry.get(name); if (counters == null) { counters = new Set(); @@ -113,7 +118,7 @@ function registerRenderCounter(name, val) { counters.add(val); } -function removeRenderCounter(name, val): void { +function removeRenderCounter(name: string, val: { count: number }): void { const counters = renderCounterRegistry.get(name); if (counters == null) { return; @@ -121,8 +126,8 @@ function removeRenderCounter(name, val): void { counters.delete(val); } -export function useRenderCounter(name): void { - const val = useRef(null); +export function useRenderCounter(name: string): void { + const val = useRef<{ count: number }>(null); if (val.current != null) { val.current.count += 1; @@ -132,6 +137,7 @@ export function useRenderCounter(name): void { if (val.current == null) { const counter = { count: 0 }; registerRenderCounter(name, counter); + // @ts-ignore val.current = counter; } return () => { diff --git a/compiler/forget/packages/react-forget-runtime/tsconfig.json b/compiler/forget/packages/react-forget-runtime/tsconfig.json new file mode 100644 index 0000000000..4420706d67 --- /dev/null +++ b/compiler/forget/packages/react-forget-runtime/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "@tsconfig/node16-strictest/tsconfig.json", + "compilerOptions": { + "declaration": true, + "outDir": "dist", + "jsx": "react-jsxdev", + + // weaken strictness from preset + "importsNotUsedAsValues": "remove", + "noUncheckedIndexedAccess": false, + "noUnusedParameters": false, + "useUnknownInCatchVariables": false, + "target": "ES2015", + // ideally turn off only during dev, or on a per-file basis + "noUnusedLocals": false, + "sourceMap": true + }, + "exclude": ["node_modules"], + "include": ["src/**/*.ts"] +}