cloudflare / workers-sdk

⛅️ Home to Wrangler, the CLI for Cloudflare Workers®
https://developers.cloudflare.com/workers/
Apache License 2.0
2.73k stars 724 forks source link

🐛 BUG: `wrangler types` + DurableObjects + a build process + typescript #6905

Open zwily opened 1 month ago

zwily commented 1 month ago

Which Cloudflare product(s) does this pertain to?

Wrangler

What version(s) of the tool(s) are you using?

3.80.0 [wrangler]

What version of Node are you using?

20

What operating system and version are you using?

Mac Sequoia

Describe the Bug

I have a remix app using wrangler+static assets, and am also using a DurableObject. I have the DurableObject defined in my wrangler.toml, and then run wrangler types to generate worker-configuration.d.ts. That ends up looking something like this:

interface Env {
    DO: DurableObjectNamespace<import("./build/index").DrizzleTestDO>;
}

That's great, except, Env["DO"] actually is typed as DurableObjectNamespace<any> because import("./build/index") is reading from my built javascript file and has no types. If I manually change that to import("./server.ts").DrizzleTestDO then typing works fine, but the change would be erased the next time I run wrangler types.

Expected behavior

I'm not sure what the right thing to do here is. As a workaround, I am running wrangler types --env-namespace EnvBeforeFixup, and then in my env.d.ts overriding with the appropriate type:

interface Env extends EnvBeforeFixup {
  DO: DurableObjectNamespace<import("./app/do").DrizzleTestDO>;
}

This lets me have the correct type and not worry about overwriting it when I run npm run typegen in the future.

Example repo here: https://github.com/zwily/test-drizzle-durable-objects

Steps to reproduce

Please provide the following:

A git repo we can clone and run a test suite on, or which has a README with step-by-step instructions, is even better. In this case, please use the field below to provide a link to the minimal repro.

Please provide a link to a minimal reproduction

https://github.com/zwily/test-drizzle-durable-objects

Please provide any relevant error logs

No response

threepointone commented 1 month ago

Maybe wrangler types should accept an entrypoint, so you could say wrangler types --entry src/index.ts.

zwily commented 1 month ago

Maybe wrangler types should accept an entrypoint, so you could say wrangler types --entry src/index.ts.

Yes, that would do it. Want me to submit a PR?

threepointone commented 1 month ago

Tagging @andyjessop, I'll let the team take a call there.

penalosa commented 2 weeks ago

Adding an entrypoint to wrangler types sounds like a good solution here—PRs welcome @zwily!