Skip to content

Commit 1d743ab

Browse files
authored
fix: no implicit any, add missing types (#852)
1 parent 6a532c6 commit 1d743ab

16 files changed

+121
-56
lines changed

package-lock.json

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@
8787
"@babel/preset-typescript": "^7.27.1",
8888
"@playwright/test": "^1.53.2",
8989
"@types/react": "^19.1.6",
90+
"@types/react-dom": "^19.1.9",
91+
"@types/wait-on": "^5.3.4",
9092
"aegir": "^47.0.19",
9193
"concurrently": "^9.1.2",
9294
"cross-env": "^7.0.3",

playwright.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,11 @@ export default defineConfig({
9595
'dom.serviceWorkers.enabled': false
9696
}
9797
},
98+
/**
99+
*
100+
* @param {object} param0
101+
* @param {import('@playwright/test').Page} param0.page
102+
*/
98103
beforeEach: async ({ page }) => {
99104
await page.addInitScript(() => {
100105
Object.defineProperty(navigator, 'serviceWorker', {

src/app.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ async function renderUi (): Promise<void> {
3333
console.warn('Failed to load CSS config, UI will render without styles:', err)
3434
}
3535
const container = document.getElementById('root')
36+
if (container == null) {
37+
throw new Error('No root container found')
38+
}
3639

3740
const root = ReactDOMClient.createRoot(container)
3841

src/components/Form.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
import React from 'react'
2-
import type { ReactElement } from 'react'
32

4-
export default ({ handleSubmit, requestPath, setRequestPath }): ReactElement => (
3+
const Form: React.FC<{
4+
handleSubmit(e: React.FormEvent<HTMLFormElement>): void
5+
requestPath: string
6+
setRequestPath(path: string): void
7+
}> = ({
8+
handleSubmit,
9+
requestPath,
10+
setRequestPath
11+
}) => (
512
<form id='add-file' onSubmit={handleSubmit}>
613
<label htmlFor='inputContent' className='f5 ma0 pb2 teal fw4 db'>CID, Content Path, or URL</label>
714
<input
@@ -15,3 +22,5 @@ export default ({ handleSubmit, requestPath, setRequestPath }): ReactElement =>
1522
/>
1623
</form>
1724
)
25+
26+
export default Form

src/components/input-validator.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,14 @@ function FormatHelp (): ReactElement {
2828
</>
2929
)
3030
}
31+
interface ValidationMessageProps {
32+
cidOrPeerIdOrDnslink?: IpfsUriParts['cidOrPeerIdOrDnslink'],
33+
requestPath: string,
34+
protocol?: IpfsUriParts['protocol'],
35+
children: React.ReactNode
36+
}
3137

32-
function ValidationMessage ({ cidOrPeerIdOrDnslink, requestPath, protocol, children }): ReactElement {
38+
const ValidationMessage: React.FC<ValidationMessageProps> = ({ cidOrPeerIdOrDnslink, requestPath, protocol, children }) => {
3339
let errorElement: ReactElement | null = null
3440
if (requestPath == null || requestPath === '') {
3541
errorElement = <span><big className='f3'></big> Enter a valid IPFS/IPNS content path.</span>

src/context/service-worker-context.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,14 @@ import { uiLogger } from '../lib/logger.js'
1616
import { findOriginIsolationRedirect } from '../lib/path-or-subdomain.js'
1717
import { isUnregisterRequest } from '../lib/unregister-request.js'
1818
import { registerServiceWorker } from '../service-worker-utils.js'
19-
import type { ReactElement } from 'react'
2019

2120
const log = uiLogger.forComponent('service-worker-context')
2221

2322
export const ServiceWorkerContext = createContext({
2423
isServiceWorkerRegistered: false
2524
})
2625

27-
export const ServiceWorkerProvider = ({ children }): ReactElement => {
26+
export const ServiceWorkerProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
2827
const [isServiceWorkerRegistered, setIsServiceWorkerRegistered] = useState(false)
2928

3029
useEffect(() => {

src/lib/config-db.ts

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,12 @@ export async function getConfig (logger: ComponentLogger): Promise<ConfigDb> {
126126
let gateways = defaultGateways
127127
let routers = defaultRouters
128128
let dnsJsonResolvers = defaultDnsJsonResolvers
129-
let enableRecursiveGateways
130-
let enableWss
131-
let enableWebTransport
132-
let enableGatewayProviders
133-
let fetchTimeout
134-
let debug = ''
129+
let enableRecursiveGateways = defaultEnableRecursiveGateways
130+
let enableWss = defaultEnableWss
131+
let enableWebTransport = defaultEnableWebTransport
132+
let enableGatewayProviders = defaultEnableGatewayProviders
133+
let fetchTimeout = defaultFetchTimeout * 1000
134+
let debug = defaultDebug()
135135
let serviceWorkerRegistrationTTL = defaultServiceWorkerRegistrationTTL
136136
let _supportsSubdomains = defaultSupportsSubdomains
137137

@@ -150,13 +150,13 @@ export async function getConfig (logger: ComponentLogger): Promise<ConfigDb> {
150150
routers = config.routers
151151

152152
dnsJsonResolvers = config.dnsJsonResolvers
153-
enableRecursiveGateways = config.enableRecursiveGateways ?? defaultEnableRecursiveGateways
154-
enableWss = config.enableWss ?? defaultEnableWss
155-
enableWebTransport = config.enableWebTransport ?? defaultEnableWebTransport
156-
enableGatewayProviders = config.enableGatewayProviders ?? defaultEnableGatewayProviders
157-
fetchTimeout = config.fetchTimeout ?? (defaultFetchTimeout * 1000)
158-
_supportsSubdomains ??= config._supportsSubdomains
159-
serviceWorkerRegistrationTTL = config.serviceWorkerRegistrationTTL ?? defaultServiceWorkerRegistrationTTL
153+
enableRecursiveGateways = config.enableRecursiveGateways
154+
enableWss = config.enableWss
155+
enableWebTransport = config.enableWebTransport
156+
enableGatewayProviders = config.enableGatewayProviders
157+
fetchTimeout = config.fetchTimeout
158+
_supportsSubdomains = config._supportsSubdomains
159+
serviceWorkerRegistrationTTL = config.serviceWorkerRegistrationTTL
160160
} catch (err) {
161161
log('error loading config from db', err)
162162
} finally {
@@ -176,18 +176,18 @@ export async function getConfig (logger: ComponentLogger): Promise<ConfigDb> {
176176

177177
// always return the config, even if we failed to load it.
178178
return {
179-
gateways,
180-
routers,
181-
dnsJsonResolvers,
182-
enableRecursiveGateways,
183-
enableWss,
184-
enableWebTransport,
185-
enableGatewayProviders,
186-
debug,
187-
fetchTimeout,
188-
serviceWorkerRegistrationTTL,
189-
_supportsSubdomains
190-
}
179+
gateways: gateways ?? defaultGateways,
180+
routers: routers ?? defaultRouters,
181+
dnsJsonResolvers: dnsJsonResolvers ?? defaultDnsJsonResolvers,
182+
enableRecursiveGateways: enableRecursiveGateways ?? defaultEnableRecursiveGateways,
183+
enableWss: enableWss ?? defaultEnableWss,
184+
enableWebTransport: enableWebTransport ?? defaultEnableWebTransport,
185+
enableGatewayProviders: enableGatewayProviders ?? defaultEnableGatewayProviders,
186+
debug: debug ?? defaultDebug(),
187+
fetchTimeout: fetchTimeout ?? defaultFetchTimeout * 1000,
188+
serviceWorkerRegistrationTTL: serviceWorkerRegistrationTTL ?? defaultServiceWorkerRegistrationTTL,
189+
_supportsSubdomains: _supportsSubdomains ?? defaultSupportsSubdomains
190+
} satisfies ConfigDb
191191
})().finally(() => {
192192
getConfigPromise = null
193193
})

src/lib/get-verified-fetch.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { createLibp2p } from 'libp2p'
2020
import * as libp2pInfo from 'libp2p/version'
2121
import { blake3 } from './blake3.js'
2222
import type { ConfigDb } from './config-db.js'
23+
import type { DelegatedRoutingV1HttpApiClient } from '@helia/delegated-routing-v1-http-api-client'
2324
import type { BlockBroker } from '@helia/interface'
2425
import type { VerifiedFetch } from '@helia/verified-fetch'
2526
import type { ComponentLogger } from '@libp2p/logger'
@@ -115,7 +116,10 @@ export async function libp2pDefaults (config: Libp2pDefaultsOptions): Promise<Li
115116
filterAddrs.push('tls') // /ip4/A.B.C.D/tcp/4002/tls/sni/example.com/http
116117
}
117118

118-
const libp2pOptions = {
119+
interface Libp2pOptionsWithDelegatedRouting extends Libp2pOptions {
120+
services: Libp2pOptions['services'] & Record<`delegatedRouter${number}`, () => DelegatedRoutingV1HttpApiClient>
121+
}
122+
const libp2pOptions: Libp2pOptionsWithDelegatedRouting = {
119123
privateKey,
120124
addresses: {}, // no need to listen on any addresses
121125
transports,
@@ -132,7 +136,7 @@ export async function libp2pDefaults (config: Libp2pDefaultsOptions): Promise<Li
132136
keychain: keychain(),
133137
ping: ping()
134138
}
135-
} satisfies Libp2pOptions
139+
} satisfies Libp2pOptionsWithDelegatedRouting
136140

137141
// Add delegated routing services for each passed delegated router endpoint
138142
config.routers.forEach((router, i) => {

src/lib/input-helpers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export const convertDnsResolverObjectToInput = (dnsResolvers: Record<string, str
1111
}
1212

1313
export const convertDnsResolverInputToObject = (dnsResolverInput: string): Record<string, string> => {
14-
return dnsResolverInput.split('\n').map((u) => u.trim().split(' ')).reduce((acc, [key, url]) => {
14+
return dnsResolverInput.split('\n').map((u) => u.trim().split(' ')).reduce<Record<string, string>>((acc, [key, url]) => {
1515
acc[key] = url
1616
return acc
1717
}, {})

0 commit comments

Comments
 (0)