Explicitely define server load and action types

This commit is contained in:
Thilo Hohlt
2024-08-05 14:38:44 +02:00
parent 2b3f0a80d2
commit fa500cf376
20 changed files with 55 additions and 27 deletions

View File

@@ -1,4 +1,6 @@
export const actions = { import type { Actions } from "./$types";
export const actions: Actions = {
default: async ({ request, cookies, fetch }) => { default: async ({ request, cookies, fetch }) => {
const data = await request.formData(); const data = await request.formData();

View File

@@ -1,8 +1,9 @@
<script lang="ts"> <script lang="ts">
import { enhance } from "$app/forms"; import { enhance } from "$app/forms";
import SuccessOrError from "$lib/components/SuccessOrError.svelte"; import SuccessOrError from "$lib/components/SuccessOrError.svelte";
import type { ActionData } from "./$types";
const { form } = $props(); const { form } = $props<{ form: ActionData }>();
</script> </script>
<SuccessOrError success={form?.success} message={form?.message} /> <SuccessOrError success={form?.success} message={form?.message} />

View File

@@ -1,4 +1,6 @@
export const actions = { import type { Actions } from "./$types";
export const actions: Actions = {
default: async ({ request, fetch }) => { default: async ({ request, fetch }) => {
const data = await request.formData(); const data = await request.formData();

View File

@@ -1,8 +1,9 @@
<script lang="ts"> <script lang="ts">
import { enhance } from "$app/forms"; import { enhance } from "$app/forms";
import SuccessOrError from "$lib/components/SuccessOrError.svelte"; import SuccessOrError from "$lib/components/SuccessOrError.svelte";
import type { ActionData } from "./$types";
const { form } = $props(); const { form } = $props<{ form: ActionData }>();
</script> </script>
<SuccessOrError success={form?.success} message={form?.message} /> <SuccessOrError success={form?.success} message={form?.message} />

View File

@@ -1,4 +1,6 @@
export const load = async ({ fetch, cookies, url }) => { import type { Actions, PageServerLoad } from "./$types";
export const load: PageServerLoad = async ({ fetch, cookies, url }) => {
const searchQuery = url.searchParams.get("website_search_query"); const searchQuery = url.searchParams.get("website_search_query");
const sortBy = url.searchParams.get("website_sort"); const sortBy = url.searchParams.get("website_sort");
@@ -57,7 +59,7 @@ export const load = async ({ fetch, cookies, url }) => {
}; };
}; };
export const actions = { export const actions: Actions = {
createWebsite: async ({ request, fetch, cookies }) => { createWebsite: async ({ request, fetch, cookies }) => {
const data = await request.formData(); const data = await request.formData();

View File

@@ -5,8 +5,9 @@
import { page } from "$app/stores"; import { page } from "$app/stores";
import Modal from "$lib/components/Modal.svelte"; import Modal from "$lib/components/Modal.svelte";
import SuccessOrError from "$lib/components/SuccessOrError.svelte"; import SuccessOrError from "$lib/components/SuccessOrError.svelte";
import type { ActionData, PageServerData } from "./$types";
const { form, data } = $props(); const { form, data } = $props<{ form: ActionData; data: PageServerData }>();
</script> </script>
<SuccessOrError success={form?.success} message={form?.message} /> <SuccessOrError success={form?.success} message={form?.message} />

View File

@@ -1,10 +1,12 @@
export const load = async ({ locals }) => { import type { Actions, PageServerLoad } from "./$types";
export const load: PageServerLoad = async ({ locals }) => {
return { return {
user: locals.user user: locals.user
}; };
}; };
export const actions = { export const actions: Actions = {
logout: async ({ cookies }) => { logout: async ({ cookies }) => {
cookies.delete("session_token", { path: "/" }); cookies.delete("session_token", { path: "/" });

View File

@@ -2,8 +2,9 @@
import { enhance } from "$app/forms"; import { enhance } from "$app/forms";
import Modal from "$lib/components/Modal.svelte"; import Modal from "$lib/components/Modal.svelte";
import SuccessOrError from "$lib/components/SuccessOrError.svelte"; import SuccessOrError from "$lib/components/SuccessOrError.svelte";
import type { ActionData, PageServerData } from "./$types";
const { data, form } = $props(); const { data, form } = $props<{ data: PageServerData; form: ActionData }>();
</script> </script>
<SuccessOrError success={form?.success} message={form?.message} /> <SuccessOrError success={form?.success} message={form?.message} />

View File

@@ -1,4 +1,6 @@
export const load = async ({ params, fetch, cookies }) => { import type { LayoutServerLoad } from "./$types";
export const load: LayoutServerLoad = async ({ params, fetch, cookies }) => {
const websiteData = await fetch(`http://localhost:3000/website?id=eq.${params.websiteId}`, { const websiteData = await fetch(`http://localhost:3000/website?id=eq.${params.websiteId}`, {
method: "GET", method: "GET",
headers: { headers: {

View File

@@ -1,6 +1,7 @@
import { handleFileUpload } from "$lib/server/utils.js"; import { handleFileUpload } from "$lib/server/utils.js";
import type { Actions, PageServerLoad } from "./$types";
export const load = async ({ params, fetch, cookies, url }) => { export const load: PageServerLoad = async ({ params, fetch, cookies, url }) => {
const globalSettingsData = await fetch( const globalSettingsData = await fetch(
`http://localhost:3000/settings?website_id=eq.${params.websiteId}&select=*,media(*)`, `http://localhost:3000/settings?website_id=eq.${params.websiteId}&select=*,media(*)`,
{ {
@@ -45,7 +46,7 @@ export const load = async ({ params, fetch, cookies, url }) => {
}; };
}; };
export const actions = { export const actions: Actions = {
updateGlobal: async ({ request, fetch, cookies, params, locals }) => { updateGlobal: async ({ request, fetch, cookies, params, locals }) => {
const data = await request.formData(); const data = await request.formData();

View File

@@ -3,8 +3,9 @@
import WebsiteEditor from "$lib/components/WebsiteEditor.svelte"; import WebsiteEditor from "$lib/components/WebsiteEditor.svelte";
import { ALLOWED_MIME_TYPES } from "$lib/utils"; import { ALLOWED_MIME_TYPES } from "$lib/utils";
import SuccessOrError from "$lib/components/SuccessOrError.svelte"; import SuccessOrError from "$lib/components/SuccessOrError.svelte";
import type { ActionData, PageServerData } from "./$types";
const { data, form } = $props(); const { data, form } = $props<{ data: PageServerData; form: ActionData }>();
</script> </script>
<SuccessOrError success={form?.success} message={form?.message} /> <SuccessOrError success={form?.success} message={form?.message} />

View File

@@ -1,4 +1,6 @@
export const load = async ({ params, fetch, cookies, url, parent }) => { import type { Actions, PageServerLoad } from "./$types";
export const load: PageServerLoad = async ({ params, fetch, cookies, url, parent }) => {
const searchQuery = url.searchParams.get("article_search_query"); const searchQuery = url.searchParams.get("article_search_query");
const sortBy = url.searchParams.get("article_sort"); const sortBy = url.searchParams.get("article_sort");
@@ -60,7 +62,7 @@ export const load = async ({ params, fetch, cookies, url, parent }) => {
}; };
}; };
export const actions = { export const actions: Actions = {
createArticle: async ({ request, fetch, cookies, params }) => { createArticle: async ({ request, fetch, cookies, params }) => {
const data = await request.formData(); const data = await request.formData();

View File

@@ -5,8 +5,9 @@
import { enhance } from "$app/forms"; import { enhance } from "$app/forms";
import Modal from "$lib/components/Modal.svelte"; import Modal from "$lib/components/Modal.svelte";
import SuccessOrError from "$lib/components/SuccessOrError.svelte"; import SuccessOrError from "$lib/components/SuccessOrError.svelte";
import type { ActionData, PageServerData } from "./$types";
const { data, form } = $props(); const { data, form } = $props<{ data: PageServerData; form: ActionData }>();
</script> </script>
<SuccessOrError success={form?.success} message={form?.message} /> <SuccessOrError success={form?.success} message={form?.message} />

View File

@@ -1,6 +1,7 @@
import { handleFileUpload } from "$lib/server/utils.js"; import { handleFileUpload } from "$lib/server/utils.js";
import type { Actions, PageServerLoad } from "./$types";
export const load = async ({ parent, params, cookies, fetch }) => { export const load: PageServerLoad = async ({ parent, params, cookies, fetch }) => {
const articleData = await fetch(`http://localhost:3000/article?id=eq.${params.articleId}`, { const articleData = await fetch(`http://localhost:3000/article?id=eq.${params.articleId}`, {
method: "GET", method: "GET",
headers: { headers: {
@@ -16,7 +17,7 @@ export const load = async ({ parent, params, cookies, fetch }) => {
return { website, article }; return { website, article };
}; };
export const actions = { export const actions: Actions = {
default: async ({ fetch, cookies, request, params, locals }) => { default: async ({ fetch, cookies, request, params, locals }) => {
const data = await request.formData(); const data = await request.formData();

View File

@@ -3,8 +3,9 @@
import WebsiteEditor from "$lib/components/WebsiteEditor.svelte"; import WebsiteEditor from "$lib/components/WebsiteEditor.svelte";
import { ALLOWED_MIME_TYPES } from "$lib/utils"; import { ALLOWED_MIME_TYPES } from "$lib/utils";
import SuccessOrError from "$lib/components/SuccessOrError.svelte"; import SuccessOrError from "$lib/components/SuccessOrError.svelte";
import type { ActionData, PageServerData } from "./$types";
const { data, form } = $props(); const { data, form } = $props<{ data: PageServerData; form: ActionData }>();
</script> </script>
<SuccessOrError success={form?.success} message={form?.message} /> <SuccessOrError success={form?.success} message={form?.message} />

View File

@@ -1,8 +1,9 @@
import { readFile, mkdir, writeFile } from "node:fs/promises"; import { readFile, mkdir, writeFile } from "node:fs/promises";
import { join } from "node:path"; import { join } from "node:path";
import { md } from "$lib/utils"; import { md } from "$lib/utils";
import type { Actions, PageServerLoad } from "./$types";
export const load = async ({ params, fetch, cookies, locals }) => { export const load: PageServerLoad = async ({ params, fetch, cookies, locals }) => {
const websiteOverviewData = await fetch( const websiteOverviewData = await fetch(
`http://localhost:3000/website_overview?id=eq.${params.websiteId}`, `http://localhost:3000/website_overview?id=eq.${params.websiteId}`,
{ {
@@ -24,7 +25,7 @@ export const load = async ({ params, fetch, cookies, locals }) => {
}; };
}; };
export const actions = { export const actions: Actions = {
publishWebsite: async ({ request, fetch, cookies, params, locals }) => { publishWebsite: async ({ request, fetch, cookies, params, locals }) => {
const data = await request.formData(); const data = await request.formData();
const websiteOverview = JSON.parse(data.get("website-overview") as string); const websiteOverview = JSON.parse(data.get("website-overview") as string);

View File

@@ -1,8 +1,9 @@
<script lang="ts"> <script lang="ts">
import { enhance } from "$app/forms"; import { enhance } from "$app/forms";
import WebsiteEditor from "$lib/components/WebsiteEditor.svelte"; import WebsiteEditor from "$lib/components/WebsiteEditor.svelte";
import type { ActionData, PageServerData } from "./$types";
const { data } = $props(); const { data, form } = $props<{ data: PageServerData; form: ActionData }>();
</script> </script>
<WebsiteEditor <WebsiteEditor

View File

@@ -1,4 +1,6 @@
export const load = async ({ locals }) => { import type { LayoutServerLoad } from "./$types";
export const load: LayoutServerLoad = async ({ locals }) => {
return { return {
user: locals.user user: locals.user
}; };

View File

@@ -1,7 +1,10 @@
<script lang="ts"> <script lang="ts">
import "../app.css"; import "../app.css";
import { page } from "$app/stores"; import { page } from "$app/stores";
const { data, children } = $props(); import type { LayoutServerData } from "./$types";
import type { Snippet } from "svelte";
const { data, children } = $props<{ data: LayoutServerData; children: Snippet }>();
const isProjectRoute = $derived($page.url.pathname.startsWith("/website")); const isProjectRoute = $derived($page.url.pathname.startsWith("/website"));
const routeName = $derived( const routeName = $derived(

View File

@@ -1,8 +1,8 @@
import adapter from "@sveltejs/adapter-node"; import adapter from "@sveltejs/adapter-node";
import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; import { vitePreprocess } from "@sveltejs/vite-plugin-svelte";
import { Config } from "@sveltejs/kit";
/** @type {import('@sveltejs/kit').Config} */ const config: Config = {
const config = {
// Consult https://kit.svelte.dev/docs/integrations#preprocessors // Consult https://kit.svelte.dev/docs/integrations#preprocessors
// for more information about preprocessors // for more information about preprocessors
preprocess: vitePreprocess(), preprocess: vitePreprocess(),