- Add twemoji as npm dependency instead of build download
- Package build assets with a Vite plugin instead of scripts
- Keep the eslint and prettier caches in one directory
This also upgrades dompurify to the latest version, outside our cooldown
window, for a security fix (verified safe with extra security checks).
Newer dompurify versions expose a bug where happy-dom renders one of our
custom elements incorrectly in tests, unlike real browsers. Switch the unit
test environment from happy-dom to jsdom to fix the failing tests.
Switch to a dynamic import in afterUpdate and drop
manualChunks so Rolldown auto-splits the lazy chunk.
Eager bundle drops from 1.3 MB to 610 KB gzipped.
Changes which were needed after the upgrade:
- Replace vite-plugin-virtual (vite 8 incompatible) with vite's
built-in `define` for the buildTimeConfig injection
- tsconfig: drop deprecated `baseUrl` (TS 5+ resolves `paths`
relative to tsconfig)
- Vitest 4: import `defineConfig` from `vitest/config` so `test`
is valid in vite configs
- Zod 4: rename `.errors` to `.issues`, make `ZodSchema` a
type-only import, drop the removed `SafeParseReturnType`
- Tighten/loosen generic casts in localStore to match stricter
zod 4 inference
- ESLint 9 `no-useless-assignment`: remove redundant initializers
and dead reassignments; disable the rule where Svelte's reactive
blocks confuse the analyser
- Svelte/eslint `prefer-svelte-reactivity`: disable for legacy
Svelte usages of URL / Set
- Misc naming-convention and prefer-const fixes
Replaces `input type="checkbox"` elements in Markdown with our new custom
IconSmall webcomponent.
Doesn't support disabled checkboxes yet, since there is no way to define
them in markdown.
The issue seems to have been linked to the fact that we triggers incorrect refresh
through fsEvents. Even tough there are no changes on the local file system,
it requests full reload after 1-2 min.
Disabling fsEvents in the vite.config.ts prevents this to happen and per extension,
avoid the problem.
source: https://stackoverflow.com/a/75238360
Signed-off-by: Sebastian Martinez <me@sebastinez.dev>
Also moves the HASH_ROUTING env variable from being modified inside the
hashRouter.spec.ts into the webserver config in the
playwright.config.ipfs.ts
Signed-off-by: Sebastian Martinez <me@sebastinez.dev>
It's not working with our current seed nodes and is confusing to users.
It also prevents us from upgrading transitive dependencies.
Signed-off-by: Rūdolfs Ošiņš <rudolfs@osins.org>
Includes the move from the `svelte-preprocess` package for preprocessing
to `@sveltejs/vite-plugin-svelte` which allows us to use Vite also for
preprocessing.
Also had to remove the `vite-plugin-rewrite-all` again since they don't
support vite@4. So I wrote the plugin myself and without the dependecies
used by `vite-plugin-rewrite-all`.
Signed-off-by: Sebastian Martinez <me@sebastinez.dev>
Playwright is more flexible and has better developer experience than Cypress.
We add end to end tests covering:
- project source browsing
- tree view
- commit list view
- commit view
- routing
- hash based
- history API based
- clipboard copy paste functionality
- seed view
- project search
- landing page view
- settings
Co-authored-by: Sebastian Martinez <me@sebastinez.dev>
Signed-off-by: Rūdolfs Ošiņš <rudolfs@osins.org>
We split some third party packages into their own bundles to reduce the
size of the index.js bundle.
We also don't need hmr ever in production.
Signed-off-by: Sebastian Martinez <me@sebastinez.dev>