Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

d.ts generation failed because of $$__sveltets_2_IsomorphicComponent naming conflict #2536

Open
targetlucked69 opened this issue Oct 12, 2024 · 8 comments
Labels
question A user question

Comments

@targetlucked69
Copy link

Describe the bug

Hello, is this not possible in Svelte? Seems like the compiler is having a meltdown

import _Button from './Button.svelte';
import ButtonLink from './ButtonLink.svelte';

const Button = Object.assign(_Button, {
    Link: ButtonLink,
});

export { UserButton };

Im getting this d.ts error when building in library mode

> [email protected] package
> svelte-kit sync && svelte-package && publint

d.ts type declaration files for the following files were likely not generated due to the following errors:
/tmp/my-lib/src/lib/components/Button/index.ts
  - Exported variable 'Button' has or is using name '$$__sveltets_2_IsomorphicComponent' from external module "/tmp/my-lib/src/lib/components/Button/Button.svelte" but cannot be named.
  - Exported variable 'Button' has or is using name '$$__sveltets_2_IsomorphicComponent' from external module "/tmp/my-lib/src/lib/components/Button/ButtonLink.svelte" but cannot be named
src/lib -> dist
@sveltejs/package found the following issues while packaging your library:
You are using SvelteKit-specific imports in your code, but you have not declared a dependency on `@sveltejs/kit` in your `package.json`. Add it to your `dependencies` or `peerDependencies`.

Sample usage in Svelte:

<script>
import { Button } from 'my-lib'
</script>

<Button>
    <Button.Link href="/somewhere" />
</Button>

Reproduction

  1. Create a SvelteKit app in library mode
  2. Re-export a component like:
import Button from './Button.svelte';

export const RenamedButton = Button;
  1. Run npm run build and see the console output error about d.ts

Logs

No response

System Info

System:
    OS: macOS 14.5
    CPU: (10) arm64 Apple M1 Pro
    Memory: 110.84 MB / 16.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 20.17.0 - ~/.local/state/fnm_multishells/40146_1728685539617/bin/node
    npm: 10.8.2 - ~/.local/state/fnm_multishells/40146_1728685539617/bin/npm
    pnpm: 9.12.0 - /opt/homebrew/bin/pnpm
    bun: 1.1.30 - ~/.bun/bin/bun
  Browsers:
    Chrome: 129.0.6668.100
    Safari: 17.5
  npmPackages:
    svelte: ^5.0.0-next.262 => 5.0.0-next.262

Severity

annoyance

@jasonlyu123 jasonlyu123 transferred this issue from sveltejs/svelte Oct 13, 2024
@dummdidumm
Copy link
Member

Can you provide the code for button and buttonlink?

@Rock1raw

This comment has been minimized.

@Rock1raw
Copy link

Rock1raw commented Nov 2, 2024

Can you explain to me what's going on?

@Rock1raw
Copy link

Rock1raw commented Nov 3, 2024

Hello

@huntabyte
Copy link
Member

huntabyte commented Nov 15, 2024

I've also run into this issue. The way I got it to shut up and work was to update your repro to the following:

import Button from './Button.svelte';

export const RenamedButton = Button as typeof Button

@dummdidumm
Copy link
Member

This is a general TypeScript limitation, for some reason it refuses to use typeof Thing and instead tries to replicate the type from the imported component. That does only work if all ingredients for that are exported. In this case it's $$__sveltets_2_IsomorphicComponent that's missing, but you could just as well create this error yourself if you would use an interface that is not exported.

The workaround that @huntabyte shows is the correct fix to solve this. Alternatively you can also do

import Button from './Button.svelte';

export const RenamedButton: typeof Button = Button

This forces TS to say "oh alright I'm just gonna use typeof TheImport as the type", which it could also do in the other case but for some reason does not.

@dummdidumm dummdidumm added question A user question and removed awaiting submitter labels Nov 16, 2024
@Rock1raw
Copy link

What are you do?

@Rock1raw

This comment has been minimized.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question A user question
Projects
None yet
Development

No branches or pull requests

4 participants