Compare commits

...

35 Commits
main ... main

Author SHA1 Message Date
Trivernis e7c015e47b Merge pull request 'Remove w-screen from container' (#15) from punishedbernadetta-patch-1 into main
Reviewed-on: Trivernis/no-chromium#15
1 year ago
punishedbernadetta 7babf4f929 removed w-screen from container
It makes the page scroll vertically which is annoying. And w-screen isn't even needed to make the thing full screen.
1 year ago
trivernis 62132def6d
Fix the missing style of the redirect page 1 year ago
trivernis 9a7ffb2aca
Prerender static pages 1 year ago
trivernis 113d43bdaa
Fix main page prose max width 1 year ago
Trivernis 4418c4dfe0 Merge branch 'prod' into main 1 year ago
trivernis ea7ee26271
Add tailwind css classes 1 year ago
trivernis 295092f660
Move references to Articles 1 year ago
trivernis ddf5fd0ad5
Add short Web Environment Integrity explanation 1 year ago
Trivernis 60d1c27ac3 Merge pull request 'main' (#12) from main into prod
Reviewed-on: Trivernis/no-chromium#12
1 year ago
trivernis 11779ab348
Only one z-index can survive 1 year ago
Trivernis 05b0ec3c45 Merge pull request 'Give the popup window a z-index of 10' (#11) from CyanNex/no-chromium:main into main
Reviewed-on: Trivernis/no-chromium#11
1 year ago
Trivernis 0370269e52 Merge pull request 'Add z-index to popup' (#10) from main into prod
Reviewed-on: Trivernis/no-chromium#10
1 year ago
trivernis 01771ee3d3
Add z-index to popup 1 year ago
Nex 8739bc84cc
Give the popup window a z-index of 10 1 year ago
Trivernis 016e3a14c5 Merge pull request 'Add checking for user agent to popup script' (#9) from main into prod
Reviewed-on: Trivernis/no-chromium#9
1 year ago
trivernis c526911449
Add checking for user agent to popup script 1 year ago
Trivernis ee8e3f1062 Merge pull request 'main' (#8) from main into prod
Reviewed-on: Trivernis/no-chromium#8
1 year ago
trivernis c2e672ea29
Add custom server for CORS 1 year ago
trivernis 4a4d9b37e5
Restore original README 1 year ago
Trivernis c1c41b7c1f Merge pull request 'Allow CORS' (#7) from main into prod
Reviewed-on: Trivernis/no-chromium#7
1 year ago
trivernis 287a3d3e66
Allow CORS 1 year ago
Trivernis b472e7e7ce Merge pull request 'Fix popup script fetching from local domain' (#6) from main into prod
Reviewed-on: Trivernis/no-chromium#6
1 year ago
trivernis e6b7a9849f
Fix popup script fetching from local domain 1 year ago
Trivernis 7cb7042bc6 Merge pull request 'Add stop using chromium popup' (#5) from main into prod
Reviewed-on: Trivernis/no-chromium#5
1 year ago
trivernis 5d2ddea3c3
Add stop using chromium popup 1 year ago
Trivernis 13c42a8c55 Merge pull request 'Format main page' (#4) from main into prod
Reviewed-on: Trivernis/no-chromium#4
1 year ago
trivernis 15ce841dfa
Format main page
(kind of a dummy change)
1 year ago
Trivernis 293d66e1bc Merge pull request 'Add Svelte' (#3) from feature/svelte into main
Reviewed-on: Trivernis/no-chromium#3
1 year ago
trivernis cc8103ec84
Merge branch 'main' into feature/svelte 1 year ago
trivernis 67d0e1f6d0
Add footer with credits and website source 1 year ago
trivernis 50456aaf29
Change container to run svelte server 1 year ago
trivernis b42702640a
Move everything in place and add containerfile 1 year ago
trivernis 5b7fc1c22d
Initial svelte content 1 year ago
Trivernis 3f67d93922 Merge pull request 'Improvements to HTML and CSS' (#2) from punishedbernadetta/no-chromium:main into main
Reviewed-on: Trivernis/no-chromium#2
1 year ago

@ -0,0 +1,5 @@
node_modules
.git
build
Containerfile
.svelte-kit

@ -0,0 +1,13 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
package-lock.json
yarn.lock

@ -0,0 +1,30 @@
module.exports = {
root: true,
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:svelte/recommended',
'prettier'
],
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint'],
parserOptions: {
sourceType: 'module',
ecmaVersion: 2020,
extraFileExtensions: ['.svelte']
},
env: {
browser: true,
es2017: true,
node: true
},
overrides: [
{
files: ['*.svelte'],
parser: 'svelte-eslint-parser',
parserOptions: {
parser: '@typescript-eslint/parser'
}
}
]
};

10
.gitignore vendored

@ -0,0 +1,10 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
vite.config.js.timestamp-*
vite.config.ts.timestamp-*

@ -0,0 +1,2 @@
engine-strict=true
resolution-mode=highest

@ -0,0 +1,13 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
package-lock.json
yarn.lock

@ -0,0 +1,9 @@
{
"useTabs": true,
"singleQuote": false,
"trailingComma": "none",
"printWidth": 100,
"plugins": ["prettier-plugin-svelte"],
"pluginSearchDirs": ["."],
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
}

@ -0,0 +1,28 @@
FROM docker.io/node:19.5.0-alpine AS base
WORKDIR /app
COPY package.json package-lock.json ./
FROM base AS builder
# install dependencies
RUN npm ci
# Copy all local files into the image.
COPY . .
RUN npm run build
###
# Only copy over the Node pieces we need
# ~> Saves 35MB
###
FROM base
COPY --from=builder /app/build .
COPY ./server.js .
RUN npm ci --omit dev
ENV HOST=0.0.0.0
EXPOSE 3000
CMD ["node", "server.js"]

@ -1,62 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>No Chromium</title>
<link rel="stylesheet" href="style.css" />
<link rel="icon" href="favicon.ico" type="image/x-icon" sizes="any" />
</head>
<body>
<header class="banner">
<h1>No Chromium</h1>
<h2>Do not use Chromium</h2>
<h3>Use a different web browser</h3>
</header>
<main class="content">
<h2>What is Chromium?</h2>
<p>
Chromium is a web browser developed by Google. Many modern web browsers
use its codebase and extend upon it, for example:
</p>
<ul>
<li>Google Chrome</li>
<li>Opera</li>
<li>Microsoft Edge</li>
<li>Brave Browser</li>
<li>
<a href="https://en.wikipedia.org/wiki/Chromium_(web_browser)">
And many others
</a>
</li>
</ul>
<h2>Why is this a bad thing?</h2>
<p>
Chromium based browsers dominate the market. This means that any changes
Google makes to the Chromium code base are also present in the browsers
that build on it. As Chromium based browsers are the majority, websites
have to adapt. This also forces non chromium browsers like Firefox to
implement these changes. This gives Google the power to steer the web in
a direction they benefit from the most.
</p>
<h2>Examples</h2>
<ul>
<li>Web Environment Integrity</li>
<li>Widevine</li>
<li style="color: red">TODO...</li>
</ul>
<h2>What can I do</h2>
<p>
You should use alternative browsers like
<a href="https://www.mozilla.org/en-US/firefox/">Firefox</a> or, even
better, <a href="https://librewolf.net/">LibreWolf</a>
</p>
</main>
</body>
</html>

@ -0,0 +1,37 @@
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
listen [::]:80;
server_name localhost;
index index.html index.htm;
location / {
root /usr/share/nginx/html;
try_files $uri$args $uri$args/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}

4496
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -0,0 +1,42 @@
{
"name": "no-chromium",
"version": "0.0.1",
"private": true,
"scripts": {
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"lint": "prettier --plugin-search-dir . --check . && eslint .",
"format": "prettier --plugin-search-dir . --write ."
},
"devDependencies": {
"@sveltejs/kit": "^1.20.4",
"@typescript-eslint/eslint-plugin": "^5.45.0",
"@typescript-eslint/parser": "^5.45.0",
"autoprefixer": "^10.4.14",
"eslint": "^8.28.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-svelte": "^2.30.0",
"postcss": "^8.4.27",
"prettier": "^2.8.0",
"prettier-plugin-svelte": "^2.10.1",
"svelte": "^4.0.5",
"svelte-check": "^3.4.3",
"tailwindcss": "^3.3.3",
"tslib": "^2.4.1",
"typescript": "^5.0.0",
"vite": "^4.4.2"
},
"type": "module",
"dependencies": {
"@sveltejs/adapter-node": "^1.3.1",
"@tailwindcss/typography": "^0.5.9",
"cors": "^2.8.5",
"detect-browser": "^5.3.0",
"express": "^4.18.2",
"fetch-opengraph": "^1.0.36",
"sass": "^1.64.1"
}
}

@ -0,0 +1,6 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

@ -1,23 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>No Chromium</title>
<link rel="stylesheet" href="style.css" />
<link rel="icon" href="favicon.ico" type="image/x-icon" sizes="any" />
</head>
<body>
<div class="container">
<div class="banner">
<h1>No Chromium</h1>
<h2>This website does not accept chromium based browsers</h2>
<h3>Use a different web browser</h3>
<h4><a href="index.html">Why?</a></h4>
</div>
</div>
</body>
</html>

@ -0,0 +1,14 @@
import { handler } from "./handler.js";
import express from "express";
import cors from 'cors';
const app = express();
app.use("/popup/", cors());
// let SvelteKit handle everything else, including serving prerendered pages and static assets
app.use(handler);
app.listen(3000, () => {
console.log("listening on port 3000");
});

@ -0,0 +1,9 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
body {
min-height: 1vh;
min-height: 100vh;
margin: 0;
}

12
src/app.d.ts vendored

@ -0,0 +1,12 @@
// See https://kit.svelte.dev/docs/types#app
// for information about these interfaces
declare global {
namespace App {
// interface Error {}
// interface Locals {}
// interface PageData {}
// interface Platform {}
}
}
export {};

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>No Chromium</title>
%sveltekit.head%
</head>
<body data-sveltekit-preload-data="hover">
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>

@ -0,0 +1,18 @@
import {detect} from "detect-browser";
const browser = detect();
export function getBrowserName(): string {
return `${ browser.name[0].toUpperCase() }${ browser.name.substring(1) }`;
}
export function isChromium(): boolean {
switch (browser.name) {
case "chrome":
case "opera":
case "edge":
return true;
default:
return false;
}
}

@ -0,0 +1 @@
// place files you want to import through the `$lib` alias in this folder.

@ -0,0 +1,14 @@
<script>
import "../app.css";
import Footer from "./footer.svelte";
</script>
<style lang="scss">
.main {
margin-bottom: 2.6em;
}
</style>
<div class="main">
<slot/>
</div>
<Footer/>

@ -0,0 +1,112 @@
<script>
import Article from "./article.svelte";
</script>
<header class="container mx-auto mb-20 mt-40 text-center font-bold">
<h1 class="leading-normal text-7xl">No Chromium</h1>
<h3 class="leading-normal text-5xl">Use a different web browser</h3>
</header>
<main class="w-10/12 md:w-2/3 xl:w-1/2 mx-auto prose max-w-none">
<h2>What is Chromium?</h2>
<p>
Chromium is a web browser developed by Google. Many modern web browsers
use its codebase and extend upon it, for example:
</p>
<ul>
<li>Google Chrome</li>
<li>Opera</li>
<li>Microsoft Edge</li>
<li>Brave Browser</li>
</ul>
<a href="https://en.wikipedia.org/wiki/Chromium_(web_browser)" aria-label="Link to the Chromium Wikipedia page.">
More Information
</a>
<h2>Why is this a bad thing?</h2>
<p>
Chromium based browsers dominate the market. This means that any changes
Google makes to the Chromium code base are also present in the browsers
that build on it. As Chromium based browsers are the majority, websites
have to adapt. This also forces non chromium browsers like Firefox to
implement these changes. This gives Google the power to steer the web in
a direction they benefit from the most.
</p>
<h2>What can I do</h2>
<p>
You should use alternative browsers like
<a href="https://www.mozilla.org/en-US/firefox/" aria-label="Link to the Firefox download page.">
Firefox
</a>
or, even
better,
<a href="https://librewolf.net/" aria-label="Link to the LibreWolf website.">
LibreWolf
</a>.
</p>
<hr>
<h2>Examples</h2>
<section>
<h3>Web Environment Integrity</h3>
<p>
The Web Environment Integrity spec is a proposal by Google engineers
to add a mechanism to browsers that verifies them and the platform it's running on
to be trusted by third party (attester). This is often compared as being
<abbr title="Digital Rights Management">DRM</abbr> for Websites.
<br><br>
As an example Google Play is named as an attester for Android.
Of course this would enable Google to mark their own
Browser, Google Chrome, as trusted. Furthermore Google would be able to discourage the
use of Browsers that harm their business model (selling ads) like Firefox, a browser
that has a rich ecosystem of ad blockers and tracker protection.
<br><br>
On Windows Systems, Microsoft will likely play the role of the attester and
encourage the use of Edge. Which third would attest for a Browser to be trusted on
Linux distributions is not clear yet. There might be different attesters
being used in different distributions. More niche distros might have trouble
finding a third party to attest for their platform.
<br><br>
By implementing this spec Google is also forcing other browsers to do the same.
Browsers that don't implement the spec would simply not be trusted by websites
for demand the browser to proof it is trusted.
</p>
<details>
<summary>More Info</summary>
<ul>
<li>
<Article
url="https://vivaldi.com/blog/googles-new-dangerous-web-environment-integrity-spec/"
author="Julien Picalausa"
title = "Unpacking Googles new &quot;dangerous&quot; Web-Environment-Integrity specification"
/>
</li>
<li>
<Article
url="https://www.theregister.com/2023/07/25/google_web_environment_integrity/"
author="Thomas Claburn"
title="Google's next big idea for browser security looks like another freedom grab to some"
/>
</li>
<li>
<Article
url="https://github.com/RupertBenWiser/Web-Environment-Integrity/blob/main/explainer.md"
author= "Ben Wiser (Google), Borbala Benko (Google), Philipp Pfeiffenberger (Google), Sergey Kataev (Google)"
title="Web Environment Integrity Explainer"
/>
</li>
</ul>
</details>
</section>
<section>
<h3>FLOC</h3>
</section>
<section>
<h3>Widevine</h3>
</section>
</main>

@ -0,0 +1 @@
export const prerender = true;

@ -0,0 +1,13 @@
<script lang="ts">
export let url: string;
export let title: string;
export let author: string;
</script>
<a href="{ url }">
<span class="author">{ author }</span>
-
<i class="title">{ title }</i>
</a>

@ -0,0 +1,20 @@
<header class="w-10/12 md:w-2/3 xl:w-1/2 mx-auto mb-20 prose">
<div class="mb-10 mt-10"><a href="/">Back</a></div>
<h1>Credits</h1>
</header>
<main class="w-10/12 md:w-2/3 xl:w-1/2 mx-auto prose">
<h2><a href="https://tech.lgbt/@sara">Sara</a></h2>
<ul>
<li>Icons</li>
</ul>
<h2><a href="https://tech.lgbt/@punishedbernadetta">Punished Bernadetta</a></h2>
<ul>
<li>Style Improvements</li>
</ul>
<h2><a href="https://social.funkyfish.cool/@trivernis">Trivernis</a></h2>
<ul>
<li>Repository Owner</li>
</ul>
</main>

@ -0,0 +1 @@
export const prerender = true;

@ -0,0 +1,43 @@
<style lang="scss">
.footer {
height: 2.5em;
width: 100%;
position: fixed;
bottom: 0;
background-color: #FDF;
.footer-content {
display: block;
position: relative;
margin: 0.5em 1em;
width: calc(100% - 2em);
height: calc(100% - 1em);
* {
position: relative;
margin: auto;
}
.left {
float: left;
}
.right {
float: right;
}
a {
text-decoration: underline;
color: blue;
}
a:visited {
color: purple;
}
}
}
</style>
<footer class="footer">
<div class="footer-content">
<a class="left" href="/credits">Credits</a>
<a class="right" href="https://git.trivernis.net/Trivernis/no-chromium">Source</a>
</div>
</footer>

@ -0,0 +1,78 @@
<div id="no-chromium-head">
<style lang="scss">
#no-chromium-popup {
position: fixed;
display: flex;
height: 100vh;
width: 100vw;
top: 0;
left: 0;
background-color: rgba(0, 0, 0, 0.125);
font-family: Noto Sans, sans serif;
color: white;
z-index: 10;
.nc-popup-inner {
display: block;
position: relative;
margin: auto;
background-color: #FF6F00;
padding: 1em;
border-radius: 5px;
button {
border-style: none;
font-weight: bold;
background-colour: white;
font-size: 2em;
width: 100%;
cursor: pointer;
margin: 3px;
color: white;
a {
text-decoration: none;
color: white;
}
transition-duration: 0.1s;
&.nc-no {
background-color: #800;
&:hover {
background-color: #B00;
}
}
&.nc-ok {
background-color: #080;
&:hover {
background-color: #0B0;
}
}
&:hover {
}
}
}
}
</style>
</div>
<div id="no-chromium-body">
<div id="no-chromium-popup" style="display: none">
<div class="nc-popup-inner">
<center><h1>Stop using Chromium based Web Browsers</h1></center>
<a href="https://no-chromium.org/redirect"><button class="nc-no">No</button></a>
<button class="nc-ok" id="no-chromium-hide-button">Ok</button>
</div>
</div>
</div>

@ -0,0 +1,36 @@
<script lang="ts">
import { getBrowserName, isChromium } from "$lib/browser";
// import { browser } from "$app/environment";
import { onMount } from "svelte";
export let browserName: string;
export let chromium = true;
onMount(() => {
browserName = getBrowserName();
chromium = isChromium();
});
</script>
<div class="container flex mx-auto h-screen">
<div class="m-auto">
{#if browserName }
<center>
{#if chromium}
<h1 class="leading-normal lg:leading-normal text-4xl lg:text-7xl">{ browserName } is not supported by this Website</h1>
<h2 class="leading-normal lg:leading-normal text-3xl lg:text-6xl">Use a different web browser</h2>
<h4 class="leading-normal lg:leading-normal text-2xl lg:text-4xl">
<a class="underline text-blue visited:text-purple-600" href="/">Why?</a>
</h4>
{:else }
<h1 class="leading-normal lg:leading-normal text-4xl lg:text-7xl">Congrats, you're not using Chromium</h1>
<h2 class="leading-normal lg:leading-normal text-3xl lg:text-6xl">So why are you here?</h2>
<h4 class="leading-normal lg:leading-normal text-2xl lg:text-4xl">
<a class="underline text-blue visited:text-purple-600" href="/">More Info</a>
</h4>
{/if }
</center>
{/if }
</div>
</div>

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

@ -0,0 +1,26 @@
async function showNoChromiumPopup() {
if (navigator.userAgent.includes("Chrome") && localStorage.getItem("no-chromium-popup-shown") != "1") {
const divPage = document.createElement("div");
const response = await fetch("https://no-chromium.org/popup/");
divPage.innerHTML = await response.text();
for (const child of divPage.querySelectorAll("#no-chromium-head > *")) {
document.head.appendChild(child);
}
for (const child of divPage.querySelectorAll("#no-chromium-body > *")) {
document.body.appendChild(child);
}
document.querySelector("#no-chromium-popup").style = "z-index: 9999;";
document.querySelector("#no-chromium-hide-button").addEventListener("click", hideNoChromiumPopup);
}
}
function hideNoChromiumPopup() {
document.querySelector("#no-chromium-popup").remove();
localStorage.setItem("no-chromium-popup-shown", "1");
}
showNoChromiumPopup();

@ -0,0 +1,6 @@
<!DOCTYPE html>
<html>
<body>
<script type="text/javascript" src="/popup.js"></script>
</body>
</html>

@ -1,41 +0,0 @@
html {
font-family: Noto Sans, sans-serif;
box-sizing: border-box;
}
*, *:before, *:after {
box-sizing: inherit;
}
body {
min-height: 100vh;
margin: 0;
}
p {
line-height: 1.5rem;
}
.banner {
font-size: 2em;
margin: 0 auto 4rem;
text-align: center;
}
.content {
padding: 0 1rem;
margin: 0 auto;
max-width: 800px;
}
.container {
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
height: 100dvh;
}
.centered {
margin: auto;
}

@ -0,0 +1,18 @@
import adapter from '@sveltejs/adapter-node';
import { vitePreprocess } from '@sveltejs/kit/vite';
/** @type {import('@sveltejs/kit').Config} */
const config = {
// Consult https://kit.svelte.dev/docs/integrations#preprocessors
// for more information about preprocessors
preprocess: vitePreprocess(),
kit: {
// adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list.
// If your environment is not supported or you settled on a specific environment, switch out the adapter.
// See https://kit.svelte.dev/docs/adapters for more information about adapters.
adapter: adapter()
}
};
export default config;

@ -0,0 +1,13 @@
const plugin = require("tailwindcss/plugin");
/** @type {import('tailwindcss').Config} */
export default {
content: ["./src/**/*.{htm,js,svelte,ts}"],
theme: {
extend: {},
},
plugins: [
require('@tailwindcss/typography'),
],
}

@ -0,0 +1,17 @@
{
"extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": {
"allowJs": true,
"checkJs": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"strict": true
}
// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
//
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
// from the referenced tsconfig.json - TypeScript does not merge them in
}

@ -0,0 +1,6 @@
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [sveltekit()]
});
Loading…
Cancel
Save